Decode color drag-pan cursor
This commit is contained in:
@@ -282,6 +282,20 @@ A windowed SC0000 run with `extracted/` moved aside crossed both voice sites and
|
||||
recording BGM005 plus `E0808.WAV` load/start/preload on channels 0/0/4 with no Godot OGG/WAV decode errors.
|
||||
Channel, loop, interruption, timing, fade, load/start, and release behavior is unchanged.
|
||||
|
||||
### Windows cursor payloads (implemented 2026-07-21)
|
||||
|
||||
Cursor artwork is catalog-backed, not embedded in AGE.EXE. The eight ADV edge cursors at raw ids
|
||||
`0x3318..0x331f` are 326-byte, uncompressed 1-bpp 32x32 Windows CUR payloads. FIELD's drag-pan callback
|
||||
instead loads raw id `0x32ce`, catalog entry `CURSOR09.CUR` at `DATA1.ALF:611394962+766`. Its CUR directory
|
||||
and DIB header specify one 32x32 image, hotspot `(16,14)`, 4 bits per pixel, no compression, and a default
|
||||
16-entry BGRA palette. The 744-byte image consists of the 40-byte BITMAPINFOHEADER, 64-byte palette,
|
||||
512-byte color/XOR bitmap, and 128-byte 1-bpp AND mask. The original runtime decoder accepted only 1-bpp
|
||||
XOR data and therefore rejected this valid color cursor. `CurDecoder` now accepts the installed
|
||||
uncompressed 1-bpp and 4-bpp variants, derives each palette size from the DIB metadata, calculates separate
|
||||
DWORD-aligned XOR and AND strides, expands packed high-nibble-first 4-bpp indices through the BGRA palette,
|
||||
and retains the separate 1-bpp AND transparency mask. The installed-asset regression checks CURSOR09's
|
||||
dimensions, hotspot, transparent background, grayscale, and a non-gray palette pixel.
|
||||
|
||||
### SC0000 movie payload and presentation (2026-07-11)
|
||||
|
||||
The scene-local implementation was first validated at SC0000 `0x236@0x13c8`. Resource `0x33` resolves through the
|
||||
|
||||
@@ -1807,9 +1807,12 @@ Godot supplies virtual-screen pointer coordinates, left/right mouse bits (`0x1`/
|
||||
directional input indices (down/left/up/right = 0/1/2/3; accept/cancel = 4/5). The common index-10 release
|
||||
callback is queued on action release.
|
||||
|
||||
Raw ids `0x3318..0x331f` resolve through SYS4INI to the game's 32x32 monochrome Windows `.CUR` assets. The
|
||||
Raw ids `0x3318..0x331f` resolve through SYS4INI to eight 32x32 monochrome Windows `.CUR` assets. The
|
||||
runtime decodes their DIB XOR/AND masks and hotspots to RGBA textures and installs them through Godot's
|
||||
custom-cursor API. This is asset-backed behavior; no replacement cursor art is authored by the port.
|
||||
custom-cursor API. FIELD separately selects raw id `0x32ce` (`CURSOR09.CUR`) while drag-panning; that asset
|
||||
is an uncompressed 4-bpp, 16-color 32x32 cursor with hotspot `(16,14)`, not an EXE-embedded cursor. The
|
||||
port decoder accepts both installed paletted formats, using their independent DWORD-aligned XOR/color and
|
||||
1-bpp AND-mask strides. No replacement cursor art is authored by the port.
|
||||
|
||||
Every ordinary ADV script gates the handler-A call to HIDEWIN on `G[0x62425]`. No script writes that global,
|
||||
and the complete boot-to-SC0000 VM-write capture does not contain it, so it is native scheduler-owned
|
||||
|
||||
@@ -416,6 +416,13 @@ range-isolation/animation, VM dispatch, full engine tests, and the threaded Godo
|
||||
acceptance confirms that DEBUGMAP now displays the dungeon map correctly; the earlier full-sheet overlay is
|
||||
gone and the field presentation remains operational after the camera-transform correction.
|
||||
|
||||
Drag-panning exposes one bounded presentation follow-up. FIELD op `0x86` at `0x2e4d` selects raw cursor
|
||||
`0x32ce` on pan entry and op `0x87` clears it on exit. That catalog entry is the installed 4-bpp color
|
||||
`CURSOR09.CUR`, whereas the port originally decoded only the eight 1-bpp ADV cursors. This was a
|
||||
decoder-format gap, not missing or EXE-embedded artwork. The CUR decoder now handles both installed 1-bpp
|
||||
and 4-bpp formats with independent XOR/AND strides; archive-backed pixel/hotspot tests pass. Manual
|
||||
acceptance confirms the gripped cursor now displays correctly during drag-panning.
|
||||
|
||||
## Later Phase B breadth
|
||||
|
||||
Once the natural spine and first gameplay loop are trustworthy, broaden in independent tracks:
|
||||
|
||||
Reference in New Issue
Block a user