fighting-konoha/guide/edda-reference.md

70 lines
6.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# EDDA — sang petapa cangkang
EDDA adalah petarung Demi-Human keenam dan karakter kedua belas di roster: nenek kura-kura dengan tongkat panjang dan cangkang kubah besar, satu-satunya petarung counter. Ia berasal dari 8 karakter showcase dan dibuat playable terakhir, setelah NIB. Pemain dapat memilihnya di roster VS/Training dan di Pengaturan → Karakter pemain; CPU memakai kit yang sama. Kartu identitas: assets/edda/character.md.
## Dari showcase ke playable
Alurnya sama dengan NIB ([nib-reference.md](nib-reference.md)). Body showcase v1 (sudah chibi) langsung menjadi base sprite (base-selected.png, job `b9ecaa00-3a50-479f-a295-6e82cd791e49`), dan avatar showcase dipakai sebagai portrait HUD. Di roster.json EDDA ditandai `promoted`, jadi **showcase kini kosong**: kedelapan karakter showcase sudah playable. Semua gambar baru dibuat dengan **GPT Image 2.5 Sunburst**, chroma magenta (palet EDDA hijau giok). Announcer tetap Grady. Alat pipeline: `tools/edda_*.py`.
## Paket siap digunakan ulang
| Paket | Isi |
| --- | --- |
| Sprite | 15 state / 54 frame, atlas 1792×4320, cell 448×288, anchor 224/280, idle 170 px (sepatu sampai cincin tongkat), lebar 138 px |
| UI | portrait 384 (avatar showcase), cut-in 1600×686, 4 ikon 256, roster art dari showcase |
| VFX | PNG alpha: stone (batu giok), ripple (riak pantulan), shell (kubah heksagon saat counter), stomp (hentakan batu) 256 px; tortoise (roh kura-kura) 512 px dengan kaki di tepi bawah |
| Audio | `select_edda` "Edda!" (0.993 s), `edda_wins` "Edda wins!" (1.071 s), Grady. Voice ultimate Opal "Elder Tortoise!" (1.411 s, sunyi di akhir dipotong) |
Ukuran 170 px dipilih dari lineup 170/180/190/200 (size-candidates.png). Pada ukuran itu wajah setara RHEA/HALDOR dan kepalanya tetap di bawah petarung dewasa, cocok untuk nenek yang bungkuk. Wrapper `EDDA_MANIFEST/METRICS` ada di [assets/edda/manifest.js](../assets/edda/manifest.js). Sprite library memutar semua animasi.
## Kemampuan dan balance
| Input | Gerakan | Damage / cooldown |
| --- | --- | --- |
| Space×3 | STAFF FORMS: tusukan, sapuan naik, hentakan ke lantai. Reach 110/95/80 di dalam ujung tongkat (126/111/82 px); durasi 0.40/0.46/0.58 s | 6/8/12 |
| I | STONE SKIP: batu giok dilempar dari 60 px di atas lantai, memantul dua kali (hop 300 px/s) lalu tenggelam, ±630 px dari EDDA. Tidak pernah lebih tinggi dari ±65 px, jadi lompatan melewatinya | 16 / 3 s |
| O | SHELL COUNTER: jendela guard 0.55 s. Hit pertama diabaikan; penyerang dalam 170 px dibalas 24 (knockback 260). Tembakan dari jauh hanya ditahan. Satu counter per guard | 24 / 6 s |
| P | ELDER TORTOISE: pose cast 0.5 s, roh kura-kura berjalan dan menghentak tiga kali | 48 / 18 s |
Setiap basic hit yang valid mengembalikan 5% cooldown maksimum semua skill. HP tetap 200 dalam dua lapis. Semua nilai ada di [edda.js](../edda.js).
### Timeline Elder Tortoise
| Bagian | Waktu dari cast |
| --- | --- |
| Cut-in banner giok | 0–0.78 s |
| Pose cast pemain | 0–0.50 s, lalu bebas bergerak/menyerang |
| Roh muncul | 0.60 s, 140 px di depan EDDA, lalu berjalan maju 120 px/s |
| Hentakan 1 / 2 / 3 | 0.80 / 1.18 / 1.56 s; roh terangkat 34 px sebelum tiap hentakan |
| Hentakan | kena lawan di lantai dalam 150 px dari roh; 16 damage, knockback 40/40/200 |
| Selesai | 2.3 s (roh memudar) |
Hentakan 0.38 s berselang, lebih pendek dari stun 0.42 s, sehingga lawan yang diam di depan EDDA terkena 48. Melompat saat hentakan (tes: lawan di udara pada ketiga hentakan tidak kena) atau berada lebih dari 150 px dari roh menghindarinya; roh tidak berbalik, jadi lawan di belakang EDDA aman. Tidak ada global hit-stop. Pause membekukan serangan ini, sedangkan reset, kembali ke menu dan akhir ronde membatalkannya. Serangan pemain (`tortoise`) dan CPU (`enemyTortoise`) memiliki owner terpisah.
## CPU
- EDDA sebagai CPU memakai otak yang sama ([cpu-ai.md](cpu-ai.md)) dan kit-nya lewat `KITS`. Shell Counter hanya dipilih saat pemain sedang memulai serangan dasar yang belum mengenai, dan tidak pernah dipakai sebagai penutup combo.
- Benchmark (EDDA sebagai CPU): pemain diam K.O. dalam 28.0 / 27.4 / 25.8 / 18.8 s (Easy→Excellent), paling lambat di roster: rantainya pelan, dan counter tidak berguna melawan pemain diam. Proyektil yang mengenai CPU 52 / 43 / 42 / 33%. Detail di [cpu-ai.md](cpu-ai.md).
## Voice
"Elder Tortoise!" digenerate dengan empat preset wanita: Mabel, Opal, Vera dan Delia. Opal dipilih karena pitch mediannya paling rendah (±258 Hz; Vera ±299, Mabel ±314, Delia ±381), paling matang untuk nenek petapa. Ucapan selesai 1.19 s, jadi sunyi di akhir dipotong (1.411 s). Angka pitch hanya panduan; timbre belum didengar pengguna. Cara mengganti: salin kandidat lain dari `assets/edda/audio/ultimate-candidates/` ke `edda-ultimate.mp3`, lalu ganti `VOICE_NAMES.edda` di game.js. Record: generation.json.
## Integrasi engine
- `KITS` memetakan `edda` ke kontrak kit yang sama. EDDA memiliki `eddaStrike` (tongkat, batu) dan summon `startTortoise`/`updateTortoise` (dipilih lewat `startSummon`).
- Proyektil kini mendukung `skip` (gravitasi sendiri `skipG`, `bounces` pantulan dengan kecepatan `hop`, riak di setiap sentuhan). Proyektil lama tidak berubah.
- Aksi dengan `guard` (Shell Counter) diperiksa di awal `receiveHit` (pemain) dan `hitDummy` (CPU) lewat `shellGuard`: hit pertama di jendela `guardEnd` dibatalkan, animasi lompat ke frame serangan balik, dan penyerang dalam jangkauan terkena 24.
- Roh kura-kura adalah efek `edda-spirit` berukuran tetap (300 px) yang digambar dari lantai; x-nya diperbarui oleh summon.
- Snapshot QA berisi `tortoise`/`enemyTortoise` (tanpa referensi efek). Cut-in memakai kelas `.edda-cutin`, art ui/cutin.png, dan judul ELDER TORTOISE dari HTML.
## Reproduksi
1. Prompt/job: desain di roster.json; strip di strip-requests.json (15 × v1); UI di ui-requests.json.
2. `tools/edda_pipeline.py measure`, `tools/edda_measure.py`, lalu tulis `rel.json` (alasan di `qa/rel-decision.json`).
3. `tools/edda_pipeline.py calibrate`, `sprite_gen.cli prepare --out-dir assets/edda/run --character-id edda --base-image assets/edda/base/base-selected.png --request assets/edda/request.json --chroma-key #FF00FF`, lalu `normalize` dan `extract`.
4. `tools/edda_align.py`, lalu `publish`. Hitung emitter (ujung tongkat di frame 3) ke `emitters.json`, lalu jalankan `publish` sekali lagi.
5. `tools/edda_assets.py` mengekspor portrait/ikon/cut-in/VFX, lalu `tools/web_images.py` dan `node tools/build_dist.mjs`.
Catatan QA: assets/edda/run/qa-notes.md. Tes: `node tests/edda.test.cjs` (14 tes).