It's Christmas Eve, and Father Christmas is setting out to deliver the presents - when he discovers that the mischevious gnomes have rigged the crackers with explosives! Can you defuse them all before they really go 'bang'?
Move around the screen using the A, S, P and L keys. Pressing SHIFT in conjunction with the A or S key will move the row of blocks Father Christmas is on left or right, except when a cracker is also on the same row. If you fail to defuse the cracker before its timer runs out, you will lose a life. The game ends when you have lost all of your lives.
You will also die if you run into the deadly holly, or collide with mutant stockings which roam the screen on later levels. But drink a glass of brandy for bonus points. Upon defusing six crackers, you proceed to the next level via a bonus screen. Wait until Father Christmas is aligned with the brandy at the bottom and press the Space Bar.
Have fun and Happy Christmas!
Technical Info
The game is in two parts. "G.CRACKER" assembles the machine code and "G.CRACK2" runs the game from BASIC.
"G.CRACKER" Machine Code Subroutines |
|
calc | Calculates screen address given the text co-ordinates in X and Y |
check | Each time Father Christmas moves, the notes for each crotchet beat are played. The 'beats' table counts up the number of quavers sounded on each channel. Another note on the current channel will be played only if the value in 'beats' is 1 or 2. 0 means the previous note was a rest or minim, and a value 3 means that two quavers have been played |
cracker | Prints cracker sprite at 'scr'+&280 |
getpos | Gets the right position in 'M%', the map, given the co-ordinates in X and Y. Because the playing grid is 14x14 squares big, Y is multiplied by 14 by successively adding 14, Y number of times, and added to X. This is then used as an index into 'M%' |
incscr | Adds &280 (one character line) to 'scr' |
mrl | Moves row number Y left by one position |
mrr | Moves row number Y right by one position |
play | Plays a note of the carol, the data for which is poked in from the DATA statements in lines 1660-1840. Note how notes above a certain pitch are played on channel 2, and notes below this pitch are sounded on channel 1. This saves having to store the channel number for each note |
rmap | Reads from the map given the co-ordinates in X and Y. Result in A |
row | Prints row of bricks, holly etc. CALLed with row number in Y |
space | Prints blank space starting at 'scr' by writing zero bytes to screen |
sprite | Prints sprite at 'scr'. Entered with sprite number in A |
sptab | Table of addresses of sprites |
wmap | Writes item A to 'M%' |
Variables |
|
from | Used to store the address of the data for a sprite |
ptr | Tune pointer |
scr | Current address on the mode 1 screen |
xpos,ypos | Temporary storage for X and Y co-ordinates |
"G.CRACK2" Procedures |
|
bonus | Plays bonus screen |
crck | Searches for suitable place on playing grid to place next cracker |
ctime | Decrements and displays cracker timer above a cracker |
del | Creates a short delay |
dhst | Displays high-score table |
erase | Erases Father Christmas at his co-ordinates |
expl(X%,Y%) | Explosion animation at (X%,Y%), either at the current cracker position when the timer runs out, or at Father Christmas's position when he runs into some holly or a mutant stocking |
ints, intss, ints | Introduces or removes mutant stockings |
levl(A%) | Adds or subtracts 'A%' to the level number and prints it on the panel |
liv(A%) | Subtracts or adds 'A%' to the number of lives left and displays them as a number of Father Christmases on the panel |
locfc | Locates safe place on grid for Father Christmas |
mc(Z%) | Calls machine code subroutine number Z% |
movst | Moves mutant stockings |
ready | Prints "READY!" message and waits a short while |
santa, sant2 | Prints Father Christmas at his co-ordinates |
screen | Creates the playing grid, prints holly, brandy and cracker in random places |
search | Searches the high-score table to see if the last score is equal to or greater than any champion scores |
shft(A%), sl, sr | Shifts current row on grid left or right and calls relevant machine code routine |
show | Reveals the playing grid |
snow(A$,X$,Y%) | Prints fancy 'snow-covered' letters by PRINTing text as normal but then overprinting at the graphics cursor using a graphics character with GCOL 2 |
title | Draws the title screen |
win | Draws a green border |
win2 | Clears the text area inside the green border. Note how this procedure can be called by itself to clear an area of the screen without drawing the border |
Variables |
|
C% | Number of crackers remaining on current level |
bc% | Time remaining on current cracker |
bx%(),by%() | Co-ordinates of cracker |
dx%(),dy%() | Selection box of directions for stockings to move in |
ex$() | Graphics character strings of explosion frames |
fs%() | Direction in which stockings are facing |
hs%(),hs$() | Scores and names of people in high-score table |
K% | Level number |
ns% | Number of stockings active on current level |
xm%,ym% | Co-ordinates of Father Christmas |
xs%(),ys%() | Co-ordinates of stockings |
V% | Number of lives left |