1990 · System 3

About this page

This minisite awaits a maintainer’s check. A model this site has not proven yet worked on it (one whose name was not recorded), so its claims have not been tested against the game (how the check works). It is not complete either: 1 of its 7 parts is analysed, and 99.6 % of that is explained. Clone https://github.com/gamesexplained/gamesexplained and follow kit/START.md to continue games/c64/last-ninja-remix to Silver.

Footprint

Every byte of the C64's 64 KB, one pixel each, 512 to a row. Lit pixels are what this game is: its code, graphics, level data, sound, text, tables and variables, exactly where they sit in memory. Dim areas are screen and working memory; dark is unused.

WhatBytesOf 64 KB
Program52,90580.7 %
Code15,61423.8 %
Graphics12,31718.8 %
Level data1180.2 %
Sound1,4972.3 %
Text980.1 %
Tables22,72334.7 %
Variables5380.8 %
Screen, bitmap, colour, stack, I/O12,42519.0 %
Unused2060.3 %

This game is in 7 parts, and the map is of one of them: Central Park and the engine. The Source tab has the listing of each part that has one.

Status

Tierbronze
CoverageIn the 1 of 7 parts analysed, 99.6 % of the bytes the game uses have a description
Build analysedI-TAL/TSM release; Central Park in active play, one declared level
Copyagent-draft
Toolshost: Linux x86_64, disassembler: regenerator2000 0.9.20, publication: Python 3; symbols_export.py and listing.py, browser: Firefox 157.0 (installed); WebDriver BiDi, emulator: VICE MCP 3.13.1
Modelgpt-6.1-sol
Kit version0.0.46

Contributors

Other places to love this game

What the game does, and where we found it

Sources: game documentation and the contributor’s annotated listing, consulted 30 September 2026. The documentation supplies the feature inventory; the annotations supply leads for verification.

FeatureStatusEvidence or open work
Isometric Central Park explorationopen$8A52 recursive scenery renderer traced; all 18 collision outputs checked, complete scenery presentation open
Movement and combatpartly verifiedLive $B54A damage and $B767 collision boundary tests; full combat/control outcomes remain open
Objects and puzzlesopen15 records and consumers traced; object names and puzzle routes open
Animation and musicpartly verified32 main sequences plus 11 late streams parsed; twelve native first-command checks and changing SID state; all event/track outcomes remain open
Later levelsopenReplacement occupants are outside this Central Park listing

The imported annotations remain leads until traced or exercised in this run. Central Park’s boot and initialized gameplay are observed live.

How the analysed state was reached

Disk and power-on route

The contributor’s I-TAL disks were recovered from repository history into private work/disk-047.d64 and work/disk-048.d64. This capture uses disk 047. Its relevant directory entries are L.NINJA2 RMX/TSM, N.REMIX DEMO/I+T, NINJA 3+PLAY/I+T, and 01.CENTRAL PARK!.

On a hard-reset PAL C64, resume and autostart disk 047’s first file. Wait for the TSM intro. Hold control-port-1 fire for 60 frames and release; wait for I+T (600 frames sufficed in this run). Hold Space for 60 frames and release; wait for the trainer (600 frames). Both cheat options show NO. Press F7 for 60 frames and release. Wait for the Central Park presentation. Press Space for 60 frames and release, then wait for the level credits after the disk load. Warp may be enabled only for this wait; switch it off before gameplay or timing measurements. At the credits, port 2 fire, held 60 frames, starts the room; port 1 fire does not. Release and advance 120 frames. Confirm the isometric park and ninja, then save work/central-game.vsf without ROMs, using pause() before the save.

VICE MCP 3.13.1 passed 55/57 health checks on 30 September 2026: pause-at-instruction and unpaced-calls failed. Use the kit pause workaround and paced calls. At the contributor’s request it runs on a virtual display with dummy audio, preserving SID emulation without playing samples. The private vicerc sets Sound=1, SoundDeviceName="dummy".

Chosen image and comparison

The supplied Ghidra analysis was a composition, not a stopped machine. In active Central Park, 288 of its 15,889 code bytes differ: 286 in $0E00–$0F2B, one at $1F5B, one at $8A0F. 4,247 of 45,809 data bytes also differ. The game really writes sprite output into $0C00–$0FFF; a live store checkpoint traced the write to $BF02. The former startup code at $0E00 is overwritten there. Its stale names/comments and code classification are removed. Other imported annotations remain verification leads.

The listing uses the active central-game.vsf, whose bytes and CPU state existed together. Runtime screen $0400, bitmap $2000–$3F3F, low state and sprite output are excluded from coverage. The packed sprite source pool under I/O is retained as game data. Processor port $35, DDR $2F; vectors $0314=$1E06, $0318=$1582; VIC bank $0000.

Scope and rebuilding

The game is in seven parts (kit/scripts/parts.py), one for each level as it is loaded: Central Park, The Street, Sewers, Basement, Office, Mansion and Final Battle. One is analysed, parts/central-park, and its image holds the engine as well as the level: the two have not been told apart. The other six have a folder and nothing in it but their name; none has been loaded in this analysis, so this file gives no route to them. No composed binary image is published.

Load the committed symbol map into regenerator2000 on your own gameplay snapshot with symbols_import.py games/c64/last-ninja-remix/parts/central-park <snapshot>, export with symbols_export.py, and build with listing.py games/c64/last-ninja-remix/parts/central-park <snapshot>, the snapshot being the one saved above as central-game.vsf. Snapshots, disk images, projects and the original text export stay in work/. game.json.imported records the original export hash and unknown models.

Each part of the game has its own symbol map and listing: Central Park and the engine, symbols.json and listing.json. Write-ups, facts and symbol maps are CC BY-SA 4.0. The game itself is not hosted here.