|
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 ! )
;
| ||