1985 · Gremlin Graphics

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/c16/tycoon-tex with me to Gold.

Footprint

Every byte of the Commodore 16's 16 KB of RAM, one pixel each, 128 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 60 comments had 7 wrong, so between 6 and 22 % of the listing’s comments are likely wrong. How listings are checked
Build analysedGremlin Graphics cassette, Novaload, from the TOSEC raw tape (2016-11-11)
Copyagent-draft
Toolsemulator: plus4emu 1.2.11 (git 939e652) with kit/c16/codemap.patch, built without libsndfile, in the kit's server, disassembler: regenerator2000 0.9.20, python: 3.13.16, host: Linux (Ubuntu 24.04), x86_64, browser: Chromium 141 through Playwright (node), for the page checks
Modelclaude-opus-5-5[1m]
Kit version0.0.212

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 466 comments.
Sample 1claude-opus-5-5[1m]7 of 60 comments wrong, so between 6 and 22 % of the listing is likely wrong. All 7 were then corrected.
Play tabclaude-opus-5-5[1m]Ported the whole game to JavaScript for the Play tab and corrected 0 comments it showed wrong.
every routine ported and checked against the game's code, alone and in lockstep; no comment in the listing needed correcting

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
Follow the pipeline from left to right; the ground and skyline scroll as Tex moves (inlay; HCW)livemove_tex, set_speed, scroll_pipe, scroll_skyline; holding right scrolls the scene and adds to the score
The faster Tex moves, the quicker the oil pressure builds (inlay)differsthe pressure never rises in a level: it falls an eighth every 24, 19 or 14 main-loop passes (main_loop, drain_rates). Speed raises % COMPLETED (completed_rates) and the score
A break in the pipeline must be jumped; falling in costs a life (inlay; Retro Gamer)livecheck_hole, tex_death; running right into the first break, Tex lies down and a life goes (reference/level1-fallen.png)
Jumping a break makes the pressure drop quickly; at zero the game ends (inlay)differsjumping costs nothing: the pressure falls with time and when a bomb or a crash explosive breaks the pipe, 4 eighths (lose_pressure, break_pipe). At zero the game ends, whatever the lives (pressure_out; live)
A completed pipeline moves on to the next level; a "% completed" bar (inlay; the HUD)liveadd_completed, level_complete; running right from the start of level 2 filled the bar and completed the level after 5,462 frames on EASY
99 levels (inlay)differsthe level is two decimal digits (next_level); after 99 it becomes 00 and play goes on, with nothing to end the game (live, level 99 completed with the $9D poke)
Desert, ice and surface pipe scenes (inlay; HCW names desert and "the frozen north")livenext_level, scene_colours: the desert on levels 1, 4, 7..., the ice on 2, 5, 8..., the grey surface pipe on 3, 6, 9... (levels 2 to 4 seen)
Parallax: parts of the screen scroll at different rates (HCW)confirmedpipe_speeds, skyline_speeds: the skyline moves at about half the pipe's speed, in its own band of the raster interrupt (irq_skyline, irq_pipe)
Enemies: jet plane and its bombs, bouncy bomb, crash explosives, arrows; "surface missiles" on the coverconfirmedenemy_mask has four kinds and nothing else: arrow, bouncy bomb, jet (with its bomb) and crash explosive (next_level, move_arrow_and_jet, move_bombs). Nothing in the code matches the cover's surface missiles beyond these. Jet, bouncy bomb, crash explosive and arrow seen on levels 1 to 4
Shoot with the sixgun (inlay)livefire_bullet, move_bullet; fire puts a bullet in front of Tex
Scores: jet plane bombs 250, crash explosive 200, bouncy bomb 50, arrow 25 (inlay)confirmedmove_bullet adds exactly these. The jet itself flies above the highest row the gun reaches and cannot be shot
Score goes up as Tex moves rightlivemain_loop: 1 point every 24 passes while his speed is above 0 (15 points in 1,500 frames on EASY)
End-of-level bonus: the oil pressure left (inlay)livelevel_complete: a point for each eighth of pressure left, and one more; 207 points after an immediate finish of level 1
6 lives (inlay); the menu offers "NO. OF LIVES"differsthe menu counts 1 to 6 and round, 3 as loaded (menu_choose, lives_setting); a life comes every 10,000 points, up to 9 (add_score)
Keys: K or J chooses keyboard or joystick; Z left and slow down, X right and speed up, ; up and jump, / down (also used to enter a name in the high-score table) (inlay)livemenu_keys, read_keys: K, J, Z, X and ; tested; RETURN is fire. Down is read only at the menu and in name entry (menu_input, enter_hiscore): in play nothing tests it
Joystick: right moves on, up jumps, fire shootsliveread_controls: port 2, or port 1 when port 2 shows nothing; tested on port 1
Sound on and off (inlay; menu "SOUND: OFF" by default)confirmedmenu_choose, sound_on: every sound routine returns at once while it is off
Selection screen: up and down bring an option into the highlighted window, FIRE executes (inlay)livemenu_input, menu_choose; fire or RETURN starts the game
Menu: PLAY THE GAME, WATCH THE DEMO, difficulty (EASY, HARD and IMPOSSIBLE in the Hall of Fame pictures), NO. OF LIVES, SOUNDconfirmedmenu_items, difficulty_text; the difficulty sets the main loop's pace and the pressure's drain (next_level, loop_paces, drain_rates)
High-score table "THE TYCOONS!", 8 entries, with name entry (inlay; the menu)livecheck_hiscore, enter_hiscore, draw_hiscores; a score of 207 went in eighth, 200,000 went in first
A scrolling message along the bottom of the menu and the play screenlivescroll_message, message_text: TYCOON-TEX (C) 1985, ANOTHER CLASSIC FROM GREMLIN GRAPHICS BY THE TYCOONS AT MICRO-PROJECTS LTD. TRY OUR OTHER GAMES - XARGON WARS AND THE PETALS OF DOOM. AS USUAL THANKS TO MATTHEW,JASON,MARK,IAN AND EVERYONE AT GREMLIN ! ** HI TO KATH,JOHN,CHRIS,DAVE AND THE OTHERS !
"GO!" in large letters at the start of play, "THE END" at game overlivecountdown, the_end; reference/level1-go.png, reference/game-over.png
Pause with SPACE, continue with C=; quit the game with ESC (Plus/4 World, "Undocumented Options")livecheck_play_keys; the score stood still for 100 frames while paused

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.