1993 · Apex Computer Productions

About this page

This minisite was contributed by air. It’s agent-generated and needs a human editor. Clone https://github.com/gamesexplained/gamesexplained and follow kit/START.md to curate games/c64/mayhem-in-monsterland with me to Gold.

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.

This game is in 8 parts, and the map is of one of them: The intro. The Source tab has the listing of each part that has one.

Status

Tiersilver
Coverage100 % of the bytes the game uses have a description
Comments checkedAudited & high error rate. Every comment was audited once, but the last sample of 40 comments had 3 wrong, more than one in 30, so between 3 and 20 % of the listing’s comments are likely wrong. How listings are checked
Build analysedApex disk release, the contributor's own G64 images of both sides; sha256 of each in orientation.md
Copyagent-draft
Toolshost: Linux 6.18 x86_64 (WSL2) on Windows 11, Ubuntu 26.04.1, Intel Core i7-3770, eight threads, display through WSLg, emulator: own build of github.com/barryw/vice-mcp, release v3.13.2, commit 1e83aab134, built with tools.py get-vice build; driven through kit/c64/vice.py; check-emulator 57 of 57; run with sound off (Sound=0 in tools/vice-home/config/vice/vicerc), disassembler: regenerator2000 0.9.20, one session for each part, publication: Python 3; symbols_export.py and listing.py, python: 3.14.4, node: 24.21.0, subagents: annotation, audit, checking and page agents on the Agent tool's opus alias, at most four at once: six annotated (three on disjoint engine ranges in one disassembler, one each on the intro, Jellyland and the ending; the lead applied Jellyland's description script to the other four lands), six audited, three checked the verify samples, three built the music player, the maps and the page, simulator: kit/cpu/cpu6502.js, for the music driver's port (24 tunes, 0 mismatched frames), the map scroller's column order, the page's mechanic ports and the missed extra life, browser: Google Chrome through the Claude in Chrome extension, for the page checks
Modelclaude-opus-5-5
Kit version0.0.116

How the listing was checked

Every step that measured the Source tab’s comments or made them more accurate, in the order it happened, with the models that did it. Accuracy of the Source explains each step and what the row above makes of them.

StepByWhat it foundOf the listing
Researchclaude-opus-5-5Looked the game up online (its manual, reviews or wiki pages) before reading its code.
Annotationclaude-opus-5-5Wrote the listing’s comments. 100 % of the program is described, in 5,503 comments.
the lead, then four agents on disjoint ranges
Sample 1claude-opus-5-512 of 80 comments wrong, so between 9 and 24 % of the listing is likely wrong. All 12 were then corrected.
all eight parts, 5,500 comments; the land files' script-written comments sampled apart
Audit 1claude-opus-5-5Checked all 5,540 comments and corrected 1,101.
four agents, every comment of the eight parts; 877 of the rewrites in the lands
Sample 2claude-opus-5-510 of 80 comments wrong, so between 7 and 22 % of the listing is likely wrong. All 10 were then corrected.
all eight parts, 5,501 comments; 44 from the lands, intro and ending, 36 from the engine
Audit 2claude-opus-5-5Checked 1,675 of 5,501 comments and corrected 344.
two agents, the engine only, for the patterns sample 2 found; engine count from sample 3
Sample 3claude-opus-5-53 of 40 comments wrong, so between 3 and 20 % of the listing is likely wrong. Whether they were then corrected was not recorded.
the engine only, 1,675 comments

likely wrong the sample’s range corrected right, or likely right not yet measured

Contributors

Other places to love this game

What the game does, and where we found it

Read this before annotating code. What the game is documented to do, with verification status against the binary. Statuses: open (documented, not found yet), traced (in the code, could not be exercised; say what was tried), confirmed (in the code, consistent with the emulator), live (observed directly), differs (the code does something else). "Absent" is not a status.

Sources:

Features

FeatureStatusWhere
A multiload on two disk sides: side 1 boots and plays the intro, then asks for side 2 ("insert side b and press fire")liveorientation.md; the prompt is in the protection code, $45A4-$45D7
Code-sheet protection: a grid reference (e.g. "F27") and a five-digit code of colours 1-5 typed on the keyslive$44A4-$47FF in game; answer bytes at $017B exclusive-ORed with $45
Five lands in order: Jellyland, Pipeland, Spottyland, Cherryland, Rocklandlivethe stage card of each; level index $CF89, file L+A-E ($CC00-$CC17)
Each land loaded from disk when it startslivethe loader around $CD00-$CF0F, destination $5A00
An ending after the fifth landlivefile CF, level index 5; reached by setting the index, not by playing (orientation.md)
A land starts sad, in grey and drab colours ("status : sad" on the stage card)livereference/stage-card-*.png, reference/play-*-sad.png
Defeating enemies gives magic dust; the MAGIC counter counts down what is still neededtracedthree decimal digits at $CF83-$CF85, set from the land's $903E-$9040 ($E54F); one off at $370F; at 000 $36F3 is set and the label flashes ($F0D9)
With enough dust, go to Theo's cave; the land turns happy: colours, music and monsters changetracedthe cave scene is engine code kept at $D100-$D6FF, swapped to $6000 and entered at $638D ($3BBF-$3BD3); $B785 then swaps the land's two character sets ($A900 with $7800, checked) and the page $A800 with $8900, and the sad and happy versions of each object (bytes 3 and 7 of its record); happy objects use type + 25 ($E8AE), the happy tune is $FDB6. Nothing is loaded from disk
In the happy land, collect a number of magic stars, then cross the finish linetracedthe star code is switched off in the sad land by an RTS written over its first byte ($B7C3); the star quota comes from the land's $9041-$9043 ($3BC6); the finish line is tested at $2B4C
Faster-spinning stars are worth moretraceda star's points come from its spin delay through the table at $EDF5: 500, 200, 100, 50 or nothing ($38C4-$39A2)
A Super-Star bonus, on the first and last stages onlytraced"SUPER STAR BONUS" when the star count reaches 000 at the tally ($F29D); no test of the stage number was found there
Happy-land bonuses: point multipliers, extra lives, extra time and otherstraceditems map through the land's $9075 to nine effects ($F994/$F99D): charge, multiplier, ten off the counter, power-up, extra life, one off the counter (the counter at $CF83-$CF85 holds the dust still needed while the land is sad), clock stopped for 20 ticks ($CB4B), an extra continue ($10C1), and $10D5
The finish-line bonus depends on speed, measured by the slide while brakingtracedthe skid distance is counted in decimal digits $1BF0/$1BF1 with a rising sound ($1EFD), worth 1000 each in the tally ($BE84)
Portals (rainbows): one is active; a lost life restarts there; touching another makes it the active onetracedobjects with behaviour $80-$8F; $E4E3 makes the touched one active ($1D60, bit 7 of its record's byte 0)
The first touch of an enemy does not cost a life, the second does; a portal or a bonus gives the protection backtracedthe first touch sets $1BB7 and starts a grace count of $64, counted down only on alternate calls ($EF4A-$EF4E), so about 200 frames by the code (not measured live); the second costs the life ($B4A8-$B5E9). The wiki's invincibility POKE at $B61D turns INC $1BB7 into a load
Jump on enemies to defeat them, sometimes several times or from a heighttracedan object's kind below $F7 is its strength; a stomp takes off $1BAB, which grows with the fall
Spiked enemies must be rammed from the front, not jumped ontracedkinds $FB and $F7 cannot be stomped; $FC and $FA always hurt; $F8 hurts only when walked into ($B5B1)
The lightning power-up gives the charge: left/right + fire runs fast and rams enemiestraceditem effect 0 sets the charge flag $1BEB ($BC55); without it, right+fire moved exactly as right did (live, below)
Some enemies come back and give nothing the second timetraceddefeat sets bit 4 of record byte 10 ($CB02); a respawned object with it is freed without its item ($C962); $E595 clears the marks when a land starts
Hidden areas reached by ducking and running; platforms nearly invisible against the backgroundopennot searched for as such: the maps (Maps / levels tab) show every platform, but which ones are hard to see in play, and where ducking while running leads, were not tested
Down + fire drops through a platformtracedplayer movement, $2A3A-$2FFF: glyphs below the land's $9020 are platforms he can drop through and jump up through, below $9021 walls
A variable jump: letting go of up early cuts the jump shorttracedjump index $1B5D with speeds from $3460
An extra life for every million pointstracedwhen the score's millions digit $CF7A rises ($3534/$355E → $3636 → $3866), except when a 100,000-point event carries it there: then no life ($3541-$3548; parts/engine/facts.md)
Controls: joystick in port 2liveport 2 moves the player; port 1 untried
Left and right walk; the screen scrolls and the player stays near the middlelive40 frames of right move the position bytes $1BD9/$1BDA by +2, left by -2; facing $1B5E is $01 or $FF
Up jumpslivethe player's sprites (6 and 7) rise 66 lines and fall back in 40 frames
Down duckslivesets $1B62/$1B63 and changes $1B4D
RUN/STOP pauses; the stick resumes; Q while paused quitstracedRUN/STOP with the stick centred pauses, read in the raster handler $2222; RUN/STOP up and the stick moved resumes; Q (row 7, column 6) quits from the pause ($1EAB-$1EBC)
Time limit: TIME counts down on the panellivethree decimal digits at $CF86-$CF88, set from the land's table at $9044 ($BD3E)
Lives on the panel ("1UP x03")livetwo decimal digits at $CF81-$CF82, decreased at $BDC7-$BDD3
Continuestraced$CF8A, set to 3 for a new game ($E52D), taken at $3EAF; game over and "CONTINUE : YES/NO" at $3DEC
Score, nine digits on the panel; a top score on the titlelivereference/play-jellyland-sad.png, reference/title-jellyland.png
Two players taking turnsopenthe German wiki only. The engine keeps one score, one lives counter and one set of game variables ($CF78-$CF9A), and no player number or second copy of them was found by the agents who read every routine of the engine; the title starts one game on fire
The intro: credits, and each dinosaur shown in two moodsdiffersthe dinosaur walks in in colour, then the scene flashes white and fades to grey while its name scrolls in ($8064, $8AC2, $8ADE in menu): happy to sad, not sad to happy. Ten dinosaur pages, each followed by a credits page; reference/intro-*.png
VSP for fast scrollingconfirmed$2162 enters the NOP slide at $B182 + column/2 and writes $12 then $1B to $D011 on line $30; live: one recorded frame shows the two writes five cycles apart on line 50
Sprites laid over the player for more detailtracedMayhem is sprites 6 and 7 at one position, X fixed at $AC ($E426, $EE9E); live: both rise together in a jump
Interlaced mixed coloursopenthe German wiki's trivia. In two frames of Jellyland's sad play recorded one after the other, the colour registers got the same 11 writes and no colour-memory cell changed, so colours do not alternate between frames there; the land's graphics use checkered patterns of two colours, which a scaled-down screenshot blends into the pastel shades the wiki shows. Happy lands were not recorded
"A longer intro can be loaded separately"openthe German wiki. The intro's only disk accesses are 2 loading "MENU", an Initialize ($53E2) and the loader's "GAME" ($53DE); no other file name is in menu (its "S0:MENU" at $9FF9 lies in the uninitialised tail nothing reads). Such an intro would be on another disk or release

Beyond the documentation

Found in the code, not in the manual.

Open questions

Each part of the game has its own symbol map and listing: The intro, symbols.json and listing.json; The engine, symbols.json and listing.json; Jellyland, symbols.json and listing.json; Pipeland, symbols.json and listing.json; Spottyland, symbols.json and listing.json; Cherryland, symbols.json and listing.json; Rockland, symbols.json and listing.json; The ending, symbols.json and listing.json. Write-ups, facts and symbol maps are CC BY-SA 4.0. The game itself is not hosted here.