total-carnage/MINE.ASM

4879 lines
90 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

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

;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 A1<A4
;NEW Y VAL IS IN ANOTHER SHAPES Y BAND
;NOW CHECK X
ADDI 02A0000H,A5 ;1A
CMP A5,A0
JRGT VALID ;BR IF A5>A0
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