Kategori
Devlog/Studlog

1 Hari 1 Tutorial: Hari 6 – Moving Platform

Bikin platform bergerak dalam 2D platformer sudah pernah sih, tapi tutorial ini ngasih trik buat bikinnya pake Path2D dan AnimatableBody. Tutorial ini juga ngasih teknik biar objek platform bergerak bisa lebih modular dan tipe pergerakannya bisa dikustomisasi lebih enak.

Di sini, kita bakal bikin 2 jenis pergerakan berdasarkan Curve dari Path2D-nya yaitu open-path dan closed-path. Open-path dianimasikan pakai Animation Player yang ngubah nilai progress dari PathFollower2D sehingga bisa bikin platform bergerak bolak-balik. Sedangkan pada closed-path, animasinya pakai ngubah nilai progress juga, tapi diubahnya di _process() sehingga bisa bikin animasi yang sirkular.

Tips tambahan, kalau mau bikin path yang melingkar sempurna, mending masukin kordinatnya satu-satu di Inspector.

Git: https://github.com/fajarfh/OneDay-OneTut

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

Single Issue Voter (2019)

Badan masih lelah karena kemarin sok-sokan ikut demo sebentar pakai badan yang renta. Aku memutar video ini di TV sambil bersantai, mendengar pengurus Asosiasi Game Indonesia (AGI) 2019-2024 menyampaikan refleksi kepengurusan mereka selama 5 tahun. Yang patut dicatat, meski sudah saya ketahui sebelumnya, AGI berhasil membantu pemerintah untuk menelurkan kebijakan-kebijakan yang mendukung industri video game. Salah satu hasil pamungkasnya, Perpres No. 19/2024 tentang Percepatan Pengembangan Industri Gim Nasional (PERPRES No. 19 Tahun 2024 (bpk.go.id)).

Tidak hanya itu, AGI bercerita tentang orang-orang di pemerintahan dari kementrian (termasuk menkomarves) hingga presiden dengan diksi yang positif. Pemerintah sangat suportif sama industri gim, dan meski boomer-boomer itu tidak begitu paham, mereka bisa percaya serta mau belajar pada AGI dan pelaku industri. AGI juga salut dengan ketegasan orang-orang itu yang bisa memutuskan dan mengeksekusi tanpa banyak basa-basi. Memang sih ada oknum yang tidak mengenakkan, mereka bilang, tapi secara umum mereka memberi kesan pada pemirsa untuk tidak takut bekerjasama dengan pemerintah.

Sulit buatku untuk mempertahankan prasangka negatif; “ah, pemerintah mau dukung karena industri gim bisa jadi duit buat mereka”. Bahkan dengan prasangka negatif seperti itu, aku tak mau menyangkal hasil positifnya.

Hasil dari upaya AGI dan pemerintah sudah banyak dirasakan pelaku industri gim lewat banyaknya event seperti pameran, game jam, pelatihan, dan bantuan-bantuan lainnya. Termasuk perpres yang rilis sebelum pemilu di atas. Aku juga bisa mengapresiasi semua itu, bahkan meski saya mengalami semacam disonansi saat mendengar pujian pada pemerintah dalam masa #PeringatanDarurat. Ya, aku mungkin juga akan/sudah menikmati hasil kerja AGI dan pemerintah. Mereka sudah bekerja dengan sangat baik.

Aku juga ingin menepuk pundak sendiri yang 5 tahun lalu mencoblos presiden saat ini berkat melihat sekilas bagian debat presiden terakhir saat presiden terpilih menyebutkan data-data industri game di Indonesia. Kupikir, hey, dia punya pembisik dari industri gim, jadi pilih dia aja. Waktu itu sebenarnya aku rajin menyimak keseluruhan debat dan membuat rangkuman. Namun, kalau boleh jujur, bagian debat yang itu itulah yang menentukan. Bukannya ingin mengklaim punya andil dalam keberhasilan AGI dan pemerintah (yang mungkin saja tetap bisa kejadian kalau presidennya beda), tapi setidaknya aku tahu kalau argumenku saat milih sudah tepat. Sekarang aku tahu istilah bagi pemilih seperti itu: ‘Single issue voter’.

Single issue voter hanya fokus pada satu bidang yang paling ia pahami atau berpengaruh pada hidupnya dalam perkara pemilihan umum, atau upaya kolektif di masyarakat secara umum. Baginya, isu hukum, tata kelola pemerintahan, kemanusiaan, keadilan, dll. adalah hal di luar pemahamannya jadi tidak dia pedulikan. Mungkin peduli sih, tapi kalau mikirin semua aspek saat pemilu, bakal bingung sendiri. Jadi, yang tidak dipahami diabaikan, dan fokus pada yang dampaknya langsung pada bidangnya saja. Saya pikir, ini adalah cara pikir paling fair dan logis dalam nyoblos.

Pelan-pelan, aku sadar, kalau ‘single issue’-ku bukan sesuatu yang mendasar bagi sebuah negara atau daerah, ya percuma difokusin. Maksudnya, oke industri gim bagus, tapi gimana dengan landasan dasar bernegaranya? Bagaimana dengan hukum, keadilan, dan kemanusiaan? Basis negara ini bukan industri gim.

Kurasa meski industri gim berkembang namun, misalnya pendidikan masyarakat rendah, ya rugi juga. Lalu, masa ada orang yang mau beli gim kalau kebijakan ekonomi ga bikin orang cukup sejahtera buat nyisihin duit beli gim? Kalau orang-orang politik semaunya ngakalin aturan, apa jaminan aturan-aturan pemerintah terkait industri gim ga diotak-atik buat segilintir orang? Tanpa kepastian hukum dan integritas regulator, apa ada studio triple A luar yang mau invest di sini?

Balik lagi ke soal pendidikan. Aku bisa bayangkan game developer yang bikin naratif keren, cerita penuh makna, akan kecewa kalau pendidikan masyarakat dan literasi medianya rendah; rentan gagal atau salah menangkap makna dari karyanya (skenario terburuk, dicancel atau kena UU ITE karena itu). Terpaksa bikin game ke luar negeri lagi (sepertinya ini ga masalah buat banyak studio sih).

Aku paham, bahwa keberhasilan AGI tidak serta merta berarti keberpihakan pada rezim saat ini (dan 5 tahun ke depan, sayangnya) serta berbagai kebijakannya yang memakan korban. Pun para pekerja di industri gim, saya rasa memiliki pandangan yang majemuk terkait pemerintahan. Mereka punya hak untuk mendapatkan bantuan dari pemerintah, dan juga hak untuk menyuarakan kritik dan aspirasi.

AGI bahkan sepertinya bisa membantu menyalurkan aspirasi pekerja industri gim terkait ketanagakerjaan dan regulasi. Di luar itu, tentunya akan canggung jika AGI atau studio gim anggota AGI melakukan kritik terhadap pemerintah. Misalnya, dari personal pengurus AGI atau dari organisasi lain yang terafiliasi tidak akan ada kritik terhadap keterkaitan Luhut dengan tambang yang bermasalah. Atau soal dinasti politik. Namun, itu persepsi saya saja, semoga salah.

Meski kepengurusan AGI sudah berganti, hubungan yang tetap lancar dengan pemerintah sepertinya terjamin. Dan aku pribadi masih tetap ingin agar kerja sama itu langgeng terus karena, seperti yang sudah kubilang, pelaku di industri gim berhak mendapatkan dukungan pemerintah. Namun, pekerja di industri gim sepertinya perlu memposisikan diri agar karya dan kritik mereka tidak berdampak pada hubungan AGI atau industri gim dengan pemerintah. Tentunya dalam pemerintahan yang sehat, ini tidak akan jadi persoalan. Dengan pemerintahan yang sekarang… begitulah…

Mungkin pandangan ini tidak begitu berarti karena berasal dari orang yang sedang tidak berada di dalam lingkup industri gim. Aku anggap ini hanya salah satu upaya menyelaraskan nilai yang kuanut dengan kondisi ril; merapikan alur logika pandangan pribadi terkait industri gim saat ini. Pun tulisan ini bukan untuk mengkritik AGI atau industri gim yang sangat butuh bantuan dan dukungan dalam berkarya.

Selalu ada tarik menarik antara kebutuhan bantuan dengan kebebasan berkarya dalam pengembangan gim atau karya seni apapun. Aku sudah melihat banyak studio bisa melaluinya dengan baik lewat berbagai cara. Dan setiap cara ada konsekuensinya, baik material maupun moral.

Kategori
Devlog/Studlog Gaming Diary

Wawasan Hiperlokal dari Citampi – Gaming Diary #32

Bulan kemarin dapat wawasan marketing menarik dari seminar Game Business Class dalam program Smiling West Java bikinan Disbudpar Jabar dan Agate Academy. Di kelas ketiga program tersebut, seminar diisi oleh Banu dari Ikan Asin Production yang bikin Citampi Stories, salah satu game yang saya sering mainin belakangan ini.

Meski sudah sering bahas game ini di blog, saya lupa kenapa Citampi Stories ada di HP. Mungkin waktu pingin coba game lokal, game ini direkomendasikan oleh GooglePlay. Sebelum-sebelumnya juga pernah lihat game ini di pameran. Saat itu tidak terlalu tertarik.

Game ini adalah semacam simulasi kehidupan perkotaan di mana pemain perlu bekerja dan bersosialisasi dengan warga untuk hidup yang lebih baik. Semacam Harvest Moon atau Stardew Valley. Seperti di Harvest Moon juga (gak tahu kalau Stardew Valley karena belum pernah main), pemain bisa menikahi salah satu gadis NPC di kotanya.

Saya hadir ke seminar agak telat, tapi cukup dapat gambaran umum cerita pengembangannya. Judul seminarnya ‘Sukses Rilis Game 1 Juta Download’. Saya sudah berasumsi ‘ah paling seperti biasa, product-market fit, persona, community, blablabla’. Namun, aku pikir ada baiknya juga mendengarkan. Siapa tahu ada insight yang hiperlokal. Dan memang ada.

Sumber: gensindo.sindonews.com/https://www.ikanasinproduction.com/

Game ini keidean waktu developernya nongkrong makan bakso terus lihat minimarket yang antriannya panjang banget. Rupanya, banyak yang belanja di sana (kebanyakan cowok) karena… kasirnya cakep. Yap. Naksirin kasir yang cantiknya ngalahin model-model IG adalah pengalaman universal bagi banyak pemuda perkotaan belakangan ini. Pengalaman itu dijadikan hook atau daya tarik utama di game Citampi Stories dan inilah kenapa kebanyakan (HAMPIR SEMUA) gadis-gadis yang bisa dinikahi di game ini kerjanya kasir mini market atau fast food.

Singkatnya, game ini dibikin untuk memenuhi imajinasi kalian ngencanin kasir Indomaret dekat rumah; yang kebanyakan dari kalian tidak akan berani lakukan atau malu karena… berbagai alasan.

Anyway, dari hook utama soal kasir itu, tim Ikan Asin mengembangkan ide di sekitarnya dengan fokus pada persona target market dari game. Prosedur standar, memang. Namun, karena persona-nya spesifik (misal cowok, 20-an tahun, suka sama kasir cakep, dst.), setiap pertanyaan-pertanyaan standar akan memberikan jawaban yang spesifik pula.

Misal, kira-kira game seperti apa yang bisa dimainkannya? Game yang ringan dan ga nuntun waktu lama, karena mereka mainnya di sela-sela kerja. Apa yang sering ditontonnya? Sinetron. Seperti apa handphonennya? HP low-end.

Dari jawaban-jawaban tersebut, tim Ikan Asin memutuskan pakai pixel art agar bisa dimainkan di HP se-kentang apapun. Mereka juga mengadopsi sinetron dan FTV sebagai tema utama; yang dapat dilihat dari font judul game yang sangat khas sinetron dan copywriting dialog cerita yang sederhana. Wawasan yang spesifik ini bisa membatasi desain permainan sehingga arah desain jadi lebih fokus dan pengambilan keputusan jadi lebih cepat.

Sumber: Citampi Stories: Cinta & Hidup – Aplikasi di Google Play

Dengan prosedur biasa riset market yang proper dan mendalam, apa mereka langsung sukses? Gak. Awal rilis 2018 dapet award dari GooglePlay, tapi lalu flop. Saat pandemi hampir mau bubar, namun Banu mencoba untuk membangun ulang (LITERALLY REWRITE THE CODE) game ini dari awal sendirian dengan menggali masukan-masukan dari komunitas. Akhirnya, 2023 dapat award lagi dan mulai profit.

Bagi saya, pendekatan komunitas ini adalah hal klise yang penting namun menakutkan. Tarik ulur antara visi personal dan keinginan pemain perlu dilakukan hati-hati agar desain permainan efektif tapi tetap unik. Dan itu adalah proses yang melelahkan, setidaknya kalau saya coba bayangkan sendiri. Belum lagi upaya mengumpulkan komunitas yang mau aktif berdiskusi.

Sumber: https://www.ikanasinproduction.com/

Namun upaya-upaya komunitas itu bisa jadi membantu Ikan Asin dalam pengembangan game terbaru mereka: Cisini Stories. Kali ini, mereka bikin game dating sim otome buat cewek, yang berisi tipe-tipe cowok idaman mertua (Polisi, dokter, CEO, dll. YA TENTU GAME DEV GA MASUK HAHAHA).

Keberhasilan menggali wawasan dari target market yang sangat spesifik dan lokal, serta resiliensi atau ketahanan developer untuk percaya pada ide game bahkan di saat sulit adalah bahan pelajaran paling menarik dari Citampi Stories. Namun, hal lain yang perlu digali dan dipelajari lebih lanjut adalah proporsi sumber monetisasi game ini.

Saya sempat tanya, banyakan mana profit dari iklan atau in-app purchase? Saya tanya begini karena model rewarded-ad di game ini cukup menarik (disamarkan sebagai nonton TV misalnya) dan ada di mana-mana. Namun, katanya sekitar 90% profit datang dari in-app purchase. Menurut Banu dari Ikan Asin, ini mungkin ga dialami game lokal lain. Di game ini, banyak pemain yang pakai ad-blocker untuk nge-skip ad dan dapet reward langsung. Saya penasaran, mengapa begini. Apakah anomali? Atau kebetulan saja target pemainnya ternyata cukup melek teknologi buat pake ad-blocker?

Di kesempatan lain, saya pernah dengar kalau profit dari game ini sekitar 80-90% dari pemain lokal. Dari kontennya yang sangat lokal, saya tidak bisa membayangkan game ini dimainkan bule. Namun, game ini punya pilihan Bahasa Inggris, yang bisa berarti bahwa developernya menganggap dari gamer luar juga ada potensi profit.

Aspek lain dari game ini sebenarnya cukup menarik untuk dikritisi. Seperti apakah game ini megobjektifikasi kasir minimarket atau mewajarkan syarat ‘berpenampilan menarik’ untuk beberapa pekerjaan. Namun, mungkin itu bahasan lain kali. Kali ini, saya ingin mengapresiasi keberhasilan Ikan Asin membuat game dengan menyasar market lokal menjadikan Citampi Stories sebagai serpihan kecil dari cerminan masyarakat, dan gamer, di negara kita ini.

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.