1987 · Palace Software

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/barbarian 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 2 parts, and the map is of one of them: Combat practice (side 1). 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 checkedNot audited. No audit has checked every comment, and the last sample of 60 comments had 6 wrong, so between 5 and 20 % of the listing’s comments are likely wrong. How listings are checked
Build analysedPalace Software disk, 1987, two sides (C64 Preservation Project G64s, barbarian_s1[palace_1987](!) and barbarian_s2[palace_1987](!), SHA-256 1db548f7... and 204d8daf...)
Copyagent-draft
Toolsemulator: release v3.13.2, v3.13.2-linux-x86_64-gui.zip, disassembler: regenerator2000 0.9.20, host: Linux x86_64 (Ubuntu 24.04.5, cloud container), node: 22.22.0
Modelclaude-opus-5-5
Kit version0.0.267

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,515 comments.
Sample 1claude-opus-5-56 of 60 comments wrong, so between 5 and 20 % of the listing is likely wrong. All 6 were then corrected.
40 of the 346 hand-written comments and 20 of the 455 written from templates, checked by a fresh agent against the code; all six wrong were hand-written
Port checkclaude-opus-5-5Checked a page’s port or widget against the game and corrected 6 comments it showed wrong.
the music player's test against the driver, the Maps tab's arenas against VICE and the pages' copy against the code: the irq on both sides, and side 2's backdrop_colours, raster_irq, start_ending and scene_sprites

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

The joystick moves are given, as the manual does, for a fighter facing right; facing left, left and right swap.

FeatureStatusWhere
Two parts on the two sides of the disk, loaded on their own, in any order: side 1 combat practice (one or two players), side 2 the fight to the death against Drax's warriors and Draxliveorientation.md; side 1 demo in the wastes, side 2 in Drax's hall
A demo fight plays after loading, DEMO in the panellivereference/practice-demo-volcano.png
F1: one or two playerslive1PLR / 2PLR in the panel; key scan $9246 on side 1
F3: music or sound effectsliveread_keys toggles sound_mode ($B8); work/keys.py
F5: pauseliveread_keys; work/keys.py: a second press held past the next pass pauses the game again
F7: start the gamelivekey scan $9246; needs F1 first
Q: quit to the demolivekey scan $9246 (row 7, Q)
Player 1 on joystick port 2, player 2 on port 1confirmedlda $DC00,x at $84E9 (side 1)
Stick without fire: up jump, down crouch, forward and back walk, up-back protect head, up-forward protect body, down-forward roll forward, down-back roll backconfirmedmove_rows row 0; down starts move $97, crouch down, whose row gives the crouch; test_rules.js, test_fighter.js
Stick with fire: up neck chop, down leg chop, forward body chop, back flying neck chop, up-back web of death, up-forward head butt, down-forward kick, down-back overhead chopconfirmedmove_rows row 8; down with fire goes through crouch down to the leg chop; test_rules.js, test_fighter.js
Sixteen moves in allconfirmedthe 18 stick positions with and without fire start 16 moves besides standing; move_frames has 30 moves, the rest started by the game
Strength: six blows shown as dots at the top, player 1 on the left; a hit takes a half or a whole point by its strength (wiki); twelve life points as six circles (Wikipedia)differstwelve points as six half-circle pairs (show_strength); every blow that lands takes one point, half a circle, whatever its record says (hit_effect). Live: 16 drops in a fight, each of 1 point (facts.md, "Live tests")
A neck chop at the right time takes the head off and ends the fight at oncelivereference/practice-demo-decapitation.png, the demo; the flying neck chop's records 4 and 5 (hit_lists entry 4)
A goblin comes on, kicks the head away and drags the body offlivereference/practice-demo-goblin.png; goblin_kicks_head, goblin_drags
Score: points by the difficulty of the move, player 1 on the leftconfirmedhit_points: 500, 200, 100 or 50 by the hit record. Live: 200, 100 and 50 seen added
Two-player mode: a time limit for each duel; when it runs out with both alive, strength is restored and a new fight beginsconfirmedclock_out: both walk back, strengths restored, and the arena changes; the clock live (reference/practice-2plr-clock.png)
One-player mode: no time limit; the clock's place shows the opponent's skill levellive (shows 00)reference/practice-1plr-start.png
The computer's opponents get better level by levelconfirmedai_level_picks: level 7 attacks on all 32 of its picks, level 0 stands still on 14; test_rules.js holds the page's port to computer_moves
Fight to the death: Drax's warriors one after another, then Drax, who throws shurikens; the barbarian dodges by jumping and crouchingliveeight bouts, levels 0 to 7; Drax throws stars high or low; a crouch, a leg chop or a roll passes under a high one, a jump over a low one (work/ending4.py)
After Drax is killed, Mariana comes to the hero ("THANKS BIG BOY" in the wiki's screenshots)differsDrax is never fought: he vanishes when the barbarian reaches column 28 (reach_drax), then Mariana comes down and THANKS BIG BOY is printed. Live (reference/tournament-ending-thanks.png)
Idle fighters face the player, shrug and say "C'mon" (Wikipedia, which does not say which version)traceda fighter left idle long enough starts move $9A, the taunt (idle_taunt); not seen in VICE
Several backdrops: the wastes with a volcano, a forest, Drax's halllivefour: side 1 the volcano and the forest, side 2 the throne room and the hall of arches, changing with every win (swap_backdrop); test_levels.js holds the page's pictures to VICE's screenshots
Music by Richard Joseph, a long title tune (wiki: "6-minute game-music")confirmedsequences $80-$82, a loop of 6 minutes 16 seconds on the kit's 6502 through the game's own driver (test_music.js); F3 plays it (live)
An unused picture of Mariana in the tournament's data, shown by a cracker's cheat (wiki, "Easter egg")confirmedscene record 3 swaps her middle for shape $36; nothing sets scene_number to 3. Not shown in VICE
No high score table (wiki review)confirmeda score is kept only as the five digits of its panel message (msg_87, msg_88), which reset_fighters sets back to 00000 at every restart and every F1; none of the 24 messages is a table (reference/tournament-1plr-start.png)

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: Combat practice (side 1), symbols.json and listing.json; Fight to the death (side 2), symbols.json and listing.json. Write-ups, facts and symbol maps are CC BY-SA 4.0. The game itself is not hosted here.