1989 · Origin Systems

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/space-rogue 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: Title and new game. The Source tab has the listing of each part that has one.

Status

Tierplatinum
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 9 wrong, so between 8 and 26 % of the listing’s comments are likely wrong. How listings are checked
Build analysedOrigin Systems' two-sided disk, G64 images of side 1 (SHA-256 f8f4bdd5…) and side 2 (944b0898…) from the C64 Preservation Project's collection (orientation.md)
Copyagent-draft
Toolshost: Linux 6.18 x86_64, Ubuntu 24.04 cloud container with four cores and no display, emulator: VICE, release v3.13.2, v3.13.2-linux-x86_64-gui.zip, disassembler: regenerator2000 0.9.20, python: 3.13.16, node: 22.22.0, checker: OpenAI Codex CLI 0.162.1, gpt-6.1-sol at high reasoning effort
Modelclaude-opus-5-5[1m]
Kit version0.0.165

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-5[1m]Looked the game up online (its manual, reviews or wiki pages) before reading its code.
Annotationclaude-opus-5-5[1m]Wrote the listing’s comments. 100 % of the program is described, in 2,587 comments.
Sample 1gpt-6.1-sol9 of 60 comments wrong, so between 8 and 26 % of the listing is likely wrong. All 9 were then corrected.
Codex CLI 0.162.1 at high reasoning effort; 28 comments sharing the same beliefs corrected with them
Port checkclaude-opus-5-5[1m]Checked a page’s port or widget against the game; how many comments it corrected was not recorded.
the chart drawer, encounter and HIVE! mound ports, run against the game's code: three mistakes, corrected in four parts' listings
Play tabclaude-opus-5-5[1m]Ported the whole game to JavaScript for the Play tab and corrected 35 comments it showed wrong.
every routine ported and checked against the game's code alone and in lockstep; the corrections are listed in port/corrections.md

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 (every one read on 14 October 2026; the full list with titles is in the research notes kept with the run, and each claim below carries its tag). No C64 manual or reference card was found online: the C64 keys come from C64-Wiki's transcription of the card, and the manual scan is the platform-neutral Sunracer Owner's Guide.

Features

Start-up, title and intro

FeatureStatusWhere
One double-sided disk: side 1 BOOT, side 2 DATA [S12]liveorientation.md, "The image"; "Insert DATA disk..." and "Insert BOOT disk..." are the loader's prompts
Title sequence: Origin logo, the Space Rogue logo, credits; any key skips it [S12]livereference/title.png; title part
"Old or New Game?": N for a new game, O for an old one [S12]livereference/old-or-new.png; N was tested
A new game asks for your namelive"What is your name?" after N (reference/name.png)
A password check asks for a word from the manual by page, line and word [S12]differsonly for an old game, and by page, paragraph, sentence and word in the Sunracer Owner's Guide: one of 32 records picked by the frame counter; only the first four letters are compared (intro password_check, $74D2; manual_questions, $76C8). A new game is never asked
Intro story: the Princess Blue, the derelict Jolly Roger, the Manchi attack [S14][S16]livereference/intro-1.png; intro part
You start aboard the derelict and walk to your ship [S1]liveafter the story the engine asked for side 2 and the game began in the derelict's hangar (facts.md, live tests)

Flight

FeatureStatusWhere
Filled, clipped 3D polygons, up to about sixteen objects [S19]differsreference/starbase.png; the draw list keeps at most 14 of the 20 object slots in view, drawn farthest first (engine build_draw_list, $3E2C); each model's faces in the fixed three-pass order of draw_polygons ($7ED6), which the Ships section's port matches on all 20 models (test_ships.js)
Keys W/X pitch, A/D turn, C/Z roll, S stops rotation [S12]liveA, D, W and S were used to line up on Hiathra; rotation builds while a key is held and S stops it
+ and - change speed; CF readout shows the set speed [S6][S12]tracedkey_slower $13DE, key_faster $13F3, a step at a time from -$46 to $46; draw_speed ($31B2) prints CF and the set speed, NF and the actual speed
Cruise and Newtonian flight, Ctrl-E toggles [S6]tracedkey_flight_mode ($1408) toggles $0D02; F7, which gives the same code, does too. Cruise steers the velocity toward the set speed (cruise_thrust, $7540); Newtonian thrusts only while a speed key is held (apply_thrust, $74D3)
Camera views: cockpit, chase, cinematic, V cycles [S16][S12]tracedkey_view ($142B) counts $0D3C through 2, 1, 0
T cycles targets; arrowheads at the screen's edges point to the target [S6]livereference/tac-starbase.png: "Starbase RAN 1972m"; the four arrowheads follow it
TAC data mode, five lines for a ship; Ctrl-T switches to the target's picture [S6]tracedkey_tac_mode ($1411, also I) toggles $7C; tac_data ($336F) prints the name, target, range, tactic, armour and systems
Beam weapons recharge; the M/A indicator and L toggles automatic fire [S6]tracedthe beam heat $0D00 rises a step a shot, up to 8, halving the damage each step, and falls every 16 passes (beam_hit, $2222); key_auto_fire ($141D) works only with the beam lock item ($073E)
Missiles: plasma torpedo, SM-1, Nova; R readies a weapon, Space fires [S6]tracedtypes 9 SM-1, 10 Nova, 11 plasma torpedo, contact damage 100, 250 and 75 (launch_missile, $1EAD); key_next_weapon ($1E5C, also full stop), key_fire ($1DBE, also 0)
Shields fore and aft, ECM, armour, damage to systems [S6]tracedshield_reduce ($6F88): the aft shield for a hit from behind, the fore shield from in front, each step halving the damage; a hit of 10 or more knocks out a random system one time in five (damage, $6EA0); ECM makes a missile swerve (launch_missile)
Collision damage grows with the square of the relative speed [S6]differsthe damage is the relative speed's length × 8, low byte only, to both ships: linear, and it wraps past 255 (ram, $6BC3)
Docking: touch the docking face at 20 m/s or less [S6][S9]tracedthe collision handler ($7033) docks when the object is the base and the face is its docking face and the speed is under 21; the docking routine was called directly (orientation.md)
Shooting a station gets docking refused [S6]traceda base hit by the player sets $0783 (damage, $6EA0), and arrival_message (station $A584) refuses docking while it is set; the next day clears it
Hazards: asteroids, black holes, ion storms, nebulae, antimatter shard fields [S6][S16]tracedhazard_hit ($6CC5): planets and the black hole do 255; a sector's ion storms (map type $64) flash and now and then strike the ship (sector_hazard, $24B3); the shard type $1B destroys what it touches (hit_shard)
Malir gates and wormholes: enter at 21 m/s or more, stay inside the rings [S6]differs20 or more, lined up with the gate's axis (gate_contact, $6C54); the trip ends when the ship leaves the rearmost ring (wormhole_rings, $72C1), and the gate's entry says how many rings must be passed
Other ships hail, taunt and use ten tactics [S6][S16]tracedtarget_status ($1DDF) prints a hail every 256 passes; ten tactics from $0C86, chosen by ai_tactic ($375F); the opening fight on Ships and combat, run on the engine's main loop, changes tactic and fires only on passes 17 apart (test_combat.js)
G surrenders, J jettisons all cargo [S12]tracedkey_surrender ($392A): the Imperium asks the bounty plus 50, others the cargo; key_jettison ($13D4) empties the hold
F1 pauses [S12]tracedF1 gives ESC (key_chars, $0FEF), and key_escape ($1438) waits for a key with the hum off
Ctrl-S saves, in space only [S12][S4]tracedkey_save ($154E) asks "Save game? Y/N" and writes $0403-$0801 as SAVED (save_file, $1783); it is a flight key, and the base and Navigation read their own
Death ends the game with no restart [S21]tracedplayer_destroyed ($1B90) loads END and its game_over, which prints the death text and loads TITLE; O there loads the last save

Navigation

FeatureStatusWhere
N opens Navigation Control: CHART, HELM, STATUS, QUERY, SCAN, COCKPIT [S6]livereference/navigation.png
Each system is a 32 by 32 grid of sectors [S6]tracedsystem_grid (nav $5100), 32 × 32 cells
CHART moves brackets to a destination; HELM is the autopilot; any key stops it [S6]livecharted to 13,19 and flew there; "Ship has arrived at destination"
QUERY gives a sector's bases, hazards and lore [S6]tracednav_query ($2A69): the system and coordinates, FEATURES, the sector kind's text, SHIPS, then the message of an entry there (reference/ext-nav-query-log.png)
Eight systems: Karonus, Deneb, Gryphon, Arcturus, Nar'see, Bassruti, Sigure, Zed N27 [S6][S23]tracedthe eight maps q0-q7 carry those names ($5505); q9 is a ninth, Ja-Karn, the Manchi system, reached only by a talk script (station talk_end, $E7C7)
The clock starts at 00:00 HRS, 01 MAR 12 [S13]tracedSR's clock bytes start at 0, 1, 3, 12 (engine $0720-$0725; clock_year, $0723)

Bases

FeatureStatusWhere
Docking switches to a top-down tile view that scrolls as you walk [S16][S19]livereference/hangar.png
Starbases check the cargo for contraband [S6]live"We've done a routine check of your cargo hold and found everything in order" (reference/docking.png)
Commands: talk, inspect, status, done; leave by your ship's hatch [S4][S13]tracedbase_menu (station $AA0C): TALK, INSPECT, STATUS, DONE; the ship's entry has action 2, embark (action_routines, $AB2E)
Conversations offer replies; OTHER takes a typed keyword [S4][S16]tracedtalk_menu (station $E699): the last item OTHER... takes a typed line and searches it for each keyword in turn
Repair, trading post, outfitter and cantina [S6]tracedmap types $20 cargo merchant, $22 outfitter, $23 repair shop, $24 bartender (talk_to, station $AB58)
Twelve bases, four kinds [S6]tracedl00-l70, of kinds starbase (Hiathra, Denebprime), outpost (MiCon I, Free Guild, Trochal), the carrier ISS Koth and stations (the other six), from each map's $5610
Pilot's licence quiz at Hiathra [S9][S20b]tracedHiathra's map holds talk script 12, Orellian's exam (disk texts $C303-$C320); the outfitter sells weapons, shields and ECM only with the licence ($074D, station outfitter, $B0E2)
Guards throw you out of restricted areas [S9]tracedguards_check (station $B863): a guard next to the player ends the visit, bars the base for the day and fines 25 credits for a secured area

Trading and story

FeatureStatusWhere
Buy and sell cargo; prices differ by system; some goods spoil [S6][S9]differsprices differ by base, each map with its own (cargo_price, station $B027), and hold all day; kinds that spoil (cargo_spoils, engine $0D08) can turn to spoiled cargo on a HELM step (helm_hazard_check, $2A15)
Contraband is confiscated at starbases [S6]tracedat every base but the outposts and stations, one visit in two (one in eight with forged papers), kinds 0-3 are taken (station $A62E); the check itself was seen at Hiathra
Reputation with the Imperium, the Merchant Guild, the pirates, the Manchi; repute as a pilot [S6][S15]tracedfour standings, -2 to 2, one for each faction by its number ($072E pirates, $072F the Guild, $0730 the Imperium, $0731 the Manchi: the beam's weapon count, $FE, read as hostile, which change_standing, $3C90, leaves alone), set the factions' attitude (faction_attitude, $387E); the rank count ($072A, $072B) grows with kills and surrenders
Docking at the Manchi homeworld ends the game [S20b]tracedthe docking routine ($7094) jumps to $1532, which loads WON, when the current system ($071D) is 9, the Manchi system on side 2's q9: docking at any base there wins; the ending was seen by calling it (reference/ending-1.png)

HIVE!

FeatureStatusWhere
An arcade cabinet in the cantinas [S6]tracedthe base's tile-action table at $AB30 gives a Hive! tile the handler $AAD6, which loads HCODE
"Insert credit" or "Quit game" [own]livereference/hive-menu.png
Collapse a set number of mounds, then run back to the ship [S5]live"MOUNDS: 03" on drop 1 (reference/hive-drop.png)
Three mounds on drop 1, six on drop 2, nine on drop 3 [S21]traced3 × n mounds on drop n (hive_game, hive $57BE)
Five drops win a prize [S5] (four, [S3])tracedfour drops won, then caught on the fifth, pays 8 credits, and 8 more for each drop after (hive_game_over, hive $57F8): [S3]'s four

Sound

FeatureStatusWhere
No music, only sound effects [S12]traced14 effects and the engine hum (sound_step, $10D2); the title plays only the Sunracer's drone, the ending nothing

Beyond the documentation

Found in the code, not in the manual.

Open questions

Resolved from the code:

Each part of the game has its own symbol map and listing: Title and new game, symbols.json and listing.json; Intro story, symbols.json and listing.json; Engine, symbols.json and listing.json; Flight, symbols.json and listing.json; Navigation, symbols.json and listing.json; Bases, symbols.json and listing.json; Hive!, symbols.json and listing.json; 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.