1986 · U.S. Gold

About this page

This minisite was contributed by air, chunkypixel. It’s agent-generated and needs a human editor. Clone https://github.com/gamesexplained/gamesexplained and follow kit/START.md to curate games/c64/gauntlet 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.

Status

Tiersilver
Coverage100 % of the bytes the game uses have a description
Comments checkedNot audited. No audit has checked every comment, and the last sample of 60 comments had 8 wrong, so between 7 and 24 % of the listing’s comments are likely wrong. How listings are checked
Build analysed
Copyagent-draft
Toolsemulator: release v3.13.2, v3.13.2-linux-x86_64-gui.zip (VICE x64sc, PAL), disassembler: regenerator2000 0.9.20, host: Linux x86_64, Ubuntu 24.04.5 cloud container, no display, python: 3, node: 22
Modelclaude-opus-5-5
Kit version0.0.154

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.
Sample 1claude-opus-5-58 of 60 comments wrong, so between 7 and 24 % of the listing is likely wrong. All 8 were then corrected.
the comments that shared their beliefs corrected with them
Audit 1claude-opus-5-5Checked 29 of 1,064 comments and corrected 2.
partial, by the kinds of claim the sample found wrong: 13 cited callers and jumps, and 16 comments saying nothing reads or reaches something
Audit 2claude-opus-5-5Checked 43 of 1,064 comments and corrected 9.
partial: every comment on the monster update and the maze fonts, read against the code and the emulator while How it works was written
Annotationclaude-opus-5-5[1m]Wrote the listing’s comments. 100 % of the program is described, in 1,073 comments.
eight stretches of variables and unreached code past their labels described, the idle timer's wrong index found, and the listing rebuilt

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
One or two players; the glove on the selection screen picks the count, then each player's heroliveselection program $3390-$3420 (not in the play image); orientation.md
Four heroes: Thor the Warrior, Thyra the Valkyrie, Questor the Elf, Merlin the Wizardliveselection screen; str_hero_names $AED8
Each hero differs in armour, shot power, hand-to-hand and magicdiffersshot power and magic are per hero (power_tables, magic_vs_monsters); armour does nothing (damage_taken is never read, live) and hand-to-hand is $40 a blow for every hero (fight_damage, live); only fight power against generators differs (fight_power)
A one-player game gets a second, computer-chosen herodifferslive: in a one-player game player two's panel shows "Press fire" and waits for a second player (reference/play-level1.png); the play program reads both joysticks and has no computer player (players_join)
A second player can join at any time by pressing their joystick's fire buttonconfirmedplayers_join, join_beside: the new player appears beside the other
Player one: joystick 1 and SPACE for magic; player two: joystick 2 and the function keyslivecontrols screen; magic_keys reads SPACE for player one and any of F1, F3, F5, F7 for player two
Health starts at 2000 and counts down all the timelivehealth_tick: 1 every 64 frames, live 23 in 1,501 frames
Hold fire to shoot, release to move; shots travel in eight directions, diagonals includedconfirmedscroll_decide stops a player while fire is held; shot_fire takes the stick's facing
Unlimited shotsconfirmedshot_fire fires whenever the player's slot is free; one shot in flight per player
Moving into a monster fights it hand to hand; hand-to-hand scores more than shootinglivefight_back: 25 points a blow against 5 a shot (shot_score); live, a level-one grunt died from one blow
Monster generators make one kind of monster each, at three strengths; they can be shot, pounded, or destroyed with magicconfirmedgenerators $20-$2E, three levels of five kinds; generators_run, gen_thresholds, fight_generator, magic_generator
Monsters come in three levels of toughness: a level one takes one hit, a level three takes threelivethe kind byte's level bits are its strength, $40 off a blow; live for level one
Ghosts hit once and vanishconfirmedmonster_attack, ghost_touch: 10, 20 or 30 health by level
Grunts close in and clubconfirmedmonster_hits: 5, 8 or 10 health by level, live 10 for a level-three grunt
Demons shoot fireballs and biteconfirmedfireballs take 10 health (shot_hits_player); demons fire once in four moves
Lobbers throw rocks over walls and run awayconfirmedrock_path, rock_fly (3 health); monster_aim turns a lobber away nearer than $18
Sorcerers flicker in and out of sight and cannot be hit while invisibleconfirmedbit 3 of $0640, skipped by shot_hits_monster
Death takes up to 200 health, then dies; only magic kills itconfirmeddeaths_first: 50 touches of 4; blast_monster always kills Death; shots only score (death_points)
Potions: SPACE uses one; its effect scales with the hero's magic; a potion that is shot works too, but lessconfirmedmagic_use, blast_monster (magic_vs_monsters by hero), potion_shot (blast_owner 1)
Special potions: extra armour, magic power, shot speed, shot power, fight power, pickup powerdiffersall six are picked up and announced (power_apply); the armour potion writes values nothing reads, and the fight-power potion's hand-to-hand half writes $ACCC, which nothing reads (live)
Food: +100 health and +100 scoreconfirmedfood_eat, score_100
Cider: as food, but a shot destroys itconfirmedtile $14, shot_tile
Poison: takes one special power and 100 healthdifferspoison takes one power from a player who has any; otherwise a potion, if carried, and 100 health, subtracted without decimal mode or a borrow test: live, 2000 became $1F00 (600 health too many) and 50 became $FF50 (16,550 ticks of the clock)
Keys: 100 points each, open doorsconfirmedkey_take, door_unlock (the door spreads in two directions, doors_open_step)
Treasure chests: 100 pointsconfirmedchest_take, score_100
Amulet: invisibility for a short timeconfirmedamulet_take: 255 passes, monster_aim ignores the player, amulet_flash
Some walls crumble under repeated shotsconfirmedtiles $33-$35, one stage a hit (shot_tile)
Traps: glowing floor patterns that make some walls disappearconfirmedtrap_set, trap_wait, trap_spring: the walls with bit 7 set go when both sticks are let go
Transporters: to the nearest visible transporter, a random one when several are as nearconfirmedteleport_add, teleport_sort (ties broken by chance), teleport_place
Exits are labelled with the level they lead to; some skip levelsconfirmedexits_special, exit_targets: after level 1, exits to 4 and 8; after level 4, to 8
After 30 seconds without action every wall vanishes; after another 30, the walls become exitsdiffersidle_timer: after 30 game seconds the doors and keys become floor; after 150 more the walls become exits (live)
An exit can lead to a treasure room: collect within the time limit and escape for the bonusconfirmedtreasure_clock_set (20-30 s), treasure_result: 100 a chest, or "NO BONUS"
From level 10 shots stun the other playerdiffersset per level by the level file's header (bits 0 and 1 of $0A01, level_messages), not by the level number
512 dungeons; the disk holds 128 level filesdifferslevels 1-7 are files 1-7, then random files 8-117 without end, treasure rooms from 118-128 (level_pick)
A dead player in a two-player game can come back by pressing fire while the other is aliveconfirmedleave_timers puts "PRESS FIRE" back in a dead player's panel; players_join
A short form of the title tune plays while each level loadstracedlevel_intro plays the jingle DITTIDATA at each level's start, after the load; whether the jingle is taken from the title tune was not compared
Scrolling play area with the status panel belowlivereference/play-level1.png; panel split at raster line $CF (raster_frame)
Music by Ben Daglish (credits)livecredits screen; PLAYER-$E000 and the tune player at $A036

Beyond the documentation

Found in the code, not in the manual.

Open questions

The symbol map for this game is symbols.json; the listing behind the Source tab is listing.json. Write-ups, facts and symbol maps are CC BY-SA 4.0. The game itself is not hosted here.