1984 · Mastertronic

Chiller

This minisite was curated by unorig, air.

Unused routines, an enemy that wears every sprite in the game, a disputed claim that the game could not be finished, and questions the code cannot settle.

A disputed memory

Was a cross impossible to collect?

A 2022 comment on Lemon64 recalls a cross that could not be reached, and a crack that the player believed fixed it.8 In the copy studied, every cross can be taken and the whole journey out and back can be finished, although the game then loops back to the forest.

The three lowest crosses, in the graveyard, the ghetto, and the cinema on the way home, sit in the bottom two rows. The boy cannot stand lower than row 22 (move_sprite stops him at Y $E3), but the test for what he touches looks below and beside him, reaching rows 23 and 24 (probe_offset, $5145). So he takes each of the three by walking left along the ground.

Whether another release or a crack moved a cross, or whether some order of play can leave a player stuck, is not known.

Secret

Secret: enemies could once be killed, for points

In Chiller you cannot hurt an enemy, and there are no lives and no scrolling. Its code has all three, and a second sound player whose every write goes nowhere. None of it can be reached in play.

WhatWhereWhy it never runs
An enemy being hit, the enemy dying, points per enemyunused_shot_hit $CDC7, unused_kill_enemy $2F7B, add_score_for $CE6Bnothing calls them
Lives: a starting count, take one, restart the screen$45ED, new_life $CAED, lose_life $CEDAcalled only from the code above
A scroller that moves the whole play area a cell at a timescroll_timer $C011, scroll_left $C412every screen sets its period to $FF, off
A sound player with a 56-note tableunused_sound_player $CA80, $C300every sound-chip store in it is aimed at $FFFF
Fire putting a second sprite on top of the boy, facing his way, with a sound, and that sprite switched off when it hits the sceneryswitch_check $C7D4, sprite1_hit_scenery $C4FBthe first works only on a screen with no jumping, and every screen has jumping; the second is switched off on every screen ($45FE = 0)
Screen-editor tools: a box drawer, a character plotter, fillsunused_editor_tools $5198, unused_screen_tools $C038they call only each other

The code does not say how an enemy was hit; the first routine is named for a shot only because a shot is one possibility. unused_kill_enemy takes the enemy from the boy's last collision ($CF5E, $CF5F, written by sprite_touch), so it may once have been enough to touch an enemy. The row above may be a shot's beginning: fire puts a second sprite on the boy, facing his way, with a sound, and it vanishes when it hits the scenery. No code has been found that moves that sprite along, so nothing left in the game settles which.

The sound player was silenced without being removed. Its stores all point at the last byte of memory, so it still steps through its notes and makes no sound.

Secret

Secret: the magic crosses were once silver

Three of the first five levels carry a spare score line that is never shown. It says SILVER CROSSES where the game says MAGIC CROSSES.

Top: hud_cinema at $8E00, never copied to the screen. Bottom: hud_template at $8400, the one the game uses. Both drawn with the game's own letters.

Quirk

Quirk: an enemy that wears every sprite in the game

In the forest on the way home, one enemy never settles on a shape. The enemy plays 107 frames, and most of them are memory that was never meant to be a sprite: program code, the character set, and the boy's and the girl's own frames.

The enemy in slot 1 of the forest on the way home, stepping through its frames as enemy_move ($CCAB) does, in the colour the game gives it.

Each screen's settings name the first and last frame of each enemy, and the enemy steps from one to the other and starts again. On the way out, the forest's slot 1 runs from frame $88 to $8B. On the way home, the last frame is $F2 ($7523), so the enemy carries on past its own four frames, through the other enemies' shapes, into the code at $2A00, then the character set at $3000, and then the players' frames, before it starts again.

$7523 is the byte that the title screen's flicker writes to by mistake, in place of the video chip's $D023 (title_flicker, $7580). The flicker reads $D023, whose top four bits always read as 1, flips one bit, and stores the result, so whatever it writes is $F0 or more. The flicker runs on the title after every game over, so the enemy keeps its 107 frames however often you play. The copy studied holds $F2 there even before the first game, which suggests the game was saved from memory after its title had already run.

Odds and ends

Things the manual never told you

Small slips and leftovers in the code.

Open questions

What we're still unsure of