Tombol TUTORIAL kecil di pojok kiri atas menu utama (di luar alur bilah, jadi tinggi menu tidak berubah) memulai latihan terpandu di arena latihan:
karakter terakhir yang dimainkan (atau Mega Chan) melawan dummy diam. Panel instruksi di bawah header HUD menampilkan delapan langkah berurutan
(gerak, lompat, kombo 3 pukulan, uppercut dan tinju maju, skill I dan O, blok lalu parry, lempar, ultimate) dengan tombol yang harus ditekan,
centang otomatis saat terdeteksi, tombol LEWATI dan KELUAR, serta penanda selesai (+50 koin satu kali, flag di Meta.save.eggs['code:tutorial']).
Di layar sentuh teks dan sasaran memakai tombol layar.
- tutorial.js, tutorial.css: modul baru (deteksi dari hero.state/jumps/action/blocking/cooldowns, pembungkus receiveHit hanya untuk mengamati hasil parry/blok).
- game.js: dua kait kecil di __game: stats() (kombo dan damage) dan dummyAttack(slow) (serangan dummy atas perintah, pembuka diperlambat untuk latihan parry).
- menu.js: satu baris memanggil Tutorial.decorate di akhir render(). index.html: tag tutorial.css dan tutorial.js (sebelum menu.js).
- docs/ENGINE_NOTES.md: catatan alur dan kait baru.
Konflik game.js di startMatch diselesaikan dengan mempertahankan kedua sisi: refreshPassives(matchStyles(...)) dari pasif dijalankan dulu, lalu setShadowFoe(...), dan info layar VS membawa styles sekaligus shadow. Urutan pengali di dotDamage dan receiveHit: pengali pasif dulu, lalu +10% Bayangan.
Konflik index.html: baris skrip akhir dan panel jeda; dipertahankan panel jeda dua kolom dari HUD dan ditambahkan content/quotes.js serta vs.js dari vsresult.
- vs.js + vs.css: layar VS sekitar 2,2 detik (dua potret, nama, tag, kutipan pembuka, teks VS, bisa dilewati klik/Spasi/Enter/Esc), hanya untuk versus/Arcade/Survival/dua pemain, tidak di latihan. Cue Round 1 ditunda sampai layar selesai; urutan intro, FIGHT, dan announcer tetap utuh
- ResultView: pemenang besar dengan kutipan menang, yang kalah redup dengan kutipan kalah, rincian koin per baris, statistik singkat, tombol Main lagi / Pilih ulang / Ke toko / Menu utama; akhir Arcade/Survival memakai tampilan yang sama
- Meta.award menyimpan rincian koin di Meta.lastAward tanpa mengubah jumlah koin
- content/quotes.js: kutipan intro/win/lose untuk 7 karakter; build_precache.py ikut memuat folder content/
- tests/t2-vsresult.mjs: uji headless VS, lewati/batal, hasil, Arcade/Survival, jalur menu, ponsel lanskap
Meter ultimate tipis di bawah HP pemain dan lawan: terisi mengikuti cooldown ultimate, berdenyut berlabel SIAP, dan menjadi bar waktu mode yang menyusut (nama mode, warna aura) untuk 6 karakter berbasis data, mode mengamuk Bro Wo, bentuk Senator A Nice, serta feral FENR. Data sama untuk CPU dan P2.
Menu jeda memuat bagian Daftar gerakan yang dapat dilipat: tombol dasar, gerakan perintah, nama skill dan mode karakter, kontrol P2. Teks jeda dan bantuan kontrol dibuat berbahasa Indonesia.
Tombol tambahan sentuh dikecilkan pada tinggi 361-400 px agar tidak menimpa meter lawan. Uji headless tests/t2-hud.mjs.
Konflik di blok API uji akhir game.js: pemeriksaan window.__game.fx (efek jurus) dan hook uji hitDummy/feel/feelState (rasa kena) saling bebas, jadi keduanya dipertahankan.
Mesin efek bersama (canvas 2D, tanpa gambar baru): proyektil punya umur, muncul dengan overshoot, memanjang, irisan bergoyang, ekor bayangan, percikan, dan memudar.
Gelombang suara kini berbeda per karakter (cincin berdenyut, teriakan dengan huruf, rantai cincin), ombak Ethanol Man bergulung dan mengangkat lawan.
Jurus area punya cincin aba-aba 0,25 s, gelombang kejut, retakan, dan serpihan. Dash meninggalkan bayangan sprite, debu, dan garis kecepatan.
Jurus mode mendapat mekanik berbeda lewat flag data: rebound, genangan api, split, korosi, belit, konvoi, ledakan susulan, sedotan.
Bahasa Semut: 10 semut mengitari lalu mengejar, damage naik di tengah (maks 45).
Pemain dan CPU memakai data dan efek yang sama; tests/t1-fx.mjs menguji semua jurus dari kedua sisi.
- feel.js baru: tabel FEEL terpusat per jenis serangan (ringan, sedang, berat, ultimate, guard, parry, counter),
getaran searah pukulan, riak, kilat putih pada sprite yang kena (pemain dan lawan CPU)
- K.O. memperlambat simulasi visual (0,25x ~0,9 dtk; K.O. akhir 0,2x ~1,5 dtk) dengan zoom ke yang kalah dan vignette;
jam ronde dan penutup K.O. tetap memakai waktu nyata
- angka damage pop dengan warna per jenis (counter oranye + teks COUNTER, parry biru, guard abu), dibatasi 8 aktif
- peringkat kombo C/B/A/S di tengah layar, memantul tiap pukulan dan beranimasi saat naik peringkat
- tests/t1-feel.mjs: skenario headless (53 pemeriksaan) dengan screenshot
Karakter data-driven dengan lemparan labu asam dan genangan beracun, gelombang suara, hujan asam bertanda,
dan mode (Semprot Asam, Genangan Luas, Badai Asam). HUD kini memperkecil nama panjang dan menampilkan
nama lawan dengan benar.
Setiap karakter data-driven boleh punya blok mode: nama, durasi, pengali damage/kecepatan, skill 1 dan 2
pengganti dengan cooldown sendiri, ultimate pengganti sekali pakai yang mengakhiri mode, HUD (nama dan ikon),
cut-in tersendiri, dan opsi form: atlas sprite kedua selama mode.
Karakter baru cukup berupa satu berkas assets/<id>/manifest.js: jurus (proyektil, gelombang, kawanan homing,
dash, area, pilar, lemparan), ultimate (volley, stampede, hujan, pilar) dengan kamera zoom dan layar gelap,
HUD, cut-in, dan roster terdaftar otomatis tanpa mengubah game.js per karakter.
Saat mengamuk 10 detik, skill 1 dan 2 berganti jurus baru dengan cooldown sendiri, ikon dan nama HUD
ikut berubah, dan ultimate menjadi Tornado Api Sawit (sekali pakai, mengakhiri mengamuk). Efek truk,
pohon terbakar, tornado, ikon, dan cut-in baru ditambahkan.
Ultimate menukik kamera ke Bro Wo dengan latar menggelap, menahan lawan, menumbuhkan 10 pohon
beruntun lalu mengangkat dan membanting pohon raksasa. Setelahnya Bro Wo mengamuk 10 detik
membawa pohon sawit sebagai senjata (damage, jangkauan, dan kecepatan naik). Joget Gemoy kini
goyang berulang, menyetun lawan, dan menguras darah perlahan lewat racun.
Karakter karikatur pixel art dengan tiga jurus (Pohon Sawit, Joget Gemoy, Hutan Sawit),
potret, ikon, cut-in, efek, dan gambar pilih karakter. Didaftarkan di game.js, menu.js,
index.html, dan style.css.