1987 · Thalamus

Delta

This minisite was contributed by chunkypixel, 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/delta with me to Gold.

Thirty-two stages, each announced in three words, with scenery along some and enemy fire that stops getting harder halfway.

01 · Thirty-two stages

32 stages, and the difficulty stops rising at 16

Each of the 32 stages announces itself in three words, and the ones you are entering bring rows of scenery along the top and bottom.

Pass through the game

Drawn from the game's tables: the three words from stage_banner_table ($F880) and stage_words ($EB80), in the game's font at $FC60; the scenery rows from stage_hazard_table ($F900); the fire rules from difficulty_by_loop ($FA20). The decoder was checked against all 32 banners read from the game; stage 2's banner was also brought up live in VICE. Colours as in reference/stage2-banner.png, which the drawing matches pixel for pixel. Stages with an orange edge have scenery rows.

A banner is three of 30 eight-letter words, picked by two bytes per stage: the high four bits of the first byte choose the first word, the low four bits plus 4 the second, and the second byte plus 17 the third. The word list holds two that no stage uses: LOST and DRAGONS.

The font has 39 glyphs of 20 bytes, ten rows of twelve pixels in multicolour, and the banner is drawn into eight sprites two letters at a time (banner_draw_step, $3B80).

Difficulty depends on two numbers: the stage and the number of times the player has finished the game. Each enemy fires when its counter reaches the fire rate, and new fire is allowed only while the fire already in flight costs less than the budget (a shot counts 5, a bomb 10, a bullet 1). Both stop changing at stage 16 (fire_rate_set takes the stage capped at 15). After stage 32 the game plays tune 12, shows DELTA MISSION COMPLETE and starts again at stage 1 with the next of three tables (difficulty_set, $9D35).

02 · Every stage

All 32 stages in one table

The banner, the scenery rows and the enemy fire rules of every stage, read from the game's tables.

Pass through the game

From stage_banner_table ($F880), stage_hazard_table ($F900) and difficulty_by_loop ($FA20), decoded by the same code as the banner above. The swatches are the two colours of the scenery rows. A lower fire rate fires sooner; the budget is the most fire allowed in flight.

The fire rate follows the stage in pairs and the budget stage by stage, and both stop at stage 16: fire_rate_set ($9BAA) and enemy_fire_setup ($9100) both cap the stage at 15 before looking it up. Stages 17 to 32 are as hard as stage 16. Only finishing the game makes them harder, through the next table, and the third table is used for every pass after the second.

03 · Scenery

Rows of rocks made of sprites

The ENTERING stages bring one or two rows of large shapes along the top and bottom of the play area.

Stage 2 of Delta: rows of grey rocks scrolling along the top and bottom of the screen
Stage 2, ENTERING ROCKS OF DEATH, in an emulator.

The rows are not characters. Each shape is two sprites, and the raster interrupt that places the enemies moves the same seven sprites to the top row and again to the bottom row each frame (irq_top_row $2000, irq_bottom_row $2040). A new shape enters every eighth frame from a spawn list (hazard_rows_step, $2080), and the rows move 3 pixels a frame, animated from $D200 (hazard_frames_step, $9480).

The spawn lists and animation tables sit at $D200-$D3FF, in the RAM under the I/O chips. To read them the game switches the chips out ($01 = $34) for a few instructions and back again, with interrupts still running. Between stages the shapes in the video bank are swapped with a second set kept at $E000, 128 bytes a frame (stage_gfx_sequence, $9580), which is how rocks become bubbles or machinery.

The LEAVING stages, FURTHER SPACE and stage 1 have no rows. Ships and rows collide through the video chip's sprite collision register.