Upload
alvan-avino
View
200
Download
19
Tags:
Embed Size (px)
DESCRIPTION
for newbie
Citation preview
Beginner Guide to RGSS3
1
Beginner Guide to RGSS3 By : Theo Allen ~
(WARNING: This tutorial has been written in informal Indonesian language. Do not ever ask the google to translate it!)
Prelude : Tutorial ini wa bikin buat kaum2 para RPG Maker user yang masih bener2 awam
dari yg namanya bahasa pemrograman. Terutama versi VX Ace. Well, gw bukannya
udah pinter ngebikin kaek gini, at least gw punya ilmu buat dibagi. Gw sendiri
sbenernya juga masih belajar dalemnya RGSS3 tu ada apa aja. Ah gitu aja deh, g
usah panjang2 :>
Requirement : - RPG Maker VX Ace (bukan RPG Maker lain. Karena Ace punya console)
- Siap mental.
- Ada waktu.
- Willpower!
Beginner Guide to RGSS3
2
Persiapan selesai. Coba testplay RMVXA-mu. Kamu akan menemukan dua hal
yg berbeda di sana. Pertama, kamu akan nemuin window RGSS console yang
isinya kosong. Kedua, u ga bisa masuk game. Dan not responding. Well, itu bukan
masalah sih, emang gitu. Lagian yg penting tu liat RGSS consolenya ntar.
Btw, untuk lesson2 awal ini kita ngga nyentuh RGSS3 dulu. Wa mau bahas
Ruby secara general sbelum masuk ke library RGSS3. Jadi yang sabar. Ga usah
keburu-buru kepikiran Gw pengen bikin menu / battle system kaek gini gitu dll dll .
Oh iya. Sekedar info dan saran. Belajar script itu tidak cukup dipelajari cuman
seminggu trus langsung bisa nyekrip dan modif RGSS3. Well, wa rekomendasiin
sering2 aja dibaca, dicoba, dicatet biar g lupa. Dan lakuin terus selama minimal
sebulan lah. Ntar kalo dah ngerti dan terbiasa, otomatis nulis fungsi2 script dah
diluar kepala.
Beginner Guide to RGSS3
3
Chapter 1: Ruby Basic Syntax
Lesson 1 : Hello World Seperti tradisi awal permulaan belajar bahasa pemrograman. Kita awali dengan
bikin print out Hello World. Well, here u go ~
Ketik kaek gitu, dan jalanin lewat testplay. Ntar munculnya bakal kyak gini
Things to know :
- Puts itu fungsi buat ngeprint out. Printout biasanya berguna buat debugging /
mbenerin program kalo ada kesalahan
- Setelah puts itu bisa u tulisin apa aja. Misalnya kaek Gw ganteng ato apa
aja. :v
Lesson 2 : Getting Input from User Sekarang coba kalo kata2nya berupa inputan dari user. Kayak gini codenya :
Nanti pas u testplay keluarannya kaek gini.
Beginner Guide to RGSS3
4
Things to know :
- Disini meski print ama puts punya fungsi sama, sbenernya print itu ngeprint
tanpa make line break / enter setelah selesai ngeprint.
- gets disini artinya nunggu masukan dari user. Masukan itu ntar disimpen
dalam sebuah variable yang namanya name.
- Di line berikutnya, ada #{}. Tanda kurung yg didepannya ada pagar itu
gunanya buat ngeprint isi dari sebuah variable. Kalo dalam kasus ini, nilai
variable yg diprint adalah name.
Lesson 3 : Variable Type Seperti yang wa jelasin di lesson sebelumnya. Variable tu gunanya buat
nyimpen2 nilai ato something. Di lesson ini ntar w jelasin tipe-tipe variable berdasar
apa yang dia simpen.
Things to know :
- Variable o menyimpan nil. Artinya variable itu bertipe nil (Kosong).
- Variable v menyimpan 10. Artinya variable itu bertipe Integer (Bilangan bulat)
- Variable x menyimpan 10.8. Artinya variable itu bertipe Float (Bilangan
pecah)
- Variable y menyimpan text. Artinya variable itu bertipe String (teks)
- Variable z menyimpan true. Artinya variable itu bertipe Boolean (nilai benar /
salah).
Untuk penerapannya nanti ada pada lesson setelah ini
Lesson 4 : Numeric Mulai bagian sini, wa mau bahas soal masalah itung2an. Macem penambahan,
pengurangan, perkalian, dan pembagian ala scripting.
Langsung aja. Misalnya gini :
Things to know :
Beginner Guide to RGSS3
5
- Hasilnya nanti keluar angka 50 dari hasil perhitungan attack defend (100 -
50).
- Huruf p itu sbenernya sama aja kaek puts. Gw lupa ngomong tadi. Udah
terlanjur ke screenshot banyak. Jadi males benerin. :P
- Script itu kerjanya berdasar sequence / urutan. Variable result g akan
kedeteksi / dikenali kalo semisal u bikinnya kaek gini.
Beberapa operasi dasar yg dapat u gunain :
- (+) Buat penambahan
- (-) Buat pengurangan
- (*) Buat perkalian
- (/) Buat pembagian
- (%) Buat ngambil sisa bagi. Biasanya disebut modulus. Kalo g ngerti
apa sisa bagi itu, u bisa coba2 kode kaek gini dan coba testplay.
Hasilnya ntar 2.
Unary Operator :
Nah, lanjut ke berikutnya. Belum ganti lesson sih. Masih seputar numeric. Yang
sabar ya \:v/. Sekarang w mau nerangin operasi lain. Misalnya variable attack mau
kita tambahin nilainya. Jangan gunain attack + 10. Tapi gunain kaek gini :
U nemuin disana ada operator +=. Itu artinya nilai attack yg lama, ditambahin
10. Kalo g salah operator kaek gt nyebutnya unary. Operator itu sama artinya kaek
gini.
Beberapa operator unary yg dapat u pake :
- (+=) Buat nambahin nilai variable.
- (-=) Buat ngurangin nilai variable.
- (*=) Buat ngali nilai variable.
Beginner Guide to RGSS3
6
- (/=) Buat mbagi nilai variable.
- (%=) Buat ngerubah nilai variable jadi hasil sisa bagi.
Floating Number :
Ke materi berikutnya. Masih seputar numeric / variable. Dalam pemrograman
manapun ada numeric dibagi jadi bilangan bulat (Integer) dan bilangan pecah
(Float). Coba bandingkan kode ini :
1 / 2 itu bilangan bulat. Yg seharusnya jadinya setengah, karena tipenya integer,
akhirnya komanya diilangin deh. Sementara 1.0 / 2.0 adalah bilangan pecah. Kalo gt
ntar hasilnya 0.5. Sbenernya ga harus dua2nya float sih. Salah satu dari mereka
float, ntar akhirnya udah kekonversi ndiri jadi 0.5. Misalnya 1 / 2.0 ato 1.0 / 2
Nah, kalo kasusnya nilainya itu disimpen dalam variable, jadinya gini.
Hasil keluarannya :
Fungsi .to_f itu buat konversi ke bentuk tipe float. Biasanya digunakan buat
perhitungan2 ntar. Tapi di dalem variable attack sendiri tidak mengalami
perubahan. Kalo mo bikin dalemnya attack berubah, gunain aja attack =
attack.to_f. Tapi biasanya ga terlalu penting juga ngerubah ginian sejauh
pengamatan gw
Beberapa operasi konversi yg dapat u pake :
- .to_f buat konversi ke floating number (pecahan)
- .to_s buat konversi ke tipe String (text)
- .to_i buat konversi ke tipe Integer (bulat)
Dicoba sendiri ya :v
Lesson 5: Control flow : Conditional Branch
Beginner Guide to RGSS3
7
Nah sekarang masuk ke conditional branch. Kalian yg RPG Maker user pastilah
tau apa itu conditional branch. Yg biasanya ada switch is on, dan else. Kecuali kalo
emang u bukan RPG Maker expert :v. Well, pokoknya gitu lah. Lanjut. Sekarang
disini yg wa bahas bikin conditional branch versi script.
Here you go :
Hasil ini dah jelas karena secara rumusan attack > defend itu nilainya benar. If
tanpa else itu juga bisa. Tapi if tanpa end itu ga bisa bekerja
Btw, coba u modif dikit biar user bisa nginputin nilainya. Kaek gini :
Nilai kebenaran attack > defend juga bisa disimpen dalam variable. Misalnya u
nyimpennya kaek gini :
Hasil keluarannya ntar juga sama aja. Cuman disini bedanya nilai kebenaran
attack > defend tu disimpen di variable yg namanya result. Kalo disitu ditulis if
result artinya script itu bakal ngerjain dibawahnya kalo result bernilai benar. Else
jika sebaliknya. Sama kaek RPG Maker deh :v
Beginner Guide to RGSS3
8
Ada cara kebalikannya. Pake kata unless. Kalo pake unless ntar script tu
ngerjain kalo result = false. Kaek gini.
Kondisi bercabang jg bisa ditulis dengan satu line. Cuman rada ribet pake cara
ini. Kayak gini contohnya :
Ntar keluarannya tertulis delivered.
Cara lain buat ngeprint delivered gini :
Cuman kalo pake ini, cuman satu line dengan satu kondisi. Kalo kondisi salah, g
ada elsenya. Btw, If diatas diganti unless juga bisa.
Ada juga cara mbalikin nilai kebenaran. Caranya ditambahin ! di depan
variable. Kayak gini nih :
Beginner Guide to RGSS3
9
Comparison2 yg dapat u pake buat ini :
- () Lebih besar dari
- (==) Sama dengan. Bukan pake (=) karena (=) buat ngeset nilai. Bukan
pembanding
- (>=) Lebih besar atau sama dengan
- (
Beginner Guide to RGSS3
10
Disana u nemun ada operator ||. Itu namanya operasi OR. Akan bernilai benar
kalo salah satunya benar. Yang perhatian ama logika matematika pas SMA pasti
ngerti. Kayak gini contohnya :
Attack wa masukin -10. Dan Defend wa masukin 3.Karena salah satu dari attack
dan defend nilainya < 0, maka if tadi dieksekusi. Sekarang ke bagian elsenya. Ada if
didalem if itu kalo bahasa pemrograman namanya nested if. Wa rasa penjelasannya
sam kaek yg sbelumnya deh. Jadi g usah gw ulang kata2 gw.
Oh iya. Soal OR tadi ada kebalikannya. Yaitu AND. Kalo AND tu, pembanding
yg akan bernilai benar, kalo keduanya benar. Coba script simple kayak gini.
Penjelasan :
(10 > 1 && 10 < 1) = true AND false false
(10 > 1 || 10 < 1) = true OR false true
OR -> Salah satu benar, dianggap benar
AND -> Keduanya harus benar.
Ga cuman if else yg bisa bercabang. U bisa pake case dan when. Jadi kayak
gini.
Beginner Guide to RGSS3
11
Di dalem script itu user diminta ngemasukin pilihan antara 1 4. Pilihan itu ntar
dimasukin ke variable choice. Perintah case choice itu artinya nge-evaluasi
variable choice yang ntar akan dikerjakan di salah satu kondisi when kalo ada yang
benar. Kata else adalah kalo disana g ada yang benar. Else disana adalah optional.
U boleh ngilangin else kalo ga perlu. Dan jangan lupa kata end diakhir case.
Contoh keluarannya kayak gini :
Lesson 7: Control Flow : Looping Looping disini artinya mengulang-ulang. Jadi script bisa ngulang perintah ampe
batas yg ditentuin programmer. Langsung aja, contoh simplenya gini.
Ntar bakal keluar kayak gini.
Beginner Guide to RGSS3
12
Things to know :
- for itu adalah perintah ngelooping.
- Ketentuannya ada di belakangnya. Yaitu in 1..10 yg angka2 itu disimpen di
variable yg namanya i.
- Saat u nulis p i artinya u ngasi perintah ngeprint nilai i terus ampe 10.
- Nilai range 1..10 itu juga bisa disimpen dalam variable. Misalnya dibikin kaek
gini.
Contoh loop lain bisa pake kata while ato until. Perbedaannya, kalo while dia
akan terus ngeloop selama kondisinya bener. Kalo until, akan terus ngeloop ampe
kondisinya bener. Kayak gini contohnya.
Ntar itu akan ngeloop selama x masih kurang dari 20. Ibarak kaek lu lagi
omong2an ama program Selama x masi kayak gitu, lakuin ini nih!. Kalo semisal x
+= 1 u ilangin, itu akan jadi neverending loop. Coba aja kalo g percaya :v
Nah, contoh yg until kaek gini :
Disana kalimat loopingnya gini. Lakuin looping terus ampe x lebih besar ato
sama dengan 20. Dicoba eksperimen sendiri ya? Males screenshot yg hasilnya
panjang2 nih :v
Beginner Guide to RGSS3
13
Perbedaannya yg for, while, ama until itu. Kalo for biasanya dipake buat looping
yg udah jelas. Kalo while ato until itu dipake buat looping yg masih g jelas ampe
kapan dia loopingnya dan kapan berhentinya.
Sekedar trivia. Game RPG Maker itu update framenya pake looping. Game akan
terus ngeloop dengan isi perintah update frame gambar, dll Dan berhenti ketika
player dah exit dari game. Itu salah satu contoh looping pake while ato until.
Lesson 8 : Methods Dalam bikin script gede, pasti lah ada jenuhnya juga semisal kalo kita harus
nulis fungsi yang sama berulang-ulang. Selain jenuh, bikin program berantakan dan
susah dibaca. Solusinya, fungsi2 kaek gini bisa dibungkus lewat method. Kalo
dalam script, biasanya u nemuin yang namanya def. Gini caranya :
Keluarannya ntar ngeprint ~
U juga bisa nambahin dalemnya method itu macem2 kayak gini :
Dengan output ~
Intinya gitu lah. Method itu buat ngebungkus fungsi2 gitu biar jadi lebih simple.
Method Argument / Parameter :
Beginner Guide to RGSS3
14
Method juga kadang butuh yang namanya argumen. Jadi butuh masukan juga.
Misalnya kayak gini :
Def damage adalah method dengan nama damage yg butuh 2 masukan /
argumen. Argumen pertama ntar disebutnya attack dan kedua defend. Di dalem
methodnya itu ntar dievaluasi sedemekian. Ngerti ndiri lah :v
Di line terakhir, wa nulis damage(100,50). Jadi ntar itu, 100 dianggep sebagai
attack dan 50 dianggep sebagai defend di dalem methodnya. Jadinya gini :
Seandainya u cuman nulis damage tanpa masukan. Ato masukannya cuman
satu kayak damage(100) akan keluar pesan error wrong number of arguments
semacam ini.
Method return value :
Method juga bisa buat ngerjain suatu rumus ato fungsi yang nantinya punya nilai
kembalian. Nilai kembalian itu bisa berupa benar / salah (boolean), String (text),
ato angka. Contohnya gini
Beginner Guide to RGSS3
15
Di dalem method damage, ada 2 perintah. Value = damage defend artinya
nyimpen hasil pengurangan. Perintah kedua, return value itu artinya method itu
ngembaliin nilai yg disimpen value.
If damage(100,50) nyimpen nilai 50 karena penjelasan diatas. Karena 50 > 0,
maka pernyataan itu bernilai benar. Hasil keluarannya adalah delivered
Kata return juga bisa buat mberhentiin method ditengah-tengah. Contohnya
kayak gini.
Karena return itu arti aslinya adalah mengembalikan nilai, maka kalo method
ada return ditengah-tengah, maka method itu sudah tidak butuh ngejalanin perintah2
yang ada dibawahnya. Disana u liat, setelah return tidak ada variable. Itu artinya
method ini ngembaliin nilai kosong / nil. Btw, kyak gini keluarannya :
Secara default, bahasa ruby aslinya punya return di setiap akhir line methodnya.
Hal ini bisa dibuktiin dengan cara gini.
Disana wa ga nulis, return 150. Tapi kalo method itu diprint out, dia akan
ngeluarin angka 150 kayak gini.
Method default argument value :
Beginner Guide to RGSS3
16
Ada juga method yang mempunyai default value buat argumennya. Jadi
opsional. U bisa masukin argumen ataupun tidak. Kayak gini.
Def attack(atk = 100) itu artinya kita ngeset default value buat argumen atk =
100. Dibawahnya itu, kita bisa langsung panggil attack tanpa masukin argumen.
Ato kita juga bisa ngerubahnya pake attack(1500). Hasil keluarannya seperti ini :
Method juga bisa dipake buat argumen pemanggilan method lain. Kali ini wa
mau nyontohin pake materi fungsi yg diajarin pas SMA. Yg macem f(x), g(x), f(g(x)).
Ini bagian menarik kalo menurut gw. XD
Coba diitung manual. Hasilnya pasti sama kyak ini :
Lesson 9 : Variable Scope Lesson kali ini cukup singkat. Wa mau bahas cakupan variable. Dalam ruby,
variable berdasar cakupan dibagi menjadi 3 macam. Yaitu :
- Local Variable
- Instance Variable (Ntar dibahas di lesson berikutnya)
- Global Variable
Local Variable
Beginner Guide to RGSS3
17
Sesuai artinya, variable lokal cuman digunakan oleh cakupan lokal. Semisal u
bikin script seperti ini. Pasti akan mengakibatkan error.
Disana, variable value cuman dikenali diluar method print. Begitu juga
sebaliknya. Nama variable yang u definisiin di dalem method, ga bisa diketahui
diluar method.
Ga cuman method aja sih. Kalo u ngedefinisiin variable baru di dalem if
misalnya. Itu juga cuman bisa diketahui di dalemnya if doank. Cuman bedanya, kalo
u ngedefinisiin variable diluar if, masi bisa kebaca di dalem if. Kayak contoh di
lesson conditional branch tadi. Variable attack dan defend bisa kebaca di dalem if.
Global Variable
Sesuai artinya. Global variable dapat dipake dimana aja. Biasanya buat dipake
bersama. Global variable diawali dengan $ di depan nama variablenya. Contoh
global variable dalam RGSS adalah seperti contoh array yang ada di lesson 7. Well,
langsung aja nyoba kita bikin contoh global variable. Kita edit contoh yang ada
diatas seperti ini
Tidak lagi terjadi error.
Untuk keterangan soal Instance Variable akan ada di lesson berikutnya.
Beginner Guide to RGSS3
18
Chapter 2 : Ruby Basic Object
Lesson 10 : Arrays Ada yang masih ingat himpunan dalam matematika? Ah, tapi g usah diinget-
inget deh. Buat yg eneg ama MTK bisa bikin tambah mabok. Well, array disini
semacem barisan buat nyimpen data gitu. Data itu ntar disimpen di index2. Index
array dimulai dari angka 0. Well, langsung aja deh prakteknya :>
P ary[0] itu ngeprint index ke 0. Artinya angka 1 bakal muncul
P ary[3] itu ngeprint index ke 3. Artinya angka 4 bakal muncul
P ary tu ngeprint semua array.
Array as Stack or Queue:
Arti stack disini seperti tusuk sate. Data ditumpuk-tumpuk dan ditaruh akhir. Ntar
yg terakhir kali masuk, juga yang keluar duluan. Gampangannya sih ngemasukin
data di bagian akhir array. Pake keyword push.
Disana u bisa liat dot push gunanya buat ngemasukin nilai. Push(4) nantinya
akan masuk di bagian belakang.
Buat ngambil nilai terakhir trus sekalian didelet, caranya pake dot pop.
Kayak gini :
Disana keliatan kalo elemen terakhir 7 itu ilang.
Beginner Guide to RGSS3
19
Array as queue berarti disini seperti antrian. Element pertama ntar yg diambil
duluan. Jadi ngambil elemen pertama, sekalian ngedelete. Gini caranya.
Bisa u liat disana angka 3 hilang dari array.
Untuk ngemasukin element dari awal, bisa pake unshift.
Dengan pake unshift artinya kita masukin data ke element pertama dan geser
data2 lain ke kanan. Untuk kegunaan nyata push, pop dalam RGSS3 ntar akan
dijelasin di chapter lain.
Clearing an array :
Semisal kita mo ngebersihin isi array, kita bisa make fungsi dot clear. Contohnya
seperti ini.
Get maximum or minimum value :
Array juga bisa dicari nilai maksimum minimumnya dengan pake dot max ato dot
min. Caranya cukup simple. Coba code kayak gini :
Dalam script RPG Maker, penggunaan min max untuk nentuin apakah suatu
item itu udah maksimal atau belum. Kalian tau kan kalo RPG Maker secara default
maksimum itemnya adalah 99? Contoh simulasi penggunaan pada item kayak gini :
Beginner Guide to RGSS3
20
Things to know :
- Def item_max disana adalah untuk nyimpen item maksimum
- Def gain_item adalah method untuk nambahin item
- Pada line ke 17, [new_number,0].max untuk ngecek mana yg lebih besar. Ini
untuk mencegah biar angka item ga minus.
- Kita anggap aja new_number adalah 20 (line 26). Maka script ngerjain
[20,99].min. Dan hasilnya adalah 20. Itulah jumlah item yang baru.
- Def lose_item di line 20 sebenernya adalah gain_item yang amountnya
dijadiin minus nilainya
- U bisa liat di line 32, seandainya 5 dikurang 999 harusnya minus. Tapi
perintah yg ada di line 17 ([new_number,0].max) ngecegah hal itu terjadi.
Sorting an Array :
Array juga bisa diurutkan datanya dengan fungsi dot sort. Cuman fungsi sort
dibedakan menjadi dua. sort dan sort!. Berbedaannya ada disini
a. Sort
Dot sort (tanpa tanda seru) artinya kita bikin array baru dari hasil sorting.
Contoh penggunaannya kayak gini :
Bisa u liat disana kalo variable ary1 tidak mengalami perubahan. Sedangkan
ary2 adalah variable baru yg nyimpen array hasil sortingan dari ary1.
b. Sort!
Beginner Guide to RGSS3
21
Dot sort (dengan tanda seru) artinya sortingan itu juga ngerubah susunan
arraynya sekalian (bukan duplikasi). Seperti ini contohnya :
Disana keliatan kalo isi dari variable ary berubah.
Evaluate each element of Array:
Nilai tiap array juga bisa jadi bahan looping. Pake keyword each. Caranya gini :
Artinya itu, jumlah panjang arraynya jadi batesan looping. Di screenshot itu
panjang arraynya ada 5. Berarti loopingnya ntar bakal dijalanin sebanyak 5 kali. Dan
nilai2 dalam array itu disimpen dalam variable yang namanya | item |. Aslinya mah
terserah mau u namain apa. Btw, kedua penulisan itu hasilnya sama aja. Jadi tinggal
u nyaman nulis yg kaek apa terserah u.
Array checking :
Fungsi ini gunanya buat ngecheck elemen-elemen array. Ntar keluarannya
berupa boolean. True ato false. Gunanya biasanya buat conditional branch. Well,
langsung aja. Kayak gini :
a. Method all?{| item |}
Method ini untuk mengecek apakah semua elemen array sesuai dengan
persyaratan yg ditulis dalam {}. Contohnya kayak gini.
o Line 11 nilainya benar. Karena semua elemen didalem lebih kecil dari 6.
o Line 12 nilainya salah. Karena ga semua elemen di dalem == 3.
b. Method any?{| item |}
Method ini adalah kebalikan dari dot all?{}. Nilainya akan bernilai benar kalo
salah satu dari elemen array ada yang benar. Contohnya kayak gini.
o Line 11 nilainya salah. Karena di array itu g ada yg bernilai 6
o Line 12 nilainya benar. Karena salah satu ada yang bernilai 3.
Beginner Guide to RGSS3
22
c. Method empty?
Method ini buat ngecek apakah array itu kosong ato ngga. Contoh
penggunaannya kayak gini.
d. Method include?()
Method include?() mirip2 dengan any?. Cuman kalo any persyaratannya
bisa dinamis. Kalo include cuman evaluasi satu nilai aja. Dia akan benar kalo
salah satu arraynya sama dengan argumen yg dimasukin ke (). Contoh :
Array size :
Buat ngambil panjang array, u bisa pake dot size. Jadi u tinggal nulisin ary.size
buat ngambilnya. Contohnya kayak gini :
Implementasi array tu kalo di RGSS buat nyimpen data2 yang ada di database.
Biasanya disimpen dengan format nama gini. $data_namadata. Coba ketik kayak
gini di script editor :
Sekedar trivia. Hal yg perlu u ketahui dalam struktur database RPG Maker. Array
emang dimulai indexnya dari 0. Tapi untuk memudahkan non-scripter, database
RPG Maker dalam script, index 0 dibikin nil / kosong. Jadi kalo semisal u ngeset
database Actor sebanyak 8, waktu u print $data_actors.size keluar angka 9.
Kalau mau tahu tentang array lebih banyak lagi, kamu bisa ngelihat helpfile
RGSS3 dengan cara pencet F1 dan cari sperti di screenshot
Beginner Guide to RGSS3
23
Lesson 11 : Hashes Hash sedikit berbeda dengan array. Kalo array memiliki index, sedangkat di
hash namanya key. Array dimulai dengan ary = []. Sedangkan hash dimulai dengan
hash = {}. Penggunaan hash dalam RPG Maker biasanya untuk menyimpan jumlah
inventori. Seperti jumlah item, weapon, armor.
Seperti ini contoh penggunaan hash.
Things to know :
- Hash dimulai dengan { dan diakhiri dengan }
- Perintah p hash[potion] itu ntar ngeprint value yang dimiliki key yg bernama potion.
- Disana bisa diliat potion => 10. Berarti ntar scriptnya bakal ngeprint 10
- Hash[potion] += 20 itu artinya nambahin nilai key potion
- Saat diprint lagi, ntar nilainya bakal jadi 30
Coba u ganti potion dengan kata lain yg tersedia diatas
Hash each method :
Beginner Guide to RGSS3
24
Hash juga mempunya fungsi each sama kayak Array. Cuman disini sedikit
berbeda. each dalam array itu nge-evaluasi nilai tiap element array. Sedangkan
hash nge-evaluasi key dan valuenya. Formatnya kayak gini.
Things to know :
- Seperti array. Key dan value diantara || itu adalah sebutan yg sebenarnya
terserah mau u sebut apa.
- Format each buat hash yg pasti. Sebutan pertama itu untuk ngambil key. Dan
yang kedua untuk ngambil value.
Kalo kita mo ngambil keynya ato valuenya doank. Kita bisa make each_key ato
each_value. Caranya sama. Cuman penyebutnya Cuma satu. Kayak gini :
Convert to array :
Kita juga bisa bikin array baru dari key ato valuenya hash. Dengan cara
tambahin dot keys ato dot values. Caranya kayak gini :
Things to know :
- Variable key nantinya akan nyimpen array yg isinya key dari hash
- Variable value nantinya akan nyimpen array yg isinya value dari hash
Output scriptnya ntar kayak gini :
Ada lagi yang menarik disini. Kita bisa manggil dua fungsi secara langsung.
Semisal hash.values adalah ngebikin array berdasar value dari hash. Kita juga bisa
langsung manggil fungsi array bersamaan dengan itu. Misalnya hash.values.each.
Seperti ini contohnya.
Beginner Guide to RGSS3
25
Nanti keluaran scriptnya kayak gini :
Deleting key(s) :
Kalo semisal kita pengen delet key dari suatu hash, kita bisa pake fungsi dot
delete. Contoh penggunaannya sebagai berikut :
Bisa diliat kalo dalam hash itu key 1 ilang dari.
Fungsi2 lain yg ada di hash :
- .clear >> untuk ngosongin hash ato balik jadi = {}
- .empty? >> untuk evaluasi keberanan. Nilainya bener kalo hash tu g ada
isinya
- .has_key?(key) >> untuk evaluasi kebenaran. Nilainya bener kalo hash punya
key yg dimasukin di dalem ().
- .has_value?(value) >> sama kayak has_key. Bedanya dia nge-evaluasi value.
- .size >> sama kayak fungsi pada array. Ngitung jumlah elemen hash.
Sisanya bisa u cari ndiri di helpfilenya RPG Maker. Happy reading
Lesson 12 : Classes Class itu kasarannya adalah sebuah wadah cetakan template buat bikin
object2 dalam game. Well, di dalem game tu sbenernya banyak object2. Misalnya
object player, object window, dan masih banyak lagi. Nah, disini w mau nerangin apa
itu class, apa itu object, dan macem2nya.
Sebagai contoh awal, gw mau contohin bikin class yg gunanya buat ngeprint2
dulu. Kayak gini contohnya
Beginner Guide to RGSS3
26
Things to know :
- Nama class harus diawal dengan huruf besar
- Class dilengkapi dengan method2 yg ngebikin ntar class itu bisa ngapain aja
- Test = Print.new artinya kita bikin sebuah object baru (new) dengan tipe
objectnya adalah Print. Istilah kerennya bikin object baru disebut juga
instansiasi.
- Object test ntar bisa ngelakuin [dot] printout(x) dan [dot] itung(x) sesuai apa
yg udah ditulis di class Print.
Class Attributes :
Class juga bisa aja punya attribut. Ngomong-ngomong soal attribut, mari kita
tengok konsep RPG sebentar. Player mempunyai attribut HP, MP, ATK, DEF. Dalam
battle RPG Maker, pelakunya disebut Battler. Berarti Player memiliki class dengan
type Battler yang dimana class Battler nanti mempunyai attribut HP, MP, ATK, DEF.
Kita bikin satu contoh attribut dulu de. Coba kayak gini :
Things to know :
- Variable dengan karakter depan @ adalah instance variable. Atau juga bisa
disebut class variable
Beginner Guide to RGSS3
27
- Instance variable tidak dapat diakses selain di dalam class itu sendiri. Untuk
mengaksesnya, gunain method
- Method set_hp disana artinya ngeset nilai instance variable @hp.
- Method get_hp disana artinya ngambil nilai instance variable @hp.
- Gw kan ngeinstant dua object baru. Yaitu actor dan enemy. U jg bisa ngeset
attribut HP masing2 object itu beda2.
Class Constructor :
Kalo seandainya siap kali kita instansiasi object baru, repot banget kalo
senadainya kita harus nulis set_hp pada line setelahnya. Untuk ngatasi itu, kita bisa
bikin fungsi yang namanya konstruktor. Dalam ruby, konstruktor ditulis dengan def
initialize. Seperti ini :
Things to know :
- Method def initialize disebut jg konstruktor. Namanya pasti initialize. Bukan
yang lain.
- Konstruktor dieksekusi saat penginstansian object. U bisa liat disana w tulis
Battler.new(100). Angka 100 ntar jadi masukan def initialize yg ntar masuk ke
instance variable @hp.
- Disaat lain, actor.get_hp udah punya nilai kembalian.
Attibute Methods :
Dalam game tentunya battler ngga cuman punya attribut HP. Tapi juga yang
lain. Nah, seandainya kita ntar nulis def get dan def set untuk semua attribut,
pastilah sangat merepotkan dan menjenuhkan banget. Ruby punya fungsi khusus
untuk hal ini.
Coba script berikut :
Beginner Guide to RGSS3
28
Things to know :
- U tau disana ada yg namanya attr_accessor. Itu sama halnya u bikin
method buat ngambil nilai @hp (get method) ama bikin method buat ngeset
nilai @hp (set method)
- Fungsi attr_accessor sama halnya u bikin dua fungsi kayak gini.
Beberapa list fungsi attr series yang dapat u gunain :
- attr_accessor = Bikin get dan set
- attr_reader = Cuman ngebikin method getnya (def hp) doank.
- attr_writer = Cuman ngebikin method setnya (def hp=(hp)) doank.
Class static variable :
Static variable adalah variable yang nilainya sama meski dalam object yang
berbeda. Jika salah satu object, nilai static variablenya berubah, maka object lain yg
punya class yg sama, static variablenya juga berubah. Susah jelasinnya. Langsung
pake contoh aja. Bikin script kayak gini :
Beginner Guide to RGSS3
29
Things to know :
- u bisa liat disana method konstruktor ada perintah @@jumlah += 1. Jadi tiap
kali w instant object, variable @@jumlah nambah 1
- u jg bisa liat disana w ngeset nilai HP dalam variable @hp (@-nya cuman
satu).
- Print pertama w ngeprint nilai jumlah dan HP. Keluarannya 1 dan 100
- Print kedua w ngeprint nilai jumlah dan HP untuk object kedua. Keluarannya 2
dan 30. Bisa u liat kalo variable @@jumlah sekarang jadi 2
- Print ketiga sama kayak print pertama. Cuman bedanya disini nilai jumlah yg
dimiliki object pertama sama kyak object kedua. Sedangkan HP mereka
berbeda.
Sejauh pengamatan gw, static variable dalam RGSS ntar ga gitu kepake. Ada
juga cuman sedikit implementasinya.
Class Inheritance :
Kalo kalian lihat lagi, saat battle, enemy dan actor mempunyai kesamaan dap
perbedaan. Persamaannya, mereka sama-sama punya yg namanya HP, MP, ATK,
dan attribut2 dasar lainnya. Tapi RPG Maker secara default tidak menyediakan
attribut Level ato current exp untuk enemy. Sedangkan actor juga tidak mempunyai
attribut gold drop, item drop, ato exp bonus.
Sangat merepotkan kalo ntar u harus nulis class actor dan enemy yang dimana
mereka punya kesamaan. Untuk masalah ini, ruby nyediain yg namanya
Beginner Guide to RGSS3
30
inheritance. Ato dalam arti bahasa indonesianya adalah keturunan. Contoh
penuruan dalam Ruby seperti ini :
Things to know :
- Indikator < pada class Lower < Upper artinya, bahwa class Lower mewarisi
semua apa yg dimiliki Upper.
- Dalam class Lower, gw ga perlu ngedefinisiin lagi method yg isinya print kata
line1/2. Karena di dalem class Lower udah punya. Ngambil dari parent
classnya. Bisa u liat ndiri di keluarannya. Obj2.method ngeprint line 1 ama
line 2.
- Dalam class Lower, gw jg bisa manggil method yg dah eksis di parent
classnya buat dimasukin ke method baru. Liat line 21.
- Ntar saat eksekusi obj2.method2, dia akan ngeprint tulisan line 1 ampe line
4.
- Kalo semisal u nulis obj1.method2, pasti akan keluar error. Karena obj1
adalah object instant dari class Upper dimana di class itu ga ada method2.
Semisal u ga sreg dengan method yg ada di superclass / parent classnya, u bisa
aja ngeoverride (ganti dalemnya), ato nambahin fungsi baru. Dengan keyword
super. Kayak gini contoh penggunaannya dan masing2 keluarannya.
Contoh penggunaan super :
Beginner Guide to RGSS3
31
Contoh penggunaan override :
Disana bisa u liat kalo kata super itu artinya manggil semua fungsi yg ada di
superclassnya. Semisal def method membutuhkan masukan, seperti method(x),
maka ntar super juga ditulis dengan super(x).
Screenshot kedua itu namanya override. Kalo si superclass mungkin nulis line1
line2. Tapi diclass anaknya method itu dirubah. Jadi Ga ada line.
Aliasing :
Aliasing sama artinya dengan mengkopi paste method dengan nama baru.
Dalam RGSS, aliasing berguna untuk kompatibilitas dengan script lain kalo u mau
nyebar2 scriptmu. Contoh aliasin tu seperti ini :
Things to know :
Beginner Guide to RGSS3
32
- U bisa liat kalo pada line 32, wa tulis ulang class Lower < Upper. Itu gunanya
buat ngemodif isi class itu. Jadi ngga perlu ngeditnya diatas. Fitur kayak gini
dimanfaatin scripter buat nyekrip semuanya di bagian material script editor
nantinya.
- Line 33 u liat wa tulis alias disana. Itu maksudnya gini. alias
.
- Line 34 itu kita ngeoverwrite isi method. Karena program kerjanya urut, maka
isi method yang dipake nantinya adalah yang terakhir didefinisikan.
- Line 35, itu manggil method aliasnya. Di method alias itu isinya sama persis.
Serasa seperti kopas.
- Line 36, itu kita nambahin perintah print line4
- Keluarannya bisa diliat. Tulisan line 1 ampe 3 adalah bawaan fungsi2
sebelumnya sebelum method dioverwrite. Tulisan line4 adalah fungsi baru yg
kita tambahin. Semisal u hapus line 34, maka ntar yg keluar bakal cuman
tulisan line4.
Lesson 13 : Modules Module mirip2 dengan class. Cuman bedanya module tidak membutuhkan
instansiasi kyak class. Dan umumnya bersifat konstan isinya (ga berubah). Module
dalam RGSS3 nyiapin fungsi2 dasar ato konstanta2 yang nantinya bisa dipake di
seluruh struktur program. Module dibuat untuk memudahkan scripter ato non-scripter
mengubah flow program nantinya.
Ini adalah contoh simulasi script2 RGSS3 yang biasa ditemui di internet :
Dengan keluaran kayak gini :
Things to know :
- Untuk ngambil variable dari module, cukup dengan nulis
NamaModule::Konstanta.
- Nama module harus dimulai dengan huruf besar.
Beginner Guide to RGSS3
33
- Semisal ada module dalam module, berarti u harus nulis
module1::module2::Konstanta.
Module Method :
Module juga bisa aja nyimpen method buat fungsi-fungsi dasar. Dalam RGSS3,
module yang nyimpen2 fungsi dasar ada di SceneManager, DataManager,
BattleManager, dan masih ada yg nanti wa bahas di chapter selanjutnya. Sekarang
wa kasih contoh, module yang nyimpen fungsi. Misalnya kayak gini.
Things to know :
- Dalam nulis method di module, kita butuh kata tambahan self setelah def.
- Cara pemanggilan method module cukup dengan tulis NamaModule.method
- Kalo ada module dalam module, caranya sama kayak diatas.
Module1::Module2.method
Module Method aliasing :
Seperti halnya method dalam class. Module juga bisa dibikin alias methodnya.
Hanya saja caranya sedikit berbeda. Seperti ini contohnya :
Things to know :
- Untuk ngelakuin aliasing pada method module, u harus nulis class
Beginner Guide to RGSS3
34
Lesson 14 : Object Funtions Tiap object (Hasil instantsiasi) punya fungsi-fungsi yang sama. Entah itu dari
array, hash, ato object yang u bikin classnya sendiri.
Object Duplictation / Clone :
Coba bikin code kayak gini :
Analisis :
- Bisa u liat disana w bikin object array dengan nama ary
- Trus gw bikin lagi variable test = ary.
- Disana w ngeprint ary dan ada isinya
- Trus w tulis test.clear yg ngehapus isi ddari variable test
- Ternyata pas gw ngeprint isi ary, ary jg keapus.
- Kesimpulannya : kedua variable itu saling terkoneksi.
Coba kalo kodenya u rubah dikit jadi kayak gini :
Diliat dari screenshot itu, ary ama test udah ga lagi tersambung. Fungsi dot dup
pada object itu gunanya untuk duplikasi object yang isinya persis.
Object equality check :
Untuk ngecek apakah dua object itu saling terhubung ato ngga, kita bisa pake
fungsi dot equal. Seperti ini :
Get object class :
Kita juga bisa ngambil nama class object tertentu. Misalnya kayak gini :
Beginner Guide to RGSS3
35
Fungsi dot class artinya ngambil tipe class dari object itu. Sekedar saran. Coba u
eksperimen aja u bikin variablenya nyimpen nilai angka, text, ato yang lain. Trus u
print dengan pake dot class. Dan liat apa yg keluar :D
Check object class :
Mirip seperti get object class. Tapi disini ntar keluarannya berupa boolean. True
ato false. Coba kode berikut.
Variable ary classnya adalah Array. Saat kita nulis dot is_a?(Array) maka
nilainya benar. Dan bernilai salah kalo kota nulis yang lain.
Nil check function :
Fungsi ini untuk mengecek apakah sebuah variable tu kosong apa ngga. Contoh
penggunaannya kayak gini.
Beginner Guide to RGSS3
36
Chapter 3: RGSS3 Built-in Modules Oke, setelah sekian banyak bahas soal basic ruby, akhrinya wa bahas juga soal
RGSS3 Built-in modules. Gw udah anggap kalian dah bisa dan lancar soal basic-
basic ruby.
Built-in modules disini artinya, module-module yang udah dibikin untuk keperluar
RPG Maker. Contoh-contohnya adalah :
- Audio. Untuk keperluan play sound macem BGM, BGS, ME, SE.
- Input. Untuk nangkep masukan dari user. Misalnya pencet up, akhirnya
karakter jalan keatas.
- Graphics. Module ini ngurus bagian grafis. Seperti update frame, update
gambar biar gambar terus gerak.
- RPG. Module ini nyimpen data-data yang ada di RPG Maker. Seperti skill,
actor, class, weapon. Tapi ntar gw bahas di chapter berikutnya.
Lesson 15 : Module Audio Seperti yg gw jelasin sebelumnya kalo module ini ngurus soal sound. Langsung
aja deh ke penerapannya.
Audio.bgm_play(filename, volume = 100, pitch = 100)
Coba bikin script kayak gini.
Kalo u testplay, di console emang g keluar apa-apa. Cuman kalo u ada sound,
pasti keluar lagu battle1 RTP. Argumen filename itu harus sesuai dengan tempat
BGMnya. Secara default, RM nyetor BGMnya ke sub-direktori Audio/BGM. Jadi u jg
harus nulisnya gitu. Parameter volume dan pitch bisa diabaikan. Karena dua
parameter itu dah punya default value.
Sekarang Coba kayak gini.
Dngerin. Ntar u dnger battle1 dengan versi pitch dinaekin ampe 150.
Audio.bgm_stop
Udah ketauan dari namanya kalo fungsi ini untuk berhentiin BGM. Well,
sekarang dicoba kayak gini.
Beginner Guide to RGSS3
37
Intinya script diatas, BGM akan terhenti ketika nilai count >= 9999.
Audio.bgm_fade(time)
Seperti namanya. Fade untuk ngefadeout BGM dimana parameter time adalah
angka yang menunjukkan milisecond. Semisal lagu u mo dibikin ngilang selama satu
detik, masukin aja angka 6000. Well, contohnya kek gini.
While true disana artinya, kita bikin program yg never-ending loop. Coba u
testplay, BGMmu pasti akan abis pada detik ke 10.
Beberapa method lain yg ada di module Audio (ga perlu dibikin contohnya.
Soalnya kebanyakan sama cara kerjanya)
- Audio.bgs_play(filename, volume = 100, pitch = 100)
- Audio.bgs_stop
- Audio.bgs_fade(time)
- Audio.me_play(filename, volume = 100, pitch = 100)
- Audio.me_stop
- Audio.me_fade
- Audio.se_play(filename, volume = 100, pitch = 100)
- Audio.se_stop
Lesson 16 : Module Graphics Ngomong-ngomong soal module graphics, apakah u mikir di lesson ini langsung
bahas soal grafis, GUI, ato hal2 lainnya? Well, kalo u berpikiran gitu, u berarti salah
besar. Emang disini ngomongin soal grafis. Tapi kita belom nyentuh game.exe sama
sekali. Masih seputar konsol :P
Langsung mulai aja deh lessonnya ~
Get width and height
Fungsi diatas gunanya untuk ngambil lebar dan tinggi layar game. Secara
default, lebar dan tinggi layar adalah 544 x 416. Coba kode kek gini.
Beginner Guide to RGSS3
38
Resizing window
Method ini untuk resize screen. Pol-polan u bisa resize sebesar 640x480. Coba2
aja misal u masukin kek gini.
Graphics frames
Dalam RPG Maker, pergantian gambar bergerak / berubah sebanyak 60 frame
per detik. Dan pergantian itu dilakukan dalam loop yang terus menerus selama
gamenya ga exit. Langsung aja deh ke cara kerja frames. Contoh kayak gini.
Things to know :
- Graphics.frame_count = nyimpen total frame. Makin lama kita maen game
RM, makin banyak juga jumlahnya ntar. Biasanya ini dipake buat basic
perhitungan total playtime.
- Graphics.update = fungsi ini gunanya buat ngerefresh. Fungsi ini dipanggil
terus dalam loop ntar.
Contoh simulasi looping dalam game RPG Maker yang sebenarnya terjadi itu
dasarnya seperti ini :
Ada lagi fungsi Graphics.frame_rate. Itu buat ngatur refresh rate. Normalnya
nilainya adalah 60. Artinya, dalam satu detik nambah 60 frame. Bisa u ganti antara
10 120. Makin banyak angkanya artinya kerja CPU juga makin berat. Ngeganti
Beginner Guide to RGSS3
39
frame_rate bukanlah ide bagus. Jadi lebih baik ga usah diganti nilainya.
Penggunaan frame_rate biasanya untuk perhitungan detik. Seperti ini contohnya :
Untuk yang kali ini ngga bisa discreenshot. Karena hasilnya bisa diliat lewat
realtime. Btw, kalo u coba ini, u bisa amati kalo pergantian nilainya berdasar interval
detik realtime. Kalo semisal u coba print Graphics.frame_rate keluarnya adalah
angka 60.
Sebenernya fungsi2 dari module Graphics sendiri masih banyak. Tapi karena
kita masih mainan seputar konsol, jadi ga begitu terasa. Kalo mau tau fungsi2 lain,
jangan lupa, senantiasa buka helpfile RMVXA dengan pencet F1 dan cari bagian
Graphics.
Lesson 17 : Module Input Module input adalah module yang ngurusin masukan dari user. Misalnya kalo
dalam RPG Maker, kita pencet X, maka menu keluar. Kita pencet up, player gerak
naek. Dan seperti itulah.
Module input juga punya update seperti Graphics.update. Dalam RPG Maker,
Input.update dipanggil bersamaan dalam satu method kyak Graphics.update. Coba
modif program u bentar jadi kyak gini.
Kalo semisal u run, emang ga terjadi apa-apa. Soalnya emang belom ada apa-
apanya. Ok, langsung ke lesson berikutnya. Coba kode seperti ini :
Beginner Guide to RGSS3
40
Things to know :
- Input.trigger >> Fungsi ini nge-evaluasi satu kali pencetan
- Input.press >> Fungsi ini nge-evaluasi selama tombol itu dipencet
- Input.repeat >> Fungsi ini nge-evaluasi apakah tombol itu masih dipencet ato
kaga. Bedanya press dengan trigger, kalo repeat semisal tombol itu tetep kita
pencet, akan ada jeda sepersekian detik sbelum eksekusi.
Lebih bisa dirasakan kalo dicoba sendiri di scriptnya. Dan ambil kesimpulan
sendiri. Soalnya susah nerangin lol. Btw, beberapa key yang dapat dipake buat
inputan :
:UP :DOWN :LEFT :RIGHT
Symbol2 dari direction button yg ada di keyboard
:A :B :C :X :Y :Z :L :R
Symbol perwakilan dari tombol2 di RM
:SHIFT :CTRL :ALT
Symbol yg merujuk langsung ke shift, ctrl, alt pada keyboard
:F5 :F6 :F7 :F8 :F9
Symbol yg merujuk langsung ke tombol2 fungsi.
Ni gambar yg nunjukin letak2 tombol2 RM
Beginner Guide to RGSS3
41
Beginner Guide to RGSS3
42
Chapter 4: RPG Maker VX Ace Data Structures Ok, untuk lesson kali ini gw mo bahas soal penyimpanan data di RPG Maker VX
Ace dalam script. Pastikan DataManager.init yg ditulis diatas ada. Soal e itu fungsi
gunanya buat ngeload database ntar ~
Lesson 18 : Module DataManager DataManager adalah module yang fungsinya ngatur data-data yang ada di
RMVXA. Mulai dari inisialisasi kek ngeload dari yg u masukin ke editor, masuk ke
game, save game, dan load game. Ok, screenshot sebagian DataManager kek gini.
DataManager.init isinya menginisialisasi semua game object. Load database
disana artinya ngeload semua database yg kita setting di editor. Dari editor, saat kita
save, data itu akan disetor ke _.rvdata2. Lalu saat kita jalanin game, dari _.rvdata2
dimasukin semuanya ke $data_
Beginner Guide to RGSS3
43
Game object dibagi menjadi dua. Satu adalah $data_ yaitu hasil import dari
editor yangnanti jadi acuan untuk flow game. Satu lagi adalah $game_. Object
$game_ adalah object yang berubah-ubah seiring berjalannya game. Seperti contoh
kecilnya adalah, $game_actors. Saat kita maen game RM, tentulah actor memiliki
equip yang berbeda-beda disetiap playtime. Save file satu dengan yang lain berbeda
keadaan actornya. Sedangkan object $data_ dari save file satu ama file lain tetep
sama. Ini screenshot dimana game object dibikin.
Secara garis besar, proses transfer data dari editor sampe dimaenin ke game
kayak gini. Sekedar sekilas saja sih :
Dalam module DataManager nanti juga ada yang mengurus save dan load
game. Tapi karena flownya terlalu kompleks, jadi gw skip dlu.
Lesson 19 : Module RPG Module RPG adalah module yang ngurus hierarki class-class dalam RPG
Maker. Seperti class Actor, class Skill, class Weapon, dll. Misalnya dalam skill nanti
ada attribut nama, mp cost, tp cost, description, dll.
Langsung saja. Secara gambaran, seperti ini hierari class yang ada dalam
module RPG.
Beginner Guide to RGSS3
44
Karena tempatnya ga cukup, untuk RPG::State wa sendiriin dibawah.
Beginner Guide to RGSS3
45
Lol, banyak banget yah. Padahal ini masih seputar base item. Belom lagi soal
RPG::Map, System, Encounter, Troop, Common Event ato yang lainnya. Sekarang
langsung ke prakteknya aja cara ngambil data2 tu dalam script.
Misalnya kita ambil contoh di bagian skill. Skill itu disimpennya dalam variable
$data_skills yang tipenya array yg nyimpen2 object dengan class RPG::Skill. U bisa
liat kalo di RPG::Skill tu inherit (keturunan) dari RPG::UsableItem. Dan
RPG::UsableItem sendiri inherit dari RPG::BaseItem.
Coba u tulis kyak gini :
Itu cara-cara buat ngambil data dari database ntar dalam script. Coba-coba
eksperimen sendiri untuk data yang lain. Misalnya $data_items, $data_actors,
printout attribut2nya.
Ada yang menarik disini. Attribut damage di class RPG::UsableItem itu merujuk
ke class lain yg disebut RPG::UsableItem::Damage. Dan isinya
RPG::UsableItem::Damage tu seperti ini.
Kalo saja u mo printout $data_skills[3].damage, maka keluarnya akan seperti ini.
Beginner Guide to RGSS3
46
Jadi semisal kita cuman mo ngambil perhitungan formula doank, ato yang lain,
bisa pake cara gini :
Karena struktur data RPG Maker VX Ace kelewat banyak, senantiasa buka
helpfile bagian sini.
Beginner Guide to RGSS3
47
Chapter 5: RPG Maker VX Ace Workflows Untuk chapter yang kelima kali ini wa mau bahas cara kerjanya script-script yang
ada di RGSS3. Well, harapannya setelah kamu lolos dari chapter ini, u bisa nyisipin
script-script tertentu atau ngedit script dan syukur2 bisa bikin script original buat
dirilis. Well, langsung aja
Lesson 20: Module SceneManager Kalo sekilas u liat-liat dalam script RPG Maker, semua yang ada disana cuman
definisi class xxx < yyy dan semacamnya. Yup, berdasar apa yang kita bahas di
chapter2 sebelumnya, class ngga bisa dirun / dijalanin. Lalu dimana proses
utamanya? Well, proses utama RGSS3 ada di slot yang namanya main.
Sekarang, kita coba uncomment rgss_main { SceneManager.run }. Setelah
bagian itu selesai di uncomment, maka kita bisa maen game RM seperti layaknya.
Nah, sbenernya akar permasalahan aka Biang kerok yang nyebabin game
berjalan ada di module yang namanya SceneManager.
Module ini terletak di bagian atas antara DataManager dan BattleManager.
Module ini. Dalam main process, tentu u nyadar kalo yang di panggil adalah method
run dalam module itu. Sekarang mari kita beralih ke method run-nya SceneManager.
Dalam proses run, dia manggil DataManager.init yang nge-inisialisasi database
yg udah wa bahas di chapter sebelumnya. Audio.setup_midi untuk mempersiapin
midi. Nah baris berikutnya adalah nentuin scene pertama yang bakal masuk. Kalo
semisal kita lagi battle test, maka scenenya adalah Scene_Battle. Kalo ngga, maka
masuk titlescreen
Proses method run di SceneManager akan stuck di bagian line ke 4.
@scene.main while @scene. Selama variable @scene tidak kosong, maka game
akan berjalan terus. Well, mari nengok2 ke method2 yang lain.
Exit Game
Untuk exit game, maka variable @scene harus kosong. Untuk ngosongin
variable itu, maka butuh method untuknya. Seperti ini.
Beginner Guide to RGSS3
48
Dalam exit game di script, yang dipanggil adalah SceneManager.exit. Dengan
method ini maka method run tidak lagi stuck. Tapi lagsung mengakhiri proses dan
game pun ditutup
Pindah scene
Lalu bagaimana dengan proses pindah2 scene sepert dari titlescreen ke map?
Atau ke menu? Atau ke battle? Atau ke .
Method goto adalah method yang mengganti isi @scene secara langsung alias
transisi langsung. Ada lagi method yang sama yaitu call. Bedanya call adalah, dia
nyimpen isi @scene sebelumnya ke sebuah array yang dinamain @stack. Semisal
kita lagi akses item, maka kira2 gini tumpukan di @stacknya
Beginner Guide to RGSS3
49
Pasti masih ingat kan kalau kita mencet cancel button (x) kita bakal balik lagi ke
menu, trus menuju ke map. Nah, method SceneManager.call adalah method yang
ngganti isi @scene tapi sbelum diganti, disimpen dlu di @stack.
Untuk ngambi isi dari @stack, kita bisa gunain SceneManager.return. method
def return adalah ngganti isi @scene dengan isi yang terakhir kali dimasukin di
@stack. Well, wa rasa cukup jelas ampe sini.
Untuk method-method lain yang bisa digunain selain itu adalah :
- SceneManager.clear >> untuk bersihin isi @stack
- SceneManager.scene >> untuk ngambil scene saat itu
- SceneManager.scene_is?(class) >> untuk ngecek bener salah class dari
scene yang lagi berjalan.
Lesson 21 : Scene Base Kali ini wa mau bahas tahap-tahap utama dari setiap scene yang ada dalam RPG
Maker VX Ace. Semua scene yang ada di RGSS3 (seperti Scene_Title,
Scene_Menu, Scene_Battle) adalah anak dari Scene_Base. Jadi untuk bahas
proses yang lain2, u harus paham dlu proses utama yang ada di Scene_Base.
Main Method
Well, untuk itu langsung aja u ke bagian Scene_Base. Cari def main. Dan ini
yang bakal u liat.
Disana bisa u liat dalam main dia manggil method lain yaitu start, post_start,
update, scene_changing? pre_terminate, terminate.
Start method
Method ini adalah method yang digunakan untuk persiapan. Misalnya kalo dalam
titlescreen, persiapannya adalah bikin gambar background, bikin window untuk
pilihan. Kalau dalam menu, bikin window2nya kek pilihan command, gold dst.
Method start dalam scene base seperti ini.
Beginner Guide to RGSS3
50
Dalam method start dia manggil method lain yang namanya
create_main_viewport. Method itu adalah untuk ngebikin object Viewport yang
fungsinya tar gw bahas di chapter selanjutnya. Karena ini ada di Scene_Base, maka
setiap scene pasti punya main viewport.
Sekarang coba kamu masukin kek gini di method start
Lalu coba jalanin lewat test play (jangan lupa console tetep dihidupin). Trus via
test play, coba kamu pindah2 scenenya. Terserah mo ke map, menu, item, status,
battle. Pasti dalam consolemu akan ngeprint 100 setiap kali kamu ganti scene. Well,
itulah fungsi method start. Untuk persiapan awal saat ganti scene.
Post start method
Post start adalah method yang dieksekusi setelah start udah dijalanin. Kamu
pasti sadar kalau setiap perpindahan scene pasti ada transisi sebentar (tidak
langsung ganti seketika). Isi dari post start adalah perform transisi gambar dari
gambar sebelumnya ke gambar berikutnya dalam screenmu.
Umumnya, post_start jarang ditambah-tambahin di class anak-anaknya. Jadi
ngga gt penting sebenernya ngemodif ini. Satu2nya class yg ngemodif post_start
adalah Scene_Battle.
Update method
Method update disini digunakan untuk menentukan perubahan apa aja yang ada
di dalam screen saat looping berjalan. Misalnya blinking cursor kalo milih command,
atau update gambar gerak tiap frame juga ada disini.
Beginner Guide to RGSS3
51
Dalam method update, dia akan manggil update_basic dimana method itu adalah
isinya update2 dasar yang harus dimiliki semua scene. Isinya seperti yang udah gw
jelasin di chapter2 awal. Kalau update dasar itu ada Graphics.update dan
Input.update.
Method update_all_windows pada intinya adalah semua instance variable yang
bertipe class Window (yang tar gw bahas di chapter setelah ini) akan diapdet.
Method scene_changing adalah untuk menentukan apakah variable @scene
yang ada di SceneManager sama dengan class Scene itu. Return true jika tidak
sama. Return false jika sama.
Sekarang coba iseng2 nambahin something di update. Kek gini
Save dan coba play test. Coba juga pindah2 scene. Amati yang terjadi ~
Pre terminate and terminate method
Dua method ini adalah untuk mengakhiri scene itu sbelum pindah ke scene lain.
Umumnya yang dikerjakan adalah ngelepasin / destroy object2 window atau
spriteset.
Beginner Guide to RGSS3
52
Pre_terminate adalah method yang dieksekusi sebelum eksekusi terakhir. Dalam
Scene_Base, pre_terminate tidak didefinisikan. Tapi Scene_Base cuman
menyediakan saja untuk diisi di class anak lainnya.
Terminate adalah proses akhir dari suatu Scene sebelum pindah ke Scene lain.
Hal-hal yang dikerjakan disana adalah nge-freeze screen terlebih dahulu untuk
tujuan transisi.
Dispose_all_window adalah method untuk nge-dispose / destroy object2 window
yang ada disana agar tidak menuh2in memori. Dispose_main_viewport sama juga
fungsinya. Kalau kalian ngga gitu paham dengan 2 method itu, bisa diabaikan dan
kembali lagi nengok kalo scripting level kalian dah tinggi :v