Implement numeric HUD rendering
This commit is contained in:
@@ -2488,16 +2488,20 @@ the port:
|
||||
them for the field HUD's turn/control/mana/level/HP/SP/FS values.
|
||||
|
||||
This path creates ordinary retained graphics objects, so the existing atlas decode and compositor are
|
||||
already the correct backend. The missing engine model is the 11 style records plus the two VM dispatches;
|
||||
it is not an immediate `GodotAdvHost.DrawTexture` raster operation.
|
||||
the correct backend; it is not an immediate `GodotAdvHost.DrawTexture` raster operation. The port now
|
||||
models all 11 EngineCtx style records in `GfxState` and implements both dispatches. Each `0x23b` call erases
|
||||
its full destination-handle capacity and then uses the ordinary
|
||||
`BindDraw` path for every displayed digit, preserving surface replacement, z-order, and compositor effects.
|
||||
|
||||
The absent unit and weapon names are a separate layout-compute gap. `DRAWCHP.BIN` does populate both
|
||||
strings and calls `draw-string` at `0x9c6`/`0x9f5`, but first centers each one with opcode `0x1a6`.
|
||||
`op_0x1a6_half_byte_strlen@0x427020` resolves the NUL-terminated engine byte string and writes
|
||||
`strlen(bytes) >> 1`. The script multiplies that result by 21 and subtracts it from x=257 on a 263-pixel
|
||||
scratch surface. With the opcode skipped, x remains 257 and Godot correctly clips nearly all of the text.
|
||||
An implementation must preserve the original encoded byte count (or reproduce it with CP932 encoding),
|
||||
not use the .NET UTF-16 character count.
|
||||
The port reproduces the encoded byte count rather than using the .NET UTF-16 character count. The VM's
|
||||
native-string code page is configurable for other container frontends and defaults to SYS4's CP932; the
|
||||
calculation also stops at an embedded NUL before shifting. Focused tests cover CP932 mixed-width strings,
|
||||
all three numeric layout flags, zero padding, retained-object replacement, and invalid/unregistered styles.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -441,15 +441,17 @@ bounded opcode gaps rather than missing game state:
|
||||
- `0x13a` registers one of 11 `(surface, atlas x/y, digit width/height)` styles, and `0x23b` expands a
|
||||
decimal value into retained per-digit objects with zero-pad/center/left/right layout flags. `DRAWCHP.BIN`
|
||||
contains eight style registrations and 22 numeric draws covering the visible turn/control/mana/level and
|
||||
HP/SP/FS fields. Both opcodes are currently unimplemented, which precisely explains the blank values.
|
||||
HP/SP/FS fields. Skipping both opcodes precisely explained the blank values.
|
||||
- `DRAWCHP.BIN` already reads and submits the unit and weapon strings to `0x204`, but its two preceding
|
||||
`0x1a6` centering calls are unimplemented. Native `0x1a6` returns `strlen(CP932_bytes) >> 1`; skipping it
|
||||
`0x1a6` centering calls were unimplemented. Native `0x1a6` returns `strlen(CP932_bytes) >> 1`; skipping it
|
||||
places the strings at x=257 on a 263-pixel scratch surface, so the existing compositor clips them.
|
||||
|
||||
The exact native contracts and addresses live in `docs/engine-re.md`; opcode-source metadata is in
|
||||
`vm-map/opcodes.toml`. No runtime implementation was made in this investigation. The next field slice is
|
||||
therefore to implement the shared 11-style numeric renderer and the encoded-byte-length calculation, then
|
||||
recheck the same `DEBUGMAP` HUD before pursuing any state seeding.
|
||||
`vm-map/opcodes.toml`. The shared implementation is now landed in the VM/retained-graphics model: the style
|
||||
registry holds the 11 EngineCtx records, decimal glyphs become ordinary retained objects, and `0x1a6`
|
||||
measures the configured native encoding (CP932 for SYS4). Focused coverage plus the full 278-test engine
|
||||
suite, zero-warning Godot build, and threaded frontend selftest pass. The next field action is the manual
|
||||
visual recheck of the same `DEBUGMAP` HUD before pursuing any state seeding.
|
||||
|
||||
## Later Phase B breadth
|
||||
|
||||
|
||||
Reference in New Issue
Block a user