BerandaPemrograman Multimedia · UNU Cirebon
Mata Kuliah · 3 SKS · Semester Genap

Membangun Visual Novel dengan Ren'Py & Bantuan AI

Belajar dari nol: dari ide cerita, generate gambar pakai AI (Gemini & Nano Banana 2), sampai jadi game interaktif yang bisa dimainkan di HP. Tidak perlu jago coding dulu — kita mulai dari langkah paling dasar.

Dr. Indra Surya Permana, MM., M.Kom. Teknik Informatika — Filkom UNU Cirebon
14
Pertemuan terstruktur
70%
Praktik langsung
5
Topik dampak sosial
1
Game orisinal jadi

A.Apa yang akan kamu buat?

Di akhir semester, setiap mahasiswa (atau kelompok) menghasilkan satu Visual Novel sederhana — game cerita interaktif di mana pemain membaca dialog, melihat karakter & latar, lalu memilih jalan cerita. Minimal ada satu titik percabangan yang memecah cerita menjadi 2 ending berbeda.

Penilaian utama: logika yang benar, bukan cerita yang panjang Game pendek (3–5 menit) yang jalan mulus dan percabangannya berfungsi jauh lebih bernilai daripada cerita panjang yang error. Fokus ke kebenaran logika engine.

B.Peta belajar 14 pertemuan

Klik kartu mana pun untuk langsung membuka materinya.

01
Pengenalan Game Engine & Ren'Py
Kenapa Ren'Py, instalasi, struktur game
02
Desain Naratif & 5 Topik
Pilih topik sosial, susun premis & karakter
03
Desain Karakter AI & Mindmap
Generate karakter konsisten + petakan alur
04
Mindmap ke Logika Ren'Py
label, menu, jump — coding pertama
05
Background & Image Processing
Generate latar AI, bersihkan & resize aset
06
Scripting I: Dialog & Akting
define, say, show/hide, ekspresi, transisi
07
Audio & SFX (Suno AI)
Musik latar & efek suara di Ren'Py
08
UTS — Review Prototipe
Cek logika percabangan & aset dasar
09
Scripting II: Menu & Call
Pilihan bermakna, call/return, modular
10
Variabel & State (Flags)
Point system, if-else, mengingat pilihan
11
Visual Effects (ATL)
Animasi, gerak kamera, efek visual
12
Kustomisasi UI/UX
Textbox, quick menu, main menu sendiri
13
Python Lanjutan
Blok python untuk logika kompleks
14
Packaging & Build Android
Ekspor ke .exe (PC) & .apk (HP)

C.Senjata digital yang dipakai

Semua tool ini mudah diakses mahasiswa. Yang bertanda GRATIS bisa langsung dipakai tanpa bayar.

Ren'Py SDK GRATIS Visual Studio Code GRATIS Gemini (Nano Banana 2) GRATIS ChatGPT (alternatif gambar) GRATIS Canva (hapus background) GRATIS Suno AI (musik) GRATIS XMind (mindmap) GRATIS

D.Cara pakai materi ini

  1. Baca berurutan dari Pertemuan 1
    Tiap pertemuan dibangun di atas pertemuan sebelumnya. Jangan loncat.
  2. Tekan tombol salin pada kotak kode & prompt
    Setiap blok kode Ren'Py dan prompt AI punya tombol "Salin". Tempel langsung ke editor / AI-mu.
  3. Kerjakan kotak "Tugas Praktik" di tiap akhir bab
    Belajar coding itu seperti berenang — harus dipraktikkan, bukan cuma dibaca.
  4. Tandai pertemuan yang sudah selesai
    Tombol "Tandai selesai" di bawah tiap halaman akan menandai progresmu di sidebar.
Stuck? Tanya AI dengan kalimat terstruktur Kalau kode error, salin pesan error-nya lalu tanyakan ke AI (NotebookLM/Gemini/ChatGPT) dengan format: "Saya mahasiswa Teknik Informatika UNU Cirebon. Skrip Ren'Py saya error: [tempel error]. Bagaimana cara memperbaiki indentasi/sintaksisnya?"
Pertemuan 01

Pengenalan Game Engine & Kekuatan Ren'Py

Memahami apa itu game engine, kenapa kita memilih Ren'Py untuk game naratif, dan menyiapkan ruang kerja.

CPMK-1: Analisis ekosistem game engine CPL05: Desain aplikasi multi-platform
Dr. Indra Dosen Pengampu

"Bayangkan game engine seperti dapur. Semua bahan — gambar, suara, kode — dimasak jadi satu hidangan: game. Hari ini kita pilih dapur yang paling cocok untuk pemula yang mau bercerita."

1Apa itu Game Engine?

Game engine adalah perangkat lunak yang dirancang khusus untuk membuat dan mengembangkan video game. Daripada menulis ribuan baris kode dari nol untuk hal-hal mendasar, engine sudah menyediakannya. Fungsi utamanya:

Rendering

Menggambar grafik 2D/3D ke layar.

Physics

Mengatur tabrakan, gravitasi, gerakan.

Sound & Script

Memutar audio & menjalankan logika cerita.

Memory

Mengelola aset agar game tidak berat.

2Spektrum Game Engine

Engine itu banyak, dari yang super berat sampai yang sangat ringan. Posisikan dirimu: kita bukan mau bikin grafik film, tapi mau bercerita.

KategoriEngineBahasaCocok untuk
The Giants (berat)Unreal, UnityC++, C#Game AAA, grafik realistis, butuh PC kencang
The Accessible (ringan)Godot, GDevelopGDScript / no-codeIndie 2D, prototipe cepat
The SpecialistRen'PyPythonVisual Novel & cerita interaktif

3Mengapa Ren'Py? (The "Why")

Entry barrier rendah

Tidak perlu laptop spek tinggi. Jalan di perangkat sederhana.

Berbasis Python

Python = bahasa populer & relevan untuk karier IT. Belajar VN sekalian belajar Python.

Fokus cerita

Sangat efektif menyampaikan edukasi/pesan lewat cerita interaktif.

Multi-platform

Sekali buat → jalan di Windows, Mac, Linux, Android, iOS.

4Struktur Multimedia dalam Game

Sebuah Visual Novel sebenarnya hanya gabungan 4 lapisan. Memahami ini membuat seluruh mata kuliah ini terasa sederhana:

LapisanIsiDibahas di
VisualBackground, sprite karakter, UIP3, P5, P12
AudioMusik latar (BGM), efek suara (SFX)P7
LogicAlur cerita & percabangan (script)P4, P6, P9, P10
InteraktivitasPilihan (choices) yang mengubah hasilP4, P9

5Langkah Konkret: Instal Ren'Py

  1. Buka renpy.org → menu Download
    Unduh Ren'Py SDK versi terbaru (8.x) sesuai sistem operasimu.
  2. Ekstrak ke folder permanen
    Windows: ekstrak lalu jalankan renpy.exe. Mac: salin SELURUH folder ke /Applications — jangan pindahkan app keluar foldernya, nanti tidak jalan.
  3. Buka Launcher → "Create New Project"
    Beri nama proyek (tanpa spasi, misal: visualnovel_ku).
  4. Pilih resolusi 1280 × 720
    Ini titik tengah terbaik: tajam tapi tidak membebani memori.
  5. Pasang Visual Studio Code sebagai editor
    Di Launcher, set text editor ke VS Code. Penting karena Ren'Py sangat sensitif terhadap spasi (indentasi).
Aturan paling penting seumur hidup di Ren'Py Ren'Py adalah pembungkus Python, jadi INDENTASI (spasi) menentukan logika. Salah satu spasi saja = program error. Selalu gunakan 4 spasi, bukan tab.
Cek Pemahaman
Klik jawaban yang menurutmu benar.
1. Mengapa Ren'Py cocok untuk mahasiswa pemula di mata kuliah ini?
2. Apa akibat salah satu spasi pada blok kode Ren'Py?
Tugas Praktik P1 Sebelum P2
  • Instal Ren'Py SDK dan VS Code di perangkatmu.
  • Buat satu proyek baru beresolusi 1280×720.
  • Tekan tombol "Launch Project" dan mainkan game contoh bawaan ("The Question") sampai tamat.
  • Screenshot layar game yang berhasil jalan sebagai bukti.
Sudah paham dasar game engine & berhasil instal Ren'Py?
Pertemuan 02

Desain Naratif: Memilih Topik & Menyusun Premis

Sebelum menyentuh kode, kita tentukan dulu cerita apa yang mau dibuat. Cerita yang baik dibangun di atas pesan yang jelas.

CPMK-2: Merancang narasi interaktif Tools: XMind / Google Docs
Dr. Indra Dosen Pengampu

"Game terbaik bukan yang grafiknya paling bagus, tapi yang pesannya paling kena. Kita pakai medium game untuk berbicara soal hal-hal nyata di sekitar kita."

1Lima Topik Dampak Sosial

Mata kuliah ini selaras dengan nilai-nilai Ahlussunnah wal Jama'ah An-Nahdliyah dan isu sosial krusial. Pilih satu topik berikut sebagai jantung ceritamu:

Ke-NU-an

Nilai toleransi, ukhuwah, & tradisi pesantren.

Pencegahan TPKS

Tindak Pidana Kekerasan Seksual & cara melapor.

Wawasan Kebangsaan

Cinta tanah air, Bhinneka Tunggal Ika.

Pencegahan Judi Online

Bahaya slot & pinjol bagi mahasiswa.

Pencegahan Bullying

Perundungan di kampus & media sosial.

2Rumus Premis: 1 Kalimat yang Kuat

Premis adalah inti cerita dalam satu kalimat. Gunakan rumus sederhana ini:

SIAPA(tokoh utama) MASALAH(konflik) PILIHAN(keputusan) KONSEKUENSI(pelajaran)
Setiap cerita kita = Siapa + Masalah + Pilihan + Konsekuensi
Contoh premis jadi (topik Judi Online) "Andi, mahasiswa yang kehabisan uang semester karena main slot, harus memilih antara jujur pada temannya atau diam-diam pakai pinjol — dan pilihan itu menentukan masa depannya."

3Bantuan AI untuk Brainstorming Cerita

Bingung mulai dari mana? Pakai AI (Gemini atau ChatGPT) sebagai partner diskusi. Salin prompt ini, ganti bagian kuning sesuai topikmu:

Gemini / ChatGPTbrainstorm-cerita
Kamu adalah penulis naskah game edukasi. Aku mahasiswa Teknik Informatika UNU Cirebon membuat Visual Novel pendek (durasi 3-5 menit) bertema pencegahan judi online. Buatkan 3 ide premis singkat. Setiap premis harus berisi: 1. Nama & profil tokoh utama (mahasiswa) 2. Konflik utama yang relatable 3. Satu titik keputusan (decision point) yang memecah cerita jadi 2 ending: 1 ending baik dan 1 ending buruk 4. Pesan edukasi yang ingin disampaikan Gunakan bahasa Indonesia yang natural dan sesuai budaya kampus.

4Output Pertemuan Ini

Yang kamu kumpulkan di akhir P2 adalah satu dokumen Google Docs berisi:

ElemenIsi
TopikSatu dari 5 topik sosial
Premis1–2 kalimat inti cerita
Tokoh (min. 2)Nama, peran (protagonis/antagonis), 1 baris sifat
Titik keputusan1 pilihan utama → 2 ending berbeda
Cek Pemahaman
Klik jawaban yang benar.
1. Apa fungsi premis dalam pembuatan game?
2. Minimal berapa ending yang harus dihasilkan satu titik keputusan?
Tugas Praktik P2 Setor ke Drive kelompok
  • Pilih 1 topik sosial dan tulis premis 1–2 kalimat.
  • Daftar minimal 2 tokoh dengan peran & sifatnya.
  • Tentukan 1 titik keputusan dan deskripsikan 2 ending-nya (baik & buruk).
  • Kirim link Google Docs ke email dosen: indra.surya.permana@unucirebon.ac.id
Premis & tokoh ceritamu sudah jadi?
Pertemuan 03

Desain Karakter AI yang Konsisten & Mindmap Alur

Rahasia karakter game profesional: wajahnya tetap sama di setiap adegan. Kita pakai pipeline AI untuk mengunci identitas karakter, lalu memetakan alurnya.

CPMK-3: Produksi aset visual dengan AI Tools: Gemini (Nano Banana 2), XMind
Dr. Indra Dosen Pengampu

"Masalah AI gambar nomor satu: minta wajah yang sama dua kali, hasilnya beda orang. Hari ini kalian belajar 'menahan' AI agar karakternya konsisten — pakai JSON sebagai DNA digital."

1Pipeline 3 Tahap: Canvas → Logic → Renderer

Daripada asal generate, kita pakai alur kerja terstruktur. Ini kunci agar karakter Andi di adegan 1 sama persis dengan Andi di adegan 10.

Nano Banana 2 The Canvas eksplorasi & kunci model sheet Gemini The Logic Engine ubah gambar jadi JSON kaku Gemini FLOW The Renderer gabung referensi + JSON
Ekosistem toolstack: memadukan kreativitas (Canvas) dengan logika (JSON) untuk output 100% konsisten

2Tier 1 — Buat "Model Sheet" (Referensi Induk)

Mulai dari satu kalimat identitas. Tujuannya menciptakan "aktor" dasar, bukan adegan. Mahasiswa biasa pakai Gemini (mode buat gambar / Nano Banana 2) atau ChatGPT.

Gemini · Nano Banana 2tier-1-model-sheet
Buat character model sheet (lembar referensi) dengan latar belakang putih polos. Tokoh: Pemuda 20 tahun bernama Andi, mahasiswa, gaya visual novel anime, rambut hitam pendek berantakan, memakai hoodie abu-abu, ekspresi netral. Tampilkan dari 3 sudut: depan, samping, belakang (full body). Konsisten satu karakter. High detail, clean line art.
Simpan sebagai Master_Reference.png Inilah "aktor utama" kalian. Semua adegan berikutnya akan mengacu ke file ini agar wajahnya tidak berubah-ubah.

3Tier 2 — Kunci Identitas ke Format JSON

Minta AI menganalisis gambar referensi dan menguncinya jadi data terstruktur. Ini mencegah AI "berhalusinasi" mengubah bentuk wajah. Upload Master_Reference.png ke Gemini lalu kirim prompt ini:

Gemini · The Logic Enginetier-2-lock-json
Analisis gambar karakter ini. Buatkan profil JSON yang mengunci atribut fisik persisnya (hair_style, hair_color, eye_color, jawline_type, outfit_base). Tujuannya agar karakter bisa di-generate ulang dengan konsisten. Berikan hanya JSON-nya.

AI akan membalas dengan "DNA digital" karaktermu, kira-kira seperti ini:

andi_dna.json
{
  "character_id": "andi_01",
  "facial_geometry": {
    "jawline": "soft_v_shape",
    "eye_shape": "large_almond",
    "eye_color": "dark_brown"
  },
  "hair": "short_messy_black",
  "outfit_base": "grey_hoodie",
  "expression": "neutral"
}

4Tier 3 & 4 — Bikin Variasi Ekspresi

Untuk membuat ekspresi baru (sedih, marah, senyum), cukup ubah satu baris di JSON lalu gabungkan dengan gambar induk. Karakter tetap orang yang sama, hanya wajahnya berubah.

Gemini FLOW · Renderertier-4-expression
[Gunakan gambar Master_Reference.png sebagai acuan wajah] Terapkan parameter JSON ini: { "expression": "crying_sad" } Render ulang karakter yang sama persis dengan ekspresi tersebut. Close-up emosional, latar belakang transparan.
Mengapa cara ini penting? Visual novel butuh banyak ekspresi dari karakter yang SAMA (senyum, sedih, kaget). Dengan teknik JSON, kalian punya "set ekspresi" yang konsisten — bukan 5 orang berbeda yang kebetulan pakai hoodie sama.

5Memetakan Alur dengan Mindmap (XMind)

Sebelum coding, gambar dulu alur ceritamu sebagai peta. Setiap kotak = adegan, setiap garis = perpindahan. Inilah cetak biru yang nanti diterjemahkan ke kode di P4.

START Andi kehabisan uang Pilihan A: Cerita ke teman→ GOOD ENDING Pilihan B: Pakai pinjol→ BAD ENDING pilih A pilih B
Mindmap "Pilihan Andi": 1 titik keputusan → 2 rute → 2 ending. Inilah struktur minimal yang wajib.
Cek Pemahaman
Klik jawaban yang benar.
1. Apa fungsi mengubah karakter menjadi format JSON?
2. Dalam mindmap, garis yang menghubungkan antar kotak nantinya menjadi...
Tugas Praktik P3 Sebelum P4
  • Generate Master_Reference.png untuk minimal 1 tokoh utama pakai Gemini/Nano Banana 2.
  • Minta AI membuat profil JSON karaktermu, lalu buat minimal 2 variasi ekspresi (mis. netral & sedih).
  • Gambar mindmap alur ceritamu di XMind dengan minimal 1 titik keputusan & 2 ending.
  • Pastikan art style karakter konsisten (semua anime, atau semua realistis — jangan dicampur).
Karakter konsisten & mindmap alur sudah jadi?
Pertemuan 04

Transformasi Mindmap ke Logika Ren'Py

Coding pertamamu! Kita ubah peta cerita (mindmap) menjadi kode yang berjalan. Hanya butuh 3 perintah inti: label, menu, jump.

CPMK-4: Implementasi logika pemrograman Studi Kasus: "Pilihan Andi"
Dr. Indra Dosen Pengampu

"Logika yang jernih di atas kertas adalah kunci dari aplikasi yang melesat di layar. Hari ini kalian buktikan: mindmap kemarin tinggal kita 'terjemahkan' satu lawan satu jadi kode."

1Aturan Emas: Pemetaan 1-ke-1

Inilah jembatan ajaib dari gambar ke kode. Setiap elemen mindmap punya padanan kode yang pasti:

Elemen MindmapPerintah Ren'PyArti
Kotak / Nodelabel nama:Penanda lokasi adegan (seperti pin GPS)
Garis / Edgejump namaPindah ke adegan lain (teleportasi)
Cabang / Decisionmenu:Pemain memilih jalan cerita
Aturan penamaan label Nama label TIDAK BOLEH pakai spasi, harus diawali huruf, dan case-sensitive: label Start berbeda dari label start. Pakai garis bawah: label rute_pinjol. Titik masuk wajib game selalu label start:.

2Coba Dulu: Simulator Cerita Bercabang

Sebelum lihat kodenya, mainkan dulu hasil akhirnya. Klik pilihan dan rasakan bagaimana satu keputusan memecah cerita. Inilah yang akan kamu bangun.

Pilihan Andi — Demo Interaktif
label start
Andi

Uang semesterku habis buat main slot... besok deadline bayar. Aku harus gimana?

3Bedah Kode: Bagian Pembuka

Buka file script.rpy di proyekmu. Mulai dari titik masuk wajib, label start:. Perhatikan indentasi 4 spasi.

script.rpy
# Definisi tokoh (dibahas detail di P6)
define a = Character("Andi", color="#c8ffc8")

label start:
    scene bg kamar          # tampilkan latar kamar kost
    show andi sedih          # tampilkan sprite Andi ekspresi sedih
    a "Uang semesterku habis buat main slot... aku harus gimana?"
    jump titik_pilihan       # lompat ke adegan pilihan

4Bedah Kode: Struktur Menu (Percabangan)

Blok menu: memaksa game berhenti & menunggu pemain memilih. Setiap pilihan diakhiri titik dua, lalu di bawahnya (menjorok) ada perintah jump.

script.rpy
label titik_pilihan:
    a "Apa yang harus kulakukan?"
    menu:
        "Cerita jujur ke teman, minta saran":
            jump rute_jujur
        "Diam-diam pinjam uang lewat pinjol":
            jump rute_pinjol

5Bedah Kode: Dua Rute & Dua Ending

script.rpy
label rute_jujur:
    scene bg kampus
    show rizki senyum
    "Rizki" "Untung kamu cerita. Ayo ke bagian kemahasiswaan, ada keringanan UKT."
    show andi lega
    a "Terima kasih, Riz. Aku kapok main judi online."
    "Andi belajar bahwa jujur & minta bantuan adalah keputusan terkuat."
    jump tamat
script.rpy
label rute_pinjol:
    scene bg kamar
    show andi cemas
    a "Pinjol cair... tapi bunganya mencekik. Utangku malah menumpuk."
    "Sebulan kemudian, Andi terjebak utang yang jauh lebih besar."
    "BAD ENDING: Jalan pintas sering jadi jebakan."
    jump tamat

label tamat:
    "TAMAT"
    return   # kembali ke main menu
Konvergensi: trik agar tidak menulis ribuan label Perhatikan kedua rute sama-sama jump tamat. Menggabungkan kembali alur di satu titik akhir membuat kode efisien. Kamu tidak perlu menulis ending terpisah berkali-kali.

6Menjalankan & Membaca Error

  1. Simpan file (Ctrl+S) di VS Code
    Ren'Py membaca ulang file setiap kali disimpan.
  2. Klik "Launch Project" di Launcher
    Kalau ada error, layar akan menampilkan baris & jenis kesalahannya.
  3. Error paling umum: indentasi
    Pesan seperti expected a statement atau inconsistent indentation = cek spasimu. Harus 4 spasi konsisten.
  4. Stuck? Salin error ke AI
    Tempel pesan error ke NotebookLM/Gemini dengan format terstruktur, minta perbaikan sintaksis.
Cek Pemahaman
Klik jawaban yang benar.
1. Label mana yang WAJIB ada agar game bisa dijalankan?
2. Apa yang dilakukan perintah jump?
Tugas Praktik P4 Selesai di kelas
  • Tulis ulang mindmap-mu (dari P3) menjadi kode Ren'Py: minimal 1 menu: dengan 2 jump.
  • Pastikan ada label start:, 2 rute berbeda, dan ditutup return.
  • Jalankan dan pastikan kedua pilihan menghasilkan ending berbeda.
  • Tantangan: tambahkan pilihan ke-3 (mis. "Cari kerja paruh waktu") dengan rute & ending-nya sendiri.
Percabangan ceritamu sudah berjalan di Ren'Py?
Pertemuan 05

Background & Image Processing dengan AI

Membangun dunia game: bagaimana menghasilkan latar (background) yang indah & konsisten dengan AI, lalu memolesnya agar siap pakai di Ren'Py.

CPMK-3: Produksi aset visual AI Tool: Gemini · Nano Banana 2 · Canva
Dr. Indra Dosen Pengampu

"Karakter butuh panggung. Hari ini kita bangun dunianya. Ingat satu hukum: latar dan karakter harus 'satu nafas' gaya seninya. Anime ketemu anime, jangan anime ketemu foto realistis."

1Alur Kerja: Dari Prompt ke Layar Game

Membuat background bukan sekali jadi. Ada 3 tahap yang harus dilewati setiap aset latar:

1. GenerateGemini / Nano Banana 2 membuat gambar dari prompt teks. Atur rasio 16:9.
2. PolesCanva: rapikan warna (color grading), crop tepat 16:9, perbaiki detail.
3. EksporSimpan sebagai .webp ke folder game/images/ proyek Ren'Py.

2Rumus Prompt Background yang Ampuh

Background yang bagus lahir dari prompt terstruktur. Gabungkan 4 unsur ini, selalu dengan urutan yang sama:

Tempat classroom + Gaya Seni anime style + Cahaya/Waktu sunset light + Kualitas 4k, --ar 16:9
Gemini · Nano Banana 2background-kelas
A high school classroom interior, empty desks and chairs, large windows, anime visual novel background style, warm sunset lighting coming through the windows, soft shadows, no people, highly detailed, 4k, aspect ratio 16:9
Selalu tambahkan "no people" Untuk background, minta AI menghasilkan latar KOSONG tanpa orang. Karaktermu nanti ditempel terpisah lewat perintah show di Ren'Py. Background + karakter dipisah supaya bisa dipakai ulang di banyak adegan.

3Hukum Konsistensi Gaya Seni

Ini kesalahan nomor satu pemula: mencampur gaya. Game terlihat amatir jika karakter bergaya anime ditempel di latar foto realistis. Pegang teguh matriks ini:

AsetBolehJangan
Karakter Andianime stylefoto realistis
Latar kamar kostanime stylerender 3D / foto
Latar kampusanime stylecat air / kartun barat
Tips: kunci "art style" di awal proyek Tentukan satu kalimat gaya, misalnya "clean anime visual novel style, soft cel shading", lalu TEMPELKAN kalimat itu di SETIAP prompt — karakter maupun background. Ini menjaga seluruh game tampak satu kesatuan.

4Rasio 16:9 — Wajib!

Layar game Ren'Py kita 1280×720, yaitu rasio 16:9 (landscape/lebar). Jika kamu generate gambar rasio 1:1 (kotak), hasilnya akan ada garis hitam di kiri-kanan (black bars) saat dipasang.

Benar: 16:9
Tambahkan --ar 16:9 atau pilih rasio Landscape / Widescreen di pengaturan AI. Ukuran ideal 1280×720 atau 1920×1080.
Salah: 1:1
Gambar kotak akan terpotong atau muncul bilah hitam. Hindari rasio kotak untuk background.

5Finishing di Canva

Setelah gambar jadi, poles agar sempurna. Canva gratis dan mudah dipakai:

  1. Unggah gambar AI ke Canva
    Buat desain ukuran 1280×720 px (Custom Size), lalu seret gambarmu ke kanvas.
  2. Crop pas 16:9
    Pastikan gambar menutupi seluruh kanvas tanpa ruang kosong.
  3. Color grading (atur warna)
    Pakai menu "Edit Photo" → sesuaikan brightness/contrast agar suasana pas (misal kamar kost terasa muram).
  4. Ekspor sebagai WebP atau PNG
    Download → pilih format. .webp ukurannya kecil & ringan, ideal untuk game.
  5. Simpan ke folder proyek
    Letakkan di nama_proyek/game/images/. Beri nama jelas: bg_kamar.webp, bg_kampus.webp.
Sentuhan lokal Cirebon Ingin latar khas daerah? Coba prompt: "traditional Cirebon batik megamendung pattern wall, warung interior, anime style". Memberi identitas lokal pada game-mu — nilai tambah di mata penilai.

6Memanggil Background di Ren'Py

Setelah file bg_kamar.webp ada di folder images, panggil dengan perintah scene. Ren'Py otomatis menemukan file dari namanya.

script.rpy
label start:
    scene bg kamar with fade     # file: bg_kamar.webp, muncul dengan transisi fade
    "Suasana kamar kost terasa sepi malam itu."
    scene bg kampus with dissolve  # ganti latar ke kampus
    "Keesokan harinya, Andi berangkat ke kampus."
Aturan penamaan file gambar Nama file bg_kamar.webp dipanggil dengan scene bg kamar (garis bawah jadi spasi). Huruf kecil semua, tanpa spasi pada nama file. Ren'Py mencocokkan otomatis.
Cek Pemahaman
1. Mengapa background sebaiknya dibuat tanpa karakter di dalamnya?
2. Rasio yang benar untuk background game Ren'Py adalah?
Tugas Praktik P5 Aset wajib MVP
  • Generate 2 background (mis. kamar kost & kampus) dengan gaya seni yang sama, rasio 16:9.
  • Poles di Canva, ekspor .webp, simpan ke game/images/.
  • Pasang di script: scene bg kamar dan scene bg kampus dengan transisi.
  • Tantangan: buat 1 background bernuansa lokal Cirebon.
Dunia game-mu sudah punya latar yang konsisten?
Pertemuan 06

Scripting Dialog & Visual Acting

Menghidupkan tokoh: bagaimana karakter berbicara, muncul di posisi tertentu, dan berganti ekspresi seiring emosi cerita.

CPMK-4: Scripting interaktif Studi Kasus: Dialog "Pilihan Andi"
Dr. Indra Dosen Pengampu

"Karakter yang baik bukan patung. Dia masuk dari kiri, menatap kita, lalu wajahnya berubah sedih saat menceritakan masalahnya. Itulah 'visual acting' — dan kalian sutradaranya."

1Mendefinisikan Tokoh dengan Character()

Sebelum tokoh bisa bicara, dia harus didaftarkan. Letakkan baris ini di ATAS file (sebelum label start:). Warna membantu pemain membedakan siapa yang bicara.

script.rpy
# Daftarkan tokoh di bagian atas file
define a = Character("Andi", color="#7ed0ff")
define r = Character("Rizki", color="#ffd07e")
define n = Character(None)   # narator, tanpa nama

label start:
    n "Malam itu hujan turun di luar kost."
    a "Aku benar-benar bingung, Ki."
    r "Tenang, cerita aja dulu masalahnya."
Singkatan itu praktis Kita pakai a untuk Andi dan r untuk Rizki agar penulisan dialog cepat. Tokoh n dengan None adalah narator — teks tanpa nama yang menjelaskan suasana.

2Menampilkan & Memposisikan Karakter

Perintah show menampilkan sprite karakter. Tambahkan posisi at left, at center, atau at right agar mereka berdiri di tempat yang pas.

at left at center at right
script.rpy
label start:
    scene bg kamar
    show andi senyum at left      # Andi muncul di kiri, ekspresi senyum
    a "Hai, akhirnya kamu datang juga."
    show rizki normal at right    # Rizki muncul di kanan
    r "Maaf telat, tadi macet."

3Sistem Ekspresi: Tag + Attribute

Inilah kekuatan penamaan dari P3. Jika kamu punya file andi_senyum.webp dan andi_sedih.webp, Ren'Py menganggap "andi" sebagai tag dan "senyum"/"sedih" sebagai ekspresi. Mengganti ekspresi cukup show andi sedih — otomatis menimpa yang lama di posisi yang sama.

script.rpy
    show andi senyum at center
    a "Awalnya semua baik-baik saja."
    show andi sedih              # wajah berubah jadi sedih, posisi tetap
    a "Tapi lalu aku terjebak judi online..."
    show andi nangis with dissolve  # ganti ekspresi dengan transisi halus
Mengapa ini ajaib? Karena nama tag-nya sama (andi), Ren'Py tahu kamu mengubah karakter yang SAMA, bukan menambah karakter baru. Wajah berganti mulus tanpa karakter berpindah tempat. Inilah hasil dari pipeline karakter konsisten di P3.

4Transisi & Jeda Dramatis

Gunakan with untuk transisi visual, dan {w} untuk jeda di tengah kalimat — menciptakan ketegangan.

PerintahEfek
with dissolveGambar berganti lembut (memudar)
with fadeLayar gelap dulu, lalu muncul (ganti adegan)
hide andiSembunyikan karakter (keluar layar)
"Aku... {w} tidak tahu."Jeda di tengah kalimat untuk efek dramatis

5Studi Kasus Lengkap: Adegan Curhat

Gabungan semua: latar, dua tokoh, ekspresi berubah, dan transisi. Inilah satu adegan utuh yang siap pakai.

script.rpy
label adegan_curhat:
    scene bg kamar with fade
    show andi sedih at center
    a "Ki, aku harus jujur... {w} aku kalah banyak di judi online."
    show rizki kaget at right with dissolve
    r "Apa?! Sejak kapan kamu main begituan?"
    show andi nangis
    a "Sebulan ini. Uang semesterku habis."
    show rizki tegas with dissolve
    r "Kita cari jalan keluar bareng. Jangan ambil keputusan gegabah."
    return
Cek Pemahaman
1. Untuk mengubah ekspresi Andi dari senyum ke sedih, kita tulis?
2. Apa fungsi {w} di tengah dialog?
Tugas Praktik P6 Aset wajib MVP
  • Daftarkan minimal 2 tokoh dengan Character() dan warna berbeda.
  • Buat 1 adegan dialog: karakter muncul di posisi (left/right), bicara, lalu ganti ekspresi minimal sekali.
  • Gunakan minimal 1 transisi with dissolve dan 1 jeda {w}.
  • Tantangan: buat adegan bertema pencegahan bullying atau TPKS sesuai topikmu.
Tokohmu sudah bisa "berakting" di layar?
Pertemuan 07

Audio & Sound Effect dengan AI

Suara mengubah segalanya. Musik latar membangun emosi, efek suara memberi "rasa" pada aksi. Kita buat musik dengan Suno AI dan pasang di Ren'Py.

CPMK-3: Produksi aset audio AI Tool: Suno AI · Audacity
Dr. Indra Dosen Pengampu

"Coba tonton film horor tanpa suara — tidak seram, kan? Audio adalah setengah dari emosi. Hari ini kita beri 'jiwa' pada game lewat musik dan efek suara."

1Dua Jenis Suara dalam Game

Music (BGM)
Musik latar yang berputar terus (loop). Membangun suasana: tegang, sedih, ceria. Perintah: play music.
Sound (SFX)
Efek suara sekali bunyi: pintu diketuk, notifikasi HP, langkah kaki. Perintah: play sound.

2Membuat Musik dengan Suno AI

Suno AI mengubah deskripsi teks menjadi musik utuh. Buka suno.com, login, lalu beri prompt suasana yang kamu mau. Untuk game, minta versi instrumental (tanpa vokal) agar tidak mengganggu dialog.

Suno AIbgm-sedih-instrumental
A slow, melancholic piano melody, soft and emotional, calm rainy atmosphere, instrumental only, no vocals, looping background music for a visual novel sad scene
Suno AIbgm-tegang-instrumental
Tense and suspenseful background music, low strings, building anxiety, instrumental, no vocals, loopable, for a dramatic decision moment in a visual novel
Selalu minta "instrumental, no vocals, loopable" Vokal akan bersaing dengan dialog tokoh. Musik yang bisa di-loop terdengar mulus saat berputar berulang. Unduh format .mp3 atau .ogg.

3Menyiapkan File Audio

  1. Unduh musik dari Suno
    Pilih hasil yang paling pas, klik Download → format MP3.
  2. (Opsional) Rapikan di Audacity
    Audacity gratis untuk memotong bagian awal/akhir, atau menurunkan volume. Ekspor ulang sebagai MP3/OGG.
  3. Simpan ke folder audio
    Letakkan di nama_proyek/game/audio/. Beri nama: bgm_sedih.mp3, sfx_notif.mp3.
Mencari efek suara (SFX) Untuk SFX pendek (klik, notifikasi, langkah), situs gratis seperti freesound.org atau pixabay.com/sound-effects menyediakan banyak pilihan bebas royalti. Unduh dan simpan ke folder audio yang sama.

4Memasang Audio di Ren'Py

Gunakan play music untuk BGM (otomatis loop) dan play sound untuk efek sekali bunyi. fadein membuat musik masuk perlahan.

script.rpy
label adegan_sedih:
    scene bg kamar with fade
    play music "bgm_sedih.mp3" fadein 2.0   # musik masuk perlahan 2 detik, loop otomatis
    show andi sedih at center
    a "Aku merasa sangat sendirian malam ini."

    play sound "sfx_notif.mp3"   # bunyi notifikasi HP, sekali saja
    a "Eh? Ada pesan dari Rizki."

    stop music fadeout 3.0       # musik berhenti perlahan saat adegan ganti
    return
PerintahFungsi
play music "x.mp3"Putar BGM (berulang otomatis)
fadein 2.0Musik masuk perlahan selama 2 detik
play sound "x.mp3"Putar efek suara sekali
stop music fadeout 3.0Hentikan musik perlahan 3 detik
Cek Pemahaman
1. Perintah untuk memutar musik latar yang berulang adalah?
2. Saat membuat BGM di Suno, kita sebaiknya meminta?
Tugas Praktik P7 Aset wajib MVP
  • Buat minimal 1 BGM di Suno (instrumental) yang sesuai suasana ceritamu.
  • Cari/buat 1 efek suara (SFX) yang relevan.
  • Pasang di script: play music ... fadein dan play sound ....
  • Tantangan: ganti musik saat cerita berpindah dari adegan tegang ke adegan lega.
Game-mu sudah bersuara & punya emosi?
Pertemuan 08 · UTS

UTS — Review Prototipe Game

Titik evaluasi tengah semester. Bukan ujian tulis — kamu mempresentasikan prototipe game-mu yang sudah berjalan. Mari pastikan semuanya siap.

Bobot: 15% nilai akhir Demo prototipe di kelas
Dr. Indra Dosen Pengampu

"Sampai di sini kalian sudah menempuh separuh jalan. Yang saya nilai bukan kesempurnaan, tapi prototipe yang BERJALAN: cerita bercabang, aset AI, dan logika yang utuh. Tunjukkan progresmu."

1Yang Sudah Kamu Pelajari (P1–P7)

Sebelum review, mari rangkum perjalananmu sejauh ini:

PertemuanYang dikuasai
P1Memahami game engine & instal Ren'Py
P2Merancang premis cerita dari 5 topik sosial
P3Membuat karakter AI konsisten & mindmap
P4Menerjemahkan mindmap ke kode (label/menu/jump)
P5Generate background AI 16:9 yang konsisten
P6Dialog, posisi karakter, & ekspresi
P7Musik latar & efek suara

2Checklist Wajib Prototipe (MVP)

Prototipe yang lulus UTS minimal harus memenuhi semua poin ini. Centang satu per satu:

3Cara Memeriksa Error Sebelum Demo

  1. Jalankan Lint
    Di Ren'Py Launcher → pilih proyek → klik "Check script (Lint)". Ini menemukan error sebelum kamu jalankan.
  2. Tekan Shift+O untuk konsol
    Saat game jalan, Shift+O membuka konsol debug untuk melihat nilai variabel.
  3. Uji KEDUA rute
    Mainkan dari awal, pilih rute A. Ulangi, pilih rute B. Pastikan dua-duanya selesai tanpa macet.
Error paling sering saat UTS 90% error mahasiswa = indentasi salah (campur tab & spasi) atau nama file gambar tidak cocok dengan perintah show. Periksa dua hal ini lebih dulu jika game error.

4Format Presentasi Demo

Demo Live (3–5 menit)
Jalankan game-mu dari awal, tunjukkan satu rute lengkap, lalu jelaskan percabangannya.
Jelaskan Pilihan
Ceritakan topik sosial yang kamu angkat & pesan moral di balik kedua ending.
Tunjukkan Proses AI
Perlihatkan prompt yang kamu pakai untuk karakter & background.
Persiapan UTS Minggu ke-8
  • Pastikan SEMUA poin checklist MVP tercentang.
  • Jalankan Lint & uji kedua rute hingga tanpa error.
  • Siapkan penjelasan singkat tentang topik sosial & pesan moralmu.
  • Kumpulkan folder proyek sesuai format penamaan (lihat halaman Proyek Akhir).
Prototipemu sudah lolos semua checklist MVP?
Pertemuan 09

Menu Lanjutan & Subrutin (Call)

Naik level percabangan: membuat pilihan yang benar-benar bermakna, dan menggunakan call agar satu adegan bisa dipakai berulang tanpa menulis ulang.

CPMK-4: Logika alur lanjutan jump vs call/return
Dr. Indra Dosen Pengampu

"Di P4 kalian belajar jump — pergi dan tak kembali. Sekarang kenalan dengan call — pergi, selesaikan tugas, lalu PULANG ke tempat semula. Seperti makmum masbuk yang menyelesaikan rakaat lalu kembali ke barisan."

1jump vs call: Perbedaan Inti

Keduanya berpindah ke label lain, tapi nasibnya beda. jump pindah permanen. call pindah sementara, lalu return membawanya pulang ke baris setelah pemanggilan.

jump (sekali pergi) start rute_a (tak kembali) call (pergi lalu pulang) start cek_dompet return → pulang ke start
jump labelcall label
Setelah selesaiTetap di tujuanKembali ke pemanggil (via return)
AnalogiPindah rumahPergi ke warung lalu pulang
Cocok untukPercabangan cerita utamaAdegan berulang (cek status, mini-event)

2Contoh call: Adegan yang Dipakai Ulang

Bayangkan ada adegan "cek saldo dompet" yang muncul beberapa kali. Daripada menyalin kodenya berulang, buat sekali lalu call kapan pun dibutuhkan.

script.rpy
label start:
    a "Aku mau beli buku, tapi cek uang dulu."
    call cek_dompet          # pergi ke subrutin...
    a "Oke, sekarang aku lanjut ke toko."   # ...lalu lanjut DI SINI
    return

label cek_dompet:
    "Kamu membuka dompet."
    "Isi: Rp 50.000."
    return                   # pulang ke baris setelah 'call'
Tanpa call kamu harus copy-paste Jika adegan cek dompet muncul 5 kali, dengan call kamu cukup menulisnya SEKALI. Hemat tenaga, dan jika perlu mengubah, cukup ubah di satu tempat. Inilah "DRY" — Don't Repeat Yourself.

3Pilihan Bermakna vs Pilihan Kosmetik

Tidak semua pilihan harus mengubah cerita. Pahami dua jenis ini:

Bermakna
Mengubah jalan cerita / ending. Contoh: "Jujur" vs "Bohong" → rute berbeda. Pakai jump.
Kosmetik
Hanya mewarnai dialog, cerita tetap sama. Contoh: "Pesan kopi" vs "Pesan teh" → respons beda, lalu lanjut sama.
script.rpy
label warung:
    menu:
        "Pesan kopi":
            a "Satu kopi hitam, ya."        # kosmetik: lalu lanjut sama
        "Pesan teh":
            a "Teh manis hangat satu."       # kosmetik: lalu lanjut sama
    "Andi duduk menunggu pesanan."           # kedua pilihan bertemu di sini
    jump lanjut_cerita
Konvergensi: jalan yang menyatu kembali Perhatikan: dua pilihan kosmetik di atas TIDAK pakai jump di dalamnya, sehingga otomatis lanjut ke baris di bawah menu — bertemu kembali. Teknik ini disebut konvergensi, menghemat penulisan.

4Memecah Script Jadi Beberapa File

Saat cerita membesar, satu file script.rpy jadi penuh. Ren'Py membaca SEMUA file .rpy di folder game/. Pisahkan agar rapi:

FileIsi
script.rpylabel start & alur utama
characters.rpySemua define ... Character()
rute_baik.rpyAdegan-adegan rute good ending
rute_buruk.rpyAdegan-adegan rute bad ending
Cek Pemahaman
1. Untuk adegan yang dipakai berulang lalu kembali ke tempat semula, gunakan?
2. Pilihan "kopi vs teh" yang lalu lanjut ke cerita sama disebut?
Tugas Praktik P9 Selesai di kelas
  • Buat 1 subrutin dengan call + return yang dipanggil minimal 2 kali.
  • Tambahkan 1 pilihan kosmetik (konvergen) ke ceritamu.
  • Pisahkan definisi karakter ke file characters.rpy terpisah.
  • Tantangan: buat subrutin "narasi pesan moral" yang dipanggil di kedua ending.
Sudah paham beda jump & call?
Pertemuan 10

Variabel & State (Sistem Poin)

Membuat game "mengingat" keputusan pemain. Dengan variabel, ending bisa ditentukan oleh kumpulan pilihan — bukan satu pilihan saja.

CPMK-4: Logika variabel & kondisi default · if/else · point system
Dr. Indra Dosen Pengampu

"Game cerdas mengingat. Setiap kebaikan menambah poin, setiap kesalahan menguranginya. Di akhir, jumlah poinlah yang menentukan nasib tokoh. Ini membuat cerita terasa hidup & adil."

1Apa itu Variabel?

Variabel adalah "kotak penyimpan" nilai. Bisa berisi angka (skor), benar/salah (sudah ketemu seseorang?), atau teks. Game membacanya untuk mengambil keputusan.

script.rpy
# Deklarasi variabel di awal (sebelum start), beri nilai awal
default poin = 0           # skor kebaikan, mulai dari 0
default sudah_jujur = False  # apakah Andi sudah jujur? awalnya belum
default vs $ Pakai default untuk MEMBUAT variabel pertama kali (di luar label). Pakai $ untuk MENGUBAH nilainya di tengah cerita, contoh $ poin = poin + 1.

2Mengubah Nilai dengan $

Setiap pilihan baik menambah poin. Tanda $ memberi tahu Ren'Py: "ini perintah Python, jalankan."

script.rpy
label start:
    menu:
        "Cerita jujur ke Rizki":
            $ poin = poin + 1        # +1 poin kebaikan
            $ sudah_jujur = True
            r "Bagus kamu mau terbuka."
        "Diam saja, simpan sendiri":
            $ poin = poin - 1        # -1 poin
            a "Aku tak sanggup cerita..."
    jump cek_ending

3Mengambil Keputusan dengan if / else

Di akhir cerita, game memeriksa poin. Jika cukup tinggi → good ending. Jika rendah → bad ending. Inilah inti "sistem poin".

script.rpy
label cek_ending:
    if poin >= 1:
        scene bg kampus with fade
        a "Aku memilih jujur, dan teman-temanku membantuku bangkit."
        "TAMAT - Good Ending"
    elif poin == 0:
        a "Aku masih ragu, jalan ini abu-abu."
        "TAMAT - Netral Ending"
    else:
        scene bg kamar with fade
        a "Aku menyimpan semuanya sendiri, dan terjerumus makin dalam."
        "TAMAT - Bad Ending"
    return
OperatorArtiContoh
==sama denganif poin == 0
>=lebih besar / samaif poin >= 1
<lebih kecilif poin < 0
and / ordan / atauif poin >= 1 and sudah_jujur
Hati-hati: satu = vs dua == $ poin = 5 berarti "isi poin dengan 5" (memberi nilai). if poin == 5 berarti "apakah poin sama dengan 5?" (memeriksa). Tertukar = error logika yang sulit dilacak!

4Menampilkan Variabel ke Layar

Kamu bisa menyisipkan nilai variabel ke dalam dialog dengan kurung kurawal [ ].

script.rpy
    a "Poin kebaikanku sekarang [poin]."
    "Status jujur: [sudah_jujur]"
Cek Pemahaman
1. Untuk membuat variabel baru bernilai awal 0, kita pakai?
2. if poin >= 1: akan dijalankan jika?
Tugas Praktik P10 Selesai di kelas
  • Buat variabel poin dengan default.
  • Buat minimal 2 pilihan yang menambah/mengurangi poin.
  • Buat label cek_ending dengan if/elif/else — minimal 2 ending berdasarkan poin.
  • Tantangan: tambah variabel True/False (mis. sudah_minta_maaf) sebagai syarat tambahan good ending.
Game-mu sudah bisa "mengingat" pilihan pemain?
Pertemuan 11

Visual Effects dengan ATL

Membuat karakter "hidup": bergerak masuk, melompat kaget, atau bergetar marah. ATL (Animation & Transformation Language) adalah bahasa gerak Ren'Py.

CPMK-4: Estetika & animasi transform · ease · repeat
Dr. Indra Dosen Pengampu

"Karakter diam itu kaku. Tapi yang masuk dari samping sambil bergeser halus? Terasa sinematik. ATL membuat aset statismu seolah dianimasikan tangan profesional."

1Posisi Bawaan Ren'Py

Sebelum animasi, kenali posisi siap pakai. Cukup tambahkan at + nama posisi.

PosisiLetak
at leftKiri layar
at rightKanan layar
at centerTengah (kaki menyentuh bawah)
at truecenterBenar-benar tengah layar

2Membuat Transform (Gerakan Kustom)

Blok transform mendefinisikan gerakan. ease membuat perpindahan halus (melambat di ujung). Letakkan di atas, sebelum label start.

script.rpy
# Gerakan: masuk dari luar layar kiri, meluncur ke posisi kiri
transform masuk_kiri:
    xpos -0.3 yalign 1.0    # mulai dari luar layar
    ease 0.8 xpos 0.15      # meluncur ke kiri layar dalam 0.8 detik (halus)

# Gerakan: efek bergetar (kaget/marah)
transform getar:
    block:
        ease 0.05 xoffset 8
        ease 0.05 xoffset -8
        repeat 4            # ulangi 4 kali

3Memakai Transform di Adegan

script.rpy
label start:
    scene bg kampus
    show andi senyum at masuk_kiri    # Andi meluncur masuk dari kiri
    a "Hai, aku baru sampai!"
    show andi kaget at getar          # Andi bergetar kaget
    a "Eh?! Kok bisa begitu?!"
ease vs linear linear bergerak datar dengan kecepatan tetap (terasa robotik). ease mulai pelan, cepat di tengah, melambat di akhir (terasa alami & halus). Untuk gerakan karakter, hampir selalu pakai ease.

4Transisi Layar Kustom

Selain dissolve dan fade bawaan, kamu bisa membuat transisi sendiri, misalnya kilatan putih untuk momen mengejutkan.

script.rpy
# Definisi transisi kilat putih
define flash = Fade(0.1, 0.0, 0.5, color="#fff")

label kejutan:
    scene bg kamar with flash    # layar berkedip putih lalu muncul
    "PETIR menyambar di luar jendela!"
Jangan berlebihan Efek visual itu bumbu, bukan makanan utama. Pakai animasi di momen penting (kemunculan tokoh, kejutan, klimaks). Terlalu banyak gerakan justru membuat pemain pusing & mengganggu cerita.
Cek Pemahaman
1. Untuk gerakan halus yang melambat di ujung, kita pakai?
2. Apa fungsi repeat 4 dalam transform?
Tugas Praktik P11 Selesai di kelas
  • Buat 1 transform kemunculan karakter (meluncur masuk dengan ease).
  • Buat 1 transform efek emosi (getar/melompat).
  • Terapkan keduanya di adegan ceritamu.
  • Tantangan: buat 1 transisi layar kustom (mis. kilat) untuk momen dramatis.
Karaktermu sudah bergerak sinematik?
Pertemuan 12

Kustomisasi UI/UX

Mengubah tampilan antarmuka game agar bercirikan karyamu sendiri: kotak dialog, menu utama, dan tombol — bukan lagi bawaan standar.

CPL09: UI interaktif & estetika screen language
Dr. Indra Dosen Pengampu

"Sampai sekarang game kalian masih memakai 'baju seragam' bawaan Ren'Py. Hari ini kita jahit baju sendiri — antarmuka yang mencerminkan identitas karyamu. Inilah yang membuatnya terlihat profesional."

1Apa itu Screen Language?

Semua elemen antarmuka (kotak teks, menu, tombol) didefinisikan dalam blok screen. Ren'Py sudah punya screen bawaan di file screens.rpy — kita tinggal memodifikasinya.

WadahFungsi
vboxMenyusun elemen secara vertikal (atas ke bawah)
hboxMenyusun elemen secara horizontal (kiri ke kanan)
frameKotak berbingkai sebagai wadah
textbuttonTombol berisi teks yang bisa diklik

2Mengubah Warna Kotak Dialog

Cara termudah memberi ciri khas: ganti warna teks & latar kotak dialog. Buka game/gui.rpy dan ubah nilai warnanya.

gui.rpy
## Warna aksen utama (tombol, judul)
define gui.accent_color = '#0B6E4F'        # hijau

## Warna teks dialog
define gui.text_color = '#ffffff'

## Warna nama tokoh
define gui.name_text_color = '#D99A2B'     # emas
Mulai dari yang aman Sebelum mengutak-atik, SALIN file screens.rpy & gui.rpy sebagai cadangan. Jika tampilan rusak, kamu bisa kembalikan. Ubah satu nilai, jalankan, lihat hasilnya — baru lanjut.

3Membuat Tombol Menu Utama Kustom

Contoh screen menu utama sederhana dengan tombol vertikal. action menentukan apa yang terjadi saat diklik.

screens.rpy
screen main_menu():
    add "bg_judul.webp"             # gambar latar menu

    vbox:
        xalign 0.5 yalign 0.7        # posisikan di tengah-bawah
        spacing 12

        textbutton "Mulai Cerita" action Start()
        textbutton "Muat" action ShowMenu("load")
        textbutton "Pengaturan" action ShowMenu("preferences")
        textbutton "Keluar" action Quit()
ActionFungsi
Start()Mulai game baru (ke label start)
ShowMenu("load")Buka layar muat simpanan
Quit()Keluar dari game
Return()Kembali ke game

4Menyimpan Pengaturan dengan persistent

Variabel biasa hilang saat game ditutup. persistent menyimpan data SELAMANYA (lintas sesi) — cocok untuk galeri terbuka, achievement, atau pengaturan.

script.rpy
label good_ending:
    a "Aku berhasil bangkit!"
    $ persistent.good_ending_terbuka = True   # tersimpan selamanya
    "Achievement terbuka: Jalan Kebaikan"
    return
Cek Pemahaman
1. Untuk menyusun tombol secara vertikal, kita pakai?
2. Variabel yang tetap tersimpan walau game ditutup adalah?
Tugas Praktik P12 Selesai di kelas
  • Ubah minimal 2 warna di gui.rpy (mis. aksen & warna nama tokoh) sesuai temamu.
  • Modifikasi teks tombol di menu utama.
  • Buat 1 variabel persistent yang terbuka saat mencapai good ending.
  • Tantangan: tambahkan gambar latar kustom untuk menu utama.
Antarmuka game-mu sudah punya identitas sendiri?
Pertemuan 13

Python Lanjutan dalam Ren'Py

Membuka kekuatan penuh: karena Ren'Py adalah Python, kamu bisa menulis logika kompleks — inventory, sistem stat, hingga mekanik mirip RPG.

CPMK-4: Logika pemrograman lanjut init python · class · def
Dr. Indra Dosen Pengampu

"Selama ini kalian memakai Python 'tersembunyi' lewat $. Hari ini kita buka pintunya lebar-lebar. Dengan blok init python, game kalian bisa melakukan apa pun yang Python bisa."

1Blok init python

Untuk kode Python yang panjang (lebih dari satu baris), gunakan blok init python:. Diletakkan di atas, dijalankan saat game dimuat — sebelum cerita mulai.

script.rpy
init python:
    # fungsi untuk menghitung level dari poin
    def hitung_level(poin):
        if poin >= 10:
            return "Bijak"
        elif poin >= 5:
            return "Berkembang"
        else:
            return "Pemula"
Kapan pakai $ vs init python:? Pakai $ untuk 1 baris cepat di tengah cerita. Pakai blok init python: untuk mendefinisikan fungsi, class, atau logika banyak baris yang ingin dipakai berulang.

2Memanggil Fungsi di Cerita

script.rpy
label akhir:
    $ level = hitung_level(poin)        # panggil fungsi, simpan hasil
    a "Perjalananku membuatku jadi pribadi yang [level]."
    return

3Class: Membuat Objek Sendiri (Inventory)

Untuk fitur kompleks seperti inventory (daftar barang), class sangat berguna. Contoh sederhana sistem item:

script.rpy
init python:
    class Item:
        def __init__(self, nama, deskripsi):
            self.nama = nama
            self.deskripsi = deskripsi

# buat daftar inventory
default inventory = []

label start:
    $ inventory.append(Item("Surat", "Surat dari ibu Andi"))
    "Kamu mendapatkan sebuah Surat."
    "Isi tasmu sekarang: [len(inventory)] barang."
Ini opsional & menantang Class & inventory adalah materi lanjutan. Untuk proyek wajib (MVP), kamu TIDAK harus memakainya. Tapi jika ingin nilai lebih atau game lebih kaya, inilah pondasinya. Pelajari perlahan.

4Logika Kondisi Kompleks

Gabungkan beberapa variabel untuk ending yang lebih bernuansa — misalnya good ending sejati hanya terbuka jika DUA syarat terpenuhi.

script.rpy
label cek_ending:
    if poin >= 5 and sudah_minta_maaf and not pernah_bohong:
        jump ending_sejati       # syarat ketat: ending terbaik
    elif poin >= 1:
        jump ending_baik
    else:
        jump ending_buruk
Cek Pemahaman
1. Untuk menulis fungsi Python banyak baris, kita pakai?
2. if poin >= 5 and sudah_minta_maaf: dijalankan jika?
Tugas Praktik P13 Selesai di kelas
  • Buat 1 fungsi dengan init python: (mis. menghitung level/gelar dari poin).
  • Panggil fungsi itu di cerita & tampilkan hasilnya.
  • Buat 1 ending dengan kondisi kompleks (and / or minimal 2 variabel).
  • Tantangan (lanjutan): buat sistem inventory sederhana dengan class.
Sudah berani menulis Python sendiri di Ren'Py?
Pertemuan 14

Build & Distribusi Game

Garis finis! Mengubah folder proyek menjadi aplikasi nyata: file .exe untuk PC dan .apk untuk Android yang bisa dibagikan ke siapa saja.

CPL05: Desain multi-platform Build Distributions
Dr. Indra Dosen Pengampu

"Karya yang tersimpan di laptop sendiri belum benar-benar 'lahir'. Hari ini kita kemas game kalian jadi aplikasi yang bisa diinstal teman, keluarga, siapa pun. Inilah momen kalian menjadi developer sungguhan."

1Persiapan Sebelum Build

Jangan langsung build. Bersihkan dulu agar hasil rilis bebas error:

  1. Jalankan Lint
    Launcher → "Check script (Lint)". Pastikan TIDAK ada error merah.
  2. Uji semua rute & ending
    Mainkan setiap percabangan sampai selesai. Pastikan tidak ada gambar/suara yang hilang.
  3. Isi informasi game
    Launcher → "Options" → atur nama game & versi (mis. 1.0).
  4. Siapkan ikon (opsional)
    Ganti icon.ico di folder game dengan logo karyamu.

2Build untuk PC (Windows / Mac / Linux)

Langkah di Launcher
1. Buka Ren'Py Launcher
2. Pilih proyekmu
3. Klik "Build Distributions"
4. Centang: Windows, Mac, Linux (sesuai kebutuhan)
5. Klik "Build"
6. Tunggu... hasil ada di folder proyek (file .zip per platform)
Hasil PC siap bagikan Ren'Py menghasilkan file ZIP berisi .exe (Windows) lengkap dengan semua aset. Penerima cukup ekstrak & jalankan — tidak perlu menginstal Ren'Py. Game-mu mandiri sepenuhnya.

3Build untuk Android (.apk)

Ren'Py bisa menghasilkan APK Android. Butuh sekali setup awal (RAPT/Android SDK), lalu seterusnya tinggal klik.

  1. Install Android support
    Launcher → "Android" → ikuti wizard untuk mengunduh komponen Android (sekali saja, butuh internet).
  2. Konfigurasi
    Isi nama paket (mis. com.namamu.gameku) & ikon.
  3. Build APK
    Klik "Build" → pilih Universal APK. Tunggu proses (bisa beberapa menit).
  4. Transfer ke HP
    Pindahkan file .apk ke HP Android, install (izinkan "sumber tidak dikenal"), mainkan!
Catatan untuk Android Game visual novel di Android memakai sentuhan layar (tap = lanjut, tap tahan = sembunyikan UI). Pastikan resolusi 1280×720 agar pas di layar HP. Uji di HP sungguhan sebelum dikumpulkan.

4Checklist Rilis Final

Selamat! Kamu telah menyelesaikan perjalanan Dari nol hingga aplikasi nyata: merancang cerita, membuat aset AI, menulis logika, hingga membangun distribusi. Game yang kamu pegang adalah bukti kompetensimu sebagai pengembang multimedia. Banggalah — lalu lanjutkan berkarya.
Tugas Akhir P14 Proyek final
  • Build game-mu menjadi distribusi PC (.exe).
  • Build versi Android (.apk) & uji di HP.
  • Lengkapi semua checklist rilis final.
  • Kumpulkan sesuai format penamaan & email (lihat halaman Proyek Akhir).
Game-mu sudah jadi aplikasi nyata yang bisa dibagikan?
Bonus

Bank Prompt AI

Kumpulan prompt siap pakai untuk seluruh proyek — karakter, latar, audio, hingga debugging. Salin, sesuaikan kata di dalam kurung, dan tempel ke AI pilihanmu.

Gemini · Nano Banana 2 · ChatGPT · Suno Ganti teks [dalam kurung]
Cara memakai bank prompt Setiap prompt punya bagian [dalam kurung] yang harus kamu ganti sesuai ceritamu. Sisanya biarkan apa adanya — struktur itu yang membuat hasil AI bagus & konsisten.

AKarakter (P3)

Gemini · Nano Banana 2model-sheet-karakter
Character reference sheet of [seorang mahasiswa pria 20 tahun, rambut hitam pendek, memakai hoodie abu-abu], full body, neutral standing pose, front view, clean anime visual novel style, soft cel shading, plain white background, consistent character design, high detail
Gemini · Logic Enginekunci-dna-json
Analyze this character image and output a JSON description that locks the design: include character_id, facial_geometry (jawline, eye_shape, eye_color), hair (color, style), outfit_base, and default expression. Be precise so the character can be re-rendered consistently.
Gemini FLOW · Rendererganti-ekspresi
Using this exact character (same face, hair, and outfit from the reference), change ONLY the facial expression to [sedih / menangis / marah / kaget]. Keep identical art style, same pose, transparent background, anime visual novel style.

BBackground (P5)

Gemini · Nano Banana 2latar-umum
[A small student boarding room / a campus hallway / a quiet cafe], anime visual novel background style, soft cel shading, [warm sunset / cool morning] lighting, no people, highly detailed, 4k, aspect ratio 16:9
Gemini · Nano Banana 2latar-lokal-cirebon
Traditional Cirebon setting with batik megamendung pattern decoration, [warung interior / old town street], Indonesian local atmosphere, anime visual novel style, no people, 4k, aspect ratio 16:9

CAudio (P7)

Suno AIbgm-emosi
A [slow melancholic piano / tense suspenseful strings / warm hopeful acoustic] background music, instrumental only, no vocals, loopable, calm and atmospheric, for a visual novel [sad / tense / happy] scene

DCerita & Premis (P2)

Gemini / ChatGPTbrainstorm-premis
Bantu saya membuat premis cerita visual novel singkat bertema [pencegahan judi online / bullying / TPKS / wawasan kebangsaan / ke-NU-an] untuk mahasiswa. Buat 3 ide premis, masing-masing 1 kalimat, dengan tokoh utama mahasiswa dan ada keputusan moral yang bercabang.
Gemini / ChatGPTstruktur-percabangan
Dari premis ini: "[tulis premismu]", buatkan struktur percabangan sederhana dengan 1 titik keputusan utama, 2 pilihan, dan 2 ending berbeda (good ending & bad ending). Tuliskan dalam bentuk poin singkat.

EDebugging & Belajar Mandiri

Gemini / ChatGPTperbaiki-error
Saya menulis kode Ren'Py berikut tapi muncul error: [tempel pesan error]. Ini kodenya: [tempel kodemu]. Tolong jelaskan penyebabnya dengan bahasa sederhana dan tunjukkan kode yang sudah diperbaiki. Saya pemula.
NotebookLM untuk belajar materi Untuk memahami materi lebih dalam, unggah file panduan Ren'Py ke NotebookLM (notebooklm.google.com). Lalu tanya apa pun — ia menjawab khusus dari materi kuliahmu, bukan jawaban umum.
Bonus

Checklist & Format Proyek Akhir

Satu halaman rangkuman untuk memastikan proyekmu lengkap, rapi, & dikumpulkan dengan benar. Cek semuanya sebelum mengirim.

Standar penilaian MVP Format pengumpulan
Dr. Indra Dosen Pengampu

"Karya hebat yang dikumpulkan asal-asalan akan kehilangan nilainya. Rapikan, beri nama dengan benar, dan kirim sesuai aturan. Profesionalisme dimulai dari hal kecil seperti ini."

1Checklist MVP Wajib

Proyek akhir minimal harus memenuhi semua poin ini agar lulus standar:

2Format Penamaan Folder

Kompres seluruh folder proyek menjadi ZIP, lalu beri nama dengan format berikut (tanpa spasi, gunakan garis bawah):

Format nama file
VN_Multimedia_[NIM]_[NamaLengkap].zip

Contoh:
VN_Multimedia_2021010101_BudiSantoso.zip
Yang HARUS ada di dalam ZIP Sertakan seluruh folder proyek (folder game/ beserta semua aset gambar & audio) DAN hasil build (file .exe / .apk). Tanpa folder aset, game tidak bisa dijalankan ulang oleh penilai.

3Cara Mengumpulkan

  1. Rapikan folder proyek
    Pastikan semua gambar di game/images/ & audio di game/audio/.
  2. Build distribusi final
    Hasilkan minimal versi PC (.exe). Android (.apk) sebagai nilai tambah.
  3. Kompres jadi ZIP
    Beri nama sesuai format VN_Multimedia_NIM_Nama.zip.
  4. Kirim via email
    Jika file besar, unggah ke Google Drive lalu kirim TAUTAN-nya (set akses: siapa saja yang punya link).

4Kontak Dosen

Dr. Indra Surya Permana, MM., M.Kom. Dosen Pengampu — Pemrograman Multimedia Program Studi Teknik Informatika, Filkom UNU Cirebon
Pesan penutup Kamu telah belajar merancang, membuat aset AI, menulis logika, dan membangun aplikasi dari nol. Itu pencapaian besar. Game yang kamu buat bukan sekadar tugas — ia membawa pesan kebaikan kepada siapa pun yang memainkannya. Teruslah berkarya, dan selamat menjadi pengembang multimedia.
Ekspor Laporan Aktivitas

Klik tombol di bawah untuk membuat laporan progres belajarmu — berisi checklist MVP, pertemuan yang selesai, dan riwayat kunjungan. Laporan terbuka di tab baru dan bisa disimpan sebagai PDF via browser (Ctrl+P / Cmd+P).

Progress tersimpan otomatis di browser ini (localStorage). Setiap mahasiswa menyimpan data masing-masing.