1987 · Martech

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/the-armageddon-man 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

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 80 comments had 13 wrong, so between 10 and 26 % of the listing’s comments are likely wrong. How listings are checked
Build analysedMartech's original PAL disk of 1987, a bit-level G64 of the protected original from the C64 Preservation Project, armageddon_man[martech_1987](cyan2)(pal).g64, SHA-256 8f2cf80d...; booted with the copy protection's verdict page assisted in the emulator (orientation.md)
Copyagent-draft
Toolsemulator: VICE 3.10, the vice-mcp release v3.14.0, v3.14.0-linux-x86_64-gui.zip, disassembler: regenerator2000 0.9.20 (cargo install from crates.io), host: Linux x86_64, Ubuntu 24.04, no display (cloud container), node: 22
Modelclaude-opus-5-5
Kit version0.0.268

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 1,529 comments.
Sample 1claude-opus-5-513 of 80 comments wrong, so between 10 and 26 % of the listing is likely wrong. All 13 were then corrected.
two strata: 60 of 1,083 comments written one by one (8 wrong), 20 of 446 written by a script from each record (5 wrong, one template)
Port checkclaude-opus-5-5Checked a page’s port or widget against the game and corrected 3 comments it showed wrong.
live tests in VICE: a war watched to its end, the year's end and Armageddon
Port checkclaude-opus-5-5Checked a page’s port or widget against the game and corrected 1 comment it showed wrong.
the page's widgets, each tested against the game's own routine in the kit's 6502: the satellite cover test showed in_cover's reach one pixel too wide
Play tabclaude-opus-5-5Ported the whole game to JavaScript for the Play tab and corrected 1 comment it showed wrong.
the whole game ported routine by routine and held in lockstep with the game's own code from the hand-over and from 50 moments of play, the sound driver running on the kit's 6502; the page's test found a message's end byte at $8416 that the listing had as the first byte of unused_wait_200

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
The player is Supreme Commander of the U.N.N.: 16 member countries, each with its own personality, aims and problemslivethe country list in the OUT tray: Canada, U.S.A, Central American Alliance, European Unite, Libya, Argentina, Black African Republic, South Africa, Israel, Islamic Alliance, Pakistan, India, Australia, China, Japan, Eastern Block (country_names); each country's own event levels (event_levels) are its personality
Control by keyboard (A up, Z down, N left, M right, SPACE fire) or a joystick in port 2, chosen with F1 or F3 at the startliveoptions_panel, read_keys, read_joystick
An arrow cursor picks one of five main icons and fire chooseslivemain_icons, hit_test; the map is a sixth place, for moving satellites
A weekly U.N.N. Council communique rates the player's performance and the world's radiation, with CARRY ON, RAMSAVE GAME, RAMLOAD GAME and QUIT GAMEliveweek_end, communique_menu; the rating is the 16 countries' confidence summed and divided by 512, poked to Excellent live
Information: intelligence reports per country on food, resources and missiles; green when a country has what it needs, red when it lacksdiffersthe C64 has three reports, missile power, technology and natural resources (report_missiles, report_tech, report_resources); food is natural resources, and the colour marks the countries a memo or mail is about (report_marks), not need
Three missile types, Mx1 (enormous warhead, high radioactivity), Mx2 (medium), Mx3 (small, tactical); any reaches any targetdiffersthree types are kept and fired MX1 first (take_missiles, launcher_pick), but every missile that lands is one hit and adds to the radiation by the same chance, whatever its type (war_damage, radiation_up)
The Strategic Arms Limitation Agreement: the Commander sets each country's allowed warheads; a country may comply, refuse or build in secretconfirmedthe letters "Reduce missiles" and "Increase missiles" change a country's stock by 10 of each type, the first only when the country trusts you or has the force on its soil (letter_reduce_missiles_script); mail 1 and 2 ask about missile allowances. No routine builds missiles in secret
IN tray: letters from countries; reading one discards it; a letter left too long falls off the top of the stack and the sender takes it as ignoredconfirmedin_tray_next shows the newest of the week first; mail unread at the week's end runs its follow-up (mail_unread)
OUT tray: standard letters to a chosen country, with details where they applylivewrite_letter, letter_scripts: Reduce missiles, Increase missiles, Reprimand, Letter of Support, Allocate food, Allocate Technology, Two Countries Improve, One Country Improve
Satellites: six laser-defence (SDI) satellites, numbered 1 to 6, and three Big Bird reconnaissance satellites, picked up and placed in geostationary orbit over the mapliveicon_satellites, satellite_pick, satellite_grab
An SDI satellite shoots down nuclear missiles within its rangeconfirmedsdi_check, laser_on: each frame a missile flies under an SDI satellite it is caught by a 1 in 4 chance and a laser line is drawn to it
A Big Bird detects increased military activity beneath itconfirmedbigbird_report every fourth tick: a message from bigbird_texts for a country under a Big Bird (bigbird_over_a), chosen by its hostility to another (bigbird_levels)
The eye in the satellite panel shows reconnaissance and SDI coverconfirmedcover_report: "SATELLITE DEFENCE COVER" and "RECONNAISSANCE COVER" lists, or "No Foot prints!"
Radio: six frequency bands (1800-3499, 3500-6999, 7000-13999, 14000-20999, 21000-25000, 28500-50000 kHz); each country transmits in one bandconfirmedband_bottoms, band_tops, country_bands
Frequency select: a typed frequency or a band's lower limit, adjusted up and down; a message on or near the frequency is showndiffersa typed frequency only picks its band (radio_tune_typed); intercepts come from any country on the radio's band (intercept_pick), not from a frequency
Frequency scan: scans a band; what it intercepts is scrambled and is unscrambled by setting eight signal filters f0 to f7liveradio_scan_irq, radio_message, scramble_char: each filter that matches the country's key (scramble_keys) lets about another eighth of the characters through
U.N.N. Force: a rapid deployment force the Commander moves into any country; a country with the force on its soil follows the Commander's instructions; countries resent it stayingconfirmedforce_menu, force_weeks; the letter scripts obey when the force is stationed in the country (force_test), and a Total Missile Attack from or on it is stopped (force_check)
Disputes: a country demands units of food or technology from another, and the Commander answers Ignore, Yes or Nolivedemand: Yes moves one unit and cancels the event, No lets it happen, Ignore runs a harsher event
News memos about a country, answered Neutral, Support, Criticise or Ask for Talkslivethe event scripts at $9FDB-$A4D5
Each country tracks its relationship with the Commander and with each of the other 15 (240 relationships)confirmedconfidence in you, byte 9 of each record; hostility, relations, 16 by 16
Food and resources: a country short of either is less stable and seeks the shortfall from othersconfirmeddemand: a country with less than 11 of natural resources or technology demands 10 units from its target
Conventional wars: punitive, little damage, escalate to nuclear if not over quicklydiffersthe conventional attack events (2 and 3) are memos whose answers change confidence and hostility; no routine counts damage from them. Escalation comes through hostility rising to the missile attacks' levels
Nuclear wars: missiles track to their targets on the world map; SDI satellites in place may shoot them downlivewar_run, missile_fly, sdi_check: China and Israel's war watched to its end
Radioactivity rises with every nuclear exchange, and enough of it ends the world (Armageddon)liveradiation_up, week_end: radiation 255 at the week's end ends the game
Musiclivetune 0 plays from the options panel on (options_panel, mus_start_tune)

Beyond the documentation

Found in the code, not in the manual.

FindingStatusWhere
Two countries at the friendliest relationship, hostility 0, start a Total Missile Attack on each otherlivecountry_events: the level $FF less 0 is -1 as a signed byte
Libya's starting hostility to each country is 0 to 15 or, about half the time, 241 to 255, close to its Total Missile Attackliverelations_init: Libya's event 20 level is 0, and the random amount taken from it wraps
Answering Neutral to an assassination, a mobbed embassy, a car bomb or aid to an opposition ends the game half the time, "recalled to earth immediately. Due to your incompetence."liveev15_18_neutral, ev15_18_1
A war fires more missiles than the countries hold: the last of each type can fly two or three timeslivelauncher_a, missile_done: 108 landings from 101 missiles
A country already destroyed still adds radiation when hittracedwar_damage
The title picture is loaded with the game and never shownlive$2000, $0C00; only the leftover dev_loader points the video chip at it; it is the Spectrum version's loading screen, 762 of 768 cells bit for bit
A developer's loader is left at $1000, naming the files TITCOL, TITLES, SWMA and PAINtraceddev_loader
A sound effect player with 17 effects, an alarm and three short tunes that the game never playstracedsfx_start, alarm_start, tune_table
After talks a coin is tossed and never looked at, so the branch that raises both countries' hostility is never reachedtracedafter_talks, $9FE0
Mail 9 (a threat warning) and mail 16 have scripts nothing poststracedmail_threat_warning_script, mail_16_script
Japan's and the Eastern Block's radio intercepts are chosen by bytes of code past the end of their tabletracedintercept_levels
A missile power of 511, 766, 1021 or 1276 reads as nonetracedscript_has_missiles
The year's end rating is 100 with no country destroyed, about 6 less for each one lostliveyear_over
RESTORE does nothingtracednmi

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.