;WHAT IF CRUISE MISSILIES ARE COMING DURING SECRET PATH ENTER? ************************************************************** * * Software: Mark Turmell * Initiated: 9/1/90 * * Modified: ! * * COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC. * *.Last mod - 12/13/91 20:05 ************************************************************** .TITLE 'MINE.ASM' .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\gsp.inc" .INCLUDE "\VIDEO\SYS\MACROS.HDR" ;MACROS DEFINITIONS .INCLUDE "IMGTBL.GLO" .INCLUDE "BGNDTBL.GLO" ;BACKGROUND EQUATES .INCLUDE "GAME.EQU" .include "audit.equ" ;SOUNDS .REF ALTEXP3,THNKU,WOO2,EXP2,EXP2HI,SETDWN,ALTEXP5,SALTXP4 .REF CRSSND,TRGTSND,SCASH3,SQUISH,MTING .REF WRPSND,ONESNDOVR ;SYMBOLS EXTERNALLY DEFINED .REF HSTGS_LOST,HSTGSET,RNDRNG0,LHLPS,BLAKOUT,RESTUFF_AUTOERASE .REF BONE,HZSPD,WNDWON,RUNIN,SHLD1,SHLD2,GAMSTATE,RINGS .REF DOSWAP,JFLAMES,DO_NEUTS,timerp1,timerp2 .REF CYCLE_TABLE,FRANIM,FRANIMQ .ref PLYROBJS,P1DATA,P2DATA,RANGRAND,CIRCL_FLG .REF RANDPER,TARGET_NUM,ONARRW,TARGET,ARWOFF,OBJON,OBJOFF,OUT_FLG .REF XYSEEK2,SCRADD2,IP,DO_ALL_STUFF,FLASHME,CHUNK_OBJ,EN_CURRENT .REF SCRTST,HULK_DN,SENDH_GROUP,FIEND,GETADIR2,XYSKOBJ,DOLORD .REF GET_VALID_XY,STATUS,WAVE,CHK_BULL,BOOM3,PCNT .REF SBOMB,SQUARES,SQR_FLG,KILBGND,BGND_UD1,CRT_AHMD,PCTOT,XOUT0 .REF SCORE_FLAG,IRQSKYE,BAKMODS,OFFSCRN,CLNPAL,AFTR_WRP .REF FB_FADEOUT,FADEOUT,FB_FADEIN,SETC2,FADEIN,ZONE_TXT2,COLCYC .REF BCURRENT,RECT1,ENEMY_RECT,CURRENT,JOY_UPDATE,P1CTRL,P2CTRL .REF BRECT1,ENRECT1,ERECT1,STRT_G,PLYRPRCS,SCRIPTPLAY .REF ICN3,ICLIST,SEND_ICON,SHOTKILL,CKFORY,ENRECT5,ERECT5,ICONS_DN .REF SEND_GROUP,JUMPER,RANDOM,T72PNTR,GETCPNT,PCINFO,ICN1 .REF HALT,LASTPC,BOOMS .ref aud_addnumplyrs ;SYMBOLS DEFINED IN THIS FILE .DEF BLSTS2A,INEXP .DEF AIRRECT2A,AIRBRECT2 .DEF HSTGLST,HSTGLST2,DELZ10,SHIFTLM .DEF ANI_HSTG,TNTIT .DEF EXPMINE,TBOMB,KILL_GATE,DROPBMB,TAKEEL,INHERE,CRATEMAN,FRAIT .DEF SHAKER,BMLM2,GOT_HSTG,KILL_CRT,BLOW_RCTR,KEEPIT,KILL_CRT2 .DEF O_MINE,SPATH,XBOOM2,TBOMBD,CRSRAM,EXPMINE2,FIREEXP,BSTART .DEF SRECT1,BSRECT1,CTOTAL,BLSTS2,PIT2,BLUEEXP,XBOOMS,COLTAB .DEF FADE_STRT,CK_GOOB,SHK_ON,BRLO,KILL_CRT3,CYCLEON,ELECT_MINE .DEF TBOMBD2,SLM,DO_GOOJ,CYCLIFE .DEF DOSHIFT2,DOSHIFT,JDOSHIFT,ATME ; .IF DEBUG .DEF DOATP,DO5 ; .ENDIF ;UNINITIALIZED RAM DEFINITIONS .BSS INEXP,16 .BSS RAMLST,32*6 ;LIST OF OBJECTS TO DELETE NEAR GATES .BSS RAMXY,32*21 .BSS PALTMP,16*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM .BSS CRSRAM,32 .BSS CTOTAL,16 .BSS TARG1,32 .BSS TARG2,32 .BSS KEEPT,32 .BSS SCNTR,16 .BSS KEEPIT,32 ; .BSS BOLTL,64 ; .BSS BOLTR,64 ; .BSS BOLTBT,64 .BSS AMP,16 .BSS AMPCNT,16 .BSS XSET,16 .BSS YSET,16 .BSS SHK_ON,16 .BSS KEEPXY,32 .BSS TMP,16 .BSS CYCLIFE,16 ;EQUATES FIRST ORIGINATED IN THIS FILE MISLPUN .EQU 12 ;TANK/SHRAPNEL BULLET DATA STRUCTURE BNCS .EQU PDATA ;UHW LAST .EQU PDATA+16 ;UHW FDLY .EQU PDATA+32 ;UHW FRANIM DELAY ;MYPLYR .EQU PDATA+48 MYLIST .EQU PDATA+64 ;UHL FRANIM LIST FOR THIS PC UPON DEATH ;SAME AS IN ARAB.ASM MYSND .EQU PDATA+96 ;UHL SOUND HEADER FOR GOO TYP DEATH ;SAM AS IN ARAB.ASM BLAGE .EQU PDATA+128 ;UHW AGE OF BULLET FXOR .EQU PDATA+144 ;UHW SLPTIME .EQU PDATA ;UHW ; ;CRATE PDATA AREA ; HITS .EQU PDATA ;UHW CRATE HITS SHKIN .EQU PDATA+16 ;SHAKE FLAG ; ;TBOMB PDATA AREA KEEPY .EQU PDATA ;UHW Y LINE OF WHAT CRUISE WILL KILL SHKFLG .EQU PDATA+16 ;UHW IF 0 WHEN TBOMB EXPLODES - SHAKE SCRN .TEXT ATME ;MINES COME AT ME MOVE @WORLDTLX+16,A0 CMPI 580H,A0 JANC SUCIDE CALLR ATMENOW SLEEP 60 CALLR DOSHIFT2 JRUC ATME ATMENOW MOVI OBJLST,A2,L TOBP: MOVE *A2,A2,L ;GET NEXT JREQ TOBX ;ALL DONE MOVE *A2(OID),A3 CMPI CLSNEUT|TYPMINE,A3 JRNE TOBP ;NO ;GIVE THIS LAND MINE A VELOCITY ; MOVE @HCOUNT,A0 ; BTST 0,A0 ; JRZ TOBP MOVE @SCNTR,A3 INC A3 MOVE A3,@SCNTR ANDI 01,A3 SLL 5,A3 MOVI PLYROBJS,A4 ADD A3,A4 MOVE *A4,A0,L ;GET FIRST ENTRY JRNZ PXC XORI 32,A3 ADDI PLYROBJS,A3 MOVE *A3,A0,L PXC MOVE A2,A8 CALLA XYSKOBJ ;A5=X VEL ;A6=Y VEL MOVE A6,*A2(OYVEL),L MOVE A5,*A2(OXVEL),L JRUC TOBP TOBX: RETS ;LXV .LONG -0A000H,0A000H,0,0,0 ;LYV .LONG 0,0,-08000H,08000H,-08000H ;LXV2 .LONG 0A000H,0A000H,0,0A000H ;ON LEFT ;LYV2 .LONG 0,0,-08000H,08000H,0 ;LXV3 .LONG -0A000H,-0A000H,0,0,-0A000H ;ON RGT ;LYV3 .LONG 0,0,-08000H,08000H,0 SHIFTLM ;SHIFT LAND MINES SLEEP 7*60 MOVE @WORLDTLX,A9,L ADDI [60,0],A9 MOVE A9,A10 ADDI [280,0],A10 ;START THEM MOVING CALLR DOSHIFT SLEEP 60 ;NOW STOP THEM CALLR DOSHIFT2 SLEEP 60 ;120 CALLR DOSHIFT SLEEP 60 ;NOW STOP THEM CALLR DOSHIFT2 SLEEP 60 CALLR DOSHIFT SLEEP 60 ;NOW STOP THEM CALLR DOSHIFT2 ;OLD DIE SLEEP 60 CALLR DOSHIFT SLEEP 60 ;NOW STOP THEM CALLR DOSHIFT2 DIE DOSHIFT2 MOVI OBJLST,A2,L OBP: MOVE *A2,A2,L ;GET NEXT JREQ OBX ;ALL DONE MOVE *A2(OID),A3 CMPI CLSNEUT|TYPMINE,A3 JRNE OBP ;NO ;ZERO VELOCITY CLR A0 MOVE A0,*A2(OXVEL),L MOVE A0,*A2(OYVEL),L JRUC OBP OBX RETS DOSHIFT ;SHIFT ALL LAND MINES ON SCREEN ;A9=LEFT EDGE ;A10=RIGHT EDGE MOVI OBJLST,A2,L XISTOBP: MOVE *A2,A2,L ;GET NEXT JREQ XISTOBX ;ALL DONE MOVE *A2(OID),A3 CMPI CLSNEUT|TYPMINE,A3 JRNE XISTOBP ;NO ;GIVE THIS LAND MINE A VELOCITY ; CLR B0 ; MOVK 5,B1 ; CALLA RANGRAND ; DEC A0 MOVK 4,A0 CALLA RNDRNG0 SLL 5,A0 MOVE *A2(OXVAL),A1,L CMP A9,A1 JRLT SET2 CMP A10,A1 JRGT SET3 ;IN MIDDLE OF SCREEN, MINE CAN GO 4 DIRECTIONS MOVI LXV,A1 ADD A0,A1 MOVE *A1,A3,L MOVI LYV,A1 ADD A0,A1 MOVE *A1,A4,L JRUC MOUT SET2 ;ON LEFT SIDE OF SCRN MOVI LXV2,A1 ADD A0,A1 MOVE *A1,A3,L MOVI LYV2,A1 ADD A0,A1 MOVE *A1,A4,L JRUC MOUT SET3 ;ON RIGHT SIDE OF SCRN MOVI LXV3,A1 ADD A0,A1 MOVE *A1,A3,L MOVI LYV3,A1 ADD A0,A1 MOVE *A1,A4,L MOUT MOVE A4,*A2(OYVEL),L MOVE A3,*A2(OXVEL),L JRUC XISTOBP XISTOBX: RETS LXV .LONG -0A000H,0A000H,0,0,0 LYV .LONG 0,0,-08000H,08000H,-08000H LXV2 .LONG 0A000H,0A000H,0,0A000H ;ON LEFT LYV2 .LONG 0,0,-08000H,08000H,0 LXV3 .LONG -0A000H,-0A000H,0,0,-0A000H ;ON RGT LYV3 .LONG 0,0,-08000H,08000H,0 JDOSHIFT ;SHIFT ALL LAND MINES ON SCREEN ;A9=LEFT EDGE ;A10=RIGHT EDGE MOVI OBJLST,A2,L JEXISTOBP: MOVE *A2,A2,L ;GET NEXT JREQ JEXISTOBX ;ALL DONE MOVE *A2(OID),A3 CMPI CLSNEUT|TYPMINE,A3 JRNE JEXISTOBP ;NO ;GIVE THIS LAND MINE A VELOCITY CLR B0 MOVK 5,B1 CALLA RANGRAND DEC A0 SLL 5,A0 MOVE *A2(OXVAL),A1,L MOVE @WORLDTLX,A9,L SUBI [50,0],A9 ;50 CMP A9,A1 JRLT JSET2 ADDI [500,0],A9 CMP A9,A1 JRGT JSET3 ;IN MIDDLE OF SCREEN, MINE CAN GO 4 DIRECTIONS MOVI JLXV,A1 ADD A0,A1 MOVE *A1,A3,L MOVI JLYV,A1 ADD A0,A1 MOVE *A1,A4,L JRUC JMOUT JSET2 ;ON LEFT SIDE OF SCRN MOVI JLXV2,A1 ADD A0,A1 MOVE *A1,A3,L MOVI JLYV2,A1 ADD A0,A1 MOVE *A1,A4,L JRUC JMOUT JSET3 ;ON RIGHT SIDE OF SCRN MOVI JLXV3,A1 ADD A0,A1 MOVE *A1,A3,L MOVI JLYV3,A1 ADD A0,A1 MOVE *A1,A4,L JMOUT MOVE A4,*A2(OYVEL),L MOVE A3,*A2(OXVEL),L JRUC JEXISTOBP JEXISTOBX: RETS JLXV .LONG -0E000H,0E000H,0,0,0 JLYV .LONG 0,0,-0B000H,0B000H,-0B000H JLXV2 .LONG 0E000H,0E000H,0,0E000H ;ON LEFT JLYV2 .LONG 0,0,-0B000H,0B000H,0 JLXV3 .LONG -0E000H,-0E000H,0,0,-0E000H ;ON RGT JLYV3 .LONG 0,0,-0C000H,0C000H,0 ELECT_MINE MOVE A13,*A8(OPLINK),L SLEEP 180 EM2 MOVK 30,B0 MOVI 100,B1 CALLA RANGRAND CALLA PRCSLP MOVI ELIST,A9 JSRP FRANIMQ CALLA SCRTST ;*RETURNS EQ IF ON SCREEN JREQ EM2 jauc DELOBJDIE ELIST .LONG ELECT1A .WORD 4 .LONG ELECT1B .WORD 4 .LONG ELECT1C .WORD 4 .LONG ELECT1A .WORD 4 .LONG ELECT1B .WORD 4 .LONG ELECT1C .WORD 4 .LONG ELECT1A .WORD 4 .LONG ELECT1B .WORD 4 .LONG ELECT1C .WORD 4 .LONG ELECT1A .WORD 4 .LONG ELECT1B .WORD 4 .LONG ELECT1C .WORD 4 .LONG ELECT1A .WORD 4 .LONG ELECT1B .WORD 4 .LONG ELECT1C .WORD 4 .LONG ELECT1 .WORD 20 .LONG 0 O_MINE: ;CLEAR RAM AREA FOR TEMP X/Y POSITIONS MOVI RAMXY,A0 CLR A3 MOVK 20,A1 LP9: MOVE A3,*A0+,L DSJS A1,LP9 MOVI [60,60],A0 ;SOME VALUE TO INIT TABLE WITH ;NOTHING WILL ORIGINATE AT 20/20 MOVI RAMXY,A1 MOVE A0,*A1+,L MOVE A1,@KEEPXY,L ;A2=# OF MINES TO CREATE ON SCREEN MOVE @STATUS,A0 CMPI 3,A0 JRZ OH1 CMPI 7,A2 ;EASIER FOR PLAYER 1 JRC OH1 SUBK 3,A2 OH1 ;CREATE A BUNCH OF THEM CREATE0 AMINE DSJS A2,OH1 RETS AMINE: ;AMINE IS CALLED TO PLACE X # OF MINES ON SCREEN CALLR GET_VAL ;MAKE SURE NEW BUST IS NOT ;OVERLAPPING ANY EXISTING SHAPE ;WHICH IS ALREADY ON SCRN AT START ;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 CALLA BEGINOBJ2 CLR A0 MOVE A0,*A8(OPLINK),L DIE GET_VAL: MOVK 020,A9 ;LAND MINE 20 WIDE CALLA GET_VALID_XY ;RETURNS A10=YPOS,A11=XPOS JRNC GOOD JRUC GET_VAL GOOD ; MOVE A10,*A8(OYPOS),W ; MOVE A11,*A8(OXPOS),W SLL 16,A11 MOVE A11,A0 SLL 16,A10 MOVE A10,A1 ;A0=X,A1=Y MOVE A0,A2 MOVY A1,A3 SRL 16,A2 MOVX A2,A3 ; ;CHECK FOR OTHER SHAPES NOW ; ;A3=[Y,X] MOVI RAMXY,A2 TCK: MOVE *A2+,A4,L JRZ OEXIT ;AN EXISTING SHAPE MUST BE CHECKED MOVX A4,A5 ;A4 = Y VAL (32 BIT) SLL 16,A5 ;A5 = X VAL ADDI 01C0000H,A4 ;ADD IN HEIGHT OF OBJ CMP A4,A1 JRGT VALID ;BR IF A1>A4 SUBI 0380000H,A4 CMP A4,A1 JRLT VALID ;BR IF A1A0 SUBI 0340000H,A5 CMP A5,A0 JRLT VALID ;SOME SHAPE IS ALREADY THERE! JRUC GET_VAL ;HIT VALID: JRUC TCK OEXIT: ;A3=[Y,X] MOVE @KEEPXY,A4,L MOVE A3,*A4+,L MOVE A4,@KEEPXY,L RETS BLOW_RCTR MOVK 18,A0 MOVE A0,@CTOTAL MOVK 3,A0 MOVE A0,@WAVE MOVI LORDPID,A0 CLR A1 NOT A1 CALLA KILALL ;TURN ON RIGHT HAND GOOB POOL MOVI GOOB,A14 CALLA DO_ALL_STUFF MOVE A0,@KEEPIT,L SLEEPK 30 ;SEND GROUP OF HULKS DOWN AT PLAYER FROM SIDE MOVK 10,A8 BEND1 SLEEP >40 MOVI [115,380],A9 MOVK 7,A10 ;GO LEFT CLR A0 MOVE A0,@JUMPER PUSH A8 CALLA SEND_GROUP PULL A8 DSJ A8,BEND1 DIE BLOWJET SLEEP 084H ;A8=TOP OF DISH MOVK 17H,A10 MOVK 2,A9 ;A9=2 FOR JET CREATE BLOWPID,DOBIGS CREATE BLOWPID,ONME2 MOVK 7,A10 CREATE BLOWPID,DOGREY SLEEPK 32 CREATE BLOWPID,JFLAMES DIE BLOWDSH SLEEP 084H ;A8=TOP OF DISH MOVK 07H,A10 MOVK 1,A9 ;A9=1 FOR DISH CREATE BLOWPID,DOBIGS MOVK 5,A10 CREATE BLOWPID,DOMTL CREATE BLOWPID,ONME SLEEP 048H MOVE *A8(OYPOS),A0 ADDI 63,A0 MOVE A0,A9 ;TARGET Y MOVI OBJLST,A6,L VILOBP: MOVE *A6,A6,L ;GET NEXT JREQ VILXL ;ALL DONE MOVE *A6(OYPOS),A4 SUB A9,A4 ABS A4 SUBK 2,A4 JRHI VILOBP ; CMP A9,A4 ;MATCH? ; JRNZ VILOBP ;NO ;FOUND IMG WITH CORRECT Y VALUE MOVE *A6(OSIZEX),A0 CMPI 28,A0 ;SIDE OF DISH JRNZ VILOBP ;CHECK FOR REAL SIDE PC HERE MOVE *A6(OZPOS),A0 CMPI 281,A0 JRNZ VILOBP MOVE A6,A0 CALLA DELOBJ VILX CALLA DELOBJA8 ;NOW SORT THRU BAKLST LOOKING FOR THE BASE MOVI BAKLST,A6,L ILOBP: MOVE *A6,A6,L ;GET NEXT JREQ ILX ;ALL DONE MOVE *A6(OYPOS),A4 SUB A9,A4 ABS A4 SUBK 2,A4 JRHI ILOBP ; CMP A9,A4 ;MATCH? ; JRNZ ILOBP ;NO ;FOUND IMG WITH CORRECT Y VALUE MOVE *A6(OSIZEX),A0 CMPI 92,A0 ;BASE OF DISH JRNZ ILOBP MOVE A6,A8 MOVE *A8(OYPOS),A0 SUBK 16H-11,A0 MOVE A0,*A8(OYPOS) MOVI DPC4,A1 MOVE *A8(OFLAGS),A4 CALLA ANI ILX DIE VILXL ; .IF DEBUG ; LOCKUP ; EINT ; .ENDIF DIE BLOWALL ;A8=REACTOR IMAGE ;WARNING SOUND ;SHAKE IT ;OVERLAY BIG EXPLOSION SEVERAL TIMES ;SEND OUT TONS OF REACTOR PIECES ;CHANGE TO DESTROYED REACTOR PIECE ;TURN ON GOOB POOL INSIDE ;SEND OUT METAL CHUNKS ;SHAKE ENTIRE SCREEN ; ;WAIT HERE UNTIL END OF WAVE REACHED! ; SLEEP 190 CREATE BLOWPID,SHKRC SLEEP 180 CREATE BLOWPID,BAMS MOVK 23,A10 CLR A9 ;A9=0 FOR REACTOR CREATE BLOWPID,DOBIGS MOVK 10,A10 CREATE BLOWPID,DOMTL CLR A9 MOVK 10,A10 CREATE BLOWPID,DOSIDES SLEEP 120 MOVI RCTR2,A1 MOVE *A8(OFLAGS),A4 CALLA ANI MOVE *A8(OFLAGS),A1 BTST B_FLIPH,A1 JRZ NOF MOVI BPL2,A14 CALLA DO_ALL_STUFF MOVE *A8(OXPOS),A1 ADDK 9,A1 MOVE A1,*A0(OXPOS) JRUC BFO NOF MOVI BPL,A14 CALLA DO_ALL_STUFF MOVE *A8(OXPOS),A1 ADDI 22H,A1 MOVE A1,*A0(OXPOS) BFO MOVE *A8(OYPOS),A1 ADDI 03DH,A1 MOVE A1,*A0(OYPOS) MOVK 15H,A10 ;29 CALLR SHAKER DIE ONME ;TURN ON BIG EXPLOSION MOVE *A8(OXPOS),A9 MOVE *A8(OYPOS),A10 ADDI 51H,A10 MOVK 5,A11 FTP MOVI BEXP,A14 CALLA DO_ALL_STUFF MOVE A0,A8 MOVE A9,*A8(OXPOS) MOVE A10,*A8(OYPOS) ;DISH ;TURN ON BIG EXPLOSION OVER DISH CREATE BLOWPID,FRAIT2 SLEEPK 18H DSJ A11,FTP DIE ONME2 ;TURN ON BIG EXPLOSION MOVE *A8(OXPOS),A9 MOVE *A8(OYPOS),A10 ADDI 11H,A10 ADDI 41H,A9 MOVK 3,A11 FTP2 MOVI BEXP,A14 CALLA DO_ALL_STUFF MOVE A0,A8 MOVE A9,*A8(OXPOS) MOVE A10,*A8(OYPOS) ;JET ;TURN ON BIG EXPLOSION OVER JET SLEEPK 15H CREATE BLOWPID,FRAIT DSJ A11,FTP2 DIE DOGREY MOVE A8,A11 MOVK 2,A9 DOG1 MOVI BEXPD2,A14 CALLA DO_ALL_STUFF MOVE A0,A8 MOVI -10000H,B0 MOVI 10000H,B1 CALLA RANGRAND MOVE A0,*A8(OXVEL),L MOVE *A11(OXPOS),A0 MOVE A10,A1 SLL 4,A1 ADDI XXOVER,A1 MOVE *A1,A1,W ADD A1,A0 MOVE A0,*A8(OXPOS) MOVI 40,A0 CALLA RNDRNG0 SUBK 20,A0 ADDI 22H,A0 MOVE *A11(OYPOS),A1 ADD A1,A0 MOVE A0,*A8(OYPOS) CREATE BLOWPID,FRAIT MOVK 6,A0 CALLA RNDRNG0 INC A0 CALLA PRCSLP DSJ A10,DOG1 MOVK 7,A10 SLEEP 50 DSJ A9,DOG1 DIE XXOVER .WORD 25,40,70,100,130,160,180,190 DOBIGS ;TURN ON BIG EXPLOSION MOVE A8,A11 TP MOVE A9,A9 JRZ TPK CMPI 1,A9 JRZ DSH ;JET MOVI BEXPD2,A14 CALLA DO_ALL_STUFF MOVE A0,A8 MOVE *A11(OXPOS),A0 ADDI 40H,A0 MOVE A0,*A8(OXPOS) MOVE *A11(OYPOS),A0 ADDI 012H,A0 ;4B MOVE A0,*A8(OYPOS) MOVI -40,B0 MOVI 40,B1 CALLA RANGRAND MOVE *A8(OXPOS),A2 ADD A0,A2 MOVE A2,*A8(OXPOS) MOVI -15,B0 MOVK 15,B1 CALLA RANGRAND MOVE *A8(OYPOS),A2 ADD A0,A2 JRUC TPKKZ DSH ;DISH ;TURN ON BIG EXPLOSION OVER DISH MOVI BEXPD,A14 CALLA DO_ALL_STUFF MOVE A0,A8 MOVE *A11(OXPOS),A0 ADDK 06H,A0 ;36 MOVE A0,*A8(OXPOS) MOVE *A11(OYPOS),A0 ADDI 022H,A0 ;4B JRUC TPKK TPK MOVI BEXP,A14 CALLA DO_ALL_STUFF MOVE A0,A8 MOVE *A11(OXPOS),A0 ADDI 026H,A0 ;36 MOVE A0,*A8(OXPOS) MOVE *A11(OYPOS),A0 ADDI 042H,A0 ;4B TPKK MOVE A0,*A8(OYPOS) MOVI -20,B0 MOVK 20,B1 CALLA RANGRAND MOVE *A8(OXPOS),A2 ADD A0,A2 MOVE A2,*A8(OXPOS) MOVI -25,B0 MOVK 25,B1 CALLA RANGRAND MOVE *A8(OYPOS),A2 ADD A0,A2 TPKKZ MOVE A2,*A8(OYPOS) CREATE BLOWPID,FRAIT MMTM SP,A9,A10 MOVK 1,A5 CMPI 2,A9 JRZ TPG CLR A9 MOVK 2,A5 TPG CALLR PIT2 MMFM SP,A9,A10 SLEEPK 6 DSJ A10,TP DIE FRAIT MOVI XBOOM,A9 jauc FRQDELDIE FRAIT2 MOVI XBOOMS,A9 jauc FRQDELDIE DOMTL SLEEPK 30 DM1 PUSH A10 MOVI BLSTS2,A11 MOVI 010000H,A9 ;A9=XVEL MOVI 08000H,A10 ;A10=YVEL MOVE *A8(OFLAGS),A0 BTST B_FLIPH,A0 JRZ NOH MOVI -010000H,A9 ;A9=XVEL MOVI -08000H,A10 ;A10=YVEL NOH MOVE @PCTOT,A0 CMPI 20,A0 JRNC DEI CREATE0 CHUNK_OBJ CLR A1 MOVE A1,*A0(PDATA),W ;NO PAL CHANGE PULL A10 SLEEPK 10 DSJ A10,DM1 DIE DEI PULL A10 DIE DOSIDES SLEEP 68H ;DOSID2 SLEEPK 20H MOVE A8,A11 CM1 CREATE BLOWPID,SIDE1 CREATE BLOWPID,SIDE2 CREATE BLOWPID,SIDE3 SLEEPK 2 DSJ A10,CM1 DIE ; .LONG [40H,0],[65H,0],RCTRPC2 ADJU MOVE A9,A9 JRZ REU MOVE *A11(OXPOS),A0 ADDK 08H,A0 MOVE A0,*A8(OXPOS) MOVE *A11(OYPOS),A0 ADDK 0BH,A0 MOVE A0,*A8(OYPOS) RETS REU MOVE *A11(OXPOS),A0 ADDI 038H,A0 MOVE A0,*A8(OXPOS) MOVE *A11(OYPOS),A0 ADDI 02BH,A0 MOVE A0,*A8(OYPOS) RETS SIDE1 MOVI SD1,A14 MOVE A9,A9 JRZ SXC MOVI SD1S,A14 SXC CALLA DO_ALL_STUFF MOVE A0,A8 CALLR ADJU MOVI -1000H,B0 MOVI 0A000H,B1 CALLA RANGRAND MOVE A0,*A8(OYVEL),L MOVI 30000H,B0 MOVI 70000H,B1 MOVE *A11(OFLAGS),A0 BTST B_FLIPH,A0 JRZ NOH2 MOVI -70000H,B0 MOVI -30000H,B1 NOH2 SIDEO CALLA RANGRAND MOVE A0,*A8(OXVEL),L SLEEPK 01FH jauc DELOBJDIE SIDE2 MOVE A9,A9 JRZ SDXX MOVI SD1S,A14 JRUC SDE SDXX MOVI SD1,A14 MOVE @PCNT,A0 BTST 0,A0 JRZ SDE MOVI SD2,A14 SDE CALLA DO_ALL_STUFF MOVE A0,A8 CALLR ADJU MOVI 8000H,B0 MOVI 40000H,B1 CALLA RANGRAND MOVE A0,*A8(OYVEL),L MOVI 8000H,B0 MOVI 40000H,B1 MOVE *A11(OFLAGS),A0 BTST B_FLIPH,A0 JRZ NOH3 MOVI -40000H,B0 MOVI -8000H,B1 NOH3 JRUC SIDEO SIDE3 MOVI SD3,A14 MOVE A9,A9 JRZ SDXXX MOVI SD3S,A14 SDXXX CALLA DO_ALL_STUFF MOVE A0,A8 CALLR ADJU MOVI 20000H,B0 MOVI 50000H,B1 CALLA RANGRAND MOVE A0,*A8(OYVEL),L MOVI -10000H,B0 MOVI 10000H,B1 JRUC SIDEO XBOOM: .LONG XPLD1 .WORD 2 .LONG XPLD2 .WORD 2 .LONG XPLD3 .WORD 2 .LONG XPLD4 .WORD 2 .LONG XPLD5 .WORD 2 .LONG XPLD6 .WORD 2 .LONG XPLD7 .WORD 3 .LONG XPLD8 .WORD 3 .LONG XPLD9 .WORD 3 .LONG XPLD10 .WORD 3 .LONG 0 XBOOMS: .LONG XPLD1 .WORD 5 .LONG XPLD2 .WORD 5 .LONG XPLD3 .WORD 5 .LONG XPLD4 .WORD 5 .LONG XPLD5 .WORD 5 .LONG XPLD6 .WORD 5 .LONG XPLD7 .WORD 5 .LONG XPLD8 .WORD 5 .LONG XPLD9 .WORD 5 .LONG XPLD10 .WORD 5 .LONG 0 XBOOM2: .LONG XPLD1 .WORD NEWPALET|4 .LONG RDBOOM .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 SD1: .LONG [40H,0],[65H,0],RCTRPC2 .WORD 289,DMAWNZ|M_NOCOLL,CLSDEAD ;I WILL DELETE MYSELF .LONG 0,0 SD1S: ;DISH .LONG [40H,0],[65H,0],DPC2 .WORD 289,DMAWNZ|M_NOCOLL,CLSDEAD ;I WILL DELETE MYSELF .LONG 0,0 SD2: .LONG [30H,0],[65H,0],RCTRPC1 .WORD 289,DMAWNZ|M_NOCOLL,CLSDEAD ;I WILL DELETE MYSELF .LONG 0,0 SD3: .LONG [30H,0],[65H,0],RCTRPC1 .WORD 289,DMAWNZ|M_FLIPH|M_NOCOLL,CLSDEAD ;I WILL DELETE MYSELF .LONG 0,0 SD3S: .LONG [30H,0],[65H,0],DPC3 .WORD 289,DMAWNZ|M_FLIPH|M_NOCOLL,CLSDEAD ;I WILL DELETE MYSELF .LONG 0,0 BEXP: .LONG [3AH,0],[85H,0],XPLD1 .WORD 295,DMAWNZ|M_NOCOLL,CLSDEAD ;I WILL DELETE MYSELF .LONG 0,-22000H BEXPD: .LONG [3AH,0],[85H,0],XPLD1 .WORD 295,DMAWNZ|M_NOCOLL,CLSDEAD ;I WILL DELETE MYSELF .LONG 0,-12000H BEXPD2: .LONG [3AH,0],[85H,0],CLD1A .WORD 295,DMAWNZ|M_NOCOLL,CLSDEAD ;I WILL DELETE MYSELF .LONG 0,-2000H BPL: .LONG [26H,0],[77H,0],WSTPOOL .WORD 281,DMAWNZ|M_NOCOLL,CLSNEUT|TYPNEUT ;289 .LONG 0,0 BPL2: .LONG [26H,0],[77H,0],WSTPOOL .WORD 281,DMAWNZ|M_NOCOLL|M_FLIPH,CLSNEUT|TYPNEUT ;289 .LONG 0,0 SHKRC ;SHAKE REACTOR MOVK 12,A10 ;8 XSL MOVK 10,A9 XLPS MOVE A9,A0 CALLR DOXY SLEEPK 2 DSJS A9,XLPS DSJ A10,XSL DIE GOOB: .LONG [180H,0],[69H,0],GOOBR .WORD 20,DMAWNZ|M_NOCOLL,CLSNEUT|TYPNEUT .LONG 0,0 LENGTH .LONG [3*60,12*60],[20*60,160*60],[20*60,170*60],[4*60,70*60] ;FOR BARRELS .LONG [4*60,120*60],[8*60,46*60],[6*60,15*60],[3*60,10*60] .LONG [4*60,120*60],[8*60,46*60],[8*60,100*60],[6*60,30*60] .LONG [6*60,30*60],[4*60,17*60],[3*60,30*60],[3*60,30*60] ;WV 15 .LONG [6*60,50*60],[8*60,46*60],[3*60,10*60],[4*60,20*60] .LONG [6*60,34*60] ;FIRST WARP LOCKDOWN .LONG [8*60,46*60],[5*60-20,25*60],[6*60-20,10*60] .LONG [8*60,46*60],[4*60-20,25*60],[5*60-20,10*60] .LONG [8*60,46*60],[4*60-20,25*60],[2*60,8*60] .LONG [8*60,26*60],[4*60-20,25*60],[5*60-20,10*60] .LONG [5*60,20*60],[4*60-20,25*60],[5*60-20,10*60] ;WV 35 .LONG [8*60,26*60],[4*60-20,25*60],[3*60-20,14*60] .LONG [8*60,26*60],[4*60-20,25*60],[5*60-20,10*60] .LONG [10*60,200*60],[4*60-20,25*60],[5*60-20,10*60] .LONG 0 ;FOR CRATE CLENGTH .LONG [3*60,12*60],[20*60,160*60],[20*60,170*60],[14*60,80*60] .LONG [10*60,120*60],[2*60,45*60],[6*60,120*60],[6*60,120*60] .LONG [10*60,120*60],[2*60,45*60],[6*60,120*60],[1*60,24*60] .LONG [2*60,20*60],[2*60,18*60],[6*60,120*60],[6*60,40*60] ;WV 15 .LONG [2*60,20*60],[2*60,45*60],[12*60,32*60],[6*60,120*60] .LONG [2*60,20*60],[2*60,45*60],[2*60,15*60],[2*60,15*60] .LONG [2*60,20*60],[2*60,45*60],[2*60,15*60],[2*60,15*60] .LONG [2*60,20*60],[2*60,45*60],[2*60,15*60],[2*60,15*60] .LONG [2*60,20*60],[2*60,35*60],[2*60,15*60],[2*60,15*60] ;WV 35 .LONG [2*60,20*60],[2*60,45*60],[2*60,15*60],[2*60,15*60] .LONG [2*60,20*60],[2*60,45*60],[2*60,15*60],[2*60,15*60] .LONG [2*60,20*60],[2*60,45*60],[2*60,15*60],[2*60,15*60] .LONG 0 CRATEMAN ;COULD BE A BARREL ;A8=CRATE IMG CLR A0 MOVE A0,*A13(SHKIN) MOVE A0,*A13(HITS) ;THIS VALUE SHOULD BE BASED ON WAVE # MOVE @WAVE,A0 SLL 5,A0 MOVE *A8(OID),A9 CMPI CLSNEUT|TYPCRTE|SUBBRL,A9 JRZ OKB ADDI CLENGTH,A0 JRUC OKBB OKB ADDI LENGTH,A0 OKBB MOVE *A0,A0,L CLR A1 MOVX A0,A1 SRL 16,A0 MOVE A0,B0 MOVE A1,B1 CALLA RANGRAND CRT CALLA PRCSLP CALLA SCRTST JRNZ BRLO0 CRT00 SLEEPK 1 MOVE @HALT,A0 JRNZ CRT00 MOVK 3,A10 ASL MOVK 10,A9 ALPS MOVE A9,A0 CALLR DOXY SLEEPK 3 DSJS A9,ALPS DSJ A10,ASL CALLR CRT_1 CLR A1 ;YES DO CHUNKS MOVE A1,*A0(PDATA+128),W DIE BRLO0 jauc DELOBJDIE BRLO MOVE A8,A0 CALLA ISOBJ * Z BIT SET = NO OBJECT, A0 = 0 * * Z BIT CLR = NO OBJECT, A0 = PTR TO OBJECT * JRZ BDI MOVE *A8(OIMG),A1,L CMPI BRRL2,A1 JRNZ BDI CALLA DELOBJ BDI DIE SHKCRT MOVK 10,A9 LPS MOVE A9,A0 CALLR DOXY SLEEPK 3 DSJS A9,LPS MOVE A9,*A13(SHKIN) MOVE A10,A0 JRUC CRT DOXY SLL 3,A0 MOVI SHKX,A1 ADD A0,A1 MOVB *A1,A1 ADDI SHKY,A0 MOVB *A0,A0 MOVE *A8(OXPOS),A2,W ADD A1,A2 MOVE A2,*A8(OXPOS),W MOVE *A8(OYPOS),A2,W ADD A0,A2 MOVE A2,*A8(OYPOS),W RETS SHKX .BYTE 0,-2,0,2,-2,0,2,-1,-1,2,0 SHKY .BYTE 0,0,2,-1,1,-2,2,-1,0,-2,1 .EVEN KILL_CRT3: ;PLAYER RUNNING INTO IT AND WALL! MMTM SP,A1,A2,A7,A9 ;A8=PLAYER MOVE *A8(OPLINK),A0,L MOVI P1DATA,A2 MOVE *A0(PNUM),A10 DEC A10 JRZ KC3 MOVI P2DATA,A2 KC3 MOVI CRTPT2,A1 CALLA SCRADD2 MOVE A9,A8 MOVE *A8(OXPOS),A0 MOVE *A8(OYVAL),A9,L MOVX A0,A9 CREATE FUTUREPID,SECRET_B JRUC NOSCR KILL_CRT2: ;TIME BOMB MMTM SP,A1,A2,A7,A9 CLR A1 MOVE A1,*A0(OID),W JRUC TOEXP SECRET_B ;TURN ON SECRET BONUS MOVE A9,A1 MOVX A9,A0 SLL 16,A0 MOVI SECBON,A2 ;IMG MOVI 460,A3 ;ZPOS MOVI DMAWNZ|M_NOCOLL,A4 ;NON-ZERO VALUE MOVI CLSDEAD,A5 ;I DELETE MYSELF ID CLR A6 CLR A7 CALLA BEGINOBJ2 ;NO WORLD ADDED IN CALLA CYCLEON MOVI 50,B0 MOVI 90,B1 CALLA RANGRAND CALLA PRCSLP CLR A11 JRUC INHERE KILL_CRT: ;CRATE TO FLASH, EXPLODE MMTM SP,A1,A2,A7,A9 MOVE *A8(OPLINK),A1,L MOVE *A1(SHKIN),A9 JRNZ NOSHK ;START CRATE PROCESS SHAKING MOVE A1,*A1(SHKIN) ;SET FLAG MMTM SP,A0,A1 MOVE A1,A0 MOVE *A1(PTIME),A10 MOVI CMAN,A1 MOVI SHKCRT,A7 CALLA XFERPROC MMFM SP,A0,A1 NOSHK MOVE *A0(OID),A9,W ;KILLERS OID ANDI F_SUBT,A9 SLL 4,A9 ADDI PUNISHT,A9 MOVE *A9,A9 MOVE *A1(HITS),A7 ADD A9,A7 MOVE A7,*A1(HITS) CMPI 85,A7 ;60 JRLT OKTF ;KILLED BY BULLET ;ADD TO PLYR SCORE TOEXP MOVE *A0(OPLINK),A0,L MOVE *A0(MYPLYR),A0 MOVI P1DATA,A2 DEC A0 JRZ TOEXP2 CMPI 1,A0 JRNZ NOSCR MOVI P2DATA,A2 TOEXP2 MOVI CRTPT,A1 CALLA SCRADD2 ;DO IT! NOSCR ; MOVK MISLPUN,A0 ;WILL EXPLODE CALLR CRT_1 MOVK MISLPUN,A1 MOVE A1,*A0(PDATA+128),W MOVE *A8(OPLINK),A0,L MOVE *A0(PROCID),A1,W CMPI CMAN,A1 JRNZ NXS CALLA KILL NXS MOVK 1,A0 MOVE A0,@OUT_FLG MMFM SP,A1,A2,A7,A9 RETS CRT_1 ;START EXPLODE ;JEWELS, HOSTAGES, BAD GUYS MAY APPEAR! ; MOVE A0,@KEEPXY MOVI ALTEXP3,A0 CALLA ONESND MOVE *A8(OFLAGS),A0 ORI M_NOCOLL,A0 MOVE A0,*A8(OFLAGS) MOVE *A8(OID),A9 CMPI CLSNEUT|TYPCRTE|SUBBRL,A9 JRNZ FFE ;FLASH BARREL! CREATE SHOTPID,EXPLB RETS FFE CREATE SHOTPID,EXPL RETS OKTF MOVI 03F3F0000H,A9 CREATE0 FLASHME MMFM SP,A1,A2,A7,A9 RETS ;SUBLZR .EQU 0001H ;REGULAR LAZER SHOTS ;SUBSPRY .EQU 0002H ;SPRAY SUB TYPE ;SUBFIRE1 .EQU 0003H ;FIRE BALL WPN ;SUBGRND .EQU 0004H ;GRENADE ;SUBNOSTP .EQU 0005H ;NON STOPPING BULLET ;SUBSPDG1 .EQU 0006H ;MACHINE GUN TYP WPN PUNISHT: ;0,REGULAR,SPRAY,0,0,NONSTOP,0 .WORD 0,3,4,0,0,MISLPUN,0,0 ;NONSTOP TO STAY SAME! OTHERS USE IT EXPLB ;BARREL TO EXPLODE ; MOVE A9,*A13(PDATA+128) CLR A9 MOVK 2,A5 CALLR PIT2 SLEEPK 10 MOVI CLSTS,A11 CLR A9 ;A9=XVEL CLR A10 ;A10=YVEL MOVE @PCTOT,A0 CMPI 20,A0 JRNC SKPU CREATE CMAN,CHUNK_OBJ SKPU MOVE A10,*A0(PDATA),W ;NO PAL CHANGE ; MOVE @KEEPXY,A0 MOVE *A13(PDATA+128),A0 CMPI MISLPUN,A0 ;# IS SAME AS IN PUNISH TABLE FOR MSL JRNZ NOMIS ;MISSILE KILLED BARREL, NO SHRAPNEL JRUC BULLGN0 NOMIS MOVE @SCNTR,A3 INC A3 MOVE A3,@SCNTR ANDI 01,A3 SLL 5,A3 MOVI PLYROBJS,A2 ADD A3,A2 MOVE *A2,A0,L ;GET FIRST ENTRY JRNZ PX XORI 32,A3 ADDI PLYROBJS,A3 MOVE *A3,A0,L PX CALLA XYSKOBJ MOVE A5,A1 MOVE A6,A2 CALLA GETADIR2 MOVE A0,A9 ;FROM SHAWN! CLR A10 CREATE SHRPPID,SHRAPNL MOVK 1,A10 CREATE SHRPPID,SHRAPNL MOVK 2,A10 CREATE SHRPPID,SHRAPNL MOVK 3,A10 CREATE SHRPPID,SHRAPNL MOVK 4,A10 CREATE SHRPPID,SHRAPNL BULLGN0 SLEEPK 8 BULLGN jauc DELOBJDIE ;CVRT .BYTE 0,3,7,5,1,4,6,2,8 ; .EVEN YVTBL .LONG 0,Y1,Y2,Y3,Y4,Y5,Y6,Y7,Y8 XVTBL .LONG 0,X1,X2,X3,X4,X5,X6,X7,X8 X8: .LONG 0,-10000H,-1C000H,-20000H,-20000H Y8: .LONG -18000H,-1C000H,-1A000H,-10000H,0 ;Y8: .LONG -18000H,-1C000H,10000H,-10000H,0 ; X1: .LONG -20000H,-10000H,0,10000H,20000H ;UP Y1: .LONG -10000H,-18000H,-1C000H,-18000H,-10000H X2: .LONG 0,10000H,1C000H,20000H,20000H Y2: .LONG -18000H,-1C000H,-1A000H,-10000H,0 X3: .LONG 10000H,20000H,23000H,20000H,10000H Y3: .LONG -20000H,-10000H,0,10000H,20000H X4: .LONG 0,10000H,1C000H,20000H,20000H Y4: .LONG 18000H,1C000H,1A000H,10000H,0 X5: .LONG -20000H,-10000H,0,10000H,20000H Y5: .LONG 10000H,18000H,1C000H,18000H,10000H X6: .LONG 0,-10000H,-1C000H,-20000H,-20000H Y6: .LONG 18000H,1C000H,1A000H,10000H,0 X7: .LONG -10000H,-20000H,-23000H,-20000H,-10000H Y7: .LONG -20000H,-10000H,0,10000H,20000H SHRAP .LONG SLUD1 .WORD 3 .LONG SLUD2 .WORD 3 .LONG SLUD3 .WORD 3 .LONG SLUD4 .WORD 3 .LONG SLUD5 .WORD 3 .LONG SLUD6 .WORD 3 .LONG SLUD1 .WORD 3 .LONG SLUD2 .WORD 3 .LONG SLUD3 .WORD 3 .LONG SLUD4 .WORD 3 .LONG SLUD5 .WORD 3 .LONG SLUD6 .WORD 3 .LONG 0 SHRAPNL ;TURN ON OBJECT AT CORRECT XY ;GET VELOCITY BASED ON DIRECTION IN A9 INDEX INTO TABLE WITH A10 SLL 5,A9 MOVI YVTBL,A0 ADD A9,A0 MOVE *A0,A7,L ADDI XVTBL,A9 ;GET VELOCITY TABLE MOVE *A9,A6,L SLL 5,A10 ADD A10,A6 MOVE *A6,A6,L ADD A10,A7 MOVE *A7,A7,L CALLA GETANIXY * A2 = APOINT OYVAL, 32 BITS * * A3 = APOINT OXVAL, 32 BITS * MOVE A2,A1 MOVE A3,A0 MOVI 293,A3 ;242 159 MOVI DMAWNZ,A4 MOVI CLSENMY|TYPGOO,A5 ;ENMY|TYPSHOT,A5 MOVI SLUD1,A2 CALLA BEGINOBJ2 MOVI SHRAP,A9 MOVI SHRAP,A10 MOVI SLM,A0 MOVE A0,*A13(MYLIST),L MOVI SQUISH,A0 ;FOR WHEN I GOOB ONTO PLAYER MOVE A0,*A13(MYSND),L BSTART MOVK 18,A0 ;23 MOVE A0,*A13(BLAGE) MOVK 15,A0 ;1 MOVE A0,*A13(FDLY) ;FRANIM DELAY CLR A0 MOVE A0,*A13(FXOR) MOVE A0,*A13(MYPLYR) jruc BULL_TOP bslp SLEEPK 1 BULL_TOP move *a13(FXOR),a0 ;>Bullet collison check movk 1,a1 xor a1,a0 move a0,*a13(FXOR) sll 5,a0 addi PLYRPRCS,a0,L move *a0,a3,L jrz bmiss move *a3(LEG_PTR),a0,L move *a8(OXPOS),a6 ;Get shot X move *a8(OSIZEX),a1 srl 1,a1 add a1,a6 ;Center X move *a0(OXPOS),a4 subk 2,a4 ;X offset sub a4,a6 jrlt bmiss subk 12,a6 ;Width jrhs bmiss move *a8(OYPOS),a7 ;Get shot Y move *a8(OSIZEY),a1 srl 1,a1 add a1,a7 ;Center Y move *a0(OYPOS),a5 subk 10,a5 ;Y offset sub a5,a7 jrlt bmiss subk 21,a7 ;Height jrhs bmiss move *a3(DEAD),a1 jrnz DOSLM move *a3(DELYDET),a1 jrnz DOSLM callr DO_GOOJ DOSLM CLR A0 MOVE A0,*A8(OXVEL),L MOVE A0,*A8(OYVEL),L MOVI 160,A0 MOVE A0,*A8(OZPOS) DOSLM2 MOVE *A13(MYLIST),A9,L ;SLM,A9 MOVE *A13(MYSND),A0,L JRZ RTAG CALLA ONESND RTAG jauc FRQDELDIE bmiss move *a13(FDLY),a0 dec a0 move a0,*a13(FDLY) jrnz bslp MOVE A9,A9 JRNZ ANIM MOVE *A13(BLAGE),A0 ;THIS BULLET IS NOT ANIMATING! DEC A0 MOVE A0,*A13(BLAGE) JRZ BULLGN MOVK 3,A1 AND A1,A0 JRNZ NRT CALLA SCRTST JRNZ BULLGN NRT MOVK 10,A0 MOVE A0,*A13(FDLY) CALLA CHK_BULL JRC BULLGN ;BR=SHOT HAS HIT WALL jruc bslp ANIM MOVK 4,A1 JSRP FRANIM JRNC C3 MOVE A10,A9 ;RESET A9 LIST PNTR MOVK 3,A0 MOVE A0,*A13(FDLY) MOVI 159,A1 ;133 MOVE A1,*A8(OZPOS) calla SCRTST jrnz BULLGN ;Off screen? calla CHK_BULL jrnc bslp clr a0 ;hit move a0,*a13(MYSND),L jruc DOSLM C3 move a0,*a13(FDLY) jruc BULL_TOP ***************************************************************************** ;CHECK GOOB BALL IN A8 AGAINST PLAYERS ;A8=GOOB BALL PNTR ;CALL WITH THE FOLLOWING INFO SET UP IN PDATA: ;FXOR .EQU PDATA+144 ;UHW SHOULD BE 0 OR 1 TO START WITH ;MYLIST .EQU PDATA+64 ;UHL FRANIM LIST FOR THIS GOOB UPON DEATH ;MYSND .EQU PDATA+96 ;UHL SOUND HEADER FOR GOO TYPE DEATH CK_GOOB move *a13(FXOR),a0 movk 1,a1 xor a1,a0 move a0,*a13(FXOR) sll 5,a0 addi PLYRPRCS,a0,L move *a0,a0,L jrz ICANT move *a0(DEAD),a1 ;is player dead? jrnz ICANT ;yup! move *a0(DELYDET),a1 ;is player invincible right now? jrnz ICANT ;yup! move *a0(LEG_PTR),a0,L move *a8(OXPOS),a6 ;Get shot X move *a8(OSIZEX),a2 srl 1,a2 add a2,a6 ;Center X move *a0(OXPOS),a4 subk 2,a4 ;X offset sub a4,a6 jrlt ICANT subk 12,a6 ;Width jrhs ICANT move *a8(OYPOS),a7 ;Get shot Y move *a8(OSIZEY),a2 srl 1,a2 add a2,a7 ;Center Y move *a0(OYPOS),a5 subk 6,a5 ;Y offset sub a5,a7 jrlt ICANT subk 20,a7 ;Height jrhs ICANT callr DO_GOOJ ;HIT ICANT rets ******************************** DO_GOOJ ;A8=*Shot obj mmtm sp,a8,a10 move a8,a10 ;Pass to GOOJ SWAP A0,A8 CALLA SHOTKILL ;START PLAYER DEATH MOVK 7,A6 ;5 MAYBE FHZ2 CREATE0 GOOJ MOVE *A13(MYLIST),A1,L ;SLM,A9 MOVE A1,*A0(MYLIST),L MOVE *A13(MYSND),A1,L MOVE A1,*A0(MYSND),L DSJ A6,FHZ2 mmfm sp,a8,a10 RETS ***************************************************************************** GOOJ ;A10=*Shot obj MOVK 1,B0 MOVK 10,B1 CALLA RANGRAND CALLA PRCSLP MOVI -7800H,B0 MOVI 7800H,B1 CALLA RANGRAND MOVE A0,A7 MOVI -8000H,B0 MOVI 8000H,B1 CALLA RANGRAND MOVE A0,A6 MOVI -7,B0 MOVK 7,B1 CALLA RANGRAND MOVE A0,A9 MOVI -2,B0 ;-7 MOVK 18,B1 ;7 CALLA RANGRAND MOVE A0,A1 MOVE *A10(OXPOS),A0 ADD A1,A0 MOVE *A10(OYPOS),A1 ADD A9,A1 SLL 16,A0 SLL 16,A1 MOVI SLUD1,A2 ;IMG MOVI 159,A3 ;ZPOS MOVI DMAWNZ|M_NOCOLL,A4 ;NON-ZERO VALUE MOVI CLSDEAD,A5 ;I DELETE MYSELF ID CALLA BEGINOBJ2 ;NO WORLD ADDED IN JRUC DOSLM2 SLM .LONG SLMD1 .WORD 5 .LONG SLMD2 .WORD 5 .LONG SLMD3 .WORD 5 .LONG SLMD4 .WORD 15 .LONG SLMD3 .WORD 4 .LONG SLMD2 .WORD 4 .LONG SLMD1 .WORD 4 .LONG 0 EXPL ;CRATE TO EXPLODE ;START OTHER BLUE EXPLOSIONS CALLR DOLOTS SLEEPK 13 MOVE *A8(OYPOS),A0 ADDK 11,A0 MOVE A0,*A8(OYPOS) MOVE *A8(OXPOS),A0 SUBK 3,A0 MOVE A0,*A8(OXPOS) MOVI 40,A0 MOVE A0,*A8(OZPOS) MOVI CRT3,A1 ;BROKEN CRATE MOVE *A8(OFLAGS),A4 ; MOVE A8,A0 ;GET RID OF CRATE ALTOGETHER! ; CALLA DELOBJ CALLA ANI SLEEPK 15 MOVE @WAVE,A0 SLL 3,A0 ADDI HTYP,A0 MOVB *A0,A0 JRZ MKFND ;BRING OUT FIEND CREATE AHMDPID,CRT_AHMD ;FLAME THROWER DUDE DIE MKFND ;BRING OUT FIEND CREATE FNDPID,FIEND ;PURPLE FIEND FROM CRATE DIE HTYP .BYTE 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1 .BYTE 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1 .BYTE 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1 .EVEN DOLOTS MOVK 3,A5 MOVK 1,A9 PIT MOVK 3,A10 ;SLEEP THIS LONG BEFORE BLOWING CREATE SHOTPID,EXPTBMB MOVK 6,A10 ;SLEEP THIS LONG BEFORE BLOWING CREATE SHOTPID,EXPTBMB PIT2 MOVK 8,A10 ;SLEEP THIS LONG BEFORE BLOWING CREATE SHOTPID,EXPTBMB MOVK 14,A10 ;SLEEP THIS LONG BEFORE BLOWING CREATE SHOTPID,EXPTBMB MOVK 2,A10 ;SLEEP THIS LONG BEFORE BLOWING CREATE SHOTPID,EXPTBMB DSJ A5,PIT RETS CLSTS .LONG RP1,WOODPC,WOODPC2,WOODPC3,WOODPC4,WOODPC2,WOODPC,WOODPC4 .LONG WOODPC5,0 BLSTS2A .LONG RP1,RPC,RPC,WOODPC4,WOODPC3 .LONG WOODPC5,0 BLSTS2 .LONG RP1,RPC,RPC,RPC,RPC,RPC,RPC,WOODPC4,WOODPC3,WOODPC2,WOODPC .LONG WOODPC5,0 RPC .LONG OPC1 .WORD NEWPALET|2 .LONG REACTR .LONG OPC2 .WORD 4 .LONG OPC3 .WORD 4 .LONG OPC4 .WORD 4 .LONG OPC5 .WORD 4 .LONG OPC6 .WORD 4 .LONG OPC7 .WORD 4 .LONG OPC8 .WORD 4 .LONG OPC8 .WORD 4 .LONG 0 WOODPC .LONG RP1 .WORD FLIPBITS|1,(M_FLIPV) .LONG RP2 .WORD 4 .LONG RP3 .WORD 4 .LONG RP4 .WORD 4 .LONG RP5 .WORD 4 .LONG RP6 .WORD 4 .LONG RP7 .WORD 4 .LONG RP8 .WORD 4 .LONG RP9 .WORD 4 .LONG RP10 .WORD 4 .LONG 0 WOODPC4 .LONG RP1 .WORD 10 .LONG RP2 .WORD 5 .LONG RP3 .WORD 5 .LONG RP4 .WORD 5 .LONG RP5 .WORD 5 .LONG RP6 .WORD 4 .LONG RP7 .WORD 4 .LONG RP8 .WORD 4 .LONG RP9 .WORD 4 .LONG RP10 .WORD 4 .LONG 0 WOODPC3 .LONG RP1 .WORD FLIPBITS|19,(M_FLIPH) .LONG RP2 .WORD 4 .LONG RP3 .WORD 4 .LONG RP4 .WORD 4 .LONG RP5 .WORD 4 .LONG RP6 .WORD 4 .LONG RP7 .WORD 4 .LONG RP8 .WORD 4 .LONG RP9 .WORD 4 .LONG RP10 .WORD 4 .LONG 0 WOODPC2 .LONG RSR1 .WORD FLIPBITS|19,(M_FLIPH+M_FLIPV) .LONG RSR2 .WORD 4 .LONG RSR3 .WORD 4 .LONG RSR4 .WORD 4 .LONG RSR5 .WORD 4 .LONG RSR6 .WORD 4 .LONG RSR7 .WORD 4 .LONG RSR8 .WORD 4 .LONG RSR9 .WORD 4 .LONG 0 WOODPC5 .LONG RSR1 .WORD 5 .LONG RSR2 .WORD 5 .LONG RSR3 .WORD 5 .LONG RSR4 .WORD 5 .LONG RSR5 .WORD 5 .LONG RSR6 .WORD 5 .LONG RSR7 .WORD 5 .LONG RSR8 .WORD 5 .LONG RSR9 .WORD 5 .LONG 0 TAKEEL MOVI 02860000H,A0 MOVI 06F0000H,A1 MOVI TAKEIT,A2 ;IMG JRUC INH SPATH ;A8=REACTOR SLEEPK 30 MOVI TARGPID,A0 CLR A1 NOT A1 CALLA EXISTP JRNZ SPATH ;NOT SCROLLING TO A TARGET XY SLEEP 300 CLR A0 MOVE A0,@TMP ;CHECK FOR SECRET PASSAGE MESSAGE move @P1DATA+TKEYS,a0 move @P2DATA+TKEYS,a1 add a1,a0 CMPI 140,A0 JRLT NOPE2 ;CHECK TOTAL # OF KEYS COLLECTED HERE! ;OPEN SECRET PATH ;A8=REACTOR ;START A PROCESS WHICH CHECKS PLAYERS XY EVERY 10 TICKS CLR A9 CREATE SECDR,CK_SECRET MOVE *A8(OXVAL),A0,L ADDI 0610000H,A0 MOVE *A8(OYVAL),A1,L ADDI 0200000H,A1 MOVI PATH,A2 ;IMG JRUC INH DROPBMB: ;A8=GATE MOVE *A8(OXVAL),A0,L ADDI 0330000H,A0 MOVE *A8(OYVAL),A1,L ADDI 0300000H,A1 MOVI DROPIT,A2 ;IMG INH MOVI 60,A3 ;ZPOS MOVI DMAWNZ|M_NOCOLL,A4 ;NON-ZERO VALUE MOVI CLSNEUT|TYPNEUT,A5 ;ID CLR A6 ;XVEL CLR A7 ;YVEL CALLA BEGINOBJ2 ;NO WORLD ADDED IN MOVE A8,A0 CALLA OBJOFF DROPBMBA SLEEPK 30 MOVI TARGPID,A0 CLR A1 NOT A1 CALLA EXISTP JRNZ DROPBMBA ;NOT SCROLLING TO A TARGET XY SLEEP 120 MOVK 25,A10 MANY SLEEPK 15 MOVE A8,A0 CALLA OBJON SLEEPK 15 MOVE A8,A0 CALLA OBJOFF DSJ A10,MANY DOUT jauc DELOBJDIE NOPE2 DIE KILL_GATE ;TIME BOMB HAS EXPLODED NEAR GATE MMTM SP,A1,A7,A9,A11 ;NOT SCROLLING, CAN BLOW UP GATE! CLR A1 MOVE A1,*A8(OID),W ;ZERO TIME BOMB OID MOVE *A8(OPLINK),A0,L MOVE *A0(MYPLYR),A9 CREATE0 GATE_EXP EX MMFM SP,A1,A7,A9,A11 RETS CK_SECRET ;CHECK FOR EITHER PLAYER TO ENTER SECRET PASSAGE WAY ;A9=PATH # 0-? ;FOR #1 01F, 050H ; DIE SLEEP 8*60 ;UNTIL SCROLLING STOPS! CK_SEC SLEEPK 30 MOVE @PLYROBJS,A0,L JRZ NXT CALLR CKIT JRC AHIT NXT MOVE @PLYROBJS+32,A0,L JRZ CK_SEC CALLR CKIT JRNC CK_SEC AHIT ;SMART BOMB SCREEN ;TURN OFF ALL BARRELS/CRATE PROCESSES ;WIPE TO NEW MODULE ;HAVE PLAYERS RUN OUT ONTO NEW SCREEN ;WHAT IF CRUISE MISSILIES ARE COMING DURING SECRET PATH ENTER? MOVE A0,A9 ;A9=PLYR IMG PTR WHO GOT ME FOR SMART BOMB MOVI TARGPID,A0 CLR A1 NOT A1 CALLA KILALL MOVI DELPID,A0 CALLA KILALL MOVI WRPSND,A0 CALLA ONESNDOVR MOVI PALB,A11 JSRP FADE_STRT MOVE @KEEPIT,A0,L ;GET RID OF RIGHT SIDE POOL CALLA ISOBJ * Z BIT SET = NO OBJECT, A0 = 0 * * Z BIT CLR = NO OBJECT, A0 = PTR TO OBJECT * JRZ SKPMI CALLA DELOBJ SKPMI MOVI [08FEH,0],A0 MOVE A0,@WORLDTLY,L CLR A0 MOVE A0,@WORLDTLX,L SLEEPK 2 ;KILL EVERYTHING BUT PLAYER STUFF ;SHOW NEW BLIMP MODULE CALLA KILBGND SLEEPK 2 CALLR DO5 SLEEPK 1 CALLA BGND_UD1 MOVI frtcls2,a0 CALLA BLAKOUT MOVI PALCNO,A0 MOVK 2,A1 CALLA FADEIN MOVI PALBNO,A0 CALLA FB_FADEIN MOVE *A13(PNUM),A8 ;FOR SCRIPTPLAY MOVE @STATUS,A8 CMPI 3,A8 JRNZ OP MOVK 1,A8 MOVK 2,A10 ;INDICATES FROM LOWER RIGHT CREATE SCRPID,SCRIPTPLAY CALLR SETXY MOVK 2,A8 OP MOVK 2,A10 ;INDICATES FROM LOWER RIGHT CREATE SCRPID,SCRIPTPLAY CALLR SETXY CALLA BGND_UD1 SLEEPK 1 CALLA BGND_UD1 SLEEPK 1 CALLA BGND_UD1 CLR A0 MOVE A0,@HALT SLEEP 50 CREATE JOYPID,JOY_UPDATE ;FADE IN COMPLETE MOVI ICN3,A0 MOVE A0,@ICLIST,L CREATE ICONPID,SEND_ICON DOATP ;FOR DEBUG = START=2 CLR A0 MOVE A0,@CRSRAM,L CALLA SETC2 MOVI frtcls2,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 CALLA STRT_G ;GOOB POOLS SLEEPK 1 ;KILL OFF SCRN IMAGES ;REALIGN PLAYERS ;START THEM RUNNING IN ;PUT UP ZULU TYPE TEXT MESSAGE AFTER A MOMENT MOVK 2,A10 MOVI [24,0],A9 ;Y ADD IN VALUE CREATE0 ZONE_TXT2 SLEEP 120 MOVK 18,A0 MOVE A0,@CTOTAL MOVK 3,A9 MOVE A9,@TARGET_NUM ;FIRST TARGET FOR SCROLL CLR A9 ;A9=0 FOR UP, 1 FOR RGT CREATE ARWPID,ONARRW ;TURN ON UP ARROW SLEEP 120 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 CREATE0 SHIFTLM SLEEP 65 MOVK 8,A0 MOVE A0,@ARWOFF ;BLINK ARROW A0 MORE TIMES THEN KILL! CREATE FUTRPID,CKFORY DIE FADE_STRT ;USED FOR SECRET PATH ;AND FOR INSTANT WARPS ;A9=PLYR IMG PTR WHO GOT ME FOR SMART BOMB ;A11=AUTOPAL LIST TO FADE MOVI RNG2PID,A0 CALLR STPC MOVI RNG1PID,A0 CALLR STPC CALLR KILPROCS CREATE0 SBOMB SLEEPK 2 CALLR KILPROCS CLR A1 MOVE A1,@CYCLIFE MOVE A1,@P1CTRL MOVE A1,@P2CTRL MOVI CYCPID,A0 CALLA KIL1C MOVI POWPID,A0 CALLA KIL1C CALLA CLNPAL ;FADE AUTOPAL MOVE A11,A0 MOVK 2,A1 CALLA FADEOUT MOVI PALBNO,A0 CALLA FB_FADEOUT SLEEP 60 CALLA KILBGND SLEEPK 2 CALLA CLNPAL CALLA RESTUFF_AUTOERASE MOVE @WAVE,A0 SUBK 32,A0 JRNZ NOTEND ;SHOCK FIX SLEEP 0D0H-60 ;READ MESSAGE NOTEND CALLR KILNOTME CLR A0 MOVE A0,@INEXP ;I MAY HAVE KILLED TIME BOMBS MOVI PCINFO,A1 MOVE A1,@LASTPC,L MOVE A0,*A1,L RETP KILPROCS MOVI CMAN,A0 CLR A1 NOT A1 MOVE A1,@HALT CALLA KILALL ;KILL ALL CRATES MOVI BMBPID,A0 CALLA KILALL MOVI MAPPID,A0 CALLA KILALL MOVI T72PID,A0 CALLA KILALL MOVI LORDPID,A0 CALLA KILALL MOVI SHOTPID,A0 CALLA KILALL MOVI JOYPID,A0 CALLA KILALL MOVI ICONPID,A0 CALLA KILALL MOVI BULPID,A0 CALLA KILALL MOVI BLOWPID,A0 CALLA KILALL MOVI HSTGPID,A0 CALLA KILALL MOVI DROPPID,A0 CALLA KILALL MOVI FUTUREPID,A0 ;FUTURE PROCS LIKE SHIFTING MINES CALLA KILALL MOVI WARPPID,A0 CALLA KILALL MOVI T72PID,A0 CALLA KILALL MOVI FLGPID,A0 ;7/29 CALLA KILALL MOVI shawnpid,A0 ;7/29 CALLA KILALL MOVI PONDPID,A0 ;9/22 CALLA KILALL MOVI JEEPID,A0 ;9/26 CALLA KILALL MOVI BOSSPID,A0 ;9/26 CALLA KILALL MOVI NEUTPID,A0 ;11/25 CALLA KILALL RETS STPC ;STOP FLASHING COLOR CYCLE UPON ENTRY INTO WARPS MMTM SP,A8,A9,A10,A11 CLR A1 NOT A1 CALLA EXISTP JRZ NOCY CALLA GETA9 CALLA GETA8 CALLA GETA10 CALLA GETA11 CLR A1 MOVE A1,*A0(PDATA),W ;ZERO TEMP FIELD MOVI XOUT0,A7 CALLA XFERPROC NOCY MMFM SP,A8,A9,A10,A11 RETS DO5 MOVK 5,A0 CALLA DOLORD MOVI SRECT1,A0 MOVE A0,@CURRENT,L MOVI BSRECT1,A0 MOVE A0,@BCURRENT,L MOVI ENRECT5,A0 MOVE A0,@EN_CURRENT,L ;FOR BOX COLLISIONS MOVI ERECT5,A0 MOVE A0,@ENEMY_RECT,L ;FOR SPAWNING MOVI PATH_MOD,A0 ;SHOW SECRET PATH MODULE MOVE A0,@BAKMODS,L CALLA BGND_UD1 RETS XX .EQU 241 YY .EQU 202 SRECT1 .WORD 242-XX,1613-YY,283-XX,2380+350-YY ;SECRET PATH RECT LIST 1 .WORD 274-XX,2195+350-YY,367-XX,2277+350-YY .WORD 594-XX,2202-YY,638-XX,2290+337-YY .WORD 500-XX,1974+350-YY,608-XX,2122+350-YY .WORD 260-XX,0584H,06CH,1685-YY .WORD 531-XX,0584H,643-XX,1685-YY .WORD 531-XX,063AH,643-XX,1982-YY .WORD 0 BSRECT1 .WORD 242-XX,1613-YY,270-XX,2375+350-YY ;BULLET RECT FOR SECRET #1 .WORD 274-XX,2199+350-YY,360-XX,2265+350-YY .WORD 605-XX,2202-YY,638-XX,2280+337-YY .WORD 515-XX,1984+350-YY,608-XX,2105+350-YY .WORD 260-XX,056CH,336-XX,05BCH .WORD 012AH,056CH,640-XX,1673-YY .WORD 012AH,1824-YY,643-XX,06E6H .WORD 0 PALBNO .LONG SCOREPAL,0 PALCNO .LONG 8*32*32+5*32+4,0 PALENO .LONG 3*32*32+4*32+5,0 PALB: .LONG 11*32*32+7*32+0,0 PATH_MOD: .LONG SEC1BMOD ;THIS IS FROM BLIMP (MODULE NAME) .WORD 0FFD8H-5,0 ;-1950 ;x,y start pos. .LONG >FFFFFFFF SETXY ;A8=1 OR 2 ;RUNIN RIGHT FROM SIDE MOVE @WORLDTLX,A3,L ;Y LINE TO REAPPEAR AT ADDI [408,0],A3 CMPI 1,A8 JRNE VX1R ;THIS IS FOR BRINGING THE PLAYER ON FROM OFF LEFT OF SCREEN MOVE @WORLDTLY,A2,L ADDI [0195,0],A2 MOVE @PLYRPRCS,A0,L JRUC AXZ VX1R MOVE @WORLDTLY,A2,L ADDI [0210,0],A2 MOVE @PLYRPRCS+32,A0,L AXZ MOVE *A0(TSO_PTR),A8,L MOVE *A0(LEG_PTR),A0,L MOVE A3,*A0(OXVAL),L MOVE A2,*A0(OYVAL),L ;REALIGN PLAYER HALVES WHEN WE RESET MOVE A8,A0 MOVE *A13(LEG_PTR),A8,L ;GET LEG PTR OUT OF TORSO STRUCT CALLA GETANIXY MOVE *A8(OFLAGS),A4,W ORI M_NOCOLL,A4 CALLA GANISAG MOVE A0,A8 RETS KILNOTME: MMTM SP,A0,A2,A3,A4,A5 MOVI OBJLST,A2,L KILOBP: MOVE A2,A3 ;SAVE PREVIOUS MOVE *A2,A2,L ;GET NEXT JREQ KILOBX ;ALL DONE MOVE *A2(OID),A4 BTST 14,A4 JRZ CONTK ;A CLSPLYR ;KILL EVERYTHING BUT PLAYERS ANDI F_TYPE,A4 CMPI TYPHLPR,A4 ;A HELPER BLADE JRNZ NEXCK MOVE *A2(OIMG),A0,L CMPI BLADE,A0 JRZ KILOBP CMPI SHLD1,A0 JRZ KILOBP CMPI SHLD2,A0 JRZ KILOBP CMPI MEP1,A0 JRZ KILOBP CMPI MEP2,A0 JRZ KILOBP NEXCK CMPI TYPPLYR,A4 JRZ KILOBP CONTK 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 KILOBX: MMFM SP,A0,A2,A3,A4,A5 RETS CKIT ;A9=SECRET # MOVE A9,A2 SLL 5,A2 ADDI AREA,A2 MOVE *A2,A2,L CLR A3 MOVY A2,A3 SRL 16,A3 ANDI 0FFFFH,A2 MOVE *A0(OXPOS),A1 SUB A3,A1 ABS A1 CMPI 15,A1 JRNC CKO MOVE *A0(OYPOS),A1 SUB A2,A1 ABS A1 CMPI 15,A1 JRNC CKO SETC CKO RETS AREA .LONG [01FH,050H] SHSTG ;SEND GROUP OF HOSTAGES DOWN AT PLAYER FROM ELEVATOR MOVK 2,A8 CREATE0 LHLPS SEND1 SLEEPK >15 MOVE @WORLDTLY,A0,L ADDI [35,0],A0 MOVE @WORLDTLX,A9,L SRL 16,A9 ADDI 185,A9 MOVY A0,A9 CALLA SENDH_GROUP DSJ A8,SEND1 DIE BAMS movk 7,a10 bnes1 movi BAMSND,a9 movk 10,a0 ;7 CALLA RNDRNG0 addk 3,a0 btst 0,a0 jrz bnes2 movi BAMSND2,a9 bnes2 calla PRCSLP move a9,a0 calla ONESND dsj a10,bnes1 SLEEP 90 DIE GLUCK .WORD >F1F7,>40,>80E5,0 ;"GOOD LUCK" BAMSND .WORD >F3EE,>1,>8081,0 ;BOOM BAMSND2 .WORD >F3EE,>1,>8082,0 ;BOOM2 GATE_EXP: ;EXPLODE ENTIRE GATE ;CHANGE GATE IMAGES TO BLOWN UP GATE IMAGES ;DELETE BACKGROUND BLOCKS WITH ZPOS OF 0AH ;A9=1 OR 2 OF PLAYER WHO KILLED GATE MOVE @TARGET_NUM,A0 JRZ GAG ;ELEVATOR DOORS ;CHECK FOR PROPER WAVE HERE. DO NOT BLOW DOOR IF NOT CORRECT! MOVE @HULK_DN,A1 JRZ GAG2 ;HULK WAVE DONE ;CHECK FOR SCROLL PUSH A0 CLR A1 NOT A1 MOVI TARGPID,A0 CALLA EXISTP JRZ GAGOK PULL A0 DIE GAGOK PULL A0 ;NOT SCROLLING CMPI 2,A0 JRNZ GE1 CREATE0 DOZU JRUC GEO GE1 CMPI 3,A0 JRNZ GEO CREATE0 DOZU2 GEO CREATE0 SHSTG JRUC GAG3 DOZU SLEEP 150 ;NEAR FIRST ELEVATOR MOVE @TMP,A0 JANZ SUCIDE MOVK 4,A10 MOVE A10,@TMP MOVI [20,0],A9 ;Y ADD IN VALUE CREATE0 ZONE_TXT2 ;AWESOME, GO KILL DOWNSTAIRS GO_DOWN SLEEP 190H-120 ;CHECK FOR PLAYERS UP INTO ELEVATOR MOVK 1,A0 MOVE A0,@ICONS_DN CREATE NEUT2PID,DO_NEUTS ELVCK SLEEPK 1 MOVE @WORLDTLY+16,A2 ADDI 45,A2 MOVE @PLYROBJS,A0,L JRZ CKNX MOVE *A0(OYPOS),A1 JRN CKNX CMP A1,A2 JRC ELVCK CKNX MOVE @PLYROBJS+32,A0,L JRZ AHITV MOVE *A0(OYPOS),A1 JRN AHITV CMP A1,A2 JRC ELVCK AHITV ;SMART BOMB SCREEN ;TURN OFF ALL BARRELS/CRATE PROCESSES ;WIPE TO NEW MODULE ;HAVE PLAYERS RUN OUT ONTO NEW SCREEN ;WHAT IF CRUISE MISSILIES ARE COMING DURING SECRET PATH ENTER? MOVE A0,A9 ;A9=PLYR IMG PTR WHO GOT ME FOR SMART BOMB MOVI TARGPID,A0 CLR A1 NOT A1 CALLA KILALL MOVI DELPID,A0 CALLA KILALL MOVI NEUT2PID,A0 CALLA KIL1C movi BOMBNPID,a0 calla KIL1C MOVI WRPSND,A0 CALLA ONESNDOVR MOVI PALB,A11 JSRP FADE_STRT ; movi ->1004,a0 ;Hide screen ; move a0,@DPYSTRT SLEEPK 2 ;KILL EVERYTHING BUT PLAYER STUFF ;SHOW NEW BLIMP MODULE CALLA KILBGND SLEEPK 2 movi NEUT2PID,a0 ;ONGOING NEUTRONS! CALLA KIL1C .REF STRT_UNDER MOVK 1,A10 JSRP STRT_UNDER SLEEPK 2 CLR A1 MOVE A1,@DISPLAYON CALLA BGND_UD1 MOVI UPAL,a0 CALLA BLAKOUT MOVI UFLP,a0 CALLA BLAKOUT MOVI JEEPP,a0 CALLA BLAKOUT MOVI CANDB,a0 CALLA BLAKOUT MOVI STUFFP,a0 CALLA BLAKOUT MOVI FRTCLS,a0 CALLA BLAKOUT MOVI DUXPAL,a0 CALLA BLAKOUT MOVI PALENO,A0 MOVK 2,A1 CALLA FADEIN MOVI PALBNO,A0 CALLA FB_FADEIN SLEEPK 2 MOVK 1,A1 MOVE A1,@DISPLAYON CALLA BGND_UD1 ; movi -4,a0 ;Show screen ; move a0,@DPYSTRT CLR A0 MOVE A0,@HALT SLEEP 50 MOVK 3,A0 MOVE A0,@RUNIN,W ;FROM TOP MOVE @STATUS,A9 BTST 0,A9 JRZ NEXT1 MOVE @PLYRPRCS,A0,L MOVE *A0(TSO_PTR),A1,L MOVE *A0(LEG_PTR),A0,L MOVE @WORLDTLY,A2,L SUBI [20,0],A2 MOVE A2,*A1(OYVAL),L MOVE A2,*A0(OYVAL),L MOVE @WORLDTLX,A2,L ADDI [190,0],A2 MOVE A2,*A1(OXVAL),L MOVE A2,*A0(OXVAL),L MOVK 1,A8 MOVE @RUNIN,A10 ;A10=0 FOR COME IN FROM BOTTOM CREATE SCRPID,SCRIPTPLAY NEXT1 BTST 1,A9 JRZ NEXT2 MOVE @PLYRPRCS+32,A0,L MOVE *A0(TSO_PTR),A1,L MOVE *A0(LEG_PTR),A0,L MOVE @WORLDTLY,A2,L SUBI [20,0],A2 MOVE A2,*A1(OYVAL),L MOVE A2,*A0(OYVAL),L MOVE @WORLDTLX,A2,L ADDI [210,0],A2 MOVE A2,*A1(OXVAL),L MOVE A2,*A0(OXVAL),L MOVK 2,A8 MOVE @RUNIN,A10 ;A10=0 FOR COME IN FROM BOTTOM CREATE SCRPID,SCRIPTPLAY NEXT2 CREATE JOYPID,JOY_UPDATE ;FADE IN COMPLETE MOVI ICN1,A0 ;ICN3 MOVE A0,@ICLIST,L CREATE ICONPID,SEND_ICON SLEEPK 30 clr a0 move a0,@RUNIN CALLA SETC2 ;LAND MINE CYCLE DIE ;MESSAGE SAYING THANKS FOR PLAYING THIS TEST OF T.C. ; move @PLYROBJS+32,a2,L ; move @PLYROBJS,a9,L ; jrz bsn750 ; move a2,a2 ; jrz bsn760 ; movk 1,a0 ;>Give random player the smartbomb pts ; callr rnd ; jrz bsn760 ;bsn750 move a2,a9 ;bsn760 CREATE0 SBOMB ; ; CLR A0 ; MOVE A0,@SCORE_FLAG ; ; MOVI INGAMEOV,A0 ; MOVE A0,@GAMSTATE,W ; SOUND1 MUSICOFF ;MUSIC HARD OFF ; CLR A0 ; CLR A1 ; NOT A1 ; ; CALLA KILALL ;KILL ALL GAME PROCESSES ; ; MOVK 1,A0 ; MOVE A0,@HALT ; .REF CYCSPECT,RD15FONT,WRLD,STRCNRMO,MUSICOFF ; ; ; ;; SLEEP 90 ; ; ; .REF WIPEOUT ; CALLA WIPEOUT ; CREATE COLRPID,CYCSPECT ;START COLOR CYCLE PROCESS ; ; movi DISSND,a0 ;DO DISARM SOUND IF NOT BLOWING ; calla ONESND ; ; MOVI RD15FONT,A11 ;FONT TABLE ; CLR A0 ; MOVE A0,@WRLD ; MOVK 2,A10 ;Y,X SPACING BETWEEN CHARCTERS ; CLR A0 ; ; MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS ; MOVI [55-5,0200],A9 ;SCRN Y/X ; MOVI LINE1,A8 ; JSRP STRCNRMO ; ; MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS ; MOVI [75-5,0200],A9 ;SCRN Y/X ; MOVI LINE2,A8 ; JSRP STRCNRMO ; ; MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS ; MOVI [95-5,0200],A9 ;SCRN Y/X ; MOVI LINE3,A8 ; JSRP STRCNRMO ; ; MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS ; MOVI [115-5,0200],A9 ;SCRN Y/X ; MOVI LINE4,A8 ; JSRP STRCNRMO ; ; MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS ; MOVI [135-5,0200],A9 ;SCRN Y/X ; MOVI LINE5,A8 ; JSRP STRCNRMO ; ; MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS ; MOVI [155-5,0200],A9 ;SCRN Y/X ; MOVI LINE6,A8 ; JSRP STRCNRMO ; ; ; SLEEP 10*60 ; ; MOVI CLSNEUT|TYPTEXT|SUBTXT,A0 ; CLR A1 ; NOT A1 ; CALLA KILOBJ ; ; ; MOVI INGAMEOV,A0 ; MOVE A0,@GAMSTATE,W ; SOUND1 MUSICOFF ;MUSIC HARD OFF ; CLR A0 ; CLR A1 ; NOT A1 ; ; CALLA KILALL ;KILL ALL GAME PROCESSES ; JSRP WNDWON ; .REF GAMEOVER,GAMSTATE ; CREATE GMEOVPID,GAMEOVER ;GAME IS NOW OFFICIALLY OVER ; DIE ;******************************** ;* Get random # with mask ;* Preserves Regs 2-13 ; ;rnd ;A0=Mask, A1/B0=Trashed! ; ; move @RAND,a1,L ; rl a1,a1 ; move @HCOUNT,a14 ; rl a14,a1 ; add sp,a1 ; move a1,@RAND,L ; ; and a1,a0 ;A0=Rnd # ; rets ;Pass CC ;DISSND .WORD >F3EE,>18,>80B0,0 ;KEY MELODY TYPE SND ; ;LINE1 .BYTE "YOU HAVE COMPLETED",0 ;LINE2 .BYTE "THIS TEST OF TOTAL CARNAGE.",0 ;LINE3 .BYTE "THE COMPLETE GAME ARRIVES",0 ;LINE4 .BYTE "IN ONE WEEK. STAY TUNED!",0 ;LINE5 .BYTE "THANK YOU FOR PLAYING.",0 ;LINE6 .BYTE "CODE= ORCS",0 ; .EVEN ; ; DOZU2 SLEEP 150 ;NEAR SECRET ELEVATOR MOVK 3,A10 MOVI [20,0],A9 CREATE0 ZONE_TXT2 ;TRY THESE PASSWORDS JRUC GO_DOWN GAG2 DIE GAG MOVI LORDPID,A0 CLR A1 NOT A1 CALLA KILALL GAG3 MOVI DROPPID,A0 CLR A1 NOT A1 CALLA EXISTP JRZ SKIP ;FOUND CALLA GETA8 ;GET RID OF TEXT MESSAGE "DROP IT" MOVI DOUT,A7 CLR A1 CALLA XFERPROC SKIP MOVI P1DATA,A2 CMPI 1,A9 JRZ PAP MOVI P2DATA,A2 PAP MOVI GATEPT,A1 CALLA SCRADD2 CREATE0 BAMS MOVK 2,A0 MOVE A0,@ARWOFF ;BLINK ARROW A0 MORE TIMES THEN KILL! MOVE @TARGET_NUM,A10 MOVI CLSENMY|TYPGATE,A0 CLR A1 NOT A1 CALLA EXISTOBJ JRZ WHAT2 CLR A1 MOVE A1,*A0(OID),W MOVE *A0(OFLAGS),A1 ORI M_NOCOLL,A1 MOVE A1,*A0(OFLAGS) ;A0=A GATE PNTR WHICH MUST EXPLODE MOVE A0,A8 CREATE0 DO_GATE_EXP1 MOVI CLSENMY|TYPGATE,A0 CLR A1 NOT A1 CALLA EXISTOBJ JRZ WHAT2 CLR A1 MOVE A1,*A0(OID),W MOVE *A0(OFLAGS),A1 ORI M_NOCOLL,A1 MOVE A1,*A0(OFLAGS) MOVE A0,A8 CREATE0 DO_GATE_EXP1 SLEEPK 20 ;20 CALLR DELZ10 MOVE @WAVE,A0 CMPI 18,A0 JRNZ WHAT2 ;NEW RECT RIGHT NOW! MOVI AIRRECT1A,A0 MOVE A0,@CURRENT,L WHAT2 SLEEPK 1 MOVI TARGPID,A0 CLR A1 NOT A1 CALLA EXISTP JRNZ WHAT2 MOVE @WAVE,A0 CMPI 18,A0 JRNZ ASDI ;INTO AIRPORT movk AUDAIRPORT,a0 calla aud_addnumplyrs MOVI 010000H,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 PATHU2,A10 ;INDICATES NEW SCROLL WITH SCRL TABLE CREATE TARGPID,TARGET MOVI GLUCK,A0 CALLA ONESND CLR A9 ;A9=0 FOR UP, 1 FOR RGT CREATE ARWPID,ONARRW ;TURN ON UP ARROW CLR A0 MOVE A0,@TARGET_NUM ; MOVI AIRRECT1A,A0 ; MOVE A0,@CURRENT,L MOVK 13,A0 MOVE A0,@CTOTAL,W ;18 FOR REACTOR, 11 FOR DISH FIX SLEEP 54 MOVK 10,A0 MOVE A0,@ARWOFF DIE AIRRECT1A ;ENTERING AIRPORT AFTER GATE BLOWS .WORD 0C80H,12B5H,0D0AH,1306H .WORD 0D74H,12B5H,0E08H,1306H ;TOP AREA .WORD 0C58H,0FEFH,0CB8H,106DH .WORD 0C7CH,0FECH,0D30H,1044H .WORD 0D8CH,0FECH,0EC5H,1044H .WORD 0C58H,10E5H,0CBCH,1118H .WORD 0 AIRRECT2A ;1ST LOCK DOWN IN AIRPORT .WORD 0C58H,0FEFH,0CB8H,106DH .WORD 0C7CH,0FECH,0D30H,1044H .WORD 0D8CH,0FECH,0E85H,1044H ;EC5 .WORD 0C58H,10E5H,0CBCH,1118H .WORD 0 AIRBRECT2 ;1ST LOCK DOWN IN AIRPORT FOR BULLETS .WORD 0C58H,0FEFH,0CB0H,1060H .WORD 0C7CH,0FECH,0D28H,1037H .WORD 0D8CH,0FECH,0E85H,1037H ;EC5 .WORD 0C58H,10D4H,0CB0H,110CH .WORD 0 PATHU2 ;DIR,CNT .WORD 1,249H,0 ASDI MOVE @WAVE,A0 CMPI 1,A0 JRZ OKAY1 ; ; MOVE A10,A10 ; JRZ OKAY1 ;READY TO GO DOWN STAIRS! SDI DIE DELZ10 ;NOW DELETE SHADOW FROM BAKLST MOVI BAKLST,A2,L MOVK 10,A0 MOVI RAMLST,A4 CLR A5 MOVE A5,*A4,L EXISTOBP: MOVE *A2,A2,L ;GET NEXT JREQ EXISTOBX ;ALL DONE MOVE *A2(OZPOS),A3 CMP A0,A3 ;MATCH? JRNE EXISTOBP ;NO MOVE A2,*A4+,L MOVE A5,*A4,L JRUC EXISTOBP EXISTOBX: MOVI RAMLST,A4 DELP MOVE *A4+,A0,L JRZ DELZX CALLA DELBOBJ JRUC DELP DELZX RETS OKAY1 MOVK 2,A0 MOVE A0,@WAVE SLEEP 60 ;PLAYER THRU FORT GATES ;CAN START NEW TARGET PROC MOVK 1,A0 MOVE A0,@TARGET_NUM ;NEXT TARGET NUMBER FOR SCROLL MOVE @WORLDTLY,A9,L SRL 16,A9 ADDI 160,A9 ;80 ;A9=Y TARGET LINE TO TRIGGER SCROLL CLR A8 ;A8=0 MEANS NOT CHECKING FOR X TARGET CLR A10 CREATE TARGPID,TARGET SLEEP 90 CLR A9 ;A9=0 FOR UP, 1 FOR RGT CREATE ARWPID,ONARRW ;TURN ON UP ARROW SLEEP 53 MOVK 15,A0 MOVE A0,@ARWOFF ;BLINK ARROW X MORE TIMES THEN KILL! DIE START_EXP: ; MOVK 2,A5 ;3 LPIT0 MOVK 3,A10 ;SLEEP THIS LONG BEFORE BLOWING CREATE SHOTPID,EXPTBMB MOVK 8,A10 ;SLEEP THIS LONG BEFORE BLOWING CREATE SHOTPID,EXPTBMB MOVK 14,A10 ;SLEEP THIS LONG BEFORE BLOWING CREATE SHOTPID,EXPTBMB MOVK 2,A10 ;SLEEP THIS LONG BEFORE BLOWING CREATE SHOTPID,EXPTBMB ; DSJ A5,LPIT0 RETS DO_GATE_EXP1: CREATE SHOTPID,GATE_EXP1 CREATE SHOTPID,GATE_EXP_BIG SLEEPK 1CH CREATE SHOTPID,GATE_EXP1 SLEEPK 1CH CREATE SHOTPID,GATE_EXP1 DIE GATE_EXP_BIG SLEEPK 10 MOVK 3,A10 GB1 MOVE *A8(OXVAL),A0,L MOVE *A8(OYVAL),A1,L ADDI [28H,0],A1 MOVE A10,A2 SLL 5,A2 ADDI XOVER,A2 MOVE *A2,A2,L ADD A2,A0 MOVI XPLD1,A2 MOVI 250,A3 MOVI DMAWNZ|M_NOCOLL,A4 MOVI CLSDEAD,A5 ;I DELETE MYSELF ID CLR A6 CLR A7 CALLA BEGINOBJ2 MOVI XBOOMS,A9 CREATE SHOTPID,FRQDELDIE DSJ A10,GB1 DIE XOVER .LONG 0,[0,0],[30,0],[60,0] GATE_EXP1: ;CONTINUE THIS GATES EXPLOSION ;START A SERIES OF EXPLOSIONS SURROUNDING THIS IMAGE ;A8=GATE PNTR ;A10=TARGET_NUM PUSH A10 CLR A9 CALLR START_EXP MOVI [20,-15],A9 ;A9=[Y,X] OFFSET CALLR START_EXP MOVI [20,0],A9 ;A9=[Y,X] OFFSET CALLR START_EXP MOVI [20,20],A9 ;A9=[Y,X] OFFSET CALLR START_EXP PULL A10 SLEEP 60 ;ANI BROKEN GATE IN MOVI ARPRT9,A1 ;BROKEN GATE IMAGE MOVE @WAVE,A0 CMPI 18,A0 JRZ ST1 MOVI BROKN,A1 ;BROKEN GATE IMAGE MOVE A10,A10 JRZ ST1 MOVI BROKN2,A1 ;BROKEN ELEVATOR DOOR IMAGE ST1 MOVE *A8(OFLAGS),A4 CALLA ANI DIE EXPTBMBB: MOVE A11,*A13(MYPLYR) MOVI CLSPLYR|TYPBOMB,A11 MOVE A10,A0 CALLA PRCSLP MOVI DMAWNZ,A4 ;NON-ZERO VALUE JRUC EXPV EXPTBMB: ;EXP TIME BOMB ;A8=TICKING BOMB IMG PNTR ;A9=[Y,X] OFFSET FROM CENTER ;A10=SLEEP TIME BEFORE EXPLOSION STARTS MOVI CLSPLYR|TYPNEUT,A11 ;CLSNEUT MOVE A10,A0 CALLA PRCSLP MOVI DMAWNZ|M_NOCOLL,A4 ;NON-ZERO VALUE EXPV CALLA GETCPNT ;A1=[Y,X] ADD A9,A1 MOVE A9,A8 MOVI -80000H,B0 MOVI 080000H,B1 CALLA RANGRAND MOVE A0,A9 MOVI -80000H,B0 MOVI 80000H,B1 CALLA RANGRAND MOVE A0,A10 MOVI -014000H,B0 MOVI 014000H,B1 CALLA RANGRAND MOVE A0,A6 MOVI -010000H,B0 MOVI 010000H,B1 CALLA RANGRAND MOVE A0,A7 MOVE A8,A8 JRZ REGBMB ;GATE EXPLODING - MAYBE USE RED FIRE BALL MOVI FIREEXP,A8 JRUC FRE REGBMB MOVI BLUEEXP,A8 FRE MOVX A1,A0 ADD A9,A1 ;A1=Y OFFSET MOVE A8,A9 SLL 16,A0 ADD A10,A0 MOVI 292,A3 ;241 ;282 MOVE A11,A5 MOVI CLD1,A2 CALLA BEGINOBJ2 ;CREATE EXPLOSION, AND THEN DIE MOVI EXP2HI,A0 CALLA ONESND jauc FRQDELDIE TBOMBD2 ;AUTOMATIC BOMB DROPPER MOVE A9,*A13(MYPLYR) ;A9=PLAYER 1 OR 2 WHO FIRED ME MOVE A9,*A13(SHKFLG) ;DO NOT SHAKE SCRN AT EXPLODE MOVI P1DATA,A10 DEC A9 JRZ TBO2 MOVI P2DATA,A10 JRUC TBO2 TBOMBD: ;TIME BOMB AT DEATH MOVE A9,*A13(MYPLYR) ;A9=PLAYER 1 OR 2 WHO FIRED ME MOVI P1DATA,A10 DEC A9 JRZ TBO MOVI P2DATA,A10 JRUC TBO TBOMB: ;TIME BOMB PLACEMENT/ EXPLOSION ;A9=1/2 FOR PLAYER # MOVE A9,*A13(MYPLYR) ;A9=PLAYER 1 OR 2 WHO FIRED ME MOVE @WAVE,A0 CMPI 38,A0 JRZ ROUT ;DOWN STAIRS NO RINGS ON BMB CMPI 21,A0 JRZ ROUT ;DOWN STAIRS NO RINGS ON BMB ;TURN ON RINGS WHEN BOMB IS DROPPED CMPI 1,A9 JRZ ONEP MOVE @timerp2,a0 CMPI 350,A0 JRGE ROUT ;IF CURRENT GAME IS TOO LONG! MOVI RNG2PID,A0 CLR A1 NOT A1 CALLA EXISTP JRNZ ROUT MOVK 6,A10 ;TIME RINGS ARE ON CREATE RNG2PID,RINGS ;PLACE RING AROUND PLAYER X JRUC ROUT ONEP MOVE @timerp1,a0 CMPI 350,A0 JRGE ROUT ;IF CURRENT GAME IS TOO LONG! MOVI RNG1PID,A0 CLR A1 NOT A1 CALLA EXISTP JRNZ ROUT MOVK 6,A10 ;TIME RINGS ARE ON CREATE RNG1PID,RINGS ;PLACE RING AROUND PLAYER X ROUT MOVI SETDWN,A0 ;SET DOWN SND CALLA ONESND MOVI P1DATA,A10 DEC A9 JRZ TB1 MOVI P2DATA,A10 TB1 MOVE *A10(BMB_CNT),A0 DEC A0 MOVE A0,*A10(BMB_CNT) TBO CLR A0 MOVE A0,*A13(SHKFLG) ;YES SHAKE SCRN AT EXPLODE TBO2 SLL 5,A9 ADDI PLYROBJS,A9 MOVE *A9,A8,L MOVE *A8(OXVAL),A0,L ADDI 0130000H,A0 MOVE *A8(OYVAL),A1,L ADDI 0150000H,A1 CLR A9 CALLR INTARGET MOVI DMAWNZ|M_FLIPH|M_NOCOLL,A4 ;NON-ZERO VALUE MOVI CLSPLYR|TYPNEUT,A5 ;ID CLR A6 ;XVEL CLR A7 ;YVEL MOVI DET1,A2 ;IMG MOVE A9,A9 JRZ NOOUT ;CRUISE MISSILES CALLED IN ;PASS ALONG MYPLYR FOR POINTS! MOVI XHAIR,A2 MOVI 69,A3 ;ZPOS CALLA BEGINOBJ2 ;NO WORLD ADDED IN MOVI TRGTSND,A0 CALLA ONESND MOVE *A10(TMISLS),A0 INC A0 MOVE A0,*A10(TMISLS) ;TOTAL MISSILES USED CMPI 2,A9 ;2=RANDOM PLACEMENT JRNZ WATE ;RANDOM PLACEMENT MOVE A9,@INEXP MOVE *A8(OXPOS),A0 ;OR SATELITE DISH MOVE *A8(OYPOS),A1 MOVI TARG1,A2 MOVE A0,*A2+,W MOVE A1,*A2,W MOVE @T72PNTR,A0,L MOVE *A0(OPLINK),A1,L MOVE *A1(PDATA+336),A2 ADDK 25,A2 ;12 MOVE A2,*A1(PDATA+336) ;HITS .EQU PDATA+336 ;UHW HITS ABSORBED NOD MOVE *A0(OXPOS),A1 ADDI 40,A1 MOVE *A0(OYPOS),A0 ADDI 40,A0 MOVI TARG2,A2 MOVE A1,*A2+,W ;X MOVE A0,*A2,W ;Y MOVE *A13(MYPLYR),A11 CREATE CMAN,CRUISEA ;ONE MISSILE TO EXACTLY HIT TARGET X ;FOR RANDOM CRUISE STRIKES MOVK 7,A9 ;18 FOR REACTOR, 11 FOR DISH XRAGN CREATE CMAN,CRUISE XB1 SLEEPK 13 MOVE @HALT,A0 JRNZ XB1 DSJ A9,XRAGN SLEEP 25H ;40H ; CLR A0 MOVE A9,@INEXP jauc DELOBJDIE SBSND MOVI SALTXP4,A0 MOVK 2,A1 ;REPEAT IT 3 TIMES CALLA SNDLD ;GO DO IT JSRP BOOMS DIE WATE SLEEPK 2 MOVE @INEXP,A0 ;BMBPID,A0 JRNZ WATE ;OTHER REACTOR DONE BLOWING! MOVE *A8(OYPOS),A0 MOVE @WORLDTLY+16,A1 ADDI 255,A1 CMP A0,A1 JRC NOBLOW ;XHAIR DOWN OFF SCRN! DON'T DO THIS MISSILE ATTACK MOVK 1,A0 MOVE A0,@INEXP ;SMART BOMB MOVE @HULK_DN,A0 INC A0 MOVE A0,@HULK_DN ; MOVE @CTOTAL,A0 ; CMPI 18,A0 ; JRNZ SKPBMB ;IF REACTOR, SMART BOMB ALSO! ;DISH - NO! MOVE @PLYROBJS,A9,L CMPI P2DATA,A10 JRNZ P1D MOVE @PLYROBJS+32,A9,L P1D CREATE0 SBOMB CREATE0 SBSND ;SKPBMB MOVK 1,A0 MOVE A0,@CIRCL_FLG MOVE *A13(KEEPY),A9 jrz crsskp CREATE0 CRSKILL ;GO START THE EXPLOSION OF REACTOR crsskp MOVE A10,A2 MOVE *A2(TBIGSTF),A0 INC A0 MOVE A0,*A2(TBIGSTF) ;TOTAL BIG STUFF DESTROYED MOVI DISHPT,A1 ;POINTS FOR REACTOR OR DISH CALLA SCRADD2 MOVE *A8(OXPOS),A0 ;OR SATELITE DISH MOVE *A8(OYPOS),A1 MOVI TARG1,A2 MOVE A0,*A2+,W MOVE A1,*A2,W MOVI TARG2,A2 MOVE @KEEPT,A3,L MOVE *A3(32),A0,W MOVE *A3,A1,W SUB A1,A0 SRL 2,A0 ;SRL 1,A0 ADD A1,A0 MOVE A0,*A2+,W MOVE *A3(48),A0,W MOVE *A3(16),A1,W SUB A1,A0 SRL 1,A0 ADD A1,A0 MOVE A0,*A2,W MOVE *A13(MYPLYR),A11 CREATE CMAN,CRUISEA ;ONE MISSILE TO EXACTLY HIT TARGET X MOVE @CTOTAL,A9,W ;18 FOR REACTOR, 11 FOR DISH CRAGN CREATE CMAN,CRUISE XB2 SLEEPK 14 MOVE @HALT,A0 JRNZ XB2 ; DSJ A9,CRAGN DEC A9 JRN XB3 JRNZ CRAGN XB3 CALLA DELOBJA8 MOVE @CTOTAL,A9 CMPI 1,A9 ;2=Akhboob face - SET IN ABOSS.ASM JRZ CFD CMPI 8,A9 ;8=DISH JRZ CFD CMPI 13,A9 ;13=JET JRNZ CFDA MOVE A10,A2 MOVI JETPT,A1 ;ADD THIS ON TOP OF DISHPT! MOVE *A2(TBIGSTF),A0 INC A0 MOVE A0,*A2(TBIGSTF) ;TOTAL BIG STUFF DESTROYED CALLA SCRADD2 JRUC CFD CFDA SLEEP 5*60-30 CFD SLEEPK 30 MOVE @HULK_DN,A0 DEC A0 MOVE A0,@HULK_DN NOBLOW CLR A0 MOVE A0,@CIRCL_FLG ;SPIT UP CIRCLES IF YOU LIKE MOVE A0,@INEXP DIE NOOUT MOVI 69,A3 ;ZPOS CALLA BEGINOBJ2 ;NO WORLD ADDED IN MOVI BLINKLST,A9 LOOP SLEEPK 1 JSRP FRANIMQ ;IF OTHER BOMB IS EXPLODING THEN LOOP BACK! MOVI BLINKLST2,A9 MOVE @HALT,A0 JRNZ LOOP MOVE @INEXP,A0 JRNZ LOOP CALLA SCRTST JRZ BLOWME ;OFFSCRN jauc DELOBJDIE BLOWME MOVE A9,@INEXP MOVI DMAWNZ,A4 ;NON-ZERO VALUE MOVE A4,*A8(OFLAGS),W MOVI CLSPLYR|TYPBOMB,A5 ;ID MOVE A5,*A8(OID),W MOVE *A13(SHKFLG),A0 JRNZ NOSHK0 MOVK 10H,A10 ;29 CALLR SHAKER NOSHK0 MOVE *A8(OYPOS),A0 ADDK 10,A0 MOVE A0,*A8(OYPOS) ;START OTHER BLUE EXPLOSIONS MOVK 3,A5 MOVE *A13(MYPLYR),A11 CLR A9 LPIT MOVK 3,A10 ;SLEEP THIS LONG BEFORE BLOWING CREATE SHOTPID,EXPTBMBB MOVK 6,A10 ;SLEEP THIS LONG BEFORE BLOWING CREATE SHOTPID,EXPTBMBB MOVK 8,A10 ;SLEEP THIS LONG BEFORE BLOWING CREATE SHOTPID,EXPTBMBB MOVK 14,A10 ;SLEEP THIS LONG BEFORE BLOWING CREATE SHOTPID,EXPTBMBB MOVK 2,A10 ;SLEEP THIS LONG BEFORE BLOWING CREATE SHOTPID,EXPTBMBB DSJ A5,LPIT MOVI BLUEEXP,A9 JSRP FRANIMQ CALLA DELOBJA8 SLEEPK 10 ;0 CLR A0 MOVE A0,@INEXP DIE CRSKILL ;CRUISE MISSILE TO KILL THIS IMAGE ;A9=Y FOR SEARCHING ;SORT THROUGH OBJLST LOOKING FOR Y=Y IN A9 ;ONCE FOUND, BASED ON IMG, GO TO DIFFERENT BLOW UP CODE MOVI OBJLST,A8,L CILOBP: MOVE *A8,A8,L ;GET NEXT JREQ KILX ;ALL DONE MOVE *A8(OYPOS),A4 SUB A9,A4 ABS A4 SUBK 2,A4 JRHI CILOBP ; CMP A9,A4 ;MATCH? ; JRNZ CILOBP ;NO ;FOUND IMG WITH CORRECT Y VALUE MOVE *A8(OSIZEX),A0 CMPI 104,A0 ;A REACTOR JRZ KILRC CMPI 050H,A0 ;A DISH JRZ KILDS CMPI 0F0H,A0 ;A JET JRZ KILJET JRUC CILOBP KILX DIE KILJET MOVE *A8(OZPOS),A0 CMPI 09AH,A0 JRNZ CILOBP ;KILL JET MOVE *A8(OPLINK),A0,L MOVI DOSWAP,A7 CLR A1 CALLA XFERPROC ;XFER TO JET BLOW MOVI 210,A9 CALLR DO_BONE ;CREATE EXPLOSIONS! CREATE BLOWPID,BLOWJET DIE KILDS ;KILL SATELLITE DISH MOVI 190,A9 CALLR DO_BONE CREATE BLOWPID,BLOWDSH DIE KILRC ;KILL THIS REACTOR MOVI 280,A9 CALLR DO_BONE CREATE BLOWPID,BLOWALL DIE DO_BONE MMTM SP,A10 CMPI P1DATA,A10 JRZ ZY7 MOVE @PLYRPRCS+32,A10,L JRUC ZY8 ZY7 MOVE @PLYRPRCS,A10,L ZY8 CREATE FUTUREPID,BONE MMFM SP,A10 RETS .IF DEBUG .DEF BEACONS BEACONS SLEEP 60 MOVE @WAVE,A9 SLL 5,A9 ADDI TARGL,A9 MOVE *A9,A9,L BTOP MOVE *A9,A0,W JRZ BOU MOVI BCN,A14 CALLA DO_ALL_STUFF MOVE *A9+,A1,W MOVE A1,*A0(OXPOS) MOVE *A9+,A1,W MOVE A1,*A0(OYPOS) MOVI BCN,A14 CALLA DO_ALL_STUFF MOVE *A9+,A1,W MOVE A1,*A0(OXPOS) MOVE *A9+,A1,W MOVE A1,*A0(OYPOS) ADDK 16,A9 JRUC BTOP BOU DIE BCN .LONG [180H,0],[69H,0],SPDBL .WORD 520,DMAWNZ|M_NOCOLL,CLSDEAD ;CLSNEUT .LONG 0,0 .ENDIF TARGL .LONG FAKE,FAKE,FAKE,REC1,FAKE,REC2,FAKE,FAKE,FAKE,FAKE,FAKE ;D1 .LONG FAKE,D1,FAKE,FAKE,D2,FAKE,FAKE,FAKE ;WAVE #'S .LONG TESTJET,FAKE,FAKE,FAKE,FAKE,TESTJET,FAKE,FAKE,JETS3 .LONG FAKE,FAKE,TJET2,FAKE,FAKE,FAKE,FAKE,FAKE,BKWALL .LONG FAKE,FAKE,FAKE,FAKE,FAKE,FAKE,FAKE,FAKE .LONG FAKE,FAKE,FAKE,FAKE,FAKE,FAKE,FAKE,FAKE .LONG FAKE,FAKE,FAKE,FAKE,FAKE,FAKE,FAKE,FAKE .LONG FAKE,FAKE,FAKE,FAKE,FAKE,FAKE,FAKE,FAKE FAKE .WORD 0 XX2 .EQU 241-13 YY2 .EQU 202+48H ; .WORD 626-XX,5070-YY,713-XX,5138-YY ;LEFT DISH FOR BNCING ; .WORD 617-XX2,5055-YY2,723-XX2,5153-YY2,4994+32-YY2 ;DESERT 1 AREA - LFT DISH ; .WORD 757-XX2,5005-YY2,868-XX2,5113-YY2,4951+32-YY2 ;RGT DISH ; .WORD 245+8+4-XX,4077+13+1-YY,245+95-10-XX,4160+81-10-YY ;TOP/BOT DISH FOR BULLTS ; .WORD 245+8-XX,4077+13-YY,245+95-XX,4160+81-YY ;TOP/BOT DISH FOR BNCING ;CRUISE MISSILE STRIKE RECTANGLES JETS3 .WORD 1449+16,1956-16-45H,1449+237,1956+129-35H,1956+30H-35H ;POINTING RIGHT .WORD 1491+16,1740-16-45H,1491+237,1740+129-35H,1740+30H-35H ;POINTING RIGHT .WORD 1391+16,1590-16-45H,1391+237,1590+129-35H,1590+30H-35H ;POINTING RIGHT .WORD 1098+16,1288-16-45H,1098+237,1288+129-35H,1288+30H-35H ;POINTING RIGHT .WORD 1059+16,1140-16-45H,1059+237,1140+129-35H,1140+30H-35H ;POINTING RIGHT .WORD 865+16,1000-16-45H,865+237,1000+129-35H,1000+30H-35H ;POINTING RIGHT .WORD 781+16,834-16-45H,781+237,834+129-35H,834+30H-35H ;POINTING RIGHT .WORD 816+16,682-16-45H,816+237,682+129-35H,682+30H-35H ;POINTING RIGHT .WORD 400+16,611-16-45H,400+237,611+129-35H,611+30H-35H ;POINTING RIGHT ; 53 ALL THE WAY DOWN .WORD 1612+15,2053+10-45H,1612+280,2053+133-35H,2053+30H-35H ;POINTING LEFT .WORD 1684+15,1840+10-45H,1684+280,1840+133-35H,1840+30H-35H ;POINTING LEFT .WORD 1678+15,1636+10-45H,1678+280,1636+133-35H,1636+30H-35H ;POINTING LEFT .WORD 1590+15,1454+10-45H,1590+280,1454+133-35H,1454+30H-35H ;POINTING LEFT .WORD 1362+15,1337+10-45H,1362+280,1337+133-35H,1337+30H-35H ;POINTING LEFT .WORD 1336+15,1196+10-45H,1336+280,1196+133-35H,1196+30H-35H ;POINTING LEFT .WORD 1186+15,1046+10-45H,1186+280,1046+133-35H,1046+30H-35H ;POINTING LEFT .WORD 1036+15,896+10-45H,1036+280,896+133-35H,896+30H-35H ;POINTING LEFT .WORD 530+15,735+10-45H,530+280,735+133-35H,735+30H-35H ;POINTING LEFT .WORD 681+15,549+10-45H,681+280,549+133-35H,549+30H-35H ;POINTING LEFT .WORD 512+15,426+10-45H,512+280,426+133-35H,426+30H-35H ;POINTING LEFT .WORD 0 TESTJET ; .WORD 3189+16,5161-3,3189+237,5161+119,5161+30H ;POINTING RIGHT ; .WORD 3308+63,5057+30,3308+280,5057+123,5057+30H ;POINTING LEFT .WORD 3768+16,4030-26,3768+237,4030+129,4030+30H ;POINTING RIGHT .WORD 4114+16,3690-26,4114+237,3690+129,3690+30H ;POINTING RIGHT .WORD 4497+16,3320-26,4497+237,3320+129,3320+30H ;POINTING RIGHT .WORD 4298+16,3450-26,4298+237,3450+129,3450+30H ;POINTING RIGHT .WORD 3901+16,3808-26,3901+237,3808+129,3808+30H ;POINTING RIGHT ; 53 .WORD 4056+15,3906+0,4056+280,3906+133,3906+30H ;POINTING LEFT .WORD 4384+15,3575+0,4384+280,3575+133,3575+30H ;POINTING LEFT .WORD 4645+15,3455+0,4645+280,3455+133,3455+30H ;POINTING LEFT .WORD 4287+15,3796+0,4287+280,3796+133,3796+30H ;POINTING LEFT .WORD 0 TJET2 .WORD 5405+15,2583+0,5405+280,2583+133,2583+30H ;POINTING LEFT .WORD 0 D1 ;LFT SIDE DISH TOP ;SPECIAL CASE -20 ; .WORD 245+8-XX,4077+13-YY,245+95-XX,4160+81-YY ;TOP/BOT DISH TOGETHER .WORD 245-10-XX2,4077-15-YY2,245+115-XX2,4077+106-20-YY2,4077-YY2-1EH ;LFT SIDE DISH BOTM .WORD 245-10-XX2,4160-15-YY2,245+115-XX2,4160+106-YY2,4160-YY2-1EH .WORD 0 D2 ;LFT SIDE DISH BOTM .WORD 245-10-XX2,2110-15+60H-YY2,245+115-XX2,2110+106+60H-YY2,076CH .WORD 2B8H,5DAH,324H,5DAH+95,5C4H ;RGT DISHES .WORD 2B8H,5DAH+97,324H,6A0H,61CH ;RGT DISHES .WORD 0 REC1 .WORD 268-XX,312-YY-18,370-XX+15,397-YY+10,260-YY ;FIRST REACTOR .WORD 0 REC2 .WORD 274-XX,2195+335-YY,377-XX,2277+365+16-YY,2494-YY ;LFT REACTOR .WORD 490-XX,1974+340-YY,608-XX+180,2397-YY,2269-YY ;RGT HI .WORD 490-XX,2400-YY,608-XX+180,2490-YY,2338-YY ;RGT BTM .WORD 0 BXO .set >578 BYO .set >95 BKWALL .word >ba8-BXO,>130-BYO,>bf3-BXO,>178-BYO,0 .word >ba8-BXO,>130-BYO,>bf3-BXO,>178-BYO,0 .word >ba8-BXO,>130-BYO,>bf3-BXO,>178-BYO,0 .word >ba8-BXO,>130-BYO,>bf3-BXO,>178-BYO,0 .word >ba8-BXO,>130-BYO,>bf3-BXO,>178-BYO,0 .word >bf4-BXO,>130-BYO,>c3e-BXO,>178-BYO,0 .word >bf4-BXO,>130-BYO,>c3e-BXO,>178-BYO,0 .word >bf4-BXO,>130-BYO,>c3e-BXO,>178-BYO,0 .word >bf4-BXO,>130-BYO,>c3e-BXO,>178-BYO,0 .word >bf4-BXO,>130-BYO,>c3e-BXO,>178-BYO,0 .word >bc2-BXO,>150-BYO,>c24-BXO,>188-BYO,0 .word >bc2-BXO,>150-BYO,>c24-BXO,>188-BYO,0 .word >bc2-BXO,>150-BYO,>c24-BXO,>188-BYO,0 .word >bc2-BXO,>150-BYO,>c24-BXO,>188-BYO,0 .word 0 INTARGET ;A0=X,A1=Y ;SET A9=1 IF THIS X/Y IS IN TARGET RANGE MMTM SP,A0,A1,A8 MOVE @T72PNTR,A8,L JRZ INT2 MOVE A1,A4 CALLA GETCPNT MOVE @INEXP,A8 JRNZ INT1 MOVX A1,A6 SUB A4,A1 ABS A1 CMPI [95,0],A1 ;70 ;Y RANGE FROM CENTER JRNC INT1 SLL 16,A6 SUB A6,A0 ABS A0 CMPI [95,0],A0 ;70 ;X RANGE JRNC INT1 MOVK 2,A9 INT1 MMFM SP,A0,A1,A8 RETS INT2 MOVE A0,A4 MOVE A1,A6 SRL 16,A4 ;X SRL 16,A6 ;Y CLR A0 MOVE A0,@KEEPT,L MOVE @WAVE,A0 SLL 5,A0 ADDI TARGL,A0 ;GET FIXED TARGET LIST MOVE *A0,A0,L CLR A7 NEXT0 INC A7 MOVE A0,A5 MOVE *A0+,A1,W JRZ OUT CMP A1,A4 JRLT NEXT ;IF BRNCH RECT LFT EDGE > PLYR X MOVE *A0+,A1,W CMP A1,A6 JRLT NEXTA ;IF BRNCH RECT TOP EDGE > PLYR Y MOVE *A0+,A1,W CMP A1,A4 JRGT NEXTB ;IF BRNCH RECT RGT EDGE < PLYR X MOVE *A0+,A1,W CMP A1,A6 JRGT NEXTZ ;IF BRNCH RECT BOT EDGE < PLYR Y ;HIT ;YES WILL ATTACK THIS FIXED SPOT MOVE @CRSRAM,A1,L BTST A7,A1 JRNZ NEXTZ SLL 5,A7 ADDI TTB,A7 MOVE *A7,A7,L OR A7,A1 MOVE A1,@CRSRAM,L MOVK 1,A9 MOVE A5,@KEEPT,L MOVE *A0,A0,W MOVE A0,*A13(KEEPY) OUT MMFM SP,A0,A1,A8 RETS NEXT ADDK 16,A0 ;48 NEXTA ADDK 16,A0 ;32 NEXTB ADDK 16,A0 NEXTZ ADDK 16,A0 JRUC NEXT0 TTB .LONG 0,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192 .LONG 8192*2,8192*4,8192*8,8192*16,8192+32 .LONG 8192*64,8192*128,8192*256,8192*512 .LONG 8192*1024,8192*2048,8192*4096 CRUISE2 ;A8=MISSILE MOVE *A9+,A0,L JRZ ENDI MOVE *A8(OXVEL),A1,L ADD A0,A1 MOVE A1,*A8(OXVEL),L SLEEPK 4 JRUC CRUISE2 ENDI MOVK 10H,A10 ;29 CALLR SHAKER DIE ARC1 .LONG 20000H,018000H,0C000H,6000H,02000H .LONG -02000H,-5000H,-08000H,-010000H,-18000H,0 ARC2 .LONG -20000H,-018000H,-0C000H,-6000H,-02000H .LONG 02000H,5000H,08000H,010000H,18000H,0 SHRINK .LONG CRS12V2 .WORD 3 .LONG CRS12V3 .WORD 3 .LONG CRS12V4 .WORD 3 .LONG CRS12V5 .WORD 3 .LONG CRS12V6 .WORD 3 .LONG CRS12V7 .WORD 3 .LONG 0 CRUISEA ;A8=XHAIR IMG ;CRUISE IN FROM BOTTOM MOVE A11,*A13(MYPLYR) MOVI CR12,A14 CALLA DO_ALL_STUFF MOVE *A8(OXPOS),A1 MOVE *A8(OYPOS),A10 ADDI 250,A10 MOVE A1,*A0(OXPOS) MOVE A10,*A0(OYPOS) MOVE A0,A8 SUBI 250,A10 JRUC CRTOP ;CRSSND3 .WORD >F5F3,>3A,>80C6,0 ;CRUISE MISSILE COMING IN CRUISE ;A8=XHAIR IMG ;A10=TARGET COORDS FOR POSITIONING MOVE A11,*A13(MYPLYR) CALLA RANDOM ANDI 03FH,A0 MOVI TARG1,A10 BTST 0,A0 JRZ CX1 MOVI TARG2,A10 CX1 CALLA PRCSLP MOVI CRSSND,A0 CALLA ONESND ; SLEEPK 1 ; MOVI CRSSND3,A0 ; CALLA ONESND ;CRUISE IN FROM TOP ;CRUISE IN FROM BOTTOM MOVI CR12,A14 CALLA DO_ALL_STUFF MOVE A0,A8 MOVE *A10(16),A1 ADDI 240,A1 MOVI -8,B0 MOVK 8,B1 CALLA RANGRAND ADD A0,A1 MOVE A1,*A8(OYPOS) MOVE @WORLDTLX,A4,L CLR B0 MOVI 150,B1 CALLA RANGRAND MOVE *A10,A1 ADD A1,A0 MOVE @PCNT,A2 BTST 0,A2 JRZ HAF0 SUBI 070H,A0 MOVE A0,*A8(OXPOS) MOVE *A10,A5 ADDK 08H,A5 JRUC HAFF HAF0 ADDI 070H,A0 MOVE A0,*A8(OXPOS) MOVE *A10,A5 SUBI 038H,A5 HAFF MOVI -10,B0 MOVK 10,B1 CALLA RANGRAND ADD A0,A5 MOVE *A10(16),A6 MOVI 070H,A7 CALLA XYSEEK2 MOVE A5,*A8(OXVEL),L MOVE A6,*A8(OYVEL),L MOVE *A8(OXPOS),A0 MOVE @PCNT,A1 BTST 0,A1 JRZ HAF ADDI 070H,A0 MOVI ARC2,A9 JRUC HAF2 HAF MOVI ARC1,A9 SUBI 070H,A0 HAF2 MOVE A0,*A8(OXPOS) CREATE CMAN,CRUISE2 MOVE *A10(16),A10 CRTOP SLEEPK 1 MOVE *A8(OYPOS),A0 SUB A10,A0 ABS A0 CMPI 30H,A0 JRGT CRTOP MOVI SHRINK,A9 JSRP FRANIMQ CLR A0 MOVE A0,*A8(OXVEL),L MOVE A0,*A8(OYVEL),L move @WAVE,a0 cmpi 36,a0 jreq wv36 MOVE @T72PNTR,A0 JRZ FD ;TURN ON COLLISIONS WITH THIS IMG FOR JUST A TICK OR TWO wv36 MOVI DMAWNZ,A4 ;NON-ZERO VALUE MOVE A4,*A8(OFLAGS),W MOVI CLSPLYR|TYPBOMB,A5 ;ID MOVE A5,*A8(OID),W FD MOVI ALTEXP5,A0 CALLA ONESND MOVI XBOOM2,A9 jauc FRQDELDIE CR12: .LONG 0,0,CRS12V1 .WORD 370,DMAWNZ|M_NOCOLL,CLSDEAD .LONG 0,-30000H ;XVL: .LONG 0,0B333H,019999H,019999H,019999H,019999H,019999H,0B333H,0 ; .LONG -0B333H,-019999H,-019999H,-019999H,-019999H,-019999H,-0B333H ;YVL: .LONG -019999H,-019999H,-019999H,-0CCCCH,0,0CCCCH,019999H,019999H,019999H ; .LONG 019999H,019999H,0CCCCH,0,-0CCCCH,-019999H,-019999H ;XVL: .LONG 0,08000H,0C000H,012000H,020000H,0,0,0,0,0,0,0,-20000H ; .LONG -12000H,-0C000H,-08000H ;YVL: .LONG -04000H,-03000H,-01000H,2000H,10000H,0,0,0,0,0,0,0,10000H ; .LONG 2000H,-1000H,-3000H,-4000H ;DIR TO FACE IN A0 ; 01 ; 16 02 ; 15 03 ; 14 04 ; 13 05 ; 12 06 ; 11 07 ; 10 08 ; 09 ;701 ;6 2 ;543 ;CVRT2 .BYTE 0,5,13,9,1,7,11,3,15,6,12,2,16,8,10,4 ; 04 ; 12 11 ; 08 07 ; 16 15 ; 02 01 ; 10 09 ; 06 05 ; 14 13 ; 03 ;GETHDR - RETURNS 1 OF 16 DIRECTIONS BASED ON OBJECTS X,Y VELOCITIES ;PARAMS: ; A1 = OBJ X VELOCITY ; A2 = OBJ Y VELOCITY ;RETURNS: ; A0 = 4,B,7,F,1,9,5,D,3,E,6,A,2,10,8,C = CW DIRECTION STARTING AT 12 O'CLOCK ; 4 ; 2 1 ; 3 GETHDR: MOVE A1,A3 MOVE A2,A4 ABS A3 ;ABSOLUTE X VELOCITY ABS A4 ;ABSOLUTE Y VELOCITY MOVE A3,A5 ADD A4,A5 ;SUM Y+X JRNE GAD1 ;BR = THERE IS A DIRECTION HERE! CLR A3 ;STANDING CASE JRUC SETDVAL GAD1: MOVK 3,A5 MOVK 3,A7 MPYU A3,A5 ;CALC 3*X MPYU A4,A7 ;CALC 3*Y CMP A7,A3 ;XV>3*YV ? JRHS GADX ;BR = CHECK X VELOCITY CASE CMP A5,A4 ;YV>3*XV ? JRHS GADY ;BR = CHECK Y VELOCITY CASE ; ;DIAGONAL XY VELOCITY CASE ;4 POSSIBLE QUADRANTS 0-3 ; 3 2 ; 1 0 MOVE A1,A3 ;SAVE X,Y VELOCITIES MOVE A2,A4 SRL 31,A1 ;X VEL SRL 31,A2 ;Y VEL SLL 1,A2 ADD A1,A2 ;WE NOW HAVE THE QUADRANT NOW CHECK FOR 1 OF 3 DIRECTIONS WITHIN QUADRANT ;IN A2 ABS A3 ;X UNSIGNED COMPARE ABS A4 ;Y CMP A3,A4 ;Y>X? JRGT DIFF ;BR = YES SUB A4,A3 CMPI >2800,A3 ;-4000? JRLT INRNGE ;WITHIN RANGE, USE QUADRANT K ADDK 9,A2 ;RANGE LO JRUC SETRNGE DIFF: SUB A3,A4 CMPI >2800,A4 ;+4000 JRLT INRNGE ;WITHIN RANGE USE QUADRANT K ADDK >D,A2 ;RANGE HI JRUC SETRNGE INRNGE: ADDK 5,A2 SETRNGE: MOVE A2,A3 JRUC SETDVAL ;X VELOCITY CASE GADX: MOVK 1,A3 ;DISCRETE RYTE MOVE A1,A1 JRNN SETDVAL ; MOVK 2,A3 ;LEFT JRUC SETDVAL ;Y VELOCITY CASE GADY: MOVK 3,A3 ;DISCRETE DOWN MOVE A2,A2 JRNN SETDVAL MOVK 4,A3 ;UP ;HAVE OFFSET IN A3 SETDVAL: MOVE A3,A0 RETS BLINKLST .LONG DET1 .WORD 5 .LONG DET2 .WORD 5 .LONG DET3 .WORD 5 .LONG DET1 .WORD 3 .LONG DET2 .WORD 3 .LONG DET3 .WORD 3 .LONG DET1 .WORD 3 .LONG DET2 .WORD 3 .LONG DET3 .WORD 3 BLINKLST2 .LONG DET1 .WORD 1 .LONG DET2 .WORD 1 .LONG DET3 .WORD 1 .LONG DET1 .WORD 1 .LONG DET2 .WORD 1 .LONG DET3 .WORD 1 .LONG DET1 .WORD 1 .LONG DET2 .WORD 1 .LONG DET3 .WORD 1 .LONG 0 FIREEXP: .LONG KBM1 .WORD NEWPALET|4 .LONG BULLET .LONG KBM2 .WORD 4 .LONG KBM3 .WORD 4 .LONG KBM4 .WORD 4 .LONG KBM5 .WORD 4 .LONG KBM6 .WORD 4 .LONG KBM7 .WORD 4 .LONG 0 BLUEEXP: .LONG CLD1 .WORD NEWPALET|3 .LONG BLUBOOM .LONG CLD2 .WORD 3 .LONG CLD3 .WORD 3 .LONG CLD4 .WORD 3 .LONG CLD4A .WORD 3 .LONG CLD4B .WORD 3 .LONG CLD5 .WORD 3 .LONG CLD6 .WORD 3 .LONG CLD7 .WORD 3 .LONG CLD8 .WORD 3 .LONG CLD9 .WORD 3 .LONG CLD10 .WORD 3 .LONG CLD11 .WORD 3 .LONG 0 GOT_HSTG: ;A8=HOSTAGE PNTR ;A0=PLYR PNTR MMTM SP,A1,A7,A9,A11 MOVE A0,A9 MOVE *A0(OPLINK),A0,L MOVE *A0(DEAD),A0 JRNZ GOUT MOVE *A8(OFLAGS),A1 ORI M_NOCOLL,A1 MOVE A1,*A8(OFLAGS) MOVE *A8(OPLINK),A0,L MOVI EXPHSTG,A7 MOVI FUTUREPID,A1 CALLA XFERPROC GOUT MOVK 1,A0 MOVE A0,@OUT_FLG MMFM SP,A1,A7,A9,A11 RETS THNKU2 .WORD >F9EF,>30,>810F,0 ;GIRL "THANK YOU" THNKU3 .WORD >F9EF,>38,>8112,0 ;GIRL "MY HERO" GIRLST .LONG SHCAKLDC1 .LONG SHCAKLDC2 .LONG SHCAKLDC3 .LONG SHCAKLDC4 .LONG SHCAKLDE1 ;FEMALE REPORTER .LONG DOC1 .LONG DOC2 .LONG DOC3 .LONG DOC4 .LONG BGRL1 .LONG BGRL2 .LONG BGRL3 .LONG GRL1 .LONG GRL2 .LONG GRL3 .LONG GRL4 .LONG BABE1 .LONG BABE2 .LONG BABE3 .LONG BABE4 .LONG 0 EXPHSTG: ;A9=PLYR PNTR ;A8=HOSTAGE IMG ;BEEM OUT HOSTAGE ;FLOAT PNTS TOWARD SCOREBOARD ;THANK-YOU SPEECH CALL CLR A0 MOVE A0,*A8(OXVEL),L MOVE A0,*A8(OYVEL),L MOVI THNKU,A0 MOVE *A8(OIMG),A2,L MOVI GIRLST,A3 CKGIRL MOVE *A3+,A4,L JRZ CKOP CMP A4,A2 JRNZ CKGIRL MOVI THNKU2,A0 MOVE @HCOUNT,A1 BTST 0,A1 JRZ CKOP MOVI THNKU3,A0 CKOP CALLA ONESND MOVI SCASH3,A0 CALLA ONESND MOVE *A9(OPLINK),A9,L MOVE *A9(PNUM),A10 MOVE *A8(OID),A11 MOVI CLSDEAD,A0 MOVE A0,*A8(OID),W ;HOSTAGE MOVI DMAWNZ|M_NOCOLL,A0 MOVE A0,*A8(OFLAGS),W MOVE *A8(OYPOS),A0 SUBK 10,A0 MOVE A0,*A8(OYPOS) MOVI DOTLST,A9 ;DISSIPATE HOSTAGE JSRP FRANIMQ ;CHANGE IMAGE TO PNTS AND FLOAT TOWARDS SCOREBOARD ;A10=PNUM MOVI 300,A0 MOVE A0,*A8(OZPOS) ;PUT PNTS UP HIGH! MOVI P1DATA,A2 ;FOR SCRADD DEC A10 JRZ P1YES MOVI P2DATA,A2 P1YES MOVE @GAMSTATE,A0 CMPI INAMODE,A0 JRZ P1YY MOVE *A2(THSTGS),A0 CMPI 297,A0 JRGT P1YY INC A0 MOVE A0,*A2(THSTGS) ;TOTAL HOSTAGES P1YY CMPI CLSNEUT|TYPHSTG|SUBRUN,A11 JRNZ P1YES2 ;RUNNING HSTG SCORES MINIMUM PNTS MOVK 10H,A1 ;TEN POINTS FOR RUNNING HOSTAGES MOVI 32*1,A6 ;POINT AT BONUS TEN IMG JRUC SCRIT P1YES2 SLL 5,A10 MOVE *A2(PTSRAM),A0 INC A0 ;POINTS INCREASE FOR SUCCESSIVE HSTGS CMPI 11,A0 JRC SKIPAD MOVK 10,A0 ;KEEP IT AT 10 POINTS UNTIL DEATH! SKIPAD MOVE A0,*A2(PTSRAM) SLL 5,A0 MOVE A0,A6 MOVI HPNTR,A1 ;AMOUNT OF SCORE TABLE ADD A1,A0 MOVE *A0,A1,L SCRIT ;A2=P1/P2DATA CALLA SCRADD2 ;DO IT! MOVE A6,A1 ADDI PIMG,A1 MOVE *A1,A1,L MOVE *A8(OFLAGS),A4 CALLA ANI CALLR CYCLEON MOVI 40,B0 MOVI 80,B1 CALLA RANGRAND CALLA PRCSLP CLR A11 INHERE: ;JEWEL ON GROUND JUMPS IN HERE ;EXTRA BMB IMAGES JUMP IN HERE ;KEY ICON JUMPS IN HERE ;A10=0 OR 1 FOR PLYR # ;A8=ICON IMG ;A11=1 IF FROM KEY FLOATING TO SCORE BOARD CLR A5 CLR A6 MOVE @WORLDTL,A0,L MOVY A0,A6 ;Y VALUE TO SCROLL TO IN A10 SRL 16,A6 ADDK 14H,A6 ;Y ZEXT A6 MOVX A0,A5 ;X VALUE TO SCROLL TO IN A9 ADDI 28H,A5 MOVE A10,A10 JREQ UPLC ;PLYR 2 TV SEEK ADDI 0118H,A5 UPLC MOVI 80H,A7 ;60 CALLA XYSEEK2 MOVE A5,*A8(OXVEL),L MOVE A6,*A8(OYVEL),L MOVK 11,A9 SLPC MOVE @WORLDTL+16,A6 MOVE @WORLDTL,A5 MOVE A10,A10 JREQ UPLCZ ;PLYR 2 TV SEEK ADDI 0300,A5 UPLCZ MOVE *A8(OYPOS),A0 SUB A6,A0 CMPI 40,A0 JRNC NXPC MOVE *A8(OXPOS),A0 SUB A5,A0 CMPI 100,A0 JRC DNSLPC NXPC SLEEPK 6 MOVE @HALT,A0 JRNZ NXPC DSJ A9,SLPC DNSLPC ;DELETE FLOATING IMAGE CALLA DELOBJA8 MOVE A11,A11 ;IF A11=0, IT IS NOT AN ICON JANZ IP DIE HPNTR .LONG 0,10H,20H,30H,40H,50H,60H,70H,80H,90H,100H PIMG .LONG 0,PTS1,PTS2,PTS3,PTS4,PTS5,PTS6,PTS7,PTS8,PTS9,PTS10 CYCLEON ;TURN ON HOSTAGE PNTS COLOR CYCLE ;OR ADD TO ITS LIFE SPAN MOVE @AFTR_WRP,A0 JRNZ CYR MOVE @CYCLIFE,A0 JRZ CYCON ADDK 2,A0 ;3 SECONDS MORE MOVE A0,@CYCLIFE CYR RETS CYCON ;CYCLE POW BONUS POINTS MMTM SP,A8,A10 MOVI [63,1],A8 ;START AT COLOR 60, CYCLE 1 COLOR MOVI PPLP,A9 ;PAL NAME MOVI COLTAB,A10 ;TABLE TO CYCLE WITH MOVK 3,A11 ;RATE OF CYCLE IN TICKS CREATE POWPID,CYCLE_TABLE ;START PROCESS TO DO CYCLE MOVE A0,A9 CREATE POWPID,CKCYC MMFM SP,A8,A10 RETS 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 ;NEED A DUPLICATE SET .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 -1 CKCYC ; DIE MOVK 2,A0 ;FOR 3 SECONDS MOVE A0,@CYCLIFE CK2 SLEEP 60 MOVE @CYCLIFE,A0 DEC A0 MOVE A0,@CYCLIFE JRNZ CK2 MOVE A9,A0 CALLA KILL DIE DOTLST: ;DISSIPATE HOSTAGE .LONG BM1 .WORD NEWPALET|2 .LONG PPLP .LONG BM2 .WORD 2 .LONG BM3 .WORD 2 .LONG BM4 .WORD 2 .LONG BM5 .WORD 2 .LONG BM6 .WORD 2 .LONG BM7 .WORD 2 .LONG BM8 .WORD 2 .LONG BM9 .WORD 2 .LONG BM10 .WORD 2 .LONG 0 BMLM2: ;TIME BOMB HITS LAND MINE MMTM SP,A1,A7,A11 MOVE *A8(OPLINK),A1,L MOVE *A1(MYPLYR),A1 MOVI P1DATA,A2 CMPI 1,A1 JRZ ABM2 MOVI P2DATA,A2 CMPI 2,A1 JRNZ SKPBM ABM2 MOVI MINEPT,A1 PUSH A0 CALLA SCRADD2 PULL A0 SKPBM MOVE *A0(OFLAGS),A1 ORI M_NOCOLL,A1 MOVE A1,*A0(OFLAGS) MOVE A0,A10 CREATE0 EXPMINE MOVE *A10(OPLINK),A0,L JRZ SKP2 CALLA KILL SKP2 MOVI MTING,A0 ;LAND MINE EXPLOSION SND CALLA ONESND MOVK 1,A0 MOVE A0,@OUT_FLG MMFM SP,A1,A7,A11 RETS EXPMINE2: CALLR DOXYM CREATE CMAN,DOMORE CREATE CMAN,DOMORE CREATE CMAN,DOMORE CREATE CMAN,DOMORE CREATE CMAN,DOMORE MOVI 72,A0 MOVE A0,*A8(OZPOS) JRUC BLOW EXPMINE: ;FOR BLOWING UP LAND MINE WHEN PLYR STEPS ON IT OR TIME BOMB PLACED NEARBY! ;A10=LAND MINE IMAGE PNTR CALLR DOXYM BLOW MOVI BOOM3,A9 jauc FRQDELDIE DOXYM MOVE A10,A8 MOVE *A8(OFLAGS),A0 ORI M_NOCOLL,A0 MOVE A0,*A8(OFLAGS) MOVE *A8(OYPOS),A0 ADDK 06H,A0 MOVE A0,*A8(OYPOS) MOVE *A8(OXPOS),A0 ADDK 06H,A0 MOVE A0,*A8(OXPOS) MOVI 100,A0 MOVE A0,*A8(OZPOS) ; MOVE *A8(OIMG),A0,L ; CMPI M1,A0 ; JRZ RRET ; MOVE *A8(OPLINK),A0,L ; CALLA KILL ;RRET RETS DOMORE MOVE *A8(OYVAL),A1,L MOVI EXPL1,A2 ;DOES NOT MATTER MOVI 72,A3 ;69 MOVI DMAWNZ,A4 ;NON-ZERO VALUE CLR A5 MOVI -9000H,B0 MOVI 9000H,B1 CALLA RANGRAND MOVE A0,A6 MOVI -9000H,B0 MOVI 9000H,B1 CALLA RANGRAND MOVE A0,A7 MOVE *A8(OXVAL),A0,L CALLA BEGINOBJ2 JRUC BLOW ; SHAKER - SHAKE SCREEN AS AS IF AN EARTHQUAKE IS IN EFFECT ; A10 = # TICKS TO SHAKE AND POWER OF SHAKE ; NOTE: TIME TO SHAKE MUST BE MORE THAN 6 TICKS ; RETURNS: ; NOTHING AT ALL SHAKER: MOVE @SHK_ON,A0 JRNZ SHKOUT MOVE A10,A11 MOVK 6,A0 MOVE A0,@SHK_ON DIVS A0,A11 MOVE A0,@AMP MOVE A11,@AMPCNT CREATE0 SHAKELP SHKOUT RETS SHAKELP: CLR B0 MOVE @AMP,B1 CALLA RANGRAND MOVE A0,@XSET CLR B0 MOVE @AMP,B1 CALLA RANGRAND MOVE A0,@YSET MOVI 500,A0 CALLA RANDPER JRC SHAKEY SHAKEX: MOVE @XSET,A1 MOVE @WORLDTLX,A0,L SLL 16,A1 ADD A1,A0 MOVE A0,@WORLDTLX,L SLEEPK 1 MOVE @XSET,A1 MOVE @WORLDTLX,A0,L SLL 16,A1 SUB A1,A0 MOVE A0,@WORLDTLX,L JRUC SHAKELP SHAKEY: MOVE @YSET,A1 MOVE @WORLDTLY,A0,L SLL 16,A1 ADD A1,A0 MOVE A0,@WORLDTLY,L SLEEPK 1 MOVE @YSET,A1 MOVE @WORLDTLY,A0,L SLL 16,A1 SUB A1,A0 MOVE A0,@WORLDTLY,L MOVE @AMPCNT,A2 DEC A2 MOVE A2,@AMPCNT JRNZ AMPOK MOVE A11,@AMPCNT MOVE @AMP,A0 CMPI 1,A0 JRZ AMPOK DEC A0 MOVE A0,@AMP AMPOK: DSJ A10,SHAKELP MOVE A10,@SHK_ON DIE ANI_HSTG: ;A8=HSTG IMAGE FROM BACKGROUND UPDATER ;A9=HOSTAGE # ;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN MOVE A13,*A8(OPLINK),L SLL 5,A9 MOVE @HSTGSET,A0 JRNZ HS1 CALLA RANDOM MOVE A0,A10 ANDI 0FH,A10 SLL 5,A10 ADDI HSTGLST2,A10 ;BALL AND CHAIN MOVE *A10,A9,L JRUC HSO HS1 ADDI HSTGLST,A9 ;STUCK IN GOO MOVE *A9,A9,L HSO MOVE A9,A11 MOVE *A9,A1,L MOVE *A8(OFLAGS),A4 CALLA ANI CALLR AHELP MOVK 1,B0 MOVI 90,B1 ;91 CALLA RANGRAND ; MOVE A0,A10 CALLA PRCSLP ANIH0 MOVK 12,A10 ;5 ANIHSTG JSRP FRANIMQ MOVE A11,A9 CALLR AHELP DSJ A10,ANIHSTG CALLA SCRTST JRZ ANIH0 TNTIT MOVE @HSTGS_LOST,A0 INC A0 MOVE A0,@HSTGS_LOST jauc DELOBJDIE AHELP MOVI 180,A0 CALLA RANDPER JRNC AJ1 ANDI 07H,A0 SLL 5,A0 ADDI HELPS,A0 MOVE *A0,A0,L CALLA ONESND AJ1 RETS HELP .WORD >F97E,>24,>80C1,0 ;"HELP" HELP2 .WORD >F97F,>34,>80BF,0 ;"OVER HERE" HELP3 .WORD >F97E,>24,>80F1,0 ;WHISTLE HELP4 .WORD >F87E,>24,>80D6,0 ;WHISTLE HELPS .LONG HELP,HELP2,HELP3,HELP4,HELP5,HELP6,HELP7,HELP8 .LONG HELP,HELP2,HELP3,HELP5,HELP5,HELP6,HELP6,HELP6 HELP5 .WORD >F97F,>34,>810D,0 ;GIRL HELP ME HELP6 .WORD >F9CF,>44,>810E,0 ;GIRL "OVER HERE" HELP7 .WORD >F9CF,>44,>8110,0 ;GIRL SAVE ME HELP8 .WORD >F97F,>34,>8111,0 ;GIRL HELP ME ; HSTGLST .LONG HGUYA,HGUYB,HGUYC,HGUYD HSTGLST2 .LONG HGUYH,HGUYH ;FAT TOURIST .LONG HGUYI ;FAT GREEN GUY .LONG HGUYA2,HGUYA2 ;BIKINI .LONG HGUYB2,HGUYB2 .LONG HGUYC2,HGUYC2 .LONG HGUYD2 ;GOLD REPORTER GUY .LONG HGUYE2,HGUYE2 ;FEMALE REPORTER .LONG HGUYF2 ;GUY WATCHING (YELLOW TREK SHIRT) .LONG HGUYG2,HGUYG2,HGUYG2 ;CAMERA MAN HGUYG2 .LONG SHCAKLDD1 ;CAMER MAN .WORD 4 .LONG SHCAKLDD2 .WORD 4 .LONG SHCAKLDD1 .WORD 4 .LONG SHCAKLDD2 .WORD 4 .LONG SHCAKLDD1 .WORD 4 .LONG SHCAKLDD2 .WORD 4 .LONG SHCAKLDD1 .WORD 4 .LONG SHCAKLDD3 .WORD 60 .LONG SHCAKLDD2 .WORD 6 .LONG SHCAKLDD1 .WORD 6 .LONG SHCAKLDD2 .WORD 6 .LONG SHCAKLDD1 .WORD 6 .LONG SHCAKLDD2 .WORD 6 .LONG SHCAKLDD1 .WORD 6 .LONG SHCAKLDD2 .WORD 90 .LONG SHCAKLDD3 .WORD 40 .LONG 0 HGUYA2 .LONG SCHAKLDA1 .WORD 4 .LONG SCHAKLDA2 .WORD 4 .LONG SCHAKLDA1 .WORD 4 .LONG SCHAKLDA2 .WORD 4 .LONG SCHAKLDA1 .WORD 4 .LONG SCHAKLDA2 .WORD 4 .LONG SCHAKLDA1 .WORD 4 .LONG SCHAKLDA3 .WORD 60 .LONG SCHAKLDA2 .WORD 6 .LONG SCHAKLDA1 .WORD 6 .LONG SCHAKLDA2 .WORD 6 .LONG SCHAKLDA1 .WORD 6 .LONG SCHAKLDA2 .WORD 6 .LONG SCHAKLDA1 .WORD 6 .LONG SCHAKLDA2 .WORD 90 .LONG SCHAKLDA3 .WORD 40 .LONG 0 HGUYH .LONG SHACKX1 ;CAMERA ON TOURIST .WORD 200 .LONG SHACKX2 .WORD 4 .LONG SHACKX3 .WORD 90 .LONG SHACKX2 .WORD 4 .LONG 0 HGUYI .LONG SHACKY1 ;FAT GREEN GUY .WORD 200 .LONG SHACKY2 .WORD 4 .LONG SHACKY3 .WORD 4 .LONG SHACKY2 .WORD 4 .LONG SHACKY3 .WORD 4 .LONG SHACKY2 .WORD 4 .LONG SHACKY3 .WORD 4 .LONG SHACKY2 .WORD 4 .LONG SHACKY3 .WORD 4 .LONG SHACKY2 .WORD 4 .LONG SHACKY3 .WORD 4 .LONG SHACKY2 .WORD 4 .LONG SHACKY3 .WORD 100 .LONG SHACKY2 .WORD 4 .LONG 0 HGUYB2 .LONG SCHAKLDB4 .WORD 4 .LONG SCHAKLDB1 .WORD 4 .LONG SCHAKLDB2 .WORD 4 .LONG SCHAKLDB3 .WORD 50 .LONG SCHAKLDB2 .WORD 4 .LONG SCHAKLDB1 .WORD 4 .LONG SCHAKLDB4 .WORD 60 .LONG SCHAKLDB1 .WORD 6 .LONG SCHAKLDB2 .WORD 6 .LONG SCHAKLDB3 .WORD 6 .LONG SCHAKLDB2 .WORD 6 .LONG SCHAKLDB1 .WORD 6 .LONG SCHAKLDB2 .WORD 6 .LONG SCHAKLDB3 .WORD 30 .LONG SCHAKLDB2 .WORD 6 .LONG SCHAKLDB1 .WORD 6 .LONG SCHAKLDB4 .WORD 90 .LONG 0 HGUYD2 .LONG REPO1 ;GOLD REPORTER GUY .WORD 1000 .LONG 0 HGUYE2 .LONG SHCAKLDE1 ;FEMALE REPORTER .WORD 1000 .LONG 0 HGUYF2 .LONG SHCAKLDF1 ;GUY WATCHING .WORD 1000 .LONG 0 HGUYC2 .LONG SHCAKLDC4 .WORD 4 .LONG SHCAKLDC3 .WORD 4 .LONG SHCAKLDC1 .WORD 4 .LONG SHCAKLDC2 .WORD 4 .LONG SHCAKLDC1 .WORD 4 .LONG SHCAKLDC3 .WORD 60 .LONG SHCAKLDC4 .WORD 90 .LONG SHCAKLDC3 .WORD 4 .LONG SHCAKLDC1 .WORD 4 .LONG SHCAKLDC2 .WORD 4 .LONG SHCAKLDC1 .WORD 4 .LONG SHCAKLDC3 .WORD 4 .LONG SHCAKLDC1 .WORD 4 .LONG SHCAKLDC2 .WORD 4 .LONG SHCAKLDC1 .WORD 4 .LONG SHCAKLDC3 .WORD 4 .LONG SHCAKLDC1 .WORD 4 .LONG SHCAKLDC2 .WORD 4 .LONG SHCAKLDC1 .WORD 4 .LONG SHCAKLDC3 .WORD 4 .LONG SHCAKLDC4 .WORD 60 .LONG 0 HGUYA .LONG NSDR1 .WORD 4 .LONG NSDR2 .WORD 4 .LONG NSDR3 .WORD 4 .LONG NSDR4 .WORD 4 .LONG NSDR3 .WORD 4 .LONG NSDR2 .WORD 4 .LONG NSDR1 .WORD 4 .LONG NSDR2 .WORD 4 .LONG NSDR3 .WORD 4 .LONG NSDR4 .WORD 4 .LONG NSDR3 .WORD 4 .LONG NSDR2 .WORD 4 .LONG NSDR1 .WORD 4 .LONG NSDR8 .WORD 5 .LONG NSDR9 .WORD 5 .LONG SWAVE1 .WORD 5 .LONG SWAVE3 .WORD 5 .LONG SWAVE1 .WORD 5 .LONG SWAVE2 .WORD 5 .LONG SWAVE1 .WORD 5 .LONG SWAVE3 .WORD 5 .LONG SWAVE1 .WORD 5 .LONG SWAVE2 .WORD 5 .LONG SWAVE1 .WORD 5 .LONG NSDR9 .WORD 5 .LONG NSDR8 .WORD 60 .LONG 0 HGUYB .LONG DOC1 .WORD 4 .LONG DOC2 .WORD 4 .LONG DOC3 .WORD 4 .LONG DOC4 .WORD 40 .LONG DOC3 .WORD 4 .LONG DOC2 .WORD 4 .LONG DOC1 .WORD 60 .LONG 0 HGUYC .LONG BGRL1 .WORD 8 .LONG BGRL2 .WORD 8 .LONG BGRL1 .WORD 8 .LONG BGRL3 .WORD 8 .LONG BGRL1 .WORD 8 .LONG BGRL2 .WORD 8 .LONG BGRL1 .WORD 8 .LONG BGRL3 .WORD 8 .LONG BGRL1 .WORD 8 .LONG BGRL2 .WORD 60 .LONG 0 HGUYD .LONG GN1 .WORD 4 .LONG GN2 .WORD 4 .LONG GN3 .WORD 4 .LONG GN4 .WORD 4 .LONG GN5 .WORD 4 .LONG GN6 .WORD 4 .LONG GN5 .WORD 4 .LONG GN4 .WORD 4 .LONG GN3 .WORD 4 .LONG GN2 .WORD 4 .LONG GN1 .WORD 60 .LONG 0 ; ;O_ITEMS: ;;A2=# OF CASH ITEMS TO CREATE ON SCREEN ; CREATE0 SENDR ; CREATE0 SENDR2 ; RETS ;O_ITEMS2: ;;A2=# OF CASH ITEMS TO CREATE ON SCREEN ; CREATE0 SENDR3 ; CREATE0 SENDR3 ; RETS ;SENDR2 SLEEPK 1 ;SENDR SLEEP 01B0H+90 ;SENDR3 MOVI 028H,A9 ;28 ; MOVI 023H,B0 ; MOVI 0D8H,B1 ; CALLA RANGRAND ; MOVE A0,A10 ;A10=UPLFT X OF AREA ; MOVI 02DH,B0 ; MOVI 0A4H,B1 ; CALLA RANGRAND ; MOVE A0,A11 ;A11=UPLFT Y OF AREA ; ;OH2 ;CREATE A BUNCH OF THEM ; CREATE CSHPID,ANITEM ; SLEEPK 1 ; DSJNE A9,OH2 ; DIE ; ;ANITEM: ;;AMINE IS CALLED AT THE START OF A WAVE TO PLACE X # OF HULKS ON SCREEN ;;AT THE BEGINNING OF A WAVE ; MOVI 0,B0 ; MOVI 04CH,B1 ; CALLA RANGRAND ; ADD A11,A0 ; MOVE A0,A1 ; ; MOVI 0,B0 ; MOVI 074H,B1 ; CALLA RANGRAND ; ADD A10,A0 ; SLL 16,A0 ; SLL 16,A1 ; ;;A0=X,A1=Y ;;A0 & A1 ARE SET UP ;;ADD IN OFFSETS FOR THIS PARTICULAR ARENA ; MOVE @GAMSTATE,A2 ; CMPI INAMODE,A2 ; JREQ ADMD ; MOVE @WAVEYX,A2,L ;;A2=PACKED OFFSETS ; MOVX A2,A3 ; SLL 16,A3 ; ADD A3,A0 ;ADJUSTED A0 XVAL! ; ANDI 0FFFF0000H,A2 ; ADD A2,A1 ;ADJUSTED A1 YVAL! ;ADMD CALLR IH2 ;INIT HULK (BEGIN_OBJ) ; CALLA BEGINOBJ2 ;WAIT ; MOVI 4*60-30,A0 ; SUB A9,A0 ; CALLA PRCSLP ; ;;BLINK ;;A8=ICON IMAGE PTR ; MOVE @HALT,A0 ; JRNZ WAIT ; ; MOVK 7,A10 ;;ABOUT 1 SECOND OF BLINK ;BK ; MOVE A8,A0 ; CALLA OBJOFF ; SLEEP 5 ; MOVE A8,A0 ; CALLA OBJON ; SLEEP 5 ; DSJS A10,BK ; SLEEP 30 ; MOVE A8,A0 ; CALLA DELOBJ ;ICONS NOW GONE FOREVER! ; DIE ; ;IH2: ; MOVE @CIRCUIT,A2 ; CMPI 2,A2 ; JRNZ IHJ ; MOVE @MCON,A4 ; JRNZ IHJ ; MOVK 4,A2 ; JRUC IHJJ ;IHJ ; MOVB @TMP,A2 ; INC A2 ; MOVB A2,@TMP ; ANDI 03H,A2 ;IHJJ SLL 5,A2 ; ADDI GTBL,A2 ; MOVE *A2,A2,L ; MOVI 99,A3 ;69 ; MOVI DMAWNZ,A4 ;NON-ZERO VALUE ; MOVI CLSNEUT|TYPICON|SUBCSHI,A5 ; CLR A6 ; CLR A7 ; RETS ; ;GTBL .LONG PRZ1,PRZ2,PRZ3,PRZ1,KEY ; .REF BEGINOBJ2,WAVEYX,GAMSTATE,DELPAL,MIN_LIT,WAVE ; .REF GET_VALID_XY,GET_WVADDR,FRANIM,RANGRAND ; .REF OBJON,OBJOFF,HALT,CIRCUIT,STATUS,MCON ; .DEF O_MINE,EXPMINE,O_ITEMS,O_ITEMS2 ; .BSS TMP,8 ; ;BOLTHF .LONG BOLTA ; .WORD 3 ; .LONG BOLTB ; .WORD 3 ; .LONG BOLT1 ; .WORD 3 ; .LONG BOLT2 ; .WORD 3 ; .LONG BOLT3 ; .WORD 3 ; .LONG BOLT1 ; .WORD FLIPBITS|3,M_FLIPH ; .LONG BOLT2 ; .WORD 3 ; .LONG BOLT3 ; .WORD 3 ; .LONG BOLT3 ; .WORD FLIPBITS|3,M_FLIPV ; .LONG BOLT2 ; .WORD 3 ; .LONG BOLT1 ; .WORD 3 ; .LONG 0 ;FAKER SLEEP 40 ; CLR A0 ; MOVE A0,*A8(OXVEL),L ; MOVE A0,*A8(OYVEL),L ; DIE .END