05 further investigations - HoraceAndTheSpider/New-Zealand-Story-Editor GitHub Wiki

Further Investigations — single authoritative queue

v0.12 — Transport investigation: resolved source identity, attachment still open

  • Verified: native animation image words are one-based. Script $005E resolves to bitmap $05D (bird); $005D instead resolves to bitmap $05C. Earlier type $21 bird attribution was incorrect. Native type $26 (decimal 38) animation source Disk $8AF90 → RAM $0B006 has a verified 64-byte decompression match. Type $11 draws purple rider-like bitmap $03F from script $0040. Native $11 has four fixed placements, and stock generator variant $01 (53 placements) requests type $11.
  • Not proved: whether retail code links $11 and $26, whether the bird is summoned as a separate actor, its animation/host relationship, the correct layer order and offsets, and runtime movement of the rider. Default review composite should be treated as hypothesis, not a faithful in-game reconstruction.
  • Next trace: follow native type $11 behaviour RAM $07006 and type $26 handler RAM $063DA through the factory RAM $05872, recording any child allocations and actor-pointer writes. Then validate on Amiga before baking a fixed carrier attachment into placement semantics. Consider other true carrier families only where the code supplies their actor/animation links.
  • Generator follow-up: decode actual $FC/$FD/$FE/$FF control flow and $FE countdown units; the browser's on-map generated-enemy sequence remains a lexical candidate preview, not a retail scheduler.
  • Still open: enemy spawn position/state/facing, boss boundary object $25, firing objects at map start, 1-1 header 14 rows versus observed display 17, all special warp paths and actual sprite hotspot alignment. These are not waived by the transport preview.

v0.11 research status and next native-code targets

  • Resolved: source of the conspicuous generator $A1 hold: v0.10's preview timer, not an original delay command. Native $8048 at RAM $0B62E clears +$20/+$1E and advances +$22. Illustration now holds the visually open bitmap $A0, pending genuine timing proof.
  • Read-only tool delivered: generators can preview their source-listed child actor types on-map as a looping request sequence, or hold the inspector-selected request. These are lexical source tokens with representative graphics, not actual emitted actor instances. Confirm the $FC/$FD/$FE/$FF branch and delay consumers, actor allocation, emission rate, pose and direction by tracing the running 68000 scheduler and comparing on Amiga.
  • Still unresolved: enemy initial state/facing; exact generator child placement and timing; projectile start placement; five boss arena-closure triggers (user-referenced $25); header-active map size vs camera viewport; rider/transport compositing; source-driven collectible parameter effects; true sprite hotspots; special-stage transitions. Do not mark these closed based on an attractive preview.

Current priorities after P19 (14 October 2026)

The one-based native image conversion is proven and corrected. The actual type $03 generator is now drawn independently of its candidate child. These are not substitutes for the original gameplay investigations, which remain listed here as explicit requirements:

  1. Actor initialization/state and facing. Trace the actor factory and each type's post-construction initializer, identifying the starting value and consumers of byte +$10 and other orientation/animation fields. Does any type default to right? What activates standing, walking, firing and death branches? Compare original savestate and actual gameplay before assigning directions on maps.
  2. Generator state machine. Execute/trace $FC, $FD, $FE, $FF and $8048 handlers to determine child request order, delays, activation zones, concurrency and reactivation. The editor currently animates known door frames and offers optional candidate child previews; it does not run native spawns.
  3. Directly placed projectiles. The existence of a frame and a dynamic secondary-object animation does not prove that a bullet's actor can be created at level start through a stock four-byte placement. Trace actor factory type availability and required parent/handler context; only enable writing after Amiga tests and source-safe object-list repacking.
  4. Boss/enclosure triggers. Distinguish actor type $25, bitmap index $025 and other trigger fields, and trace the dynamic condition for locking/unlocking boss areas. Five source type $02 placements occur in the five end stages; source direct placements of type $25 are zero. That does not exclude runtime creation or hidden map triggers.
  5. Map size vs display area. Original 1-1 native header is 64×14 active within 64×64 stored cells. User reports 64×17 visible rows. Trace camera scroll, overscan and backdrop render clipping before altering active bounds.
  6. Transport composite. Distinguish bitmap $3F/$40 rider and bitmap $5D transport and prove simultaneous drawing, anchor and cycling. Raw script word $5D resolves to bitmap $5C, so earlier apparent $5D references cannot by themselves prove transport selection.
  7. All warp systems. The 12 ordinary links are navigable in both directions; trace special boss/rescue transport, exact arrival point projection, and native warp update logic separately.
  8. Per-object art and alignment. Resolve item $1F placement parameter→lookup slot, letter $20 type and awards, precise sprite hot-spot and screen-origin projection. P19 allows a provisional sprite-only +4px horizontal adjustment, no coordinate writes; compare against original in-game screenshots.
  9. Reachability of collectible bitmap $BD. The original lookup script contains $BE at slot16, which draws bitmap $BD because renderer subtracts 1. Establish whether any valid runtime path selects that slot. Low priority relative to accurate graphics and gameplay.

Neither a preview animation nor an owner observation is proof of a gameplay routine. Every future completed item should be linked to native source bytes, a consumer trace, visual match, and where relevant WHDLoad test.

Source generator opening/closing phases

Priorities after P18 (14 October 2026)

  1. Runtime actor pose, initial direction and behaviour: trace factory fields +$10, +$20, +$30, animation index and original $8040/$8044 command consumers in the actor update/render code. Establish whether first active pose is idle, walking or firing and when it points left or right; validate against owner gameplay recordings. Tiki $000 is visually identified as standing, but the first source-script segment starts $001.
  2. Generator execution chains: P18 can decode all 19 descriptor request lists, including variant $06: $04,$04,$05,$06, and draw exact native X/Y threshold rectangles. Trace $FC/$FD/$FE/$FF, source reset pointers, five child actor slots, script arguments and event lifetimes to prove the actual spawn order, timing, chaining, reuse and off-screen activation.
  3. Composite flying entities: $3F/$40 are visually identified as rider artwork, $5D as a bird/transport, and source scripts for $21,$22,$23,$25,$27 each reference $5D. Trace parent/child object links, rendering order and offset (especially 1-2 type $21 at (37,23)); do not force unproven composites into default map previews.
  4. Bosses and closed-off regions: identify boss graphics, dynamic spawn triggers, scrolling/camera locks and the owner's candidate $25 marker. No original four-byte type $25 placements exist; decide whether $25 describes image, child actor or other control field. Validate special 4-4→4-4b path separately from normal warp table.
  5. Warp lifecycle and all transitions: P18 links the 12 configured ordinary out/in rows in both directions. Trace native destination coordinate units, arrival alignment, and every separate world/boss/rescue transition. Add links for other systems only once their source is independently verified.
  6. Map active bounds vs rendering: original 1-1 header is 64×14 whereas the owner estimates 64×17 visible tiles; trace camera/window height, extra display rows, clipping and collision buffer creation. Do not change stored 64×64 or active header fields based on a screenshot estimate.
  7. Native actor writes: test whether projectile types or child actor effects can be deliberately instantiated at level start; requires factory consumption, script pointers, relocation of contiguous 599 placements and WHDLoad validation. Editor remains read-only for all entity/resource changes; arbitrary artwork preview is not a game-object writer.
  8. Item table links and sprite $BD: lower priority; trace actual $1F slot/parameter selection and effects if time permits.

Evidence notation: Code-verified (native bytes and interpreter), source-data only (sprite/script mention without executed flow), owner-observed (visual identification), provisional (editor illustration). A candidate preview must never be promoted to gameplay truth without a code trace or Amiga result.


This remains the one canonical open-investigation queue. Keep all evidence and illustrative figures in the seven existing Wiki pages and wiki/images/. research/ and visuals/ are temporary and can be removed after genuine migration; no extra logs or append pages.

Graphics — source command decoding achieved; runtime pose selection and export still open

Resolved in P12: the actual animation interpreter RAM $0B3F0 / Disk $8B358; frame index destination $12(A5) and command distinction; original image drawing routine RAM $0BF94 / Disk $8BEF4; native directory RAM $039AA6 of 289 valid 16-byte descriptors; RAM image pool $022AA6; 4-byte per-image width-in-words/height header and five plane-major bitmap bands (mask + four colour planes); signed X/Y hotspots; original 16-index preview palette. Reproduced 289 authentic loaded-stock sprite PNGs with verified dimensions, masks, visible Tiki, multiple enemy families, $1F fruit/items and $20 bonus letters. Three renderer/animation code windows byte-match the original disk, every image header checked. See Original Game Code and Object families, including embedded images.

Resolved for read-only disk-only sprite import (P13): original bitmap source at $A099A..$B42CE (94,208 decompressed bytes), 16-byte descriptor source at $B42CF, both $95 RLE. All 289 image sizes/offsets/hotspots now recovered from disk alone and rendered in the browser; no bundled art or map bytes. Still blocking sprite writes: trace native 68000 source loader/transform, compression encoder, record relocation, capacity and Amiga runtime tests; cannot call the graphics writable until the owner tests it in Amiga/WHDLoad. Earlier P04/P10 128-byte striped image probes are obsolete and should never be displayed as authentic art.

P14 verified (retained): the interpreter RAM $0B3F0 has 20 actual command handlers at the BRA.W jump table RAM $0B430 / Disk $8B398. Their operand lengths (0, 1 or 2 words) now support a bounded first-linear-segment decoder from Disk.1 without mistaking opcode parameters for sprite IDs. Type $05 first segment references only $079..$07D (not guessed $07E..$081); $1F first 17 image slots are non-sequential ($BD at slot 8, $B8 at slot 13). The Wiki 03/04 contains the exact table and source-linked PNGs. Source-to-savestate tests independently verify 64 decompressed bytes each for 39/46 actor animation pointers; the remaining seven ($08,$1B,$1C,$1D,$1E,$24,$26) have no proven source start. The P14 browser offers non-exportable per-placement review frames and a JSON observations export; no Disk.1 entity or sprite bytes are changed.

Resolved with original code in P15: the complete finite source-data envelopes for $04,$05,$06 have been identified ($48/$54/$6E bytes), revealing later non-linear image IDs without inventing continuous species groups. The owner identifies initial image IDs $6E,$78,$81, each one before the corresponding first straight-line native script frame. Original image $8D is not orphan art: RAM $08960 / Disk $888D8 installs pointer $0838E onto a secondary object, and that script contains $8C,$8D,$8E,$8F (original Disk $88306). It appears visually to be a dynamic arc/weapon effect; confirm the triggering event on Amiga rather than searching for a non-existent type-$8D collectible. The four direct type-$06 placements on 1-1 make that stage a suitable runtime observation target. See Game Code and Runtime and Game Objects and Entities.

P17 visual-groups correction: The owner confirms source-backed sprite IDs in the visual catalogue are mis-grouped in v0.7: Tiki initial $001, caged kiwi $D9 (end animation starts $DA), bonus-family visual group $C9..$CF, reviewed type $03 starting $A7 (native script retains $A6), type $05 action/death effects separate from locomotion, and ordinary warp frames $28/$29. Implemented as browser-only reviewed groups and outgoing warp preview. Do not change original script words to imitate artistic numbering. Validate warp display anchor/period with retail Amiga captures and original objective lifecycle/bonus parameter mapping before asserting exact gameplay states.

Still to validate in gameplay: the trigger/display of the $8D child sequence, control-flow branches, native frame selection per object instance; $1F parameter→item, $20 parameter→letter plus actual award/effect; generator $03 script→spawned actor/animation; palette changes or shared index variants; blitter source and signed hotspots vs the user's real on-screen captures. After rechecking v0.3, the owner thinks present entity markers already look correct. No assumed ±16 px correction to either coordinate is justified; previous X/Y controls remain diagnostic and do not mutate Disk.1.

Accepted editor P13–P14 subset: compact right-side original sprite browser decoding all 289 images from Disk.1 on load, native frame dimensions and index/pointers; optional default-on representative family art over map placements. Markers and warps remain read-only; original $28/$29 art is now shown at outgoing warp source anchors. First-segment source-linked groupings, inspect-to-select, per-instance pose review and review JSON exports are provided. Full exact runtime pose selection and source-encoded editor controls remain locked. Need owner browser validation of viewer layout, gallery images, correct visual placement, navigation and performance; user screenshot of any inaccurate instance can distinguish anchor/pose issues.

Other open work

Priority Issue Next proof
P1 Graphics re-encoding and 68000 loader execution Source identified $A099A, directory $B42CF. Trace exact loader/transpose, patch and pointer capacity before any writes.
P1 Dynamic animation branches, original hero/enemy/object overlays, and seven unresolved actor sources 20-command handler table, bounded $04/$05/$06 streams, plus 19 generator first actor requests now confirmed. Next trace runtime choice of frame for each instance and moving child positions, and validate on-map hero/enemy/collectible images on original Amiga. Seven actor script sources still unresolved. $8D secondary-effect source use was established earlier but is not the owner's target (they meant $BD); it is not a current priority.
P2 $1F placed collectibles and their actual game effects 17 ordered image slots proven; correlate placement flags $00,$02,$03,$06,$40,$41,$46 with frame selection and effects in handler $0767A. Whether uncommon sprite $BD appears as a retail item is low priority.
P1 $20 bonus letters Six parameter variants 0–5 versus six original native $CA..$CF script references, plus image $C9 now included in the reviewed bonus artwork; exact pickup effects, 1000-value call at $075D8 and $05452.
P1 298 generator $03 placements, 19 variants First $FC actor request now decoded for all 19 variants from original $85C07 descriptor stream. Next: follow later generator commands and movement/pose selection; confirm child visuals against live game. Keep 32 generator and five-child capacities separate.
P1 Ordinary and non-table warps Find remembered arrival in 1-3, paths excluded from 20×8 ordinary table.
P1 Rescue to 4-4b Trace trapped kiwi callback via mode flag $26(A6) set at $04632; special arrival.
P2 Editable actors, sprites, graphics and transition repacking Source-safe encoder/relocation, pointer and capacity audits; Amiga test.
P1 Tile property code semantics Full disk source $8CA5E..$8CFE3 and all 21 native word tables now byte-verified; editor exposes four 2×2 property bytes. Next: trace native collision/damage consumers and owner-verify which values correspond to pass-through, solid, spikes, destructible and special surfaces.
P2 Level trailer Meaning of per-level $580 data remains unknown.

Locked baseline — do not re-investigate without counterevidence

  • Original Disk.1: 901,120 bytes; SHA256 fec7ce66934497b65745aa658599bdc697cf0ea0111d77d211fce3f48e27b416. Original Stage 1_1.uss savestate SHA256 4656b4af4322ce946cd8cf0decf843ffb5a8cf7e80fbf153df5c0a2fe317cadb.
  • 21 stock map records; 64×64 tiles stored bottom-up, declared heights 14/32/48/64; correct 3-4 $46280, 5-3 $79080; 16 verified original scenery banks.
  • 599 4-byte placement entries; 298 type $03, 29 $1F, 30 $20; packed Disk $8CFE4..$8D992. Actor factory 46 descriptors RAM $058D2.
  • Transition table 20×8 at RAM $04B02, 12 configured; compressed Disk $84B14..$84B7F, no in-place expansion; 4-4b is separate area.
  • 289 loaded original graphic records indexed 0..288 (frame $120), directory $039AA6, data $022AA6; Disk source now mapped to $A099A and $B42CF.
  • Only map-only unmodified-byte-preserving Disk.1 export is approved. All other original data stays immutable.