Mekanik RPG: Stats, Inventory & Combat Sederhana
Menambahkan lapisan gameplay RPG pada visual novel untuk menciptakan pengalaman yang lebih mendalam. Sistem statistik, inventory, dan pertarungan berbasis teks membuat cerita lebih interaktif.
Target Kompetensi
Mahasiswa mampu mengimplementasikan mekanik RPG dasar (sistem statistik, inventory sederhana, dan combat berbasis teks) ke dalam visual novel menggunakan variabel Python dan logika kondisional Ren'Py.
Mekanik RPG adalah fitur opsional untuk proyek akhir. Prioritaskan kualitas cerita dan aset visual dulu sebelum menambahkan elemen RPG. Jangan sampai mengejar fitur RPG tapi cerita utama terbengkalai.
Sistem Statistik Karakter
# Di variables.rpy atau script.rpy
## ===== STATISTIK KARAKTER UTAMA =====
default hp = 100 # Health Points (nyawa)
default hp_max = 100
default mp = 50 # Moral Points (semangat)
default mp_max = 50
## Atribut RPG
default kecerdasan = 10 # Memengaruhi opsi dialog akademik
default karisma = 10 # Memengaruhi opsi persuasi
default keberanian = 10 # Memengaruhi pilihan berani/berisiko
default integritas = 50 # Moral score (0-100)
## XP dan Level
default xp = 0
default level = 1
init python:
def level_up():
global level, xp, kecerdasan, karisma, keberanian
xp_needed = level * 100
if xp >= xp_needed:
level += 1
xp -= xp_needed
kecerdasan += 2
karisma += 1
keberanian += 1
return True # Level up!
return False # Belum level up
label dapat_xp:
$ xp += 50
if level_up():
narr "Level naik! Sekarang Level [level]."
narr "Kecerdasan dan keberanianmu meningkat."
Inventory Sederhana Menggunakan List Python
# Inventory sebagai Python list
default inventory = [] # Mulai kosong
default uang = 0 # Mata uang dalam game
# Definisi item sebagai dictionary
init python:
ITEMS = {
"buku_teori": {"nama": "Buku Teori Manajemen", "efek": "+15 Kecerdasan"},
"kopi": {"nama": "Kopi Kampus", "efek": "+10 HP"},
"surat_rekomendasi": {"nama": "Surat Rekomendasi Dosen", "efek": "Buka dialog khusus"},
}
# Menambah item ke inventory
label dapat_buku:
$ inventory.append("buku_teori")
$ kecerdasan += 15
narr "Kamu mendapatkan Buku Teori Manajemen!"
narr "Kecerdasan bertambah +15."
# Menggunakan item (cek dulu apakah ada)
label minum_kopi:
if "kopi" in inventory:
$ inventory.remove("kopi")
$ hp = min(hp + 10, hp_max)
narr "Kamu meminum kopi. HP pulih +10."
else:
narr "Kamu tidak punya kopi."
# Dialog yang terkunci oleh item
menu:
"Tunjukkan surat rekomendasi" if "surat_rekomendasi" in inventory:
d "Luar biasa! Dengan rekomendasi Prof. Indra, saya langsung terima kamu."
"Lamar tanpa surat":
d "Kamu perlu pengalaman lebih. Coba lagi tahun depan."
Sistem Skill: Dialog Terkunci oleh Statistik
Sistem skill memungkinkan pilihan dialog yang hanya tersedia jika statistik karakter memenuhi syarat. Ini membuat statistik terasa bermakna.
label negosiasi_dosen:
d "Kamu terlambat mengumpulkan tugas, Ahmad."
menu:
"[Kecerdasan 20+] Jelaskan dengan data dan argumen logis." if kecerdasan >= 20:
$ xp += 30
a "Pak, berdasarkan penelitian terbaru tentang beban kognitif mahasiswa..."
d "Argumen yang menarik. Baiklah, kamu dapat perpanjangan waktu."
"[Karisma 15+] Minta dengan sopan dan personal." if karisma >= 15:
$ xp += 20
a "Pak, saya sangat menghargai mata kuliah Bapak. Boleh saya minta..."
d "Kamu mahasiswa yang sopan. Oke, besok pagi paling lambat."
"Minta maaf dengan jujur.":
a "Maaf Pak, saya memang salah manajemen waktu."
d "Jujur dihargai. Kasih besok tapi nilai ada pengurangan."
Sistem Pertarungan Berbasis Teks (Debat/Argumen)
Dalam konteks Social Impact VN, "combat" bisa diinterpretasikan sebagai debat argumen, presentasi, atau konfrontasi verbal.
# Sistem debat: Ahmad vs Antagonis
default hp_debat_ahmad = 100 # Kepercayaan diri Ahmad
default hp_debat_lawan = 80 # Keyakinan lawan
label mulai_debat:
narr "Rapat mahasiswa. Ahmad harus mempertahankan proposalnya."
while hp_debat_lawan > 0 and hp_debat_ahmad > 0:
narr "Kepercayaan Dirimu: [hp_debat_ahmad] | Keyakinan Lawan: [hp_debat_lawan]"
menu:
"Serang dengan data statistik":
$ hp_debat_lawan -= 25
narr "Argumenmu didukung data yang kuat! (-25 untuk lawan)"
"Gunakan analogi yang mudah dipahami":
$ hp_debat_lawan -= 15
narr "Penonton mengangguk setuju."
"Tahan serangan — dengarkan argumen lawan":
$ hp_debat_ahmad -= 5 # Sedikit berkurang tapi dapat wawasan
$ kecerdasan += 5
narr "Mendengarkan membuka kelemahannya."
if hp_debat_ahmad > 0:
jump menang_debat
else:
jump kalah_debat
label menang_debat:
narr "Tepuk tangan memenuhi ruangan! Proposalmu diterima."
$ xp += 50
$ integritas += 10
return
label kalah_debat:
narr "Proposal ditolak. Tapi kamu mendapat pelajaran berharga."
$ kecerdasan += 10 # Kalah tapi belajar
return
Menampilkan Statistik di Layar
screen stats_overlay():
## Panel statistik di sudut kanan atas
frame:
xalign 0.98
yalign 0.02
padding (16, 16)
background "#00000099"
vbox:
spacing 6
text "STATISTIK":
size 14
bold True
color "#ffdd00"
null height 8
hbox:
spacing 8
text "HP": size 13; color "#ff6666"
text "[hp]/[hp_max]": size 13
hbox:
spacing 8
text "INT": size 13; color "#66ddff"
text "[kecerdasan]": size 13
hbox:
spacing 8
text "KAR": size 13; color "#ffaa44"
text "[karisma]": size 13
hbox:
spacing 8
text "Integritas": size 13; color "#44ff88"
text "[integritas]/100": size 13
Mengintegrasikan RPG dengan Cerita Social Impact
Sistem RPG harus melayani cerita, bukan sebaliknya. Berikut cara menghubungkan mekanik RPG dengan tema social impact.
| Statistik RPG | Representasi Naratif | Cara Naik |
|---|---|---|
| Kecerdasan | Kemampuan analisis dan akademik | Belajar, membaca, mengerjakan tugas |
| Karisma | Kemampuan persuasi dan leadership | Berinteraksi positif dengan sesama |
| Keberanian | Berani mengambil risiko demi kebenaran | Memilih opsi yang berani tapi benar |
| Integritas | Kejujuran dan moral character | Memilih jalan yang benar walau sulit |
Tugas Pertemuan 11 (Opsional/Bonus)
Tugas ini bersifat opsional. Prioritaskan menyelesaikan inti proyek visual novel kamu terlebih dahulu.
Tambahkan Elemen RPG ke Proyekmu
- Implementasikan minimal 2 statistik karakter (pilih yang relevan dengan temamu).
- Buat minimal 1 skill check dalam menu pilihan.
- Buat screen untuk menampilkan statistik.
- Demonstrasikan bahwa statistik memengaruhi ending.
Kuis Pemahaman Pertemuan 11
Uji Pemahamanmu!
1. Tipe data Python apa yang paling tepat untuk membuat sistem inventory di Ren'Py?
2. Bagaimana cara memeriksa apakah item "buku_teori" ada di inventory?