diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 0000000..b92f9d3 --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,276 @@ +# ROADMAP — Konoha Fighting + +Satu berkas yang memuat **semua hal yang bisa dikembangkan** dari game ini, dari perbaikan rasa bermain sampai mode baru, toko, skin, easter egg, dan teknis. Setiap butir diberi perkiraan **ukuran kerja** (S kecil: kurang dari 1 sesi, M sedang: 1–3 sesi, L besar: beberapa sesi) dan **biaya kuota gambar** (jumlah gambar ChatGPT yang dibutuhkan) bila ada. + +Status per 2026-10-02. Dokumen ini adalah usulan; urutan dan isi sepenuhnya bisa diubah oleh pemilik proyek. + +--- + +## 0. Kondisi sekarang + +**Sudah ada** +- 7 karakter bisa dimainkan: Bro Wo, Mega Chan, Son of Solo Man, Ethanol Man, A Nice, Solo Man, Gufron. Masing-masing punya kombo 3 pukulan, 2 skill, 1 ultimate sinematik (kamera zoom, layar gelap, lawan tertahan), dan **mode pasca-ultimate 10 detik** dengan skill dan ultimate pengganti. A Nice berubah menjadi bentuk Senator (atlas sprite kedua). +- 5 slot misteri bertanda tanya (tidak bisa dipilih) di layar pilih karakter. +- Mesin karakter data-driven (`window.FIGHTERS`): karakter baru cukup berupa data + aset, tanpa mengubah `game.js`. +- Pipeline pembuatan karakter otomatis (`work/pipeline.py`): gambar dasar, atlas 15 gerakan, UI, mode, pemasangan. +- Mode Latihan, VS Komputer (4 tingkat kesulitan), 5 arena, announcer, kontrol sentuh untuk HP. + +**Belum ada / terasa kaku (catatan pemilik proyek)** +- Jarak pukulan terasa terlalu dekat. +- Karakter terlihat lebih kecil saat lompat dan jongkok. +- Kombo terasa tidak ada. +- Gerakan perintah (misalnya bawah, bawah, Space) belum ada. +- Tidak ada easter egg. +- Belum ada toko, menu pengaturan karakter, skin, atau pilihan skill. +- Suara ultimate dan suara karakter belum ada. + +--- + +## 1. Perbaikan rasa bermain (prioritas tertinggi) + +Ini membuat semua yang lain terasa lebih baik, dan sebagian besar murah. + +### 1.1 Jarak pukulan dan jarak berdiri (M) +**Gejala:** pukulan terasa harus sangat dekat. +**Penyebab yang saya temukan di kode:** +- Tubuh dua petarung dijaga hanya 54 px dari pusat ke pusat (`bodyGap`), sehingga mereka berdiri hampir bertumpuk. +- Jangkauan pukulan dasar 105–120 px dibanding ujung kepalan yang terlihat sekitar 80–97 px, jadi serangan kena dari jarak yang tidak sejajar dengan gambar. +**Rencana:** +- Naikkan jarak badan (sekitar 80–90 px) dan buat dorongan antar-badan lebih halus. +- Samakan jangkauan hitbox dengan ujung kepalan yang terlihat, lalu beri tiap serangan jangkauan sendiri sesuai gambar (diukur dari atlas, sudah ada datanya di `emitters`). +- Tambah tampilan hitbox yang jelas untuk menyetel (sudah ada tombol hitbox di pengaturan). +- Pukulan jarak jauh vs dekat: beri tiap karakter gaya jarak berbeda (zoner, rushdown, grappler). + +### 1.2 Ukuran sprite saat lompat dan jongkok (S–M) +**Penyebab:** gerakan satu pose (lompat, salto) diskalakan ke tinggi tertentu (150 px dan 112 px) sedangkan idle 180 px, jadi kepala ikut mengecil. Jongkok juga sedikit lebih kecil. +**Rencana:** kalibrasi skala berdasarkan **ukuran kepala** (lebar kepala sama dengan idle), bukan tinggi total, lalu bangun ulang atlas ketujuh karakter (tanpa gambar baru, hanya proses ulang). Hasilnya kepala tetap sama besar di semua gerakan. + +### 1.3 Sistem kombo (L) +**Sekarang:** rantai pukulan 3 kali (ketuk Space), skill bisa memotong pukulan dasar, penghitung "HITS" ada. +**Yang bisa ditambah:** +- **Rantai dengan jendela waktu** (ketukan terlalu cepat atau terlambat memutus rantai) dan **buffer input** supaya tidak ada ketukan yang hilang. +- **Cancel:** pukulan ke skill (sudah ada), skill ke skill, dan batalkan di frame tertentu dengan biaya meter. +- **Launcher dan juggle:** serangan yang mengangkat lawan, lalu lawan bisa diserang saat di udara beberapa kali, dengan batas agar tidak ada kombo tak berujung. +- **Pengurangan damage bertahap (damage scaling)** di kombo panjang dan **counter-hit** (kena saat lawan menyerang = damage ekstra). +- **Finisher kombo** dan **kombo tersembunyi** per karakter (urutan tertentu memicu efek khusus). +- **Penghitung kombo** yang lebih besar dengan "hits, damage, rank" (D, C, B, A, S) dan hadiah koin sesuai rank. +- Mode **Latihan Kombo (Combo Trial)** per karakter dengan tantangan bertingkat. + +### 1.4 Gerakan perintah / input khusus (L) +**Sekarang:** A/D jalan, dua ketuk lari, W lompat, S jongkok, **dua ketuk S = salto**, Space serang, I/O/P skill. +**Catatan penting:** dua ketuk bawah sudah dipakai salto, jadi "bawah, bawah, Space" akan bentrok. Perlu keputusan: memindahkan salto (misalnya ke W dua kali sudah ada lompat ganda) atau memakai urutan lain. +**Yang bisa ditambah:** +- **Input gerakan** gaya fighting game: `↓ →` + Space (tinju maju), `↓ ↓` + Space (sapuan bawah / uppercut), `← ↓ →` + Space (penyerang jarak jauh), dan lainnya, dengan buffer input. +- **Serangan jongkok** (bawah + Space), **serangan udara** (lompat + Space, lompat + bawah + Space), **anti-udara** (uppercut). +- **Lempar (throw)** yang menembus blok, dan **lepas lempar**. +- **Blok** yang benar (tahan belakang), **blok rendah dan tinggi**, **parry** dengan waktu ketat, **guard break**. +- **Dash dan backdash** dengan frame kebal singkat, **dorong blok (pushback)**. +- **Daftar gerakan (move list)** per karakter di menu, sehingga pemain tahu inputnya. +- Setiap karakter mendapat 2–3 **gerakan perintah khas** (jangkauan, damage, risiko berbeda). + +### 1.5 Rasa kena pukul (S–M) +- Hit-stop (jeda singkat saat kena) dan getaran layar yang disetel per serangan. +- Dorongan (knockback) dengan kurva, bukan konstan; variasi animasi kena (atas, bawah, tengah). +- Efek percikan berbeda per tipe serangan, dan suara kena yang lebih tebal. +- Efek perlambatan (slow motion) sesaat pada K.O. dan pada kena ultimate. + +### 1.6 Gerak dan fisika (S) +- Setel kecepatan jalan dan lari, tinggi lompat, gravitasi, dan lompat ganda per karakter (berat vs ringan). +- Hentikan "meluncur" saat berhenti, tambah efek debu saat mendarat dan berbalik. + +--- + +## 2. Toko (Shop) + +### 2.1 Ekonomi koin (M) +- **Sumber koin:** menang ronde dan pertandingan, bonus kesulitan, bonus kombo (rank), tantangan harian, pencapaian, kemenangan sempurna, mode Arcade. +- **Penyimpanan:** di browser (`localStorage`) dengan versi data, fitur **ekspor dan impor** save, dan perlindungan sederhana dari kerusakan data. +- Layar **ringkasan hadiah** setelah pertandingan. + +### 2.2 Barang yang bisa dibeli (L) +| Kategori | Isi | Biaya aset | +| --- | --- | --- | +| **Skill tambahan** | tiap karakter punya kumpulan 4–6 skill; pemain membeli skill baru untuk dipilih | 2–3 baris sprite + 1–2 efek + ikon per skill | +| **Skin warna** | variasi palet (gratis dibuat dengan `recolor-palette`) | 0 gambar | +| **Skin kostum** | pakaian baru per karakter (kemeja lain, jas, batik) | sekitar 15 gambar per skin | +| **Aksesori** | topi, kacamata, selempang (perlu penempelan per frame; ditunda) | sulit, lihat bagian risiko | +| **Gerakan perintah** | gerakan khas tambahan (bagian 1.4) | 1–2 baris sprite | +| **Gaya ultimate** | variasi efek ultimate (warna dan bentuk efek) | 2–3 efek | +| **Gaya mode** | variasi mode pasca-ultimate | tergantung | +| **Arena** | latar baru (Bromo, taman malam, stadion merah, dan lainnya) | 1–2 gambar besar per arena | +| **Musik** | lagu latar tambahan | audio, bukan gambar | +| **Pose dan kutipan menang** | pose kemenangan dan kalimat | 1 baris sprite per pose | +| **Gelar dan bingkai profil** | label pemain, bingkai potret | kecil | +| **Paket (bundle)** | beberapa barang sekaligus, diskon | tidak ada | + +### 2.3 Sistem toko (M) +- Layar toko dengan tab per kategori dan per karakter, pratinjau animasi sebelum membeli, harga, dan status (terkunci, dibeli, dipakai). +- **Syarat buka kunci** selain koin: menang N kali dengan karakter itu, capai rank tertentu, selesaikan tantangan. +- **Barang langka** yang hanya muncul di toko pada hari tertentu atau lewat easter egg. +- **Toko harian** dengan barang bergilir, agar ada alasan kembali bermain. + +--- + +## 3. Menu Karakter (atur skin, skill, dan lainnya) + +### 3.1 Layar "Loadout" per karakter (M–L) +- **Skill:** pilih **2 dari kumpulan skill** yang sudah dibeli (ultimate tetap satu, atau bisa memilih gaya ultimate). +- **Skin:** pilih skin warna dan kostum, lihat pratinjau gerak. +- **Aksesori dan gelar**, bila sudah ada. +- **Preset:** simpan beberapa loadout (misalnya "Agresif", "Jarak jauh") dan ganti cepat sebelum bertanding. +- **Lihat statistik:** kekuatan, kecepatan, jangkauan, pertahanan (dan bagaimana skill pilihan mengubahnya). +- **Daftar gerakan (move list)** dan **biografi singkat** (cerita parodi, tanpa fakta yang menuduh). +- **Pratinjau:** karakter memutar idle, serangan, dan ultimate di layar. + +### 3.2 Pilihan di awal pertandingan (S–M) +- Layar singkat memilih skill sebelum ronde pertama (atau pakai preset), sesuai keinginan pilihan di awal. +- CPU memilih loadout acak atau sesuai tingkat kesulitan. + +--- + +## 4. Jurus tambahan (kumpulan skill per karakter) + +Semua jurus di bawah memakai jenis yang sudah ada di mesin (proyektil, gelombang, kawanan, dash, area, pilar, lemparan, dan ultimate volley, stampede, hujan, pilar), jadi biayanya hanya aset. + +| Karakter | Usulan skill tambahan (untuk dibeli) | +| --- | --- | +| **Mega Chan** | Sapu Merah (sapuan area), Banteng Kecil (peliharaan membantu), Kepalan Merdeka (pukulan menembus), Orasi Panjang (gelombang berantai) | +| **Son of Solo Man** | Slepet Turbo, Kemeja Dash, Hujan Kecil (tetesan beruntun), Teriakan Ganda | +| **Ethanol Man** | Tetes Tebu (lemparan), Botol Molotov Jinak (api di lantai), Tawa Pelan (dorongan area), Semprotan | +| **A Nice** | Peci Boomerang (lemparan kembali), Sapaan Ramah (pemulihan kecil), Mimbar Retak, Gagasan Ganda | +| **Solo Man** | Blusukan Dash, Sarung Lilit (menarik lawan), Senyum Tipis (balas serangan), Konvoi Mini | +| **Gufron** | Hormat Siap (balas serangan), Sarung Putar, Semut Ganda, Syududu Berantai | +| **Bro Wo** | Tendangan Kuda, Topi Frisbee, Pohon Kecil, Joget Singkat | + +Setiap karakter bisa mencapai 5–6 skill, sehingga pilihan 2 dari 6 memberi kombinasi gaya yang berbeda. + +--- + +## 5. Skin + +- **Palet warna (S):** pilihan warna baju, rambut, dan efek, dibuat otomatis tanpa gambar baru. Cocok untuk hadiah murah di toko. +- **Kostum penuh (L):** tiap skin kostum membutuhkan atlas 15 gerakan baru (sekitar 15 gambar), jadi dibatasi 1–2 per karakter dan dijadikan barang mahal. +- **Skin acara:** tema musiman (hari kemerdekaan, tahun baru), muncul pada tanggal tertentu. +- **Skin tersembunyi:** diperoleh lewat easter egg atau syarat khusus. +- **Potret dan cut-in ikut skin** (untuk skin kostum). + +--- + +## 6. Easter egg dan rahasia + +**Cara menemukannya** +- **Kode rahasia** (urutan tombol di menu, gaya klasik) yang membuka sesuatu. +- **Input khusus di arena** (misalnya urutan tertentu saat pose menang). +- **Klik objek di latar** (menara jam, bendera, burung, awan) yang memicu kejutan. +- **Pasangan lawan khusus:** dialog atau intro berbeda bila dua karakter tertentu bertemu. +- **Kondisi tak terduga:** menang tanpa kena pukul, kalah 10 kali berturut-turut, bermain pada jam tertentu. +- **Slot misteri:** petunjuk samar yang bertambah (siluet yang berubah, teka-teki) untuk memicu spekulasi. + +**Hadiahnya** +- Skin tersembunyi, pose menang, kutipan, gelar, koin, musik rahasia, arena rahasia, dan **karakter misteri** (bagian 7). +- **Pencapaian (achievement):** daftar dengan ikon, sebagian tersembunyi sampai terbuka. +- **Kutipan dan sapaan acak** saat intro dan menang (teks parodi ringan). +- **Referensi lucu** di arena (papan, spanduk, hewan kecil yang lewat) yang bisa diklik. +- **Hari spesial:** perubahan kecil pada tanggal tertentu. + +--- + +## 7. Slot misteri dan karakter baru + +Lima slot bertanda tanya sudah ada. Bisa dijadikan sistem spekulasi: +- **Petunjuk bertahap:** teka-teki, siluet, atau potongan kata yang muncul seiring pemain mencapai target (menang N kali, rank tertentu). +- **Hitung mundur atau tahap pembukaan:** slot terbuka satu per satu setelah syarat terpenuhi atau saat Anda merilis karakter baru. +- **Teaser:** gambar blur atau siluet setiap kali pemain mengumpulkan sesuatu. +- **Karakter rahasia** yang dibuka lewat easter egg (bagian 6). +- **Karakter baru** lewat pipeline yang sudah ada (sekitar 35–50 menit dan 25–35 gambar per karakter, termasuk mode). Bisa ditambah kapan saja tanpa mengubah kode. +- **Bos khusus:** lawan Arcade yang tidak bisa dipilih pemain. +- **Varian karakter:** versi alternatif (seperti bentuk Senator) sebagai karakter terpisah. + +--- + +## 8. Mode permainan + +| Mode | Isi | Ukuran | +| --- | --- | --- | +| **Dua pemain lokal** | VS teman di satu komputer (kontrol sudah dipetakan untuk P2 di panduan, perlu diaktifkan dan diuji) | M | +| **Arcade** | menghadapi semua karakter berurutan, bos di akhir, hadiah koin besar, akhir cerita singkat | M | +| **Survival (tanpa akhir)** | lawan datang bertubi-tubi, darah dipulihkan sedikit tiap kemenangan, skor tertinggi | M | +| **Time Attack** | selesaikan Arcade secepat mungkin | S | +| **Boss Rush** | hanya bos, makin sulit | M | +| **Latihan lanjutan** | dummy yang bisa diatur (diam, melompat, memblok), rekam dan putar ulang, tampilan frame data | M | +| **Latihan Kombo** | tantangan kombo per karakter (bagian 1.3) | M | +| **Tantangan Harian** | satu aturan khusus per hari (darah satu, tanpa skill, hanya ultimate) dengan hadiah | M | +| **Turnamen** | bagan 8 pemain melawan CPU, final panjang | M | +| **Tim (2 lawan 2 atau tag)** | ganti karakter saat bertanding | L | +| **Melawan bos bersama (co-op)** | dua pemain lokal melawan satu bos besar | L | +| **Misi** | tugas per karakter ("kalahkan lawan dengan ultimate saja") | M | +| **Mode cerita pendek** | dialog bergambar antar pertandingan, parodi ringan | L | +| **Online** | bertanding lewat jaringan (WebRTC dengan sinkronisasi ulang) | sangat L, risiko tinggi | + +--- + +## 9. Presentasi dan kenyamanan + +- **Layar VS dan intro:** layar "VS" sebelum pertandingan, kutipan antar lawan, dan intro khas per karakter. +- **Pose dan kutipan menang;** dialog pendek setelah K.O. +- **Suara:** teriakan ultimate (rekaman sendiri), suara serangan, suara kemenangan, announcer untuk karakter baru, musik per arena dan per mode. +- **Arena baru:** padang pasir ala Bromo, taman malam dengan bangunan putih, stadion merah, pasar malam, dan lainnya; latar bergerak dan penonton yang bereaksi. +- **Kamera dan efek:** zoom dramatis saat K.O., gerak lambat, ulang tayang (replay) K.O. terakhir. +- **Pengaturan:** mengubah tombol (rebind), dukungan **gamepad**, ukuran teks, mode warna untuk buta warna, kurangi gerak berlebih (reduce motion), bahasa Indonesia dan Inggris. +- **Layar sentuh (HP):** tombol untuk gerakan perintah, tata letak yang bisa digeser. +- **Layar profil:** statistik pemain (menang, kalah, kombo terpanjang), koleksi, dan pencapaian. +- **HUD:** penghitung meter ultimate yang jelas, indikator mode, ikon status (racun, bakar, tersetun). + +--- + +## 10. Teknis dan kualitas + +- **Pengujian otomatis:** skrip simulasi yang menjalankan CPU melawan CPU dan memastikan tidak ada error (sudah dilakukan manual dengan 50+ pasangan); jadikan suite tetap. +- **Simulator keseimbangan:** matriks semua karakter melawan semua dengan statistik menang, untuk menemukan karakter yang terlalu kuat atau lemah. +- **Penyimpanan:** format save berversi, ekspor dan impor, pemulihan dari data rusak. +- **Performa:** atlas webp sudah ringan (sekitar 30 MB total); tambah muat malas (lazy load) untuk aset toko dan skin. +- **PWA / offline:** service worker sudah ada; cek ulang daftar aset (`work/build_precache.py`) setiap perubahan. +- **Alat produksi:** pipeline sudah mendukung pembuatan ulang karakter dengan sedikit perintah; tambah perintah untuk skin palet dan kalibrasi ukuran kepala. +- **Dokumentasi:** panduan menambah karakter, jurus, skin, dan arena; daftar semua input dan data. +- **Distribusi:** hosting statis (GitHub Pages, Netlify) atau bungkus sebagai aplikasi desktop (Electron). Online multiplayer butuh server tambahan. + +--- + +## 11. Risiko dan hal yang perlu dijaga + +1. **Tokoh nyata dan parodi.** Karakter berbasis tokoh publik dengan nama plesetan. Repo sebaiknya **tetap privat** sampai ada keputusan sadar untuk membuka. Jaga nada ringan, tanpa tuduhan fakta, tanpa unsur agama, dan tanpa merendahkan secara pribadi. Gufron adalah warga biasa yang viral, jadi lebih sensitif. +2. **Bentuk Senator (A Nice)** terinspirasi karakter game berhak cipta. Cukup aman untuk proyek pribadi, tetapi hati-hati bila dipublikasikan. +3. **Lisensi aset bawaan.** Aset awal dari AETHER CLASH (Bang Tutorial) berlisensi **CC BY-NC 4.0**: wajib kredit dan **tidak boleh komersial**. Karena itu **toko dengan uang sungguhan tidak boleh** sebelum seluruh aset bawaan diganti. Koin dalam game (tanpa uang asli) aman. +4. **Suara tokoh asli** tidak ditiru; pakai rekaman sendiri atau suara umum. +5. **Foto acuan wajah.** Dipakai sebagai acuan gaya; hasilnya tetap ilustrasi pixel art. Simpan foto hanya di folder lokal yang tidak ikut git. +6. **Data pemain.** Penyimpanan hanya di browser; jangan menyimpan data pribadi. + +--- + +## 12. Urutan pengerjaan yang saya sarankan + +| Tahap | Isi | Ukuran | Biaya gambar | +| --- | --- | --- | --- | +| **A. Perbaiki rasa bermain** | bagian 1.1, 1.2, 1.5, 1.6 (jarak, ukuran kepala, rasa kena, fisika) | M | 0 | +| **B. Kombo dan input perintah** | bagian 1.3, 1.4 (rantai, cancel, launcher, gerakan perintah, daftar gerakan) | L | sedikit (baris sprite gerakan perintah) | +| **C. Loadout dan toko dasar** | menu karakter, pilih 2 skill, koin, skin palet, toko dengan skill awal | L | sekitar 2–3 per skill | +| **D. Konten toko** | skill tambahan per karakter, arena, gaya ultimate, kutipan | L | banyak (bertahap) | +| **E. Mode permainan** | Dua pemain, Arcade, Survival, Latihan lanjutan, Latihan Kombo | L | sedikit | +| **F. Easter egg dan slot misteri** | kode rahasia, petunjuk bertahap, achievement | M | sedikit | +| **G. Poles** | suara, gamepad, rebind, replay, bahasa, layar profil | M | 0 | +| **H. Distribusi** | pengujian, dokumentasi, hosting, opsi online | L | 0 | + +Alasan urutannya: tahap A dan B membuat game terasa seperti fighting game sungguhan sebelum menambah barang untuk dibeli. Tahap C membutuhkan struktur skill yang bisa dipilih, yang paling mudah dibangun setelah gerakan dan input beres. + +--- + +## 13. Keputusan yang saya butuhkan dari pemilik proyek + +1. **Input "bawah, bawah, Space":** salto saat ini memakai dua ketukan bawah. Pindahkan salto, atau pakai urutan lain untuk gerakan perintah? +2. **Jangkauan pukulan:** apakah maksudnya berdiri terlalu rapat, atau pukulan yang harus sangat dekat? (Saya akan menyetel keduanya dan Anda menilai.) +3. **Jumlah skill per karakter** di toko: 4, 5, atau 6? +4. **Skin:** cukup palet warna dulu, atau langsung 1 kostum penuh per karakter? +5. **Mode permainan** yang paling Anda inginkan setelah Dua Pemain: Arcade atau Survival? +6. **Slot misteri:** mau saya bangun sistem petunjuk bertahap, atau cukup tetap tanda tanya sampai Anda mengisinya? +7. **Karakter baru berikutnya:** ada nama dan foto yang ingin dimasukkan untuk 5 slot? +8. **Rencana rilis:** tetap privat, hanya dibagikan ke teman, atau akan dibuka publik? (Menentukan seberapa hati-hati soal bagian 11.)