Adv dragoon: distinct identity, one dragoon GLB (-4.9 MB) - #30
Conversation
enemy_adv_dragoon.glb was BYTE-IDENTICAL to enemy_dragoon.glb (same MD5): upstream level3 ships no adv art - its body_adv.skin maps to the same textures as the default skin - so the converter's adv row produced a 4.9 MB duplicate. Gameplay-wise that meant the game's only RANGED heavy was indistinguishable from the melee heavy until the barb was already in the air, in a game whose ranged kinds exist precisely to make reading the field matter (SH-042's own words). - enemies.ts: both dragoon kinds load ONE GLB; new KIND_TINTO per-kind base tint (albedo multiplier - shading/normals untouched); the adv dragoon gets a violet shift (255,150,235), everyone else stays white. - main.ts: the live draw lerps the KIND tint toward red on hit flash (so the adv stays recognisably violet while flashing); all three corpse draws (pre-ragdoll blow, ragdoll, clamp-and-sink fallback) keep the kind tint instead of WHITE. - convert-aliens-anim.ts: the adv dragoon row is gone - dead output has to stop being produced. enemy_adv_dragoon.glb deleted (-4.9 MB). Verified: perry compile green; AITEST batch run with a temporary probe confirmed (a) the tint object reaches the draw call (logged tintG0=150 for a probe-tinted kind), (b) the run/AI are unaffected. The multiply mechanism itself is the same drawModel tint parameter the red hit-flash and the 88 per-tree tints already exercise in production. Eyeball the exact violet when an adv dragoon wave is next played; the value is one table row to tune. Also learned (filed for the audit doc): the F12 screenshot path renders the main menu darkening over an AITEST-started run because the harness calls startRun() directly and predates the SH-049 front-end - AITEST runs live under a drawn menu. Numeric probes remain the trustworthy channel there.
|
Warning Review limit reached
Next review available in: 46 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (2)
📒 Files selected for processing (4)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Two things the textually-clean auto-merge would have shipped broken: - #28 removed KIND_COUNT/ALIEN_GLB from main.ts imports; this branch's stageModels batch uses both. Re-added - a green Perry compile does not catch absent cross-module imports (ReferenceError at boot). - This branch (and #30) accidentally committed dxcompiler.dll/dxil.dll: both were branched before #29's .gitignore landed, so 'git add -A' swept the untracked DLLs in, and #30's merge carried them onto main. Untracked again here (files stay on disk - the game needs them beside the exe; see EN-058). Verified on the merged tree: compile green, 14 s batch run boots to the menu with [music] menu=1 calm=2 combat=3 and [anim] clipset=2 slot0=9 slot1=10 both live.
Third slice of the 2026-07-16 audit.
enemy_adv_dragoon.glbwas byte-identical toenemy_dragoon.glb(same MD5) — upstream level3 has no adv art, itsbody_adv.skinresolves to the default textures. So the game's only ranged heavy looked exactly like the melee heavy until its barb was in flight.KIND_TINTOtable (albedo multiplier — shading, normal maps, hit-flash all intact; the flash lerps from the kind tint so the violet identity survives being shot).Verification: compile green; AITEST batch run with a temporary dataflow probe logged the tint reaching the draw call; the multiply mechanism is the same
drawModeltint parameter the hit-flash and the 88 tinted trees already exercise in production. The exact violet (255,150,235) is one table row to tune after seeing it in a real wave-3 fight.Bonus finding recorded for the audit doc: the diag bar renders the world name as
Arena 02 â€" Outdoor plazaeven though the world JSON contains a clean em dash — Perry/engine file reads decode UTF-8 as Latin-1, so any non-ASCII text asset renders as mojibake. That needs an engine-side fix (new ticket in the audit follow-ups).