total-carnage/WAVES.ASM

5349 lines
112 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

**************************************************************
*
* Software: Mark Turmell
* Initiated: April 13,1989
*
* Modified: !
*
* COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC.
*
*.Last mod - 1/9/92 17:12
**************************************************************
.FILE 'WAVES.ASM'
.TITLE 'WAVE STUFF'
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
.INCLUDE "MPROC.EQU" ;MPROC EQUATES
.INCLUDE "DISP.EQU" ;DISPLAY PROC. EQUATES
.INCLUDE "\VIDEO\SYS\SYS.INC" ;Z UNIT SYSTEM EQUATES
.INCLUDE "\VIDEO\SYS\MACROS.HDR" ;MACROS DEFINITIONS
.INCLUDE "MAC2.ASM" ;MACRO 2 DEFINITIONS
.INCLUDE "IMGTBL.GLO"
.INCLUDE "BGNDTBL.GLO" ;BACKGROUND EQUATES
.INCLUDE "GAME.EQU"
.INCLUDE "AUDIT.EQU"
.INCLUDE "LINK.EQU"
;SOUNDS
.REF STATSND,TUNE1,TUNE2,SENDIN,SCREAM,HIMUSC,BEEP1
.REF NOWAY,HASND,BUYMSC,MUSICOFF,ONESNDOVR
ahkbang .word >f9a0,10,>80ef,0 ;^ angry
;SYMBOLS EXTERNALLY DEFINED
.REF NOSHOOT,FREETOT,CYCLIFE,HULK_CNT,AHMD_CNT,MINE_FLG
.REF JEPCYC,AUTO_SBMB,SHK_ON,PCTOT,SKIPR_DN,HULK_DN
.REF AIRRECT3A,AIRBRECT3,TAUNTOUT,ROAD2_MOD,WAITTNT,XWAYBMOD
.REF prt_inrackwin,DO_WINNER,ICONS_DN,PCNT
.ref fry_plyrs
.REF hisclong,ISHSTD,INITIALS,ROAD,ICN4,ROAD2
.REF DSRTNEW_MOD,JETS
.REF HSTGS_LOST,SHAKER,CLRBPAL,FONT7A,STRT_G,timeron
.REF GPALOBJ,GETFPAL,IRQSKYE,FPALRAM,BAKBITS,NO_START,STATUS
.REF AUD1,BAKMODS,BGND_UD1,BLAKOUT,GAMSTATE,CRSRAM,SBOMB
.REF INIT_SCORE,DMA_SCORE,CLNPAL,DRAW_PLYR_TORSO
.REF COLLISIONS,ALL_CHUNKS,THIS_PLYR,RD15FONT,WRLD,FADEOUT2
.REF P1CTRL,P2CTRL,ATSTRT2,GAMERASE,EHALT,AUD,CNTDIG1,CNTDIG2
.REF CLRPAL,GETCPNT,PLYROBJS,PLYRPRCS,UNIT_CLR,HEXTOASC,CTRLS
.REF P1DATA,P2DATA,WIPEOUT,STRCNRMO,SCORE_FLAG,CR_CONTP,TARGET
.REF CYCLE_TABLE,ONARRW,COLCYC,FRANIM,FRANIMQ
.ref OBJON,TARGET_NUM,STRLNRMO
.REF PCOUNT,FINDPAL,UNGETPAL,CURRENT,RECT1,BRECT1,BCURRENT,STRCNRM
.REF STRLNRM,SEND_ICON,ICN1,ICLIST,SEND_GROUP,DOLORD,WAVE,RUNIN
.REF ARWOFF,RINGS,ENEMY_RECT,ERECT1,EN_CURRENT,ENRECT1,ICN5
.REF INTRO,OBJOFF,RANGRAND,BLOOD_LST1,ISTATE,JUMPER,BIGMAP,MAXHULK
.REF PUMP_CLDS,DO_ALL_STUFF,RD7FONT,CTOTAL,JUMPXY,JUMPXY2,XYSEEK2
.REF RANDOM,DOBTR60,ENRECT10,SITLST,WARPER,RD8FONT,STRCNRMO_1
.REF HSTGSET,HZSPD,XYSEEK2A
.REF FORDBG,O_MINE,WFLG
.REF SRECT1,BSRECT1
.REF DOATP,DO5
.ref aud_addnumplyrs
.ref aboss
;SYMBOLS DEFINED IN THIS FILE
.DEF DLYINTO,FLYERS,OBJPTR
.DEF STRT_UNDER
.DEF PURPLE_DUDE,STRTS2,BIG_EAT,GENSPK,RAMLST
.DEF FIX3
.DEF PORT_MOD,PATHAIR2,TARGETST,STRT_MOD,FROMSHK
.DEF AIRRECT1,AIRBRECT1,ENAIR1
.DEF DTXTB,ERASE_TXT_LTRS,FIX,FIXGUNS,ROAD_MOD
.DEF DBRECT8,DRECT8
.DEF DRECT5,DBRECT5
.DEF DRECT6,DBRECT6
.DEF DRECT7,DBRECT7
.DEF DBRECT2,DRECT2,STRT_FORT,STRT_D,STRT_CRM,ZERO_BITS
.DEF DRECT3,DBRECT3,ERASE_TXT,SIT2,SIT1,SIT3,SIT4
.DEF DRECT3A,DBRECT3A
.DEF DRECT4,DBRECT4
.DEF STRTA,DSRTONE_MOD
.DEF COLRTEMP,COLRSTRT,WNDWON,WNDWOFF,EXPSCRN,DELWNDW,SEND_TOP
.DEF SNKNOW,COLRPRC,INIT_GAME,GAMEOVER,CYCSPECT,WSPEED
.DEF OBJEXP32,PSTAT,BTIME,ZONE_TXT,SQR_FLG,ZONE_TXT2,ZONE_TXT3
.DEF CWINDOW,OWINDOW,SETC2,STRT_S,DELAYALL
.DEF HALT,KILBGND,GET_OUT,SCRIPTPLAY,OFFSCRN,LOWZ,AOF,OFFBSCRN
.DEF SQUARES
.DEF START
.DEF JOY_UPDATE
;UNINITIALIZED RAM DEFINITIONS
.BSS KEEP2,16
.BSS ADDINY,32
.BSS CAN_EXIT,16
.BSS DELAYALL,16
.BSS START,16
.BSS LOWZ,16
.BSS KEEP,32
.BSS KEEP1,32
.BSS KEEPCL,16
.BSS KEEP3,16
.BSS KEEP4,32
.BSS WSPEED,16
.BSS OBJPTR,32 ;PNTR FOR WINDOW OBJECT
.BSS HALT,16 ;FREEZE ALL OBJECTS (NO VEL UPDATE)
.BSS FLYFLG,16
.BSS COLRTEMP,16*16 ;RAM COPY OF CYCLING COLORS
.BSS BTIME,16
.BSS SQR_FLG,16
.BSS WNDWFLG,16 ;0=WINDOW SHOULD CLOSE, 1=NO WINDOW
.BSS RAMLST,32*35 ;IMG PNTRS FOR DELETION WHILE SCROLL
.BSS PALTMP,16*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM
.BSS PALTMP1,16*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM
.BSS PALTMP2,16*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM
.BSS PALTMP3,16*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM
.BSS PALTMP4,35*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM
.BSS PALTMP5,4*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM
.BSS PALTMP0,16*32*2 ;ALLOCATE 2 X COLOR AREA IN RAM
.BSS BOBJECTS,32*BSIZE+1 ;BACKGROUND OBJECTS LIST
;EQUATES FOR THIS FILE
BSIZE .EQU 320
CWSPD .SET 43 ;45 ;CLOSE WINDOW SPEED (HIGHER THE SLOWER)
OWSPD .SET 21 ;21 ;OPEN WINDOW SPEED (HIGHER THE SLOWER)
CWSPD2 .SET 01 ;CLOSE WINDOW SPEED (HIGHER THE SLOWER)
OWSPD2 .SET 01 ;OPEN WINDOW SPEED (HIGHER THE SLOWER)
BUYTICK .EQU 10
SCRNTOP .EQU 100
BRGHT .EQU >0C0C ;GREEN IN SCOREPAL
COLORS .EQU >2525 ;WHITE IN SCOREPAL
COLORA .EQU >3E3E ;COLOR CYCLE IN SCOREPAL
.TEXT
********************************
* Update player controls process
JOY_UPDATE
SLEEP 40 ;45
joy move @GAMSTATE,a0
cmpi INGAME,a0
jrne joy5
clr a5
move @HALT,a0
jrnz joy2
move @SWITCH,a5 ;move player switches to a5 (32 bit port)
not a5
joy2 movb a5,@P1CTRL
srl 8,a5
movb a5,@P2CTRL
joy5 SLEEPK 1
jruc joy
********************************
YLST .LONG 0,0,[36,0],[36*2,0],[36*3,0],[36*4,0],[36*5,0],[36*6,0]
XLST .LONG 0,0,[50,0],[50*2,0],[50*3,0],[50*4,0],[50*5,0],[50*6,0]
.LONG [50*7,0]
SQUARES
;TURN ON GRID OF ANIMATING SQUARES FOR A WIPE/TRANSITION
PUSH A8
MOVI BOXP,A8 ;PAL NAME
MOVI PALTMP0,A9 ;RAM AREA
MOVI [1,16],A10 ;BEGIN/END COLOR #
MOVK 2,A11 ;RATE IN TICKS
CREATE0 COLCYC ;COLOR CYCLER ON
PUSH A0
MOVI 7,A5 ;Y SQUARES
SQR0 MOVI 8,A4 ;X SQUARES
SQR1 MOVE @WORLDTLY,A8,L
MOVE A5,A1
SLL 5,A1
ADDI YLST,A1
MOVE *A1,A1,L
SUBI 060000H,A1
ADD A1,A8 ;A8=Y LINE FOR THIS SQUARE
MOVE @WORLDTLX,A9,L
MOVE A4,A1
SLL 5,A1
ADDI XLST,A1
MOVE *A1,A1,L
ADDI 01A0000H,A1
ADD A1,A9 ;A9=X LINE FOR THIS SQUARE
BTST 0,A4
JRZ S1
;ODD X SQUARE
BTST 0,A5
JRZ HBOXIT
VBOXIT
;VBOX
MOVI VBOX1,A10
JRUC SOUT
S1
BTST 0,A5
JRZ VBOXIT
HBOXIT
;HBOX
MOVI HBOX1,A10
SOUT CREATE0 BOX
DSJ A4,SQR1
DSJ A5,SQR0
PULL A0 ;CYCLE PROC
PULL A8
;DONE WITH ALL CREATES
MOVE A0,A10
CREATE0 KILC
RETS
KILC
SLEEP 90 ;WARP SHOULD BE DONE BY NOW
MOVE A10,A0
CALLA KILL ;KILL COLOR CYCLE FOR WARP BOXES
DIE
HLST .LONG HBOX1
.WORD 5 ;4*2
.LONG HBOX2
.WORD 5 ;4*2
.LONG HBOX3
.WORD 5 ;4*2
.LONG HBOX4
.WORD 5 ;4*2
.LONG HBOX5
.WORD 5 ;4*2
.LONG HBOX6
.WORD 5 ;4*2
.LONG 0
HLST2 .LONG HBOX6
.WORD 5+15 ;(4+12)*2
.LONG HBOX5
.WORD 5 ;4*2
.LONG HBOX4
.WORD 5 ;4*2
.LONG HBOX3
.WORD 5 ;4*2
.LONG HBOX2
.WORD 5 ;4*2
.LONG HBOX1
.WORD 5 ;4*2
.LONG 0
VLST .LONG VBOX1
.WORD 10 ;4*2
.LONG VBOX2
.WORD 10 ;4*2
.LONG VBOX3
.WORD 10 ;4*2
.LONG VBOX4
.WORD 10 ;4*2
.LONG VBOX5
.WORD 10 ;4*2
.LONG VBOX6
.WORD 10 ;(4+12)*2
.LONG 0
VLST2 .LONG VBOX6
.WORD 5 ;4*2
.LONG VBOX5
.WORD 5 ;4*2
.LONG VBOX4
.WORD 5 ;4*2
.LONG VBOX3
.WORD 5 ;4*2
.LONG VBOX2
.WORD 5 ;4*2
.LONG VBOX1
.WORD 5 ;4*2
.LONG 0
BOX:
;A8=YVAL
;A9=XVAL
;A10=IMG TO START
;GET FRANIM LIST
MOVE A9,A0
MOVE A8,A1
MOVE A10,A2
MOVI 545,A3 ;HIGHER PRIORITY THAN ANYTHING
MOVI DMAWNZ,A4
CMPI VBOX1,A10
JRZ OK6
SRL 4,A4
SLL 4,A4
OK6 MOVI CLSNEUT|TYPTEXT|SUBWNDW,A5
CLR A6
CLR A7
CALLA BEGINOBJ2 ;NO WORLD ADD ON
CMPI VBOX1,A10
JRZ OK
JRUC OK2
OK MOVI VLST,A9
MOVI VLST2,A10
JRUC OK3
OK2 MOVI HLST,A9
MOVI HLST2,A10
SLEEPK 15 ;12*2
MOVE A8,A0
CALLA OBJON
OK3 JSRP FRANIMQ
MOVK 1,A0
MOVE A0,@SQR_FLG ;TURN ON BACKGROUND
SLEEPK 1
MOVE A10,A9
JSRP FRANIMQ
CLR A0
MOVE A0,@SQR_FLG
jauc DELOBJDIE
;DELETE FOREGROUND OBJECTS THAT ARE NOT WITHIN VISIBLE SCREEN AREA
OFFSCRN:
;INIT OBJECT RAM STACK
CLR A1
MOVI BOBJECTS,A2
MOVI BSIZE,A0 ;UHL TO CLEAR
CLRLUP:
MOVE A1,*A2+,L
DSJS A0,CLRLUP
MOVI BOBJECTS,A9
MOVE @OBJLST,A8,L ;LOOK THROUGH THE FGNDLIST
JREQ OFAIL ;DOES NOT EXIST! INDICATE ERROR
CHKFOBJ:
CALLA SCRTST ;TEST FOR OBJECT ON SCREEN
JREQ ONSCRN ;OBJECT IS DEFINITELY ON SCREEN!
MOVE A8,*A9+,L ;DUMP INTO RAM STACK
ONSCRN:
MOVE *A8(OLINK),A8,L ;LET'S SEARCH FOR ANOTHER
JRNE CHKFOBJ
CLR A0
MOVE A0,*A9,L ;TERMINATE TABLE
CALLA OBJPULL
OFAIL:
RETS
OFFBSCRN:
;INIT OBJECT RAM STACK
CLR A1
MOVI BOBJECTS,A2
MOVI BSIZE,A0 ;UHL TO CLEAR
BCLRLUP:
MOVE A1,*A2+,L
DSJS A0,BCLRLUP
MOVI BOBJECTS,A9
MOVE @OBJLST,A8,L ;LOOK THROUGH THE FGNDLIST
JREQ BOFAIL ;DOES NOT EXIST! INDICATE ERROR
BCHKFOBJ:
CALLA SCRTST ;TEST FOR OBJECT ON SCREEN
CMPI 4,A0
JRNZ BONSCRN
; JREQ BONSCRN ;OBJECT IS DEFINITELY ON SCREEN!
MOVE A8,*A9+,L ;DUMP INTO RAM STACK
BONSCRN:
MOVE *A8(OLINK),A8,L ;LET'S SEARCH FOR ANOTHER
JRNE BCHKFOBJ
CLR A0
MOVE A0,*A9,L ;TERMINATE TABLE
CALLA OBJPULL
BOFAIL:
RETS
OBJPULL:
MOVI BOBJECTS,A9
LUPOBJ:
MOVE *A9+,A0,L
JRZ NOLIST ;NO OBJECT LIST EXITS!
MOVE *A0(OID),A1,W
BTST 14,A1
JRNZ NODPLYR ;YES A CLSPLYR!
CMPI CLSNEUT|TYPICON|SUBCSH,A1
JRZ KILLME
;CHECK OTHER NO DELETE OIDS HERE
BTST 13,A1
JRNZ NODPLYR ;ENEMY IN ACT OF EXPLODING
BTST 15,A1 ;ENEMY BIT SET
JRNZ NODPLYR
ANDI 001F00H,A1 ;0F00H - SEPT 15,91
CMPI TYPPLBL,A1
JRZ NODPLYR
CMPI TYPFLAG,A1
JRZ NODPLYR
CMPI TYPHSTG,A1
JRZ NODPLYR
CMPI TYPICON,A1
JRZ NODPLYR
CMPI TYPCRTE,A1
JRZ NODPLYR
CMPI TYPMINE,A1
JRNZ KILLME
PUSH A0
MOVE *A0(OPLINK),A0,L
JRZ LPO
CALLA KILL ;ELECTRIC MINE
LPO PULL A0
KILLME
;KILL IT I GUESS...
CALLA DELOBJ ;DELETE OBJECT FROM LIST
NODPLYR
JRUC LUPOBJ
NOLIST RETS
;CLEAR SHOE CNT FOR EITHER PLAYER
C_SHO1 CLR A0
MOVE @PLYRPRCS+32,A1,L
JRZ RETOUT
MOVE *A1,A1,L
MOVE *A1(LEG_PRC),A1,L
MOVE A0,*A1(SHOECNT)
RETS
C_SHO2
CLR A0
MOVE @PLYRPRCS,A1,L
JRZ RETOUT
MOVE *A1,A1,L
MOVE *A1(LEG_PRC),A1,L
MOVE A0,*A1(SHOECNT)
RETOUT RETS
;SCRIPTPLAY - AUTOMATIC PLAYER MOVEMENT
;A8=1 OR 2 FOR PLAYER NUMBER
;A10=0 TO RUN IN FROM BOTTOM,1=FROM LEFT, 2=FROM LOWER RIGHT
SCRIPTPLAY:
SLEEPK 3
SLL 5,A10
ADDI INLST,A10
MOVE *A10,A9,L
MOVE @WAVE,A0
CMPI 18,A0
JRZ SCR0
CMPI 17,A0
JRZ SCR0
CMPI 35,A0
JRZ SCR0
CMPI 36,A0
JRZ SCR0
SUBK 16,A0
JRNZ SCR1
SCR0
;ORCUS
MOVI FROMBOT2,A9
SCR1
MMTM SP,A8,A9
;SECRET PATH COMES IN FROM RIGHT
CMPI FROMRGT,A9
JRZ PPO
MOVE A8,A9
MOVI 45,A10 ;TIME RINGS ARE ON
MOVE @WAVE,A0
CMPI 38,A0
JRNZ SCR99
MOVK 25,A10
SCR99
CMPI 1,A9
JRZ PP1
CREATE RNG2PID,RINGS
JRUC PPO
PP1
CREATE RNG1PID,RINGS
PPO MMFM SP,A8,A9
DEC A8
SLL 5,A8
MOVE A8,A11
ADDI CTRLS,A8
MOVE *A8,A8,L
ADDI PLYRPRCS,A11
MOVE *A11,A11,L
MOVE *A11(LEG_PRC),A11,L
NEXTMOV:
;CHECK TO SEE IF PLAYER IS BUMPING INTO A WALL!
;IF YES, SLIDE PLAYER OVER A BIT AND KEEP TRYING
MOVE *A11(TCH_WALL),A0
JRZ NXC
; MOVE @WAVE,A0
; CMPI 38,A0
; JRZ NXC
;PLAYER IS BUMPING INTO A WALL AS HE RUNS IN!
;SLID HIM OVER
MOVE *A11(TSO_PTR),A0,L
MOVE *A11(LEG_PTR),A1,L
MOVE *A1(OYPOS),A3
MOVI -10,A4 ;MOVK 10,A4
SUBI 0C02H,A3
ABS A3
CMPI 40H,A3
JRC REGR ;BR=SLIDE TO LEFT
MOVE *A1(OYPOS),A3
SUBI 01E0H,A3
ABS A3
CMPI 20H,A3
JRC REGR ;BR=SLIDE TO LEFT
;SLIDE TO RIGHT
MOVK 10,A4 ;MOVI -10,A4
REGR
MOVE *A0(OXPOS),A2
ADD A4,A2
MOVE A2,*A0(OXPOS)
MOVE *A1(OXPOS),A2
ADD A4,A2
MOVE A2,*A1(OXPOS)
NXC MOVE @HALT,A0
JRZ NXM
SLEEPK 1
JRUC NEXTMOV
NXM MOVE *A9+,A0,W ;GET SOME JOYSTICK BITS
CMPI 0FFFFFFFFH,A0
JREQ MOVEXIT
MOVE A0,*A8,W ;P1/P2CTRL
MOVE *A9+,A10,W
JSRP ATTSLP ;PROCESS SLEEP TIME
JRUC NEXTMOV
MOVEXIT:
DIE
;
; ATTSLP - PROCESS ATTRACT MODE PLAYER SLEEP
; A10 = # TICKS TO SLEEP
; RETURNS:
; CARRY CLEAR = SLEEP COMPLETED
; CARRY SET = STILL SNOZZIN'
;
; NOTE: CALL WITH JSRP
;
ATTSLP:
PUSHP A10
ATTSLPL:
SLEEPK 1
SETC
DSJS A10,ATTSLPL ;PROCESS SLEEP LOOP
CLRC
PULLP A10
RETP
INLST .LONG FROMBOT,FROMLFT,FROMRGT,FROMTOP
FROMBOT:
;ENTER FROM BOTTOM OF SCREEN
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
FROMBOT2:
;ENTER FROM BOTTOM OF SCREEN AT ORCUS TIME
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD PUP,01H
.WORD 0,1H
.WORD 0FFFFH
FROMTOP:
;ENTER FROM BOTTOM OF SCREEN
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD PDOWN,01H
.WORD 0,1H
.WORD 0FFFFH
FROMLFT:
;ENTER FROM LEFT OF SCREEN
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD PRYTE,01H
.WORD 0,1H
.WORD 0FFFFH
FROMRGT:
;ENTER FROM LEFT OF SCREEN
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD PLEFT,01H
.WORD 0,1H
.WORD 0FFFFH
CLR_ALL:
CALLA KILBGND ;KILL ALL BACKGROUND
CLR A0 ;KILL SCORE DISPLAY
MOVE A0,@SCORE_FLAG,W
MOVE A0,@IRQSKYE,W
MOVI CLSNEUT|TYPTEXT|SUBWNDW,A0
CALLA KILBUT ;KILL EVERYTHING BUT WHAT IS IN A0
RETS
KILBUT:
;KILL EVERYTHING EXCEPT WHAT IS IN A0
MOVI OBJLST,A2,L
KILOBP:
MOVE A2,A3 ;SAVE PREVIOUS
MOVE *A2,A2,L ;GET NEXT
JREQ KILX ;ALL DONE
MOVE *A2(OID),A4
CMP A0,A4 ;MATCH?
JREQ KILOBP ;NO
MOVE *A2,*A3,L ;LINK AROUND IN ACTIVE LIST
MOVE @OFREE,A5,L ;LINK INTO FREE LIST AT START
MOVE A5,*A2,L
MOVE A2,@OFREE,L ;POINT FREE TO CELL
MOVE A3,A2
JRUC KILOBP ;KILL THE REST
KILX:
RETS
WNDWON:
MOVK 1,A8
MOVE A8,@WFLG
MOVI [256,400],A8
MOVI SCRNMID,A10
JSRP OWINDOW
MOVE A8,@OBJPTR,L
RETP
WNDWOFF:
MOVE @OBJPTR,A8,L
JSRP CWINDOW
CLR A0
MOVE A0,@WFLG
RETP
VWSCRN:
.LONG HOMEBMOD ;THIS IS FROM BLIMP (MODULE NAME)
.WORD -11,35BH+04H ;x,y start pos.
.LONG HOME1BMOD
.WORD 0262H,35BH+00H ;+2 ;x,y start pos.
.LONG >FFFFFFFF
STRT_MOD:
.LONG FORTABMOD ;THIS IS FROM BLIMP (MODULE NAME)
.WORD 0FFEAH,0 ;x,y start pos.
.LONG XWAYBMOD ;ROAD
.WORD 0FFE3H,546H ;x,y start pos. -0!!!!
.LONG >FFFFFFFF
BOSS_MOD: ;BASEMENT BOSS MONSTER PIT
.LONG BOTMBMOD ;THIS IS FROM BLIMP (MODULE NAME)
.WORD 0100,0100 ;x,y start pos.
.LONG >FFFFFFFF
DSRTONE_MOD:
.LONG DSRTONEBMOD ;THIS IS FROM BLIMP (MODULE NAME)
.WORD 07H,0FDCH ;x,y start pos. -0!!!!
.LONG DSRTHREBMOD ;THIS IS FROM BLIMP (MODULE NAME)
.WORD 0FFE8H,0A63H+300 ;E0H-4 ;x,y start pos. -0!!!!
.LONG HUTLCKBMOD ;THIS IS FROM BLIMP (MODULE NAME)
.WORD 0FFE8H,0A63H ;x,y start pos. -0!!!!
.LONG >FFFFFFFF
ROAD_MOD:
.LONG DRIVEBMOD ;ROAD
.WORD 1B2H,135EH ;x,y start pos. -0!!!!
.LONG AIR1BMOD ;LOWER AIRPORT AREA (GATE)
.WORD 0C78H,0FE0H ;x,y start pos. -0!!!!
PORT_MOD
.LONG AIR2BMOD ;UPPER AIRPORT AREA
.WORD 0E0DH,08DAH ;x,y start pos. -0!!!!
.LONG >FFFFFFFF
ERASE_TXT:
MOVI CLSNEUT|TYPTEXT|SUBTXT,A0
CLR A1
NOT A1
JAUC KILOBJ
ERASE_TXT_LTRS:
;A8=ROUTINE TO CALL IF ID FOUND
MOVI CLSNEUT|TYPTEXT|SUBTXT,A6
CLR A1
NOT A1
MOVI OBJLST,A2,L
SEXT A6,W
AND A1,A6 ;FORM MATCH
EXISTOBP:
MOVE *A2,A2,L ;GET NEXT
JREQ DONE_1
MOVE *A2(OID),A3
AND A1,A3 ;CAN DONT CARE BITS
CMP A6,A3 ;MATCH?
JRNE EXISTOBP ;NO
CALL A8
JRUC EXISTOBP
DONE_1 RETS
DTXTB
MOVE @WORLDTLY,A4,L
ADDI [0BAH,0],A4 ;204
MOVE *A2(OYVAL),A3,L
CMP A3,A4
JRNC EXR
JRC DXC
DTXTA
MOVE @WORLDTLY,A4,L
ADDI [125,0],A4
MOVE *A2(OYVAL),A3,L
CMP A3,A4
JRC EXR
DXC MOVE A2,A9
PUSH A1
CREATE0 FUCKIT
PULL A1
EXR RETS
FUCKIT
; SLEEPK 1
MOVE A9,A8
jauc DELOBJDIE
STRTS2
MOVI BGFRTP,A8 ;PAL NAME
MOVI PALTMP1,A9 ;RAM AREA
MOVI [60,64],A10 ;BEGIN/END COLOR #
MOVK 8,A11 ;RATE IN TICKS
CREATE CYCPID,COLCYC ;COLOR CYCLER ON
RETS
STRT_S2
CALLR STRTS2
STRT_CRM
MOVI CRMP,A8 ;PAL NAME
MOVI PALTMP2,A9 ;RAM AREA
MOVI [58,64],A10 ;BEGIN/END COLOR #
MOVK 4,A11 ;RATE IN TICKS
CREATE CYCPID,COLCYC ;COLOR CYCLER ON
RETS
STRT_S
MOVI STATICP,A8 ;PAL NAME
MOVI PALTMP0,A9 ;RAM AREA
MOVI [1,31],A10 ;BEGIN/END COLOR #
MOVK 2,A11 ;RATE IN TICKS
CREATE CYCPID,COLCYC ;COLOR CYCLER ON
RETS
PRSTART .byte "PRESS START TO BEGIN",0
.EVEN
INIT_GAME:
;GAME HAS BEEN STARTED FROM ATTRACT MODE. SHOW HOME BASE, AND OPENING
;INTRO STUFF
MOVI [035BH,0],A0
MOVE A0,@WORLDTLY,L
SLEEPK 2
MOVK OWSPD2,A0
MOVE A0,@WSPEED
JSRP WNDWON ;GROW WINDOW
; .REF GERMAN_SPCH
; CREATE0 GERMAN_SPCH
; SLEEP 60*60
MOVI ININTRO,A0 ;NOT IN INTRO MODE ANYMORE!
MOVE A0,@GAMSTATE,W ;FLAG INGAME
MOVK 1,A0 ;DELAY START OF A SECOND PLYR FLAG
MOVE A0,@NO_START
;INC CMOS COUNT OF GAMES STARTED!
MOVI AUDBONE,A0 ;INTO CMOS
CALLA AUD1 ;INC GAMES STARTED FROM ATTRACT MODE
; MOVI AUDSTAT,A0 ;SECRET BONUS FLAG
; MOVK 1,A1
; CALLA STORE_AUDIT
DO_CANDY
CLR A0
MOVE A0,@HALT
CLR A0 ;FOR REPORTER ANIMATING
MOVE A0,@INTRO
MOVE A0,@ISTATE
.REF bloflg
move A0,@bloflg
;FOR CHICK REPORTER
MOVI VWSCRN,A0 ;SHOW HOME BASE VIEW SCREEN
MOVE A0,@BAKMODS,L
CALLA BGND_UD1
MOVI TUNE1,A0
CALLA ONESND
CALLR STRT_S2
;CANDY BLITZER REPORTING TEXT
CLR A0
MOVE A0,@WRLD
MOVI CANDY,A8 ;OBJECTIVE 1
MOVI [0AAH,0145H],A9 ;SCRN Y/X
MOVI 3B3BH,A6 ;YELLOW
MOVI RD7FONT,A11 ;FONT TABLE
MOVK 1,A10 ;Y,X SPACING BETWEEN CHARCTERS
CLR A0
JSRP STRCNRMO
MOVI CANDY2,A8 ;OBJECTIVE 1
MOVI [0B4H,0147H],A9 ;SCRN Y/X
MOVI 3B3BH,A6 ;YELLOW
CLR A0
JSRP STRCNRMO
MOVI CANDY2A,A8 ;OBJECTIVE 1
MOVI [0ACH,028H],A9 ;SCRN Y/X
MOVI RD15FONT,A11 ;FONT TABLE
MOVI 3B3BH,A6 ;YELLOW
CLR A0
JSRP STRCNRMO
MOVI CANDY3,A8 ;OBJECTIVE 1
MOVI [0D2H,0200],A9 ;SCRN Y/X
MOVI 2525H,A6 ;WHITE
CLR A0
JSRP STRCNRMO
MOVI CANDY4,A8 ;OBJECTIVE 1
MOVI [0E9H,0200],A9 ;SCRN Y/X
MOVI 2525H,A6 ;WHITE
CLR A0
JSRP STRCNRMO
JSRP WNDWOFF
;START CLOUD FLASHES
CREATE CYCPID,PUMP_CLDS
MOVE A0,*A13(PDATA+128),L
SLEEP 08AH
;START BALLOONS
MOVI BLOB1,A14
CALLA DO_ALL_STUFF
CALLA ADJSTWTL
MOVI BLOB2,A14
CALLA DO_ALL_STUFF
CALLA ADJSTWTL
MOVI BLOB3,A14
CALLA DO_ALL_STUFF
CALLA ADJSTWTL
CLR A0
MOVE A0,@WRLD
;TURN ON FIRST BALLOON TEXT
MOVI BLLNP5,A0
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
MOVE A0,A6
MOVE A6,*A13(PDATA),W
MOVI BTEXT1,A8
MOVI [021H,0125H],A9 ;SCRN Y/X
MOVI RD8FONT,A11 ;FONT TABLE
MOVK 1,A10 ;Y,X SPACING BETWEEN CHARCTERS
CLR A0
JSRP STRCNRMO_1 ;FULL COLOR FONT
MOVI BTEXT2,A8
MOVI [02CH,0123H],A9 ;SCRN Y/X
MOVE *A13(PDATA),A6,W
CLR A0
JSRP STRCNRMO_1
MOVI BTEXT3,A8
MOVI [037H,0125H],A9 ;SCRN Y/X
MOVE *A13(PDATA),A6,W
CLR A0
JSRP STRCNRMO_1
MOVI BTEXT4,A8
MOVI [042H,0124H],A9 ;SCRN Y/X
MOVE *A13(PDATA),A6,W
CLR A0
JSRP STRCNRMO_1
SLEEP 0B0H
MOVI DTXTA,A8
CALLR ERASE_TXT_LTRS
SLEEPK 2
MOVE *A13(PDATA),A6,W
MOVI BTEXT1B,A8
MOVI [021H,0125H],A9 ;SCRN Y/X
MOVI RD8FONT,A11 ;FONT TABLE
MOVK 1,A10 ;Y,X SPACING BETWEEN CHARCTERS
CLR A0
JSRP STRCNRMO_1 ;FULL COLOR FONT
MOVI BTEXT2B,A8
MOVI [02CH,0123H],A9 ;SCRN Y/X
MOVE *A13(PDATA),A6,W
CLR A0
JSRP STRCNRMO_1
MOVI BTEXT3B,A8
MOVI [037H,0125H],A9 ;SCRN Y/X
MOVE *A13(PDATA),A6,W
CLR A0
JSRP STRCNRMO_1
MOVI BTEXT4B,A8
MOVI [042H,0124H],A9 ;SCRN Y/X
MOVE *A13(PDATA),A6,W
CLR A0
JSRP STRCNRMO_1
SLEEP 030H
MOVI DTXTB,A8
CALLR ERASE_TXT_LTRS ;ERASE 'AFTER THE 1999 WAR' TEXT
SLEEPK 5
MOVI RD15FONT,A11 ;FONT TABLE
MOVI CANDY3A,A8 ;OBJECTIVE 1
MOVI [0D2H,0200],A9 ;SCRN Y/X
MOVI 2525H,A6 ;WHITE
CLR A0
JSRP STRCNRMO
MOVI CANDY4A,A8 ;OBJECTIVE 1
MOVI [0E9H,0200],A9 ;SCRN Y/X
MOVI 2525H,A6 ;WHITE
CLR A0
JSRP STRCNRMO
SLEEP 080H
MOVI DTXTA,A8
CALLR ERASE_TXT_LTRS
SLEEPK 2
MOVE *A13(PDATA),A6,W
MOVI BTEXT1C,A8
MOVI [026H,0125H],A9 ;SCRN Y/X
MOVI RD8FONT,A11 ;FONT TABLE
MOVK 1,A10 ;Y,X SPACING BETWEEN CHARCTERS
CLR A0
JSRP STRCNRMO_1 ;FULL COLOR FONT
MOVI BTEXT2C,A8
MOVI [031H,0123H],A9 ;SCRN Y/X
MOVE *A13(PDATA),A6,W
CLR A0
JSRP STRCNRMO_1
MOVI BTEXT3C,A8
MOVI [03CH,0123H],A9 ;SCRN Y/X
MOVE *A13(PDATA),A6,W
CLR A0
JSRP STRCNRMO_1
SLEEP 90
CREATE INTROPID,HAND_OUT
MOVE *A13(PDATA+128),A0,L
CALLA KILL ;KILL PUMP CLOUDS COL CYC
SLEEP 088H-50
MOVI DTXTA,A8
CALLR ERASE_TXT_LTRS
SLEEPK 2
;TURN OFF BALLONS
MOVI CLSNEUT|TYPTEXT,A0
CLR A1
NOT A1
CALLA KILOBJ
SLEEP 10+120-40
;TURN ON CENSORED SIGN
MOVI CLOB1,A14
CALLA DO_ALL_STUFF
CALLA ADJSTWTL
MOVI CLOB2,A14
CALLA DO_ALL_STUFF
CALLA ADJSTWTL
MOVI CLOB3,A14
CALLA DO_ALL_STUFF
CALLA ADJSTWTL
MOVI CLOB4,A14
CALLA DO_ALL_STUFF
CALLA ADJSTWTL
;CHICK IS BLIKING FAST, MOUTH OPEN
SLEEPK 10H ;88H
;STATIC ALMOST ON
MOVI CLSNEUT|TYPTEXT|SUBTXT,A0
CLR A1
NOT A1
CALLA KILOBJ
;TIME TO DISPLAY OTHER TEXT
SLEEP 028H ;48
MOVI CANDY5,A8 ;OBJECTIVE 1
MOVI [0D2H,0200],A9 ;SCRN Y/X
MOVI 2525H,A6 ;WHITE
MOVI RD15FONT,A11 ;FONT TABLE
CLR A0
MOVE A0,@WRLD
MOVK 1,A10 ;Y,X SPACING BETWEEN CHARCTERS
MOVK 3,A0
JSRP STRCNRMO
MOVI CANDY6,A8 ;OBJECTIVE 1
MOVI [0E9H,0200],A9 ;SCRN Y/X
MOVI 2525H,A6 ;WHITE
MOVI RD15FONT,A11 ;FONT TABLE
CLR A0
MOVE A0,@WRLD
MOVK 1,A10 ;Y,X SPACING BETWEEN CHARCTERS
MOVK 3,A0
JSRP STRCNRMO
MOVI CYCPID,A0
CALLA KIL1C
CALLR STRT_S
CALLR STRT_S2
MOVE @GAMSTATE,A0
CMPI INAMODE,A0
JAZ SUCIDE
;SLIDE OFF AND SLIDE ON HOME BASE BLIMP MODULE!
MOVI STATSND,A0
CALLA ONESND
MOVI 026H,A9
MOVE A9,@DELAYALL
SLTOP SLEEPK 1
MOVE @WORLDTLX,A0,L
ADDI [16,0],A0
MOVE A0,@WORLDTLX,L
CALLA BGND_UD1
DSJ A9,SLTOP
MOVE A9,@DELAYALL
movi PRSTART,A8
movi 100,a9
CREATE INTROPID,prt_inrackwin
SLEEP 074H
;GEN IS IN SPEAKING ANIMATION
JRUC GENSPKA
SCREAM2 .WORD >F1F2,>48,>8159,0 ;DIE SCREAM FOR CANDY BLITZER
HAND_OUT
;HAND FLYS OUT
;GIRLS EYES GET BIG AT THIS POINT
;TURN ON 3 HAND IMAGES
MOVI -0FE0000H,A0
MOVI 0360000H,A1
MOVI DARM1,A2 ;IMG
MOVI 269,A3 ;ZPOS
MOVI DMAWNZ|M_NOCOLL,A4 ;NON-ZERO VALUE
MOVI CLSNEUT|TYPNEUT,A5 ;ID
CLR A6 ;XVEL
CLR A7 ;YVEL
CALLA BEGINOBJ ;WORLD ADDED IN
MOVE A8,*A13(PDATA),L
MOVI 01000000H,A0
MOVI 0300000H,A1
MOVI THUMB,A2 ;IMG
MOVI 269,A3 ;ZPOS
MOVI DMAWNZ|M_NOCOLL,A4 ;NON-ZERO VALUE
MOVI CLSNEUT|TYPNEUT,A5 ;ID
CLR A6 ;XVEL
CLR A7 ;YVEL
CALLA BEGINOBJ ;WORLD ADDED IN
MOVE A8,*A13(PDATA+32),L
MOVI 01000000H,A0
MOVI 0300000H,A1
MOVI DHND1,A2 ;IMG
MOVI 269,A3 ;ZPOS
MOVI DMAWNZ|M_NOCOLL,A4 ;NON-ZERO VALUE
MOVI CLSNEUT|TYPNEUT,A5 ;ID
CLR A6 ;XVEL
CLR A7 ;YVEL
CALLA BEGINOBJ ;WORLD ADDED IN
MOVE A8,*A13(PDATA+64),L
MOVI 03BH,A10
LOOPIT MOVE *A13(PDATA),A8,L
CALLA GETANIXY
MOVE *A13(PDATA+32),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
CALLA GETANIXY
MOVE *A13(PDATA+64),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
;SLIDE IMAGES TO RIGHT
MOVE *A8(OXVAL),A0,L
ADDI 060000H,A0
MOVE A0,*A8(OXVAL),L
SLEEPK 1
DSJ A10,LOOPIT
SLEEPK 4
;ANIMATE HAND TO SECOND VIEW
MOVE *A13(PDATA+64),A8,L
MOVE *A8(OFLAGS),A4,W
MOVI DHND2,A1
CALLA ANI
SLEEP 20
MOVE @GAMSTATE,A0
CMPI INAMODE,A0
JRNZ NORMSC
ADJUST ADJMUSIC ;GET MUSIC ON OFF FOR DEMO
MOVE A0,A0
JRNZ NONO
.REF SOUNDSUP,GET_ADJ
CLR A0
MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS ON
MOVI SCREAM2,A0
CALLA ONESND
MOVK 1,A0
MOVE A0,@SOUNDSUP,W ;TURN ALL SOUNDS OFF
JRUC NONO
NORMSC
MOVI SCREAM,A0
CALLA ONESND
NONO
SLEEP 40
;EVERYTHING SLIDES OUT LEFT
;FIND PROF IMAGES AND GIVE -VELOCITY
MOVI OBJLST,A2
MOVI -70000H,A1
ZOLP:
MOVE *A2,A2,L
JRZ ZDX ;BR = DONE WITH THE LIST
MOVE *A2(OZPOS),A3,W
CMPI 268,A3
JRNZ ZOLP
MOVE *A2(OXVEL),A3,L
JRNZ ZOLP
MOVE A1,*A2(OXVEL),L ;STUFF THE NEW ONE
MOVE A2,A8
MMTM SP,A1,A2
CREATE INTROPID,KILSOON
MMFM SP,A1,A2
JRUC ZOLP
KILSOON SLEEP 14H
MOVI HASND,A0
CALLA ONESND
SLEEP 46H
jauc DELOBJDIE
ZDX MOVI 04BH,A10
LOOPI2
MOVE *A13(PDATA),A8,L
;SLIDE IMAGES TO LEFT
MOVE *A8(OXVAL),A0,L
SUBI 070000H,A0
MOVE A0,*A8(OXVAL),L
MOVE *A13(PDATA+32),A8,L
;SLIDE IMAGES TO LEFT
MOVE *A8(OXVAL),A0,L
SUBI 070000H,A0
MOVE A0,*A8(OXVAL),L
MOVE *A13(PDATA+64),A8,L
;SLIDE IMAGES TO LEFT
MOVE *A8(OXVAL),A0,L
SUBI 070000H,A0
MOVE A0,*A8(OXVAL),L
SLEEPK 1
DSJ A10,LOOPI2
CALLA DELOBJA8
MOVE *A13(PDATA+32),A0,L
CALLA DELOBJ
MOVE *A13(PDATA),A8,L
jauc DELOBJDIE
BTEXT1
.BYTE "WE ARE IN DANGER!",0
BTEXT2
.BYTE "WE HAVE UNCOVERED",0
BTEXT3
.BYTE "A SINISTER PLOT BY",0
BTEXT4
.BYTE "GENERAL AKHBOOB.",0
BTEXT1B
.BYTE "THE PLOT INVOLVES",0
BTEXT2B
.BYTE "HIS ADVANCED",0
BTEXT3B
.BYTE "BIO-NUCLEAR",0
BTEXT4B
.BYTE "RESEARCH FACILITY.",0
BTEXT1C
.BYTE "AND IN FACT,",0
BTEXT2C
.BYTE "GENERAL AKHBOOB'S",0
BTEXT3C
.BYTE "REAL IDENTITY IS...",0
GTEXT1
.BYTE "INTELLIGENCE",0
GTEXT2
.BYTE "CONFIRMS AMERICAN",0
GTEXT3
.BYTE "CITIZENS ARE BEING",0
GTEXT4
.BYTE "HELD HOSTAGE.",0
GTEXT1A
.BYTE "WE ALSO CONFIRM",0
GTEXT2A
.BYTE "THE PRESENCE OF",0
GTEXT3A
.BYTE "UNKNOWN LIFE FORMS",0
GTEXT4A
.BYTE "IN THE SAME AREA!",0
.EVEN
PURPLE_DUDE
CREATE0 DO_WINNER
SLEEP 90
MOVE A9,A0
CALLA PRCSLP
MOVK 3,A10
MOVK 1,A0 ;FOR SOLDIER EAT SCENE
MOVE A0,@INTRO
JAUC WAITTNT
DO_BLN
MOVI [113,0],A0
MOVI [46,0],A1
MOVI BLLN1,A2 ;IMG
MOVI 289,A3 ;ZPOS
MOVI CLSNEUT|TYPTEXT,A5 ;ID
CLR A6 ;XVEL
CLR A7 ;YVEL
CALLR DOTXT
MOVI [134,0],A0
MOVI [46,0],A1
MOVI BLLN2,A2 ;IMG
CALLR DOTXT
MOVI [156,0],A0
MOVI [46,0],A1
MOVI BLLN2,A2 ;IMG
CALLR DOTXT
MOVI [176,0],A0
MOVI [46,0],A1
MOVI BLLN2,A2 ;IMG
CALLR DOTXT
MOVI [196,0],A0
MOVI [46,0],A1
MOVI BLLN2,A2 ;IMG
CALLR DOTXT
MOVI [217,0],A0
MOVI [46,0],A1
MOVI BLLN2,A2 ;IMG
CALLR DOTXT
MOVI [0DCH,0],A0
MOVI [049H,0],A1
MOVI BLLN3,A2 ;IMG
CALLR DOTXT
MOVI [103H,0],A0
MOVI [46,0],A1
MOVI BLLN1,A2 ;IMG
MOVI DMAWNZ|M_FLIPH|M_NOCOLL,A4
CALLA BEGINOBJ ;WORLD ADDED IN
MOVI BLLNP3,A0
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
MOVE A8,A9
RETS
STUFFLOW
SLEEPK 1
movi -1200,a0
move a0,@LOWZ
JRUC STUFFLOW
GENSPKA
;TURN ON TEXT BALLONS
MOVI BLOB1A,A14
CALLA DO_ALL_STUFF
CALLA ADJSTWTL
MOVI BLOB2A,A14
CALLA DO_ALL_STUFF
CALLA ADJSTWTL
MOVI BLOB3A,A14
CALLA DO_ALL_STUFF
CALLA ADJSTWTL
;TURN ON FIRST BALLOON TEXT FOR GENERAL
MOVE *A13(PDATA),A6,W
MOVI GTEXT1,A8
MOVI [021H,0125H-100],A9 ;SCRN Y/X
MOVI RD8FONT,A11 ;FONT TABLE
MOVK 1,A10 ;Y,X SPACING BETWEEN CHARCTERS
CLR A0
JSRP STRCNRMO_1 ;FULL COLOR FONT
MOVI GTEXT2,A8
MOVI [02CH,0123H-100],A9 ;SCRN Y/X
MOVE *A13(PDATA),A6,W
CLR A0
JSRP STRCNRMO_1
MOVI GTEXT3,A8
MOVI [037H,0125H-100],A9 ;SCRN Y/X
MOVE *A13(PDATA),A6,W
CLR A0
JSRP STRCNRMO_1
MOVI GTEXT4,A8
MOVI [042H,0124H-100],A9 ;SCRN Y/X
MOVE *A13(PDATA),A6,W
CLR A0
JSRP STRCNRMO_1
SLEEP 0C0H
MOVI DTXTA,A8
CALLR ERASE_TXT_LTRS
SLEEPK 2
MOVE *A13(PDATA),A6,W
MOVI GTEXT1A,A8
MOVI [021H,0125H-100],A9 ;SCRN Y/X
MOVI RD8FONT,A11 ;FONT TABLE
MOVK 1,A10 ;Y,X SPACING BETWEEN CHARCTERS
CLR A0
JSRP STRCNRMO_1 ;FULL COLOR FONT
MOVI GTEXT2A,A8
MOVI [02CH,0123H-100],A9 ;SCRN Y/X
MOVE *A13(PDATA),A6,W
CLR A0
JSRP STRCNRMO_1
MOVI GTEXT3A,A8
MOVI [037H,0125H-100],A9 ;SCRN Y/X
MOVE *A13(PDATA),A6,W
CLR A0
JSRP STRCNRMO_1
MOVI GTEXT4A,A8
MOVI [042H,0124H-100],A9 ;SCRN Y/X
MOVE *A13(PDATA),A6,W
CLR A0
JSRP STRCNRMO_1
SLEEP 0C0H
MOVI DTXTA,A8
CALLR ERASE_TXT_LTRS ;ERASE 'AFTER THE 1999 WAR' TEXT
;TURN OFF BALLONS
MOVI CLSNEUT|TYPTEXT,A0
CLR A1
NOT A1
CALLA KILOBJ
SLEEP 45H
;THIS TURNS ON DOOMSDAY SQUAD MESSAGE
CALLR DO_BLN
MOVI SENDIN,A0 ;SPEECH OF "SEND IN SQUAD"
CALLA ONESND
JRUC GSPK2
SCOTT .WORD >F9F7,>10,>814B,0 ;GREAT SCOTT
GENSPK
SLEEP 03F0H
;SEND IN DOOMSDAY TEXT
CALLR DO_BLN
MOVI [099H,0],A0
MOVI [48,0],A1
MOVI GSCOTT,A2 ;IMG
CALLR DOTXT
MOVI SCOTT,A0
CALLA ONESND
SLEEP 90
CALLA DELOBJA8
MOVI CLSNEUT|TYPTEXT,A0 ;KILL ALL BALLOONS
CLR A1
NOT A1
CALLA KILOBJ
SLEEP 30
;THIS TURNS ON DOOMSDAY SQUAD MESSAGE
CALLR DO_BLN
MOVI SENDIN,A0 ;SPEECH OF "SEND IN SQUAD"
CALLA ONESND
JSRP DSQU
MOVK 3,A0
MOVE A0,@TAUNTOUT
DIE
DSQU
MOVI [084H,0],A0
MOVI [49,0],A1
MOVI SQUAD,A2 ;IMG
MOVI 289,A3 ;ZPOS
MOVI CLSNEUT|TYPTEXT,A5 ;ID
CLR A6 ;XVEL
CLR A7 ;YVEL
CALLR DOTXT
SLEEP 120
MOVI CLSNEUT|TYPTEXT,A0 ;KILL ALL BALLOONS
CLR A1
NOT A1
CALLA KILOBJ
RETP
GSPK2 JSRP DSQU
;GIRL TYPES
;TEXT OBJECTIVES APPEAR SLOWLY
;TAG:
MOVI FADEDWN,A0
MOVK 3,A1
MOVI 30H,A2
MOVE A2,@PCOUNT
CALLA FADEOUT2
CREATE INTROPID,STUFFLOW
MOVI OBJ1,A8 ;OBJECTIVE 1
MOVI [20,0200],A9 ;SCRN Y/X
MOVI 0C0CH,A6 ;COLOR CYCLE DIGITS
MOVI RD15FONT,A11 ;FONT TABLE
CLR A0
MOVE A0,@WRLD
MOVK 2,A10 ;Y,X SPACING BETWEEN CHARCTERS
MOVK 3,A0
JSRP STRCNRMO
movi -1200,a0
move a0,@LOWZ
MOVI OBJ2,A8 ;OBJECTIVE 1
MOVI [50,020H],A9 ;SCRN Y/X
MOVI 02525H,A6 ;COLOR CYCLE DIGITS
MOVK 3,A0
JSRP STRLNRMO
movi -1200,a0
move a0,@LOWZ
MOVI OBJ3,A8 ;OBJECTIVE 1
MOVI [69,020H],A9 ;SCRN Y/X
MOVI 02525H,A6 ;COLOR CYCLE DIGITS
MOVK 3,A0
JSRP STRLNRMO
movi -1200,a0
move a0,@LOWZ
MOVI OBJ4,A8 ;OBJECTIVE 1
MOVI [102,020H],A9 ;SCRN Y/X
MOVI 02525H,A6 ;COLOR CYCLE DIGITS
MOVK 3,A0
JSRP STRLNRMO
movi -1200,a0
move a0,@LOWZ
MOVI OBJ4A,A8 ;OBJECTIVE 1
MOVI [102,03CH],A9 ;SCRN Y/X
MOVI 02525H,A6 ;COLOR CYCLE DIGITS
MOVK 3,A0
JSRP STRLNRMO
movi -1200,a0
move a0,@LOWZ
MOVI OBJ5,A8 ;OBJECTIVE 1
MOVI [136,020H],A9 ;SCRN Y/X
MOVI 02525H,A6 ;COLOR CYCLE DIGITS
MOVK 3,A0
JSRP STRLNRMO
movi -1200,a0
move a0,@LOWZ
MOVI OBJ5A,A8 ;OBJECTIVE 1
MOVI [136,03EH],A9 ;SCRN Y/X
MOVI 02525H,A6 ;COLOR CYCLE DIGITS
MOVK 3,A0
JSRP STRLNRMO
movi -1200,a0
move a0,@LOWZ
MOVI OBJ5B,A8 ;OBJECTIVE 1
MOVI [155,03EH],A9 ;SCRN Y/X
MOVI 02525H,A6 ;COLOR CYCLE DIGITS
MOVK 3,A0
JSRP STRLNRMO
SLEEP 3*60 ;5*60
GET_OUT:
;XFERPROC HERE ON PLAYER EXIT FROM INTRO!
JSRP WNDWON ;GROW WINDOW
SLEEPK 1
CLR A0
MOVE A0,@WAVE
MOVE A0,@WORLDTLX,L
MOVE @OBJPTR,A1,L
MOVE A0,*A1(OXVAL),L
MOVI FLGPID,A0
CALLA KIL1C ;KILL FLAG PROC
MOVI CYCPID,A0
CALLA KIL1C ;COLOR CYCLE KILL
MOVI INTROPID,A0
CALLA KIL1C ;INTRO STUFF
MOVI FADEDWN,A1
CALLA UNGET
MOVK 16,A0
CLR A0
; MOVK 12,A0
MOVE A0,@START
;WIPE TO FIRST BLIMP MODULE
CALLA CLR_ALL
MOVI 08000H,A0
MOVE A0,@HZSPD,L
MOVK 18,A0
MOVE A0,@timeron,W ;CAN ACCUMULATE SECONDS
MOVE A0,@CTOTAL ;FOR CRUISE MISSILE TOTAL
CLR A0 ;1=STUCK IN GOO, 0=BALL AND CHAIN
MOVE A0,@HSTGS_LOST
MOVE A0,@HSTGSET
MOVE A0,@HULK_CNT
;TURN ON A BULLET TO GET BULLET PAL UP CLOSE IN TABLE!
CALLA CLNPAL
CALLA CLRBPAL
MOVI BULT,A14
CALLA DO_ALL_STUFF
CALLA DELOBJ
MOVI ICN1,A0
MOVE A0,@ICLIST,L
MOVI ( 5 *32*32)+( 5 *32)+( 5 ),A1 ;GREY
MOVE @START,A0
JRNZ FAG
; .REF LOG
; CREATE0 LOG
;REGULAR START AT BEGINNING OF DESERT!
; MOVI 40,A0
; MOVE A0,@WAVE
; .REF TEXTTST
; JAUC TEXTTST
MOVI [127EH,0],A2
MOVE A2,@WORLDTLY,L
MOVI [0E4H,0],A0
MOVE A0,@WORLDTLX,L
MOVE @OBJPTR,A1,L
MOVE A0,*A1(OXVAL),L
MOVE A2,*A1(OYVAL),L
MOVK 1,A0
MOVE A0,@MINE_FLG
MOVI DSRTONE_MOD,A0
MOVE A0,@BAKMODS,L
CALLA BGND_UD1
CREATE FUTUREPID,USEB ;USE BOMB MESSAGE
.REF DO_HURRY
CREATE0 DO_HURRY
MOVK 15,A0
MOVE A0,@MAXHULK
MOVI ( 11 *32*32)+( 7 *32)+( 0 ),A1 ;SAND COLOR
FAG MOVE A1,@IRQSKYE
CALLA INIT_SCORE ;SET UP SCORE FLAG, ETC.
; .IF DEBUG
MOVE @START,A0
JRZ REGSTRT
CMPI 1,A0
JRNZ ATP
;DO THIS FOR START OF GAME AT REACTOR
MOVK 1,A0 ;1=STUCK IN GOO, 0=BALL AND CHAIN
MOVE A0,@HSTGSET
MOVI STRT_MOD,A0 ;SHOW FORT MODULE
MOVE A0,@BAKMODS,L
CALLA BGND_UD1
MOVK 1,A9
MOVE A9,@TARGET_NUM ;FIRST TARGET FOR SCROLL
CLR A0
MOVE A0,@CRSRAM,L
MOVE A0,@WORLDTLX,L
MOVI 010000H,A0
MOVE A0,@WORLDTLY,L
MOVE @WORLDTLY,A9,L
SRL 16,A9
ADDI 230,A9 ;A9=Y TARGET LINE TO TRIGGER SCROLL
CLR A8 ;A8=0 MEANS NOT CHECKING FOR X TARGET
CLR A10
CREATE TARGPID,TARGET
CREATE0 FORDBG
JRUC ENTER
ATP CMPI 2,A0
JRNZ ATP2
;DO THIS FOR START OF GAME AT SECRET PATH #1
MOVK 1,A0 ;1=STUCK IN GOO, 0=BALL AND CHAIN
MOVE A0,@HSTGSET
; MOVK 18,A0
; MOVE A0,@CTOTAL ;LOTS OF CRUISE MISSILES
MOVI [08FEH,0],A0
MOVE A0,@WORLDTLY,L
CLR A0
MOVE A0,@CRSRAM,L
MOVE A0,@WORLDTLX,L
SLEEPK 2
CALLA DO5
CREATE0 DOATP
MOVI ( 8 *32*32)+( 5 *32)+( 4 ),A1 ;GREY
MOVE A1,@IRQSKYE
MOVI 08000H,A0
MOVE A0,@HZSPD,L
JRUC ENTER
ATP2 CMPI 3,A0
JRNZ ATP3
;START GAME AT FORT GATES - NUCLEAR FACILITY
MOVI [0476H+200,0],A2 ;35B
MOVE A2,@WORLDTLY,L
MOVE @OBJPTR,A1,L
MOVE A2,*A1(OYVAL),L
CALLR STRTA
MOVE @WORLDTLY,A9,L
SRL 16,A9
ADDI 130,A9 ;A9=Y TARGET LINE TO TRIGGER SCROLL
CLR A8 ;A8=0 MEANS NOT CHECKING FOR X TARGET
CLR A10
CREATE TARGPID,TARGET
JRUC ENTER
ATP3
CMPI 4,A0
JRNZ ATP4
;FOR START AT BEGINNING OF 1ST LOCKDOWN IN DESERT
CLR A0 ;1=STUCK IN GOO, 0=BALL AND CHAIN
MOVE A0,@HSTGSET
MOVI [100EH,0],A2
MOVE A2,@WORLDTLY,L
MOVI [0E4H,0],A0
MOVE A0,@WORLDTLX,L
MOVE @OBJPTR,A1,L
MOVE A0,*A1(OXVAL),L
MOVE A2,*A1(OYVAL),L
MOVI DSRTONE_MOD,A0 ;SHOW FORT MODULE
MOVE A0,@BAKMODS,L
CALLA BGND_UD1
MOVI ( 11 *32*32)+( 7 *32)+( 0 ),A1 ;SAND COLOR
MOVE A1,@IRQSKYE
MOVK 6,A9 ;6=1 PIXEL OF SCROLL!
MOVE A9,@TARGET_NUM ;FIRST TARGET FOR SCROLL
MOVI 252,A0
JRUC REGV
ATP4
CMPI 5,A0
JRNZ ATP5
;FOR START AT BEGINNING OF 2ND LOCKDOWN IN DESERT
CLR A0 ;1=STUCK IN GOO, 0=BALL AND CHAIN
MOVE A0,@HSTGSET
MOVI [0A80H-2,0],A2
MOVE A2,@WORLDTLY,L
MOVI [01FH,0],A0
MOVE A0,@WORLDTLX,L
MOVE @OBJPTR,A1,L
MOVE A0,*A1(OXVAL),L
MOVE A2,*A1(OYVAL),L
MOVI DSRTONE_MOD,A0 ;SHOW FORT MODULE
MOVE A0,@BAKMODS,L
CALLA BGND_UD1
MOVI ( 11 *32*32)+( 7 *32)+( 0 ),A1 ;SAND COLOR
MOVE A1,@IRQSKYE
MOVK 11,A0
CALLA DOLORD
MOVK 8,A9 ;8=1 PIXEL OF SCROLL!
MOVE A9,@TARGET_NUM ;FIRST TARGET FOR SCROLL
MOVI 252,A0
JRUC REGV
ATP5
CMPI 6,A0
JRNZ ATP6
;FOR START AT BEGINNING OF ROAD BEFORE ORCUS BOSS MONSTER
****************************************************************************
****************************************************************************
;BUG FIX
; MOVI [24H,8000H],A0
; MOVE A0,@WORLDTLX,L
; MOVI [4DDH,8000H],A2
; MOVE A2,@WORLDTLY,L
; MOVE A0,*A1(OXVAL),L
; MOVE A2,*A1(OYVAL),L
; MOVI DSRTNEW_MOD,A0 ;SHOW FORT MODULE
; MOVE A0,@BAKMODS,L
; MOVI ( 11 *32*32)+( 7 *32)+( 0 ),A1 ;SAND COLOR
; MOVE A1,@IRQSKYE
; JRUC ENTER
****************************************************************************
****************************************************************************
CLR A2
MOVE A2,@HSTGSET
MOVE A2,@CRSRAM,L
; MOVI [160,0],A2 ;HINT PATCH
MOVE A2,@WORLDTLY,L
MOVI [021H,0],A0
MOVE A0,@WORLDTLX,L
MOVE @OBJPTR,A1,L
MOVE A0,*A1(OXVAL),L
MOVE A2,*A1(OYVAL),L
MOVI DSRTNEW_MOD,A0 ;SHOW FORT MODULE
MOVE A0,@BAKMODS,L
MOVI ( 11 *32*32)+( 7 *32)+( 0 ),A1 ;SAND COLOR
MOVE A1,@IRQSKYE
MOVK 15,A0
CALLA DOLORD
MOVI PATHCA,A10 ;INDICATES NEW SCROLL WITH SCRL TABLE
MOVE @WORLDTLY,A9,L
SRL 16,A9
ADDI 250,A9 ;A9=Y TARGET LINE TO TRIGGER SCROLL
CLR A8 ;A8=0 MEANS NOT CHECKING FOR X TARGET
CREATE TARGPID,TARGET
CREATE0 SBOMBZ
MOVK 8,A0 ;10
MOVE A0,@CTOTAL
MOVI ICN5,A0
MOVE A0,@ICLIST,L
JRUC ENTER
SBOMBZ SLEEP 40
MOVE @PLYROBJS,A9,L
JRNZ SBZ
MOVE @PLYROBJS+32,A9,L
SBZ CREATE0 SBOMB
DIE
PATHCA ;DIR,CNT
.WORD 1,1,0
PATHR ;DIR,CNT
.WORD 3,0AB9H,0
PATHU ;DIR,CNT
.WORD 1,700,0
ATP6
CMPI 7,A0
JRNZ ATP7
;FOR START AT BEGINNING OF ROAD AFTER RACKUP
CLR A0 ;1=STUCK IN GOO, 0=BALL AND CHAIN
MOVE A0,@HSTGSET
MOVE A0,@CRSRAM,L
MOVI [5060,0],A2
MOVE A2,@WORLDTLY,L
MOVI [0450,0],A0
MOVE A0,@WORLDTLX,L
MOVE @OBJPTR,A1,L
MOVE A0,*A1(OXVAL),L
MOVE A2,*A1(OYVAL),L
MOVI ROAD_MOD,A0 ;SHOW ROAD
MOVE A0,@BAKMODS,L
MOVI ( 5 *32*32)+( 5 *32)+( 5 ),A1 ;SAND COLOR
MOVE A1,@IRQSKYE
CREATE0 FIX
MOVK 17,A0
MOVE A0,@WAVE
MOVK 1,A9 ;A9=0 FOR UP, 1 FOR RGT
CREATE ARWPID,ONARRW ;TURN ON UP ARROW
CREATE FUTUREPID,AOF ;ARROW OFF AFTER A TIME
MOVK 8,A0 ;10
MOVE A0,@CTOTAL
MOVI ICN4,A0
MOVE A0,@ICLIST,L
CREATE ICONPID,SEND_ICON ;2 ICON SETS FOR ROADWAY
MOVK SUBSPRY,A9 ;BULLET SUBTYPE
CREATE FIXPID,FIXGUNS
JRUC ENTER
ATP7
CMPI 8,A0
JRNZ ATP8
;FOR START AT END OF ROAD AFTER RACKUP
CLR A0 ;1=STUCK IN GOO, 0=BALL AND CHAIN
MOVE A0,@HSTGSET
MOVE A0,@CRSRAM,L
MOVI [5060,0],A2
MOVE A2,@WORLDTLY,L
MOVI [0C7AH,0],A0
MOVE A0,@WORLDTLX,L
MOVE @OBJPTR,A1,L
MOVE A0,*A1(OXVAL),L
MOVE A2,*A1(OYVAL),L
MOVI ROAD_MOD,A0 ;SHOW ROAD
MOVE A0,@BAKMODS,L
MOVI ( 5 *32*32)+( 5 *32)+( 5 ),A1 ;GREY COLOR
MOVE A1,@IRQSKYE
MOVI AIRRECT1,A0
MOVE A0,@CURRENT,L
MOVI AIRBRECT1,A0
MOVE A0,@BCURRENT,L
MOVI ENAIR1,A0
MOVE A0,@EN_CURRENT,L ;FOR BOX COLLISIONS
MOVI 08000H,A0
MOVE A0,@HZSPD,L
MOVE @WORLDTLY,A9,L
SRL 16,A9
ADDI 90,A9 ;A9=Y TARGET LINE TO TRIGGER SCROLL
CLR A8 ;A8=0 MEANS NOT CHECKING FOR X TARGET
MOVI PATHU,A10 ;INDICATES NEW SCROLL WITH SCRL TABLE
CREATE TARGPID,TARGET
MOVK 18,A0
CALLA DOLORD
CLR A9 ;A9=0 FOR UP, 1 FOR RGT
MOVE A9,@TARGET_NUM
CREATE ARWPID,ONARRW ;TURN ON UP ARROW
CREATE FUTUREPID,AOF ;ARROW OFF AFTER A TIME
MOVK 13,A0 ;10
MOVE A0,@CTOTAL
MOVI ICN1,A0
MOVE A0,@ICLIST,L
; CREATE FUTUREPID,TWOJETS
; .REF BEACONS
; CREATE0 BEACONS ;SHOW AREA AROUND DISHES ETC.
JRUC ENTER
ATP8
CMPI 9,A0
JRNZ ATP9
;FOR START AT END OF AIRPLANE MISSILE AREA-ON RUNWAY
CLR A0 ;1=STUCK IN GOO, 0=BALL AND CHAIN
MOVE A0,@HSTGSET
MOVE A0,@CRSRAM,L
MOVI [0C23H,0],A2
MOVE A2,@WORLDTLY,L
MOVI [011E1H,0],A0
MOVE A0,@WORLDTLX,L
MOVE @OBJPTR,A1,L
MOVE A0,*A1(OXVAL),L
MOVE A2,*A1(OYVAL),L
MOVI PORT_MOD,A0 ;SHOW ROAD
MOVE A0,@BAKMODS,L
MOVI ( 5 *32*32)+( 5 *32)+( 5 ),A1 ;GREY COLOR
MOVE A1,@IRQSKYE
MOVI AIRRECT3A,A0 ;TAKEN CARE OF BY SCROLLER
MOVE A0,@CURRENT,L
MOVI AIRBRECT3,A0
MOVE A0,@BCURRENT,L
; MOVI ENAIR1,A0
; MOVE A0,@EN_CURRENT,L ;FOR BOX COLLISIONS
MOVI 08000H,A0
MOVE A0,@HZSPD,L
MOVE @WORLDTLX,A8,L
SRL 16,A8
ADDI 250,A8 ;300 ;A9=Y TARGET LINE TO TRIGGER SCROLL
CLR A9 ;A8=0 MEANS NOT CHECKING FOR X TARGET
MOVI PATHAIR2,A10 ;INDICATES NEW SCROLL WITH SCRL TABLE
CREATE TARGPID,TARGETST
MOVK 18,A0
CALLA DOLORD
MOVK 1,A9 ;A9=0 FOR UP, 1 FOR RGT
MOVE A9,@TARGET_NUM
CREATE ARWPID,ONARRW ;TURN ON UP ARROW
CREATE FUTUREPID,AOF ;ARROW OFF AFTER A TIME
MOVK 13,A0 ;10
MOVE A0,@CTOTAL
MOVI ICN1,A0
MOVE A0,@ICLIST,L
JRUC ENTER
ATP9
CMPI 12,A0
JRNZ ATP10
;FOR START AT END OF AIRPORT LOCKDOWN
MOVK 1,A0 ;1=STUCK IN GOO, 0=BALL AND CHAIN
MOVE A0,@HSTGSET
CLR A0
MOVE A0,@CRSRAM,L
MOVI [09A2H,0],A2
MOVE A2,@WORLDTLY,L
MOVI [01370H,0],A0
MOVE A0,@WORLDTLX,L
MOVE @OBJPTR,A1,L
MOVE A0,*A1(OXVAL),L
MOVE A2,*A1(OYVAL),L
MOVI PORT_MOD,A0 ;SHOW ROAD
MOVE A0,@BAKMODS,L
MOVI ( 5 *32*32)+( 5 *32)+( 5 ),A1 ;GREY COLOR
MOVE A1,@IRQSKYE
MOVI AIRRECT3A,A0 ;TAKEN CARE OF BY SCROLLER
MOVE A0,@CURRENT,L
MOVI AIRBRECT3,A0
MOVE A0,@BCURRENT,L
MOVI 010000H,A0
MOVE A0,@HZSPD,L
MOVE @WORLDTLY,A9,L
SRL 16,A9
ADDI 250,A9 ;A9=Y TARGET LINE TO TRIGGER SCROLL
CLR A8 ;A8=0 MEANS NOT CHECKING FOR X TARGET
MOVI PATHCB,A10 ;INDICATES NEW SCROLL WITH SCRL TABLE
CREATE TARGPID,TARGET
MOVK 29,A0
MOVE A0,@WAVE
MOVK 13,A0 ;10
MOVE A0,@CTOTAL
MOVI ICN1,A0
MOVE A0,@ICLIST,L
;PUT IN RECTANGLES FOR ENEMY COLLISIONS HERE!
JRUC ENTER
ATP10
CMPI 13,A0
JRNZ ATP11
;FOR START AT BEGINNING OF 2ND ROAD AFTER 2ND RACKUP
CLR A0 ;1=STUCK IN GOO, 0=BALL AND CHAIN
MOVE A0,@HSTGSET
MOVE A0,@CRSRAM,L
MOVI [912H,0],A2
MOVE A2,@WORLDTLY,L
MOVI [01520H,0],A0
MOVE A0,@WORLDTLX,L
MOVE @OBJPTR,A1,L
MOVE A0,*A1(OXVAL),L
MOVE A2,*A1(OYVAL),L
MOVI ROAD2_MOD,A0 ;SHOW ROAD
MOVE A0,@BAKMODS,L
MOVI ( 5 *32*32)+( 5 *32)+( 5 ),A1 ;SAND COLOR
MOVE A1,@IRQSKYE
CREATE0 FIX3
MOVK 18,A0
MOVE A0,@WAVE
MOVK 2,A9 ;A9=0 FOR UP, 1 FOR RGT
CREATE ARWPID,ONARRW ;TURN ON LFT ARROW
CREATE FUTUREPID,AOF ;ARROW OFF AFTER A TIME
MOVK 8,A0 ;10
MOVE A0,@CTOTAL
MOVI ICN4,A0
MOVE A0,@ICLIST,L
CREATE ICONPID,SEND_ICON ;2 ICON SETS FOR ROADWAY
MOVK SUBSPRY,A9 ;BULLET SUBTYPE
CREATE FIXPID,FIXGUNS
JRUC ENTER
ATP11
CMPI 14,A0
JRNZ ATP12
;FOR START AT END OF 2ND ROAD
CLR A0 ;1=STUCK IN GOO, 0=BALL AND CHAIN
MOVE A0,@HSTGSET
MOVE A0,@CRSRAM,L
SLEEPK 1
MOVI [912H,0],A2
MOVE A2,@WORLDTLY,L
MOVI [0611H,0],A0
MOVE A0,@WORLDTLX,L
MOVE @OBJPTR,A1,L
MOVE A0,*A1(OXVAL),L
MOVE A2,*A1(OYVAL),L
SLEEPK 1
MOVI ROAD2_MOD,A0 ;SHOW ROAD
MOVE A0,@BAKMODS,L
MOVI ( 5 *32*32)+( 5 *32)+( 5 ),A1 ;SAND COLOR
MOVE A1,@IRQSKYE
CLR A0
MOVE A0,@CURRENT,L
MOVE A0,@BCURRENT,L
MOVE @WORLDTLX+16,A8
ADDK 5,A8 ;A8=X TARGET LINE TO TRIGGER SCROLL
CLR A9 ;A9=0 MEANS NOT CHECKING FOR Y TARGET
MOVI PATHL2,A10 ;INDICATES NEW SCROLL WITH SCRL TABLE
MOVI 08000H,A0
MOVE A0,@HZSPD,L
CREATE TARGPID,TARGET
MOVI 34,A0
MOVE A0,@WAVE
MOVK 8,A0 ;10
MOVE A0,@CTOTAL
MOVI ICN4,A0
MOVE A0,@ICLIST,L
CREATE ICONPID,SEND_ICON ;2 ICON SETS FOR ROADWAY
SLEEPK 1
JRUC ENTER
PATHL2 ;DIR,CNT
.WORD 7,01H,0
ATP12 CMPI 15,A0
JRNZ ATP13
;FOR START AT BOSS MONSTER PIT IN BASEMENT
CLR A0 ;1=STUCK IN GOO, 0=BALL AND CHAIN
MOVE A0,@HSTGSET
MOVE A0,@CRSRAM,L
; MOVI [064H,0],A2
MOVI [4e8H,0],A2
MOVE A2,@WORLDTLY,L
MOVI [05B8H,0],A0
MOVE A0,@WORLDTLX,L
MOVE @OBJPTR,A1,L
MOVE A0,*A1(OXVAL),L
MOVE A2,*A1(OYVAL),L
SLEEPK 1
MOVI BOSS_MOD,A0 ;SHOW BOSS PIT
MOVE A0,@BAKMODS,L
MOVI ( 3 *32*32)+( 4 *32)+( 5 ),A1 ;BLUE FLOOR
MOVE A1,@IRQSKYE
**************************************************************************
CLR A9 ;A9=0 FOR UP, 1 FOR RGT
CREATE ARWPID,ONARRW ;TURN ON LFT ARROW
CREATE FUTUREPID,AOF ;ARROW OFF AFTER A TIME
MOVI 35,A0
MOVE A0,@WAVE
MOVI ICN5,A0
MOVE A0,@ICLIST,L
CREATE ICONPID,SEND_ICON ;2 ICON SETS FOR BOSS
SLEEPK 1
**************************************************************************
CALLR STRT_C
; movk 1,a8 ;DEBUG mode
clr a8
CREATE BOSSPID,aboss
JRUC ENTER
PATHB2 .WORD 1,1A8H,0
GRNS
.word >0,>60,>80,>80,>A0,>C0,>E0,>100
.word >120,>140,>160,>180,>1A0,>1C0,>1E0,>200
.word >220,>260,>2A0,>2C0,>380,>3E0
;NEED A DUPLICATE SET
.word >0,>60,>80,>80,>A0,>C0,>E0,>100
.word >120,>140,>160,>180,>1A0,>1C0,>1E0,>200
.word >220,>260,>2A0,>2C0,>380,>3E0
.WORD -1
ATP13
CMPI 16,A0
JRNZ ATP14
;FOR START AT BEGINNING OF UNDRGRND AREA
MOVI ( 3 *32*32)+( 4 *32)+( 5 ),A1 ;BLUE FLOOR
MOVE A1,@IRQSKYE
CLR A10
JSRP STRT_UNDER
CALLA BGND_UD1
SLEEPK 1
CALLA BGND_UD1
SLEEPK 1
MOVK 3,A0 ;WALK IN FROM TOP
JRUC ENTER2
STRT_UNDER
CLR A0 ;1=STUCK IN GOO, 0=BALL AND CHAIN
MOVE A0,@HSTGSET
MOVE A0,@CRSRAM,L
SLEEPK 1
MOVI [04E8H,0],A2 ;AT START
MOVE A2,@WORLDTLY,L
MOVI [068H,0],A0
MOVE A0,@WORLDTLX,L
MOVE A10,A10
JRNZ STU1
MOVE @OBJPTR,A1,L
MOVE A0,*A1(OXVAL),L
MOVE A2,*A1(OYVAL),L
STU1 SLEEPK 1
MOVI BOSS_MOD,A0 ;SHOW BOSS PIT
MOVE A0,@BAKMODS,L
CLR A0
MOVE A0,@CURRENT,L
MOVE A0,@BCURRENT,L
CREATE0 DLYINTO
MOVI 38,A0
MOVE A0,@WAVE
MOVI ICN1,A0
MOVE A0,@ICLIST,L
CLR A0
MOVE A0,@FREETOT
RETP
;TUNER .word >f3fe,10,>800d,0 ;Rackup tune
DLYINTO SLEEP 60
CALLR STRT_C ;COLOR CYCS FOR BASEMENT
MOVI TUNER,A0
CALLA ONESND
SLEEP 100
MOVI BASE1,A0
MOVE A0,@CURRENT,L
MOVI BASEB1,A0
MOVE A0,@BCURRENT,L
MOVI 38,A0
CALLA DOLORD
MOVI ERECTU1,A0
MOVE A0,@ENEMY_RECT,L ;FOR SPAWNING
CREATE ICONPID,SEND_ICON ;2 ICON SETS DOWNSTAIRS
CALLR GETSPEAK
DIE
ERECTU1
.WORD 0,1,68H+168,4E8H+270,68H+170,4E8H+280
.WORD 0,1,68H+168,4E8H+270,68H+170,4E8H+280
.WORD 0,5,68H+175,4E8H-40,68H+176,4E8H-20
.WORD 0,5,68H+175,4E8H-40,68H+176,4E8H-20
.WORD 0,7,68H+400,4E8H+130,68H+420,4E8H+140
.WORD 0,7,68H+400,4E8H+130,68H+420,4E8H+140
.WORD 0,5,68H+175,4E8H-40,68H+176,4E8H-20
.WORD 0,7,68H+400,4E8H+100,68H+420,4E8H+140
BXO .set >578
BYO .set >95
BASE1 .WORD 06DH,4F0H,8BH,5F0H ;SIDE WALL
.WORD 06DH,4F0H,05E0H,520H ;TOP WALL
.word >c9b-BXO,>420-BYO,>cd0-BXO,>1000 ;RIGHT SIDE WALL AT END
.WORD 0
BASEB1 .WORD 06DH,4F0H,84H,5F0H ;SIDE WALL
.WORD 6DH,4F0H,05D5H,510H ;TOP WALL
.WORD 0
ATP14
LOCKUP
PATHCB ;DIR,CNT
.WORD 1,1,19,1,0
STRT_C
;CYCLE BASEMENT WALLS/FLOOR
MOVI UPAL,A8 ;PAL NAME
MOVI PALTMP,A9 ;RAM AREA
MOVI [50,63],A10 ;BEGIN/END COLOR #
MOVK 7,A11 ;RATE IN TICKS
CREATE CYCPID,COLCYC ;COLOR CYCLER ON
MOVI ENDBSSP,A8 ;PAL NAME
MOVI PALTMP1,A9 ;RAM AREA
MOVI [49,55],A10 ;BEGIN/END COLOR #
MOVK 6,A11 ;RATE IN TICKS
CREATE CYCPID,COLCYC ;COLOR CYCLER ON
MOVI ENDBSSP,A8 ;PAL NAME
MOVI PALTMP2,A9 ;RAM AREA
MOVI [56,59],A10 ;BEGIN/END COLOR #
MOVK 5,A11 ;RATE IN TICKS
CREATE CYCPID,COLCYC ;COLOR CYCLER ON
MOVI ENDBSSP,A8 ;PAL NAME
MOVI PALTMP3,A9 ;RAM AREA
MOVI [59,64],A10 ;BEGIN/END COLOR #
MOVK 15,A11 ;RATE IN TICKS
CREATE CYCPID,COLCYC ;COLOR CYCLER ON
MOVI [48,1],A8 ;START AT COLOR 60, CYCLE 1 COLOR
MOVI ENDBSSP,A9 ;PAL NAME
MOVI GRNS,A10 ;TABLE TO CYCLE WITH
MOVK 6,A11 ;RATE OF CYCLE IN TICKS
CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE
MOVI GRNCYCLE,A8 ;PAL NAME
MOVI PALTMP4,A9 ;RAM AREA
MOVI [8,40],A10 ;BEGIN/END COLOR #
MOVK 7,A11 ;RATE IN TICKS
CREATE CYCPID,COLCYC ;COLOR CYCLER ON
RETS
TARGETST
SLEEPK 10
JAUC TARGET
PATHAIR2
.WORD 16,1,3,320H/2,17,1,1,504H/2,19,1,0
;3,340H,1,400,0
FIX
CLR A0 ;MOVI RDRECT1,A0
MOVE A0,@P1DATA+WAVEPTS
MOVE A0,@P2DATA+WAVEPTS
MOVI RDRECT1,A0
MOVE A0,@CURRENT,L
CLR A0
MOVE A0,@BCURRENT,L
MOVE @GAMSTATE,A0
CMPI INAMODE,A0
JRZ FIXAM
movk AUDROAD1,a0
calla aud_addnumplyrs
CREATE0 JETS
SLEEP 250-90 ;TIME TO GET MAP ICON
FIXAM SLEEP 90
MOVE @WORLDTLX,A8,L
SRL 16,A8
ADDK 5,A8 ;200 ;A8=X TARGET LINE TO TRIGGER SCROLL
CLR A9 ;A9=0 MEANS NOT CHECKING FOR Y TARGET
MOVI PATHR,A10 ;INDICATES NEW SCROLL WITH SCRL TABLE
MOVI 010000H,A0
MOVE A0,@HZSPD,L
CREATE TARGPID,TARGET
CREATE MAPPID,BIGMAP
SLEEP 160
CREATE0 ROAD ;TRUCKS ETC.
MOVI FEET,A0
CALLA ONESND
JRUC BL01
FIX3
movk AUDROAD2,a0
calla aud_addnumplyrs
CLR A0 ;MOVI RDRECT1,A0
MOVE A0,@P1DATA+WAVEPTS
MOVE A0,@P2DATA+WAVEPTS
MOVE A0,@CURRENT,L
MOVE A0,@BCURRENT,L
SLEEP 60 ;TIME TO GET MAP ICON
MOVE @WORLDTLX+16,A8
ADDK 5,A8 ;A8=X TARGET LINE TO TRIGGER SCROLL
CLR A9 ;A9=0 MEANS NOT CHECKING FOR Y TARGET
MOVI PATHL,A10 ;INDICATES NEW SCROLL WITH SCRL TABLE
MOVI 010000H,A0
MOVE A0,@HZSPD,L
CREATE TARGPID,TARGET
SLEEPK 20
CREATE0 ROAD2 ;TRUCKS ETC.
MOVI FEET,A0
CALLA ONESND
BL01 movi >8140,a1
move @PLYRPRCS,a0,L
jrz bl10
move *a0(LEG_PRC),a0,L
move a1,*a0(SHOECNT) ;Always with shoes
bl10 move @PLYRPRCS+32,a0,L
jrz bl15
move *a0(LEG_PRC),a0,L
move a1,*a0(SHOECNT)
bl15
SLEEP 60
MOVE @WAVE,A0
CMPI 40,A0
JRNZ BL01
DIE
FEET .WORD >F06E,>18,>80CA,0 ;FAST FEET PICKUP
PATHL ;DIR,CNT
.WORD 7,0F0EH,0
RX .EQU 24
RY .EQU 48
RDRECT1 .WORD 1604+36-RX,4994+RY,1808+85-RX,4994+54+RY ;TOP WALL ALONG ROAD
.WORD 0
FIXGUNS SLEEPK 8
;A9=SUBSPRY OR OTHER BULLET SUBTYPE
MOVK 32,A1
MOVE @PLYRPRCS,A0,L
JRZ FIX2
MOVE A9,*A0(WPN_TYP),W
MOVE A1,*A0(SHOTCNT)
FIX2 MOVE @PLYRPRCS+32,A0,L
JRZ FIXGUNS
MOVE A9,*A0(WPN_TYP),W
MOVE A1,*A0(SHOTCNT)
JRUC FIXGUNS
STRTA
;FOR START AT BEGINNING OF NUCLEAR FACILITY
MOVI 08000H,A0
MOVE A0,@HZSPD,L
MOVK 1,A0 ;1=STUCK IN GOO, 0=BALL AND CHAIN
MOVE A0,@WAVE
MOVE A0,@HSTGSET
MOVI STRT_MOD,A0 ;SHOW FORT MODULE
MOVE A0,@BAKMODS,L
CALLA BGND_UD1
CLR A9 ;A9=0 FOR UP, 1 FOR RGT
MOVE A9,@CRSRAM,L ;CRUISE MISSILE RAM
MOVE A9,@TARGET_NUM ;FIRST TARGET FOR SCROLL
CREATE ARWPID,ONARRW ;TURN ON UP ARROW
MOVI RECT1,A0
MOVE A0,@CURRENT,L
MOVI BRECT1,A0
MOVE A0,@BCURRENT,L
MOVI ENRECT1,A0
MOVE A0,@EN_CURRENT,L ;FOR BOX COLLISIONS
MOVI ERECT1,A0
MOVE A0,@ENEMY_RECT,L ;FOR SPAWNING
CREATE MAPPID,BIGMAP
CALLR STRT_FORT ;FORT CYCLE
MOVI TUNE7,A0
CALLA ONESND
RETS
REGSTRT:
; .ENDIF
;DO THIS FOR REAL START OF GAME AT DESERT
MOVK 5,A9 ;5=DESERT FIRST SCROLL
MOVE A9,@TARGET_NUM ;FIRST TARGET FOR SCROLL
CLR A9
CREATE ICONPID,SEND_ICON
CREATE ARWPID,ONARRW ;TURN ON UP ARROW
CREATE MAPPID,BIGMAP
CREATE WARPPID,WARPER
CREATE FUTRPID,DOBTR60
; .REF SEND_GEMS
; CREATE0 SEND_GEMS
; .REF LIMO
; CREATE0 LIMO
MOVI 52H,A0
REGV
MOVE @WORLDTLY,A9,L
SRL 16,A9
ADD A0,A9 ;A9=Y TARGET LINE TO TRIGGER SCROLL
CLR A8 ;A8=0 MEANS NOT CHECKING FOR X TARGET
CLR A10
CREATE TARGPID,TARGET
CLR A9 ;A9=0 FOR UP, 1 FOR RGT
MOVE A9,@CRSRAM,L
MOVI DRECT1,A0
MOVE A0,@CURRENT,L
MOVI DBRECT1,A0
MOVE A0,@BCURRENT,L
CREATE FUTUREPID,AOF ;ARROW OFF AFTER A TIME
MOVI ENRECT10,A0
MOVE A0,@EN_CURRENT,L ;FOR BOX COLLISIONS
MOVK 8,A0 ;10
MOVE A0,@CTOTAL
MOVI 011F0H,A0
MOVE A0,@JUMPXY
MOVI 01D8H,A0
MOVE A0,@JUMPXY2
; CALLR STRT_D
CALLA STRT_G ;GOOB COLOR CYCLE
MOVI MTNKP,A8 ;PAL NAME
MOVI PALTMP4,A9 ;RAM AREA
MOVI [22,25],A10 ;BEGIN/END COLOR #
MOVK 7,A11 ;RATE IN TICKS
CREATE CYCPID,COLCYC ;COLOR CYCLER ON
ENTER
CALLA BGND_UD1
SLEEPK 1
CALLA BGND_UD1
SLEEPK 1
CLR A0
ENTER2
MOVE A0,@RUNIN,W
CLR A0
MOVE A0,@MINE_FLG
CALLA BGND_UD1
CALLR SETC2 ;LAND MINE CYCLE
;TURN ON PLAYERS BASED ON STATUS WORD
CALLA CLNPAL
CREATE JOYPID,JOY_UPDATE
MOVE @STATUS,A9
BTST 0,A9
JRZ NEXT1
MOVK 1,A8
CREATE PLY1PID,DRAW_PLYR_TORSO
MOVE @WORLDTLY,A3,L
CMPI [127EH,0],A3
JRZ NEXT1 ;BR=STARTING AT PARACHUTES!
MOVE @RUNIN,A10 ;A10=0 FOR COME IN FROM BOTTOM
CREATE SCRPID,SCRIPTPLAY
NEXT1 BTST 1,A9
JRZ NEXT2
MOVK 2,A8
CREATE PLY2PID,DRAW_PLYR_TORSO
MOVE @WORLDTLY,A3,L
CMPI [127EH,0],A3
JRZ NEXT2 ;NO RUN IN!
MOVE @RUNIN,A10 ;A10=0 FOR COME IN FROM BOTTOM
CREATE SCRPID,SCRIPTPLAY
NEXT2
JSRP WNDWOFF ;TAKE WINDOW OFF
;DESERT PARACHUTE AREA BEING SHOWN
MOVI INGAME,A0 ;NOT IN INTRO MODE ANYMORE!
MOVE A0,@GAMSTATE,W ;FLAG INGAME
CLR A0
MOVE A0,@NO_START
; MOVE A0,@WAVE
MOVE A0,@RUNIN,W
CALLA INIT_RAM ;INIT GAME RAM USAGE
CREATE LORDPID,AUTO_SBMB
CREATE COLPID,COLLISIONS ;COLL2
CREATE CHNKPID,ALL_CHUNKS ;CHUNK DRIVER
SLEEPK 2
CALLA DMA_SCORE
;START SCROLLING CODE FOR SCREEN
;START PLAYERS WALKING THROUGH GATE
CREATE ICONPID,SEND_ICON
MOVI TUNE2,A0
CALLA ONESND ;START FIRST WORLD MUSIC
; .REF KEY_TOTAL
; CREATE0 KEY_TOTAL
.REF BMB_HELP
CREATE0 BMB_HELP
.REF KEY_HELP
CREATE0 KEY_HELP
MOVE @START,A0
CMPI 3,A0
JANZ SUCIDE
;START OF GAME OUTSIDE ENTRANCE TO REACTOR WORLD
CREATE FUTUREPID,SEND_TOP ;SEND FIRST ENEMIES
MOVK 1,A0
CALLA DOLORD
MOVI TUNE7,A0
CALLA ONESNDOVR
DIE
INIT_RAM:
CLR A0
MOVE A0,@HULK_DN
MOVE A0,@SKIPR_DN
MOVE A0,@SHK_ON
MOVE A0,@PCTOT ;CAREFUL!!
MOVE A0,@NOSHOOT
; MOVE A0,@HSTGS_LOST
; MOVE A0,@HSTGSET
MOVE A0,@FREETOT ;FREE MEN COLLECTED
MOVE A0,@CRSRAM,L
MOVE A0,@CTOTAL
MOVE A0,@CYCLIFE
MOVE A0,@AHMD_CNT ;TOTAL AHMEDS ON SCREEN
RETS
XX .EQU 241-13
YY .EQU 202+48H
DRECT1
;FIRST RECTANGLE LIST FOR PLAYERS IN DESERT
;PIT ON LEFT
.WORD 0CEH,126DH-3AH,122H,131CH-3AH ;447-XX,4912-YY,511+20-XX,5083+20-YY
;ONE ENTRY = UPLFT,LOWRGT
.WORD 122H,127FH-3AH,145H,1314H-3AH ;511+20-XX,4933-YY,546+20-XX,5075+20-YY
.WORD 146H,128DH-3AH,155H,1310H-3AH ;547+20-XX,4951-YY,567+20-XX,5075+20-YY
.WORD 155H,12A6H-3AH,168H,1308H-3AH ;568+20-XX,4976-YY,596+20-XX,5054+20-YY
.WORD 168H,12C8H-3AH,17CH,12F0H-3AH
;MOUND ON RIGHT
.WORD 675-XX,4849+11-YY,870-XX,4917+32-YY
;FIRST BARBED WIRE LINE
.WORD 226+6-XX,4600+17-YY,603+25-XX,4635+27-YY
.WORD 733+6-XX,4600+17-YY,1028+25-XX,4635+27-YY
DRECT2
;FIRST LOCK DOWN AREA
.WORD 226+6-XX,4600+20-YY,603+25-XX,4635+25-YY
.WORD 733+6-XX,4600+20-YY,1028+25-XX,4635+25-YY
.WORD 758+6-XX,4370+20-YY,864+25-20-XX,4407+25-YY ;WALL TOPRGT
.WORD 0
DRECT3
;AFTER FIRST LOCK DOWN AREA FOR PATH B
.WORD 490+3-XX,3891+20-YY,776+20-XX,3869+61+25-YY ;MID SCRN WAL
.WORD 992+3-XX,3891+20-YY,1040+25-XX,3869+61+25-YY ;LITTLE WALL
.WORD 586+3-XX,3669+20-YY,682+20-XX,3647+61+25-YY ;MID TURT WAL
.WORD 372+3-XX,3285+20-YY,1044+25-XX,3263+61+25-YY ;LONG WALL
.WORD 372+3-XX,3218+20-YY,393+25-XX,3263+61+25-YY ;VERT POST
.WORD 248-XX,2964-YY,338+19-XX,3099+32-YY ;HUT AT LK DWN
.WORD 0
DRECT3A
;AFTER FIRST LOCK DOWN AREA FOR PATH A
.WORD 490+3-XX,3891+20-YY,776+20-XX,3869+61+25-YY ;MID SCRN WAL
.WORD 586+3-XX,3669+20-YY,682+20-XX,3647+61+25-YY ;MID TURT WAL
.WORD 372+3-XX,3285+20-YY,1044+25-XX,3263+61+25-YY ;LONG WALL
.WORD 372+3-XX,3218+20-YY,393+25-XX,3263+61+25-YY ;VERT POST
.WORD 245+8-XX,4077+13-YY,245+95-XX,4160+81-YY ;TOP/BOT DISH TOGETHER
.WORD 248-XX,2964-YY,338+19-XX,3099+32-YY ;HUT AT LK DWN
.WORD 0
DRECT4
;LOCK DOWN AT FIRST HUT
.WORD 248-XX,2964-YY,338+19-XX,3099+32-YY ;HUT AT LK DWN
.WORD 0
DRECT5 ;WAVE 15
;SCROLLING UP INTO NEW DESERT AREA FOR PLAYERS
.WORD 760-XX,2125+10H-YY,1028+25-XX,2170+10H-YY ;WAL RGT
.WORD 245+8-XX,2110+13+60H-YY,245+95-XX,2191+60H-YY ;LFT DISH
.WORD 0
DRECT6 ;WAVE 15
;SCROLLING UP INTO NEW DESERT AREA FOR PLAYERS NEAR BIG HUTS
.WORD 02CDH,05F0H,314H,68CH ;RGT DISHES
.WORD 134H,5ECH,203H,692H ;SQR HUT
.WORD 0
DRECT7 ;WAVE 15
;SCROLLING UP INTO NEW DESERT AREA FOR PLAYERS NEAR BIG HUTS
.WORD 133H-170,5ECH-300,205H-187,692H-300 ;139 ;SQR HUT #2
.WORD 97H,368H-8,125H,393H
.WORD 163H,368H-8,1E0H,393H
.WORD 225H,368H-8,35FH,393H
.WORD 0
DRECT8 ;WAVE 15 RIGHT BEFORE CLIFF JUMPERS
;SCROLLING UP INTO NEW DESERT AREA FOR PLAYERS NEAR BIG HUTS
.WORD 9H,227H,180H,274H
.WORD 110H,198H,2C5H,1E8H
.WORD 0
DBRECT8 ;WAVE 15 RIGHT BEFORE CLIFF JUMPERS
;SCROLLING UP INTO NEW DESERT AREA FOR BULLETS NEAR BIG HUTS
.WORD 9H,21CH,175H,265H
.WORD 110H,188H,2C5H,1D1H
.WORD 0
DBRECT7 ;WAVE 15
;SCROLLING UP INTO NEW DESERT AREA FOR BULLETS NEAR BIG HUTS
.WORD 139H-172,5F0H-300,1FEH-185,686H-300 ;SQR HUT
.WORD 97H,368H-13,125H+9,393H-13
.WORD 163H,368H-13,1E0H+9,393H-13
.WORD 225H,368H-13,35FH+9,393H-13
.WORD 0
DBRECT6 ;WAVE 15
;SCROLLING UP INTO NEW DESERT AREA FOR BULLETS NEAR BIG HUTS
.WORD 2CDH,5E0H,314H,680H ;RGT DISHES
.WORD 139H,5F0H,1FEH,686H ;SQR HUT
.WORD 0
DBRECT5 ;WAVE 15
;SCROLLING UP INTO NEW DESERT AREA FOR BULLETS
.WORD 245+8+4-XX,2110+13+1+60H-YY,245+95-10-XX,2191-10+60H-YY ;LFT DISH
.WORD 760-XX,2125-11+8-YY,1028+34-XX,2170-21+24-YY ;WAL RGT
.WORD 0
DBRECT1
;FIRST RECTANGLE LIST FOR PLAYERS IN DESERT
;MOUND ON RIGHT
.WORD 671+12-XX,4838+10-YY,865-XX,4917+18-YY
;FIRST BARBED WIRE LINE
.WORD 226+6-XX,4600+6-YY,603+24-XX,4635+6-YY
.WORD 733+6-XX,4600+6-YY,1028+34-XX,4635+6-YY
DBRECT2
;FIRST LOCK DOWN AREA
.WORD 758+6-XX,4370+9+3-YY,854+34-20-XX,4405+8-YY ;WAL TOP/RGT
.WORD 0
DBRECT3
;AFTER FIRST LOCK DOWN AREA FOR PATHB
.WORD 992+6-XX,3889+12-YY,1040+30-XX,3869+61+8-YY ;LITTLE WALL
.WORD 490+6-XX,3889+12-YY,776+20-XX,3869+61+8-YY ;MID SCRN WAL
.WORD 586+6-XX,3665+12-YY,682+20-XX,3647+61+8-YY ;MID TURT WAL
.WORD 368+6-XX,3281+12-YY,1044+35-XX,3263+61+8-YY ;LONG WALL
.WORD 375+6-XX,3220+12-YY,383+35-XX,3263+61+8-YY ;VERT POST
.WORD 248-XX,2944+8-YY,338+8-XX,3085+32-YY ;HUT AT LK DWN
.WORD 0
DBRECT3A
;AFTER FIRST LOCK DOWN AREA FOR PATH A
.WORD 490+6-XX,3889+12-YY,776+20-XX,3869+61+8-YY ;MID SCRN WAL
.WORD 586+6-XX,3665+12-YY,682+20-XX,3647+61+8-YY ;MID TURT WAL
.WORD 368+6-XX,3281+12-YY,1044+35-XX,3263+61+8-YY ;LONG WALL
.WORD 375+6-XX,3220+12-YY,383+35-XX,3263+61+8-YY ;VERT POST
.WORD 248-XX,2944+8-YY,338+8-XX,3085+32-YY ;HUT AT LK DWN
;ADD SATELITE BULLET RECT HERE
; .WORD 626-XX,5070-YY,713-XX,5138-YY ;LEFT DISH FOR BNCING
; .WORD 626+4-XX,5070+1-YY,713-10-XX,5138-10-YY ;LEFT DISH FOR BULLTS
; .WORD 245+8-XX,4077+13-YY,245+95-XX,4160+81-YY ;TOP/BOT DISH FOR BNCING
.WORD 245+8+4-XX,4077+13+1-YY,245+95-10-XX,4160+81-10-YY ;TOP/BOT DISH FOR BULLTS
.WORD 0
DBRECT4
;LOCK DOWN AT FIRST HUT
.WORD 248-XX,2944+8-YY,338+8-XX,3085+32-YY ;HUT AT LK DWN
.WORD 0
AIRRECT1 ;ENTERING AIRPORT
.WORD 0C80H,12B5H,0CFFH,1306H ;D0A
.WORD 0D7FH,12B5H,0E18H,1306H
.WORD 0
AIRBRECT1
.WORD 0C80H,12BFH,0CE8H,012F8H
.WORD 0D84H,12BFH,0E08H,12F8H
.WORD 0
ENAIR1 ;AIRPORT GATES
.WORD 0C80H,12B5H,0E20H,1300H,5
.WORD 0
AOF SLEEP 60
MOVK 17,A0
MOVE A0,@ARWOFF ;BLINK ARROW X MORE TIMES THEN KILL!
DIE
SEND_TOP
;SEND FIRST GROUP OF HULKS DOWN AT PLAYER
MOVK 5,A8
SEND1
SLEEP >40
MOVE @WORLDTLY,A0,L
SUBI [35,0],A0
MOVE @WORLDTLX,A9,L
SRL 16,A9
ADDI 170,A9
MOVY A0,A9
MOVK 5,A10 ;GO DOWN
CLR A0
MOVE A0,@JUMPER
PUSH A8
CALLA SEND_GROUP
PULL A8
DSJ A8,SEND1
DIE
STRT_FORT
MOVI FRTCLS,A8 ;PAL NAME
MOVI PALTMP,A9 ;RAM AREA
MOVI [58,64],A10 ;BEGIN/END COLOR #
MOVK 7,A11 ;RATE IN TICKS
CREATE CYCPID,COLCYC ;COLOR CYCLER ON
RETS
STRT_D
;DISH CYCLE
MMTM SP,A8,A9,A10,A11
MOVI DISHPAL,A8 ;PAL NAME
MOVI PALTMP3,A9 ;RAM AREA
MOVI [45,49],A10 ;BEGIN/END COLOR #
MOVK 7,A11 ;RATE IN TICKS ;9
CREATE CYCPID,COLCYC ;COLOR CYCLER ON
MMFM SP,A8,A9,A10,A11
RETS
SETC2
;LAND MINE COLOR CYCLE
MOVI [60,1],A8 ;START AT COLOR 60, CYCLE 1 COLOR
MOVI BULLET,A9 ;PAL NAME
MOVI MLIT,A10 ;TABLE TO CYCLE WITH
MOVK 14,A11 ;RATE OF CYCLE IN TICKS
CREATE CYCPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE
MOVI WARPP,A8 ;PAL NAME
MOVI PALTMP5,A9 ;RAM AREA
MOVI [39,42],A10 ;BEGIN/END COLOR #
MOVK 7,A11 ;RATE IN TICKS
CREATE CYCPID,COLCYC ;COLOR CYCLER ON
RETS
DOTXT
MOVI DMAWNZ|M_NOCOLL,A4 ;NON-ZERO VALUE
CALLA BEGINOBJ ;WORLD ADDED IN
MOVI BLLNP3,A0
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
RETS
ZLST .LONG 0,ZULU,SEC1,SEC2,SEC3,DS1,HUT1,HUT2,YESB,NOB,SMASH1
.LONG NOG1,WOG1,YOG1,JPS1,FF1,HH1,SUR1,SURB1,RD1,GD1,XD1
.long akhtxt1,akctxt1,aketxt1,pdtxt1,ABT1,MSLT1
ZLST2 .LONG 0,ZULU2,SEC1A,SEC2A,SEC3A,DS1A,HUT1A,HUT2A,YESB2,NOB2,SMASH2
.LONG NOG2,WOG2,YOG2,JPS2,FF2,HH2,SUR2,SURB2,RD2,GD2,XD2
.long akhtxt2,akctxt2,aketxt2,pdtxt2,ABT2,MSLT2
ZLST3 .LONG 0,ZULU3,SEC1AA,SEC1B,SEC3B,DS1B,HUT1B,HUT2B,YESB3,SEC1B,SMASH3
.LONG NOG3,WOG3,YOG3,JPS3,SEC1B,HH3,SUR3,SURB3,RD3,GD3,XD3
.long SEC1B,akctxt3,aketxt3,SEC1B,SEC1B,SEC1B
ZULU .BYTE "NUCLEAR REACTOR",0
ZULU2 .BYTE "ZONE",0
ZULU3 .BYTE "[CODE= EATS]",0
SEC1 .BYTE "DESTROY GENERAL",0
SEC1A .BYTE "AKHBOOB'S SECRET",0
SEC1AA .BYTE "NUCLEAR CAPABILITY",0
SEC1B .BYTE " ",0
SEC2 .BYTE "BINGO! TRY PASSWORDS:",0
SEC2A .BYTE "MARK EATS FOOD",0
SEC3 .BYTE "YOU ARE AWESOME!",0
SEC3A .BYTE "GO HUNT DOWN",0
SEC3B .BYTE "GENERAL AKHBOOB!",0
DS1 .BYTE "YOU ARE SURROUNDED!",0
DS1A .BYTE "PREPARE FOR TOTAL",0
DS1B .BYTE "CARNAGE!",0
HUT1 .BYTE "YOU ARE THE WEASEL MAN!",0
HUT1A .BYTE "YOU SHALL ABSORB",0
HUT1B .BYTE "TOTAL PAIN!",0
HUT2 .BYTE "MEET ORCUS!",0
HUT2A .BYTE "THE MOTHER OF",0
HUT2B .BYTE "ALL BOSS MONSTERS!",0
YESB .BYTE "ALL VEHICHLES DESTROYED!",0
YESB2 .BYTE "25000 BONUS POINTS AND",0
YESB3 .BYTE "FREE MAN AWARDED!",0
NOB .BYTE "SCUD DESTRUCTION BONUS:",0
NOB2 .BYTE "5000 POINTS AWARDED!",0
SMASH1 .BYTE "ALL SMASH T.V. PLAYERS",0
SMASH2 .BYTE "SHOULD QUIT NOW AND FLEE",0
SMASH3 .BYTE "FROM THIS MACHINE.",0
NOG1 .BYTE "JEEP DESTRUCTION BONUS:",0
NOG2 .BYTE "5000 POINTS AND BONUS",0
NOG3 .BYTE "KEYS AWARDED!",0
WOG1 .BYTE "YOU HAVE FAILED TO DESTROY",0
WOG2 .BYTE "ALL OF THE JETS. YOU ARE",0
WOG3 .BYTE "A MAJOR DUFUS. NO BONUS.",0
YOG1 .BYTE "ALL JETS HAVE BEEN DESTROYED!",0
YOG2 .BYTE "25000 BONUS POINTS AWARDED!",0
YOG3 .BYTE "YOU ARE MOST AWESOME!",0
JPS1 .BYTE "DESTROY MOST OF THESE",0
JPS2 .BYTE "JEEPS AND YOUR SCORE",0
JPS3 .BYTE "WILL BE DOUBLED!",0
FF1 .BYTE "FLESH FEAST!",0
FF2 .BYTE "SUPER BONUS WARP COMING!",0
HH1 .BYTE "I WILL NOW FEAST UPON",0
HH2 .BYTE "YOUR PUNY LITTLE HEAD.",0
HH3 .BYTE "IT WILL TASTE GOOD!",0
SUR1 .BYTE "GENERAL AKHBOOB HAS YOU",0
SUR2 .BYTE "SURROUNDED!",0
SUR3 .BYTE "GIVE UP WEASEL!",0
SURB1 .BYTE "YOU HAVE BEEN CAPTURED!",0
SURB2 .BYTE "THERE IS NO ESCAPE!",0
SURB3 .BYTE "SUBMIT TO THE PAIN!",0
RD1 .BYTE "YOU HAVE SURVIVED THIS FAR.",0
RD2 .BYTE "I AM IMPRESSED. CAN YOU LAST",0
RD3 .BYTE "TO SEE THE SHOCKING CONCLUSION?",0
GD1 .BYTE "GREED FEST!",0
GD2 .BYTE "GRAB MOST OF THE GEMS",0
GD3 .BYTE "FOR DOUBLE SCORE BONUS!",0
XD1 .BYTE "ENTER GENERAL AKHBOOB'S",0
XD2 .BYTE "BIO-NUCLEAR FACILITY AND",0
XD3 .BYTE "HUNT HIM DOWN LIKE A DOG!",0
akhtxt1 .BYTE "FIND THE REAL GENERAL AKHBOOB.",0
akhtxt2 .BYTE "DON'T LET HIM ESCAPE!",0
akctxt1 .BYTE "YOU HAVE CAPTURED",0
akctxt2 .BYTE "GENERAL AKHBOOB!",0
akctxt3 .BYTE "FRY THE SCUMBAG!",0
aketxt1 .BYTE "GENERAL AKHBOOB",0
aketxt2 .BYTE "HAS ESCAPED!",0
aketxt3 .BYTE "YOU SUCK...",0
pdtxt1 .BYTE "MISSION COMPLETE:",0
pdtxt2 .BYTE "THE PLEASURE DOMES AWAIT.",0
ABT1 .BYTE "FINAL CONFLICT NEAR!",0
ABT2 .BYTE "YOUR PUNY HEAD WILL SWELL!",0
MSLT1 .BYTE "NOW SURVIVE THIS BARRAGE",0
MSLT2 .BYTE "OF MISSILES!",0
.EVEN
ZONE_TXT3
;A10=MESSAGE #
;A9=ADD IN Y VALUE
MOVK 1,A0
JRUC ZN3
ZONE_TXT2
;A10=MESSAGE #
;A9=ADD IN Y VALUE
CLR A0
ZN3 MOVE A0,@CAN_EXIT
MOVE A9,@ADDINY,L
MOVI COLRPID,A0
CALLA KIL1C
CREATE COLRPID,CYCSPECT ;START COLOR CYCLE PROCESS
SLEEPK 30 ;60
CALLR GETKP
ZTOP
MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS
MOVI [125-20,0200],A9 ;SCRN Y/X
MOVE @ADDINY,A10,L
ADD A10,A9
MOVI RD15FONT,A11 ;FONT TABLE
CLR A0
MOVE A0,@WRLD
MOVK 2,A10 ;Y,X SPACING BETWEEN CHARCTERS
CLR A0
JSRP STRCNRMO
MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS
MOVE @KEEP1,A8,L
MOVI [147-20,0200],A9 ;SCRN Y/X
MOVE @ADDINY,A0,L
ADD A0,A9
CLR A0
JSRP STRCNRMO
MOVE @KEEP4,A8,L
MOVI [169-20,0200],A9 ;SCRN Y/X
MOVE @ADDINY,A0,L
ADD A0,A9
MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS
CLR A0
JSRP STRCNRMO
CREATE0 FLYERS
SLEEP 5*60 ;+40
MOVI CLSNEUT|TYPTEXT|SUBTXT,A0
CLR A1
NOT A1
CALLA KILOBJ
KILCLR MOVI COLRPID,A0
CALLA KIL1C
DIE
GETKP
MOVI TXTSND1,A0
CALLA ONESND
SLL 5,A10
MOVI ZLST2,A0
ADD A10,A0
MOVE *A0,A0,L
MOVE A0,@KEEP1,L
MOVI ZLST3,A0
ADD A10,A0
MOVE *A0,A0,L
MOVE A0,@KEEP4,L
MOVK 9,A0
MOVE A0,@KEEP3
ADDI ZLST,A10
MOVE *A10,A8,L
MOVE A8,@KEEP,L
RETS
JMPSND .WORD >F48E,>18,>813D,0 ;FIEND JUMP SND
ZONE_TXT
;A8=COLOR TO USE
;A8=0C0CH OR 0F0FH
MOVE A8,@KEEPCL
CALLR GETKP
TOP0 MOVK 19,A0
MOVE A0,@KEEP2
MOVI JMPSND,A0
CALLA ONESND
TOP
MOVE @KEEPCL,A6
MOVI [70,0200],A9 ;SCRN Y/X
MOVI RD15FONT,A11 ;FONT TABLE
CLR A0
MOVE A0,@WRLD
MOVK 2,A10 ;Y,X SPACING BETWEEN CHARCTERS
CLR A0
JSRP STRCNRM
MOVE @KEEPCL,A6
MOVE @KEEP1,A8,L
MOVI [92,0100],A9 ;SCRN Y/X
MOVI RD15FONT,A11 ;FONT TABLE
CLR A0
JSRP STRLNRM
MOVE @KEEP4,A8,L
MOVI [92,0AFH],A9 ;SCRN Y/X
MOVI 3B3BH,A6 ;COLOR CYCLE DIGITS
MOVI RD15FONT,A11 ;FONT TABLE
CLR A0
JSRP STRLNRM
SLEEPK 1
MOVE @HALT,A0
JRNZ KILCLR
MOVE @KEEP,A8,L
MOVE @KEEP2,A0
DEC A0
MOVE A0,@KEEP2
JRNN TOP
SLEEPK 10
MOVE @KEEP3,A0
DEC A0
MOVE A0,@KEEP3
JRNN TOP0
MOVI TXTSND2,A0
CALLA ONESND
JRUC KILCLR
FADEDWN .LONG MAPP,DOMEP,0
OBJ1 .STRING "Game Objectives" ;Gulf War Objectives"
.BYTE 0
.EVEN
OBJ2 .STRING "1. Blast Through Enemy Forces" ;Republican Guard"
.BYTE 0
.EVEN
OBJ3 .STRING " To Find General Akhboob."
.BYTE 0
.EVEN
OBJ4 .STRING "2."
.BYTE 0
.EVEN
OBJ4A .STRING "Destroy Unknown Life Forms."
.BYTE 0
.EVEN
OBJ5 .STRING "3."
.BYTE 0
.EVEN
OBJ5A .STRING "Rescue News Reporters"
.BYTE 0
.EVEN
OBJ5B .STRING "And Other Civilians."
.BYTE 0
.EVEN
;INCT .STRING "INCOMING TRANSMISSION"
; .BYTE 0
; .EVEN
MLIT
;LAND MINES
.word ( 0 *32*32)+( 0 *32)+( 0 ) ; color 62
.word ( 29 *32*32)+( 0 *32)+( 0 ) ; color 63
.WORD -1 ;-1 BECAUSE WE ARE CYCLING 1
;COPY IT AGAIN IF WE WERE CYCLING MORE
; .word ( 0 *32*32)+( 0 *32)+( 0 ) ; color 62
; .word ( 29 *32*32)+( 0 *32)+( 0 ) ; color 63
UNGET
;LIST IN A1, TERMINATED BY A 0
;GET RID OF UNEEDED PALS!
MOVE *A1+,A0,L
JRZ UNOUT
CALLA FINDPAL
JRZ SON1
CALLA UNGETPAL
SON1
JRUC UNGET
UNOUT RETS
;
; OWINDOW - OPEN A TEXT WINDOW, ON THE OBJECT LIST.
;
; A8 = WINDOW SIZE
; A10 = CENTER POINT OF WINDOW (SCREEN RELATIVE)
; RETURNS:
; A8 = PTR WINDOW OBJECT
; ZBIT SET = FAILURE TO CREATE
; ZBIT CLR = WINDOW IS OPEN
; NOTE: CALL WITH JSRP
; TRASHES A9,A10 & A11
;
;
OWINDOW
MOVI WINDINIT,A14
CALLA GPALOBJ
MOVE A8,A11
MOVE A0,A8
JRZ OWINDOWX ;BR = FAILED MISERBLY
CALLA STFOBJ
MOVE A10,*A8(OXPOS),W
MOVY A10,A1
SRL 16,A1
MOVE A1,*A8(OYPOS),W
MOVI >0,A1
MOVE A1,*A8(OCONST),W
CALLA ADJSTWTL ;ADJUST TO THE WORLD TOP LEFT
CALLA INSOBJ
; MOVI [>0101,0],A0 ;WINDOW IS BLACK IN COLOR
; MOVE A0,*A8(OPAL),L
MOVE *A8(OXPOS),A10,W
MOVE *A8(OYPOS),A0,W
SLL 16,A0
MOVY A0,A10 ;GET NEW WORLD COORDS.
MOVE A10,A0 ;STORE HERE
MOVY A11,A1
SRL 17,A1
SLL 16,A1 ;DIVIDE Y BY 2
SLL 16,A11
SRL 17,A11 ;AND X
MOVY A1,A11
SUBXY A11,A10
ADDXY A0,A11
MOVE @WSPEED,A0 ;WINDOW SPEED
ORI 1,A0
JSRP OBJEXP32
MOVE A8,A8
OWINDOWX:
MOVI OWSPD,A0
MOVE A0,@WSPEED
RETP
*INIT TABLE FOR WINDOW
WINDINIT
.LONG 0,0,FONT7A ;AFONT0
.WORD 20001,DMACAL,CLSNEUT|TYPTEXT|SUBWNDW ;7FD4H
.LONG 0,0
;
; CWINDOW - CLOSE A TEXT WINDOW, ON THE OBJECT LIST.
; A8 = PTR TO WINDOW OBJECT
; RETURNS:
; WITH WINDOW OBJECT DELETED
; NOTE: CALL WITH JSRP
; TRASHES A9,A10 & A11
;
CWINDOW
MOVE *A8(OXPOS),A10,W
MOVE *A8(OYPOS),A11,W
SLL 16,A11
MOVY A11,A10
MOVE *A8(OSIZE),A11,L
MOVY A11,A1
SRL 17,A1
SLL 16,A1
SLL 16,A11
SRL 17,A11
MOVY A1,A11
ADDXY A11,A10
MOVE A10,A11 ;CALCULATED CENTER OF OBJECT
MOVI CWSPD,A0 ;WINDOW SPEED
JSRP OBJEXP32
CALLA DELOBJA8
RETP
DELWNDW
MOVE @OBJPTR,A0,L
MOVE A0,A8
jauc DELOBJ
;
; OBJEXP32 - SHRINK OR EXPAND AN OBJECT FROM THE CURRENT SIZE
; TO THE GIVEN SIZE IN A GIVEN AMOUNT OF TICKS.
; A0 = # OF TICKS
; A8 = PTR TO OBJECT
; A10 = NEW OBJTL
; A11 = NEW OBJLR
; NOTE: CALL WITH JSRP
; TRASHES A9
;
OBJEXP32
sll 32-8,a0 ;0-255
srl 32-8,a0
MOVE *A8(OXPOS),A1,W
MOVE *A8(OYPOS),A14,W
SLL 16,A14
MOVX A1,A14 ;A14 = OBJECT UL
SLL 16,A1
CLR A2
MOVY A14,A2
SUBXY A10,A14
MOVX A14,A5
SLL 16,A5
DIVS A0,A5
NEG A5
MOVE A5,A6
CLR A5
MOVY A14,A5
DIVS A0,A5
NEG A5
MOVE A5,A7
MOVE *A8(OXPOS),A3,W
MOVE *A8(OYPOS),A14,W
SLL 16,A14
MOVX A3,A14
MOVE *A8(OSIZE),A3,L
ADDXY A3,A14 ;A14 = OBJECT LR
PUSH A8 ;STACK OBJECT
MOVX A14,A3
SLL 16,A3
CLR A4
MOVY A14,A4
SUBXY A11,A14
MOVX A14,A5
SLL 16,A5
DIVS A0,A5
NEG A5
MOVE A5,A8
CLR A5
MOVY A14,A5
DIVS A0,A5
NEG A5
MOVE A5,A9
MOVE A0,A5
PULL A14 ;KEEP OBJECT HERE
OBJTIMLP:
ADD A6,A1 ;ADD THE TLX INCREMENT
ADD A7,A2 ;ADD THE TLY INCREMENT
ADD A8,A3 ;ADD THE LRX INCREMENT
ADD A9,A4 ;ADD THE LRY INCREMENT
MMTM A12,A1,A2,A3,A4,A5,A6,A7,A14
MOVE A1,*A14(OXVAL),L
MOVE A2,*A14(OYVAL),L
SUB A1,A3
SUB A2,A4 ;GET A SIZE FOR THE WINDOW
SRL 16,A3
MOVY A4,A3
CALLA FIXA3XY
MOVE A3,*A14(OSIZE),L
SLEEPK 1
MMFM A12,A1,A2,A3,A4,A5,A6,A7,A14
DSJS A5,OBJTIMLP
MOVE A10,*A14(OXPOS),W
MOVY A10,A1
SRL 16,A1
MOVE A1,*A14(OYPOS),W
MOVE A11,A9
SUBXY A10,A11
MOVE A11,A3
CALLA FIXA3XY
MOVE A3,*A14(OSIZE),L ;MATCH WHAT THE CALLER WANTED
MOVE A9,A11 ;PRESERVE FOR YUKS
MOVE A14,A8
RETP
*************************************************************************
* *
* FIXA3XY - CHECKS THE X AND Y COMPONENT OF A3, ANY ONE THAT IS ZERO *
* WILL BE SET TO ONE. KEEPS OSIZE IN ORDER. *
* A3 = [Y,X] *
* *
**************************************************************************
FIXA3XY
PUSH A0
CLR A0
MOVY A3,A0
MOVE A0,A0
jrgt FA3YOK
MOVK 1,A0
SLL 16,A0
MOVY A0,A3
FA3YOK:
CLR A0
MOVX A3,A0
MOVE A0,A0
jrgt FA3XOK
MOVK 1,A0
MOVX A0,A3
FA3XOK:
PULL A0
RETS
EXPSCRN:
MOVI 35,A0
MOVI SCRNST,A10
MOVI SCRNEND,A11
JSRP SCREXP32
RETP
SNKSCRN:
MOVI 35,A0
MOVI SCRNMID,A10
MOVI SCRNMID,A11
JSRP SCREXP32
RETP
SNKNOW:
MOVI SCRNMID,A1
MOVE A1,@SCRNTL,L
MOVE A1,@SCRNLR,L
RETP
;
;
; SCREXP32 - SHRINK OR EXPAND THE SCREEN WINDOW FROM THE CURRENT SIZE
; TO THE GIVEN IN A GIVEN AMOUNT OF TICKS
; A0 = # OF TICKS
; A10 = NEW SCRNTL
; A11 = NEW SCRNLR
; NOTE: CALL WITH JSRP
; TRASHES A8 & A9
;
SCREXP32:
MOVE @SCRNTL,A14,L
MOVX A14,A1
SLL 16,A1
CLR A2
MOVY A14,A2
SUBXY A10,A14
MOVX A14,A5
SLL 16,A5
DIVS A0,A5
NEG A5
MOVE A5,A6
CLR A5
MOVY A14,A5
DIVS A0,A5
NEG A5
MOVE A5,A7
MOVE @SCRNLR,A14,L
MOVX A14,A3
SLL 16,A3
CLR A4
MOVY A14,A4
SUBXY A11,A14
MOVX A14,A5
SLL 16,A5
DIVS A0,A5
NEG A5
MOVE A5,A8
CLR A5
MOVY A14,A5
DIVS A0,A5
NEG A5
MOVE A5,A9
MOVE A0,A5
SHTIMLP:
ADD A6,A1 ;ADD THE TLX INCREMENT
ADD A7,A2 ;ADD THE TLY INCREMENT
ADD A8,A3 ;ADD THE LRX INCREMENT
ADD A9,A4 ;ADD THE LRY INCREMENT
MMTM A12,A1,A2,A3,A4,A5,A6,A7
SRL 16,A1
MOVY A2,A1
MOVE A1,@SCRNTL,L
SRL 16,A3
MOVY A4,A3
MOVE A3,@SCRNLR,L
SLEEPK 1
MMFM A12,A1,A2,A3,A4,A5,A6,A7
DSJS A5,SHTIMLP
SHTIMR:
MOVE A10,@SCRNTL,L ;MATCH WHAT THE CALLER WANTED
MOVE A11,@SCRNLR,L
RETP
;
; CHECK AND SEE IF LAST PLAYER IN GAME IF SO LOOP BUYIN (RESTART WAVE)
; THIS ROUTINE IS CALLED UPON PLAYERS UNTIMELY DEMISE
; CALL AS A PROCESS!
; A11=PLAYER INDEX
PSTAT:
MOVK 2,A0
MOVE A0,@ARWOFF ;BLINK ARROW X MORE TIMES THEN KILL!
SLEEP 60
MOVK 1,A0
MOVE A0,@HALT
PBUYLPLP:
CREATE BUYINPID,BUYINLP ;CREATE BUYIN LOOP WINDOW
MOVE A0,A0
JRNZ PBUYIWT4
SLOOP 4,PBUYLPLP
PBUYIWT4:
*WAIT FOR BUYIN MESSAGE TO COMPLETE
MOVI BUYINPID,A0
CLR A1
NOT A1
CALLA EXISTP
JRZ PBUYIWT5 ;BR = BUY IN IS DONE
SLOOP 1,PBUYIWT4
PBUYIWT5:
CLR A0
MOVE A0,@HALT
DIE ;CIAO
**************************************************************************
* *
* GAME OVER PROCESS *
* *
**************************************************************************
GAMEOVER:
MOVI AUDBONE,A0 ;DEC CMOS CNT OF GAMES STARTED
MOVI -1,A1
CALLA AUD
; MOVI AUDSTAT,A0 ;CLEAR GAME ON STATE
; CLR A1
; CALLA STORE_AUDIT
MOVI INGAMEOV,A0
MOVE A0,@GAMSTATE,W
CLR A0
MOVE A0,@PLYRPRCS,L
MOVE A0,@PLYRPRCS+32,L
MOVE A0,@PLYROBJS,L
MOVE A0,@PLYROBJS+32,L
MOVE A0,@STATUS
MOVE A0,@THIS_PLYR
MOVI P1DATA,A14
MOVE A0,@P1CTRL
MOVE A0,@P2CTRL
CALLA UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS
CREATE0 GAMEOTXT ;INDPID
MOVK 1,A0
MOVE A0,@HALT
SOUND1 NOWAY
SLEEP 080H ;LET EVERYONE SEE PLEASE
SOUND1 ahkbang
CREATE0 KILGOTXT
MOVE @SCORE_FLAG,A0
JRZ NOTON
CALLA INIT_SCORE ;TURNS ON REGULAR IMAGES FOR SCORES
NOTON SLEEPK 2
CLR A0
MOVE A0,@SCORE_FLAG
JSRP WNDWON
CLR A0
MOVE A0,@IRQSKYE ;AUTOERASE TO BLACK
SLEEPK 01 ;40H ;20H
GAMEDETH
CALLA UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS
CALLA CLR_ALL
MOVI 01000h,A1
CLR A0
CALLA KILALL ;KILL ALL PROCS, EXCEPT FOR COINS
CALLA KILBGND
SLEEPK 2
CALLA WIPEOUT
SLEEPK 1
CALLA CLRPAL
SLEEPK 1
CALLA COLRPRC ;INIT FIXED PAL 0
;INIT NUARENAP AS SECOND PAL!
; MOVI NUARENAP,A0 ;FOR SCORE DIGITS!
; CALLA GETFPAL
MOVK 1,A0
MOVE A0,@DISPLAYON,W ;TURN THE DISPLAY BACK ON
MOVE A0,@GAMERASE,W ;KICK IN AUTOERASE
;
;
;ONLY JSRP TO INITIALS IF SOMEONE WILL ENTER INITIALS
*CHECK HIGH SCORE TO DATE
;
CALLA ISHSTD ;GOT A HI SCORE?
JREQ GENDNOHS ;NOPE, NOTHING HAPPENING ... BLOW OUT
; MOVE @GRATSON,A0
; JRNZ GOB2
SOUND1 HIMUSC ;START HIGH SCORE MUSIC
GOB2 JSRP INITIALS ;DRAWS BACKGROUND PAGE FOR INITIALS
;RETURNS AFTER INITIALS ENTERED!
MOVK 1,A0
MOVE A0,@hisclong ;KEEP HIGH SCORE TABLE ON LONGER!
GENDNOHS
CALLA ATSTRT2 ;START ATTRACT MODE
DIE
KILGOTXT
SLEEPK 13
CLR A1
NOT A1
MOVI CLSNEUT|TYPTEXT|SUBGOTXT,A0
CALLA KILOBJ
DIE
;
**************************************************************************
* *
* INIBMESS - INITIALIZE THE BUY IN MESSAGE *
* *
**************************************************************************
INIBMESS:
MMTM SP,A0,A1,A2,A6,A8,A9,A10,A11
CALLA CR_CONTP ;ENOUGH TO CONTINUE?
JRLO INIBMIN ;BR = NO
MOVI PRESSMSG,A8
JRUC INIBM1
INIBMIN:
MOVI INSRTMSG,A8
INIBM1:
MMFM SP,A0,A1,A2,A6,A8,A9,A10,A11
RETS
**************************************************************************
* *
* INIBTIME - INITIALIZE THE BUY IN TIMER *
* *
**************************************************************************
INIBTIME:
MMTM SP,A0,A1,A6,A8,A9,A10,A11
CALLA CLRBTIME
;ONLY HERE WHEN IT IS A ONE PLAYER GAME.
;CNTDIG1/2 WW WILL SYNC WITH
MOVE @CNTDIG1,A8
JRNZ YUP
MOVE @CNTDIG2,A8
YUP
MOVE A8,@BTIME,W ;STORE IT AWAY
CALLA HEXTOASC
MMFM SP,A0,A1,A6,A8,A9,A10,A11
RETS
**************************************************************************
* *
* DECBTIME - DECREMENT THE BUY IN TIMER *
* RETURNS: *
* Z BIT SET = BUY IN TIME DONE *
* Z BIT CLR = HURRY WHILE SPECIALS LAST! *
* *
**************************************************************************
DECBTIME:
MMTM SP,A0,A1,A6,A8,A9,A10,A11
CALLA CLRBTIME
MOVE @CNTDIG1,A8
JRNZ YUP1
MOVE @CNTDIG2,A8
YUP1 DEC A8
PUSH A8
MOVE A8,@BTIME,W
JRNN YUP10
CLR A8
YUP10 CALLA HEXTOASC
CALLA GWINCENT ;POSITION
ADDI [24,0],A0
MOVE @WORLDTL,A1,L
SUB A1,A0
MOVE A0,A9
MOVK 1,A0
MOVE A0,@LOWZ
CLR A0
MOVI COLORA,A6 ;COLOR CYCLE COLOR
MOVI RD15FONT,A11 ;BIG OLD NUMBERS
MOVI [0,1],A10
JSRP STRCNRMO ;OUTPUT THE TIME
MOVI CLSNEUT|TYPTEXT|SUBTXT,A0
MOVI CLSNEUT|TYPTEXT|SUBTIME,A1
CALLA CHNGOID ;CHANGE THE OID
PULL A8
MOVE A8,A0
DEC A0
MOVE A0,A0
MOVE @BTIME,A8,W ;SET STATUS
DECBTX:
MMFM SP,A0,A1,A6,A8,A9,A10,A11
RETS
**************************************************************************
* *
* UPBMESS1 - UPDATE THE "PRESS START" OR "INSERT COIN" MESSAGE. *
* RETURNS: *
* A11 = UPDATED SLEEP LOOP TIME FOR BUYIN THING *
* *
**************************************************************************
UPBMESS1:
MMTM SP,A0,A1,A6,A8 ;MORE PUSHING TO COME
CALLA CR_CONTP ;ENOUGH TO CONTINUE?
JRLO UPBMIN ;BR = NO
MOVI PRESSMSG,A8
JRUC UPBM1
UPBMIN:
MOVI INSRTMSG,A8
UPBM1:
MMTM SP,A9,A10,A11 ;WATCH OUT FOR THIS BOGUSNESS
CALLA GWINCENT ;POSITION
SUBI [39,0],A0
MOVE @WORLDTL,A1,L
SUB A1,A0 ;MAKE'UM SCREEN RELATIVE
MOVE A0,A9
MOVK 1,A0
MOVE A0,@LOWZ
CLR A0
MOVI BRGHT,A6 ;BRIGHT COLOR
MOVI RD15FONT,A11 ;BIG OLD LETTERS
MOVI [0,1],A10 ;ONE SPACE BETWEEN LETTERS
JSRP STRCNRMO ;OUTPUT "PRESS START" OR "INSERT COIN"
MOVI CLSNEUT|TYPTEXT|SUBMES1,A0
CLR A1
NOT A1
CALLA KILOBJ ;KILL OLD MESSAGE
MOVI CLSNEUT|TYPTEXT|SUBTXT,A0
MOVI CLSNEUT|TYPTEXT|SUBMES1,A1
CALLA CHNGOID ;CHANGE THE OID
MMFM SP,A0,A1,A6,A8,A9,A10,A11
RETS
**************************************************************************
* *
* UPBMESS2 - UPDATE THE "TO CONTINUE" MESSAGE, TO INSURE ALIGNMENT. *
* *
**************************************************************************
UPBMESS2:
MMTM SP,A0,A1,A2,A6,A8,A9,A10,A11
MOVI RD15FONT,A11 ;BIG OLD LETTERS
MOVI [0,1],A10 ;ONE SPACE BETWEEN LETTERS
CALLA GWINCENT ;POSITION
MOVI TOMSG,A8
MOVI COLORS,A6
SUBI [18,0],A0
MOVE @WORLDTL,A1,L
SUB A1,A0
MOVE A0,A9
MOVK 1,A0
MOVE A0,@LOWZ
CLR A0
JSRP STRCNRMO ;"TO"
MOVI CONMSG,A8
MOVI COLORS,A6
CALLA GWINCENT ;POSITION
ADDI [3,0],A0
MOVE @WORLDTL,A1,L
SUB A1,A0
MOVE A0,A9
MOVK 1,A0
MOVE A0,@LOWZ
CLR A0
JSRP STRCNRMO ;"CONTINUE"
MOVI CLSNEUT|TYPTEXT|SUBMES2,A0
CLR A1
NOT A1
CALLA KILOBJ ;KILL OLD MESSAGE
MOVI CLSNEUT|TYPTEXT|SUBTXT,A0
MOVI CLSNEUT|TYPTEXT|SUBMES2,A1
CALLA CHNGOID ;CHANGE THE OID
MMFM SP,A0,A1,A2,A6,A8,A9,A10,A11
RETS
**************************************************************************
* *
* CLRBMESS - CLEAR THE BUY-IN MESSAGE TEXT. *
* *
**************************************************************************
CLRBMESS:
MMTM SP,A0,A1
MOVI CLSNEUT|TYPTEXT|SUBMES1,A0
CLR A1
NOT A1
CALLA KILOBJ
MOVI CLSNEUT|TYPTEXT|SUBMES2,A0
CALLA KILOBJ
MMFM SP,A0,A1
RETS
**************************************************************************
* *
* CLRBTIME - CLEAR THE BUY-IN TIME TEXT. *
* *
**************************************************************************
CLRBTIME:
MMTM SP,A0,A1
MOVI CLSNEUT|TYPTEXT|SUBTIME,A0
CLR A1
NOT A1
CALLA KILOBJ
MMFM SP,A0,A1
RETS
**************************************************************************
* *
* GWINCENT - GET THE CURRENT TEXT WINDOW CENTER POINT. *
* RETURNS: *
* A0 = CENTER PNT. *
* *
**************************************************************************
GWINCENT:
MMTM SP,A1,A8
MOVI CLSNEUT|TYPTEXT|SUBWNDW,A0
CLR A1
NOT A1
CALLA EXISTOBJ
JRZ GWINCX
MOVE A0,A8
CALLA GETCPNT
MOVE A1,A0
GWINCX:
MMFM SP,A1,A8
RETS
**************************************************************************
* *
* GAMEOTXT - PROCESS TO PUT "GAME OVER" UP AND KEEP IT CENTERED *
* *
**************************************************************************
GAMEOTXT:
; .REF SPECT
; calla SPECT ;Start scorepal cycle
CLR A0
MOVI BRGHT,A6 ;ROBO_LASER
; MOVI COLORA,A6 ;COLOR CYCLE COLOR
MOVI GAMOVMSG,A8
MOVI [17+SCRNTOP,200],A9 ;37
MOVI [0,2],A10 ;ONE SPACE BETWEEN LETTERS
MOVI RD15FONT,A11 ;SET UP FONT
JSRP STRCNRMO ;"GAME OVER"
MOVI CLSNEUT|TYPTEXT|SUBGOTXT,A0
CLR A1
NOT A1
CALLA KILOBJ ;KILL OLD MESSAGE
MOVI CLSNEUT|TYPTEXT|SUBTXT,A0
MOVI CLSNEUT|TYPTEXT|SUBGOTXT,A1
CALLA CHNGOID ;CHANGE THE OID
GMEDSPLY:
SLOOP 1,GMEDSPLY
**************************************************************************
* *
* CHNGOID - CHANGE ALL MATCHING OID'S ON THE OBJECT LIST TO A NEW ONE. *
* A0 = OID TO CHANGE *
* A1 = NEW OID *
* *
**************************************************************************
CHNGOID:
MMTM SP,A2,A3
MOVI OBJLST,A2
CHNGOLP:
MOVE *A2,A2,L
JRZ CHNGOIDX ;BR = DONE WITH THE LIST
MOVE *A2(OID),A3,W
CMP A0,A3
JRNE CHNGOLP ;THIS IS NOT ONE OF THEM
MOVE A1,*A2(OID),W ;STUFF THE NEW ONE
JRUC CHNGOLP
CHNGOIDX:
MMFM SP,A2,A3
RETS
**************************************************************************
* *
* BUYINLP - PUT UP THE BUY-IN WINDOW PROCESS AND LOOP BACK ON BUY-IN. *
* *
**************************************************************************
BUYINLP:
;FOR WHEN THERE IS JUST ONE PLAYER IN GAME
MOVI [41+SCRNTOP,200],A10
SLEEP 2*60 ;LET CHUNKS DISSIPATE
;DID I BUYIN ALREADY? IF SO, GET OUT OF HERE
CLR A9
MOVE A9,@WNDWFLG
MOVE @THIS_PLYR,A0,W
JRZ NO_QUICK
MOVK 1,A9 ;TELL CWINDOW NO WINDOW UP!
MOVE A9,@WNDWFLG
JRUC BUYLPBAK
NO_QUICK
MOVI >005D0093,A8
JSRP OWINDOW ;OPEN THE WINDOW
JRZ BUYINLPDI ;COULDN'T DO IT
MOVK 1,A0 ;HALT GAMEPLAY WHILE BUYIN
MOVE A0,@HALT,W ;BOX IS ON SCREEN
SOUND1 MUSICOFF
SLEEPK 2
; CREATE BUYINPID,STRTBUY
;STRTBUY
MOVI BUYMSC,A0
CALLA ONESNDOVR
; DIE
CALLA INIBTIME ;INITIALIZE BUY IN TIME
CALLA INIBMESS ;INITIALIZE BUY IN MESSAGE
*YES IT'S BUY-IN TIME AGAIN!
MOVI INGAME,A0
MOVE A0,@GAMSTATE,W ;TAKE US OUT OF GAME PLAY
BUYLPOLP:
MOVI BUYTICK,A11
BUYLPILP:
;CHECK IF SOMEONE JUST HIT START (BOUGHT IN)
;IF SO, JRUC TO CLOSE BOX DOWN
;OTHERWISE, CONT COUNT DOWN
SLEEPK 1
MOVE @THIS_PLYR,A0,W
JRNZ BUYLPBAK
CNT
CALLA UPBMESS1 ;UPDATE BUYIN MESSAGE 1
CALLA UPBMESS2
DSJS A11,BUYLPILP
CALLA DECBTIME ;DECREMENT BUYIN TIME
JRGE BUYLPOLP ;WE ARE NOT DONE YET
* TIME IS UP!
CALLA CLRBTIME
CALLA CLRBMESS
JSRP CWINDOW
CLR A0
MOVE A0,@HALT
MOVE A0,@EHALT
BUYINLPDI:
DIE
*
*SOMEBODY JUST BOUGHT IN
*IT IS TIME TO CONTINUE GAME
BUYLPBAK:
;A0=1 OR 2
;UPDATE PLAYER LIVES
MOVI P1DATA,A11
MOVE @PLYRPRCS,A1,L
CMPI 1,A0
JREQ XX2
MOVE @PLYRPRCS+32,A1,L
MOVI P2DATA,A11
XX2 MOVI 320,A2
MOVE A2,*A1(DELYDET),W
CLR A0
MOVE A0,@HALT,W ;UN-FREEZE GAME PLAY
MOVE A0,@EHALT,W
MOVE A0,@THIS_PLYR,W
CALLA CLRBTIME
CALLA CLRBMESS
MOVE @WNDWFLG,A0
JRNZ NO_WIN
JSRP CWINDOW
NO_WIN
SOUND1 MUSICOFF
CREATE0 DOMUSE
MOVK 1,A0
MOVE A0,@DISPLAYON,W ;TURN THE DISPLAY PROC ON
MOVI INGAME,A0
MOVE A0,@GAMSTATE,W ;START YOUR ENGINES
DIE
DOMUSE SLEEPK 20
MOVE @WAVE,A1
SLL 5,A1
ADDI MUSLIST,A1
MOVE *A1,A0,L
MOVE A0,A9
CALLA ONESNDOVR ;START FIRST WORLD MUSIC
; SLEEPK 3
; MOVE A9,A0
; CALLA ONESND ;START FIRST WORLD MUSIC
DIE
MUSLIST .LONG TUNE2,TUNE7,TUNE7,TUNE7,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2
.LONG TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE6,TUNE4,TUNE2,TUNE2,TUNE5
.LONG TUNE2,TUNE2,TUNER,TUNE7,TUNE5,TUNE5,TUNE5,TUNE5,TUNE1,TUNE2
.LONG TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNEB,TUNEB,TUNE2,TUNER,TUNER
.LONG TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2
;28,22
;TUNE1 .WORD >F3FE,10,>8001,0 ;REPORTER TUNE AT INTRO
TUNER .word >f3fe,10,>800d,0 ;Rackup tune
TUNE4 .WORD >F3F0,2,>8009,0 ;ORCUS TUNE
TUNE5 .WORD >F3F0,2,>8008,0 ;AIRPORT TUNE
TUNE6 .WORD >F3F0,2,>8008,0 ;UPPER DESERT TUNE
TUNEB .WORD >F3F0,2,>800E,0 ;END BOSS TUNE
TUNE7 .WORD >F3F0,1,>800C,0 ;WARP MUSIC
;PUT IN HELPER ALSO!
KILBGND:
; KILL ALL BACKGROUND OBJECTS AND FREES ITS PALLETTE
MMTM SP,A0,A2,A3,A4,A5
MOVI BAKLST,A2,L ;ACTIVE BACKGROUND OBJECTS LIST
MOVE *A2,A0,L
JREQ KILOBX ;BR=NO MORE OBJECTS ON LIST
; CALLA DELPAL
FREEB:
MOVE A2,A3 ;SAVE PREVIOUS
MOVE *A2,A2,L ;GET NEXT BLOCK
JREQ KILOBX ;BR=ALL DONE
MOVE *A2,*A3,L ;LINK AROUND IN ACTIVE LIST
MOVE @OFREE,A5,L ;LINK INTO FREE LIST AT START
MOVE A5,*A2,L
MOVE A2,@OFREE,L ;UPDATE FREE LIST POINTER
MOVE A3,A2
JRUC FREEB ;KILL ALL OBJECTS ON BACKGROUND LIST
KILOBX:
CALLR ZERO_BITS
MOVE A0,@BAKLST,L
MMFM SP,A0,A2,A3,A4,A5
RETS
ZERO_BITS
CLR A0
; MOVE A0,@BAKLST,L
MOVI 10000/16,A2 ;SIZE OF BAKBITS IN WORDS
MOVI BAKBITS,A1
KILUP:
MOVE A0,*A1+,W
DSJS A2,KILUP
RETS
COLRSTRT ;CALLED FROM DIAGNOSTICS CODE TO COLOR CYCLE MENUS
MOVI COLRPID,A0
CLR A1
MOVE A1,@IRQSKYE
move a1,@FPALRAM,L
CALLA KIL1C ;KILL ALL COLOR UPDATE PROCESSES
MOVI DIAGP,A0 ;CREATE DIAGNOSTICS PALLETTE
CALLA GETFPAL
CREATE COLRPID,CYCSPECT ;START COLOR CYCLE PROCESS
RETS
COLRPRC
MOVI COLRPID,A0
CLR A1
move a1,@FPALRAM,L
CALLA KIL1C ;KILL ALL COLOR UPDATE PROCESSES
MOVI SCOREPAL,A0 ;SCORE AREA PALETTE
CALLA GETFPAL
RETS
*CYCLE COLOR SPECTRUM
CYCSPECT
MOVI COLTAB,A8
CYCSPEC1
MOVE *A8+,A0,W ;GET A COLOR
JRN CYCSPECT ;OUT OF COLORS (NEGATIVE VALUE)
MOVI COLRTEMP,A1
MOVE A1,A2
ADDK 16,A2 ;A2 = NEXT COLOR
MOVK 15,A3
CYCSUCK
MOVE *A2+,*A1+,W ;CYCLE DOWN ONE
DSJS A3,CYCSUCK
MOVE A0,*A1 ;SHIFT IN WALLY NEW GUY
SLOOP 2,CYCSPEC1
COLTAB .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H
.WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH
.WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH
.WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H
.WORD 0FFFFH
*
*SOME MESSAGES
INSRTMSG:
.STRING "INSERT COIN"
.BYTE 0
.EVEN
PRESSMSG:
.STRING "PRESS START"
.BYTE 0
.EVEN
TOMSG
.STRING "TO"
.BYTE 0
.EVEN
CONMSG:
.STRING "CONTINUE"
.BYTE 0
.EVEN
GAMOVMSG:
.STRING "GAME OVER"
.BYTE 0
.EVEN
;
;BIG FIEND DATA STRUCTURE
;
BODL .EQU PDATA
BODR .EQU PDATA+32
JAWL .EQU PDATA+64
JAWR .EQU PDATA+96
; .EQU PDATA+128
; .EQU PDATA+160
; .EQU PDATA+192
; .EQU PDATA+224
; .EQU PDATA+256
; .EQU PDATA+288
; .EQU PDATA+320
; .EQU PDATA+352
;IPIECE
; .EQU PDATA+384
; .EQU PDATA+384+32
EYEL .EQU PDATA+384+64
EYER .EQU PDATA+384+96
CHKL .EQU PDATA+384+128
CHKR .EQU PDATA+384+160
CHKLB .EQU PDATA+384+192
CHKRB .EQU PDATA+384+224
; .EQU PDATA+384+192+32
; .EQU PDATA+384+224+64
; .EQU PDATA+384+192+96
; .EQU PDATA+384+224+128
BIG_EAT
CREATE INTROPID,LHLPS
; SLEEP 020H ;30H
;TURN ON ALL PIECES
MOVK 24,A9
TP MOVE A9,A0
SLL 5,A0
ADDI ONLIST,A0
MOVE *A0,A14,L
CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
MOVI 38,A11 ;X
MOVI 60H+100,A10 ;Y
MOVE A10,*A8(OYPOS),W
MOVE A11,*A8(OXPOS),W
CALLA ADJSTWTL
MOVE *A8(OPAL),A0,L
ANDI 0FFFFH,A0
MOVE A0,*A8(OPAL),L
MOVE A9,A0
DEC A0
SLL 5,A0
ADD A13,A0
ADDI BODL,A0
MOVE A8,*A0,L
DEC A9
JRNZ TP
;OBJECTS ALL ON
CALLR LINE_UP ;ADJUST ALL PARTS TO MATCH TANK LEFT
SLEEP 030H
MOVE *A13(CHKLB),A0,L
CALLA OBJOFF
MOVE *A13(CHKRB),A0,L
CALLA OBJOFF
MOVE *A13(EYEL),A8,L
CREATE INTROPID,DOIL
MOVE *A13(EYER),A8,L
CREATE INTROPID,DOIR
MOVE *A13(JAWL),A8,L
CREATE INTROPID,DOJAW
MOVE *A13(JAWR),A8,L
CREATE INTROPID,DOJAW
CREATE INTROPID,DOCHEWSND
MOVE A8,A9
MOVE *A13(CHKL),A8,L
CREATE INTROPID,CHKCHNG
MOVE *A13(CHKR),A8,L
CREATE INTROPID,CHKCHNG
MOVE *A13(CHKLB),A8,L
CREATE INTROPID,CHKCHNGB
MOVE *A13(CHKRB),A8,L
CREATE INTROPID,CHKCHNGB
MOVE A13,A10
CREATE INTROPID,FLOW
MOVE *A13(BODL),A8,L
CREATE INTROPID,DOUP
CREATE INTROPID,DOUPSNDS
CREATE INTROPID,DOHZ
TOID_TOP
CALLR LINE_UP ;ADJUST ALL PARTS TO MATCH TANK LEFT
SLEEPK 1
JRUC TOID_TOP
CHKCHNG SLEEPK 1
MOVE *A9(OIMG),A0,L
CMPI BTTMJAW,A0
JRZ CH1
CMPI BTJ2,A0
JRZ CH2
MOVI CHK3,A1
CHO
MOVE *A8(OFLAGS),A4
CALLA ANI
JRUC CHKCHNG
CH1
MOVI CHK1,A1
JRUC CHO
CH2
MOVI CHK2,A1
JRUC CHO
CHKCHNGB
SLEEPK 1
MOVE *A9(OIMG),A0,L
CMPI BTTMJAW,A0
JRZ BH1
CMPI BTJ2,A0
JRZ BH2
MOVI CHK3A,A1
BHO
MOVE A8,A0
CALLA OBJON
; MOVI 110H,A0
; MOVE A0,*A8(OZPOS)
MOVE *A8(OFLAGS),A4
CALLA ANI
JRUC CHKCHNGB
BH1
MOVE A8,A0
CALLA OBJOFF
; MOVK 1,A0
; MOVE A0,*A8(OZPOS)
JRUC CHKCHNGB
BH2
MOVI CHK2A,A1
JRUC BHO
DOJAW SLEEP 011EH
MOVI JAWLST,A9
JSRP FRANIMQ
MOVK 4,A10 ;2
DJH
MOVI JAWLST2,A9
JSRP FRANIMQ
DSJS A10,DJH
MOVI JAWLST3,A9
JSRP FRANIMQ
SLEEP 60
DIE
DOCHEWSND
SLEEP 012EH
CREATE INTROPID,OUCHS
MOVK 20,A9 ;11
CDOC1
MOVI CHEW,A0
CALLA ONESND
SLEEP 12H
DSJS A9,CDOC1
SLEEP 32H-2FH
MOVI GULPSND,A0
CALLA ONESND
SLEEP 2FH
MOVI BURP,A0
CALLA ONESND
DIE
OUCHS
MOVI fpain1,a0
calla ONESNDOVR
SLEEP 64
MOVI fpain3,a0
calla ONESND
SLEEPK 32
MOVI fpain3,a0
calla ONESND
SLEEPK 32
MOVI fpain3,a0
calla ONESND
SLEEPK 32
MOVI fpain3,a0
calla ONESND
SLEEPK 32
MOVI fpain3,a0
calla ONESND
SLEEP 0BFH-32-32-32 ;33
MOVI fpain4,a0
calla ONESND
DIE
LHLPS
SLEEP 3EH
MOVI HELP,A0
CALLA ONESND
SLEEP 24H+2EH
MOVI HELP,A0
CALLA ONESND
SLEEP 2EH
MOVI HELP,A0
CALLA ONESND
SLEEP 30H
MOVI HELP,A0
CALLA ONESND
SLEEP 2FH
MOVI HELP,A0
CALLA ONESND
SLEEP 26H
MOVI HELP,A0
CALLA ONESND
DIE
HELP .WORD >F97E,>24,>80C1,0 ;"HELP"
fpain1 .word >f165,20,>80f6,0 ;Player in pain
fpain3 .word >f160,20,>80fd,0 ;^
fpain4 .word >f160,20,>80f9,0 ;^
CHEW .WORD >F5E5,20,>8129,0
BURP .WORD >F5E5,20,>8127,0
GULPSND .word >f0e6,10,>8132,0 ;^
JAWLST
.LONG BTTMJAW
.WORD 2
.LONG BTJ2
.WORD 2
.LONG BTJ3
.WORD 0FH ;01CH
.LONG 0
JAWLST3
.LONG BTTMJAW
.WORD 5
.LONG BTJ2
.WORD 5
.LONG BTTMJAW
.WORD 60
.LONG BTJ2
.WORD 3
.LONG BTJ3
.WORD 60 ;BURP
.LONG BTJ2
.WORD 3
.LONG BTTMJAW
.WORD 5
.LONG 0
JAWLST2
.LONG BTJ2
.WORD 3
.LONG BTTMJAW
.WORD 3
.LONG BTJ2
.WORD 3
.LONG BTJ3
.WORD 5
.LONG BTJ2
.WORD 3
.LONG BTTMJAW
.WORD 10
.LONG BTJ2
.WORD 3
.LONG BTTMJAW
.WORD 10
.LONG BTJ2
.WORD 5
.LONG BTJ3
.WORD 5
.LONG BTJ2
.WORD 5
.LONG BTTMJAW
.WORD 5
.LONG BTJ2
.WORD 3
.LONG BTJ3
.WORD 3
.LONG BTJ2
.WORD 3
.LONG BTTMJAW
.WORD 3
.LONG BTJ2
.WORD 3
.LONG BTJ3
.WORD 3
.LONG BTJ2
.WORD 3
.LONG BTTMJAW
.WORD 3
.LONG 0
DOIL SLEEP 08CH
DOIL1 MOVI ILFT,A9
JSRP FRANIMQ
JRUC DOIL1
DOIR SLEEP 08CH
DOIR1 MOVI IRGT,A9
JSRP FRANIMQ
JRUC DOIR1
ILFT
.LONG IPC3
.WORD 03EH
.LONG IPC1A
.WORD 5
.LONG IPC2
.WORD 30
.LONG IPC1A
.WORD 5
.LONG IPC3
.WORD 20
.LONG IPC1A
.WORD 5
.LONG IPC4
.WORD 048H
.LONG IPC3
.WORD 5
.LONG IPC1A
.WORD 5
.LONG 0
IRGT
.LONG IPC2
.WORD 03EH
.LONG IPC1A
.WORD 5
.LONG IPC3
.WORD 30
.LONG IPC1A
.WORD 5
.LONG IPC2
.WORD 20
.LONG IPC1A
.WORD 5
.LONG IPC4
.WORD 048H
.LONG IPC2
.WORD 5
.LONG IPC1A
.WORD 5
.LONG 0
DOUPSNDS
MOVK 4,A9
DOUPS1 SLEEP 40
MOVI groanlndsnd,A0
CALLA ONESND
DSJS A9,DOUPS1
DIE
groanlndsnd .word >f185,20,>8113,0 ;^ interruptable
DOUP MOVI -8000H,A0
SWAP A10,A13
CALLR MOD_VELS
SWAP A10,A13
SLEEP 0F4H
CLR A0
SWAP A10,A13
CALLR MOD_VELS
SWAP A10,A13
SLEEP 02EH
MOVI 30000H,A0
SWAP A10,A13
CALLR MOD_VELS
SWAP A10,A13
SLEEPK 6
CLR A0
SWAP A10,A13
CALLR MOD_VELS
SWAP A10,A13
SLEEP 10*60 ;6*60
;BURP OVER
MOVI 40000H,A0
SWAP A10,A13
CALLR MOD_VELS
SWAP A10,A13
MOVI groanlndsnd,A0
CALLA ONESND
SLEEP 20
MOVI groanlndsnd,A0
CALLA ONESND
SLEEP 0F4H-20
CLR A0
SWAP A10,A13
CALLR MOD_VELS
SWAP A10,A13
DIE
DOHZ SLEEP 12CH
;BITING DOWN ON SOLDIER
MOVI 44H,A9 ;36
DOHZ1 SLEEPK 5
MOVE *A8(OYPOS),A0
XORI 7,A0
MOVE A0,*A8(OYPOS)
; MOVE *A8(OXPOS),A0
; XORI 3,A0
; MOVE A0,*A8(OXPOS)
SWAP A13,A10
CALLR LINE_UP
SWAP A13,A10
DSJ A9,DOHZ1
DIE
MOD_VELS
MOVE A0,*A8(OYVEL),L
MOVE *A13(PDATA),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+32),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+64),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+96),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+128),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+160),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+192),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+224),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+256),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+288),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+320),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+352),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+384),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+384+32),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+384+64),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+384+96),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+384+128),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+384+160),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+384+192),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+384+224),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+384+224+32),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+384+224+64),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+384+224+96),A1,L
MOVE A0,*A1(OYVEL),L
MOVE *A13(PDATA+384+224+128),A1,L
MOVE A0,*A1(OYVEL),L
RETS
LINE_UP
CALLA GETANIXY
MOVE *A13(PDATA+32),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 030000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;ADJUST LEFT SIDE TORSO
CALLA GETANIXY
MOVE *A13(PDATA+32*2),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
;ADJUST RGT TORSO
CALLA GETANIXY
MOVE *A13(PDATA+32*3),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 030000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;ADJUST LEFT SIDE ARM
CALLA GETANIXY
MOVE *A13(PDATA+32*4),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
;ADJUST RIGHT SIDE ARM
CALLA GETANIXY
MOVE *A13(PDATA+32*5),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 030000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;ADJUST LEFT SIDE TREAD
CALLA GETANIXY
MOVE *A13(PDATA+32*6),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
;ADJUST RIGHT SIDE TREAD
CALLA GETANIXY
MOVE *A13(PDATA+32*7),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 030000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;ADJUST LEFT FRONT TREAD
CALLA GETANIXY
MOVE *A13(PDATA+32*8),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
;ADJUST RIGHT FRONT TREAD
CALLA GETANIXY
MOVE *A13(PDATA+32*9),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 030000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;DO RIGHT SIDE SHADOW
CALLA GETANIXY
MOVE *A13(PDATA+32*10),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
;DO FRONT SHADOW
CALLA GETANIXY
MOVE *A13(PDATA+32*11),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 030000H,A3 ;SUB 1 FROM X
; SUBI 010000H,A3 ;SUB 1 FROM X
; SUBI 010000H,A2 ;SUB 1 FROM Y
CALLA GANISAG
;
CALLA GETANIXY
MOVE *A13(PDATA+32*12),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
;
CALLA GETANIXY
MOVE *A13(PDATA+32*13),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 030000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;
CALLA GETANIXY
MOVE *A13(PDATA+32*14),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
;
CALLA GETANIXY
MOVE *A13(PDATA+32*15),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 030000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;
CALLA GETANIXY
MOVE *A13(PDATA+32*16),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
;
CALLA GETANIXY
MOVE *A13(PDATA+32*17),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 030000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;
CALLA GETANIXY
MOVE *A13(PDATA+32*18),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
CALLA GANISAG
;
CALLA GETANIXY
MOVE *A13(PDATA+32*19),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 030000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;
CALLA GETANIXY
MOVE *A13(PDATA+32*20),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
ADDI 0FB0000H,A2 ;SUB 1 FROM Y
SUBI 0310000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;
CALLA GETANIXY
MOVE *A13(PDATA+32*21),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
ADDI 0FB0000H,A2 ;SUB 1 FROM Y
ADDI 02E0000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;
CALLA GETANIXY
MOVE *A13(PDATA+32*22),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
ADDI 01090000H,A2 ;SUB 1 FROM Y
SUBI 0740000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;
CALLA GETANIXY
MOVE *A13(PDATA+32*23),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
ADDI 01090000H,A2 ;SUB 1 FROM Y
ADDI 0710000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;
RETS
;
ONLIST .LONG 0,T11,T12,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T13,T14,T15,T16,T17
.LONG T18,T19,T20,T21,T22,T23,T24
T1 ;TANK LEFT
.LONG 0,0,BTTMJAW
.WORD 0102H,DMAWNZ|M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 0,0
T2 ;TANK RGT
.LONG 0,0,BTTMJAW
.WORD 0102H,DMAWNZ|M_NOCOLL|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T3 ;TANK LEFT
.LONG 0,0,TPHD
.WORD 0100H,DMAWNZ|M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 0,0
T4 ;TANK RGT
.LONG 0,0,TPHD
.WORD 0100H,DMAWNZ|M_NOCOLL|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T5 ;TANK LEFT
.LONG 0,0,UPPRJAW
.WORD 0104H,DMAWNZ|M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 0,0
T6 ;TANK RGT
.LONG 0,0,UPPRJAW
.WORD 0104H,DMAWNZ|M_NOCOLL|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T7 ;TANK LEFT
.LONG 0,0,INNRMTH
.WORD 0FAH,DMAWNZ|M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 0,0
T8 ;TANK RGT
.LONG 0,0,INNRMTH
.WORD 0FAH,DMAWNZ|M_NOCOLL|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T9 ;TANK LEFT
.LONG 0,0,BOD1
.WORD 0100H,DMAWNZ|M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 0,0
T10 ;TANK RGT
.LONG 0,0,BOD1
.WORD 0100H,DMAWNZ|M_NOCOLL|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T11 ;TANK LEFT
.LONG 0,0,BOD2
.WORD 0100H,DMAWNZ|M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 0,0
T12 ;TANK RGT
.LONG 0,0,BOD2
.WORD 0100H,DMAWNZ|M_NOCOLL|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T13 ;TANK LEFT
.LONG 0,0,IPIECE
.WORD 0105H,DMAWNZ|M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 0,0
T14 ;TANK RGT
.LONG 0,0,IPIECE
.WORD 0105H,DMAWNZ|M_NOCOLL|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T15 ;TANK LEFT
.LONG 0,0,IPC2
.WORD 0105H,DMAWNZ|M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 0,0
T16 ;TANK RGT
.LONG 0,0,IPC2
.WORD 0105H,DMAWNZ|M_NOCOLL|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T17 ;TANK LEFT
.LONG 0,0,CHK1
.WORD 0100H,DMAWNZ|M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 0,0
T18 ;TANK RGT
.LONG 0,0,CHK1
.WORD 0100H,DMAWNZ|M_NOCOLL|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T19 ;TANK LEFT
.LONG 0,0,CHK2A
.WORD 0110H,DMAWNZ|M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 0,0
T20 ;TANK RGT
.LONG 0,0,CHK2A
.WORD 0110H,DMAWNZ|M_NOCOLL|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T21 ;TANK LEFT
.LONG 0,0,BOD1A
.WORD 0100H,DMAWNZ|M_NOCOLL+M_FLIPV,CLSNEUT|TYPNEUT
.LONG 0,0
T22 ;TANK RGT
.LONG 0,0,BOD1A
.WORD 0100H,DMAWNZ|M_NOCOLL|M_FLIPH+M_FLIPV,CLSNEUT|TYPNEUT
.LONG 0,0
T23 ;TANK LEFT
.LONG 0,0,BOD2A
.WORD 0100H,DMAWNZ|M_NOCOLL+M_FLIPV,CLSNEUT|TYPNEUT
.LONG 0,0
T24 ;TANK RGT
.LONG 0,0,BOD2A
.WORD 0100H,DMAWNZ|M_NOCOLL|M_FLIPH+M_FLIPV,CLSNEUT|TYPNEUT
.LONG 0,0
FLOW SLEEP 014CH
MOVI 40H,A9
KM1
CREATE INTROPID,SPEW
CREATE INTROPID,SPEW
CREATE INTROPID,SPEW
CREATE INTROPID,SPEW
CREATE INTROPID,SPEW
CREATE INTROPID,SPEW2
CREATE INTROPID,SPEW2
SLEEPK 4
DEC A9
JRNZ KM1
DIE
BLD ;ARM RGT
.LONG 0,0,bldclt1
.WORD 108H,DMAWNZ+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 0H,0H
BLD2 ;ARM RGT
.LONG 0,0,bldclt1
.WORD 118H,DMAWNZ+M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 0H,0H
SPEW2
MOVI BLD2,A14 ;BLOOD
JRUC FAD
SPEW
MOVI BLD,A14 ;BLOOD
FAD CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
clr a0
move a0,*a8(OCONST)
MOVE A8,A9
MOVE *A10(BODL),A8,L
CALLA GETANIXY
MOVE A9,A0
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
; ADDI 00120000H,A3 ;X
ADDI 0380000H,A2 ;Y
CALLA GANISAG
MOVE A9,A8
MOVI -018000H,B0
MOVI 018000H,B1
CALLA RANGRAND
MOVE A0,*A8(OXVEL),L
MOVI -010000H,B0
MOVI 020000H,B1
CALLA RANGRAND
MOVE A0,*A8(OYVEL),L
MOVI BLOOD_LST1,A9
BTST 0,A0
JRZ KOP
MOVI OVALBLD2,A9
KOP jauc FRQDELDIE
OVALBLD2
;OVAL BLOOD EXPLOSION
.LONG bldclt1
.WORD NEWPALET|1
.LONG RDBOOM ;ONUP1
.LONG bldclt2
.WORD 4
.LONG bldclt3
.WORD 4
.LONG bldclt4
.WORD 4
.LONG bldclt5
.WORD 4
.LONG bldclt6
.WORD 4
.LONG bldclt7
.WORD 4
.LONG bldclt8
.WORD 4
.LONG 0
;TEST SLEEP 120
; MOVI 10,A2
; CALLA O_MINE
; DIE
CANDY .STRING "CANDY BLITZER"
.BYTE 0
.EVEN
CANDY2 .STRING "REPORTING LIVE"
.BYTE 0
.EVEN
CANDY2A .STRING "BNN"
.BYTE 0
.EVEN
BLOB1
.LONG [319-101,0],[210-185,0],BOON1
.WORD 472,DMAWNZ,CLSNEUT|TYPTEXT
.LONG 0,0
BLOB2
.LONG [16BH,0],[210-185,0],BOON1
.WORD 472,DMAWNZ|M_FLIPH,CLSNEUT|TYPTEXT
.LONG 0,0
BLOB3
.LONG [0100H,0],[268-185,0],BOON2
.WORD 472,DMAWNZ|M_FLIPH,CLSNEUT|TYPTEXT
.LONG 0,0
BLOB1A
.LONG [218-100,0],[210-185,0],BOON1
.WORD 472,DMAWNZ,CLSNEUT|TYPTEXT
.LONG 0,0
BLOB2A
.LONG [16BH-100,0],[210-185,0],BOON1
.WORD 472,DMAWNZ|M_FLIPH,CLSNEUT|TYPTEXT
.LONG 0,0
BLOB3A
.LONG [0130H-100,0],[268-185,0],BOON2
.WORD 472,DMAWNZ,CLSNEUT|TYPTEXT
.LONG 0,0
CLOB1
.LONG [05DH,0],[066H,0],CENS1
.WORD 472,DMAWNZ,CLSNEUT|TYPTEXT
.LONG 0,0
CLOB2
.LONG [094H,0],[04DH,0],CENS2
.WORD 472,DMAWNZ,CLSNEUT|TYPTEXT
.LONG 0,0
CLOB3
.LONG [0C7H,0],[037H,0],CENS3
.WORD 472,DMAWNZ,CLSNEUT|TYPTEXT
.LONG 0,0
CLOB4
.LONG [0F3H,0],[01EH,0],CENS4
.WORD 472,DMAWNZ,CLSNEUT|TYPTEXT
.LONG 0,0
BULT
.LONG 0,0,BULLFT
.WORD 472,DMAWNZ|M_NOCOLL,CLSNEUT|TYPTEXT
.LONG 0,0
CANDY3 .STRING "After The War Of 1999, Reporters"
.BYTE 0
.EVEN
CANDY4 .STRING "Swarmed Into The War Zone. . ."
.BYTE 0
.EVEN
CANDY3A .STRING "Soon After, Hundreds Of Reporters"
.BYTE 0
.EVEN
CANDY4A .STRING "And Other Civilians Are Missing. . ."
.BYTE 0
.EVEN
CANDY5 .STRING "Meanwhile, back at U.S. Military H.Q.,"
.BYTE 0
.EVEN
CANDY6 .STRING "the decision is made..."
.BYTE 0
.EVEN
FLYERS
;SEARCH FOR ALL TEXT LETTERS
;START A PROC FOR EACH ONE
MOVI CLSNEUT|TYPTEXT|SUBTXT,A0
CLR A1
NOT A1
CALLA EXISTOBJ
JRZ FY1
MOVE A0,A8
CREATE0 ALETTER
CLR A0
MOVE A0,*A8(OID)
JRUC FLYERS
FY1 CLR A0
MOVE A0,@FLYFLG
MOVE @CAN_EXIT,A0
JRZ FY2
;MESSAGE I WILL ALLOW EXITING FROM
MOVI 4*60,A0
.REF sleep_var
CALLA sleep_var
JRUC FY3
FY2 SLEEP 4*60
FY3 MOVK 1,A0
MOVE A0,@FLYFLG
CLR A0
MOVE A0,@CAN_EXIT
MOVE @WAVE,A0
SUBK 32,A0
JAZ SUCIDE
CLR A0
MOVE A0,@HALT ;FROM RACKUP
MOVI TXTSND2,A0
CALLA ONESND
DIE
TXTSND1 .WORD >F3F7,>8,>80AE,0
TXTSND2 .WORD >F3F7,>8,>80B1,0
ALETTER
;REMEMBER Y/X-400 COORIDINATE
;RANDOMLY REPOSITION LETTER JUST OFF SCRN
;SEND IT TOWARD CORRECT COORIDINATE
;WHEN IT IS CLOSE, LOCK IT DOWN
;SLEEP UNTIL FLAG IS SET
;SEND LETTER FLYING OFF SCRN
;A8=LETTER
SLEEPK 3
MOVI CLSNEUT|TYPTEXT|SUBTXT,A0
MOVE A0,*A8(OID)
LT2 SLEEPK 1
MOVE @FLYFLG,A0
JRZ LT2
; MOVI CLSNEUT|TYPTEXT|SUBTXT,A0
; MOVE A0,*A8(OID)
;A5=X COORD TO SEEK
;A6=Y COORD TO SEEK
;A7=MULTIPLIER OF VELOCITY
MOVE @WORLDTLX,A0,L
ADDI [200,0],A0
SRL 16,A0
MOVE A0,A5
MOVE @WORLDTLY,A0,L
SUBI [20,0],A0
JRNN ZCNT
CLR A6
MOVI 080H,A7
MOVE *A8(OXPOS),A3,W
MOVE *A8(OYPOS),A4,W
ADDK 21,A4
CALLA XYSEEK2A
JRUC STFV
ZCNT SRL 16,A0
MOVE A0,A6
MOVI 080H,A7
CALLA XYSEEK2
STFV MOVE A5,*A8(OXVEL),L
MOVE A6,*A8(OYVEL),L
DIE
;TABLE OF SPOTS FOR AHMED SITTING BEFORE RUNNING AT PLAYERS
;8 1 2
;7 3
;6 5 4
SIT1 ;[Y,X] ;PAD FOR OTHER DIR ;FOR WARP LOCKDWN 1
.LONG [0DFH,-10],[0DFH,015BH],0,0 ;RUNNING IN WITH DIR=1
.LONG [02CH,0BH],[0D8H,0BH],0,0 ;3
.LONG [30H,-10],[30H,157H],0,0 ;5
.LONG [2CH,163H],[0D2H,167H] ;7
SIT2 ;[Y,X] ;PAD FOR OTHER DIR ;FOR DSRT LOCKDWN 2
.LONG [0DFH,-10],[0DAH,0174H],0,0 ;RUNNING IN WITH DIR=1
.LONG [02CH,0BH],[0D8H,0BH],0,0 ;3 NOT USED AT LCKDWN
.LONG [-10,58H],[-10,177H],0,0 ;5
.LONG [28H,17BH],[0D4H,17BH] ;7
SIT3 ;[Y,X] ;PAD FOR OTHER DIR ;FOR WARP LOCKDWN 3
.LONG [0DFH,-10],[0DFH,015BH],0,0 ;RUNNING IN WITH DIR=1
.LONG [04CH,0BH],[0D8H,0BH],0,0 ;3
.LONG [50H,-10],[50H,157H],0,0 ;5
.LONG [4CH,163H],[0D2H,167H] ;7
SIT4 ;[Y,X] ;PAD FOR OTHER DIR ;FOR WARP LOCKDWN IN AIRPORT
.LONG [0CFH,-10+30],[0CFH,015BH-15],0,0 ;RUNNING IN WITH DIR=1
.LONG [05CH,0BH+30],[0C8H,167H-15],0,0 ;3
.LONG [55H,-10+30],[5CH,157H-15],0,0 ;5
.LONG [5CH,163H-30],[0D8H,0BH+30] ;7
FROMSHK
;BACK FROM SHOCK - WHAT TO RESTART
MOVK 15,A0
MOVE A0,@MAXHULK
MOVK 5,A9 ;5=DESERT FIRST SCROLL
MOVE A9,@TARGET_NUM ;FIRST TARGET FOR SCROLL
CLR A9
MOVE A9,@TAUNTOUT
CREATE ARWPID,ONARRW ;TURN ON UP ARROW
CREATE MAPPID,BIGMAP
CREATE FUTRPID,DOBTR60
MOVI 52H,A0
MOVE @WORLDTLY,A9,L
SRL 16,A9
ADD A0,A9 ;A9=Y TARGET LINE TO TRIGGER SCROLL
CLR A8 ;A8=0 MEANS NOT CHECKING FOR X TARGET
CLR A10
CREATE TARGPID,TARGET
CLR A9 ;A9=0 FOR UP, 1 FOR RGT
MOVE A9,@CRSRAM,L
MOVI DRECT1,A0
MOVE A0,@CURRENT,L
MOVI DBRECT1,A0
MOVE A0,@BCURRENT,L
CREATE FUTUREPID,AOF ;ARROW OFF AFTER A TIME
MOVI ENRECT10,A0
MOVE A0,@EN_CURRENT,L ;FOR BOX COLLISIONS
MOVK 8,A0 ;10
MOVE A0,@CTOTAL
MOVI 011F0H,A0
MOVE A0,@JUMPXY
MOVI 01D8H,A0
MOVE A0,@JUMPXY2
CALLA STRT_G ;GOOB COLOR CYCLE
MOVI MTNKP,A8 ;PAL NAME
MOVI PALTMP4,A9 ;RAM AREA
MOVI [22,25],A10 ;BEGIN/END COLOR #
MOVK 7,A11 ;RATE IN TICKS
CREATE CYCPID,COLCYC ;COLOR CYCLER ON
CALLA BGND_UD1
SLEEPK 1
CALLA BGND_UD1
SLEEPK 1
CALLA BGND_UD1
CLR A0
MOVE A0,@RUNIN,W
;TURN ON PLAYERS BASED ON STATUS WORD
CALLA CLNPAL
CLR A0
MOVE A0,@NO_START
;START SCROLLING CODE FOR SCREEN
;START PLAYERS WALKING THROUGH GATE
CREATE ICONPID,SEND_ICON
MOVI TUNE2,A0
CALLA ONESND ;START FIRST WORLD MUSIC
SLEEP 60
CLR A0
MOVE A0,@START
DIE
.DEF AMODWAVE
.DEF AMODWAVE2
.DEF AMODWAVE3
.REF FB_FADEIN,FADEIN
;INIT DEMO WAVE REPORTER
AMODWAVE3
JSRP WNDWON
CALLA KILBGND ;KILL OLD BACKGROUND IF ANY EXISTED
CALLA CLNPAL
CALLA COLRPRC ;SETUP DEMO GAMEPLAY COLOR PROCESSES
CLR A0
MOVE A0,@WORLDTLX,L
MOVI [035BH,0],A0
MOVE A0,@WORLDTLY,L
SLEEPK 2
JRUC DO_CANDY
;INIT DEMO WAVE ROAD
AMODWAVE2
JSRP WNDWON
CALLA KILBGND ;KILL OLD BACKGROUND IF ANY EXISTED
CALLA CLNPAL
MOVI CLSNEUT|TYPTEXT|SUBWNDW,A0
CLR A1
NOT A1
CALLA KILOBJ
CLR A0
MOVE A0,@WFLG
CALLA COLRPRC ;SETUP DEMO GAMEPLAY COLOR PROCESSES
CLR A0 ;1=STUCK IN GOO, 0=BALL AND CHAIN
MOVE A0,@HSTGSET
MOVE A0,@CRSRAM,L
MOVI [5060,0],A2
MOVE A2,@WORLDTLY,L
MOVI [0450,0],A0
MOVE A0,@WORLDTLX,L
MOVI ROAD_MOD,A0 ;SHOW ROAD
MOVE A0,@BAKMODS,L
SLEEPK 2
; MOVI ( 5 *32*32)+( 5 *32)+( 5 ),A1 ;SAND COLOR
; MOVE A1,@IRQSKYE
CREATE0 FIX
MOVK 17,A0
MOVE A0,@WAVE
MOVK 1,A9 ;A9=0 FOR UP, 1 FOR RGT
CREATE ARWPID,ONARRW ;TURN ON UP ARROW
CREATE FUTUREPID,AOF ;ARROW OFF AFTER A TIME
MOVK 8,A0 ;10
MOVE A0,@CTOTAL
MOVI ICN4,A0
MOVE A0,@ICLIST,L
MOVK SUBSPRY,A9 ;BULLET SUBTYPE
CREATE FIXPID,FIXGUNS
CLR A1
MOVE A1,@DISPLAYON
CALLA INIT_SCORE
CALLA BGND_UD1
MOVI PALCNO,A0
MOVK 2,A1
CALLA FADEIN
CLR A0
CALLA FB_FADEIN
SLEEPK 2
MOVK 1,A1
MOVE A1,@DISPLAYON
SLEEP 80
CALLR SETC2 ;START LAND MINE COLOR CYCLE
MOVK 1,A8
CREATE CHNKPID,ALL_CHUNKS ;CHUNK DRIVER
JRUC MODS1
;INIT DEMO WAVE ORCUS
AMODWAVE
JSRP WNDWON
CALLA KILBGND ;KILL OLD BACKGROUND IF ANY EXISTED
CALLA CLNPAL
MOVI CLSNEUT|TYPTEXT|SUBWNDW,A0
CLR A1
NOT A1
CALLA KILOBJ
CLR A0
MOVE A0,@WFLG
CALLA COLRPRC ;SETUP DEMO GAMEPLAY COLOR PROCESSES
CLR A2
MOVE A2,@HSTGSET
MOVE A2,@CRSRAM,L
MOVE A2,@WORLDTLY,L
MOVI [021H,0],A0
MOVE A0,@WORLDTLX,L
MOVI DSRTNEW_MOD,A0 ;SHOW FORT MODULE
MOVE A0,@BAKMODS,L
SLEEPK 2
MOVK 15,A0
CALLA DOLORD
.REF XTRY_RCK
; MOVK 8,A0 ;10
; MOVE A0,@CTOTAL
MOVI ICN5,A0
MOVE A0,@ICLIST,L
CLR A1
MOVE A1,@DISPLAYON
CALLA INIT_SCORE
CALLA BGND_UD1
MOVI PALCNO,A0
MOVK 2,A1
CALLA FADEIN
CLR A0
CALLA FB_FADEIN
SLEEPK 2
MOVK 1,A1
MOVE A1,@DISPLAYON
SLEEP 80
MOVK 1,A8
CREATE0 XTRY_RCK
MODS1 CREATE COLPID,COLLISIONS ;COLL2
CALLA DMA_SCORE
CREATE ICONPID,SEND_ICON
CREATE ICONPID,SEND_ICON
SLEEPK 30
CREATE PLY1PID,DRAW_PLYR_TORSO
SLEEPK 30
MOVI 350H,A10 ;TIME RINGS ARE ON
MOVK 1,A9
CREATE RNG1PID,RINGS
CALLR SETC2 ;START LAND MINE COLOR CYCLE
SLEEP 30
CREATE0 SBOMBZ
DIE
PALCNO .LONG 5*32*32+5*32+5,0
USEB MOVE @WORLDTLX,A0,L
ADDI [0FEH,0],A0
MOVE @WORLDTLY,A1,L
ADDI [01BH,0],A1
MOVI USEBMB,A2
MOVI 71,A3
MOVI DMAWNZ|M_NOCOLL,A4
MOVI CLSDEAD,A5
CLR A6
CLR A7
CALLA BEGINOBJ2
MOVE A8,A0
CALLA OBJOFF
SLEEP 200
MOVI BABY,A0
CALLA ONESND
SLEEP 90
SLJ SLEEPK 10
MOVE @HALT,A0
JRNZ SLJ
MOVK 12,A9
UB1 MOVE A8,A0
CALLA OBJON
SLEEPK 10
MOVE A8,A0
CALLA OBJOFF
SLEEPK 10
DSJ A9,UB1
MOVE A8,A0
CALLA DELOBJ
DIE
.DEF GETSPEAK
GETSPEAK
MOVE @PCNT,A0
ANDI 07H,A0
SLL 5,A0
ADDI YELL,A0
MOVE *A0,A0,L
CALLA ONESND
RETS
YELL .LONG BABY,DOLLAR,LIMBS,CITIZEN
.LONG BABY,DOLLAR,MAW,CITIZEN
BABY .WORD >F9F7,>50,>814D,0 ;BABY MILK
DOLLAR .WORD >F9F7,>50,>814E,0 ;BUY 4 DOLLAR
LIMBS .WORD >F9F7,>50,>8152,0 ;LIMB FROM LIMB
CITIZEN .WORD >F9F7,>50,>8155,0 ;PEACEFUL CITIZEN
MAW .WORD >F9F7,>50,>814A,0 ;OH MAW
REALLY .WORD >F9F7,>50,>8148,0 ;YOUR REALLY GOOD
AMNOT .WORD >F9F7,>50,>8149,0 ;NOT
.DEF DOAGN
DOAGN
CREATE0 DO_WINNER
SLEEP 90
CLR A0
MOVE A0,@CRSRAM,L
MOVI PATHC,A10 ;INDICATES NEW SCROLL WITH SCRL TABLE
MOVE @WORLDTLY,A9,L
SRL 16,A9
ADDI 220,A9 ;A9=Y TARGET LINE TO TRIGGER SCROLL
CLR A8 ;A8=0 MEANS NOT CHECKING FOR X TARGET
CREATE TARGPID,TARGET
;TURN ON COLOR CYCLES FOR THIS TOP PART OF DESERT
CALLA CLNPAL
CALLR SETC2 ;START LAND MINE COLOR CYCLE
CALLA STRT_G ;CYCLE GOOB POOL
CALLA STRT_D ;CYCLE SAT DISH
CREATE0 ICON_STOP
MOVI 012BH,A0
MOVE A0,@JUMPXY2 ;X JUMP COOR FOR TOP OF DESERT HILLS
MOVI 021DH,A0 ;21A ;Y JUMP FOR TOP OF DESERT
MOVE A0,@JUMPXY
MOVK 15,A0
CALLA DOLORD
CREATE0 JEPCYC
; .REF BEACONS
; CREATE0 BEACONS ;SHOW AREA AROUND DISHES ETC.
MOVI TUNE5,A0
CALLA ONESND
SLEEP 2*60
MOVI REALLY,A0
CALLA ONESND
SLEEP 1*60+20
MOVI AMNOT,A0
CALLA ONESND
DIE
ICON_STOP
MOVK 1,A0
MOVE A0,@ICONS_DN
SLEEP 15*60
CREATE ICONPID,SEND_ICON
DIE
PATHC ;DIR,CNT
.WORD 1,190H,2,320H,10,1,1,1D8H,7,31FH,9,0B8H,1,10H,11,1,2,2E0H,1,1C0H
.WORD 12,1,7,2D8H,1,1D0H,2,150H,3,1A0H,9,0C8H,7,188H,13,1,1,348H,8,16BH
.WORD 1,1FAH,0
.END