Transformasi Mindmap ke Logika Pemrograman (Ren'Py Scripting)
Membawa logika branching ke level berikutnya dengan variabel, kondisional, dan manajemen state. Ini adalah inti dari "pemrograman" dalam mata kuliah ini.
Target Kompetensi
Mahasiswa mampu mengimplementasikan logika pemrograman Python/Ren'Py (variabel, kondisional, loop) dan mentransformasikan Logical Branching dari Mindmap ke dalam sintaksis kode Ren'Py secara akurat.
Variabel di Ren'Py: Mengingat Pilihan Pemain
Variabel adalah "kotak penyimpanan" yang membuat game kamu menjadi cerdas. Dengan variabel, game bisa mengingat apa yang telah dipilih pemain dan bereaksi sesuai dengan itu.
Tiga Cara Mendeklarasikan Variabel
# 1. default: Untuk variabel yang berubah selama game (paling umum)
# Akan direset ke nilai awal setiap kali game baru dimulai
default kepercayaan_nabilah = 0 # Angka (integer)
default sudah_ketemu_ahmad = False # Boolean (True/False)
default nama_pemain = "" # Teks kosong (string)
# 2. define: Untuk nilai yang TIDAK berubah selama game
# Biasanya untuk karakter dan konstanta
define n = Character("Nabilah")
define MAX_POIN = 100 # Konstanta
# 3. $ (dollar): Mengubah nilai variabel DI DALAM cerita
label start:
$ kepercayaan_nabilah = 5 # Set nilai
$ kepercayaan_nabilah += 10 # Tambah nilai
$ sudah_ketemu_ahmad = True # Ubah boolean
Jenis-jenis Nilai Variabel
| Tipe | Contoh Nilai | Kegunaan |
|---|---|---|
| Integer (bilangan bulat) | 0, 5, -3, 100 |
Skor, poin kepercayaan, hitungan hari |
| Float (bilangan desimal) | 0.5, 3.14, -1.7 |
Persentase, probabilitas |
| Boolean (benar/salah) | True, False |
Status event (sudah terjadi atau belum) |
| String (teks) | "Ahmad", "ending_a" |
Nama, status teks, pilihan yang tersimpan |
If / Elif / Else: Membuat Game yang Cerdas
Kondisional memungkinkan game bereaksi berbeda berdasarkan nilai variabel. Ini yang membuat visual novel terasa "responsif" terhadap pilihan pemain.
label akhir_cerita:
if kepercayaan_nabilah >= 50:
n "Ahmad, kamu sudah kubuktikan layak jadi teman terbaikku."
elif kepercayaan_nabilah >= 25:
n "Kita masih perlu banyak belajar satu sama lain, tapi aku percaya kamu."
else:
n "Sayangnya, kamu belum berhasil mendapatkan kepercayaanku sepenuhnya."
Kondisional pada Menu Pilihan
Kamu juga bisa menampilkan atau menyembunyikan pilihan berdasarkan kondisi tertentu:
menu:
"Ceritakan rahasia kepada Nabilah" if kepercayaan_nabilah >= 30:
# Pilihan ini HANYA muncul jika kepercayaan >= 30
$ kepercayaan_nabilah += 20
n "Terima kasih sudah mempercayaiku."
jump ending_baik
"Diam saja":
# Pilihan ini selalu muncul
n "Aku mengerti. Tidak apa-apa."
jump ending_biasa
Sistem kepercayaan (trust/affection points) adalah teknik klasik visual novel RPG. Setiap pilihan dialog memengaruhi angka kepercayaan, dan di akhir cerita, angka itu menentukan ending mana yang terbuka. Ini adalah cara elegan membuat cerita bercabang tanpa membuat kode yang terlalu kompleks.
Default, Init, dan Pengaturan Awal Game
# ================================================
# PENGATURAN VARIABEL GLOBAL
# Letakkan sebelum label start
# ================================================
# Poin Afeksi untuk setiap karakter
default afeksi_nabilah = 0
default afeksi_ahmad = 0
# Flag event (sudah terjadi atau belum)
default event_ketemu_nabilah = False
default event_belajar_bareng = False
default event_konflik = False
# Pilihan penting yang tersimpan
default pilihan_magang = "" # "ambil" atau "tolak"
default hari_ke = 1 # Tracking hari dalam cerita
# Definisi Karakter
define n = Character("Nabilah", color="#c8ffc8")
define a = Character("Ahmad", color="#ffc8c8")
define narr = Character("", what_italic=True)
Persistent Data: Menyimpan Antar Sesi
Variabel biasa hilang saat game ditutup. Persistent data tetap tersimpan bahkan setelah game ditutup — berguna untuk fitur "New Game+", galeri terbuka, atau mencatat ending yang pernah dicapai.
# Inisialisasi persistent di awal
if not hasattr(persistent, 'ending_a_terbuka'):
persistent.ending_a_terbuka = False
persistent.ending_b_terbuka = False
# Saat ending tercapai, tandai sebagai terbuka
label ending_a:
$ persistent.ending_a_terbuka = True
narr "Selamat! Kamu mendapatkan Ending A: Karier Gemilang."
return
Studi Kasus: Social Impact VN "Pilihan Hidup"
Berikut adalah contoh implementasi lengkap dari alur cerita sederhana yang menggabungkan semua konsep yang dipelajari di P3 dan P4.
# ================================================
# GAME: "PILIHAN HIDUP"
# Tema: Integritas di Lingkungan Akademik
# ================================================
default integritas = 0 # Skor integritas pemain
default sudah_lapor = False
define a = Character("Ahmad", color="#ffc8c8")
define r = Character("Rizal", color="#ffdd88")
define d = Character("Dosen", color="#88ddff")
define narr = Character("")
label start:
narr "Hari ujian tengah semester. Ahmad melewati lorong kelas."
r "Ahmad! Sini sebentar." # Rizal, teman dekat Ahmad
r "Gue punya bocoran soal ujian hari ini. Mau?"
menu:
"Tolak dengan tegas.":
$ integritas += 20
a "Tidak, Rizal. Itu curang. Aku tidak mau."
r "Terserah kamu deh. Rugi sendiri."
jump scene_ujian_jujur
"Minta waktu untuk pikir-pikir.":
$ integritas += 5
a "Aku... perlu waktu mikir, Zal."
r "Cepetan, ujiannya 10 menit lagi."
jump scene_dilema
"Terima dan gunakan bocoran.":
$ integritas -= 10
a "(ragu-ragu) Oke... tapi ini terakhir kalinya."
jump scene_ujian_curang
label scene_dilema:
narr "Ahmad duduk gelisah sebelum ujian."
a "(Pikiran) Jika pakai bocoran, nilai aman. Tapi kalau ketahuan..."
a "(Pikiran) Empat tahun kuliah bisa hancur dalam satu keputusan."
menu:
"Kembalikan bocoran dan ujian dengan jujur.":
$ integritas += 15
jump scene_ujian_jujur
"Tetap gunakan bocoran.":
$ integritas -= 5
jump scene_ujian_curang
label scene_ujian_jujur:
narr "Ujian berlangsung. Ahmad menjawab dengan kemampuannya sendiri."
a "(Keluar ruangan) Susah memang, tapi aku lega."
jump scene_hasil
label scene_ujian_curang:
narr "Ujian berlangsung. Tiga hari kemudian..."
d "Ahmad, tolong temui saya di ruangan saya."
narr "Jantung Ahmad berdegup kencang. Dosen tahu."
jump scene_ketahuan
label scene_ketahuan:
d "Saya punya bukti adanya kecurangan dalam ujian kemarin."
menu:
"Jujur dan minta maaf.":
$ integritas += 10
$ sudah_lapor = True
a "Maaf, Pak. Saya... menggunakan bocoran soal."
d "Kejujuran ini saya hargai. Ada konsekuensi, tapi lebih baik dari diam."
jump scene_hasil
"Menyangkal.":
$ integritas -= 20
a "T-tidak, Pak. Saya tidak tahu apa-apa."
d "(Menampilkan bukti) Ini rekaman CCTV dan analisis jawaban."
jump ending_buruk
label scene_hasil:
if integritas >= 30:
jump ending_terbaik
elif integritas >= 10:
jump ending_sedang
else:
jump ending_buruk
label ending_terbaik:
narr "Satu semester kemudian. Ahmad menjadi mahasiswa berprestasi."
narr "Integritas yang dijaganya menjadi fondasi karier yang ia banggakan."
d "Ahmad, kamu adalah contoh mahasiswa yang kami harapkan."
return
label ending_sedang:
narr "Ahmad melewati semester dengan baik, meski ada beberapa penyesalan."
narr "Ia belajar bahwa pilihan kecil membentuk karakter seseorang."
return
label ending_buruk:
narr "Ahmad diberikan sanksi akademik. Nilai semester ini tidak diakui."
narr "Satu kebohongan kecil membawa konsekuensi yang jauh lebih besar."
return
Tugas Pertemuan 4: Asset Planning (Technical Bible)
Output: Dokumen Google Docs yang dibagikan ke dosen. Format: Technical Bible Proyek Visual Novel.
Isi Dokumen Tugas 4 (Technical Bible)
- Topik & Premis: Tulis ulang premis cerita dari Tugas P2.
- Daftar Variabel: Tuliskan semua variabel yang akan digunakan (nama, tipe, fungsi).
- Daftar Tokoh (Minimal 2): Nama, peran, deskripsi visual lengkap untuk prompt AI.
- Daftar Lokasi/Latar (Minimal 3): Nama lokasi, deskripsi visual untuk prompt AI background.
- Script Awal (Minimal 20 baris dialog) menggunakan variabel dan kondisional.
- Flowchart yang diperbarui dengan menunjukkan perubahan variabel di setiap percabangan.
Kuis Pemahaman Pertemuan 4
Uji Pemahamanmu!
1. Kapan kamu menggunakan default vs define?
2. Apa fungsi tanda $ (dollar) dalam kode Ren'Py?
3. Bagaimana cara membuat pilihan menu yang hanya muncul jika variabel kepercayaan lebih dari 20?