Block Buster

Developer(s): Gregory Harder
Date: 1986
Type: Cassette
Platform(s): TS 1000
Tags: Game

Block Buster is a puzzle-action game in which the player steers a character around a screen full of blocks, defusing time bombs before they detonate. The program is split into two parts: Part 1 is a loader that checks for an 8K NVM (non-volatile memory), then chains to Part 2, which contains the full game logic. Part 2 makes extensive use of high-resolution BASIC via a machine-code routine address stored in HR (19473), with nearly every display and print operation gated through IF USR HR THEN to drive a custom hi-res display layer. User-defined graphics (UDGs) are loaded via LPRINT UDG commands, defining 20 custom characters for the player sprite, flag, bombs, and decorative block tiles. The game uses a two-row string array M$ to represent the playfield and supports row-shifting left or right with keys 1 and 2, wrapping blocks toroidally around the screen edges.


Program Analysis

Program Structure

The listing comprises two distinct programs. The first (lines 0–230) is a loader: it saves itself, displays a readiness message, checks for the NVM via USR 16516, and chains to the second part with LOAD "BLOCK[2]". The second program (lines 0–9010, saved as BLOCK[2]) contains the complete game engine, organized into clearly commented sections:

  • Lines 1–1240: Main game loop, scoring, movement, and level progression
  • Lines 1250–1400: Screen and playfield setup (REM * SET UP SCREEN *)
  • Lines 1410–1490: Display refresh and random-position subroutine
  • Lines 1500–1590: Initialization, hi-res mode setup, and UDG data loading
  • Lines 1600–1710: Instructions display
  • Line 9000–9010: Save and restart

Hi-Res BASIC Driver

Almost every output statement is prefixed with IF USR HR THEN, where HR=19473 is set at line 1500. This machine-code entry point implements a hi-res graphics layer; the return value controls whether normal BASIC output proceeds. This idiom allows the same BASIC source to drive a custom display system while remaining syntactically valid. LPRINT is used to send commands to the hi-res driver (e.g., LPRINT I;... for line drawing, LPRINT XD;... for divider lines, LPRINT UDG;"[A]";... for UDG definition).

User-Defined Graphics

UDGs are defined in lines 1560–1590 using LPRINT UDG with hex byte strings. Twenty characters (A through T) are defined, covering: the player sprite (L, M, N, O), flag (D, E, F, G), active bomb (H, I, J, K), safe block tiles (A, B, C), and checkerboard/gray block tiles (Q, R, S, T) used for the unshiftable row introduced after level 2.

Playfield Representation

The playfield is a 20×30 string array M$(20,30). Each on-screen entity occupies a 2×2 cell (two rows, two columns). The player position is tracked by row A and column B, the flag by F1,F2, and the active bomb by B1,B2. Row shifting (keys 1 and 2) is implemented by string rotation at lines 720–800, appending the end of each row string to the front, achieving toroidal wrapping without any element-by-element loop.

Game Mechanics

  • Movement uses keys 5/6/7/8 (cursor keys), with toroidal screen wrapping enforced at lines 670–680.
  • Row shift (keys 1/2) rotates the player’s two-row slice of M$ and adjusts flag/bomb column references accordingly.
  • Bombs have a countdown timer T initialized to 50-L*4 (shorter at higher levels). The countdown is displayed using the pre-built two-digit string array N$(100,2).
  • The bonus object array M(L*3+3) tracks row positions of all flags on the current level.
  • The unshiftable gray row is introduced when L>2: D=-1+(INT(RND*10)*2+2 AND L>2) selects a row index, and lines 1320–1330 fill that row with the Q/R/S/T UDG tile set.

Scoring

EventPoints
Moving onto a new block+2
Reaching a flag+20
Defusing a bomb+L×15
Level completion bonus+55×L

The score display uses a pre-built lookup array N$(100,2) constructed at initialization (lines 1505–1510) by taking the last two characters of STR$(99+N), giving zero-padded two-digit strings “00”–”99″. The score is split into hundreds (SC1) and remainder (SC2) for display.

Key BASIC Idioms

  • AND used as a conditional multiplier: e.g., 2 AND X$="6" evaluates to 2 if true, 0 if false — a compact movement delta calculation.
  • VAL "number" in GOTO/GOSUB targets as a memory optimization (not used here, but GO TO targets are direct line numbers).
  • String slicing for rotation: M$(A+X,3 TO )+M$(A+X) drops the first two columns and appends them to the end for a rightward shift.
  • The PAUSE 4E4 (40000 frames) used in instructions/title screens acts as a long wait, effectively blocking until PAUSE is interrupted by a keypress.

Notable Anomalies

Line 700 contains the condition D=A to prevent row-shifting when the player is on the immovable gray row. Lines 1120–1147 handle the game-over restart loop: IF USR HR THEN RETURN at line 1140 exits to a calling context under the hi-res driver, while line 1145 STOP and lines 1146–1147 provide fallback paths (RUN and GOTO 30) depending on the execution context. Line 160 in the first program uses IF USR 16516 THEN to test NVM presence before proceeding — a hardware capability check via machine code.

REM Line 0 Data

Both programs carry a REM at line 0 containing binary data — a common technique for embedding machine code or character set data in the program area. The first program’s REM contains graphics and machine-code bytes for the hi-res character set described in line 10 (Mode 1 and Mode 2 character sets plus a full UDG set). The second program’s REM 0 holds the hi-res BASIC runtime itself, referenced throughout via USR HR (HR=19473).

Content

Appears On

Related Products

Related Articles

Related Content

Image Gallery

Source Code

   0 REM ##5[(]RND) S▘ ▞ GOSUB [K]TAN          LIST  LIST  LIST  LIST     ????     COPY COPY COPY COPY         LIST  LIST  LIST  LIST  LIST  LIST  LIST  LIST  LIST  LIST  LIST  LIST ???? LIST  LIST  LIST  LIST  COPY COPY COPY COPY LIST  LIST  LIST  LIST [E]#[E]#[E]#[E]#    [E]#[E]#[E]#[E]#     88      06#44#  ▒YCY~~Y▒   (  (  WPI▖▒ ▒  ▖▒▒▒▒▖  4((((4   (▒▖▒(   ▖▒(▒▖    Y Y    ▒▒Y▒▒     Y     =▒Y▒=   ▝▖▒(4   (  ((4     ▒▒(     //  ######  S////W  ##▖###  #▖2▞##  £0O##▖  #RND#£##  #RND####  #£££££  W88###  ####££   #▖###  RNDRND####   #####  ▖▖####   #####  WK#KKK   ####▖# ###### 4 4KKKK ▖ ▖▞▞▞## ######  S////W   #####   #####   #####   ####RNDRND  ####▖▞  #####   #RND#£#  /#////   #####   PI#W//   #####   #8W8#   ####▞#  #▖###  COPY COPY COPY COPY COPY COPY COPY COPY???? COPY COPY COPY COPY LIST  LIST  LIST  LIST  COPY COPY COPY COPY     COPY COPY COPY COPY COPY COPY COPY COPY???????????? LIST  LIST  LIST  LIST ????    ????#[E]#[E]#[E]#[E] COPY COPY COPY COPY#[E]#[E]#[E]#[E] COPY COPY COPY COPY444RND     /8/E#U  8#88#8  ##▒(A#  //// / RNDRNDRNDRNDRNDRNDRNDRND▘▘▘▘▘▘▘▘ ▒▖#▖▒   (4#4(   COPY               COPY     COPY    W###RNDW  ▝▖▒     4(      £(##(£  #(00(#  #PIPIPIPI#  4KWWK4  ▖£WW£▖ RNDRNDRNDRNDRNDRNDRND COPY COPYRNDRNDRNDRNDRNDRNDRND▘▘▘▘▘▘▘ COPY COPY▘▘▘▘▘▘▘ WPI##PIW  M#      (#((((  W8####  ######  ######  ######  ######  ######  ######  ######  //////  £££###  ######  ######  ######  #PIPI###  ######  ######  ######  ######  #RND#££#  #/////  ######  PIPI#W//  ######  ##S###  ###///  ##/K##  COPY COPY COPY COPY COPY COPY COPY COPY???? COPY COPY COPY COPY LIST  LIST  LIST  LIST  COPY COPY COPY COPY     COPY COPY COPY COPY COPY COPY COPY COPY???????????? LIST  LIST  LIST  LIST ????    ????#[E]#[E]#[E]#[E] COPY COPY COPY COPY#[E]#[E]#[E]#[E] COPY COPY COPY COPY ======  ##▒(A#  /8/E#U  ▖▖▝     (((( (  ▖▒▒/▒▒▖ 4((/((4 COPY         M#     0((((0  W###RNDW  S▒▒▒▒S  ▒▖#▖▒   (4#4(   (S#((( 444RND     ▘Y#===  S###C#   ▞#[)]#▞   ▒  6    6  ▒   ▘▝#[C](  4#(4#   #(4(#    #6(▒(6#((#(( #  ▒=(((#4  S▖W#W  RNDRND####   S#RNDRNDS  ▖▖W##W   S##RNDS  04#444   S##W▖S RNDRND####  ( K((S  ▒ /▒▒#K 48CKC8  K((((S   #####   #####   S###S   ####RNDRND  W##W▖▞  GM444   WRNDW▝W  4#448/   ####W   ###C(   ####C   #C(C#   6662▝0  #▒(4#           
  10 REM LOWER CASE/NEW SYMBOLS          (MODE 1 CHARACTER SET)                                          PLUS ONE COMPLETE SET           OF UDG, TECH. CHARAC-           TER SET.                        (MODE 2 CHARACTER SET)
  20 REM [B][L][O][C][K][B][U][S][T][E][R]█[P][A][R][T]█[1]
  30 REM [*][E][N][T][E][R]█[R][U][N]█[T][O]█[S][A][V][E]
  40 REM 
  50 SAVE "BLOCK[1]"
  60 SLOW
 160 CLS
 170 PRINT "BLOCKBUSTER PART 1 HAS LOADED.","BE SURE YOUR 8K NVM IS ENABLED"
 180 PAUSE 300
 190 IF USR 16516 THEN
 200 CLS
 210 PRINT "LOADING BLOCKBUSTER PART 2"
 220 PAUSE 100
 230 LOAD "BLOCK[2]"
 
   0 REM [(][C][)]█[1][9][8][6]█[G][.][C][.][H][A][R][D][E][R]##Y2 GOSUB #<>5▟▝TAN  PRINT # RETURN,C▌LN [*]RNDINT / LET TAN 6-RNDLN #? FASTLN LN + LPRINT TAN LN [H]RND PRINT LN [4]RND7LN [H]RND# LET #TAN 7# RETURN#C▀ RETURN;""6-RNDTAN A ##▞▌ACS 9ACS =( IF ,,▘ 4,,TAN 7LN [T]RNDLN [4]RNDLN ,,INKEY$ ##ACS ZACS ZACS Z##STR$ LN STR$ RND LET J NEW▛W#TAN Y3[)]K▌LN [*]RNDINT (Y[Z][(]SQR LN [*]RNDINT 25  6AT ZA4##<▘ COPY*Q  GOSUB [K]TAN  NEXT Y▞# ( CLEARLEN  LIST W4 CLEAR▞"" CLEARACS ##C▝▞[K])4 5 4##INKEY$   ▌ASN #INKEY$ ;# GOSUB ###▞ NEWE£RND ###) RUN ▙;Y2 GOSUB #Y PRINT ▘▛▝ CLEARACS ##CODE [P]▝LN [>]▝LN 4▝<>5GINKEY$ #[8]▝ CLEARACS #▚/▖ CLEARACS #LEN E£RND▘9  GOSUB PIF FOR 5 █;6#INKEY$  FOR  GOSUB [K]LN F?<>5GINKEY$ TAN 7LN [T]RNDLN [4]RND##LN ▞INKEY$ VAL 7LN [H]RNDAT LN STR$ RND#TAN 2 COPY/▝2 STR$ 7LN [T]RNDLN ,,INKEY$ SGN  GOSUB ##ZLN  LET RND##?( CLEARACS .*PI▌4▝▞▒▛( CLEAR#TAN Y COPY/▘[J]MVAL Z CLEARACS #[:]7LN [T]RNDLN ,,INKEY$ # RETURN,4"7 GOSUB ##ZLN [T]RNDLN ,,INKEY$ ## GOSUB ##ZVAL #[)]-▘K▖ GOSUB #- COPY4▝-  FAST##MSQR Z LET [(]2▘K▖ GOSUB #2 COPY4▝2 ##MINT Z#[W]S▞##- /▝2  GOSUB #SGN Z6PEEK Z#[B]3#A 6STR$ ZAT VAL Y[Z][(] PRINT UVAL Z# LET  CLEARACS ##4▌LN SGN INKEY$ /▀LN USR #UPEEK Z#▞ USTR$ Z##,,#MSTR$ Z GOSUB #SGN ZUUSR Z# GOSUB PIS▒#MSTR$ Z GOSUB #INT ZAT #▙##▄#5CHR$ ZOUUSR Z[Y]4[N] GOSUB ##ZTAN Y COPY/▘[J]MVAL Z7LN [T]RNDLN [4]RNDVAL 7LN [H]RND#I 6INT Z#6SGN ZAT Y▘ PRINT VAL VAL EINT Z GOSUB #SGN Z▞▌VAL ACS EACS .( IF [R] GOSUB #6INT Z GOSUB #SGN ZAT ACS GACS 1( IF ;6SGN Z GOSUB #INT ZAT #ACS <[~~]##ACS +[£]#Y[Z][(]S,, PRINT UVAL Z# LET LN SGN INKEY$ AT  LET W RETURNASN S[O]TAN Y▘MINT ZLN COS RNDCOS LN [H]RNDMINT ZLN TAN RNDCOS 7LN [T]RNDLN [4]RND[S]S▀#INKEY$ #LN (INKEY$ #INKEY$ LN (INKEY$ #PI GOSUB #SQR Z[)]W PRINT 7LN [T]RND[S]K▀#INKEY$ # GOSUB #ABS Z[(]W4▘XSGN # GOSUB #USR ZUPEEK Z#USGN Z#[B]LN  INPUT RND6CHR$ ZUABS Z#USGN Z#[B]LN  INPUT RND6**Z£TAN LN +#4*UINT Z#5 4▘ /#J#7"#[L]4 RUN +4 INPUT TAN USTR$ ZECHR$ Z GOSUB #**Z6 AND Z GOSUB #>=Z PRINT  FAST GOSUB # LPRINT C#UPEEK ZLN  INKEY$ STR$ VAL #3ZACS <( IF AT ACS .*( CLS#SGN 7 FAST[B] GOSUB # LPRINT C▌#J#/ NEXT UABS ZLN  INKEY$ Y,,[(]#VAL ,*ZACS 1( IF AT ACS +3( CLS>▘4 E>=Z,,6>=Z FOR E AND Z,,6 AND Z LET X4[A]5INT ZP4[?]TAN UUSR Z RETURN▒4▖,J/NOT UPEEK ZLN  INKEY$ VAL ,3ZACS +( IF AT ACS 1*( CLS#UABS ZJ NEW▛C$#,VAL ?ACS 0( CLSAT ACS ▖( UNPLOT #/[E]E(RND#[T]COS  RETURN█4▌LN [*]RNDINT ▘VAL LN  PAUSE ,,AT  FOR / GOTO  PRINT  SCROLL FAST:RND▟#LN ##7 FAST▞▌[J]#( CLEARSGN  LPRINT  LET TAN LN  SCROLLRND#?( CLEARLN ##K▀Y▟>LN COS RNDTAB ;#TAN LN  SCROLLRND FASTAT LN 4+ FASTLN ##AT  FAST##LN  PLOT ;LN [~~]+ LPRINT / STEP LN  SCROLLRND#▞ / SLOW###Y[Z][(]STR$ VAL  PRINT LN SGN INKEY$  LET AT SGN TAN 2 COPY/▝2 STR$ LN C#SGN USTR$ Z#UPEEK Z5SGN Z PRINT  FASTLN [D]#+C▞WLN [J]#/ RUN UUSR Z# LPRINT  LET F FASTLN [D]#+C▞£LN [J]#/ RUN USTR$ Z# LPRINT UABS Z PRINT  FASTLN [D]#+C▞XLN [J]#/ RUN UUSR Z# LPRINT  LET 7LN [D]#+COS $LN [J]#/ SAVE LN 7?2"" CLEARACS ##C▝2[K]5 4[J]PEEK  CLSLN #?ABS ▐▒<= CLS*K CLS-4▞▒#<= CLS3K CLS# NEW█PEEK  CLSACS )( PAUSE 7+4 FOR <= CLS3K CLSLN  REM #/SGN 76-RNDLN #?LN [B]:##▘▘COS  CLEARACS V#""( RAND $4 PLOT .#[N]4 INPUT TAN 7# RETURN,C> RETURN;C7 RETURN#CN RETURNAT CQ RETURNTAB CINKEY$ /# GOSUB #AT Z# RETURN(Y(S▌#LEN ▒#[J]# GOSUB #AT Z▞ COPY7# RETURN#C" RETURN;4COS ▖#M""Z/ LOAD TAN  GOSUB #AT ZF/<=7LN [T]RND##LN ▞INKEY$  GOSUB #AT Z/[E]7LN [H]RND NEW3 GOSUB #AT Z[T]#K GOTO ▖/ DIM 6-RNDLN #? FAST CLEARACS ▘#C▀LN STR$ .LN  SAVE < LPRINT  FAST#[L]C£,VAL STR$ LN ▞#SGN AT <"/ LIST  LPRINT /VAL  RETURN""4▖Y"/U PRINT  NEW# RETURNRNDK▛ LET  CLEARACS ▘LEN /G CLEARACS ▘#C~~[J] CLEARACS ▘▚LN ##/▖ CLEARACS ▘LEN  LET LN #,,~~ PRINT VAL  NEW#LN ##AT ▀ LET  RETURN█S LET  CLEARACS ▘▚[J]M<=Z GOSUB #AT ZVAL #Y3[)]K▒AT : #LEN ▒#VAL #[B]*[B]**- ACS >#5 2; FASTLN STR$ RNDSGN U""Z RETURN▝C/ RETURN▘4BU<=Z RETURNAS4 RETURN[A]K0 FAST5 2; FOR  LPRINT /<U<=ZACS #C▞ FAST5 0/ INPUT  FAST5 ,/ CONT Y▒ PRINT STR$ , PRINT U""Z RETURN 4"U<=ZACS #C▖ LET J/▘ LET  FOR 5 COPYR[B] GOSUB # FOR  AND =INKEY$ #)4 ;SGN  LET <X4PEEK AT £ GOSUB #AT ZTAN LN COS RNDY*C▀LN [H]RND)  WEAT Z FAST GOSUB #AT Z GOSUB #£RND< PRINT ▞4,VAL STR$ LN ##SGN AT <( PRINT  LET X4 GOSUB  LPRINT 6AT ZTAN LN COS RNDCATN LN [H]RNDW PRINT #Y""CHR$ ▒( UNPLOT ## LET /LEN 7LN [T]RNDLN ,,INKEY$ LN [4]RNDTAN Y COPY/▘[J]MVAL Z CLEARACS #[:]LN 6# GOSUB #NOT ZE-RNDLN 6# GOSUB # OR ZE-RND7LN [T]RNDLN ,,INKEY$  GOSUB #<=ZE#Z FAST GOSUB ##ZE OR Z FASTLN £PI LPRINT 6#ZENOT Z FASTLN £PI LPRINT 6#ZE<=ZLN £PI LPRINT 6#ZTAN LN +#4.UINT Z5 4##▘4 ,,▘ STEP * GOSUB [K]▞4F#( UNPLOT X4 DIM TAN USGN Z RETURN C##UPEEK Z#VAL Y[Z][(]VAL  PRINT WVAL LN  LET RNDSGN Y▒[S]4*UABS Z[<] RETURN▒S?#▘4  GOSUB PI# LET AT #LEN ▒#/ OR #?( CLEAR2 COPYS▘0 LET AT VAL LN SGN INKEY$ AT #▞ UABS Z##▀[B] GOSUB PIPIK[U]AT ▌USQR Z[S]4[L]USQR Z#EPEEK ZY COPY[W]4▘8# FASTVAL Y[Z][(]2 LN SGN INKEY$ AT £ LPRINT 94 LIST 5INT ZP4▟TAN LN +#40UINT Z5 COPYR##▘4  GOSUB PI▘ STEP * GOSUB [S]▞47#( UNPLOT X4 CONT TAN USQR Z RETURN[Z]C##UPEEK Z#VAL Y[Z][(]VAL  PRINT XVAL LN  LET RNDSGN Y▒[S]4-UABS Z[<] RETURN▒S:#▘4 ,,# LET AT #LEN ▒#/ AND #?( CLEAR2 COPYS▘0 LET AT VAL LN SGN INKEY$ AT #▞ UABS Z##▀[B] GOSUB PIPIK[V]AT ▖USGN Z RETURN C▀[S]4[I]USGN Z#EPEEK ZY COPY[W]4▘8# FASTVAL Y[Z][(]2 LN SGN INKEY$ AT £ LPRINT 94 LIST 5INT ZPTAB PI#TAN LN +#4*UINT Z#5 COPYR▞4#[B]ACS -F( CLS[8]4 POKE 14 INPUT TAN USGN Z#UPEEK Z#VAL Y[Z][(]VAL  PRINT £LN  LET RND#?( CLEAR2 COPYS▘0 LET AT VAL LN SGN INKEY$ AT UABS Z£[T]4 STEP AT ▌# RETURN COPYC▒USQR Z##[U]KSQR  GOSUB #SGN Z#INKEY$ #USTR$ Z# FASTVAL Y[Z][(]2 LN SGN INKEY$ AT ▌ LPRINT H4 LIST 5INT ZP4[B]TAN LN +#41UINT Z#5 4[B]▞4ACS 27( CLS▘ S[B] FAST GOSUB PI LPRINT 4 INPUT 14 CONT TAN USGN Z#UABS Z#VAL Y[Z][(]VAL  PRINT $LN  LET RNDY,,[(]##▛( CLEAR2 COPYS▘0 LET AT VAL LN SGN INKEY$ AT UPEEK Z$[T]4>=AT ▌# RETURN COPYC▒USQR Z##[U]KATN USGN Z#UPEEK Z#USTR$ Z# FASTVAL Y[Z][(]2 LN SGN INKEY$ AT ▌ LPRINT H4 LIST 5INT ZP4[6]TAN 7# RETURN0K▌LN [*]RNDINT 1 RETURNGK RUN CHR$ 0TAN LN [X]##ACS 4ACS 4ACS 4ACS 4LN [X]#█#7# RETURN"#TAN 7# RETURN"TAB ;#7#ACS #C▝CHR$ RND)  77 FAST▞▒A # FOR ;( CLEAR FOR 5 S; FOR  LPRINT 7LN INT #>4▌76-RNDTAN </ PAUSE 7LN [H]RND RETURN4) ▞SSTR$ LN [*]RNDINT .▘4 ,, FAST▘ S GOSUB PI LPRINT **▘ / GOSUB PITAN 7LN [H]RND RETURN4K LPRINT LN [4]RND[B]***- #5 Y;6**Z SCROLLLN [T]RND GOSUB # AND ZTAN LN W#Y[Z][(]K▞#CHR$ ""#/ PRINT LN  LET RND6>=ZVAL  FAST) STOPZ▞▒VAL #>7<#>LN E#F<AT ( LET  LPRINT AT  GOSUB #**ZY▒ PRINT VAL  FAST,#Y▒[S]C,,[J]ACS )*( CLS[Q]#7#[Q]# LPRINT LN E#AT < LET X4 STEP TAN  CLEARACS #EXP LN W# GOSUB # AND ZE-RND# RETURN,4$7 GOSUB ##Z FASTLN ## LPRINT LN [T]RND#~~PIVAL ▘[X]▝"#[L]4 CLSLN  SLOW#AT ###E>=Z) STOPZ▞▒VAL ,#7<,#LN E#F<AT ( LET TAN LN COS RND▘  C,,6-RNDLN #?LN [B]:▀ GOSUB #CHR$ #TAN LN COS RNDTAB ;#/TAN ▞?▌4 CLEARTAN <= RETURN▞▞)  .#[N]4 CLS( RAND TAN #<= RETURN#LN .#PEEK  COPYLN .#TAN #<= RETURN#LN .#LN .#LN .#PEEK  COPYLN .#LN .#LN .#TAN LN X#:▒▛>=X#USR K#$TAB ##LN K#TAN LN 7?LN 5#5 CONT ▀LN K#F#[P]4 SAVE Y CLEAR PRINT LN ## LET LN ##) 4PI#VAL ,LN ##<AT "#[L]4 POKE TAN LN #?ABS [A]▀▞ - COPY+<= RETURNPEEK  COPY[B] PAUSE [5]##[U] AND [3]##[)]#*#K DIM  OR TAN LN 7? OR : GOTO 2 CLS OR  OR LN [*]# RETURN CLEAR4 SAVE  OR LN [*]# RETURN CLEAR4 LIST ) 4## OR LN [*]#><F#[P]4 PRINT #▟INKEY$       1""AT Y▖PEEK  CLS0LN ###["]INKEY$ E-RND# RETURN;C# RETURN#C▌LN [*]RNDINT + LPRINT 6-RND▘  TAN E-RND# RETURN THENC▌LN [*]RNDINT ) FAST7#),,#STR$  RETURN LLIST ASN £# RETURN LOAD ASN [S]# RETURN LIST ASN  AND # RETURN PAUSE ASN ## RETURN PRINT ASN ## RETURN PLOT ASN [Y]INKEY$  RETURN RUN ASN ▟INKEY$  RETURN SAVE ASN ## RETURN CLSASN ;INKEY$  RETURN UNPLOT ASN TAB INKEY$  RETURN CLEARASN ▗INKEY$  RETURN RETURNASN [*]RND RETURN COPYASN /# RETURN LPRINT 4[J]SGN ) SAVE #STR$ 7# RETURNXC##7# RETURN#C[6] RETURN;4 PLOT # RETURNAASN [▒]# RETURNBASN [B]INKEY$  RETURNCASN [B]PI RETURNDASN  SCROLLINKEY$  RETURNIASN ## RETURNLASN [5]# RETURNPASN ## RETURNRASN [T]# RETURNS42F#7 RETURNDASN ,# RETURNEASN <# RETURNMASN [L]# RETURNPASN ## RETURNSASN  UNPLOT #/# RETURNTASN H# RETURNUASN  NEW# RETURNW4UF#7 RETURNDASN 5# RETURNLASN LEN # RETURNRASN W# RETURNUASN ▟#/57#7# RETURN#C; RETURN;4 PLOT # RETURNCASN [F]PI RETURNDASN  FOR INKEY$  RETURNRASN [X]# RETURNTASN L##;#          
   1 REM CORE=V1.01
  10 LET HI=0
  20 GOSUB 1500
  30 IF USR HR THEN CLS
  40 IF USR HR THEN PRINT "PRESS ""I"" FOR INSTRUCTIONS,",,,"ANY OTHER KEY TO PLAY"
  50 IF INKEY$ <>"" THEN GOTO 50
  60 IF INKEY$ ="" THEN GOTO 60
  70 IF INKEY$ ="I" THEN GOSUB 1600
  80 RAND 
  90 LET SC=0
 100 LET L=1
 110 LET L$="[P][P][P] "
 120 LET A=19
 130 LET B=15
 140 LET AA=A
 150 LET BB=B
 160 LET D=-1+(INT (RND*10)*2+2 AND L>2)
 170 GOSUB 1250
 180 LET F1=Y
 190 LET F2=Z
 200 LET T=-1
 210 LET BO=1
 220 LET B1=T
 230 LET B2=T
 240 REM * MAIN GAME *
 250 IF USR HR THEN PRINT AT F1*8+8,F2;;;;"[D][E]";AT F1*8+16,F2;"[F][G]";AT  AA*8+8,BB;"  ";AT AA*8+16,BB;"  "
 255 IF USR HR THEN PRINT AT A*8+8,B;"[L][M]";AT A*8+16,B;"[N][O]"
 260 IF NOT (AA<>A OR BB<>B) THEN GOTO 320
 270 LET SC=SC+2
 290 LET M$(AA,BB TO BB+1)="  "
 300 LET M$(AA+1,BB TO BB+1)="  "
 310 IF M$(A,B)=" " AND (F1<>A OR F2<>B) THEN GOTO 890
 320 LET AA=A
 330 LET BB=B
 340 IF NOT (A=F1 AND B=F2) THEN GOTO 390
 350 GOSUB 1450
 360 LET F1=Y
 370 LET F2=Z
 380 LET SC=SC+20
 390 IF NOT (A=B1 AND B=B2) THEN GOTO 450
 400 LET BO=BO+1
 410 LET SC=SC+L*15
 420 LET T=-1
 430 LET B1=T
 440 LET B2=T
 450 IF M$(A,B)="[H]" OR T=0 THEN GOTO 890
 460 IF BO>L*3+3 THEN GOTO 1150
 465 LET SC1=INT (SC/100)
 467 LET SC2=SC-100*SC1
 470 IF USR HR THEN PRINT AT 0,6;N$(SC1+1);N$(SC2+1)
 480 IF NOT (T>0) THEN GOTO 520
 490 LET T=T-1
 500 IF USR HR THEN PRINT AT B1*8+8,B2;"**";AT B1*8+16,B2;"**";AT 8*(B1+1+(INT (T/2)=T/2)),B2;N$(T+1)
 510 GOTO 630
 520 LET Y=M(BO)
 530 FOR N=0 TO INT (RND*4)
 540 LET Z=INT (RND*15)*2+1
 550 IF M$(Y,Z)="[H]" THEN GOTO 580
 560 NEXT N
 570 GOTO 630
 580 LET T=50-L*4
 590 LET B1=Y
 600 LET B2=Z
 610 LET M$(Y,Z TO Z+1)="█[A]"
 620 LET M$(Y+1,Z TO Z+1)="[B][C]"
 630 LET X$=INKEY$ 
 640 IF X$<"5" THEN GOTO 700
 650 LET A=A+(2 AND X$="6")-(2 AND X$="7")
 660 LET B=B+(2 AND X$="8")-(2 AND X$="5")
 670 LET A=A+(20 AND A<1)-(20 AND A>19)
 680 LET B=B+(30 AND B<1)-(30 AND B>29)
 690 GOTO 240
 700 IF X$<>"1" AND X$<>"2" OR D=A THEN GOTO 240
 710 IF X$="2" THEN GOTO 780
 720 FOR X=0 TO 1
 730 LET M$(A+X)=M$(A+X,3 TO )+M$(A+X)
 735 IF USR HR THEN PRINT AT (A+X)*8+8,1;M$(A+X)
 740 NEXT X
 750 IF A=F1 THEN LET F2=F2-2
 760 IF A=B1 THEN LET B2=B2-2
 770 GOTO 860
 780 FOR X=0 TO 1
 790 LET M$(A+X)=M$(A+X,29 TO )+M$(A+X)
 795 IF USR HR THEN PRINT AT (A+X)*8+8,1;M$(A+X)
 800 NEXT X
 810 IF A=F1 THEN LET F2=F2+2
 820 IF A=B1 THEN LET B2=B2+2
 860 LET F2=F2+(30 AND F2=-1)-(30 AND F2=31)
 870 LET B2=B2+(30 AND B2=-1)-(30 AND B2=31)
 880 GOTO 240
 890 REM * LOSE A LIFE *
 910 IF USR HR THEN LPRINT I;100,A*8-183,A*8-168,B*8,B*8+15
 920 LET L$=L$(2 TO )
 930 IF L$=" " THEN GOTO 1080
 940 IF NOT (M$(A,B)="[H]" OR M$(A,B)=" ") THEN GOTO 1010
 950 GOSUB 1450
 960 LET A=Y
 970 LET B=Z
 980 LET AA=A
 990 LET BB=B
 1000 IF M$(A,B)=" " THEN GOTO 940
 1010 IF T THEN GOTO 1060
 1020 LET BO=BO+1
 1030 LET T=-1
 1040 LET B1=T
 1050 LET B2=T
 1060 GOSUB 1410
 1070 GOTO 460
 1080 REM * GAME OVER *
 1090 IF USR HR THEN PRINT AT 72,1;"<<<<< G A M E    O V E R >>>>>";AT 98,1;"<<<<<<<< AGAIN (Y/N)? >>>>>>>>"
 1100 IF SC>HI THEN LET HI=SC
 1110 GOSUB 1440
 1120 IF INKEY$ ="Y" THEN GOTO 30
 1130 IF INKEY$ <>"N" THEN GOTO 1120
 1140 IF USR HR THEN RETURN
 1145 STOP
 1146 IF USR HR THEN RUN 
 1147 GOTO 30
 1150 REM * NEXT LEVEL *
 1160 LET L=L+(L<9)
 1170 LET X$="SUPER BONUS [P]-[P] "
 1175 LET X$=X$+X$+X$
 1177 LET I=1
 1180 FOR X=1 TO 50
 1190 IF USR HR THEN PRINT AT 176,1;X$(I TO I+29)
 1200 LET I=I+2-(16 AND I=15)
 1220 NEXT X
 1230 LET SC=SC+55*L
 1240 GOTO 120
 1250 REM * SET UP SCREEN *
 1260 IF USR HR THEN CLS
 1262 IF USR HR THEN LPRINT I;1,0,184,0,255
 1265 IF USR HR THEN PRINT AT 80,9;"PLEASE WAIT..."
 1270 DIM M$(20,30)
 1280 DIM M(L*3+3)
 1290 FOR X=1 TO 20 STEP 2
 1300 LET M$(X)="█[A]█[A]█[A]█[A]█[A]█[A]█[A]█[A]█[A]█[A]█[A]█[A]█[A]█[A]█[A]"
 1310 LET M$(X+1)="[B][C][B][C][B][C][B][C][B][C][B][C][B][C][B][C][B][C][B][C][B][C][B][C][B][C][B][C][B][C]"
 1320 IF X=D OR X=D+1 THEN LET M$(X)="[Q][R][Q][R][Q][R][Q][R][Q][R][Q][R][Q][R][Q][R][Q][R][Q][R][Q][R][Q][R][Q][R][Q][R][Q][R]"
 1330 IF X=D OR X=D+1 THEN LET M$(X+1)="[S][T][S][T][S][T][S][T][S][T][S][T][S][T][S][T][S][T][S][T][S][T][S][T][S][T][S][T][S][T]"
 1340 NEXT X
 1350 FOR X=1 TO L*3+3
 1360 GOSUB 1450
 1370 LET M$(Y,Z TO Z+1)="[H][I]"
 1380 LET M$(Y+1,Z TO Z+1)="[J][K]"
 1390 LET M(X)=Y
 1400 NEXT X
 1405 IF USR HR THEN LPRINT XD;8,184,247,184;XD;8,176,247,176
 1410 FOR X=1 TO 20
 1420 IF USR HR THEN PRINT AT X*8+8,1;M$(X)
 1430 NEXT X
 1440 IF USR HR THEN PRINT AT 0,0;"SCORE:";TAB 11;"HIGH:";HI;TAB 21;L$;TAB 25;"LEVEL:";L
 1450 REM * RANDOM POSITION *
 1460 LET Y=INT (RND*10)*2+1
 1470 LET Z=INT (RND*15)*2+1
 1480 IF M$(Y,Z)="[H]" OR Y=19 AND Z=15 THEN GOTO 1460
 1490 RETURN
 1500 LET HR=19473
 1502 FAST
 1504 IF USR HR THEN CLS
 1505 DIM N$(100,2)
 1506 FOR N=1 TO 100
 1508 LET N$(N)=(STR$ (99+N))(2 TO )
 1510 NEXT N
 1520 IF USR HR THEN RUN 
 1530 IF USR HR THEN PRINT ;;;"[B][L][O][C][K] [B][U][S][T][E][R]------------";AT 20,10;"[B]Y [A]DAM [B]ULL";AT 40,2;"[Z][X] [C][O][M][P][U][T][I][N][G]: [V][O][L]. 2, [N][O]. 8";AT 60,0;"[A] PROGRAM ORIGINALLY WRITTEN FORTHE [Z][X] [S][P][E][C][T][R][U][M] AND CONVERTED TO[S][R][A][M] [H][I]*[R][E][S] [B][A][S][I][C] BY [G]REGORY [C]. [H]ARDER.";AT 140,3;"[P]RESS ANY KEY TO CONTINUE."
 1540 IF USR HR THEN PAUSE 4E4
 1550 REM * U.D.G. DATA *
 1560 IF USR HR THEN LPRINT UDG;"[A]";"F8,F4,F2,F2,F2,F2,F2,F2[B]FF,FF,FF,FF,40,20,1F,00[C]F2,F2,F2,F2,0A,06,FE,00[D]00,00,0F,3F,7F,7F,7F,7F"
 1570 IF USR HR THEN LPRINT UDG;"[E]";"3C,3C,18,F8,D8,D8,D8,D8[F]7F,70,40,00,00,00,00,00[G]D8,F8,18,18,18,18,18,00[H]60,E7,FF,3F,39,39,3F,1E[I]0C,CE,FE,F8,38,38,F8,F0[J]1E,0F,1C,3C,F7,E3,60,00"
 1580 IF USR HR THEN LPRINT UDG;"[K]";"F0,E0,70,78,DE,8E,0C,00[L]07,07,3F,0F,1F,3D,39,3F[M]C0,C0,F8,E0,F0,78,38,F8[N]7B,5C,4F,27,0C,58,70,00[O]BC,74,E4,C8,60,34,1C,00[P]3C,FF,5A,7E,A5,18,24,42"
 1590 IF USR HR THEN LPRINT UDG;"[Q]";"FF,AA,D5,AA,D5,AA,D5,AA[R]F8,B4,52,B2,52,B2,52,B2[S]D5,AA,D5,FF,40,20,1F,00[T]52,B2,52,F2,0A,06,FE,00"
 1600 IF USR HR THEN CLS
 1610 IF USR HR THEN PRINT ;;;"[B][L][O][C][K] [B][U][S][T][E][R]------------",,,"[U]SE THE CURSOR KEYS TO STEER THEMAN AROUND THE SCREEN. [I]F YOU GOOFF ONE EDGE OF THE SCREEN YOU  WILL APPEAR ON THE OPPOSITE SIDE"
 1620 IF USR HR THEN PRINT "[Y]OU MUST DEFUSE THE TIME BOMBS  BEFORE THEY DETONATE, BUT YOU   MAY ONLY DO THIS ONCE THEY ARE  ACTIVATED."
 1630 IF USR HR THEN PRINT ,,"[Y]OU MAY NOT MOVE ONTO AN EMPTY  SPACE, OR ONTO AN UNACTIVATED   BOMB."
 1640 IF USR HR THEN PRINT ,,"[T]HE [R][O][W] OF BLOCKS YOU ARE ON CANBE SHIFTED LEFT OR RIGHT USING  KEYS 1 AND 2. [T]HIS MAY HELP YOU TO REACH A BOMB, ETC.",,,,,"[P]RESS ANY KEY TO CONTINUE."
 1650 IF USR HR THEN PAUSE 4E4
 1660 IF USR HR THEN CLS
 1670 IF USR HR THEN PRINT "[H]OWEVER, AFTER LEVEL 2, THERE   WILL BE A ROW OF GRAY BLOCKS    WHICH CAN[,]T BE SHIFTED.",,,"[B]ONUS POINTS ARE GIVEN FOR      REACHING A FLAG.";AT 40,0;
 1680 IF USR HR THEN PRINT ;;;;,,,,"█[A]";;;" : [A] SAFE BLOCK";;;;,"[B][C]",,,,"[D][E]";;;" : [A] FLAG";;;;,,"[F][G]",,,,"[H][I]";;;" : [A]N UNACTIVATED BOMB";;;;,"[J][K]",,,,"[L][M]";;;" : [Y]OUR MAN";;;;,,"[N][O]"
 1690 IF USR HR THEN PRINT AT 160,2;;;"[G][O][O][D] [L][U][C][K]...[P]RESS ANY KEY.";;;;
 1700 IF USR HR THEN PAUSE 4E4
 1710 RETURN
 9000 SAVE "BLOCK[2]"
 9010 RUN 
 

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

Scroll to Top