fighting-konoha/guide/nib-reference.md

69 lines
5.9 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.

# NIB — kurir atap
NIB adalah petarung Demi-Human kelima dan karakter kesebelas di roster: bocah tikus kurir dengan dua tongkat pendek dan tas surat besar, petarung terkecil dan tercepat. Ia berasal dari 8 karakter showcase dan dibuat playable setelah SOLAN. Pemain dapat memilihnya di roster VS/Training dan di Pengaturan → Karakter pemain; CPU memakai kit yang sama. Kartu identitas: assets/nib/character.md.
## Dari showcase ke playable
Alurnya sama dengan SOLAN ([solan-reference.md](solan-reference.md)). Body showcase v1 (sudah chibi) langsung menjadi base sprite (base-selected.png, job `ccd7d47b-e244-4c21-abc5-91cb2a68cddb`), dan avatar showcase dipakai sebagai portrait HUD. Di roster.json NIB ditandai `promoted`, jadi showcase kini tinggal EDDA. Semua gambar baru dibuat dengan **GPT Image 2.5 Sunburst**, chroma hijau. Announcer tetap Grady. Alat pipeline: `tools/nib_*.py`.
Filter keamanan provider menolak idle dan run v1 sebagai false positive; usia numerik dihapus dari identitas dan v2 langsung lolos (qa-notes).
## Paket siap digunakan ulang
| Paket | Isi |
| --- | --- |
| Sprite | 15 state / 54 frame, atlas 1792×4320, cell 448×288, anchor 224/280, idle 150 px (sepatu sampai puncak telinga), lebar 120–126 px |
| UI | portrait 384 (avatar showcase), cut-in 1600×686, 4 ikon 256, roster art dari showcase |
| VFX | 4 PNG alpha 256: letter (surat bersegel), plane (pesawat kertas), slip (kilatan selinap), stamp (cap segel saat melepas pesawat) |
| Audio | `select_nib` "Nib!" (0.914 s), `nib_wins` "Nib wins!" (1.411 s), Grady. Voice ultimate Evan "Special Delivery!" (1.254 s, sunyi di akhir dipotong) |
Ukuran 150 px dipilih dari lineup 140/150/160/170 (size-candidates.png). Pada ukuran itu wajah setara RHEA dan NIB tetap yang terkecil. Wrapper `NIB_MANIFEST/METRICS` ada di [assets/nib/manifest.js](../assets/nib/manifest.js). Sprite library memutar semua animasi.
## Kemampuan dan balance
| Input | Gerakan | Damage / cooldown |
| --- | --- | --- |
| Space×3 | BATON FLURRY: jab, ayunan naik, tongkat ganda. Rantai tercepat di roster (0.30/0.34/0.46 s); reach 95/75/95 di dalam ujung tongkat (107/80/101 px); knockback kecil 55/75/170 agar tetap dekat | 6/8/12 |
| I | EXPRESS LETTER: surat bersegel dilempar datar setinggi dada, 1100 px/s (tercepat di roster), hilang setelah 400 px | 16 / 3 s |
| O | ROOFTOP SLIP: dash rendah 650 px/s, reach 100. Bila mengenai, NIB menyelinap 70 px ke belakang lawan dan berbalik menghadapnya (dash berhenti) | 24 / 6 s |
| P | SPECIAL DELIVERY: pose cast 0.5 s, tiga pesawat kertas homing | 48 / 18 s |
Setiap basic hit yang valid mengembalikan 5% cooldown maksimum semua skill. HP tetap 200 dalam dua lapis. Semua nilai ada di [nib.js](../nib.js).
### Timeline Special Delivery
| Bagian | Waktu dari cast |
| --- | --- |
| Cut-in banner biru langit | 0–0.78 s |
| Pose cast pemain | 0–0.50 s, lalu bebas bergerak/menyerang |
| Pesawat 1 / 2 / 3 | 0.80 / 1.18 / 1.56 s dari tas NIB, meluncur naik lalu berbelok ke dada lawan |
| Pesawat | 620 px/s, belok maks 3.2 rad/s, hilang setelah 2.2 s; 16 damage, satu hit per pesawat |
| Selesai | setelah 2.6 s dan semua pesawat habis |
Pesawat dilepas 0.38 s berselang, lebih pendek dari stun 0.42 s, sehingga lawan yang diam terkena 48 di mana pun ia berdiri, termasuk di belakang NIB. Karena beloknya terbatas, lompatan saat pesawat tinggal ±100 px membuatnya meleset (tes: 2 dari 3 lolos); lompatan lebih awal atau berlari tetap terkejar. Tidak ada global hit-stop; knockback 40/40/180. Pause membekukan serangan ini, sedangkan reset, kembali ke menu dan akhir ronde membatalkannya. Serangan pemain (`delivery`) dan CPU (`enemyDelivery`) memiliki owner terpisah.
## CPU
- NIB sebagai CPU memakai otak yang sama ([cpu-ai.md](cpu-ai.md)) dan kit-nya lewat `KITS`. Express Letter memakai `range` 400 untuk jangkauan CPU.
- Benchmark (NIB sebagai CPU): pemain diam K.O. dalam 17.9 / 17.2 / 12.1 / 12.7 s (Easy→Excellent), tercepat di roster pada Hard dan Excellent karena rantainya tercepat. Proyektil yang mengenai CPU 52 / 42 / 34 / 31%. Detail di [cpu-ai.md](cpu-ai.md).
## Voice
"Special Delivery!" digenerate dengan empat preset pria muda: Cody (job gagal di provider), Evan, Ian dan Kevin. Evan dipilih karena pitch mediannya paling tinggi (±267 Hz; Kevin ±227, Ian ±192), paling muda untuk kurir kecil. Ucapan selesai 1.02 s, jadi sunyi di akhir dipotong (1.254 s). Angka pitch hanya panduan; timbre belum didengar pengguna. Cara mengganti: salin kandidat lain dari `assets/nib/audio/ultimate-candidates/` ke `nib-ultimate.mp3`, lalu ganti `VOICE_NAMES.nib` di game.js. Record: generation.json.
## Integrasi engine
- `KITS` memetakan `nib` ke kontrak kit yang sama. NIB memiliki `nibStrike` (tongkat, surat, selinap) dan summon `startDelivery`/`updateDelivery` (dipilih lewat `startSummon`). Rooftop Slip memakai jalur dash yang sama dengan FENR/MIRA/HALDOR/ISOLDE/SOLAN, lalu memindahkan NIB ke belakang lawan.
- Proyektil kini mendukung `homing` (belok ke dada lawan dengan batas `turn` rad/s, kecepatan `speedH`). Proyektil lama tidak berubah.
- Snapshot QA berisi `delivery`/`enemyDelivery`. Cut-in memakai kelas `.nib-cutin`, art ui/cutin.png, dan judul SPECIAL DELIVERY dari HTML.
## Reproduksi
1. Prompt/job: desain di roster.json; strip di strip-requests.json (13 × v1, 2 × v2); UI di ui-requests.json.
2. `tools/nib_pipeline.py measure`, `tools/nib_measure.py`, lalu tulis `rel.json` (alasan di `qa/rel-decision.json`).
3. `tools/nib_pipeline.py calibrate`, `sprite_gen.cli prepare --out-dir assets/nib/run --character-id nib --base-image assets/nib/base/base-selected.png --request assets/nib/request.json --chroma-key #00FF00`, lalu `normalize` dan `extract`.
4. `tools/nib_align.py`, lalu `publish`. Hitung emitter (ujung tongkat di frame 2) ke `emitters.json`, lalu jalankan `publish` sekali lagi.
5. `tools/nib_assets.py` mengekspor portrait/ikon/cut-in/VFX, lalu `tools/web_images.py` dan `node tools/build_dist.mjs`.
Catatan QA: assets/nib/run/qa-notes.md. Tes: `node tests/nib.test.cjs` (13 tes).