www.jupiter-ace.co.uk

Previous Page > Listings Index > Ace Avoider


Ace Avoider Listing from Personal Computer World July 1984, page 227

Ace Avoider
by John Sinyard
  Avoider' is an action game for an unexpanded Jupiter Ace.
  The idea is to control your craft (0) to intercept the Jewelites (*). Watch out, though, for the mutant asteroids (it's one of those months ...) which will destroy your craft on impact (X = mutant asteroid).
 
  If you capture all the Jewelites, or are killed, you move onto the next wave. Each wave is denser than the previous one.
  You control your craft using the direction keys  (5-8). The author's high score in FAST mode is 142 in wave 14.
  Comments must be omitted when typing in the program on an unexpanded Ace.

( all numbers are in decimal )
DECIMAL	

CREATE MC			( - )
			( machine code routines for
			  scrolling the screen excluding
			  the top line		     )
 17 C, 9951 ,	( LD DE 9951 )	( scroll right routine )
 33 C. 9950 ,	( LD HL 9950 )
  1 C, 672  ,	( LD BC 672  )
237 C, 184 C,	( LDDR       )
253 C, 233 C,	( JP(IY)     )
 17 C, 9951 ,	( LD DE 9951 )	( scroll down routine )
 33 C, 9919 ,	( LD HL 9919 )
  1 C, 672 ,	( LD BC 672  )
237 C, 184 C,	( LDDR       )
253 C, 233 C,	( JP(IY      )
 17 C, 9280 ,	( LD DS 9280 )	( scroll left routine )
 33 C, 9281 ,	( LD HL 9281 )
  1 C; 672 ,	( LD BC 672  )
237 C, 176 C,	( LDIR       )
253 C, 233 C,	( JP(IY)     )
 17 C, 9280 ,	( LD DE 9280 )	( scroll up routine   )
 33 C, 9312 ,	( LD HL 9312 )
  1 C,  672 ,	( LD BC 672  )
237 C, 176 C,	( LDIR       )
253 C, 233 C,	( JP(IY)     )


0	VARIABLE S	( score                      )
0	VARIABLE W	( wave                       )
0	VARIABLE SD	( used for generating random )
			    ( numbers                    )



Ace Avoider Listing from Personal Computer World July 1984, page 228
0 VARIABLE P		( crafts position in screen 
			  memory                               )
: RP			( charactor - )
			( pokes a jewelite/prang randomly
			  on to the screen                     )
 BEGIN
  474			( number of available positions        )
  SD @ 75 U* 75 0 D+	(
  OVER OVER U< - - 1-	    RND as in the manual               )
  DUP SD ! U* SWAP DROP			                     )
  9280 + DUP C@ 32 >	( forms random address and checks
 WHILE			  that it is not poking onto already
  DROP			  exsisting jewelite/prang/craft       )
 REPEAT
 C!
;


: D?			( direction - )
			( advances craft in direction
			  only if within the borders of
			  the screen                               )
  DUP P @ + DUP P !		( forms new address and stores it
  DUP 9312 < OVER		  in P, then checks if it is within
  9919 > OR OVER 32 MOD	  the borders of the screen                )
  DUP 0= SWAP 31 = OR OR
  IF  
    - ABS P !		( if on borders then restore
  ELSE			  original value to P                      )
   DROP DROP		( else retain new value of P               )
  THEN
;
  

: S?			( charactor - )
			( if craft has encountered a 
			   jewelite ( 42 = ASCII of * , 
			   the jewelite ) then increment score 
			   and clear that place on screen    )
 42 =
 IF	
  S @ 1+ S ! 32 P @ C! 
 THEN
;

: K?			( - )
			( checks if a direction key has 
			  been pressed, and if so then 
			  sends direction vector to D? for 
			  validation checks                )
  INKEY ?DUP
  IF
   DUP 53 =
   IF
    -1 D?			( left	)
   THEN
   DUP 54 =
   IF
    -32 D?		( Up	)
   THEN
   DUP 55 =
   IF
     32 D?		( down	)
   THEN
   56 =
   IF
     1 D?			( right	)

	 

Ace Avoider Listing from Personal Computer World July 1984, page 229


    THEN
   ELSE
     20 10 BEEP		( balances the time delay of key
   THEN			  checks if no key has been
   			  pressed			)
; 

: MV			( - )
			( initiates the screen : then
			  prints the status, controls the
			  scrolling of the screen, checks
			  for collisions with craft : until
			  all jewelites are taken or
			  collision with a prang		)
BEGIN
  CLS S @ -1		( stacks initial score and starts
			  a counter			)
  79 9584 DUP P ! C!	( resets craft into centre of the
			  screen				)
  W @ 1+ DUP W !		( wave number ( * 2 ) determines
  2 * 0			  the density of the clouds 	)
  DO
    88 RP 42 RP		( 88 = ASCII of X , the prangs
  LOOP			  42 = ASCII of * , the jewelites 	)
  100 2000 BEEP		( GET READY ! )
BEGIN
  9216 15388 !		( this is faster than 0 0 AT	)
  ." SCORE= " S @ .
  ."   LIVES= " I' .	( I' fetches the loop counter of
  ."   WAVE= " W @ .	  the 'lives' DO-LOOP within RUN
			  from the return stack underneath
			  the return address for RUN	)
  32 P @ C!		( enables movement of craft/screen)
  K?
  P @ C@ DUP 88 =		( collision of craft with a prang
  IF 			  causes return to RUN so
    EXIT			  decrementing the 'lives' loop
  THEN			  counter, second C@ used by S? ,
  S?			  else dropped on return to RUN	)
  1+			( increment the counter		)
  DUP 24 MOD 6 /		( equation for deriving from the
  13 * MC + CALL 		  counter the order in which the
			  machine code screen scrolling
			  routines are called, producing
			  a 6x6 square of rotation		)
  P @ C@ DUP 88 =		(
  IF
   EXIT			  same as before
  THEN
  S?							)
  79 P @ C! 20 5 BEEP	( pokes the craft onto the screen,
			  79 = ASCII of 0 , the craft, the
			  beep provides a delay before it
			  is cleared
  OVER DUP		( initial score to top of stack	)
  S @ = 0=		( 1 flag if initial and new scores
			  are different	)
  SWAP S @ - W @		( 1 flag if waves2 modulus of
  2 * MOD 0=		  jewelites eaten this wave =0	)
  AND			( all jewelites must be eaten to
 UNTIL			  procede			)
 DROP DROP		( drops initial score and counter )
 50 1000 BEEP 0		( WELL DONE ! )
UNTIL
;

: RUN			( - )



Ace Avoider Listing from Personal Computer World July 1984, page 230
			( the word to run the complete 
			  game
  0 S 0 ! 0 W !
  0 5
  DO			( the 'lives' DO—LOOP
    MV
    DROP DROP DROP		( drop the C@, counter and initial
    207 P @ C!		  score stacked within MV
    500 2000 BEEP 1	( OOPS ! )
   +LOOP
  700 2000 BEEP		( OH DEAR ! )
;