total-carnage/BACKUP/WAVES.ASM

4451 lines
93 KiB
NASM
Raw 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) 1991 WILLIAMS ELECTRONICS GAMES, INC.
*
*.Last mod - 8/30/91 16:19
**************************************************************
.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
.REF NOWAY,HASND,BUYMSC,MUSICOFF
ahkbang .word >f9a0,10,>80ef,0 ;^ angry
;SYMBOLS EXTERNALLY DEFINED
.REF AIRRECT3A,AIRBRECT3,TAUNTOUT
.REF prt_inrackwin
.ref fry_plyrs,BOSS
.REF hisclong,ISHSTD,INITIALS,ROAD,ICN4
.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,KEYS_LOST
.REF COLLISIONS,ALL_CHUNKS,THIS_PLYR,RD15FONT,WRLD,FADEOUT2
.REF P1CTRL,P2CTRL,ATSTRT,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,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
; .IF DEBUG
.REF FORDBG,O_MINE
.REF SRECT1,BSRECT1
.REF DOATP,DO5
; .ENDIF
;SYMBOLS DEFINED IN THIS FILE
.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,WFLG
.DEF OBJEXP32,PSTAT,BTIME,ZONE_TXT,SQR_FLG,ZONE_TXT2
.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 ADDINY,32
.BSS DELAYALL,16
.BSS START,16
.BSS LOWZ,16
.BSS KEEP,32
.BSS KEEP1,32
.BSS KEEP2,16
.BSS KEEPCL,16
.BSS KEEP3,16
.BSS KEEP4,32
.BSS WSPEED,16
.BSS WFLG,16 ;0=NOT ON, 1=YES IT IS ON
.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 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,16*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
CREATE 0,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 CREATE 0,BOX
DSJ A4,SQR1
DSJ A5,SQR0
PULL A0 ;CYCLE PROC
PULL A8
;DONE WITH ALL CREATES
MOVE A0,A10
CREATE 0,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 MOVK 1,A1
JSRP FRANIM
;TURN ON BACKGROUND
MOVK 1,A0
MOVE A0,@SQR_FLG
SLEEPK 1
MOVE A10,A9
MOVK 1,A1
JSRP FRANIM
MOVE A8,A0
CALLA DELOBJ
CLR A0
MOVE A0,@SQR_FLG
DIE
;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 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
MMTM SP,A8,A9
CMPI FROMRGT,A9
JRZ PPO
MOVE A8,A9
MOVI 35,A10 ;TIME RINGS ARE ON
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
;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
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
.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
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
VWSCRN2:
.LONG HOME2BMOD ;THIS IS FROM BLIMP (MODULE NAME)
.WORD -7H,35BH+02H ;x,y start pos.
.LONG >FFFFFFFF
STRT_MOD:
.LONG FORTABMOD ;THIS IS FROM BLIMP (MODULE NAME)
.WORD 0FFEAH,0 ;x,y start pos.
.LONG >FFFFFFFF
DSRTONE_MOD:
.LONG DSRTONEBMOD ;THIS IS FROM BLIMP (MODULE NAME)
.WORD 08H,0FDAH ;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
CREATE 0,FUCKIT
PULL A1
EXR RETS
FUCKIT
; SLEEPK 1
MOVE A9,A0
CALLA DELOBJ
DIE
STRT_S2
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
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 ;35B
MOVE A0,@WORLDTLY,L
SLEEPK 2
;TEMPORARY JUMP TO RACKUP SCREEN
; MOVK 1,A0
; MOVE A0,@INTRO
; JAUC DO_RACKUP
; jauc fry_plyrs
MOVK OWSPD2,A0
MOVE A0,@WSPEED
JSRP WNDWON ;GROW WINDOW
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
CLR A0
MOVE A0,@HALT
MOVE A0,@ISTATE
; MOVK 1,A0 ;FOR SOLDIER ANIMATING
CLR A0 ;FOR REPORTER ANIMATING
MOVE A0,@INTRO
; JRUC GENA
;FOR CHICK REPORTER
; MOVI ( 6 *32*32)+( 6 *32)+( 7 ),A1
; ;BLUE SKY
; MOVE A1,@IRQSKYE
MOVI VWSCRN,A0 ;SHOW HOME BASE VIEW SCREEN
MOVE A0,@BAKMODS,L
CALLA BGND_UD1
MOVI TUNE1,A0
CALLA ONESND
CALLR STRT_S2
; movi PRSTART,A8
; movi 100,a9
; CREATE INTROPID,prt_inrackwin
;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 FISRT 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
; MOVK 18H,A10
; CALLA SHAKER
;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
;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
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
MOVI SCREAM,A0
CALLA ONESND
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
MOVE A8,A0
CALLA DELOBJ
DIE
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
MOVE A8,A0
CALLA DELOBJ
MOVE *A13(PDATA+32),A0,L
CALLA DELOBJ
MOVE *A13(PDATA),A0,L
CALLA DELOBJ
DIE
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
GENA
;GI GETS EATEN
;FOR GI
MOVI VWSCRN2,A0 ;SHOW HOME BASE VIEW SCREEN
MOVE A0,@BAKMODS,L
CALLA BGND_UD1
CREATE INTROPID,BIG_EAT
;DO GAME OBJECTIVES
;GENERAL WALKS IN
;FORT MCWILLIAMS EXPLODING
;START STATIC
CALLR STRT_S
CALLR STRT_S2
MOVI ( 4 *32*32)+( 5 *32)+( 5 ),A0 ;SKY COLOR
MOVE A0,@IRQSKYE
MOVI INCT,A8 ;TRANSMIT
MOVI [02AH,0D0H],A9 ;SCRN Y/X
MOVI 00101H,A6 ;COLOR CYCLE DIGITS
MOVI RD15FONT,A11 ;FONT TABLE
CLR A0
MOVE A0,@WRLD
MOVK 2,A10 ;Y,X SPACING BETWEEN CHARCTERS
CLR A0
JSRP STRCNRMO ;PRINT STRING, NO OBJECTS
JSRP WNDWOFF
SLEEP 04EH
CALLR ERASE_TXT
SLEEP 066H+600
JRUC GENSPK
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 FISRT 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
GENSPK
;SEND IN DOOMSDAY TEXT
CALLR DO_BLN
MOVI [099H,0],A0
MOVI [48,0],A1
MOVI GSCOTT,A2 ;IMG
CALLR DOTXT
SLEEP 60
MOVE A8,A0
CALLA DELOBJ
GSPK2 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
;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,@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
CLR A0
MOVK 9,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,@KEYS_LOST
MOVE A0,@HSTGSET
;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
.IF DEBUG
MOVI ( 5 *32*32)+( 5 *32)+( 5 ),A1 ;GREY
MOVE @START,A0
JRNZ FAG
.ENDIF
;REGULAR START AT BEGINNING OF DESERT!
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
MOVI DSRTONE_MOD,A0 ;SHOW FORT MODULE
MOVE A0,@BAKMODS,L
CALLA BGND_UD1
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
CREATE 0,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
CREATE 0,DOATP
MOVI ( 8 *32*32)+( 5 *32)+( 4 ),A1 ;GREY
MOVE A1,@IRQSKYE
JRUC ENTER
ATP2 CMPI 3,A0
JRNZ ATP3
;START GAME AT FORT GATES - NUCLEAR FACILITY
MOVI [0476H,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 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
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
CREATE 0,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 CREATE 0,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
CREATE 0,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
; CREATE 0,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 10,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 08000H,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
LOCKUP
PATHCB ;DIR,CNT
.WORD 1,1,19,1,0
TARGETST
SLEEPK 10
JRUC TARGET
PATHAIR2
.WORD 16,1,3,320H,17,1,1,504H,19,1,0
;3,340H,1,400,0
FIX
MOVI RDRECT1,A0
MOVE A0,@CURRENT,L
CLR A0
MOVE A0,@BCURRENT,L
CREATE 0,JETS
SLEEP 250 ;TIME TO GET MAP ICON
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
CREATE 0,ROAD ;TRUCKS ETC.
DIE
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 SLEEP 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 [0476H,0],A2 ;35B
; MOVE A2,@WORLDTLY,L
;
; MOVE @OBJPTR,A1,L
; MOVE A2,*A1(OYVAL),L
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
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
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 ARWPID,ONARRW ;TURN ON UP ARROW
CREATE MAPPID,BIGMAP
CREATE WARPPID,WARPER
CREATE FUTRPID,DOBTR60
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
CALLA BGND_UD1
CALLR SETC2 ;LAND MINE CYCLE
CLR A0
MOVE A0,@RUNIN,W
;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
CREATE COLPID,COLLISIONS ;COLL2
CREATE CHNKPID,ALL_CHUNKS ;CHUNK DRIVER
SLEEPK 2
CALLA DMA_SCORE
MOVI INGAME,A0 ;NOT IN INTRO MODE ANYMORE!
MOVE A0,@GAMSTATE,W ;FLAG INGAME
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
.IF DEBUG
MOVE @START,A0
CMPI 3,A0
JRNZ JIMA
.ENDIF
;START OF GAME OUTSIDE ENTRANCE TO REACTOR WORLD
CREATE TARGPID,SEND_TOP ;SEND FIRST ENEMIES
MOVK 1,A0
CALLA DOLORD
.IF DEBUG
JIMA
.ENDIF
; CLR A0
; MOVE A0,@MAPON
DIE
XX .EQU 241-13
YY .EQU 202+48H
DRECT1
;FIRST RECTANGLE LIST FOR PLAYERS IN DESERT
; .WORD 626-XX,5070-YY,713-XX,5138-YY ;LEFT DISH
; .WORD 770-XX,5025-YY,857-XX,5093-YY ;RGT DISH
;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
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
ZLST2 .LONG 0,ZULU2,SEC1A,SEC2A,SEC3A,DS1A,HUT1A,HUT2A,YESB2,NOB2,SMASH2
.LONG NOG2,WOG2,YOG2,JPS2
ZLST3 .LONG 0,ZULU3,SEC1B,SEC1B,SEC3B,DS1B,HUT1B,HUT2B,YESB3,SEC1B,SMASH3
.LONG NOG3,WOG3,YOG3,JPS3
ZULU .BYTE "NUCLEAR REACTOR",0
ZULU2 .BYTE "ZONE",0
ZULU3 .BYTE "[CODE=ZULU]",0
SEC1 .BYTE "DESTROY SECRET",0
SEC1A .BYTE "NUCLEAR CAPABILITY",0
SEC1B .BYTE " ",0
SEC2 .BYTE "All Reactors Destroyed!",0
SEC2A .BYTE "You Kicked Ass!",0
SEC3 .BYTE "YOU ARE AN AWESOME",0
SEC3A .BYTE "WEASEL! GO GET",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 "SOME TRUCKS GOT AWAY!",0
NOB2 .BYTE "NO BONUS 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 "YOUR SCORE IS NOT DOUBLED!",0
NOG2 .BYTE "TOO MANY JEEPS GOT AWAY.",0
NOG3 .BYTE "NO BONUS 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
.EVEN
ZONE_TXT2
;A10=MESSAGE #
;A9=ADD IN Y VALUE
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
; MOVI RD15FONT,A11 ;FONT TABLE
; CLR A0
; MOVE A0,@WRLD
; MOVK 2,A10 ;Y,X SPACING BETWEEN CHARCTERS
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
; MOVI RD15FONT,A11 ;FONT TABLE
; CLR A0
; MOVE A0,@WRLD
; MOVK 2,A10 ;Y,X SPACING BETWEEN CHARCTERS
CLR A0
JSRP STRCNRMO
CREATE 0,FLYERS
SLEEP 6*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
ZONE_TXT
;A8=COLOR TO USE
;A8=0C0CH OR 0F0FH
MOVE A8,@KEEPCL
CALLR GETKP
TOP0 MOVK 20,A0
MOVE A0,@KEEP2
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
MOVE A0,@WRLD
MOVK 2,A10 ;Y,X SPACING BETWEEN CHARCTERS
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
MOVE A0,@WRLD
MOVK 2,A10 ;Y,X SPACING BETWEEN CHARCTERS
CLR A0
JSRP STRLNRM
SLEEPK 1
MOVE @KEEP,A8,L
MOVE @KEEP2,A0
DEC A0
MOVE A0,@KEEP2
JRNZ TOP
SLEEPK 10
MOVE @KEEP3,A0
DEC A0
MOVE A0,@KEEP3
JRNZ TOP0
JRZ 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
MOVE A8,A0
CALLA DELOBJ
RETP
DELWNDW:
MOVE @OBJPTR,A0,L
MOVE A0,A8
CALLA DELOBJ
RETS
;
; 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:
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
JRNZ FA3YOK
MOVK 1,A0
SLL 16,A0
MOVY A0,A3
FA3YOK:
CLR A0
MOVX A3,A0
MOVE A0,A0
JRNZ 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
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:
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
CREATE 0,GAMEOTXT ;INDPID
MOVK 1,A0
MOVE A0,@HALT
SOUND1 NOWAY
SLEEP 080H ;LET EVERYONE SEE PLEASE
SOUND1 ahkbang
; SOUND1 HASND
CREATE 0,KILGOTXT
CALLA INIT_SCORE ;TURNS ON REGULAR IMAGES FOR SCORES
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 ATSTRT ;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:
CLR A0
MOVI BRGHT,A6 ;ROBO_LASER
MOVI GAMOVMSG,A8
MOVI [37+SCRNTOP,200],A9
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 ONESND
; 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
CALLA ONESND ;START FIRST WORLD MUSIC
DIE
MUSLIST .LONG TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2
.LONG TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE6,TUNE4,TUNE2,TUNE2,TUNE5
.LONG TUNE2,TUNE2,TUNE2,TUNE2,TUNE5,TUNE5,TUNE5,TUNE5,TUNE2,TUNE2
.LONG TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2
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
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
SLEEP 120
;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
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
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,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
MOVE *A8(OFLAGS),A4
CALLA ANI
JRUC CHKCHNGB
BH1 MOVE A8,A0
CALLA OBJOFF
JRUC CHKCHNGB
BH2
MOVI CHK2A,A1
JRUC BHO
DOJAW SLEEP 011EH
MOVK 1,A1
MOVI JAWLST,A9
JSRP FRANIM
MOVK 2,A10
DJH
MOVK 1,A1
MOVI JAWLST2,A9
JSRP FRANIM
DSJS A10,DJH
MOVK 1,A1
MOVI JAWLST3,A9
JSRP FRANIM
SLEEP 60
DIE
JAWLST
.LONG BTTMJAW
.WORD 2
.LONG BTJ2
.WORD 2
.LONG BTJ3
.WORD 0FH ;01CH
.LONG 0
JAWLST3
; .LONG BTJ2
; .WORD 3
; .LONG BTJ3
; .WORD 5
; .LONG BTJ2
; .WORD 3
.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 MOVK 1,A1
MOVI ILFT,A9
JSRP FRANIM
JRUC DOIL1
DOIR SLEEP 08CH
DOIR1 MOVK 1,A1
MOVI IRGT,A9
JSRP FRANIM
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
DOUP MOVI -8000H,A0
CALLR MOD_VELS
SLEEP 0F4H
CLR A0
CALLR MOD_VELS
SLEEP 02EH
MOVI 30000H,A0
CALLR MOD_VELS
SLEEPK 6
CLR A0
CALLR MOD_VELS
SLEEP 6*60
;BURP OVER
MOVI 40000H,A0
CALLR MOD_VELS
SLEEP 0F4H
CLR A0
CALLR MOD_VELS
DIE
DOHZ SLEEP 12CH
;BITING DOWN ON SOLDIER
MOVI 36,A10
DOHZ1 SLEEPK 5
MOVE *A8(OYPOS),A0
XORI 5,A0
MOVE A0,*A8(OYPOS)
CALLR LINE_UP
DSJ A10,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,CLSNEUT|TYPNEUT
.LONG 0,0
T2 ;TANK RGT
.LONG 0,0,BTTMJAW
.WORD 0102H,DMAWNZ|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T3 ;TANK LEFT
.LONG 0,0,TPHD
.WORD 0100H,DMAWNZ,CLSNEUT|TYPNEUT
.LONG 0,0
T4 ;TANK RGT
.LONG 0,0,TPHD
.WORD 0100H,DMAWNZ|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T5 ;TANK LEFT
.LONG 0,0,UPPRJAW
.WORD 0104H,DMAWNZ,CLSNEUT|TYPNEUT
.LONG 0,0
T6 ;TANK RGT
.LONG 0,0,UPPRJAW
.WORD 0104H,DMAWNZ|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T7 ;TANK LEFT
.LONG 0,0,INNRMTH
.WORD 0FAH,DMAWNZ,CLSNEUT|TYPNEUT
.LONG 0,0
T8 ;TANK RGT
.LONG 0,0,INNRMTH
.WORD 0FAH,DMAWNZ|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T9 ;TANK LEFT
.LONG 0,0,BOD1
.WORD 0100H,DMAWNZ,CLSNEUT|TYPNEUT
.LONG 0,0
T10 ;TANK RGT
.LONG 0,0,BOD1
.WORD 0100H,DMAWNZ|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T11 ;TANK LEFT
.LONG 0,0,BOD2
.WORD 0100H,DMAWNZ,CLSNEUT|TYPNEUT
.LONG 0,0
T12 ;TANK RGT
.LONG 0,0,BOD2
.WORD 0100H,DMAWNZ|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T13 ;TANK LEFT
.LONG 0,0,IPIECE
.WORD 0105H,DMAWNZ,CLSNEUT|TYPNEUT
.LONG 0,0
T14 ;TANK RGT
.LONG 0,0,IPIECE
.WORD 0105H,DMAWNZ|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T15 ;TANK LEFT
.LONG 0,0,IPC2
.WORD 0105H,DMAWNZ,CLSNEUT|TYPNEUT
.LONG 0,0
T16 ;TANK RGT
.LONG 0,0,IPC2
.WORD 0105H,DMAWNZ|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T17 ;TANK LEFT
.LONG 0,0,CHK1
.WORD 0100H,DMAWNZ,CLSNEUT|TYPNEUT
.LONG 0,0
T18 ;TANK RGT
.LONG 0,0,CHK1
.WORD 0100H,DMAWNZ|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T19 ;TANK LEFT
.LONG 0,0,CHK2A
.WORD 0100H,DMAWNZ,CLSNEUT|TYPNEUT
.LONG 0,0
T20 ;TANK RGT
.LONG 0,0,CHK2A
.WORD 0100H,DMAWNZ|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T21 ;TANK LEFT
.LONG 0,0,BOD1A
.WORD 0100H,DMAWNZ+M_FLIPV,CLSNEUT|TYPNEUT
.LONG 0,0
T22 ;TANK RGT
.LONG 0,0,BOD1A
.WORD 0100H,DMAWNZ|M_FLIPH+M_FLIPV,CLSNEUT|TYPNEUT
.LONG 0,0
T23 ;TANK LEFT
.LONG 0,0,BOD2A
.WORD 0100H,DMAWNZ+M_FLIPV,CLSNEUT|TYPNEUT
.LONG 0,0
T24 ;TANK RGT
.LONG 0,0,BOD2A
.WORD 0100H,DMAWNZ|M_FLIPH+M_FLIPV,CLSNEUT|TYPNEUT
.LONG 0,0
FLOW SLEEP 014CH
MOVI 22H,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
MOVE *A8(OPAL),A0,L
ANDI 0FFFFH,A0
MOVE A0,*A8(OPAL),L
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 MOVK 1,A1
JSRP FRANIM
MOVE A8,A0
CALLA DELOBJ
DIE
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
CREATE 0,ALETTER
CLR A0
MOVE A0,*A8(OID)
JRUC FLYERS
FY1 CLR A0
MOVE A0,@FLYFLG
SLEEP 5*60 ;-40
MOVK 1,A0
MOVE A0,@FLYFLG
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
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
ADDI 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
.END