Tampilkan postingan dengan label tutorial. Tampilkan semua postingan
Tampilkan postingan dengan label tutorial. Tampilkan semua postingan

Jumat, 20 Juni 2014

Able game development: remappable keys

Hai semuanya, kebetulan sekarang aku lagi ingin aktif menulis tutorial jadi aku akan melanjutkan seri able game development! Ini adalah bagian kedua setelah seri pertama yang menuliskan tentang konfigurasi tambahan untuk mengakomodasi para gamer dengan kebutuhan khusus. Kali ini aku ingin menulis tentang remappable keys! Buat yang nggak ngerti, remappable keys adalah fitur untuk mengubah kegunaan dari suatu tombol untuk melakukan aksi yang diinginkan oleh pemain.

Contohnya dari tutorial sebelumnya adalah menambahkan aksi berjalan ke kanan dari yang tadinya menggunakan tombol panah saja menjadi dengan menggunakan tombol keyboard D juga. Di tutorial ini kita akan melakukan hal yang serupa tapi pemain bebas menentukan tombol mana yang digunakan untuk aksi tertentu.

Orang-orang yang mengalami pelemahan otot, cerebral palsy atau penyakit lain yang membuat mereka tidak bisa menggunakan tangan mereka secara normal, akan sangat diuntungkan oleh fitur yang membolehkan mereka mengubah cara bermain mereka sesuai keinginan mereka sendiri. Bisa dibilang ini adalah salah satu fitur yang paling banyak diinginkan oleh orang-orang berkebutuhan khusus.

Jadi bagaimana kita akan melakukannya dalam Construct 2? Pertama-tama buatlah layout seperti ini, kali ini kita akan membuat game platformer sebagai contohnya.

 photo pic5.png

sprite biru itu adalah actor yang memiliki behaviour platformer, sprite abu-abu adalah tanah yang memiliki behaviour solid, dan sprite hijau itu adalah platform yang memiliki behaviour jump-thru. Sekarang ini game awal kita sudah memiliki fungsi dasar sebuah game platformer, dan sekarang kita akan menambahkan cara untuk remapping.

Pertama-tama tambahkan tombol untuk remapping di sudut kiri atas (atau terserah kamu).

 photo pic6.png

lalu tambahkan layout baru di mana di layout inilah kita akan mengubah kendali karakter kita.

 photo pic7.png

ketiga tombol itu adalah untuk mengubah kendali actor. Sekarang karena bagian visual dari game ini sudah selesai mari kita lanjut ke code yang akan memberikan fungsi remapping.

Minggu, 08 Juni 2014

Able game development! Part one

Hai semuanya, apa kabar? Sesudah lama nggak nulis sesuatu tentang tutorial kali ini aku akan mencoba membuat satu tutorial lagi. Tapi kali ini tutorialnya agak berbeda dengan yang biasa aku tulis, sekarang aku akan mencoba membuat tutorial tentang bagaimana membuat game yang juga dapat dimainkan oleh penyandang disabilitas, seperti yang sudah aku singgung di blog post beberapa waktu yang lalu. Kalian boleh menambahkan desain-desain dalam seri tutorial ini dalam game kalian atau tidak terserah kalian sendiri, hanya saja dengan menambahkan fitur di seri tutorial ini kalian juga bisa membantu para penyandang disabilitas untuk ikut menikmati hiburan yang kalian sukai.

Oh ya, bahan dan ide untuk menulis seri tutorial ini aku dapat dari website lain, http://www.includification.com/ yang membahas tentang desain game yang bisa dimasukkan dalam game yang kita buat tanpa banyak mengubah desain utama game kita. Aku ingin melengkapi website itu karena kelihatannya mereka nggak menyinggung sisi teknisnya (wajar sih sebenarnya), jadi aku akan membahas bagaimana mengimplementasikan desain mereka dalam Construct 2.

Pertama-tama kita akan membuat game design yang membantu orang-orang yang cacat fisik. Cacat fisik ini bisa aja berupa kehilangan anggota tubuh karena diamputasi atau karena gangguan pada sistem otot mereka sehingga mereka nggak bisa bergerak dengan normal. Di antara para penyandang disabilitas, cacat fisik adalah jumlah yang terbanyak. Jadi kalau game buatanmu bisa membantu orang-orang yang cacat fisik, banyak orang yang bisa memainkan game-mu.

Dan desain pertama yang akan kita bahas adalah: konfigurasi alternatif! Apa ini? sederhana sekali: buatlah beberapa konfigurasi pengendalian yang bisa dipilih oleh gamer sesuai dengan disabilitas mereka. Ada minimal tiga setting pengendalian di sini: setting default, setting tangan kanan saja, setting tangan kiri saja. Semuanya dibedakan berdasarkan asumsi apakah pemain memiliki kedua tangan, ataukah hanya satu tangan? Tangan mana yang bisa dipakai untuk bermain?

Coba mainkan game-mu hanya dengan tangan kanan saja, atau tangan kiri aja. Masih bisakah dimainkan? Tombol-tombol apa aja di keyboard itu yang bisa kamu jangkau dengan mudah cuma dengan tangan kiri? Ini adalah caranya kamu bisa men-test game dan konfigurasi pengendalian yang kamu buat.

Nah sekarang bagaimana cara membuatnya?

Sabtu, 26 April 2014

Tutorial: Bagaimana membuat cut scene di Construct 2?

Halo, ketemu lagi di blogku. Untuk kali ini aku ingin melanjutkan tentang membuat sisi cerita dari game dengan menggunakan Construct 2. Mungkin sesudah mengikuti tutorial sebelumnya (dan aku harap kalian bereksperimen sedikit dengan tutorial itu) kalian bertanya-tanya "Hei, ini adalah cara membuat dialog lalu bagaimana dengan cut scene?", memang membuat cut scene adalah tahapan berikutnya dari tutorialku yang akan kulanjutkan sekarang ini, jadi baca terus ya.

Hal pertama yang aku ingin kalian ingat adalah adanya aturan dalam membuat cut scene, aturan ini adalah: selama cut scene berlangsung, input dari pemain harus diabaikan. Aturan ini harus diingat karena akan mempengaruhi coding yang akan kita lakukan.

Pertama-tama yang akan kita lakukan adalah membuat Text object seperti sebelumnya, lalu buat satu Sprite object yang akan berperan sebagai karakter dalam cut scene kita ini. Jangan lupa tambahkan global variable yang seperti yang kita buat di tutorial sebelumnya. Perubahan pertama yang akan kita buat adalah menambahkan satu global variable bernama allowInput dengan nilai awal 0, variable ini yang akan menentukan kapan kita akan mengabaikan input dari pemain.

Kemudian tambahkan event berikut ini:


event ini akan melanjutkan jalan cerita ketika pemain menekan enter hanya jika nilai allowInput adalah 1, kalau kita ingin mengabaikan input kita tinggal mengganti nilainya ke 0 dan game akan mengabaikan input pemain.

Berikutnya untuk bisa menggerakkan pemain kita akan memasangkan 8 direction behaviour, karena behaviour ini memudahkan kita untuk menggerakkan karakter dalam tipe game up down view seperti RPG klasik. Jangan lupa untuk mengganti beberapa properties-nya sedikit.


Kemudian untuk cut scene kita akan membuat susunan event seperti di bawah ini:


rangkaian event itu masih terdapat dalam satu scene yang sama, dan kalau kita preview project kita sekarang maka kita akan bisa melihat sebuah cut scene pendek yang baru saja kita buat. Oh iya, jangan lupa kalau nilai awal allowInput di start of layout harus 1, kalau nggak kita nggak bisa melanjutkan ceritanya.

Oke, kelihatannya sampai di situ dulu blog post kali ini. Sampai ketemu lagi di tulisanku berikutnya! Ciao!

Senin, 21 April 2014

Tutorial: Bagaimana cara membuat sisi cerita dari RPG di Construct 2?

Hi semua, kelihatannya entah kenapa aku lagi rajin nulis blog bulan ini, semoga aja di bulan Mei aku juga tetap rajin. Kali ini aku ingin kembali menulis sesuatu tentang RPG, setelah sebelumnya aku beberapa kali menulis soal cerita dalam RPG sekarang aku akan mencoba menulis tentang cara membuatnya di Construct 2, jadi ayo kita mulai.

Pertama-tama kita akan membuat dua buah global variable, action dan scene. Variable scene adalah untuk menandakan peristiwa apa yang sedang berlangsung, karena bisa saja dalam satu map ada beberapa event yang terjadi jadi kita menggunakan variable sendiri untuk menandai event itu. Action adalah tindakan yang sedang terjadi, biasanya tindakan ini adalah percakapan karakter, usahakan action selalu bernilai 1 di awal scene untuk memudahkan kita nantinya.


Hampir lupa, kita juga sebaiknya buat juga constant variable untuk memberi nama scene kita, karena sewaktu scene kita sudah banyak (lebih dari 10 misalnya) kita akan susah mengingat scene yang mana untuk kejadian yang mana, jadi baiknya kita membuat sebuah const untuk ini.

Sesudah itu buatlah sebuah Text object untuk tempat percakapan terjadi nantinya. Lalu tambahkanlah Keyboard object untuk user input, buatlah event berikut di event sheet.



Event sheet itu akan membuat object text untuk menampilkan percakapan sesuai dengan nilai scene dan action, bisa dilihat kalau scene bernilai SCENE_NONE maka teks akan kosong. Kalau kita preview proyek kalian sekarang maka kita hanya akan melihat layar putih sampai kita menekan tombol S untuk mengubah scene menjadi SCENE_1_1, tapi kenapa sesudah itu teks hanya menampilkan satu dialog saja? Ini karena kita tidak melakukan apa-apa untuk mengubah nilai action.


Kalau kita tambahkan event di atas maka nilai action akan bertambah dan kita pun akan bisa melihat sisa dialognya. Oh iya, aku juga mengembalikan nilai action menjadi 1, supaya kita bisa mengulang dialognya dari awal lagi.

Kalau kita preview sekarang kita bisa menekan tombol S untuk memulai ceritanya, kemudian menekan tombol enter untuk meneruskan dialognya. Kalian bisa mengembangkan dari contoh ini untuk membuat sistem percakapan di game kalian sendiri nantinya.

Gimana pendapat kalian soal sistem ini? Sederhana bukan? Atau mungkin ada yang kalian tidak mengerti? Silahkan tuliskan di bagian komentar di bawah. Sampai ketemu di blog post berikutnya!

Kamis, 17 April 2014

Story dev: Shaping up your country

Hai semuanya, jumpa lagi dengan aku di seri berikutnya dari seri story dev. Kalau sebelumnya kita sudah membahas soal inti cerita dan karakter cerita, di seri ketiga ini aku akan membahas soal tempat di mana karakter kita hidup: Negara. Pada dasarnya aku akan membahas tentang gimana cara membuat negara & budaya yang believable untuk cerita kita. Jadi mari kita mulai!

Di bawah ini adalah hal-hal yang harus kita pikirkan ketika membuat negara, hal-hal ini nggak diurutkan berdasarkan tingkat kepentingan.


  • Batas umur rata-rata: Ini adalah umur rata-rata penduduknya sebelum mereka akhirnya mati karena usia. Bisa berumur 80an untuk batas umur wajar manusia pada umumnya, atau mungkin orang-orang di sini bisa hidup sampai lebih dari 100 tahun? Kalau ras penduduknya bukan manusia berapa lama mereka punya harapan hidup?
  • Kekuatan khusus: Ini adalah kemampuan yang hanya dimiliki oleh penduduk negara ini. Apakah mereka punya kekuatan fisik yang lebih kuat dibanding bangsa lain? Atau mungkin mereka lebih cerdas dan memiliki kemampuan sihir yang lebih tinggi?
  • Core values: ini adalah nilai yang dijunjung tinggi oleh masyarakat negara itu. Apakah masyarakatnya lebih religius? Apakah mereka menghormati para leluhur? Atau lebih mementingkan kekuatan perang dan harga diri yang didapat dari pertarungan?
  • Cultural strength: Ini adalah kelebihan bangsa ini dibandingkan dengan bangsa lain. Perbedaannya dengan poin kekuatan khusus di atas adalah, kekuatan khusus lebih spesifik masing-masing individu sedangkan cultural strength adalah kelebihan keseluruhan satu bangsa lain. Contohnya, satu bangsa bisa saja lebih ahli dalam teknologi sementara bangsa lain lebih mementingkan perdagangan.
  • Cities: Ciri khusus apa yang dimiliki oleh masing-masing kota di negara ini. Kota yang lebih mementingkan perdagangan akan punya distrik perdagangannya sendiri, sementara kota yang lebih mementingkan pendidikan akan punya universitas dan perpustakaan besar.
  • Interaction with other cultures: Bagaimana hubungan negara ini dengan negara tetangganya? Bagaimana hubungan perdagangan? Adakah yang sedang berperang dengan bangsa ini? Atau mungkin bangsa ini adalah bangsa yang tertutup dan tidak melakukan kontak sama sekali dengan negara tetangganya?
  • Religion: Seperti apa agamanya? Politeis? Monoteis? atau memuja para spirit di alam ini?
  • Education: Sepintar apa penduduknya? Berapa banyak orang yang bisa membaca? Apakah ada ilmuwan atau filsuf di negara ini? Bagaimana dengan keluarga petinggi negara, apakah mereka mendapat tingkat edukasi yang sama ataukah ada perlakuan khusus?
  • Class system: Ini mengatur sistem sosial masyarakat di negara ini. Apakah negara ini punya sistem kasta? Ada berapa kasta dan apa perbedaan masing-masing kasta? Kalau tidak ada kasta, apakah perlakuan terhadap pria dan wanita sama atau ada perbedaan?
  • Value of life: Bagaimana penduduk negara ini menghargai sebuah nyawa? Apakah mati dalam perang dianggap sama dengan kematian yang lain? Bagaimana kalau orang itu melakukan bunuh diri seperti seppuku seperti di jepang?
  • Family structure: Seperti apa susunan suatu keluarga? Berapa banyak penghuni satu rumah? Apakah wajar kalau laki-laki melakukan poligami? Bagaimana dengan perempuan yang poliandri? Apakah cucu dan kakeknya tinggal satu atap atau terpisah?
  • Pair bonding: Bagaimana seorang pria menikahi wanita? Apakah bertemu sendiri atau dijodohkan oleh orang tua? Sesudah menikah, apakah perceraian merupakan hal yang wajar atau tidak?
  • Children: Bagaimana penduduknya membesarkan seorang anak, apakah dilakukan oleh orang tua itu sendiri atau dilakukan oleh pembantu? Atau dititipkan oleh kakeknya? Berapa banyak anak yang biasanya dimiliki oleh satu keluarga? Pada umur berapa seorang anak dianggap dewasa? Apakah ada upacara khusus ketika si anak mencapai kedewasaan?
  • Agriculture: Apa saja hasil bumi yang dihasilkan oleh negara ini?
  • Government: Seperti apa bentuk pemerintahannya? Kerajaan kah atau bentuk lain? Apakah raja memerintah sendiri atau adakah penasihat? Bagaimana proses pergantian kekuasaannya? Apakah pergantian kekuasaan ini selalu berjalan mulus atau adakah pergolakan besar di kerajaan ini sewaktu menentukan raja berikutnya? Apakah anak raja selalu pasti menggantikan ayahnya? Bagaimana kalau si anak raja ini umurnya masih terlalu muda?
  • Industry: Apakah hasil produksi di negara ini? Kerajinan kayu? Kerajinan keramik? Atau lebih ke produksi besi seperti senjata? Dari mana bahan baku produksinya didapat?
  • Trades: Apa saja barang-barang yang dijual oleh negara ini dan ke mana dijualnya? Adakah barang lain yang diimpor oleh negara ini? Apakah jalur perdagangan selalu aman? Seberapa besar kemungkinan serangan bandit?
  • War technology: Seperti apa kemajuan kemampuan perang negara ini? Apakah lebih maju dalam hal sihir ataukah persenjataan berat? Bagaimana dengan angkatan lautnya? Atau pertahanan antar negaranya?
Huuuf... itu daftar yang cukup panjang, dan kurasa cukup lengkap. Dari situ kalian bisa membuat sebuah kerajaan yang cukup detil. Atau mungkin ada lagi yang ingin kalian tambahkan dalam daftar itu? silahkan bagi pikiran kalian di kolom komentar. Sampai ketemu lagi di blog post berikutnya!

Senin, 14 April 2014

Story dev: Characterization!

Hi, selamat datang di seri kedua dari Story dev. Kalau sebelumnya kita membahas tentang inti cerita, kali ini kita akan menjelaskan tentang karakter yang bermain dalam cerita itu. Jadi mari kita mulai.

Dalam membuat tokoh kita harus menambahkan karakter ke dalam tokoh itu, ini supaya tokoh yang kita buat benar-benar terasa hidup dan tidak hanya menjadi boneka yang merupakan sebuah alat bagi pencerita untuk mengutarakan ceritanya. Jadi bagaimana supaya kita bisa menambahkan karakter ke dalam tokoh buatan kita? Berikanlah goals dan motivation.

Penjelasan singkatnya begini:

  • Goals: adalah sesuatu yang diinginkan oleh tokoh kita
  • Motivation: adalah alasan kenapa tokoh kita menginginkan goals itu tadi.
(oke, menyebut "tokoh" terasa agak aneh buatku, selanjutnya aku akan menyebut pemeran dalam cerita yang kita buat sebagai "karakter" lebih terasa natural buatku)

Seperti halnya dengan orang-orang nyata yang ada di hidup ini, karakter kita pastinya punya sesuatu yang diimpikan. Sesuatu ini bisa berupa benda fisik seperti misalnya Pedang legenda, harta karun tersembunyi, atau gaun yang indah. Atau bisa saja sesuatu yang diinginkan berupa hal-hal yang tidak berwujud, misalnya saja gelar, ketenaran, menjadi populer di antara banyak orang. Atau bisa saja berupa gabungan dari kedua hal tersebut, misalnya saja ingin mendapat gelar sebagai seorang ahli pedang dengan berhasil mendapatkan pedang sihir yang melegenda.

Motivation adalah alasan kenapa seseorang menginginkan sesuatu atau hal yang mendorong seseorang untuk menginginkan sesuatu. Alasan atau dorongan ini berasal dari dalam diri karakter itu sendiri, yang bisa terbentuk dari lingkungan di mana karakter itu hidup / dibesarkan. Contohnya, seorang anak yang hidup miskin sedari kecil, hidupnya serba kekurangan, makan malam yang seadanya, tiap tidur selalu kedinginan, selalu memakai baju yang lusuh. 

Apa yang kira-kira diinginkannya? Hidup mewah, atau paling tidak hidup yang tidak perlu mengkhawatirkan apakah tersedia makan malam atau tidak. Bagaimana cara mendapatkannya? Bekerja keras sejak kecil, bisa jadi pelayan bar, pemusik, penggembala, apa saja. Bagaimana kalau dia melihat poster penjahat, dengan hadiah uang bagi yang menangkapnya? Uang yang cukup untuk hidup tanpa perlu kerja selama satu bulan? Bukan tidak mungkin bukan kalau dia berusaha menangkapnya? Bukan hal aneh juga kalau dia lalu menjadi seorang pemburu hadiah di kota asalnya. Dan dari situ background cerita sudah kita dapat.

Apakah harus mengikuti contoh di atas? Tidak selalu, dari contoh tadi si anak sudah mendapat apa yang dia inginkan, dia hanya  terus melakukan pekerjaannya sebagai pemburu hadiah. Bagaimana kalau karakter kita belum mendapat apa yang dia inginkan? Bukankah akan menjadi background cerita yang tidak kalah bagusnya?

Mungkin sementara ini sampai di sini dulu post kali ini. Sampai bertemu di blog post berikutnya. Ciao!

Jumat, 11 April 2014

Story dev: Plotting it out

Hi semuanya, kalau kalian ingat dulu aku pernah nulis serial blog soal RPG devblog yang menjelaskan step-by-step caraku mendesain battle system. Sebenarnya aku masih ingin melanjutkan seri itu tapi battle system yang sekarang sudah agak berbeda dari yang aku tulis, dan dulu aku juga susah menyempatkan waktu untuk nulis. Well, sekarang aku ingin menebus dosa dengan memulai sebuah seri baru yang nggak kalah penting dengan battle, membuat cerita. So, let's start!

Aturan pertama untuk membuat cerita adalah: jangan mulai dari awal, alias jangan mulai menulis cerita dari prolog. Ada hal yang harus kalian lakukan sebelum menulis itu, yaitu memikirkan 'inti' ceritamu ini. Apa sih 'inti' cerita itu? Inti cerita adalah satu hal utama dimana nantinya semua plot dan jalan ceritamu itu berjalan di seputar hal utama itu. Hm... mudah dimengerti atau nggak yah? coba aku tulis dengan susunan kata-kata yang lebih gampang dibaca.

Pertama, ambil satu kata yang akan jadi inti ceritamu itu, misalnya "pengkhianatan". Dari situ kita bisa mulai membuat karakter-karakter, mulai dari raja, penasihat raja, pangeran, pengembara, dan banyak lagi. Kemudian setelah membuat para karakter utama, kita mulai membuat draft awal yang kita mau, misalkan ada sebuah kerajaan yang rajanya sudah hampir mati, raja mendengar ada sebuah artifak legenda yang bisa mengabulkan satu permintaan apapun juga. Raja lalu mengadakan sayembara bagi siapapun yang bisa membawakan artifak legenda itu pada raja, dia akan diberi kekayaan yang melimpah. Maka dimulailah perlombaan di antara semua orang yang kuat dan berani di negeri itu untuk memenuhi keinginan raja.

Lalu di mana letak pengkhianatannya? Oh ayolah, artifak ini bisa mengabulkan keinginan apapun, siapa yang bisa menjamin artifak ini akan diserahkan pada raja? Seseorang yang cukup licik bisa saja mendapatkan hadiah dari sayembara dan keinginan yang dikabulkan oleh artifak itu sekaligus. Menguntungkan banget bukan? Atau mungkin saja si penasihat raja punya agenda tersendiri, mungkin dia sebenarnya bukan orang yang setia, bisa saja di saat-saat terakhir dia mencuri artifak itu dan menggunakannya sendiri. Be creative!

Apa ini saja yang diperlukan dalam membuat cerita? Oh tentu nggak, masih ada beberapa hal yang perlu kamu perhatikan dalam membuat cerita dan karaktermu, yang akan aku bahas di beberapa post berikutnya. Sampai nanti!

Sabtu, 14 September 2013

Construct 2 RPG tutorial part 7: implementing the AI

Selamat datang di bagian ke 7 dari seri tutorial membuat RPG di Construct 2. Kali ini aku akan mencoba mengimplementasikan AI seperti yang sudah aku desain sebelumnya. Aku akan mencoba membuatnya dalam 1 blog post, tapi kalau nggak bisa, berarti blog post ini cuma mencakup AI penyerang fisik.

Pertama-tama aku ingin memastikan bahwa semua petarung di battle scene tahu tentang musuh-musuhnya, karena AI kedua tipe musuh juga akan bergantung dari data ini. Awalnya aku berencana memakai family buat keperluan ini. Tapi ternyata aku nggak bisa menambah / mengurangi member family ini lewat event, padahal buat kebutuhan ini aku harus bisa mengganti member family secara dinamis lewat event (karena tiap battle, musuhnya beda-beda, dan party member pun bisa diganti secara bebas oleh pemain). Jadi untuk mengatasi ini, aku akan membuat array yang berisi data petarung dari party member dan juga dari musuh, array ini bernama enemyPartyArr dan playerPartyArr. Kedua array ini hanya berisi maksimal 4 elemen, karena kita memang membatasi jumlah petarung di sisi player dan musuh dalam battle. Ini juga mengubah fungsi family Friendly, dulunya family ini berisi semua party member yang bertarung, tapi sekarang mungkin lebih cocok berisi semua character dalam game yang bisa bergabung bersama pemain.

Aku mengubah apa yang terjadi di event on start of layout, sekarang kita memberi nama pada battleName musuh dan juga mengisi kedua array petarung, saat ini isinya hanya ada satu tapi nanti isinya akan berbeda-beda.

Kemudian aku membuat instance variable enemySelection di kedua family. Untuk memudahkan kita untuk membedakan nantinya, di family Enemies akan aku namai playerSelection sedangkan di family Friendly aku namai enemySelection. Keduanya memiliki nilai awal "closest". Di bagian bawah, aku membuat function baru bernama "enemySelTarget" yang akan digunakan oleh musuh untuk mencari target pemain. Fungsi ini menerima dua parameter, yaitu nama musuh yang akan mengganti target, dan AI pemilihan target si musuh.

Jumat, 16 Agustus 2013

Construct 2 RPG tutorial: Mages AI

Baiklah, kita ketemu lagi di blog post yang membahas soal cara membuat RPG. Kali ini aku akan melanjutkan bahasan sebelumnya soal AI, yaitu bagaimana membuat AI penyihir. Sebenarnya membuat AI penyihir ini nggak jauh beda dengan membuat AI untuk petarung, hanya ada sedikit perubahan saja. Ada dua jenis penyihir, yaitu penyihir ofensif / tipe penyerang, dan penyihir suportif, keduanya punya logika sendiri-sendiri.

Pertama-tama kita akan bahas AI dari penyihir ofensif, logikanya adalah seperti ini:
  1. Pilih target
  2. Kalau SP mencukupi untuk men-cast paling nggak satu sihir, pilih sihir
  3. Masuk casting time
  4. Kalau diserang musuh casting time berakhir, sihir gagal di-cast
  5. Kalau bisa casting sampai casting time berakhir, keluarkan sihir dan kurangi current SP
  6. Kalau target masih hidup, kembali ke poin 2
  7. Kalau target sudah mati, kembali ke poin 1
  8. Kalau SP nggak mencukupi, dekati musuh, lalu serang secara fisik.
Aku perlu menambahkan poin terakhir soal kemungkinan kalau ternyata si penyihir nggak punya cukup SP buat mengeluarkan sihir, kalau nggak begitu bisa-bisa penyihir kita cuma berdiri bengong di tengah battle screen. Logika pemilihan target akan kubuat sama seperti penyerang fisik, yaitu menggunakan instance variable enemySelection dan targetName, kalau kamu lupa untuk apa kedua instance variable ini, bisa lihat di blog post sebelumnya.

Berikutnya, penyihir akan memilih sihir apa yang dipakai, untuk sementara aku berencana membuatnya memilih acak, karena aku nggak tahu bagaimana cara membuat AI memilih sihir yang bagus. Sesudah memilih, penyihir akan masuk casting time. Selama casting time ini penyihir nggak bisa berjalan atau melakukan hal yang lain, kalau penyihir dikendalikan oleh pemain maka kita harus mengganti nilai variable state yang sudah aku jelaskan. Semua sihir punya instance variable castTime yang hitungannya dalam detik, nanti kita akan mengurusi variable ini sewaktu kita mulai men-coding sistem penyihir ini. Sepertinya sisa poin-poinnya sudah cukup jelas dan nggak perlu aku jelaskan, kalau belum jelas silahkan tinggalkan komentar.

Kamis, 15 Agustus 2013

Construct 2 RPG tutorial 5: making AI

Jadi sebelumnya aku sudah mulai bikin AI sederhana (sekali) untuk musuh, walaupun hasil akhirnya adalah musuh baru mengikuti pemain saja. Sebelum aku membuat AI dalam bentuk code yang lebih kompleks, aku ingin merancangnya terlebih dulu. Oh iya, walaupun contoh kasusnya untuk musuh, AI ini nantinya bukan cuma untuk musuh saja, tapi juga party member lain dalam kelompok pemain. Dan juga, AI untuk boss juga akan kusamakan dengan AI untuk musuh biasa, hanya saja nilai parameternya kubuat lebih susah.

Baik musuh maupun anggota party member ada yang berperan sebagai penyerang jarak dekat dan penyerang jarak jauh, ada pula penyerang fisik dan penyerang sihir. Jadi dibagi berdasarkan tipenya, musuh dan party member bisa dikategorikan seperti ini:
  • Penyerang fisik jarak dekat
  • Penyerang fisik jarak jauh
  • Penyerang sihir jarak jauh
  • Penyembuh / support
Aku nggak menuliskan penyerang sihir jarak dekat, karena aku menganggap semua penyerang sihir adalah penyerang jarak jauh, lagipula kalau penyerang sihir menyerang dari jarak dekat dia bisa diserang duluan sebelum sempat mengeluarkan sihirnya. Masing-masing penyerang fisik akan punya radius serangan yang jaraknya beda antara jarak dekat dan jarak jauh, penyerang fisik akan mendekat sampai musuh masuk dalam radius serangan sebelum akhirnya menyerang. Penyerang sihir nggak perlu mendekat buat menyerang musuh, jarak jangkau sihirnya adalah seluruh battle screen, jadi mereka bisa menyerang musuh tanpa peduli jarak. Bedanya adalah sihir perlu casting time untuk bisa dirapalkan dan mereka bisa diserang sewaktu ini.

Rabu, 14 Agustus 2013

Construct 2 RPG tutorial 4

Di blog post kali ini aku masih akan membahas tentang battle system. Kalau kalian perhatikan, sewaktu pemain menekan tombol K berulang-ulang (atau tombol serang di gamepad), karakter pemain akan terus-menerus menyerang tanpa henti. Ini akan aku halangi, karena menyerang tanpa henti ini bisa membuat pemain terus menerus menyerang tanpa strategi (atau disebut button mashing). Caranya adalah dengan menambahkan sebuah instance variable attackCount (Number) ke family Friendly, karena aku ingin pembatasan ini juga berpengaruh ke anggota party lainnya nanti. Kemudian di tempat fungsi charaAttacks dipanggil (waktu tombol K di keyboard dan tombol A di gamepad ditekan) tambahkan 1 ke attackCount karakter yang dikendalikan pemain. Kenapa aku tambahkan attackCount di sini dan bukan dalam fungsi charaAttacks? Karena kalau ditambahkan dalam charaAttacks nanti instance variable milik character akan bertambah sewaktu party member yang lain menyerang, atau kita harus mencari cara untuk bisa tahu bahwa yang menyerang adalah karakter dan bukan party member lain. Karena kedua implikasi itu merepotkan, aku memilih untuk menambahkan khusus instance variable character di tempat yang aku yakin pasti karakter yang menyerang. Nantinya kita harus melakukan yang sama pada party member yang lain.



Sesudah itu, tambahkan Timer behaviour ke dalam family Friendly, ini untuk memberi jeda sesudah mereka selesai menyerang sesuai dengan attackCount. Jeda sesudah menyerang ini harus diberi nama, karena aku kesusahan memberi nama, jeda ini aku namai "rest", yang berarti beristirahat sejenak untuk mengatur nafas sesudah menyerang berturut-turut. Untuk memudahkan, aku buat sebuah constant variable berisi "rest". Sekarang, berikan instance variable bernama state ke family Friendly, state ini yang nanti akan aku isi dengan "rest" untuk menandakan karakter ini baru saja menyerang berurutan. Nantinya, variable ini bisa diisi dengan nilai lain seperti: poisoned, stunned, silenced, atau semacamnya.

Rabu, 31 Juli 2013

Construct 2 RPG tutorial: The battle continues...

Sesudah kita membahas tentang battle design di bagian kedua, di bagian ketiga ini aku akan mulai mengimplementasikan apa yang kita desain sebelumnya. Di sini aku mulai memikirkan tentang implementasi stats karakter yang kita desain, dan juga tentang pemakaian equipment / senjata. Pertama-tama mari kita lihat screenshot hasil akhir dari tutorial ini:


Pertama-tama aku akan menambahkan beberapa family baru, family ini adalah fitur construct 2 yang cuma ada di versi berbayar (punyaku versi personal)

Aku akan menjelaskan apa arti dari masing-masing family:
- Enemies: berisi daftar-daftar musuh dalam game
- enemySprites: sprites dari musuh, namanya sama dengan nama musuh
- Friendly: berisi karakter pemain dan party member lain yang bergabung dalam battle. Objek-objek yang ada di family ini nggak bisa dilukai dengan serangan pemain tapi bisa disembuhkan dengan item atau skill penyembuh pemain
- FriendlyAttackFX: efek serangan yang dikeluarkan anggota family Friendly, efek serangan ini yang nanti dites collision detection dengan musuh
- Weapons: daftar senjata yang ada dalam game. Senjata yang ada di sini nggak harus dipakai oleh pemain atau party member yang lain, ini cuma menjadi database senjata.

Rabu, 17 Juli 2013

Construct 2 RPG tutorial: battle design!

Baik, sekarang kita memasuki bagian kedua dari tutorial membuat RPG dengan Construct 2!  Kali ini aku ingin melanjutkan membuat battle system, tapi sebelum itu aku harus menyentuh ke desain pertarungannya dulu, supaya kita punya dasar ketika coding nanti. Jadi untuk sekarang ini aku akan menulis soal game design dari sisi pertarungan.

Yang pertama-tama akan aku bikin adalah stats. Entah stats ini singkatan dari apa, tapi dalam RPG sudah sering kita temui stats, baik stats musuh ataupun stats pemain. Stats yang aku bicarakan ini beda dengan status dalam artian status effect, karena status effect adalah efek buff (baik) atau debugg (buruk) yang mengenai pemain / monster. Stats-stats ini adalah sebagai berikut:

  • HP: Health point. Total health, kalau pemain / monster disembuhkan, nilai currentHP ngga bisa melewati ini.
  • CurrentHP: Health saat ini, kalau turun sampai 0 maka pemain / monster mati.
  • SP: Spirit point. Dipakai untuk menggunakan skill / sihir, nilai currentSP ngga bisa melewati ini.
  • CurrentSP: Spirit point saat ini, berkurang tiap kali memakai skill / sihir. Kalau jumlahnya kurang dari yang dibutuhkan untuk menggunakan skill / sihir, maka skill / sihir itu ngga terpakai.
  • ATK: Attack. Nilai serangan karakter, digunakan untuk menentukan besaran kekuatan serangan fisik / skill bersama dengan kekuatan senjata.
  • DEF: Defense. Nilai pertahanan karakter, dipakai untuk menentukan pertahanan terhadap serangan fisik yang juga dihitung bersama dengan pertahanan armor.
  • ACC: Accuracy. Kemungkinan serangan kena atau nggak. Serangan jarak dekat, jarak jauh, dan sihir /skill dihitung pakai stats ini.
  • EVA: Evasion. Kemungkinan menghindari serangan.
  • INT: Intelligence: Tingkat kecerdasan, dipakai untuk menentukan kekuatan serangan sihir
  • RES: Resistance. Ketahanan terhadap serangan sihir.
  • LUK: Luck. Menentukan tingkat critical dan mungkin hal-hal lain yang bergantung pada keberuntungan (item drop misalnya).

Baik karakter pemain ataupun monster memiliki stats yang sama, yang membedakan adalah nilainya. Monster akan memiliki lebih banyak HP dibandingkan dengan karakter pemain, karena nantinya monster nggak akan menyerang seagresif pemain, dan kebanyakan monster nggak punya skill / sihir seperti pemain (kecuali tentunya boss).

Berikutnya adalah stats yang diberikan dari senjata. Sudah umum kita temui dalam RPG, semua senjata punya atribut seperti ATK dan semacamnya, jadi senjata dalam game ini pun juga seperti itu. Di bawah ini adalah stats dari senjata:


  • MinAtk: Kekuatan serang terendah senjata ini
  • MaxAtk: kekuatan serang tertinggi senjata ini.
  • StatsMod: Modifier dari stats tertentu dari pengguna senjata, kalau ada. Stats ini boleh kosong.
  • Elemen: Elemen senjata, boleh kosong.

MinATK dan MaxAtk adalah bonus serangan yang didapat karakter dari senjata, nantinya sewaktu menyerang karakter akan mendapat bonus ATK yang berkisar antara MinAtk dan MaxAtk, sehingga tiap serangan akan menghasilkan damage yang bervariasi seperti RPG pada umumnya. StatsMod adalah tambahan stats tertentu yang didapat karakter sewaktu sedang meng-equip senjata ini. Nggak semua senjata punya StatsMod jadi boleh kosong. Contoh dari StatsMod ini adalah senjata yang punya kekuatan spiritual sehingga meningkatkan SP pemain yang memakainya. Kemudian elemen adalah elemen senjata, ini nggak perlu dijelaskan pasti sudah jelas, elemen ini bisa saja dimiliki senjata sejak awal, atau ditambahkan dari proses crafting. Ini masih belum seluruhnya dari atribut senjata, masih ada yang belum aku bahas seperti nama senjata, definisi, harga beli, dan harga jual. Tapi di sini aku lebih fokus ke stats senjata dalam battle, jadi ini aja cukup.

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.