Santa’s Christmas Nightmare

Date: 198x
Type: Program
Platform(s): TS 2068
Tags: Arcade

Santa’s Christmas Nightmare is a five-stage action game in which the player guides Santa through a series of challenges to deliver presents. The stages include dodging obstacles in the snow, parachuting onto a rooftop chimney, descending a chimney via a moving lift, crossing a floor while jumping over snowballs, and button-mashing to gain enough altitude to clear houses. Sixteen UDGs (characters 144–159) are defined at startup via DATA statements to provide all the game’s sprites, including Santa, trees, igloos, penguins, snowmen, sleigh parts, and chimney bricks. Difficulty scales with a year counter (starting at 1984) stored in variable Y, which tightens timing delays and narrows platforms across all stages. The game tracks a persistent high score with player name entry using INPUT LINE, surviving across rounds via a GO TO 30 reset that preserves H and H$.


Program Structure

The program is organized into clearly delineated sections separated by REM statements. The main flow proceeds as follows:

  1. Lines 1–100: Initialization, key definition, and UDG setup via GO SUB 101
  2. Lines 101–199: UDG definition subroutine using RESTORE/READ/POKE USR
  3. Lines 200–199 (via GO TO 200): Jump into main game — notably line 200 does not appear in the listing, so control falls through to the nearest defined line
  4. Lines 900–1980: Stage 1 — horizontal scrolling obstacle avoidance in snow
  5. Lines 2000–2300: Stage 2 — sleigh parachute drop onto chimney
  6. Lines 2500–2900: Stage 3 — chimney lift descent
  7. Lines 3000–3340: Stage 4 — floor crossing with snowball jumping
  8. Lines 3500–3800: Stage 5 — button-mash altitude challenge
  9. Lines 4010–4030: Year increment and loop back to Stage 1
  10. Lines 9000–9030: Lose-a-life subroutine
  11. Lines 9100–9150: Game-over screen with high score handling
  12. Lines 9200–9730: Instructions display
  13. Lines 9800–9850: Between-stage and between-screen message subroutines
  14. Lines 9900–9910: Traffic light countdown subroutine

UDG Definition

Subroutine at line 101 defines 16 UDGs (characters 144–159, accessed as \a through \p) by reading 128 bytes of DATA with a double loop at line 105 using POKE USR CHR$ G+F,A. A RESTORE 100 at line 103 ensures the DATA pointer resets to the correct position regardless of prior READ operations. The UDGs represent: Santa (\a, \f), trees (\b), igloo (\c), penguin (\d), snowman (\e), sleigh parts (\g, \h), chimney top (\i, \j, \k), lift block (\l, \m), chimney brick (\n), traffic light circles (\o, \p).

Stage 1 — Snow Obstacle Field

At line 910, a 2D array P(Y*79,2) is pre-computed with random column positions and UDG codes for obstacles, scaling the field length with the year variable Y. The main loop (lines 1000–1070) runs 100 iterations; during the first 80 it prints one row of obstacles per frame from the pre-computed array. Collision detection at lines 1920–1960 uses ATTR to test the ink/paper value of the cell Santa would move into — ink 2 on paper 0 (value 58, since 2 + 7*8 = 58) signals a safe cell, any other value triggers a life loss.

The key-reading subroutine at line 1900 uses a FOR G=1 TO 4 loop with GO TO G*20+1900 to dispatch to one of four movement handlers (lines 1920, 1940, 1960, 1980) — a computed GO TO idiom that avoids a cascade of IF statements.

Stage 2 — Parachute Drop

The chimney width W is computed as 10-Y (minimum 1), making landing harder in later years. Santa’s sleigh scrolls across row 0 in a FOR loop (lines 2110–2120); pressing the DOWN key freezes the column and begins a vertical drop animation. Landing position is checked against the chimney aperture bounds at line 2220. A bullseye on the chimney pot (line 2200, when X=16) awards a 100-point bonus.

Stage 3 — Chimney Lift

A lift block (three block-graphic characters wide) oscillates up and down the chimney shaft. The player must press RIGHT to step onto the lift and LEFT to step off when the blocking brick at the bottom disappears. A countdown timer (20 seconds, lines 2640–2670) adds pressure. The lift speed is governed by a delay loop FOR G=1 TO W*4 where W=( 10-Y)/2, tightening with each year.

Stage 4 — Snowball Gauntlet

Santa moves left from column 30 toward the Christmas tree (drawn with PLOT/DRAW at line 3020–3030). Snowballs appear with probability RND<.15 and scroll right across row 21. An UP-key jump sets flag U=1 and counter T; after 5 frames (T=5) Santa lands back on the floor. Collision is checked by comparing the snowball’s column F with Santa’s column X while U=0 at lines 3200 and 3230.

Stage 5 — Altitude Button Mash

The player presses UP (K$(3)) repeatedly during a 500-unit countdown. The game counts presses in T (line 3625) but requires the key to be released between counts — a busy-wait at line 3650 (IF INKEY$<>"" THEN LET F=F-1) drains the timer while the key is held, discouraging key-holding. The final height calculation at line 3700 subtracts penalties for year level and recalculates to a screen row. A subsequent horizontal animation checks ATTR against the house walls (ink 6, value 6) to detect a crash.

Difficulty Scaling

VariableUsageEffect of increasing Y
YYear counter (starts at 1)All difficulty parameters tighten
P(Y*79,2)Stage 1 obstacle array sizeMore obstacles to dodge
W=10-YChimney width (Stage 2) and lift speed divisor (Stage 3)Narrower chimney, faster lift
W=(10-Y)/3Stage 4 snowball speedFaster snowballs
T=T-15*YStage 5 height penaltyMore button presses needed

Scoring

Score accumulates across stages and years. Stage completions award flat bonuses (50 points) plus multiples of L (lives remaining) for surviving. Stage 4 awards 1 point per step and 5 per dodged snowball. Stage 5 awards 20 points per row of altitude gained. High score is stored in H with player name in H$ (10-character DIM); these are preserved across rounds because GO TO 30 on restart skips the LET H=0:DIM H$(10) at line 25.

Notable Bugs and Anomalies

  • Line 9010 prints "LIVES LEFR" — a typo for “LIVES LEFT”.
  • Line 9130 prints "PRESS ANY KEYTO PLAY AGAIN" — missing space between “KEY” and “TO”.
  • Lines 97–99 implement a duplicate-key check with nested FOR loops, but the structure IF F=G THEN NEXT G: NEXT F skips to the wrong level of nesting and does not correctly guard against all duplicate combinations; in practice the check may pass even with two identical keys.
  • Lines 3625 and 3630 are identical (IF INKEY$=K$(3) THEN LET T=T+1: GO TO 3650), making one redundant — likely a copy-paste artifact intended for a second key check.
  • The instructions at line 9300 reference k$(1) (lowercase k) rather than K$(1); on a case-sensitive interpreter this would cause a variable-not-found error, though in standard Sinclair BASIC variable names are case-insensitive.
  • Line 200 is referenced by GO TO 200 at line 100 but does not exist in the listing; execution falls through to line 900, which begins Stage 1 — this is intentional behavior rather than an error.
  • The PRINT AT 9,0 at line 9300 has no string argument, printing nothing, and the subsequent GO TO E*50+9300 computes target lines 9350, 9400, 9450, 9500, 9550 for stages 1–5 respectively.

Key BASIC Idioms

  • POKE 23692,255 at line 990 disables the scroll prompt by resetting the line counter.
  • POKE 23658,8 at line 40 enables CAPS LOCK mode.
  • ATTR(row,col) is used extensively for collision detection, leveraging the color attribute memory rather than tracking object positions explicitly.
  • Delay loops of the form FOR G=1 TO W*4: NEXT G provide speed control proportional to difficulty.
  • RESTORE 3320 before a small DATA block at line 3310 demonstrates targeted use of RESTORE to read local data mid-program.

Content

Appears On

Related Products

Related Articles

Related Content

Image Gallery

Source Code

    1 REM ***********************         *Underlined characters*         *are entered in       *         *GRAPHICS mode.       *         *********************** 
   10 REM INITIALISE SCREEN AND           SOME VARIABLES
   22 GO SUB 101
   25 LET H=0:DIM H$(10)
   30 LET Y=1:DIM K$(4):LET L=5:LET S=0
   40 BRIGHT 0:PAPER 0:BORDER 0:CLS :POKE 23658,8
   50 INK 6:PRINT AT 0,2; BRIGHT 1;"SANTA'S CHRISTMAS NIGHTMARE!"; TAB 2;"\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\.."
   52 GO SUB 9200
   55 REM DEFINE KEYS
   57 INK 6:PRINT AT 0,2; BRIGHT 1;"SANTA'S CHRISTMAS NIGHTMARE!"; TAB 2;"\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\.."
   60 INK 5:PRINT AT 5,0;"WHICH KEYS WOULD YOU LIKE ?"'''"LEFT:"''"RIGHT:"''"UP:"''"DOWN:"
   70 FOR F=1 TO 4:PRINT AT F*2+6,10; FLASH 1;"?"
   80 LET R$= INKEY$:IF R$ <>"" THEN  GO TO 80
   90 LET R$= INKEY$:IF R$="" THEN  GO TO 90
   95 BEEP .05,20:PRINT AT F*2+6,10;R$: LET K$(F)=R$: NEXT F
   97 FOR F=1 TO 4: FOR G=1 TO 4:IF F=G  THEN NEXT G:NEXT F: GO TO  100
   98 IF K$(F)=K$(G) THEN CLS :  GO TO 57 
   99 NEXT G:NEXT F
  100 GO TO 200
  101 REM DEFINE GRAPHICS
  103 RESTORE 100
  105 FOR G=144 TO 159:FOR F=0 TO 7:READ A:POKE USR CHR$ G+F,A: NEXT F:NEXT G
  110 DATA 28,28,8,62,8,28,20,20
  120 DATA 56,124,214,186,124,214,146,16,24,52,82,255,169,255,153,255,56,120,44,46,42,58,40,104,24,36,24,36,66,66,36,24
  130 DATA 18,63,254,252,124,62,127,118
  140 DATA 30,30,76,111,236,255,255,126,0,1,1,3,255,252,68,68
  150 DATA 1,3,7,15,31,63,127,255,128,192,224,240,248,252,254,255
  160 DATA 102,102,102,102,255,255,255,255
  170 DATA 0,0,64,96,224,255,255,126,28,62,127,127,127,73,42,28
  180 DATA 255,32,32,255,255,2,2,255
  190 DATA 60,66,129,129,129,129,66,60,60,126,255,255,255,255,126,60
  199 RETURN 
  900 REM SCREEN 1
  902 BRIGHT 0:PAPER 7:BORDER 7: CLS 
  905 INK 1:PRINT AT 11,10;"PLEASE WAIT"
  910 DIM P(Y*79,2):FOR F=1 TO Y*79:LET P(F,1)= INT (RND*30)+1:LET P(F,2)= INT (RND*3)+146:NEXT F
  920 INK 1:LET N=0:LET E=1:LET X=15
  950 GO SUB 9800:INK 2:CLS 
  990 POKE 23692,255
  995 GO SUB 9900
 1000 FOR F=1 TO 100:LET S=S+1
 1050 PRINT AT 0,X;"\a"
 1060 IF F<80  THEN FOR G=1  TO Y:  LET N=N+1: PRINT AT 21,P(N,1); INK 0; CHR$ P(N,2):NEXT G:PRINT AT 21,0; INK 4;"\b"; AT 21,31;"\b"
 1065 GO SUB 1900
 1070 PRINT AT 21,0; INK 8; OVER 1,,,,:NEXT F:GO TO 2000
 1900 LET R$= INKEY$:FOR G=1 TO 4:IF K$(G)=R$ THEN GO TO G*20+ 1900
 1910 NEXT G: GO TO 1960
 1920 IF ATTR (1,X-1) <>58 THEN PRINT  AT 1,X-1; INK 2;"\f"; AT 0,X;" ":INK 1:GO SUB 9000:GO TO 900
 1930 LET X=X-1:IF X=0 THEN LET  X=X+1:GO TO 1960
 1935 RETURN 
 1940 IF ATTR (1,X+1) <>58 THEN PRINT  AT 1,X+1; INK 2;"\f"; AT 1,X;" ":INK 1:GO SUB 9000:GO TO 900
 1950 LET X=X+1:IF X=31 THEN LET  X=X-1:GO TO 1960
 1955 RETURN 
 1960 IF ATTR (1,X) <>58 THEN PRINT  AT 1,X; INK 2;"\f"; AT 0,X;" ":INK 1:GO SUB 9000: GO TO 900 
 1980 RETURN 
 2000 INK 1:LET S=S+50*L:GO SUB 9820
 2005 PAPER 0:BORDER 0:CLS 
 2010 REM STAGE 2
 2020 INK 5:LET E=2:GO SUB 9800: INK 6:LET W=10-Y:IF W<1 THEN  LET W=1
 2030 LET C$="\::\::\::\::\::\::\::\::\::\::"( TO W)
 2040 PRINT AT 15,16;"\k"; TAB 16;"\::"
 2100 PRINT AT 17,15-W/2;"\i";C$;"\j":FOR F=18 TO 21:PRINT AT F,15-W/2;C$;"\::\::":NEXT F
 2110 GO SUB 9900:FOR F=0 TO 29: PRINT AT 0,F; INK 2;" \g"; INK 6;"\h":IF INKEY$=K$(4)  THEN GO TO  2200
 2120 NEXT F:INK 5:GO SUB 9000: GO TO 2010
 2200 LET X=F+1:PRINT AT 0,X; INK 2;"\l"; INK 6;"\h": INK 2:FOR F=2 TO 13:PRINT AT F-1,X;" "; AT F,X;"\m"; AT F+1,X;"\a":FOR G=1 TO 40:NEXT G:NEXT F:IF X=16  THEN LET S=S+100:GO TO 2250
 2210 FOR F=14 TO 15:PRINT AT F-1,X;" "; AT F,X;"\m"; AT F+1,X;"\a": FOR G=1 TO 40:NEXT G:NEXT F
 2220 IF X<16-(W/2+1) OR X>16+W/2  THEN FOR F=16 TO 20:PRINT AT F-1,X;" "; AT F,X;"\m"; AT F+1,X;"\a":FOR G=1 TO 40:NEXT G:NEXT F:INK 5:GO SUB 9000:GO TO 2010
 2250 CLS 
 2300 INK 5:LET S=S+50+20*L:GO SUB 9820
 2500 REM STAGE 3
 2510 CLS :LET E=3:INK 5:GO SUB 9800:INK 6:FOR F=5 TO 21:PRINT AT F,12;"\n"; TAB 19;"\n":NEXT F:PRINT AT 4,12;"\n\n\n\n\n\n\n\n":FOR F=0 TO 3:PRINT AT F,13;"\n\n"; TAB 17;"\n\n":NEXT F
 2520 PRINT AT 21,0;"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; AT 6,13;"\n\n\n"; AT 20,12;"  \n" 
 2530 LET X=15:PRINT AT 5,15; INK 2;"\a"
 2540 LET W=10-Y:IF W<1  THEN  LET W=1
 2550 LET W=W/2
 2590 GO SUB 9900
 2600 INK 5:FOR F=21 TO 6 STEP -1:FOR G=1 TO W*4:NEXT G:PRINT AT F,16;"\..\..\..":IF F<21 THEN PRINT AT  F+1,16;"   "
 2610 LET R$= INKEY$:IF R$=K$(2)  THEN GO TO 2700
 2615 FOR G=1 TO W*4:NEXT G:PRINT AT F,16;"\..\..\..":IF INKEY$=K$(2) THEN GO TO 2700
 2620 NEXT F:FOR F=6 TO 21:FOR G=1 TO W*4:NEXT G:PRINT AT F-1,16;"   "; AT F,16;"\..\..\..":IF INKEY$=K$(2)  THEN GO TO 2700
 2625 FOR G=1 TO W*4:NEXT G:IF F<21 THEN PRINT AT F,16;"\..\..\..\.."
 2627 IF INKEY$=K$(2) THEN GO TO  2700
 2630 NEXT F
 2640 PRINT AT 17,0;"TIME:":PRINT AT 20,12;"   ":FOR T=20 TO 0 STEP -1:PRINT AT 17,5;T;" ":NEXT T:FOR F=1 TO 40:NEXT F:INK 5:GO SUB 9000: GO TO 2500
 2650 FOR F=6 TO 21:FOR G=1 TO W*4:NEXT G:PRINT AT F,16;"\..\..\.."; AT F-1,16; INK 2;"\a":IF INKEY$=K$(1) THEN GO TO 2690
 2658 PRINT AT F-1,16; INK 2; "\a ":FOR G=1 TO W*4:NEXT G:IF F<21 THEN PRINT AT F,16; "\..\..\..\.."
 2659 IF INKEY$=K$(1) THEN GO TO  2690
 2660 PRINT AT F-1,16;"   ": NEXT F:PRINT AT F-2,16; INK 2;"\a":PRINT AT 17,0;"TIME:":PRINT AT 20,14;" ":FOR T=20 TO 0 STEP -1:PRINT AT 17,5;T;" ": IF INKEY$=K$(1)  THEN GO TO 2800 
 2670 NEXT T:FOR F=1 TO 40:NEXT F:INK 5:GO SUB 9000
 2690 PRINT AT F-1,16;"  "; AT F,16;"\..\..\..\..":FOR F=F-1 TO 20:PRINT AT F-1,15;" "; AT F,15; INK 2;"\a":FOR G=1 TO 40:NEXT G:NEXT F:PRINT AT 20,15; INK 2;"\f":FOR F=1 TO 40:NEXT F:INK 5: GO SUB 9000:GO TO 2500  
 2700 LET X=16:PRINT AT 5,15;" ": IF F=6 THEN GO TO 2650 
 2710 IF F>6 THEN FOR F=6 TO F-1: PRINT AT F-1,16;" "; AT F,16;  INK 2;"\a":FOR G=1 TO 40:NEXT G:NEXT F:PRINT AT F-1,16; INK 2;"\f":FOR F=1 TO 40:NEXT F:INK 5:GO SUB 9000:GO TO 2500
 2800 FOR F=15 TO 0 STEP -1:PRINT AT 20,F; INK 2;"\a":FOR G=1 TO 20:  NEXT G: NEXT F
 2900 INK 5:LET S=S+50+(T+10)*L: GO SUB 9820
 3000 REM STAGE 4
 3010 LET E=4:INK 5:GO SUB 9800
 3020 INK 4:FOR F=101 TO 61 STEP -20:FOR G=1 TO 30:PLOT 30-G/2,F-G:DRAW G,0:NEXT G:NEXT F:INK 2:FOR F=26 TO 34:PLOT F,16:DRAW 0,15:NEXT F
 3030 INK 5:FOR F=0 TO 15:PLOT 20-F/2,F:DRAW F+20,0:NEXT F
 3040 LET W=10-Y:LET W=W/3:IF W<1  THEN LET W=1
 3090 LET X=30:INK 7:GO SUB 9900
 3100 PRINT AT 21,X; INK 2;"\a"
 3110 FOR F=1 TO W*4:NEXT F:IF INKEY$=K$(1) THEN LET X=X-1:LET S=S+1:IF X=6 THEN GO TO 3300
 3120 IF RND<.15 AND X>11 THEN  LET U=0:PRINT AT 21,X; INK 2;"\a":  GO TO 3200
 3130 GO TO 3100
 3200 FOR F=7 TO 31:FOR G=1 TO W*4:NEXT G:LET S=S+1:PRINT AT 21,F-1;" \p":IF F=X AND U=0 THEN PRINT AT 21,X; INK 2;"\f":FOR F=1 TO 20:NEXT F:INK 5:GO SUB 9000:GO TO 3000
 3210 IF INKEY$=K$(3)  AND U=0 THEN LET U=1:LET T=0:PRINT AT 21,X;" "
 3220 IF U=1 THEN LET T=T+1:IF T=5 THEN LET U=0:PRINT AT 20,X;"  "
 3230 PRINT AT 21-U,X; INK 2;"\a": IF F=X AND U=0 THEN PRINT AT 21,X; INK 2;"\f":FOR F=1 TO 20:NEXT F:INK 5:GO SUB 9000:GO TO 3000
 3240 NEXT F:LET U=0:PRINT AT 21,31;" "; AT 21,X; INK 2;"\a"; AT 20,X;" ":LET S=S+5:GO TO 3100
 3300 PRINT AT 21,7;" ":FOR F=20  TO 10  STEP -1: PRINT AT F,6; INK 2;"\a"; AT F+1,6;" ":FOR G=1 TO 10:NEXT G:NEXT F     
 3310 PRINT AT 10,6;" ":RESTORE 3320:FOR F=1 TO 5:READ A,B:PRINT AT A,B; INK 2;"\a":FOR G=1 TO 10:NEXT G:PRINT AT A,B;" ":NEXT F
 3320 DATA 9,5,8,4,7,3,8,2,9,1
 3330  FOR F=10 TO 21:PRINT AT F,0; INK 2;"\a"; AT F-1,0;" ":FOR G=1 TO 10:NEXT G:NEXT F
 3340 FOR F=1 TO 200:NEXT F:INK 5:LET S=S+50:GO SUB 9820
 3500 REM STAGE 5
 3510 LET E=5:INK 5:GO SUB 9800
 3600 PRINT AT 20,0; PAPER 7,,,,:FOR G=0 TO 5:FOR F=6+G TO 19:PRINT AT F,G; INK 6;"\::"; AT F,31-G;"\::":NEXT F:PRINT AT G+5,G; INK 6;"\j"; AT G+5,31-G;"\i":NEXT G:PRINT AT 6,2; INK 6;"\k"; AT 7,2;"\::"; AT 6,29;"\k"; AT 7,29;"\::"
 3610 PRINT AT 19,15; INK 2;"\g"; INK 6;"\h":LET T=0
 3615 GO SUB 9900:IF INKEY$=K$(3) THEN PRINT AT 11,11;"HANDS OFF'":FOR F=1 TO 100:NEXT F:PRINT AT 11,11;"          ":GO TO  3615
 3617 PRINT AT 2,2; INK 7;"TIME:500"
 3620 FOR F=500 TO 0 STEP -1
 3625 IF INKEY$=K$(3) THEN LET T =T+1:GO TO 3650
 3630 IF INKEY$=K$(3) THEN LET T=T+1:  GO TO 3650
 3640 NEXT F: GO TO 3700
 3650 IF INKEY$ <>""  THEN LET F=F -1: PRINT AT 2,7; INK 7;F;" ":IF F>0 THEN GO TO 3650
 3655 IF F<1 THEN GO TO 3700
 3660 NEXT F
 3700 LET T=T*2:LET T=T-15*Y:LET T=T-36:LET T=19-T:IF T<0 THEN LET T=0
 3710 FOR F=18 TO T STEP -1:PRINT AT F,15; INK 2;"\g"; INK 6;"\h"; AT F+1,15;"  ":FOR G=1 TO 40:NEXT G:LET S=S+20:NEXT F
 3720 FOR F=15 TO 29:FOR G=1 TO 40:NEXT G:PRINT AT T,F; INK 2;" \g"; INK 6;"\h":IF ATTR (T,F+3)=6 THEN FOR G=1 TO 40:NEXT G:  GO TO 3750
 3730 NEXT F:GO TO 3800
 3750 INK 2:PRINT AT T,F+1;" \g": FOR G=1 TO 40:NEXT G:PRINT AT T,F+2;"\a":FOR J=1 TO 40:NEXT J:PRINT AT 19,F+2;"F":INK 5:GO SUB 9000:GO TO 3500
 3800 REM NEXT YEAR
 4010 LET Y=Y+1
 4020 CLS :PRINT AT 6,0;"WELL DONE - YEAR ";Y+1983;" COMPLETED!"; AT 12,0;"YOU NOW PROGRESS TO YEAR ";Y+1984'"WHICH OBVIOUSLY, IS HARDER."
 4030 FOR F=1 TO 200:NEXT F:GO TO 900
 9000 REM YOU LOSE A LIFE
 9010 LET L=L-1:FOR F=1 TO 100:NEXT F:CLS :PRINT AT 6,2;"BAD LUCK ! - YOU LOST A LIFE"; AT 12,10;L;" LIVES LEFR"
 9015 FOR F=15 TO 0 STEP -1:BEEP .1,F:NEXT F
 9020 FOR F=1 TO 200:NEXT F:CLS :IF L=0 THEN GO TO 9100
 9030 INK 2:RETURN 
 9100 PRINT AT 4,0;"YOU REACHED YEAR ";Y+1984;" (STAGE ";E;")"; AT 8,0;"YOU SCORED ";S
 9110 IF S >=H THEN  PRINT AT 12,0;"YOU BEAT THE HIGH SCORE         THE HIGH SCORE IS NOW ";S:LET H=S:PRINT "PLEASE ENTER YOUR NAME": INPUT  LINE H$
 9120 IF S<H THEN PRINT AT 12,0; "THE HIGH SCORE REMAINS ";H'"BY ";H$
 9130 PRINT AT 19,0;"PRESS ANY KEYTO PLAY AGAIN"
 9140 IF INKEY$="" THEN GO TO  9140
 9150 RESTORE :CLS :GO TO 30
 9210 BRIGHT 1:INK 5:PRINT '"You play the part of Santa ("; INK 2;"\a"; INK 5;")"'"delivering presents to the last house on his round."
 9220 PRINT '"STAGE 1:Use the  left and right keys to guide Santa through the snow avoiding the trees ("; INK 4;"\b"; INK 5;"),the igloos ("; INK 7;"\c"; INK 5;"), the penguins ("; INK 7;"\d"; INK  5;")and the snowmen)"; INK 7; "\e"; INK 5;")."
 9230 PRINT '"STAGE 2: Press the down key to parachute from your  sleigh ("; INK 2;"\g"; INK 6;"\h"; INK 5;") down onto the roof.L and on the chimney("; INK 6;"\k"; INK 5;")for a points bonus."
 9235 GO SUB 9700
 9240 PRINT AT 3,0;"STAGE 3: Now you are inside the chimney and must get to the     bottom using the lift (\..\..\..).    Press the right key to step onto the lift and, when the brick ("; INK 6;"\n"; INK 5;")at the bottom disappears,press the right key before your time limit runs out." 
 9250 PRINT '"STAGE 4: Cross the floor to the Christmas tree using the left key. When a snowball(  "; INK 7;"\p"; INK 5;")appears wait until it is near you and use the up key to jump over it.    Wait until the snowball leaves  the screen and then continue    towards the Christmas tree."
 9260 PRINT AT 3,0;"STAGE 5: Press the up key as   many times as  you can while the clock ticks away. The more timesyou press it the more height thesleigh )"; INK 2 ;"\g"; INK 6;"\h"; INK 5;") will achieve. You   must get high enough to clear   the houses otherwise you'll     crash."  
 9270 PRINT '"At the beginning of each screen you will be given a brief       reminder of these instructions and then traffic lights will    count you down to  the start.   When the green light  ("; INK 4;"\o"; INK 5;")lights  up ("; INK 4;"\p"; INK 5;") the screen will start." 
 9280 GO TO 9700
 9300 PRINT AT 8,12;"REMEMBER":PRINT AT 9,0:GO TO E*50+9300
 9350 PRINT "Use keys ";k$(1);" and ";k$(2);" to avoid the   obstacles. Be prepared for the  speed increase towards the end !":GO TO 9700
 9400 PRINT "Press key ";k$(4);" when Santa is over  the rooftop.":GO TO 9700
 9450 PRINT "Press key ";k$(2);" to step onto the    lift. When the brick disappears press key"; k$(1);" to step off.":GO TO 9700
 9500 PRINT "Press key ";k$(1);" to move towards the tree and key";k$(3);"  to jump the      snowballs.":GO TO 9700
 9550 PRINT "Press key ";k$(3);" as fast as you can to achieve height. Don't hold   key ";k$(3); " down, it wont work '"  
 9700 PRINT AT 21,3;"PRESS ANY KEY TO CONTINUE"
 9710 IF INKEY$="" THEN GO TO  9710
 9720 PRINT AT 3,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
 9730 RETURN 
 9800 REM NEXT SCREEN MESSAGE
 9810 CLS :PRINT AT 6,11;"YEAR:";Y+1984; AT 12,12;"STAGE ";E:FOR F=1 TO 80:NEXT F:CLS :GO SUB 9300:RETURN 
 9820 REM END OF SCREEN MESSAGE
 9830 CLS :PRINT AT 5,11;"YEAR:";Y+1984; AT 10,0;"WELL DONE '- STAGE ";E;" COMPLETED"; AT 15,11;" SCORE:";S
 9840 FOR F=10 TO 25:BEEP .1,F:NEXT F:FOR F=1 TO 200:NEXT F
 9850 RETURN 
 9900 REM TRAFFIC LIGHTS
 9910 PRINT AT 1,0; INK 2;"\p"; AT 2,0; INK 6;"\o"; AT 3,0; INK 4;"\o":FOR F=1 TO 50:NEXT F:PRINT AT 2,0; INK 6;"\p":FOR F=1 TO 50:NEXT F:PRINT AT 1,0; INK 2;"\o"; AT 2,0; INK 6;"\o"; AT 3,0; INK 4;"P":RETURN 

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

People

No people associated with this content.

Scroll to Top