Kategori
Devlog/Studlog

1 Hari 1 Tutorial: Hari 5 – 2D Pathfinding

Yang singkat saja untuk hari ini karena ada kerjaan lain. Proyeknya duplikat dari hari lain. Tapi tetap saja agak lama karena tergoda buat nambahin ini-itu.

Tutorial ini pada dasarnya pengenalan NavigationRegion2D dan NavigationAgent2D untuk memberi karakter atau NPC semacam jalur yang membatasi gerak. Pas lihat, langsung kebayang bikin semacam mekanik point-and-click (atau click-and-move?), jadi saya tambahin hal-hal lain yang agak beda dengan tutorial. Namun, sepertinya ada cara yang lebih efisien untuk mekanik seperti itu.

Versi Itch.io nya masih ada yang salah. Kordinat penanda klik masih salah. Dan harusnya area dan garis navigasinya dibikin aset lagi biar keliatan. Tapi sudahlah…

Source code untuk proyek ini aku taruh di github: fajarfh/OneDay-OneTut: Latihan ngerjain 1 tutorial Godot tiap hari selama bulan Maret

Kategori
Devlog/Studlog

1 Hari 1 Tutorial: 4 – Custom Tile Data

Daripada mengerjakan proyek yang sama dan melihat code yang itu-itu saja tiap hari, aku mulai lebih suka mengulik problem yang berbeda-beda dan trik yang tidak membosankan dengan proyek ini. Namun, meski mengulang membuat file proyek dari awal tiap memulai tutorial baru membuatku lebih terbiasa untuk memulai proyek (dan tidak bingung harus mulai dari mana), cara ini lumayan menguras waktu. Tutorial yang kupilih ini, meski cuma 5 menit, ngerjainnya hampir seharian! Penyebabnya karena harus menyiapkan aset dan menatanya agar bisa diimplementasikan dengan hal yang dipelajari di tutorial. Ya, sama aku lagi sulit fokus dan agak lemot aja sih.

Pada dasarnya yang dibahas di sini adalah:

cell = tilemap.local_to_map(position)
data = tilemap.get_cell_tile_data(cell)
tile_data = data.get_custom_data(data_name)
  1. Mengidentifikasi cell (atau satu unit tile) mana pada Tile Map Layer yang ditempati karakter sesuai koordinatnya
  2. Mengambil data yang terkandung pada cell
  3. Mengambil nilai variabel/data kustom tertentu pada cell tersebut

Intinya dengan mengatur variabel di jenis tile tertentu pada tile set, kita bisa bikin karakter player mengalami kondisi tertentu saat menginjaknya. Misal membuat tile rawa-rawa yang memperlambat gerak karakter atau lantai berjalan (conveyor belt) yang menarik karakter ke arah tertentu.

Catatan: di bagian data.get_custom_data(data_name) harus dipastikan bahwa variabel custom data_name ada di Custom Data Layers di tiap Tile Map Layer yang dicek.

Btw kenapa ukuran viewport dan window di Itch.io agak beda ya?

Kategori
Devlog/Studlog

1 Hari 1 Tutorial: 3 – Curve

Saat milih-milih video tutorial, aku baru mikir apa ‘syarat’ tutorial yang mau dipraktekin. Videonya harus pendek, mungkin ga lebih dari 10 menit, karena kalau dipraktekin bakal makan waktu lebih dari itu. Tergantung tingkat kesulitan. Terus, jangan yang terlalu basic, seperti tutorial yang hanya mengenalkan sebuah konsep dasar. Juga jangan yang bikin proyek besar seperti ‘tutorial bikin game genre anu’, kecuali pendek banget. Namun yang jelas sih, harus menarik, bisa dipraktekin, dan bisa ditunjukkin.

Tutorial berikut ini pendek, llummmayan menarik, tapi sebenarnya agak cuma ngenalin konsep. Kalau dianggap tutorial yang ngenalin fitur bisa juga sih. Intinya yang dibahas di sini itu cuma:

curve.sample(sample_point)

Method di atas pada dasarnya seperti memasukkan nilai x pada fungsi polinomial f(x) seperti:

f(x) = x^2 + 2x + x

Jadi kalau kita punya hubungan input-output berupa fungsi polinomial, atau yang bisa digambarkan seperti kurva, daripada nulis code formulanya, mending gambarin aja kurva-nya. Godot punya tipe data (atau node?) bernama Curve yang bisa jadi input di inspector kalau variabelnya dideklarasikan di script. Nantinya kita bisa mengambil satu titik di curve tersebut (sampling) untuk mendapatkan nilai output yang diinginkan.

Jelasnya sih, coba lihat saja videonya:

Ini berguna misalnya buat bikin easing pada animasi yang pakai code atau bikin damage drop off pada game shooter yang mengubah damage senjata tergantung jarak penembak dengan target. Sepertinya banyak implementasinya, tapi belum kebayang banyak.

Tutorial ini lebih ngenalin konsep tingkat menengah jadi ga nuntun dari nol sampai beres. Jadi aku harus mikir sendiri buat nyiapin node dan hal-hal lain yang jadi ‘konteks’ implementasinya. Di video didemoin implementasi pada damage drop off untuk 3D FPS shooter. Karena belum biasa 3D, aku tiru sedikit formulanya dan cuma nampilin ‘damage’ dan ‘jarak’ saat nge-klik area sekitar objek utama.

Btw, aku sempet pakai node Path2D di sini tapi kok rasanya buggy ya? Terutama kalau pakai toolbar buat edit titik-titik path, kadang-kadang si titik ga bisa dihapus dan baru bener lagi kalau restart editor nya.

Juga entah kenapa kalau di versi web/Itch.io, posisi munculnya label lebih jauh dan menyamping meski udah ngeset posisi x nya sama dengan titik klik di layar.

Oh iya, asset dari Kenneys.

Kategori
Devlog/Studlog

1 Hari 1 Tutorial: 2 – Multiplayer Chat

Kali ini pakai tutorial bikin multiplayer chat:

Sepertinya saya masih lumayan banyak kerjaan (?) jadinya hanya berani ambil tutorial pendek. Begitu pun, dan meskipun berhasil mengerjakan tutorial dengan hasil yang sama tambah layouting UI yang lebih enak, saya masih belum berhasil ngulik sampai: Bisa ngirim pesan lewat tekan ‘enter’, bisa bikin klien ngecek keberadaan host sebelum konek, dan bisa dijalanin di Itch.io.

Sepertinya meski tutorial ini mudah diikuti (tanpa perlu paham banget), mungkin ada teknik implementasi chat yang lebih baik, khususnya yang bisa jalan di platform web/HTML 5.

Kategori
Devlog/Studlog

1 Hari 1 Tutorial: 1 – Efek Transisi Cutout

Biar bulan ini ada kegiatan yang (relatif) lebih mudah ditarget dan dicapai. Selama bulan Maret (atau bulan Ramadhan) ini aku coba bikin program menyelesaikan satu tutorial godot dalam setiap hari. Bikin game jadi sambil belajar rasanya stuck mulu. Jadi, anyway, tutorial pertama adalah membuat efek transisi cutout.

Videonya udah lama di-save di watch later YouTube, dan sempat nonton juga. Baru dipraktekkin sekarang. Dan, saya baru nyadar ini adalah tutorial shader yang harusnya agak advance. Yang ini sebenarnya cukup mudah tapi karena baru pertama, wajar kalau salah masukin snippetnya di fungsi vertex padahal harusnya fragment.

Terlepas kebodohan itu, ga salah milih tutorial yang pendek, bisa diikuti (tapi ga terlalu dipahami), buat hari pertama sehingga bisa rada dioprek dikit lagi. Hasilnya bisa dicek di itch.io:

Kategori
Devlog/Studlog Gaming Diary

Icip Godot 2 – Gaming Diary #33

Melanjutkan dari tulisan ini yang dipublikasikan pada… ya Allah, bulan Juni, saya akhirnya menyelesaikan proyek iseng-iseng ngetes pake Godot. Di titik ini, saya juga sudah nonton satu video lagi dari Brackeys, ngerjain outsource proyek game pake Godot, dan juga pake Unity. Jadi, saya sudah eksplorasi lebih (tapi belum jauh) soal sintaks-sintaks GDScript, lihat cara orang lain pake Godot, dan bandingin lagi Unity sama Godot.

Beberapa hal yang saya temukan (terutama setelah banding-bandingin sama Unity):

Kesan sederhana dan mudah masih kerasa banget. Node built-in yang ada cukup lengkap. Yang kerasa bantu banget tuh Touch Screen Button buat bikin tombol virtual di layar sentuh. Node itu juga bisa dibikin hilang atau muncul kalau tergantung apakah buka gamenya di mobile atau PC. Cocok buat game yang dipublish di itch.io dan bisa dijalanin di browser. Sayangnya node ini bukan kelompok node Control yang bisa diatur-atur layoutnya pake node control lain. Soal atur-atur layout…

Tata letak UI itu perjuangan. Di Godot ada jenis kelompok node control yang khusus ngatur tata letak UI, contohnya Node Margin, node HBoxContainer, VBoxContainer, dan NinePatchRect. Objek-objek yang di Unity biasanya termasuk objek UI biasanya masuk kelompok ini. Meskipun banyak pilihan, rasanya masih agak terbatasi. Misalnya, kalau mau bikin tombol yang asetnya dari spritesheet, dan bisa pakai 9-slice, maka harus pakai Node TextureButton. Kalau baru nyadar setelah bikin banyak Button, susah dah. Makanya lebih susah bikin ukuran pixel yang konsisten kalau style gamenya pixel art. Tambah lagi kustomisasi node (warna, outline, dll.) yang terikat banget sama konsep theme (susah jelasinnya). Sebenarnya kalau udah kekuasain bisa mudah-mudah aja sih, tapi rasanya lebih mudah bikin pixel art yang konsisten dan slicing spritesheet yang pixel perfect di Unity.

Tapi, tata letak UI di Unity juga perjuangan sih. Terakhir nyobain Unity, entah kenapa susah banget masang font pixel art (mungkin gara-gara pake TMP Text). Kekurangan Unity di tata letak ada juga di ketidakjelasan objek mana yang ngatur tata letak objek lainnya karena fungsi-fungsi semacam itu adanya di component yang bisa nempel di GameObject mana saja. Di Godot, fungsi-fungsi yang biasanya diatur lewat component bisa diatur pakai node. Jadinya lebih mudah kalau pingin bikin jelas objek mana saja yang ngatur tata letak. Sebenarnya kalau serampangan tetap bisa bikin bingung, tapi kalau mau rapih bisa aja. Sayangnya itu bakal bikin hirarki atau tree dari node-node nya terlalu panjang dan belibet. Satu hal lagi yang ga dibikin jelas di Unity…

Di Unity, tidak jelas objek mana saja yang punya skrip bikinan kita. Di Unity, skrip itu bisa ditempelkan berapapun karena pada dasarnya component yang built-in juga script. Di Godot, skrip bikinan hanya bisa nempel di satu node dan node yang ditempelin skrip kelihatan di tree. Namun, jadi kepikiran. Kalau di Unity bisa pasang 2 skrip bikinan sendiri (meski kayaknya bad practice), apa ekuivalennya di Godot? Bikin node baru di-child nya?

Godot itu ringan, kalau udah nyoba alternatif lainnya. Ya, saya juga baru nyadar soal ringannya Godot ini pas buka Unity lagi πŸ˜€ Instalasi lama, buka proyek baru lama, nge-run buat tes lama, dst.

Btw, ngebandingin Godot – Unity kayaknya bakal panjang. Kesimpulanku sih, kalau dibandingin kelengkapan fitur di editor-nya, Unity rasanya lebih lengkap dan powerful. Godot terasa lebih sederhana dan mudah saja sih.

Export HTML hanya di versi-versi tertentu. Ini yang agak bikin kecewa karena sebelumnya pake Godot 4.2.2 yang ternyata gak support export ke web. Tapi, gak masalah buat download dan buka proyek di Godot 4.3, yang bisa export HTML, karena instalasi dan buka proyek ga lama.

Kesimpulannya sementara soal Godot ini, kayaknya masih oke buat lanjut makennya. Meski kalau diminta rekomendasiin enjin game dev kayaknya bakal nyaranin Unity karena masih oke juga dan banyak yang make. Atau Unreal, yang rasanya lebih oke kalau jenjang karirnya mau panjang. Saya make Godot ini lebih karena pingin dukung proyek open source aja sih, dan itu istilahnya ‘alasan ideologis’ yang belum berani saya sarankan ke orang lain.

Terakhir, saya mau bagiin hasil kerjaan pertama pakai Godot ini, yang bikinnya berantakan dan asal jadi karena masih eksplorasi fitur-fitur. lol. Semoga lain kali bisa nunjukin game yang lebih proper pake Godot ini.

Cek di Itch.io

Komentar setelah beberapa lama make Godot dan bandingin sama Unity
Kira-kira, beginilah saya setelah beresin gamenya
Kategori
Devlog/Studlog Gaming Diary

Icip Godot – Gaming Diary #31

Saya putuskan untuk bisa familiar dan biasa make satu game engine dulu sebelum mempelajari yang lain-lain, jadi saya mulai belajar Godot. Unity masih jadi standar industri dan Unreal masa depannya cerah, jadi mengapa Godot? Open Source. Itu aja. Saya ingin coba bertaruh waktu dan usaha agar proyek open source bisa sukses seperti Blender. Kenapa ingin dukung, mungkin dijelaskan kapan-kapan. Anggap saja ini satu dari seribu keputusan irasional saya.

Untuk pengenalan awal, saya pakai video tutorial dari Brackeys di YouTube, yang kembali dari pensiunnya setelah kasus kebijakan profit sharing Unity yang kontroversial beberapa bulan ke belakang. Video ini menjelaskan cara penggunaan fitur-fitur dasar dari engine yang cukup buat bikin game yang bisa dimainkan. Aset disediakan, sehingga tutorial bisa diikuti dengan enak.

Kesan pertama, Godot ini punya fitur yang lebih memudahkan, kalau tidak bisa dibilang lebih sederhana dibanding Unity. Soalnya begini, salah satu aspek paling njelimet dari coding di game adalah saat mau make suatu fungsi, perlu prosedur pemanggilan fungsi-fungsi lain dalam struktur tertentu. Misal, untuk β€˜sekedar’ ngasih kontrol input agar objek bisa maju saat tekan tombol panah di keyboard, perlu fungsi untuk menerima input keybobard, fungsi menerima kunci yang ditekan, fungsi yang memerintahkan objek untuk bergerak saat kunci ditekan, fungsi tampilan objek, dll. Bahkan di Unreal yang pakai visual coding Blueprint, prosedur seperti ini tetap ada.

Di Godot, input cukup diset di setting proyek. Skrip pergerakan objek bahkan ada templatenya. Hampir semudah Construct. Bisa dibilang, Godot ini kerumitannya ada di antara Construct dan Unity.

Di Godot, satuan utama elemen dalam game disebut Node. Bisa dibilang, kalau di Unity disebut Game Object, kalau di Godot disebut Node. Namun, Component di Unity kadang sepadan sama Node juga. Kumpulan Node dalam satu file disebut Scene. Bingung ga tuh? Pokoknya, perlu pembiasaan istilah dan struktur objek di Godot. Mungkin Node ini lebih sepadan dengan Behavior di Construct.

Fitur lain yang oke salah satunya naruh objek dari tilemap dengan sistem grid. Kayaknya sih di Unity juga ada, tapi gak ngeh. Ya, sejauh ini cukup enak lah makenya. Ada beberapa hal yang biasa di Unity tapi belum nemu fiturnya di Godot. Saya masih mau membiasakan diri make Godot ini sebelum lanjut ke video keduanya Brackey yang akan bahas coding lebih dalam.

Oh iya, codingnya ini pakai bahasa scripting sendiri (GDScript). Sepertinya wrapper dari C++? Entahlah. Strukturnya masih mirip Unity dengan blok fungsi _ready() (start()) dan _process() (update()), tapi secara umum bahasanya mirip Python; ga pake semikolon di akhir baris dan sensitif terhadap indentasi. Ada beberapa fitur dalam coding seperti Signal yang menghasilkan code tapi kalau code-nya disalin ke file skrip lain, belum tentu jalan. Ibaratnya, menghasilkan code itu harus lewat menu fitur, ga bisa ketik langsung.

Selanjutnya saya mau coba melanjutkan game dari tutorial dengan bikin beberapa level dan mekanik tambahan pakai aset yang ada.