************************************************************** * * Software: Mark Turmell * Initiated: 3/28/91 * * Modified: ! * * COPYRIGHT (C) 1992 WILLIAMS ELECTRONICS GAMES, INC. * *.Last mod - 1/9/92 18:40 ************************************************************** .FILE 'LAYER.ASM' .TITLE 'TOTAL CARNAGE GAME PROGRAM' .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 "IMGTBL.GLO" .INCLUDE "GAME.EQU" ; ;SOUNDS EXTERNAL ; .REF ALTEXP4,MECH1,ALTXP1A,AGLSEXP,GLSEXP,MTING,ONESNDOVR ;SYMBOLS EXTERNALLY DEFINED ; .REF GETSND,GETCOS,GETSIN,CLNICN,STATUS,SHK_ON .REF DO_DIFF2,RANDOM,INTO12,RANDPER,RANGRAND,SCRTSTG,FRANIM,WFLG .REF GET_WVADDR,HALT,ENEMY_RECT,PCNT,PIT2,DO_PUNISH,GPALOBJ .REF SCORE_IT,FAME4,FAME2,FAME3,FLASHME,TBLST,FIREEXP,SHAKER .REF missile_firexy,GETFPAL,SCRADD2,P1DATA,P2DATA,WAVE,FIXEDA .REF PLYROBJS,FRANIMQ,RUNIN,LOWZ,SBOMB,missile_firexy_slow .ref RNDRNG0 ; ;SYMBOLS DEFINED IN THIS FILE ; .DEF SPAWN_LYR,MAXLYR,LYR_CNT,KILL_LY,YKIL_RNG,SENDGRN,SENDGRN2 .DEF FLAME_LAY,YKIL_LAY,LAY_EXP,PHASE1,LHLPS .DEF XVL,YVL,STRT_ALAY,BIGBLU,SPAWN_MISL .DEF DOYV1,DOYV,DOYVP,BOLTS,HLPON,LSHIT,LSDMG ; ;UNINITIALIZED RAM DEFINITIONS ; .BSS LYR_CNT,16 ;TOTAL TANKS ON SCREEN .BSS TNK_DN,16 .BSS MAXLYR,16 ;MAX NUMBER OF TANKS ALLOWED ON SCRN .BSS PTMP,16 .BSS TEMP,32 ; ;EQUATES FOR THIS FILE ; ;TANK DATA STRUCTURE ; CNTR .EQU PDATA ;DELAY FOR OID SWAPPING SPDY .EQU PDATA+16 DIR .EQU PDATA+32 ;UHW OBJECT DIRECTION ;MYPLYR .EQU PDATA+48 ;UHW PLAYER 1 OR 2 FIRED ME SK_DIR .EQU PDATA+64 ;SEEK DIR FOR SPIN LEVEL .EQU PDATA+80 ;DIFFICULTY LEVEL FOR SPEEDS ETC. HSPD .EQU PDATA+96 H2SPD .EQU PDATA+128 VSPD .EQU PDATA+160 V2SPD .EQU PDATA+192 TOTMN .EQU PDATA+224 ;UHW WAY01 .EQU PDATA+240 ;UHW ABSRB .EQU PDATA+256 ;UHW ;ABSRB IS DEFINED IN FIEND.ASM CFLAGS .EQU PDATA+272 ;UHW CONTROL FLAGS FOR OBJECT MYPATRN .EQU PDATA+288 ;UHL PATTERN LIST ADDRESS KPANTOBJ .EQU PDATA+320 ;UHL ANTENNA IMG PNTR LAYTMR .EQU PDATA+352 ;UHW MRAM .EQU PDATA+368 ;UHL 32*POINTER TO RAM LIST KPMRAM .EQU PDATA+400 ;UHL CALLA FREEOBJ WITH THIS LATER DIS .EQU PDATA+432 ;UHW OBJECT DISTANCE COUNT MYANT .EQU PDATA+448 ;UHL ANTENNA PROC POINTER ; ; ;ANTENNA DATA STRUCTURE ; ; ;EQUATES ; HSPEED .EQU 07000H ;INITIAL SPEED FOR MINE LAYER HSPEED2 .EQU HSPEED*2 ;INITIAL SPEED FOR MINE LAYER HITLAY .EQU 20*30 ; ;EQUATES ; MAXHITS .EQU 10 ;HELPER BLADE DIFFICULTY SETTING ADLTA .EQU 0381BH ;(411775/(160/2)) ; ; LASER/BLADES DATA STRUCTURE ; PTRX .EQU PDATA ;UHW ;LAST X PTRY .EQU PDATA+16 ;UHW ;LAST Y ;ANIMTIK .EQU PDATA+32 ;UHL ;FRAME SLEEP TIME THETA .EQU PDATA+64 ;SHL ;CURRENT PROGRESSION DELTA .EQU PDATA+96 ;SHL ;DELTA ANGLE LEG .EQU PDATA+128 ;UHL LEG OF PLAYER WHO COLLECTED ME HITS .EQU PDATA+160 ;UHW ;HIT CNTR .TEXT HELP .WORD >F97E,>24,>80C1,0 ;"HELP" HLPON: MMTM SP,A1,A7,A9,A10 ; MOVE A0,A9 ;A9=LEG MOVE *A0(OPLINK),A0,L MOVE *A0(LEG_PTR),A9,L MOVE *A0(LSRPTR),A0,L JRZ SKP MOVE *A0(OPLINK),A0,L CLR A1 MOVE A1,*A0(HITS) JRUC SKP2 SKP CREATE0 LASER SKP2 CALLA CLNICN MOVI GETSND,A0 CALLA ONESND MMFM SP,A1,A7,A9,A10 RETS ; DO LASER MOVEMENT LOGIC LASER: ;A9=LEG IMG PNTR OF PLAYER WHO TOUCHED ME CLR A0 MOVE A0,*A13(MYPLYR) ;THIS BLADE WILL NOT SCORE PTS ;VEHICHLES USE THE BLADE OID FOR KILLING GRUNTS, ETC. ;SO THE HELPER BLADE WILL NOT SCORE PTS FOR THE PLAYER CLR A0 MOVE A0,*A13(HITS) MOVI ADLTA,A0 MOVE A0,*A13(DELTA),L MOVI INITAB,A14 CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE CALLA STFOBJ ;STUFF OBJECT DATA MOVE A13,*A0(OPLINK),L CALLA ADJSTWTL ;PUT US IN THE WORLD CALLA INSOBJ ;INSERT OBJECT INTO LIST MOVE A0,A10 ;A9=CORRECT LEG PTR MOVE A9,*A13(LEG),L ;A7=A7 ALREADY? MOVE *A9(OPLINK),A7,L ;LEGS HAVE SAME OPLINK AS TORSO! ;A7 NOW EQUALS TORSO PROC OF PLAYER WHO PICKED UP HELPER ICON MOVE A0,*A7(LSRPTR),L ;THIS OKAY? MOVE A9,A8 CALLA GETANIXY ;Y/X POSITION RETURNED IN A2,A3 MOVE A10,A8 ADDI [3,0],A2 MOVE A2,*A8(OYVAL),L SUBI [10,0],A3 MOVE A3,*A8(OXVAL),L CLR A0 MOVE A0,*A13(PTRX),W ;OLD X,Y VALUES MOVE A0,*A13(PTRY),W MOVE A0,*A13(THETA),L ; ENCIRCLE: ; MAKE LASER MOVE IN A CIRCLE AROUND PLAYER CALLR ALIGNXY ;KEEP OBJECT ALIGNED WITH PLAYER MOVE *A13(THETA),A2,L ;PROGRESSIVE THETA MOVE *A13(DELTA),A0,L ;NEXT DELTA ANGLE ADD A2,A0 CALLA GETCOS MOVE A0,A11 MOVK 3,A0 MPYS A0,A11 MOVE A14,*A13(THETA),L MOVE A14,A0 CALLA GETSIN MOVE A0,A3 MOVK 3,A0 MPYS A0,A3 MOVE A3,A10 MOVE *A8(OXVAL),A3,L MOVE *A8(OYVAL),A4,L ADD A11,A3 ADD A10,A4 MOVE A3,*A8(OXVAL),L MOVE A4,*A8(OYVAL),L SLOOP 1,ENCIRCLE LASERDIE: MOVE A11,*A8(OXVEL),L MOVE A10,*A8(OYVEL),L FLYER: CALLA SCRTST JRNZ LSER SLOOP 30,FLYER LSER jauc DELOBJDIE ALIGNXY: ; KEEP LASER WITHIN X CENTERPOINT OF PLAYER ; PARMS: ; ; A8 = PTR TO PLINDX ; MOVE *A13(PTRX),A4,W ;OLD X,Y VALUES MOVE *A13(PTRY),A5,W MOVE A8,A10 MOVE *A13(LEG),A8,L CALLA GETANIXY ;Y/X POSITION RETURNED IN A2,A3 MOVE A10,A8 SWAP A2,A3 SRL 16,A2 SRL 16,A3 MOVE A4,A4 JRZ PK DIFF: CMP A4,A2 JREQ DOY JRGT ADDX ;NEW X POS > OLD X POS SUBX: SUB A2,A4 MOVE *A8(OXPOS),A6 SUB A4,A6 MOVE A6,*A8(OXPOS) JRUC DOY ADDX: SUB A2,A4 NEG A4 MOVE *A8(OXPOS),A6 ADD A4,A6 MOVE A6,*A8(OXPOS) DOY: CMP A5,A3 JREQ PK ;NO DIFFERENCES IN X,Y BYE! JRGT ADDY ;NEW Y POS > OLD Y POS SUBY: SUB A3,A5 MOVE *A8(OYPOS),A6 SUB A5,A6 MOVE A6,*A8(OYPOS) JRUC PK ADDY: SUB A3,A5 NEG A5 MOVE *A8(OYPOS),A6 ADD A5,A6 MOVE A6,*A8(OYPOS) PK: MOVE A2,*A13(PTRX),W MOVE A3,*A13(PTRY),W RETS LSDMG: MMTM SP,A1,A13 MOVE *A8(OPLINK),A13,L ;GET PROCESS ID BACK MOVE *A13(HITS),A1 INC A1 MOVE A1,*A13(HITS) CMPI MAXHITS,A1 JRNZ HO ;BLADE TO FLY OFF ;RESET HERE CALLR LSHIT HO MMFM SP,A1,A13 RETS LSHIT: ;CALLED FROM COLLISION ROUTINE ;ALSO CALLED FROM ROBO WHEN PLAYER DIES ;A8=HELPER IMG PNTR MMTM SP,A0,A7,A13 ;PUSHING ENOUGH STUFF HERE? MOVE *A8(OPLINK),A13,L ;GET PROCESS ID BACK ;HELPER TO FLY OFF ;RESET HERE MOVE *A13(LEG),A0,L ;GET LEG I SURROUND MOVE *A0(OPLINK),A0,L ;GET PLAYER PROC CLR A7 MOVE A7,*A0(LSRPTR),L ;ZERO PLAYER PROC LASER PNTR MOVE A13,A0 MOVI LASERDIE,A7 CALLA PUTA7 ;THIS HLPR WILL NOW WAKE UP AT A7 ADDR MMFM SP,A0,A7,A13 RETS INITAB: .LONG 0,0,BLADE .WORD 158,DMAWNZ,CLSPLYR|TYPHLPR .LONG 0,0 BOLTS MOVK 10,A10 BLT1 CREATE FUTUREPID,ONEBOLT DSJS A10,BLT1 MOVE @WORLDTLX+16,A10 ADDI 70,A10 ;A10=TARGET FOR CHANGING @RUNIN TO 1 SETR SLEEPK 20 MOVE @WORLDTLX+16,A0,L CMP A10,A0 JRLT SETR MOVK 1,A0 MOVE A0,@RUNIN DIE ONEBOLT SLEEPK 10 MOVE @WORLDTLX+16,A0 CMPI 580H,A0 JANC SUCIDE MOVI BOLTX-16,A1 MOVE A10,A2 SLL 4,A2 ADD A2,A1 MOVE *A1,A1,W CMP A1,A0 JRNC ONEBOLT ADDI 400,A0 CMP A1,A0 JRC ONEBOLT ;BOLT IS ON SCRN ADDI BOLTNUM-16,A2 MOVE *A2,A11,W MOVE A1,A0 SLL 16,A0 MOVE A0,A9 MOVI [559H,0],A1 MOVI VBOLT1,A2 MOVI 150,A3 MOVI DMAWNZ,A4 MOVI CLSNEUT|TYPBOLT,A5 CLR A6 CLR A7 CALLA BEGINOBJ2 CREATE0 DOIT MOVI ELECSND1,A0 CALLA ONESND MOVE A9,A0 MOVI [5B2H,0],A1 MOVI VBOLT1,A2 MOVI 150,A3 MOVI DMAWNZ,A4 MOVI CLSNEUT|TYPBOLT,A5 CLR A6 CLR A7 CALLA BEGINOBJ2 MOVI ELECSND2,A0 CALLA ONESND BL1 MOVI BOLTVF,A9 JSRP FRANIMQ DSJS A11,BL1 MOVI ELECSND2,A0 CALLA ONESND MOVE A8,A0 CALLA DELOBJ MOVE A10,A0 SLL 4,A0 ADDI SLPTIM-16,A0 MOVE *A0,A0,W CALLA PRCSLP JRUC ONEBOLT DOIT MOVI BOLTVF,A9 JSRP FRANIMQ DSJS A11,DOIT MOVE A8,A0 CALLA DELOBJ DIE ELECSND1 .WORD >F0E5,>18,>811E,0 ELECSND2 .WORD >F5E5,20,>811F,0 BOLTNUM .WORD 2,5,5,4,2,5,5,2,5,1 SLPTIM .WORD 45,72,45,60,70,45,46,41,53,69 BOLTX .WORD 0E3H,017EH,1ffh,25CH,32AH,3B9H,42EH,4BBH,584H,59CH BOLTVF .LONG VBOLT1 .WORD FLIPBITS|3,0 .LONG VBOLT2 .WORD 3 .LONG VBOLT3 .WORD 3 .LONG VBOLT1 .WORD FLIPBITS|3,M_FLIPH .LONG VBOLT2 .WORD 3 .LONG VBOLT3 .WORD 3 .LONG VBOLT1 .WORD FLIPBITS|3,M_FLIPV .LONG VBOLT2 .WORD 3 .LONG VBOLT3 .WORD 3 .LONG VBOLT1 .WORD FLIPBITS|3,M_FLIPV|M_FLIPH .LONG VBOLT2 .WORD 3 .LONG VBOLT3 .WORD 3 .LONG 0 DOYV1 ;FROM TOP OF SCRN DOWN MOVI -3000H,A0 ;12 MOVE A0,*A8(OYVEL),L SLEEPK 10 MOVI -1000H,A0 ;12 MOVE A0,*A8(OYVEL),L SLEEPK 3 MOVI 5000H,A0 ;12 MOVE A0,*A8(OYVEL),L SLEEPK 15 MOVI 0F000H,A0 ;12 MOVE A0,*A8(OYVEL),L SLEEPK 015H MOVI 016000H,A0 ;12 MOVE A0,*A8(OYVEL),L SLEEPK 0CH MOVI 01C000H,A0 ;12 MOVE A0,*A8(OYVEL),L DIE DOYV MOVI -8000H,A0 ;FROM RIGHT OF SCRN DOWN MOVE A0,*A8(OYVEL),L SLEEPK 15 MOVI -4000H,A0 MOVE A0,*A8(OYVEL),L SLEEPK 15 MOVI 3000H,A0 MOVE A0,*A8(OYVEL),L SLEEPK 15 MOVI 0C000H,A0 MOVE A0,*A8(OYVEL),L SLEEPK 15 MOVI 15000H,A0 MOVE A0,*A8(OYVEL),L DIE DOYVP MOVI 0FFFE7000H,A0 ;FOR HULK JUMPING UP AND OUT OF PIT MOVE A0,*A8(OYVEL),L SLEEPK 18 MOVI 159,A0 MOVE A0,*A8(OZPOS) SLEEPK 7 MOVI 0FFFF6000H,A0 MOVE A0,*A8(OYVEL),L SLEEPK 15 MOVI 08000H,A0 MOVE A0,*A8(OYVEL),L SLEEPK 7 MOVI 0F000H,A0 MOVE A0,*A8(OYVEL),L SLEEPK 7 MOVI 15000H,A0 MOVE A0,*A8(OYVEL),L DIE LHLPS MOVI HELP,A0 CALLA ONESND SLEEP 40 MOVI HELP,A0 CALLA ONESND SLEEP 40 MOVI HELP,A0 CALLA ONESND SLEEP 40 MOVI HELP,A0 CALLA ONESND DIE PHASE1 CLR A1 MOVE A1,*A8(OXVEL),L MOVE A1,*A8(OYVEL),L DEC A9 SLL 5,A9 ADDI PLYROBJS,A9 MOVE *A9,A0,L MOVE *A0(OYPOS),A2 ;A2=Y OF PLYR I HIT MOVE *A0(OXPOS),A1 ;A1=X MOVE *A8(OYPOS),A3 ;A3=THIS HULKS' Y MOVE *A8(OXPOS),A4 ;A4=THIS HULKS' X CMP A3,A2 RETS SPAWN_MISL ;SPAWN MISL MOVI EXCUSE,A0 CALLA ONESND CREATE BOSSPID,SPM RETS SPM SLEEP 50 CALLA FIXEDA CMPI 5,A10 JRNZ SPFZ ADDI [-25,42],A9 ;A8=CHOSEN RECTANGLE INFO ;A9=[Y,X] OF SPOT TO START FROM ;A10=DIRECTION SPFZ MOVI MISL,A2 CALLA GET_WVADDR MOVE *A0(16),A1,W ;DEC WAVE RAM CNT FOR THIS MISL GROUP DEC A1 MOVE A1,*A0(16),W MOVI msllnchsnd,A0 CALLA ONESND CLR A8 movx a9,a8 SRL 16,a9 MOVI 300,A11 SLL 3,A10 ADDI DTBL,A10 MOVB *A10,A10 ;A8=X, A9=Y, A10=Dir, A11=Fuel JAUC missile_firexy ;START ONE MISL ******************************** * Launch slow tough missile against good player (Process) * A9=*Plyr leg obj .DEF SPAWN_MISL_GOOD SPAWN_MISL_GOOD movi 60*4,a0 calla RNDRNG0 addk 30,a0 calla PRCSLP ;Sleep random MOVI EXCUSE,A0 CALLA ONESND SLEEP 60 MOVI msllnchsnd,A0 CALLA ONESND MOVE A9,A7 ;*Plyr MOVE @WORLDTLX+16,A8 ;X MOVE @WORLDTLY+16,A9 ;Y addi 200,a8 addi 260,a9 clr a10 ;Dir movi 500,a11 ;Fuel jauc missile_firexy_slow ;msllnchsnd .word >f290,10,>812C,0 ;Missile launch ;msllnchsnd .word >f290,10,>80b6,0 ;Missile launch msllnchsnd .word >f290,10,>80b9,0 ;Missile launch EXCUSE .word >f9F0,10,>814F,0 ;EXCUSE ME DTBL .BYTE 0,0,0,8,0,16,0,24,0 .EVEN KILL_LY ;A8=MINE LAYER IMAGE TO SMART BOMB ;A9=P1DATA OR P2DATA FOR SCORE UPDATE ;SMART BOMB ENTRY ;ENTER HERE WITH SMART BOMB CREATE0 HSMRT MOVI CLSDEAD,A0 MOVE A0,*A8(OID) MOVE *A8(OPLINK),A0,L MOVI NBLOWME2,A7 CLR A1 CALLA XFERPROC CLR A0 MOVE A0,*A8(OXVEL),L MOVE A0,*A8(OYVEL),L RETS HSMRT MOVE A9,A2 ;A2=P1DATA OR P2DATA MOVI HLKPT,A1 ;AMOUNT OF SCORE FOR MINE LAYER! CALLA SCRADD2 ;DO IT! MOVE *A8(OYPOS),A2 ADDK 20,A2 ;A2=Y OFFSET MOVE A2,*A8(OYPOS) MOVI 300,A0 ;200 MOVE A0,*A8(OZPOS) MOVI XBOOM2,A9 ;BOOM3 CHANGES PALETTE TO EXPLOSION! jauc FRQDELDIE XBOOM2 .LONG XPLD1 .WORD NEWPALET|4 .LONG GRNBOOM .LONG XPLD2 .WORD 4 .LONG XPLD3 .WORD 4 .LONG XPLD4 .WORD 4 .LONG XPLD5 .WORD 4 .LONG XPLD6 .WORD 4 .LONG XPLD7 .WORD 6 .LONG XPLD8 .WORD 6 .LONG XPLD9 .WORD 6 .LONG XPLD10 .WORD 6 .LONG 0 FLAME_LAY ;MINE LAYER HIT BY BULLET MMTM SP,A1,A2,A3,A7,A9,A10 PUSH A0 MOVI HITLAY,A3 CALLA DO_PUNISH PULL A0 JRLT PFT ;KILL MINE LAYER! ;TURN OFF COLLISIONS FOR THIS MINE LAYER ;XFERPROC THIS MINE LAYER TO CODE WHICH TURNS ON SOME FLAMES ;THAT CODE WILL LET IT FLAME FOR AWHILE THEN PUT A FEW EXPLOSIONS ;ON TOP OF IT AND KILL EVERYTHING ;THAT CODE WILL ALSO EXPLODE ALL LAND MINES THIS MINE LAYER HAS LAYED DOWN ;A8=MINE LAYER ; MOVE *A0(OPLINK),A0,L ;PLAYER PROCESS MOVI LAYPT,A1 CALLA SCORE_IT ;SCORES SAME AS FIEND MOVE *A8(OFLAGS),A4 ORI M_NOCOLL,A4 ;NO COLLISIONS MOVE A4,*A8(OFLAGS) MOVE *A8(OPLINK),A0,L MOVI LAY_EXP,A7 CLR A1 CALLA XFERPROC MMFM SP,A1,A2,A3,A7,A9,A10 RETS PFT ;FLASH THIS MINE LAYER MOVI 03F3F0000H,A9 CREATE0 FLASHME MMFM SP,A1,A2,A3,A7,A9,A10 RETS YKIL_RNG ;A8=MINE LAYER IMG PNTR MMTM SP,A1,A2,A7 MOVE *A0(OPLINK),A0,L MOVI P1DATA,A2 MOVE *A0(PNUM),A0 CMPI 1,A0 JREQ J5 MOVI P2DATA,A2 ;A2=P1DATA OR P2DATA J5 MOVI LAYPT,A1 ;AMOUNT OF SCORE CALLA SCRADD2 JRUC CONT YKIL_LAY ;KILL MINE LAYER BECAUSE OF COLLISION WITH RING OR TIME BOMB ;EXTER HERE FROM COLLISION ROUTINE - RINGS KILL MINE LAYER ;A8=MINE LAYER IMG PNTR MMTM SP,A1,A2,A7 MOVE *A0(OPLINK),A0,L MOVI LAYPT,A1 CALLA SCORE_IT CONT MOVE *A8(OFLAGS),A0 ORI M_NOCOLL,A0 MOVE A0,*A8(OFLAGS) MOVE *A8(OPLINK),A0,L MOVI LAY_EXP,A7 ;END OF MINE LAYER DEATH - NO FLAMES CLR A1 CALLA XFERPROC MMFM SP,A1,A2,A7 RETS ; SPAWN_LYR: ;SPAWN TANK IS CALLED FROM 'WAVE OVERLORD' CODE WHICH DISPERSES ;BAD GUYS THROUGHOUT A WAVE MOVE @HALT,A0 JRNZ TANK_OUT MOVE @LYR_CNT,A2 ;MOVE BYTE (# TANKS ON SCRN) TO A2 MOVE @MAXLYR,A3 CMP A3,A2 ;TANKS MAXED OUT? JRGE TANK_OUT ; CREATE LAYPID,ATNK ;START ONE MINE LAYER TANK_OUT: RETS LOCK LOCKUP CLRTNK MOVE A0,*A13(MRAM),L ;CALL FREEOBJ LATER MOVE A0,*A13(KPMRAM),L CLR A0 MOVE A0,*A13(MYPLYR) ;FOR WHEN LAYER KILLS GRUNTS! MOVE A0,*A13(SPDY) MOVE A0,*A13(TOTMN) MOVE A0,*A13(ABSRB) MOVE A0,*A13(CFLAGS) MOVE A0,*A13(SK_DIR) MOVK 25,A0 MOVE A0,*A13(CNTR) MOVE A0,*A13(LAYTMR) RETS STRT_ALAY ;A8=*MINE LAYER MOVI CLSDEAD,A0 MOVE A0,*A8(OID) ; movi LAYPID,a0 ; move a0,*a13(PROCID) move a13,*a8(OPLINK),L MOVI 2*60,B0 ;3 MOVI 18*60,B1 ;12 CALLA RANGRAND CALLA PRCSLP CALLA GETOBJ JRZ LOCK ;NO FREE OBJECT SPACE CALLR CLRTNK ;A9=[Y,X] OF SPOT TO START FROM ;A10=DIRECTION ;8 1 2 ;7 3 ;6 5 4 MOVE *A8(OXPOS),A9 SUBK 15,A9 MOVE *A8(OYVAL),A1,L MOVY A1,A9 MOVE *A8(OIMG),A0,L MOVE *A0(32),A0,L ;DATA ADDR MOVI MTNK6,A1 MOVE *A1(64),A1,L ;DATA ADDR CMP A0,A1 JRZ SG1 MOVI MTNK9,A1 JRUC SG2 SG1 ;LEFT/RGT GUN PIT ;TURN ON GUNNER DUDE MOVI MTNK6,A1 SG2 MOVE A1,*A8(OIMG),L MOVK 5,A10 MOVE *A8(OIMG),A0,L CMPI MTNK9,A0 JRNZ JIN MOVK 7,A10 MOVE *A8(OFLAGS),A0 BTST B_FLIPH,A0 JRZ JIN MOVK 3,A10 JIN MOVK 2,A1 MOVE A1,*A13(LEVEL),W CALLA DELOBJA8 CALLR JINHR ;TURN ON IMG, SET LOCATION, DIRECTION MOVE @LYR_CNT,A0 INC A0 MOVE A0,@LYR_CNT JRUC ATNK2 ATNK: ;YES A NEW MINE LAYER WILL APPEAR ;UPDATE WAVE_INFO RAM TABLE TO REFLECT THIS NEW ENTRY! ;THIS TANK WAS SPAWNED FROM 'WAVE OVERLORD' CODE CALLA GETOBJ JRZ LOCK ;NO FREE OBJECT SPACE CALLR CLRTNK CALLR INIT_TNK ;TURN ON IMG, SET LOCATION, DIRECTION CALLR SETUP_TNK ;INC CNT, SET DIR, SET DEATH FLAG, ETC ATNK2 MOVI 500,A0 CALLA RANDPER JRNC NORED ;RED MINE LAYER MOVK 4,A0 MOVE A0,*A13(LAYTMR) MOVI MTNKP2,A0 ;GRNTB,A0 ;GRNTP ;ALWAYS SOLDIER CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE MOVI HSPEED2,A1 ;TANK SPEED MOVE A0,*A13(SPDY) JRUC ARED NORED MOVI HSPEED,A1 ;TANK SPEED ARED CALLA DO_DIFF2 CLR A0 move A0,*a8(OCONST) MOVE *A13(DIR),A0 CALLA INTO12 CALLR GET_RUN ;GET FIRST FRANIM PNTR FOR ;THIS TANKS DIRECTION ;SELECT A RANDOM PATTERN FOR MINE LAYER ENTERING FROM THIS DIRECTION MOVE *A13(DIR),A0 SLL 5,A0 ADDI PATLST,A0 MOVE *A0,A0,L MOVE @PTMP,A1 INC A1 MOVE A1,@PTMP ANDI 03H,A1 SLL 5,A1 ADD A1,A0 MOVE *A0,A0,L MOVE *A0+,A1,W ;GET FIRST DISTANCE CNT MOVE *A13(SPDY),A3 JRZ NOSPD0 ;SPEEDY MINE LAYER SRL 1,A1 NOSPD0 MOVE A0,*A13(MYPATRN),L MOVE A1,*A13(DIS) ; ; LOOP TOP FOR TANKS ; MOVE A13,A10 CREATE0 ANTENNA MOVE A0,*A13(MYANT),L ;KEEP FOR WHEN MINE LAYER DIES ; MOVI MECH1,A0 ;MECHANICAL ARRIVAL SND ; CALLA ONESND ;BEEP BEEP HORN SND LUP_TP: ;TOP OF TANK LOGIC MOVE @HALT,A0 JRZ TMV SLEEPK 1 JRUC LUP_TP TMV MOVE *A13(CNTR),A3 ANDI 07H,A3 DEC A3 JRNZ TMV3 ;SWAP THIS MINE LAYER OID BETWEEN PLAYER/HELPER AND MINE LAYER MOVK 1,A3 MOVI CLSPLYR|TYPHLPR|SUBLAY,A1 MOVE *A8(OID),A0 ANDI 0FFFFH,A0 CMPI CLSENMY|TYPLAYR,A0 JRZ TMV2 MOVK 3,A3 MOVI CLSENMY|TYPLAYR,A1 TMV2 MOVE A1,*A8(OID) TMV3 MOVE A3,*A13(CNTR) MOVE *A13(CFLAGS),A0 BTST 0,A0 JRZ NOSPN ;THIS TANK IS SPINNING, DO SPIN MOVE *A13(SK_DIR),A1 MOVE *A13(DIR),A0,W CALLR WAY JRC DIT ;INC ;DEC=CLRC CLR A1 ;MOVI 0,A1 MOVE A1,*A13(WAY01) JRUC DIT0 DIT MOVK 1,A1 MOVE A1,*A13(WAY01) DIT0 MOVE A0,*A13(DIR),W CALLR GET_STAND ;DOES ANI OF CORRECT VIEW MOVE *A13(SK_DIR),A1 MOVE *A13(DIR),A0,W CMP A0,A1 JREQ GOODNEWS ;ANI IN NEW STAND/SPIN DIR SLEEPK 4 JRUC LUP_TP GOODNEWS: SLEEPK 20 CALLR GET_RUN ;ZEROS STAND FLAG ALSO MOVE *A13(DIR),A0 CALLA INTO12 ;GET PROPER VELOCITY FOR THIS DIR SLEEPK 1 JRUC LUP_TP NOSPN: MOVE *A13(DIS),A0 ;UPDATE DISTANCE COUNT DEC A0 MOVE A0,*A13(DIS) ;STUFF NEW COUNT JRNZ DOTNK ;BR=CONTINUE CURRENT DIRECTION ;TIME TO GET NEW DISTANCE AND NEW DIRECTION MOVE *A13(MYPATRN),A10,L MOVE *A10+,A11,W ;GET NEW DIRECTION JRZ PATDN ;BR=PATTERN FINISHED CLR A0 MOVE A0,*A8(OXVEL),L MOVE A0,*A8(OYVEL),L SLEEPK 20 MOVE *A10+,A2,W ;GET NEW DIS MOVE *A13(SPDY),A3 JRZ NOSPD ;SPEEDY MINE LAYER SRL 1,A2 NOSPD MOVE A2,*A13(DIS) ;STUFF NEW COUNT MOVE A10,*A13(MYPATRN),L MOVE A11,*A13(SK_DIR) ;TANK WILL SEEK TO A 45 DEGREE ANGLE (1,4,7,10) MOVK 1,A0 ;TANK WILL SPIN TO SK_DIR MOVE A0,*A13(CFLAGS) ;I WILL SPIN! MOR SLEEPK 1 JRUC LUP_TP PATDN ;PATTERN FINISHED ;DELETE ANTENNA, MINE LAYER ;DIE CALLA SCRTST JRNZ NBLOWME ;I AM STILL ON SCRN! CONTINUE IN THIS DIRECTION MOVK 20,A0 MOVE A0,*A13(DIS) JRUC MOR NBLOWME ;I AM OFF SCRN CALLA DELOBJA8 NBLOWME2 ;ENTRY FOR SMART BOMB MOVE *A13(MYANT),A0,L CALLA KILL MOVE *A13(KPANTOBJ),A0,L CALLA DELOBJ MOVE @LYR_CNT,A0 DEC A0 MOVE A0,@LYR_CNT MOVE *A13(KPMRAM),A10,L MOVE *A13(TOTMN),A0 ;FLAG FOR I HAVE ALREADY JRNN EXPEM ;KILLED MY LAND MINES EXP_2_MANY DIE EXPEM MOVK 12,A11 MOVE A10,A9 ND0 DEC A11 JRZ EXP_2_MANY MOVE *A9+,A0,L JRZ NDN CALLA ISOBJ JRZ ND0 MOVE *A0(OIMG),A1,L CMPI M1,A1 ;LAND MINE JRNZ ND0 MOVI DMAWNZ|M_NOCOLL,A1 ;LAND MINE NO COLLIDE ON MOVE A1,*A0(OFLAGS) MOVE A0,A8 MOVI MTING,A0 ;LAND MINE EXPLOSION SND CALLA ONESND CREATE0 KMINE SLEEPK 6 JRUC ND0 NDN MOVE A10,A0 ;MOVE *A13(KPMRAM),A0,L CALLA FREEOBJ DIE KMINE MOVE A8,A10 CREATE0 KM2 CREATE0 KM2 CREATE0 KM2 SLEEPK 4 ;KILL ORIGINAL LAND MINE move a10,a8 jauc DELOBJDIE KM2 MOVI -08000H,B0 MOVI 08000H,B1 CALLA RANGRAND MOVE A0,A6 MOVI -08000H,B0 MOVI 08000H,B1 CALLA RANGRAND MOVE A0,A7 MOVI FIREEXP,A9 MOVE *A8(OXVAL),A0,L MOVE *A8(OYVAL),A1,L ADDI [5,0],A0 ADDI [5,0],A1 MOVI 292,A3 ;241 ;282 MOVI DMAWNZ|M_NOCOLL,A4 ;NON-ZERO VALUE MOVI CLSNEUT|TYPNEUT,A5 MOVI CLD1,A2 CALLA BEGINOBJ2 ;CREATE EXPLOSION, AND THEN DIE jauc FRQDELDIE DOTNK: ;MINE LAYER JUST CRUISING ALONG! ;CHECK FOR WALL BORDERS! MOVE @WAVE,A0 CMPI 22,A0 JRNZ DT2 MOVE *A13(DIR),A0 CMPI 1,A0 JRNZ DT2 MOVE *A8(OYPOS),A0 CMPI 10CH,A0 JRNC DT2 ;TURN ME AROUND CLR A0 MOVE A0,*A8(OYVEL),L MOVK 7,A11 MOVE A11,*A13(SK_DIR) ;TANK WILL SEEK TO A 45 DEGREE ANGLE (1,4,7,10) MOVK 1,A0 ;TANK WILL SPIN TO SK_DIR MOVE A0,*A13(CFLAGS) ;I WILL SPIN! MOVK 30,A0 MOVE A0,*A13(DIS) DT2 MOVE *A13(LAYTMR),A0 DEC A0 MOVE A0,*A13(LAYTMR) JRNZ KS MOVE *A13(TOTMN),A0 JRN KS CMPI 11,A0 JRNC KS2 ;LAY DOWN A LAND MINE INC A0 MOVE A0,*A13(TOTMN) MOVK 7,A0 MOVE A0,*A13(LAYTMR) MOVE *A13(DIS),A0 CMPI 5,A0 ;5 JRC KS CALLR LAYIT KS CLR A1 JSRP FRANIM JRNC LUP_TP ;BR=NOT AT END OF SCRIPT YET CALLR GET_RUN JRUC LUP_TP KS2 MOVI 0FFFFH,A0 ;FLAG FOR MINE LAYER TO KNOW MOVE A0,*A13(TOTMN) ;TO NOT KILL HIS LAND MINES MOVE *A13(KPMRAM),A10,L ;AT DEATH CREATE0 EXPEM JRUC KS BIGBLU .LONG XPLD1 .WORD 4 .LONG XPLD2 .WORD 4 .LONG XPLD3 .WORD 4 .LONG XPLD4 .WORD 4 .LONG XPLD5 .WORD 4 .LONG XPLD6 .WORD 4 .LONG XPLD7 .WORD 4 .LONG XPLD8 .WORD 4 .LONG XPLD9 .WORD 4 .LONG XPLD10 .WORD 4 .LONG 0 ;BIGGRN ; .LONG XPLD1 ; .WORD 4 ; .LONG XPLD2 ; .WORD 4 ; .LONG XPLD3 ; .WORD 4 ; .LONG XPLD4 ; .WORD 4 ; .LONG XPLD5 ; .WORD 4 ; .LONG XPLD6 ; .WORD 4 ; .LONG XPLD7 ; .WORD 4 ; .LONG XPLD8 ; .WORD 4 ; .LONG XPLD9 ; .WORD 4 ; .LONG XPLD10 ; .WORD 4 ; .LONG 0 SENDGRN ;SEND GREEN EXPLOSIONS FROM JEEP ;A8=JEEP ; MOVI ALTEXP4,A0 ; CALLA ONESND MOVK 8,A11 MOVE A8,A10 LE2 CREATE0 KM2B DSJS A11,LE2 DIE BGLSEXP .WORD >FDF8,20,>80DB,0 ;ALT CHAN GLASS SHATTER SENDGRN2 ;SEND GREEN EXPLOSIONS FROM WARP DISC LOCATION ;A8=WARP DISC MOVI BGLSEXP,A0 CALLA ONESNDOVR MOVK 8,A11 MOVE A8,A10 BLE2 CREATE0 KM2C DSJS A11,BLE2 DIE ZKBM2 .LONG 0,0,X1BLU .WORD 293,DMAWNZ+M_NOCOLL,CLSDEAD .LONG 0H,0H ZKBM3 .LONG 0,0,X1GRN .WORD 293,DMAWNZ+M_NOCOLL,CLSDEAD .LONG 0H,0H LAY_EXP ;A8=MINE LAYER IMG ;COVER TIME MOVI AGLSEXP,A0 CALLA ONESND MOVK 8,A11 MOVE A8,A10 LE1 CREATE0 KM2A DSJS A11,LE1 SLEEPK 6 MOVI GLSEXP,A0 CALLA ONESND MOVE A10,A8 JRUC NBLOWME KBM ;ARM RGT .LONG 0,0,T72BLAST1 ;FIRE1 .WORD 293,DMAWNZ+M_FLIPH+M_NOCOLL,CLSDEAD .LONG 0H,0H SAVE1 CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE CALLA STFOBJ ;STUFF OBJECT DATA CALLA INSOBJ ;INSERT OBJECT INTO LIST MOVE A0,A9 ;A8 MOVE *A9(OPAL),A0,L ANDI 0FFFFH,A0 MOVE A0,*A9(OPAL),L MOVE A10,A8 CALLA GETANIXY MOVE A9,A0 MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE RETS KM2B ;TURN ON BURST EXP ;SEND IT OUT AT CORRECT ANGLE ;KILL OFF ;A10=MINE LAYER IMG ;A11=BURST # MOVI ZKBM2,A14 ;DEATH FOR JEEP CALLR SAVE1 ADDI 0500000H,A2 ;Y ; MOVE *A10(OIMG),A7,L ; CMPI JEEP4,A7 ; JRNZ NOTHZ ; ADDI 0340000H,A3 ;X ;NOTHZ CALLA GANISAG MOVE A9,A8 MOVI BIGBLU,A9 JRUC CONTS KM2C ;TURN ON BURST EXP ;SEND IT OUT AT CORRECT ANGLE ;KILL OFF ;A10=WARP DISC ;A11=BURST # MOVI ZKBM3,A14 ;INTRO FOR WARP DISC CALLR SAVE1 ADDI 0200000H,A2 ;Y ADDI 0A0000H,A3 ;X CALLA GANISAG MOVE A9,A8 MOVI BIGBLU,A9 ;GRN,A9 JRUC CONTS KM2A ;TURN ON BURST EXP ;SEND IT OUT AT CORRECT ANGLE ;KILL OFF ;A10=MINE LAYER IMG ;A11=BURST # MOVI KBM,A14 ;BLOOD CALLR SAVE1 SUBI 0F0000H,A2 ;1C CALLA GANISAG MOVE A9,A8 MOVI TBLST,A9 CONTS SLL 5,A11 MOVI XVL,A0 ADD A11,A0 MOVE *A0,A0,L MOVE A0,*A8(OXVEL),L MOVI YVL,A0 ADD A11,A0 MOVE *A0,A0,L MOVE A0,*A8(OYVEL),L ;FROM MINE LAYER DEATH jauc FRQDELDIE XVL .LONG 0,0,14000H,18000H,14000H,0,-14000H,-18000H,-14000H YVL .LONG 0,-16000H,-14000H,0,14000H,16000H,14000H,0,-14000H ;812 ;7 3 ;654 LAYIT ;A8=MINE LAYER MOVE *A13(DIR),A10 MOVE *A8(OXVAL),A0,L MOVE *A8(OYVAL),A1,L SLL 5,A10 ADDI MYX,A10 MOVE *A10,A10,L ADD A10,A1 SLL 16,A10 ADD A10,A0 ;A0 & A1 ARE SET UP MOVI M1,A2 ;DOES NOT MATTER MOVI 69,A3 MOVI DMAWNZ,A4 ;NON-ZERO VALUE MOVI CLSNEUT|TYPMINE,A5 CLR A6 CLR A7 PUSH A8 CALLA BEGINOBJ2 CLR A0 MOVE A0,*A8(OPLINK),L ;PUT THIS IMG PNTR INTO A RAM LIST FOR THIS MINE LAYER MOVE *A13(MRAM),A0,L MOVE A8,*A0+,L CLR A1 MOVE A1,*A0,L ;ZERO NEXT ENTRY MOVE A0,*A13(MRAM),L PULL A8 RETS MYX .LONG 0,[6,10H],0,0,[12H,18H],0,0,[10H,0FH],0,0,[10H,18H],0,0 ; 1 ; 12 2 ; 11 3 ; 10 4 ;MINE LAYER 12 ANGLES ; 9 5 ; 8 6 ; 7 SETUP_TNK: ;UPDATE WAVE RAM CNT FOR TANKS ON THIS WAVE ;SET LEVEL FOR THIS TANK ; ; UPDATE TNK COUNT ; MOVE @LYR_CNT,A0 INC A0 MOVE A0,@LYR_CNT MOVI TANK,A2 CALLA GET_WVADDR MOVE *A0(32),A1,W ;GET DIFFICULTY LEVEL MOVE A1,*A13(LEVEL),W MOVE *A0(16),A1,W ;DEC WAVE RAM CNT FOR THIS TANK DEC A1 MOVE A1,*A0(16),W JRNZ BZ ;END OF THIS WAVES TANK CNT MOVK 1,A1 MOVE A1,@TNK_DN BZ RETS ANTENNA ;A8=MINE LAYER UNDER ANTENNA ;A10=MINE LAYER PROCESS UNDER ME ;TURN ON AN ANTENNA IMAGE OVER MINE LAYER ;SIT ON TOP OF TANK ;ADJUST FOR SPINNING MINE LAYING TANK! MOVE A8,*A13(PDATA),L ;TANK OBJECT PNTR CALLA GETANIXY CLR A6 CLR A7 MOVE A2,A1 MOVE A3,A0 MOVI 160,A3 ;133 MOVI DMAWNZ|M_NOCOLL,A4 MOVI CLSNEUT,A5 MOVI ANT,A2 ;ANTENNA IMG CALLA BEGINOBJ2 MOVE A8,*A10(KPANTOBJ),L ;STORE IN MINE LAYER PROC FOR KILLING MOVE *A8(OPAL),A0,L ANDI 0FFFFH,A0 MOVE A0,*A8(OPAL),L ANTTOP SLEEPK 1 CALLR SIT JRUC ANTTOP ; 1 ; 12 2 ; 11 3 ; 10 4 ;MINE LAYER 12 ANGLES ; 9 5 ; 8 6 ; 7 SIT: MOVE A8,A0 MOVE *A13(PDATA),A8,L ;MINE LAYER IMG PNTR CALLA GETANIXY ;A2=Y,A3=X MOVE *A10(DIR),A4 ;MINE LAYER DIR SLL 5,A4 ADDI ADLST,A4 MOVE *A4,A4,L ADD A4,A2 SLL 16,A4 ADD A4,A3 MOVE *A0(OFLAGS),A4,W CALLA GANISAG ;ADJUSTS TORSO MOVE A0,A8 RETS ;Y,X ADD IN FOR ANTENNA AT DIFFERENT ANGLES ADLST .LONG 0,[-26,2],[-27,-8],[-29,-8],[-31,-2],[-30,-2],[-30,0] .LONG [-28,-6],[-30,-4],[-30,-2],[-32,-2],[-29,4],[-29,-2] WAY: ;SPIN LEFT OR RIGHT ;A1=SEEK DIR ;A0=DIR IMAGE IS FACING NOW ; 1 ; 12 2 ; 11 3 ; 10 4 ;MINE LAYER 12 ANGLES ; 9 5 ; 8 6 ; 7 ;812 ;7 3 ;NORMAL GRUNT ;654 ; 01 ; 16 02 ; 15 03 ; 14 04 ; 13 05 ;16 ANGLE TANK, ETC ; 12 06 ; 11 07 ; 10 08 ; 09 SUB A0,A1 MOVE A1,A2 ABS A1 CMPI 7,A1 ;9;5 JRLT N0 NEG A2 N0: BTST 31,A2 JRZ IC INHERE: DEC A0 JRP TDEC MOVK 12,A0 ;16;8 TDEC CLRC ;MEANS DEC RETS IC: INC A0 ;ROTATE TOWARD PLAYER CMPI 13,A0 ;17;9 JRNE T1 MOVK 1,A0 T1: SETC ;MEANS INC RETS GET_RUN: ;GET FRANIM BASE ADDRESS FOR THIS TANKS DIRECTION ; 1 ; 12 2 ; 11 3 ; 10 4 ; 9 5 ; 8 6 ; 7 MOVE *A13(DIR),A4 DEC A4 SLL 5,A4 ;*32 FOR LONG WORD LOOKUP TABLE ADDI WALK_LIST,A4 ;CALCULATE OFFSET IN TABLE MOVE *A4,A9,L ;MOVE TABLE VALUE INTO A9 ;NEW ANIMATION SCRIPT MOVE *A13(CFLAGS),A0 ANDI 0FFFEH,A0 ; MOVE A0,*A13(CFLAGS) ;ZERO STANDING/SPIN FLAG RETS ; 1 ; 12 2 ; 11 3 ; 10 4 ; 9 5 ; 8 6 ; 7 SPINFRMS: .LONG MTNK12,MTNK11,MTNK10,MTNK9,MTNK8,MTNK7,MTNK6 .LONG MTNK7,MTNK8,MTNK9,MTNK10,MTNK11 TK_SPINFLGS: .WORD DMAWNZ,DMAWNZ+M_FLIPH,DMAWNZ+M_FLIPH,DMAWNZ+M_FLIPH .WORD DMAWNZ+M_FLIPH,DMAWNZ+M_FLIPH,DMAWNZ .WORD DMAWNZ .WORD DMAWNZ,DMAWNZ,DMAWNZ .WORD DMAWNZ GET_STAND: ;ANI ONTO SCREEN THIS TANKS STANDING POSITION MOVE *A13(DIR),A0 ;CURRENT DIR TANK IS FACING DEC A0 ANDI 0FH,A0 MOVE A0,A2 SLL 5,A0 ADDI SPINFRMS,A0 MOVE *A0,A1,L ;NEW OIMG SLL 4,A2 ADDI TK_SPINFLGS,A2 MOVE *A2,A4,W ;NEW OFLAGS CALLA ANI RETS INTOL .LONG 0,60H,0C0H,120H,180H,1E0H,240H,2A0H INIT_TNK: ;TURN ON TANK AT ONE OF THE 8 LOCATIONS HULKS CAN GENERATE FROM ;SET HIS DIR ACCORDINGLY CALLA RANDOM ANDI 07H,A0 ; MOVK 2,A0 ;0=UP,2=RGT,4=LFT,6=DWN SLL 5,A0 ADDI INTOL,A0 MOVE *A0,A0,L MOVE @ENEMY_RECT,A8,L ADD A0,A8 ADDK 16,A8 ;SKIP TYPE OF RELEASE RECTANGLE MOVE *A8+,A10,W ;DIRECTION MOVE *A8+,A0,W MOVE A0,B0 MOVE *A8+,A2 MOVE *A8+,A0 MOVE A0,B1 CALLA RANGRAND MOVE A0,A9 MOVE A2,B0 MOVE *A8,A0 MOVE A0,B1 CALLA RANGRAND SLL 16,A0 MOVY A0,A9 JINHR ;A8=CHOSEN RECTANGLE INFO ;A9=[Y,X] OF SPOT TO START FROM ;A10=DIRECTION ;8 1 2 ;7 3 ;6 5 4 ;NEED ; 1 ; 12 2 ; 11 3 ; 10 4 ; 9 5 ; 8 6 ; 7 SLL 5,A10 MOVI XYOFST,A0 ADD A10,A0 MOVE *A0,A0,L ADD A0,A9 MOVI NEWD,A0 ADD A10,A0 MOVE *A0,A0,L MOVE A0,*A13(DIR) MOVI TIMG,A0 ADD A10,A0 MOVE *A0,A2,L ;IMG TO START WITH MOVI TFLP,A0 ADD A10,A0 MOVE *A0,A4,L ;IMG TO START WITH MOVI 159,A3 ;158 MOVI CLSENMY|TYPLAYR,A5 CLR A6 CLR A7 CLR A1 MOVY A9,A1 SLL 16,A9 MOVE A9,A0 CALLA BEGINOBJ2 RETS XYOFST .LONG 0,[0,25],0,[15,0],0,[0,25],0,[15,0],0 NEWD .LONG 0,1,1,4,4,7,7,10,10,10,10 TIMG .LONG 0,MTNK12,MTNK12,MTNK9,MTNK9,MTNK6,MTNK6,MTNK9,MTNK9,MTNK9 TFLP .LONG 0,DMAWNZ,DMAWNZ,DMAWNZ|M_FLIPH,DMAWNZ|M_FLIPH,DMAWNZ .LONG DMAWNZ,DMAWNZ,DMAWNZ,DMAWNZ ; 1 ; 12 2 ; 11 3 ; 10 4 ; 9 5 ; 8 6 ; 7 WALK_LIST: .LONG TNK01,0,0,TNK04,0,0,TNK07 .LONG 0,0,TNK10,0,0 ; ;TANK ANIMATION TABLES ; TNK01: ;GO UP .LONG MTNK12 .WORD FLIPBITS|05,0 .LONG MTNK12B .WORD 05 .LONG MTNK12 .WORD 05 .LONG MTNK12B .WORD 05 .LONG MTNK12 .WORD 05 .LONG MTNK12B .WORD 05 .LONG MTNK12 .WORD 05 .LONG MTNK12B .WORD 05 .LONG MTNK12 .WORD 05 .LONG MTNK12B .WORD 05 .LONG MTNK12 .WORD 05 .LONG MTNK12B .WORD 05 .LONG 0 TNK04: ;GO RIGHT .LONG MTNK9 .WORD FLIPBITS|05,(M_FLIPH) .LONG MTNK9B .WORD 05 .LONG MTNK9 .WORD 05 .LONG MTNK9B .WORD 05 .LONG MTNK9 .WORD 05 .LONG MTNK9B .WORD 05 .LONG MTNK9 .WORD 05 .LONG MTNK9B .WORD 05 .LONG MTNK9 .WORD 05 .LONG MTNK9B .WORD 05 .LONG MTNK9 .WORD 05 .LONG MTNK9B .WORD 05 .LONG 0 TNK07: ;GO DOWN .LONG MTNK6 .WORD FLIPBITS|05,0 .LONG MTNK6B .WORD 05 .LONG MTNK6 .WORD 05 .LONG MTNK6B .WORD 05 .LONG MTNK6 .WORD 05 .LONG MTNK6B .WORD 05 .LONG MTNK6 .WORD 05 .LONG MTNK6B .WORD 05 .LONG MTNK6 .WORD 05 .LONG MTNK6B .WORD 05 .LONG MTNK6 .WORD 05 .LONG MTNK6B .WORD 05 .LONG 0 TNK10: ;GO LEFT .LONG MTNK9 .WORD FLIPBITS|05,0 .LONG MTNK9B .WORD 05 .LONG MTNK9 .WORD 05 .LONG MTNK9B .WORD 05 .LONG MTNK9 .WORD 05 .LONG MTNK9B .WORD 05 .LONG MTNK9 .WORD 05 .LONG MTNK9B .WORD 05 .LONG MTNK9 .WORD 05 .LONG MTNK9B .WORD 05 .LONG MTNK9 .WORD 05 .LONG MTNK9B .WORD 05 .LONG 0 PATLST ; 1 ; 12 2 ; 11 3 ; 10 4 ;MINE LAYER 12 ANGLES ; 9 5 ; 8 6 ; 7 ; .LONG 0,UPLST,0,0,RGTLST,0,0,DWNLST,0,0,LFTLST,0,0 ; UPLST .LONG UPL1,UPL2,UPL3,UPL4 RGTLST .LONG RGTL1,RGTL2,RGTL3,RGTL4 DWNLST .LONG DWNL1,DWNL2,DWNL3,DWNL4 LFTLST .LONG LFTL1,LFTL2,LFTL3,LFTL4 ;INTO MYPATRN PDATA AREA VARIABLE ;DISTANCE,NEW DIR,DISTANCE,NEW DIR ;NEW DIR=0=TANK HAS FINISHED PATTERN (IS OFF SCRN), DIE OFF UPL1 .WORD 60,4,30,7,12H,10,32H,1,30H,0,0,0 UPL2 .WORD 40,10,30,1,16H,4,60H,0,0,0 UPL3 .WORD 40,4,10,1,38H,0,0,0 UPL4 .WORD 30,10,1AH,1,30,4,30H,1,20H,0,0,0 ; RGTL1 .WORD 84H,0,0,0 ;GO RGT 100, DIE RGTL2 .WORD 55H,7,38H,0,0,0 RGTL3 .WORD 30,1,12H,4,30H,7,12H,10,48H,0,0,0 RGTL4 .WORD 50H,1,30H,0,0,0 ; DWNL1 .WORD 03CH,4,1AH,10,40,7,10H,1,50H,0,0,0 DWNL2 .WORD 68H,0,0,0 ;GO DWN 100, DIE DWNL3 .WORD 50,10,60,0,0,0 DWNL4 .WORD 38,4,45,7,30,10,40,7,10,1,40,10,40H,0,0,0 ; LFTL1 .WORD 84H,0,0,0 ;GO LFT 100, DIE LFTL2 .WORD 60H,4,68H,0,0,0 LFTL3 .WORD 44H,1,2CH,0,0,0 LFTL4 .WORD 20H,7,20,10,40,1,48H,0,0,0 ; .DEF DO_HURRY,SEND_NEUT,SHORT_NOTE .REF CNTDIG1,CNTDIG2,WARP_KIL,RD15FONT,WRLD,STRCNRMO,STRLNRMO .REF PLYRPRCS,STRCNRM,SLOW_DWN .BSS KEEP2,16 .BSS KEEP3,16 .BSS KEEP2L,16 .BSS KEEP3L,16 SHORT_NOTE ;WARPED OR TOOK SHORTCUT TO ORCUS! SLEEP 90 MOVE @PLYROBJS,A9,L JRNZ WS12 MOVE @PLYROBJS+32,A9,L WS12 ;SET OFF SMART BOMB ;A9=PLYR IMG PTR WHO GOT ME CREATE0 SBOMB MOVI P1DATA,A2 move @PLYRPRCS,A0,L JRZ SHADD1 MOVI >50000,A1 ;100,000 PNTS FOR SHORTCUT MOVE @STATUS,A4 CMPI 3,A4 JRNZ SXZ MOVI >25000,A1 ;100,000 PNTS FOR SHORTCUT SXZ CALLA SCRADD2 ; SHADD1 MOVI P2DATA,A2 move @PLYRPRCS+32,A0,L JRZ SHADD2 MOVI >50000,A1 MOVE @STATUS,A4 CMPI 3,A4 JRNZ SXZ2 MOVI >25000,A1 ;100,000 PNTS FOR SHORTCUT SXZ2 CALLA SCRADD2 ; SHADD2 move @PLYRPRCS,A0,L JRZ SHADD3 MOVE @P1DATA+THSTGS,A0 ADDI 100,A0 MOVE A0,@P1DATA+THSTGS MOVE @P1DATA+CASHCNT,A0 ADDI 100,A0 MOVE A0,@P1DATA+CASHCNT MOVE @P1DATA+TFLAGS,A0 ADDI 100,A0 MOVE A0,@P1DATA+TFLAGS MOVK 5,A1 MOVE @STATUS,A2 SUBK 3,A2 JRZ SHD2 MOVK 10,A1 SHD2 MOVE @P1DATA+TKEYS,A0 ADD A1,A0 MOVE A0,@P1DATA+TKEYS SHADD3 move @PLYRPRCS+32,A0,L JRZ SHADD4 MOVE @P2DATA+THSTGS,A0 ADDI 100,A0 MOVE A0,@P2DATA+THSTGS MOVE @P2DATA+CASHCNT,A0 ADDI 100,A0 MOVE A0,@P2DATA+CASHCNT MOVE @P2DATA+TFLAGS,A0 ADDI 100,A0 MOVE A0,@P2DATA+TFLAGS MOVK 5,A1 MOVE @STATUS,A2 SUBK 3,A2 JRZ SHD2A MOVK 10,A1 SHD2A MOVE @P2DATA+TKEYS,A0 ADD A1,A0 MOVE A0,@P2DATA+TKEYS SHADD4 JSRP SHKIN MOVI 3E3EH,A6 MOVI [81,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 MOVI CUT0,A8 JSRP STRCNRMO MOVI JMPSND,A0 CALLA ONESND SLEEPK 10 ; JSRP SHKIN MOVI [115,061],A9 ;SCRN Y/X CLR A0 MOVI 3E3EH,A6 MOVI CUT1,A8 JSRP STRLNRMO MOVI JMPSND,A0 CALLA ONESND SLEEPK 10 ; JSRP SHKIN MOVI [135,061],A9 ;SCRN Y/X CLR A0 MOVI 3E3EH,A6 MOVI CUT2,A8 JSRP STRLNRMO JSRP SHKIN MOVI [135,314],A9 ;SCRN Y/X CLR A0 MOVI 3E3EH,A6 MOVI CUT6,A8 JSRP STRLNRMO MOVI JMPSND,A0 CALLA ONESND SLEEPK 10 JSRP SHKIN MOVI [155,061],A9 ;SCRN Y/X CLR A0 MOVI 3E3EH,A6 MOVI CUT3,A8 JSRP STRLNRMO JSRP SHKIN MOVI [155,314],A9 ;SCRN Y/X CLR A0 MOVI 3E3EH,A6 MOVI CUT6,A8 JSRP STRLNRMO MOVI JMPSND,A0 CALLA ONESND SLEEPK 10 ; JSRP SHKIN MOVI [175,061],A9 ;SCRN Y/X CLR A0 MOVI 3E3EH,A6 MOVI CUT4,A8 JSRP STRLNRMO JSRP SHKIN MOVI [175,314],A9 ;SCRN Y/X CLR A0 MOVI 3E3EH,A6 MOVI CUT6,A8 JSRP STRLNRMO MOVI JMPSND,A0 CALLA ONESND SLEEPK 10 ; JSRP SHKIN MOVI [195,061],A9 ;SCRN Y/X CLR A0 MOVI 3E3EH,A6 MOVI CUT5,A8 JSRP STRLNRMO JSRP SHKIN MOVI [195,328],A9 ;SCRN Y/X CLR A0 MOVI 3E3EH,A6 MOVI CUT7,A8 JSRP STRLNRMO MOVI JMPSND,A0 CALLA ONESND SLEEP 2*60 ;+40 .REF FLYERS CREATE0 FLYERS SLEEP 5*60 MOVI CLSNEUT|TYPTEXT|SUBTXT,A0 CLR A1 NOT A1 CALLA KILOBJ MOVI COLRPID,A0 CALLA KIL1C RETP SHKIN SLEEPK 1 MOVE @SHK_ON,A0 JRNZ SHKIN RETP .DEF WEASEL_NOTE ;TOOK WEASEL WARP WEASEL_NOTE SLEEP 90 MOVE @PLYROBJS,A9,L JRNZ WS1 MOVE @PLYROBJS+32,A9,L WS1 ;SET OFF SMART BOMB ;A9=PLYR IMG PTR WHO GOT ME CREATE0 SBOMB MOVI P1DATA,A2 move @PLYRPRCS,A0,L JRZ WSHADD1 MOVI >40000,A1 ;100,000 PNTS FOR SHORTCUT MOVE @STATUS,A4 CMPI 3,A4 JRNZ WSXZ MOVI >20000,A1 ;100,000 PNTS FOR SHORTCUT WSXZ CALLA SCRADD2 ; WSHADD1 MOVI P2DATA,A2 move @PLYRPRCS+32,A0,L JRZ WSHADD2 MOVI >40000,A1 MOVE @STATUS,A4 CMPI 3,A4 JRNZ WSXZ2 MOVI >20000,A1 ;100,000 PNTS FOR SHORTCUT WSXZ2 CALLA SCRADD2 ; WSHADD2 move @PLYRPRCS,A0,L JRZ WSHADD3 MOVE @P1DATA+THSTGS,A0 ADDI 50,A0 MOVE A0,@P1DATA+THSTGS MOVE @P1DATA+CASHCNT,A0 ADDI 50,A0 MOVE A0,@P1DATA+CASHCNT MOVE @P1DATA+TFLAGS,A0 ADDI 50,A0 MOVE A0,@P1DATA+TFLAGS MOVK 5,A1 MOVE @STATUS,A2 SUBK 3,A2 JRZ WSHD2 MOVK 10,A1 WSHD2 MOVE @P1DATA+TKEYS,A0 ADD A1,A0 MOVE A0,@P1DATA+TKEYS WSHADD3 move @PLYRPRCS+32,A0,L JRZ WSHADD4 MOVE @P2DATA+THSTGS,A0 ADDI 50,A0 MOVE A0,@P2DATA+THSTGS MOVE @P2DATA+CASHCNT,A0 ADDI 50,A0 MOVE A0,@P2DATA+CASHCNT MOVE @P2DATA+TFLAGS,A0 ADDI 50,A0 MOVE A0,@P2DATA+TFLAGS MOVK 5,A1 MOVE @STATUS,A2 SUBK 3,A2 JRZ WSHD2A MOVK 10,A1 WSHD2A MOVE @P2DATA+TKEYS,A0 ADD A1,A0 MOVE A0,@P2DATA+TKEYS WSHADD4 JSRP SHKIN MOVI 3E3EH,A6 MOVI [81,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 MOVI WCUT0,A8 JSRP STRCNRMO MOVI JMPSND,A0 CALLA ONESND SLEEPK 10 ; JSRP SHKIN MOVI [115,061],A9 ;SCRN Y/X CLR A0 MOVI 3E3EH,A6 MOVI WCUT1,A8 JSRP STRLNRMO MOVI JMPSND,A0 CALLA ONESND SLEEPK 10 ; JSRP SHKIN MOVI [135,061],A9 ;SCRN Y/X CLR A0 MOVI 3E3EH,A6 MOVI WCUT2,A8 JSRP STRLNRMO JSRP SHKIN MOVI [135,315+8],A9 ;SCRN Y/X CLR A0 MOVI 3E3EH,A6 MOVI WCUT6,A8 JSRP STRLNRMO MOVI JMPSND,A0 CALLA ONESND SLEEPK 10 ; JSRP SHKIN MOVI [155,061],A9 ;SCRN Y/X CLR A0 MOVI 3E3EH,A6 MOVI WCUT3,A8 JSRP STRLNRMO JSRP SHKIN MOVI [155,315+8],A9 ;SCRN Y/X CLR A0 MOVI 3E3EH,A6 MOVI WCUT6,A8 JSRP STRLNRMO MOVI JMPSND,A0 CALLA ONESND SLEEPK 10 ; JSRP SHKIN MOVI [175,061],A9 ;SCRN Y/X CLR A0 MOVI 3E3EH,A6 MOVI WCUT4,A8 JSRP STRLNRMO JSRP SHKIN MOVI [175,315+8],A9 ;SCRN Y/X CLR A0 MOVI 3E3EH,A6 MOVI WCUT6,A8 JSRP STRLNRMO MOVI JMPSND,A0 CALLA ONESND SLEEPK 10 ; JSRP SHKIN MOVI [195,061],A9 ;SCRN Y/X CLR A0 MOVI 3E3EH,A6 MOVI WCUT5,A8 JSRP STRLNRMO JSRP SHKIN MOVI [195,323+6],A9 ;SCRN Y/X CLR A0 MOVI 3E3EH,A6 MOVI WCUT7,A8 JSRP STRLNRMO MOVI JMPSND,A0 CALLA ONESND SLEEP 2*60 ;+40 .REF FLYERS CREATE0 FLYERS SLEEP 5*60 MOVI CLSNEUT|TYPTEXT|SUBTXT,A0 CLR A1 NOT A1 CALLA KILOBJ MOVI COLRPID,A0 CALLA KIL1C RETP DO_HURRY SLEEP 20*60 DOH1 SLEEPK 2 MOVE @SHK_ON,A0 JRNZ DOH1 MOVE @WORLDTLY,A2,L CMPI [127EH,0],A2 JANZ SUCIDE MOVE @HALT,A0 JRNZ DO_HURRY CALLR SEND_NEUT JRUC DOH1 SEND_NEUT MOVE @CNTDIG1,A0 MOVE @CNTDIG2,A1 OR A0,A1 MOVE A1,A1 JRNZ NODLY2 MOVE @SLOW_DWN,A0 INC A0 MOVE A0,@SLOW_DWN CMPI 190,A0 JRNZ SNW1 CREATE FUTUREPID,HURRY RETS SNW1 CMPI 280,A0 JRLO PAUSE2X2 ;PLAYER HAS DILLY DALLIED, SEND A BOMB DOWN AT HIM MOVI yousuck,A0 CALLA ONESND MOVE @PLYRPRCS,A0,L JRZ NODLY MOVE *A0(DEAD),A7 JRNZ NODLY MOVE *A0(DELYDET),A7 JRNZ NODLY MOVE A0,A7 CLR A2 CALLA WARP_KIL NODLY MOVE @PLYRPRCS+32,A0,L JRZ NODLY2 MOVE *A0(DEAD),A7 JRNZ NODLY2 MOVE *A0(DELYDET),A7 JRNZ NODLY2 MOVE A0,A7 CLR A2 CALLA WARP_KIL NODLY2 CLR A0 MOVE A0,@SLOW_DWN PAUSE2X2 RETS SLD CLR A0 MOVE A0,@SLOW_DWN DIE .DEF LEAVE LEAVE ;LEAVE THIS AREA MOVE @HALT,A0 JANZ SUCIDE MOVK 5,A0 MOVE A0,@KEEP3L MOVI TXTSND1,A0 CALLA ONESND LTOP0 MOVK 19,A0 MOVE A0,@KEEP2L MOVI JMPSND,A0 CALLA ONESND LTOP MOVE @HALT,A0 JANZ SUCIDE MOVI 0C0CH,A6 MOVI [69,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 MOVI EXITAREA,A8 JSRP STRCNRM SLEEPK 1 MOVE @KEEP2L,A0 DEC A0 MOVE A0,@KEEP2L JRNN LTOP SLEEPK 10 MOVE @KEEP3L,A0 DEC A0 MOVE A0,@KEEP3L JRNN LTOP0 MOVI TXTSND2,A0 CALLA ONESND DIE HURRY MOVE @HALT,A0 JRNZ SLD MOVK 7,A0 MOVE A0,@KEEP3 MOVI TXTSND1,A0 CALLA ONESND TOP0 MOVK 19,A0 MOVE A0,@KEEP2 MOVI JMPSND,A0 CALLA ONESND TOP MOVE @HALT,A0 JRNZ SLD MOVI 0C0CH,A6 MOVI [80,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 MOVI HURY,A8 JSRP STRCNRM SLEEPK 1 MOVE @KEEP2,A0 DEC A0 MOVE A0,@KEEP2 JRNN TOP SLEEPK 10 MOVE @KEEP3,A0 DEC A0 MOVE A0,@KEEP3 JRNN TOP0 MOVI TXTSND2,A0 CALLA ONESND DIE TXTSND1 .WORD >F3F7,>8,>80AE,0 TXTSND2 .WORD >F3F7,>8,>80B1,0 JMPSND .WORD >F48E,>18,>813D,0 ;FIEND JUMP SND yousuck .word >f9a0,10,>80c5,0 ;You suck at this game! HURY .BYTE "HURRY UP!",0 EXITAREA .BYTE "EXIT THIS AREA!",0 CUT0 .BYTE "ORCUS WARP BONUS",0 CUT1 .BYTE "POINTS AWARDED 50,000",0 CUT2 .BYTE "HOSTAGES",0 CUT3 .BYTE "FLAGS",0 CUT4 .BYTE "GEMS",0 CUT5 .BYTE "KEYS",0 CUT6 .BYTE "100",0 CUT7 .BYTE "10",0 WCUT0 .BYTE "WEASEL WARP BONUS",0 WCUT1 .BYTE "POINTS AWARDED 40,000",0 WCUT2 .BYTE "HOSTAGES",0 WCUT3 .BYTE "FLAGS",0 WCUT4 .BYTE "GEMS",0 WCUT5 .BYTE "KEYS",0 WCUT6 .BYTE "50",0 WCUT7 .BYTE "10",0 HSURE1 .BYTE "BOMBS SHOULD BE",0 HSURE2 .BYTE "USED TO BLOW UP",0 HSURE3 .BYTE "BIG STUFF LIKE",0 HSURE4 .BYTE "TRUCKS AND TANKS.",0 HSURE5 .BYTE "BOMBS ALSO BLOW",0 HSURE6 .BYTE "UP LAND MINES AND",0 HSURE7 .BYTE "BARRELS. YOU ALSO",0 HSURE8 .BYTE "BECOME INVULNERABLE",0 HSURE9 .BYTE "FOR 1 SECOND AFTER",0 HSURE10 .BYTE "DROPPING A BOMB.",0 KSURE1 .BYTE "COLLECTING 220 KEYS",0 KSURE1B .BYTE "COLLECTING 200 KEYS",0 KSURE2 .BYTE "ALLOWS ENTRY INTO",0 KSURE3 .BYTE "THE PLEASURE DOMES",0 KSURE4 .BYTE "AT THE END OF THE",0 KSURE5 .BYTE "GAME. KEYS ALSO",0 KSURE6 .BYTE "OPEN UP SECRET PATHS",0 KSURE7 .BYTE "HIDDEN IN THE GAME!",0 WSURE1 .BYTE "INSTANT WARPS APPEAR",0 WSURE2 .BYTE "THROUGHOUT THE GAME.",0 WSURE3 .BYTE "THEY WILL WARP YOU",0 WSURE4 .BYTE "TO A NEW AREA AND A",0 WSURE5 .BYTE "FREE MAN. AFTER YOU",0 WSURE6 .BYTE "CLEAR THAT AREA, YOU",0 WSURE7 .BYTE "WILL WARP RIGHT BACK",0 WSURE8 .BYTE "TO WHERE YOU STARTED.",0 SURE1 .BYTE "PASSWORDS ARE FOUND",0 SURE2 .BYTE "THROUGHOUT THE GAME.",0 SURE3 .BYTE "DO YOU HAVE ONE?",0 SURE4 .BYTE "NO",0 SURE5 .BYTE "YES",0 .EVEN BRGHT .EQU >0C0C ;GREEN IN SCOREPAL COLORS .EQU >2525 ;WHITE IN SCOREPAL COLORA .EQU >3E3E ;COLOR CYCLE IN SCOREPAL SCRNTOP .EQU 100 .REF OWINDOW,CWINDOW,RD7FONT,CYCSPECT,OBJPTR,BEEP1,P1CTRL,P2CTRL .REF sleep_var,INEXP .DEF R_U_SURE,BMB_HELP,KEY_HELP BMB_HELP2 SLEEP 180 BMB_HELP MOVE @WORLDTLY+16,A0 CMPI 11A0H-60,A0 JALT SUCIDE SLEEPK 1 MOVI BMBPID,A0 CLR A1 NOT A1 CALLA EXISTP * Z BIT SET = NO MATCH, A0 = 0 JRZ BMB_HELP MOVE @WORLDTLY+16,A0 CMPI 11A0H-60,A0 JALT SUCIDE MOVE @PLYRPRCS,A0,L JRZ BMH1 MOVE *A0(DEAD),A0 JRNZ BMB_HELP2 BMH1 MOVE @PLYRPRCS+32,A0,L JRZ BMH2 MOVE *A0(DEAD),A0 JRNZ BMB_HELP2 BMH2 SLEEPK 1 MOVE @SHK_ON,A0 JRNZ BMH2 MOVI CLSNEUT|TYPTEXT|SUBTXT,A0 CLR A1 NOT A1 CALLA EXISTOBJ JRNZ BMH2 MOVE @WFLG,A0 JRNZ BMH2 SLEEPK 10 XBMH2 SLEEPK 1 MOVE @SHK_ON,A0 JRNZ XBMH2 MOVI CLSNEUT|TYPTEXT|SUBTXT,A0 CLR A1 NOT A1 CALLA EXISTOBJ JRNZ XBMH2 MOVE @WFLG,A0 JRNZ XBMH2 MOVI HELPPID,A0 CLR A1 NOT A1 CALLA EXISTP JRNZ XBMH2 MOVI HELPPID,A0 MOVE A0,*A13(PROCID) .REF SLIDEIN MOVI SLIDEIN,A0 CALLA ONESND MOVK 1,A0 MOVE A0,@HALT MOVI [41+SCRNTOP,200],A10 MOVI >00860093,A8 JSRP OWINDOW ;OPEN THE WINDOW MOVE A8,@OBJPTR,L MOVI [0100-18,0200],A9 ;SCRN Y/X MOVI HSURE1,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 MOVI RD7FONT,A11 ;BIG OLD LETTERS MOVI [0,1],A10 ;ONE SPACE BETWEEN LETTERS JSRP STRCNRMO ;OUTPUT "PRESS START" OR "INSERT COIN" MOVI [0112-18,0200],A9 ;SCRN Y/X MOVI HSURE2,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 JSRP STRCNRMO ;OUTPUT "PRESS START" OR "INSERT COIN" MOVI [0124-18,0200],A9 ;SCRN Y/X MOVI HSURE3,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 JSRP STRCNRMO ;OUTPUT "PRESS START" OR "INSERT COIN" MOVI [0136-18,0200],A9 ;SCRN Y/X MOVI HSURE4,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 ;BRIGHT COLOR JSRP STRCNRMO MOVI [0148-18,0200],A9 ;SCRN Y/X MOVI HSURE5,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 JSRP STRCNRMO MOVI [0160-18,0200],A9 ;SCRN Y/X MOVI HSURE6,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 JSRP STRCNRMO MOVI [0172-18,0200],A9 ;SCRN Y/X MOVI HSURE7,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 JSRP STRCNRMO MOVI [0184-18,0200],A9 ;SCRN Y/X MOVI HSURE8,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 JSRP STRCNRMO MOVI [0196-18,0200],A9 ;SCRN Y/X MOVI HSURE9,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 JSRP STRCNRMO MOVI [0208-18,0200],A9 ;SCRN Y/X MOVI HSURE10,A8 BMBOUT MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 JSRP STRCNRMO MOVI 60*9+30,a0 CALLA sleep_var * TIME IS UP! MOVI CLSNEUT|TYPTEXT|SUBTXT,A0 CLR A1 NOT A1 CALLA KILOBJ MOVI SLIDEIN,A0 CALLA ONESND MOVE @OBJPTR,A8,L JSRP CWINDOW CLR A0 MOVE A0,@HALT DIE WARP_HELP .DEF WARP_HELP SLEEP 270 WBMH2 SLEEPK 1 MOVE @SHK_ON,A0 JRNZ WBMH2 MOVI CLSNEUT|TYPTEXT|SUBTXT,A0 CLR A1 NOT A1 CALLA EXISTOBJ JRNZ WBMH2 MOVE @WFLG,A0 JRNZ WBMH2 SLEEPK 10 WKBMH2 SLEEPK 1 MOVE @SHK_ON,A0 JRNZ WKBMH2 MOVI CLSNEUT|TYPTEXT|SUBTXT,A0 CLR A1 NOT A1 CALLA EXISTOBJ JRNZ WKBMH2 MOVE @WFLG,A0 JRNZ WBMH2 MOVI HELPPID,A0 CLR A1 NOT A1 CALLA EXISTP JRNZ WBMH2 MOVI HELPPID,A0 MOVE A0,*A13(PROCID) MOVI SLIDEIN,A0 CALLA ONESND MOVK 1,A0 MOVE A0,@HALT MOVI [41+SCRNTOP,200],A10 MOVI >0070009D,A8 JSRP OWINDOW ;OPEN THE WINDOW MOVE A8,@OBJPTR,L MOVI [0100-6,0200],A9 ;SCRN Y/X MOVI WSURE1,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 MOVI RD7FONT,A11 ;BIG OLD LETTERS MOVI [0,1],A10 ;ONE SPACE BETWEEN LETTERS JSRP STRCNRMO ;OUTPUT "PRESS START" OR "INSERT COIN" MOVI [0112-6,0200],A9 ;SCRN Y/X MOVI WSURE2,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 JSRP STRCNRMO ;OUTPUT "PRESS START" OR "INSERT COIN" MOVI [0124-6,0200],A9 ;SCRN Y/X MOVI WSURE3,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 JSRP STRCNRMO ;OUTPUT "PRESS START" OR "INSERT COIN" MOVI [0136-6,0200],A9 ;SCRN Y/X MOVI WSURE4,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 ;BRIGHT COLOR JSRP STRCNRMO MOVI [0148-6,0200],A9 ;SCRN Y/X MOVI WSURE5,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 JSRP STRCNRMO MOVI [0160-6,0200],A9 ;SCRN Y/X MOVI WSURE6,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 JSRP STRCNRMO MOVI [0172-6,0200],A9 ;SCRN Y/X MOVI WSURE7,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 JSRP STRCNRMO MOVI [0184-6,0200],A9 ;SCRN Y/X MOVI WSURE8,A8 JRUC BMBOUT KEY_HELP SLEEPK 2 MOVE @P1DATA+TKEYS,A0 MOVE @P2DATA+TKEYS,A1 OR A0,A1 JRZ KEY_HELP CMPI 4,A1 JAGE SUCIDE KBMH2 SLEEPK 1 MOVE @SHK_ON,A0 JRNZ KBMH2 MOVI CLSNEUT|TYPTEXT|SUBTXT,A0 CLR A1 NOT A1 CALLA EXISTOBJ JRNZ KBMH2 MOVE @WFLG,A0 JRNZ KBMH2 SLEEPK 10 XKBMH2 SLEEPK 1 MOVE @SHK_ON,A0 JRNZ XKBMH2 MOVI CLSNEUT|TYPTEXT|SUBTXT,A0 CLR A1 NOT A1 CALLA EXISTOBJ JRNZ XKBMH2 MOVE @WFLG,A0 JRNZ KBMH2 MOVI HELPPID,A0 CLR A1 NOT A1 CALLA EXISTP JRNZ KBMH2 MOVI HELPPID,A0 MOVE A0,*A13(PROCID) MOVI SLIDEIN,A0 CALLA ONESND MOVK 1,A0 MOVE A0,@HALT MOVI [41+SCRNTOP,200],A10 MOVI >00660093,A8 JSRP OWINDOW ;OPEN THE WINDOW MOVE A8,@OBJPTR,L MOVI [0100,0200],A9 ;SCRN Y/X MOVI KSURE1,A8 move @SWITCH+>30,a7 btst 7,a7 jrnz abl2500 ;BR=220 KEYS MOVI KSURE1B,A8 abl2500 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 MOVI RD7FONT,A11 ;BIG OLD LETTERS MOVI [0,1],A10 ;ONE SPACE BETWEEN LETTERS JSRP STRCNRMO ;OUTPUT "PRESS START" OR "INSERT COIN" MOVI [0112,0200],A9 ;SCRN Y/X MOVI KSURE2,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 JSRP STRCNRMO ;OUTPUT "PRESS START" OR "INSERT COIN" MOVI [0124,0200],A9 ;SCRN Y/X MOVI KSURE3,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 JSRP STRCNRMO ;OUTPUT "PRESS START" OR "INSERT COIN" MOVI [0136,0200],A9 ;SCRN Y/X MOVI KSURE4,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 ;BRIGHT COLOR JSRP STRCNRMO MOVI [0148,0200],A9 ;SCRN Y/X MOVI KSURE5,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 JSRP STRCNRMO MOVI [0160,0200],A9 ;SCRN Y/X MOVI KSURE6,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 JSRP STRCNRMO MOVI [0172,0200],A9 ;SCRN Y/X MOVI KSURE7,A8 JRUC BMBOUT R_U_SURE MOVE A9,@TEMP,L MOVI COLRPID,A0 CALLA KIL1C CREATE COLRPID,CYCSPECT ;START COLOR CYCLE PROCESS MOVI [41+SCRNTOP,200],A10 SLEEPK 32 MOVK 1,A0 MOVE A0,@HALT MOVI SLIDEIN,A0 CALLA ONESND MOVI >00660093,A8 JSRP OWINDOW ;OPEN THE WINDOW MOVE A8,@OBJPTR,L MOVI [097,0200],A9 ;SCRN Y/X MOVI SURE1,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORA,A6 ;BRIGHT COLOR MOVI RD7FONT,A11 ;BIG OLD LETTERS MOVI [0,1],A10 ;ONE SPACE BETWEEN LETTERS JSRP STRCNRMO ;OUTPUT "PRESS START" OR "INSERT COIN" MOVI [0110-3,0200],A9 ;SCRN Y/X MOVI SURE2,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORA,A6 ;BRIGHT COLOR JSRP STRCNRMO ;OUTPUT "PRESS START" OR "INSERT COIN" MOVI [0125-3,0200],A9 ;SCRN Y/X MOVI SURE3,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORA,A6 ;BRIGHT COLOR JSRP STRCNRMO ;OUTPUT "PRESS START" OR "INSERT COIN" MOVI [0141-1,0220],A9 ;SCRN Y/X MOVI SURE4,A8 MOVI RD15FONT,A11 ;BIG OLD LETTERS MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 ;BRIGHT COLOR JSRP STRCNRMO MOVI [0165,0220],A9 ;SCRN Y/X MOVI SURE5,A8 MOVK 1,A0 MOVE A0,@LOWZ CLR A0 MOVI COLORS,A6 JSRP STRCNRMO * TIME IS UP! MOVI [160,0],A0 MOVI [136-3,0],A1 MOVI RGTARRW,A2 MOVI >7FFE,A3 MOVI DMAWNZ|M_NOCOLL,A4 MOVI CLSNEUT|TYPTEXT|SUBTXT,A5 CLR A6 CLR A7 CALLA BEGINOBJ MOVE @TEMP,A9,L MOVI BEEP1,A0 CALLA ONESND MOVI 10*60,A10 CLR A11 ARWTOP SLEEPK 1 DEC A10 JRN SELECT CALLR GETJ JRNZ SELECT ANDI 0FH,A2 JRNZ A_MV ; STICK IS NOT BEING TOUCHED JRUC ARWTOP GETJ MOVE *A9(OPLINK),A0,L MOVE *A0(PNUM),A0 CMPI 1,A0 JRNZ GETJ2 MOVE @SWITCH,A2 ;MOVE PLAYER SWITCHES TO A5 (32 BIT PORT) NOT A2 move @SWITCH+16,a1 ;Chk for impatience not a1 BTST 2,A1 RETS GETJ2 MOVE @SWITCH,A2 ;MOVE PLAYER SWITCHES TO A5 (32 BIT PORT) NOT A2 SRL 8,A2 move @SWITCH+16,a1 ;Chk for impatience not a1 BTST 5,A1 RETS A_MV: BTST BMPDOWN,A2 JRZ PLYR_UP ;MOVE DOWN TO YES MOVE A11,A11 JRNZ ARWTOP AMC MOVE *A8(OYPOS),A1 MOVE @WORLDTLY+16,A0 SUB A0,A1 CMPI 133,A1 JRZ AMC1 MOVI 133,A1 ADD A0,A1 JRUC AMC2 AMC1 MOVI 133+18H,A1 ADD A0,A1 AMC2 MOVE A1,*A8(OYPOS) XORI 1,A11 MOVI BEEP1,A0 CALLA ONESND JRUC ARWTOP PLYR_UP: BTST BMPUP,A2 JRZ ARWTOP MOVE A11,A11 JRZ ARWTOP ;MOVE UP TO NO JRUC AMC SELECT MOVI CLSNEUT|TYPTEXT|SUBTXT,A0 CLR A1 NOT A1 CALLA KILOBJ MOVI SLIDEIN,A0 CALLA ONESND MOVE @OBJPTR,A8,L MOVE A11,@TEMP MOVE A9,-*A12,L JSRP CWINDOW MOVE *A12+,A9,L MOVE @TEMP,A11 CLR A0 MOVE A0,@HALT RETP .END