Minggu, 07 Juli 2013

Construct 2 RPG tutorial: the beginning

Oke, jadi sekarang aku berpikiran untuk membuat tutorial RPG dengan Construct 2, karena Construct 2 ini adalah tool yang mudah digunakan untuk membuat game apapun juga, aku jadi ingin mencoba membikin RPG dengan tool ini. Kenapa RPG? Simple aja, aku ingin buat RPG, dan aku yakin banyak yang juga ingin. Aku nggak tau seberapa rutin aku menulis tutorial ini, tapi aku usahakan akan aku teruskan sampai jadi. Oh iya, tutorial ini berasumsi pembacanya sudah familiar dengan cara memakai Construct 2, jadi cara-cara seperti membuat event / layer / object baru ngga aku tulis di sini, sudah ada banyak tutorial soal itu di website scirra.

Pertama, kita akan membuat game design sederhana dari RPG ini.

Judul: My RPG Project (diganti nanti)
Platform: PC, Mac, Linux
Pemain: 1 orang
Battle system: action-based dengan random battle. Pemain akan berjalan-jalan di map/dungeon lalu mendadak akan bertemu musuh dan pindah ke layar battle. Pertarungan akan mirip pertarungan di Tales of Destiny.
Kondisi menang: Pemain mengalahkan boss terakhir di akhir game.
Kondisi kalah: pemain kalah dari pertarungan, kecuali yang memang dibuat supaya kalah.
Tantangan: Pertarungan. Baik itu random battle atau boss battle
Reward: Exp points, items, dan uang sesudah mengalahkan monster.

Sementara segitu dulu, nanti akan aku lengkapi. Untuk tutorial pertama ini aku ingin memulai dengan battle system sederhananya. Aku sudah meng-upload file project-nya di dropbox, bisa diambil di sini: https://dl.dropboxusercontent.com/u/22420086/My%20RPG%20project.capx
screenshot awalnya adalah seperti ini:

lumayan bagus kan? Untuk yang ingin tau lebih soal cara pembuatannya, bisa lanjut membaca di bawah.



Pertama-tama buat dua sprite object, character dan characterSprite. Character adalah karakter dalam game yang digerakkan pemain, dan characterSprite adalah gambar dan animasi dari karakter itu. Kenapa dipisah? Supaya memudahkan kita akalau nanti kita ingin mengganti sprite yang sekarang dengan sprite jadi nanti, dan supaya memudahkan kita untuk membolehkan pemain mengganti karakter yang aktif dimainkannya (kalau pemain bisa memilih party member).

Coba lihat image points di object character

Ini juga akan memudahkan kita kalau kita mau membuat efek serangan nanti, karena kita sudah membuat image point di character, jadi kita tidak perlu membuat image point baru kalau kita mengganti characterSprite.

Beralih ke kode, ketika layout dimulai, kita mem-pin characterSprite ke character, supaya sprite selalu mengikuti karakternya. Kemudian kita akan menggerakkan karakter menggunakan simulate 8 direction, tergantung dari nilai variabel movingLeft dan movingRight. Nilai movingLeft dan movingRight ini akan diganti oleh keyboard input dan gamepad input, untuk memastikan semua metode input menghasilkan gerakan yang sama.

kemudian kita akan memutuskan apa yang terjadi sewaktu tombol keyboard "A" atau "D" dilepas. Dalam hal ini, kita ingin pemain berhenti bergerak dan menghadap ke kiri atau ke kanan.

Untuk kode melompatnya kita memakai platform behaviour, bukan 8 direction. Karena platform behaviour sudah punya kode sendiri untuk melompat, tapi kalau memakai platform behaviour ini, kita harus menyediakan sebuah object bertipe solid yang berlaku sebagai pijakan. Itulah gunanya object bernama ground yang kita buat invisible.

Kemudian untuk menyerang, kita akan menggunakan function, karena kode menyerang ini akan dipanggil berkali-kali, tergantung kita menulis kode untuk input yang mana, karena itu untuk mudahnya akan dibuat function.

Kemudian kita akan menulis kode untuk gamepad input. Untuk gamepad input ini, Construct 2 menggunakan kontroller Xbox360 sebagai contoh terbaik, dalam artian paling kompatibel. Tapi gamepad input ini juga bisa kompatibel terhadap kontroller PS3 dan juga gamepad PC pada umumnya. Idealnya kita harus mencoba dengan sebanyak mungkin variasi gamepad yang bisa digunakan oleh sebuah komputer, tapi karena aku nggak punya PS3, akan susah untuk testing kontroller PS3.

Kode untuk gamepad pada umumnya sama saja dengan untuk keyboard, hanya saja kita harus ingat bahwa pemain bisa menggerakkan karakter dengan D-pad atau dengan analog stick, dan kita harus menyediakan input untuk keduanya. Satu hal lagi untuk diingat adalah, analog stick tidak mengeluarkan event. Beda dengan D-pad yang bisa mengeluarkan event On Pressed atau On Released ketika dilepaskan atau ditekan. Ini harus diingat sewaktu coding, karena akan menentukan bagaimana kita memperlakukan input analog stick.

Berikutnya adalah kode soal animasi. Secara umum, kode ini mengganti animasi berjalan karakter sesuai dengan nilai movingLeft dan movingRight. Yang perlu diperhatikan adalah kode sewaktu karakter berhenti, aku nggak memakai movingLeft dan movingRight tapi memakai nilai string moving. Kenapa? Karena di keyboard input, kita bisa mengandalkan event On Key Released untuk menentukan tombol mana yang baru saja dilepas, dan menentukan arah hadap berdasarkan itu. Masalahnya adalah sewaktu pemain menggerakkan karakter dengan analog stick lalu berhenti, akan susah menentukan arah hadapnya, karena analog stick tidak mengeluarkan event, dan entah pemain berhenti sambil hadap kiri ataupun hadap kanan, nilai X axis analog stick adalah 0. X axis ini mempunyai 3 nilai, 100 ketika digerakkan ke kanan, -100 ketika digerakkan ke kiri, 0 ketika diam di tengah. Karena itu aku mengganti nilai string moving berdasarkan nilai X axis, lalu ketika karakter nggak bergerak, aku cek nilai terakhir dari variabel moving, dan menentukan arah hadapnya dari sana.

Cobalah untuk run layout, dan karakter kita sudah bisa bergerak, melompat, dan menyerang. Berikutnya mungkin aku akan menambahkan musuh. Sampa ketemu di blog post berikutnya.