************************************************************** * * 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