6.7 KiB
HALDOR — tank tungku berjalan
HALDOR adalah petarung Mecha ketiga dan karakter keenam di roster: pandai besi tua dalam exoframe tungku uap tembaga, bersenjata palu tempa berkepala landasan. Ia berasal dari 8 karakter showcase dan dibuat playable setelah NAJA. Pemain dapat memilihnya di roster VS/Training dan di Pengaturan → Karakter pemain; CPU memakai kit yang sama. Kartu identitas: assets/haldor/character.md.
Dari showcase ke playable
Alurnya sama dengan NAJA (naja-reference.md). Body showcase chibi v2 langsung menjadi base sprite (base-selected.png, job 0f826aeb-57af-4a07-ac46-30dec1e4c6bd), dan avatar showcase dipakai sebagai portrait HUD. Di roster.json HALDOR ditandai promoted, jadi showcase kini berisi 6 karakter. Semua gambar baru dibuat dengan GPT Image 2.5 Sunburst. Announcer tetap Grady.
Paket siap digunakan ulang
| Paket | Isi |
|---|---|
| Sprite | 15 state / 54 frame, atlas 1792×4320, cell 448×288, anchor 224/280, idle 169 px (kaki sampai bibir cerobong), lebar 164–169 px |
| UI | portrait 384 (avatar showcase), cut-in 1600×686, 4 ikon 256, roster art dari showcase |
| VFX | 4 PNG alpha 256: slag (bola terak), splash (percikan lelehan), steam (semburan uap), quake (gelombang batu lava) |
| Audio | select_haldor “Haldor!” (1.149 s), haldor_wins “Haldor wins!” (1.306 s), Grady. Voice ultimate Gideon “Forge Quake!” (1.228 s) |
Ukuran 168 px (hasil 169) dipilih dari lineup 160/168/176/184 (size-candidates.png). Pada ukuran itu kepala dengan jenggot setara NAJA/CORA, sedangkan badannya paling lebar di roster, sesuai peran tank. Wrapper HALDOR_MANIFEST/METRICS ada di assets/haldor/manifest.js. Sprite library memutar semua animasi.
Kemampuan dan balance
| Input | Gerakan | Damage / cooldown |
|---|---|---|
| Space×3 | FORGE CHAIN: hook, uppercut, smash landasan ke lantai. Reach 112/90/95 mengikuti kepala palu terukur (131/83/85 px). Rantai paling lambat (0.42/0.48/0.62 s) dengan knockback terbesar (95/125/235) | 6/8/12 |
| I | SLAG SHOT: bola terak dilempar melambung ke tempat lawan berdiri saat lemparan (180–560 px di depan), waktu terbang 0.9 s, puncak ±200 px di atas lantai. Kena langsung saat melintas atau memercik 72 px saat mendarat. Kontrol lepas saat bola keluar | 16 / 3 s |
| O | STEAM RAM: serudukan bahu, dash 340 px/s (maju ±100 px), reach 118, knockback 320 | 24 / 6 s |
| P | FORGE QUAKE: pose cast 0.5 s, tiga hantaman di kawah depan HALDOR | 48 / 18 s |
Setiap basic hit yang valid mengembalikan 5% cooldown maksimum semua skill. HP tetap 200 dalam dua lapis. Semua nilai ada di haldor.js.
Slag Shot berbeda dari proyektil lain: bola jatuh di bawah gravitasi, jadi tidak bisa dilompati. Cara menghindarnya adalah berpindah tempat setelah lemparan. Pada jarak dekat (<±180 px) bola bisa mengenai badan saat masih naik, seperti lemparan jarak dekat.
Timeline Forge Quake
| Bagian | Waktu dari cast |
|---|---|
| Cut-in banner tembaga/bara | 0–0.78 s |
| Pose cast pemain | 0–0.50 s, lalu bebas bergerak/menyerang |
| Hantaman 1 / 2 / 3 | 0.80 / 1.18 / 1.56 s di kawah 70 px di depan HALDOR |
| Gelombang | sepasang per hantaman (kiri dan kanan), 760 px/s sepanjang lantai, 16 damage, satu hit per gelombang |
| Selesai | 2.20 s (gelombang terakhir terus berjalan sampai keluar layar) |
Jarak antar hantaman 0.38 s, lebih pendek dari stun 0.42 s, sehingga lawan yang diam terkena 48. Satu lompatan (0.57 s di udara) melewati dua gelombang. Lompatan yang tepat waktu ditambah double jump melewati ketiganya; tes mengunci kedua contoh (184 dan 200 HP). Gelombang berjalan ke dua arah, jadi posisi lawan tidak menentukan. Tidak ada global hit-stop; knockback 60/60/190. Pause membekukan serangan ini, sedangkan reset, kembali ke menu dan akhir ronde membatalkannya. Serangan pemain (quake) dan CPU (enemyQuake) memiliki owner terpisah. Gelombang memakai jalur proyektil biasa, jadi CPU yang membaca proyektil otomatis mencoba melompatinya.
CPU
- HALDOR sebagai CPU memakai otak yang sama (cpu-ai.md) dan kit-nya lewat
KITS. Jangkauan palu yang pendek membuatnya membuka rantai dari ±100 px. - Aturan baru untuk semua lawan CPU: proyektil melambung (Slag Shot pemain) tidak dilompati. CPU membaca titik jatuhnya setelah jeda
reaction, lalu (peluangevade) berlari keluar dari percikan lewat sisi terdekat sampai bola mendarat. Tes: Excellent minimal 4/6, Easy lebih sedikit. - Benchmark (HALDOR sebagai CPU): pemain diam K.O. dalam 26.0 / 23.6 / 19.6 / 17.1 s (Easy→Excellent), sedikit lebih lambat dari MIRA/CORA/NAJA, sesuai tank. Proyektil yang mengenai CPU 52 / 39 / 37 / 37%.
Voice
Katalog preset tidak menyertakan deskripsi suara, jadi “Forge Quake!” digenerate dengan empat preset pria: Gideon, Barrett, Bram dan Knox. Gideon dipilih karena pitch median-nya paling rendah (±81 Hz, di bawah Holden milik FENR ±92 Hz) dan sedikit frame periodik, yang menandakan suara serak cocok untuk pandai besi tua. Angka pitch berasal dari estimasi autokorelasi sederhana dan hanya menjadi panduan; isi dan timbre belum didengar pengguna. Take dipakai apa adanya (ucapan selesai di 0.88 s). Cara mengganti: salin kandidat lain dari assets/haldor/audio/ultimate-candidates/ ke haldor-ultimate.mp3, lalu ganti VOICE_NAMES.haldor di game.js. Record: generation.json.
Integrasi engine
KITSmemetakanhaldorke kontrak kit yang sama. HALDOR memilikihaldorStrike(lob, tebasan, smash, serudukan) dan summonstartQuake/updateQuake(dipilih lewatstartSummon). Dash Steam Ram memakai jalur dash yang sama dengan FENR/MIRA.- Proyektil kini mendukung
gravity(lintasan lengkung) dan mendarat lewatslagSplash. Proyektil lama tanpagravitytidak berubah. bodyGap62 px bila HALDOR bertarung (badan lebar), bayangan lebih lebar.- Snapshot QA berisi
quake/enemyQuake. Cut-in memakai kelas.haldor-cutin, art ui/cutin.png, dan judul FORGE QUAKE dari HTML.
Reproduksi
- Prompt/job: desain di roster.json; strip di strip-requests.json (15 × v1); UI di ui-requests.json.
tools/haldor_pipeline.py measure,tools/haldor_measure.py, lalu tulisrel.json(alasan diqa/rel-decision.json).tools/haldor_pipeline.py calibrate,sprite_gen.cli prepare --out-dir assets/haldor/run --character-id haldor --base-image assets/haldor/base/base-selected.png --request assets/haldor/request.json --chroma-key #00FF00, lalunormalizedanextract.tools/haldor_align.py, lalupublish. Hitung emitter (ujung terjauh di frame 2) keemitters.json, lalu jalankanpublishsekali lagi.tools/haldor_assets.pymengekspor portrait/ikon/cut-in/VFX.
Catatan QA: assets/haldor/run/qa-notes.md. Tes: node tests/haldor.test.cjs (15 tes).