total-carnage/CARN.ASM

5008 lines
96 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.

**************************************************************
*
* Software: Mark Turmell
* Initiated: 7/17/90
*
* Modified: Shawn Liptak, 10/27/91 -Orcus mods
*
* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC.
*
*.Last mod - 12/27/91 15:24
**************************************************************
.FILE 'CARN.ASM'
.TITLE 'TOTAL CARNAGE GAME PROGRAM'
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
;RANDOMIZE, ADJUST DIFFICULTY OF ELECTROCUTION SCENE
; .WORD 032H ;>C0000010 -- HEBLNK ;WAS A 2DH!! IN MAIN.ASM
;FINAL RELEASE CHANGES:
;FACCHECK IN MENU.ASM SHOULD SLEEP 60 NOT 1
.INCLUDE "MPROC.EQU" ;MPROC EQUATES
.INCLUDE "DISP.EQU" ;DISPLAY PROC. EQUATES
.INCLUDE "\VIDEO\SYS\GSP.INC" ;GSP ASSEMBLER EQUATES
.INCLUDE "\VIDEO\SYS\SYS.INC" ;Z UNIT SYSTEM EQUATES
.INCLUDE "\VIDEO\SYS\MACROS.HDR" ;MACROS DEFINITIONS
.INCLUDE "IMGTBL.GLO"
.INCLUDE "GAME.EQU"
.INCLUDE "AUDIT.EQU"
.INCLUDE "PLYR.TBL"
.INCLUDE "CARN.HDR"
;SOUNDS EXTERNAL
.REF EXP1,ELECTRO,DIESCRM,AIRSCRM,FIREDI,MTING,SCREAM
.REF MEUGH,UGH2
.REF MUSICOFF,ONESNDOVR
;SYMBOLS EXTERNALLY DEFINED
.ref DIAG
.REF STRCNRM,BEEP1,BOSS,AFTR_WRP,GET_AWAY
.REF WDOGRAM,CYCSPECT,T72PNTR
.REF RGTJETS,LOCK_NUM,HULK_DN,ICN9,SITLST,ROAD2_MOD,BAKMODS
.REF STRLNRMO,HEXTOASC,WRLD,STRCNRMO,RD15FONT,ICN1,ENAIR1
.REF OFFBSCRN,DOLORD,JET_KILLS,SIT4,FLASHME,RD7FONT
.REF DOSHIFT2,DOSHIFT,JDOSHIFT
.REF AIRRECT2A,AIRBRECT2,ERECT13,STRT_D,MINE_FLG,ICN7,ADDBMB
.REF AIRRECT1,AIRBRECT1,LOTS_FLAG,RNDRNG0
.REF bomb_neutron,SEND_ICON,ICONS_DN,ICN5,FIXGUNS
.REF ENRECT13,ENRECT14,INIT_TAB,ONEJEEP,DO_EXTRA,DELZ10
.REF DRECT8,DBRECT8,FND_NOWLK,IRQSKYE,DO_WINNER
.REF DRECT7,DBRECT7
.REF DRECT6,DBRECT6
.REF DRECT5,DBRECT5,NO_BONUS
.REF DRECT4,DBRECT4,ENRECT11,ERECT11,CLNPAL,ENRECT12,KILL_CRT3
.REF DRECT3,DBRECT3,VULN,BURST,STRT_G,BOOB_BURST
.REF GOBACK
.REF DRECT3A,DBRECT3A
.REF STATUS,GAMSTATE,INIT_ALL,UNSTACK,GET_AUD,PCNT
.REF FACCHECK,KILBGND,CLSCRACH,RANDOM,POWERTST,SCORE_FLAG,PCTOT
.REF STRT_WPN,P1CTRL,P2CTRL,SENDH_TOP
.REF FRANIM,FRANIMQ,BLOOD_LST2,EXPMINE2,SCRADD2,SNDPRC
.REF OBJOFF,OBJON,MSG_PROC2,GAMEOVER,GETFPAL,SHORT_PLYR
.REF P1DATA,P2DATA,PSTAT,CNTDIG1,CNTDIG2,HALT,STUFF_LVADDR
.REF THIS_PLYR,GETCPNT,BGND_UD1,SCRIPTPLAY,OFFSCRN,START,ICN2
.REF ONARRW,ARWOFF,PUMP_RED,RANGRAND,GOOBP,ZONE_TXT,RUNIN
.REF WAVE,BEGIN_CHNK,ICLIST
.REF HULK_CNT,SEND_TOP,DO_ALL_STUFF,ENRECT4
.REF ERECT2,EN_CURRENT,ERECT3,ENRECT3,KEEPIT,ERECT4,LSHIT,SHAKER
.REF PULLOBJ,JUMPXY,JUMPXY2,RANDPER,ERECT7,ERECT8
.REF TBOMBD,ZONE_TXT2
.REF DBRECT2,DRECT2,TBLST,LAY_EXP
.REF ERECT10,CTOTAL
.REF SKIPR_DN,JEEPCYC
.REF SHIFTLM,SEND_NEUT
.ref bossd_t,PURPLE_DUDE
.ref AUD,AUD1,aud_addnumplyrs,RAMLST
;SYMBOLS DEFINED IN THIS FILE
.DEF CK_BTMSD,SPECT
.DEF AIR_ER,NOSHOOT,DO_DESTROY
.DEF AIRRECT3A,AIRBRECT3,TUFFMINE
.DEF DELOFFBOTL,SLOW_DWN,POL2,GATE_PLYR,MAYBE_UD1
.DEF XOUT0,JEPCYC
.DEF INIT_PROG,DRAW_PLYR_TORSO,EHALT,CTRLS,BNC_PLYR,ANI_FLAG
.DEF PLYRPRCS,PLYROBJS,KILLP1,KILLP2,BNC_PLYR2,CURRENT,RECT1
.DEF WARMSET,KILL_PLYR,TARGET,TARGET_NUM,BCURRENT,BRECT1,RINGS
.DEF CPULEFT,CPUAVG
.DEF ENEMY_RECT
.DEF INTRO,SHOTKILL,ENDWV
.DEF CKFORY,SETPXY2,SETPXY1,HZSPD,PATHA,HSTGS_LOST
.DEF HSTGSET,WARP_KIL
.def timeron,timerp1,timerp1sd,timerp2,timerp2sd
.def bombn_killp
.def LAND
.if DEBUG
.def SLDEBUG
.bss SLDEBUG ,16 ;Shawn's debug
.endif
; .IF DEBUG
.DEF FORDBG
; .BSS KEEPA0,32
; .BSS KEEPA5,32
; .ENDIF
;UNINITIALIZED RAM DEFINITIONS
.BSS NOSHOOT,16 ;NO SHOOTING WHEN BOSS DEAD
.BSS HSTGS_LOST,16 ;TOTAL HOSTAGES NOT RESCUED
.BSS PALTMP,13*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM
.BSS PLYROBJS,64 ;2 ENTRIES-PLYR1,PLYR2 TORSO PTR
.BSS PLYRPRCS,64 ;2 ENTRIES-PLYR1,PLYR2 PROCESS PTR
.BSS EHALT,16
.BSS SLOW_DWN,16 ;SLOW DOWN SCROLL CNTR
.BSS CPUAVG,16
.BSS CPULEFT,16
.BSS TARGET_NUM,16 ;TARGET NUM FOR SCROLLING
.BSS INTRO,16 ;INTRO # FOR CONTROL RM 0=PROF,1=GEN
.BSS HSTGSET,16
.BSS HZSPD,32 ;BOTH HZ/VT SPEED
.BSS TMP,16
.BSS CURRENT,32 ;PNTR TO LIST OF RECTANGLES
.BSS BCURRENT,32 ;PNTR TO LIST OF RECTANGLES (BULLETS)
.BSS ENEMY_RECT,32 ;PNTR TO ENEMY SPAWN RECTANGLES
* Timer variables. Must stay in order!!
.bss timertcnt ,16 ;Tick count
.bss timeron ,16 ;!0=Running
.bss timerp1 ,16 ;Player 1 seconds of play
.bss timerp1sd ,16 ;Player 1 seconds since death
.bss timerp2 ,16 ;Player 2 seconds of play
.bss timerp2sd ,16 ;Player 2 seconds since death
;EQUATES FOR THIS FILE
;
VNORMVEL .EQU 01A000H
HNORMVEL .EQU 01A000H
VSLOVEL .EQU 012600H ;VNORMVEL*.707
HSLOVEL .EQU 012600H ;HNORMVEL*.707
;
;VNORMVEL .EQU 018333H
;HNORMVEL .EQU 018333H
;VSLOVEL .EQU 011300H ;VNORMVEL*.707
;HSLOVEL .EQU 011300H ;HNORMVEL*.707
;
VNORMVEL2 .EQU 01F000H
HNORMVEL2 .EQU 01F000H
VSLOVEL2 .EQU 018000H ;VNORMVEL*.707
HSLOVEL2 .EQU 018000H ;HNORMVEL*.707
;
VNORMVEL3 .EQU 025000H
HNORMVEL3 .EQU 027000H
VSLOVEL3 .EQU 01CA00H ;VNORMVEL*.707
HSLOVEL3 .EQU 01CA00H ;HNORMVEL*.707
;
TEMP .EQU PDATA
MYLIST .EQU PDATA+64 ;UHL FRANIM LIST FOR THIS PC UPON DEATH
;SAME AS FROM MINE.ASM
.TEXT
INIT_PROG
DINT ;DISABLE INTERRUPTS
SETF 16,1,0 ;WORD SIGN EXTEND (FIELD 0)
SETF 32,1,1 ;LONG WORD (FIELD 1)
MOVI STCKST,SP,L ;MOVE STACK ADDR IN SP (32 BITS)
MOVE @WDOGRAM,A0,L ;MARK SYSTEM AS INITIALIZED
CMPI WDOGNUM,A0
jrne WARMSET0 ;Power on?
MOVI AUDLOCK,A0
CALLA AUD1
.IF DEBUG
.ELSE
CALLERR 11,0 ;Watch dog
.ENDIF
;JUMP TO RECOVER CODE
; MOVI AUDSTAT,A0 ;IN GAME OR IN ATTRACT MODE CHECK
; CALLA GET_AUD
; MOVE A1,A1
; JREQ WARMSET ;Attract mode glitch?
JRUC WARMSET
; CLR A1
; CALLA STORE_AUDIT ;WARP ONLY ONCE, DUDE!!!
;TRY TO RECOVER PLAYABLE GAME
; JAUC BONUS_WARP
WARMSET0
JAUC POWERTST
WARMSET
DINT ;DISABLE INTERRUPTS
SETF 16,1,0 ;WORD SIGN EXTEND (FIELD 0)
SETF 32,1,1 ;LONG WORD (FIELD 1)
MOVI STCKST,SP,L ;MOVE STACK ADDR IN SP (32 BITS)
CALLA INIT_TAB ;RESET TODAYS HIGH SCORE TABLE
CALLA CLSCRACH ;CLR SCRATCH RAM
CALLA INIT_ALL ;INITIALIZE Z-UNIT
MAIN0
CREATE0 FACCHECK ;START ATTRACT IF THINGS O.K.
CREATE PLIST_ID,UNSTACK ;CREATE SWITCH UNSTACKER
********************************
* MAIN LINE LOGIC LOOP
MAINLP
CALLA PRCDSP ;DISPATCH PROCESSES
CALLA RANDOM
.if DEBUG
move @SLDEBUG,a0
jrnn skipline
movi 5*32,a0
move a0,@ERASELOC
skipline
.endif
MOVE A13,A13
JRZ MAINPOK
.IF DEBUG
LOCKUP
EINT
.ELSE
CALLERR 10,0
.ENDIF
MAINPOK
move @timertcnt,a3 ;>Update player timers
subk 1,a3
jrgt mlp20
movi timeron,a0 ;Get * to Timer variables
move *a0+,a1
jrz mlp10
move @STATUS,a2
btst 0,a2 ;P1 in game?
jrz mlp5
move *a0,a1,L ;+1 to game time & time since death
addi >10001,a1
move a1,*a0,L
mlp5 addk 32,a0 ;Next set
btst 1,a2 ;P2 in game?
jrz mlp10
move *a0,a1,L ;+1 to game time & time since death
addi >10001,a1
move a1,*a0,L
mlp10 movi 60,a3 ;Ticks per second
mlp20 move a3,@timertcnt
CALLA SNDPRC ;DISPATCH AND TIME THE SOUND CALLS
.IF DEBUG
callr StCpuLft
.ENDIF
; TEST ROM PROTECT INTERRUPT
;
; .IF DEBUG
; JRUC SKIPCK
; dint
; MOVE @INTENB,A0,0 ;ENABLE ROM PROTECT INTERRUPT (ext2)
; ORI X2E,A0
; MOVE A0,@INTENB,0
; eint
; move @>ffe00000,a0,0
; move a0,@>ffe00000,0
;SKIPCK
; .ENDIF
MOVE @PCNT,A0
DEC A0
MOVE A0,@PCNT
movb @SWITCH+>31,a0
jan mlp500
movi ACTIVE,a13
CREATE DIAG_PID,DIAG
mlp500 MOVE @GAMSTATE,A0
CMPI INDIAG,A0
JRNZ NODIAG
MOVI AMDEPID,A0
CLR A1
NOT A1
CALLA KILALL
CALLA KILBGND
CLR A0
MOVE A0,@SCORE_FLAG
NODIAG
JRUC MAINLP
RINGS:
;A10=TIME RINGS ARE ON
;A9=PLAYER NUMBER 1/2 TO RING
;TURN OFF EXISTING RINGS AROUND THIS PLAYER PLUS ITS COLOR CYCLE
MOVB A9,*A13(MYPLYR)
DEC A9
SLL 3,A10
MOVE A10,*A13(TIME)
SLL 5,A9
MOVE A9,A10
ADDI PLYROBJS,A9
MOVE *A9,A8,L
MOVE A8,A11 ;KEEP PLAYER OBJ TO RING IN A11
CALLA GETANIXY
CLR A6
CLR A7
MOVE A2,A1
MOVE A3,A0
MOVI 140,A3 ;LOWER PRIORITY THAN PLAYER
MOVI DMAWNZ,A4
MOVI CLSPLYR|TYPPLYR|SUBRNG1,A5
MOVI SHLD1,A2
CALLA BEGINOBJ2
MOVI PLYRPRCS,A9
ADD A10,A9
MOVE *A9,A0,L
MOVE A0,*A8(OPLINK),L
MOVE A8,A9 ;CIRCLE IMAGE
RTP
MOVE @HALT,A0
JRNE NYTB
MOVE *A13(TIME),A0
DEC A0
MOVE A0,*A13(TIME)
JRZ KRNGS
CMPI 90,A0
JRNC NYTB
MOVE *A9(OIMG),A0,L
CMPI SHLD1,A0
JRNZ NYTB
;TIME TO CHANGE TO RED SHIELD
; MOVI RINGSDN,A0
; CALLA ONESND
MOVE *A9(OFLAGS),A4,W
MOVI SHLD2,A1
MOVE A9,A8
CALLA ANI
MOVE A10,A10
JRNE F1
CREATE B1PID,BLINK ;BLINK OUT RING PROCESS
JRUC NYTB
F1
CREATE B2PID,BLINK
NYTB MOVE *A11(OPLINK),A0,L
MOVI 90,A1 ;30
MOVE A1,*A0(DELYDET) ;KEEP STUFFING A VALUE IN HERE
MOVE A9,A0
MOVE A11,A8
CALLA GETANIXY
ADDI 0280000H,A2
MOVE *A0(OFLAGS),A4,W
CALLA GANISAG
MOVE A0,A9
SLEEPK 1
JRUC RTP
XOUT0
;KILL RINGS OFF
KRNGS MOVE A9,A0
CALLA DELOBJ
CLR A1
NOT A1
MOVI B1PID,A0
;A10=0 IF PLAYER 1
MOVE A10,A10
JREQ KL
MOVI B2PID,A0
KL CALLA KILALL
DIE
BLINK
;BLINK OUT RING
;A9=RING IMAGE TO BLINK
MOVE A9,A0
CALLA OBJOFF
SLEEPK 5
MOVE A9,A0
CALLA OBJON
SLEEPK 5
JRUC BLINK
.REF SHLD1,SHLD2
RINGSDN .WORD >FB8B,>10,>80A0,0 ;SHIELD RUNNING DOWN
;RINGS
;;A10=TIME RINGS ARE ON
;;A9=PLAYER NUMBER 1/2 TO RING
;;TURN OFF EXISTING RINGS AROUND THIS PLAYER PLUS ITS COLOR CYCLE
; MOVE A9,*A13(MYPLYR)
;;SET BOUNDARIES TO ORBITING TYPE BNDRY
;;SET BOUNDARIES FOR CORRECT PLAYER!
; DEC A9
; SLL 5,A9
; MOVI PLYRPRCS,A1,L
; ADD A9,A1
; MOVE *A1,A1,L
; MOVE *A1(LEG_PTR),A11,L
; MOVI CLSPLYR|TYPPLYR|SUBRNG1,A5 ;FOR BOTH PLYRS
; MOVE A5,*A11(OID)
; MOVK 6,A0
; CMPI 20,A10
; JRNC RTP0
; MOVK 3,A0
;RTP0 MOVE A0,*A13(TEMP)
; MOVE A0,*A13(TEMP+16)
; MOVI 0AFEH,A0
; MOVE A0,*A1(DELYDET) ;KEEP STUFFING A VALUE IN HERE
;RTP
; MOVI PLYRPRCS,A1,L
; ADD A9,A1
; MOVE *A1,A1,L
; MOVE *A1(DELYDET),A0
; ORI 70,A0
; MOVE A0,*A1(DELYDET) ;KEEP STUFFING A VALUE IN HERE
; MOVE *A1(TSO_PTR),A8,L
; MOVE *A1(LEG_PTR),A11,L
;;GIVE THESE IMAGES OTHER PAL
; MOVE *A13(TEMP+16),A0
; JRNZ RTP2
; MOVI WHITEP,A0
; JRUC RCL
;RTP2
; MOVI nup2a,A0
;
; MOVE A9,A9
; JRZ RCL
; MOVI nup1a,A0
;
;RCL CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
; MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
; MOVE A0,*A11(OPAL),W ;STORE THE NEW PALETTE
; MOVE *A13(TEMP),A0
; CALLA PRCSLP
;XOUT0
; MOVI nup1,A0
; MOVE A9,A9
; JRZ P01
; MOVI nup2,A0
;P01
; CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
;;GIVE THESE IMAGES OTHER PAL
; MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
; MOVE A0,*A11(OPAL),W
; MOVE *A13(TEMP),A0
; JRZ XOUT
; CALLA PRCSLP
; DEC A10
; JRZ XOUT
; CMPI 20,A10
; JRNZ RTP
; MOVK 2,A0
; MOVE A0,*A13(TEMP)
; JRUC RTP
;XOUT MOVE *A13(TEMP+16),A0
; JRZ REALX
; MOVI RINGSDN,A0
; CALLA ONESND
; CLR A0
; MOVE A0,*A13(TEMP+16)
; MOVK 13,A10
; JRUC RTP
;REALX
;;RESTORE CORRECT OID
; MOVI RESTUF,A1
; ADD A9,A1
; MOVE *A1,A1,L
; MOVE A1,*A11(OID)
;;GIVE TORSO SOME DELAY DETECTION
; MOVE *A8(OPLINK),A0,L
; MOVI 70,A1 ;10
; MOVE A1,*A0(DELYDET) ;KEEP STUFFING A VALUE IN HERE
; DIE
;
;RESTUF .LONG CLSPLYR|TYPPLYR|SUBPL_1,CLSPLYR|TYPPLYR|SUBPL_2
TARGET:
;PROCESS WHICH RUNS WHEN SCREEN IS STATIONARY.
;WHEN STARTED, IT WAITS FOR PLAYERS TO REACH A CERTAIN X OR Y TARGET AND
;THEN STARTS AN APPROPRIATE SCROLL
;A8=X TARGET OR 0 IF NONE
;A9=Y TARGET OR 0 (POS WORD)
;A10=0=OLD SCROLL, OR A10=TABLE OF SCROLL DIRECTION, AND CNT, END WITH 0
MOVE A8,A8
JRZ YCHK
XCHK
;CHECK PLAYERS FOR X TARGET
MOVE @STATUS,A0
CMPI 3,A0
JRNZ ONEPX
;BOTH PLYRS IN GAME
MOVE @PLYROBJS,A0,L
MOVE @PLYROBJS+32,A1,L
MOVE *A0(OXPOS),A2
MOVE *A1(OXPOS),A3
CMP A8,A2
JRNC YESHITX
CMP A8,A3
JRNC YESHITX
NOHITX SLEEPK 10
JRUC XCHK
YESHITX
;ONE OF PLAYERS IS TO RIGHT OF TARGET LINE
SUB A2,A3
ABS A3
CMPI 200,A3
JRNC NOHITX
DOHORZ
;START HORZ SCROLL!
MOVE A10,A10
JRNZ NEWSCRL
MOVE @WORLDTLX,A9,L
MOVE @TARGET_NUM,A0
CMPI 2,A0
JRNZ NOCH
;FROM REACTOR TO ELEVATOR
PUSH A0
MOVI [0E0H,0],A10
CREATE0 SETRUNIN
PULL A0
MOVI RECT4,A1
MOVE A1,@CURRENT,L
MOVI BRECT3,A1
MOVE A1,@BCURRENT,L
;IF THEY HAD A MAP, THEY DIDN'T USE IT. THROW IT AWAY
; CLR A1
; MOVE A1,@MAPON
NOCH SLL 5,A0
ADDI TARGET_LST,A0
MOVE *A0,A0,L
ADD A0,A9
CREATE TARGPID,SCROLLFT
CREATE DELPID,DELOFFH ;IMAGES OFF LEFT OF SCREEN
DIE
STOPO MOVI DELPID,A0
CLR A1
NOT A1
CALLA KILALL
CLR A0
MOVE A0,@AFTR_WRP
move @WAVE,a0
cmpi 35,a0
JAEQ SUCIDE
CALLA OFFSCRN
MOVE @WAVE,A0
CMPI 38,A0
jrz aboss_strt
MOVI 120,A9
CMPI 34,A0
JAZ PURPLE_DUDE
CMPI 30,A0
JRZ AIRSTP01
CMPI 18,A0
JRZ AIRSTP
CMPI 27,A0
JRZ AIRSTP0
CMPI 17,A0
JRZ RD_END
CMPI 15,A0
JRZ XTRY_RCK
CMPI 12,A0 ;12 OR 11 TO GET TO 1ST LOCKDOWN
JRZ LCK1
CMPI 11,A0
JRNZ SDIE
LCK1
;AT FIRST HUT
;DO TEXT
;START WAVE
;NEW LOCK DOWN RECTANGLES
MOVI DRECT4,A0 ;FOR LOCKDOWN AT HUT
MOVE A0,@CURRENT,L
MOVI DBRECT4,A0
MOVE A0,@BCURRENT,L
MOVI ENRECT12,A0
MOVE A0,@EN_CURRENT,L ;FOR BOX COLLISIONS
MOVI ERECT11,A0
MOVE A0,@ENEMY_RECT,L ;FOR SPAWNING
SLEEPK 20
MOVE @START,A0
CMPI 5,A0
JRNZ LXTR
MOVI COLRPID,A0
CALLA KIL1C
CREATE COLRPID,CYCSPECT ;START COLOR CYCLE PROCESS
.REF WEASEL_NOTE
JSRP WEASEL_NOTE
JRUC LXTR2
LXTR
MOVK 6,A10 ;YOU ARE WEASEL MAN
MOVI [-16,0],A9 ;Y ADD IN VALUE
CREATE0 ZONE_TXT2
LXTR2
SLEEPK 30 ;40
MOVK 13,A0
CALLA DOLORD ;STORE WAVE #, START WAVE CODE
MOVI ICONPID,A0
CLR A1
NOT A1
CALLA EXISTP
* Z BIT SET = NO MATCH, A0 = 0
JRNZ SFO
CREATE ICONPID,SEND_ICON
SFO CLR A0
MOVE A0,@P1DATA+WAVEPTS
MOVE A0,@P2DATA+WAVEPTS
SDIE DIE
aboss_strt
;START LOCKDOWN WAVE ACTION, WHEN DONE, DO ABOSS
CLR A0
MOVE A0,@RUNIN
MOVK 26,A10 ;MUSH
MOVI [-34,0],A9 ;Y ADD IN VALUE
CREATE0 ZONE_TXT2
SLEEP 60
MOVI SIT5,A0
MOVE A0,@SITLST,L
MOVI ERECTU2,A0
MOVE A0,@ENEMY_RECT,L ;FOR SPAWNING
MOVI 39,A0
CALLA DOLORD
CALLA JEEPCYC ;CYCLE JEEP TIRES
DIE
ERECTU2
.WORD 0,1,68H+160+1365,4E8H+270,68H+162+1365,4E8H+280
.WORD 0,5,68H+175+1365,4E8H-40,68H+176+1365,4E8H-20
.WORD 0,7,68H+400+1365,4E8H+145,68H+420+1365,4E8H+160
.WORD 0,3,28H+1365,4E8H+145,30H+1365,4E8H+150
.WORD 0,5,68H+175+1365,4E8H-40,68H+176+1365,4E8H-20
.WORD 0,1,68H+160+1365,4E8H+270,68H+162+1365,4E8H+280
.WORD 0,3,28H+1365,4E8H+145,30H+1365,4E8H+150
.WORD 0,7,68H+400+1365,4E8H+145,68H+420+1365,4E8H+160
AIRSTP01
;END OF AIRPORT, TIME FOR SHOCK SCENE
; CLR A0
; MOVE A0,@P1DATA+WAVEPTS
; MOVE A0,@P2DATA+WAVEPTS
MOVK 31,A0
CALLA DOLORD ;STORE WAVE #, START WAVE CODE
MOVI ICN9,A0
MOVE A0,@ICLIST,L
MOVI AIR_END,A0
MOVE A0,@ENEMY_RECT,L ;FOR SPAWNING
DIE
AIR_END
.WORD 0,7,1520H+410,912H+115,1520H+420,912H+135
.WORD 0,1,1520H+100,912H+260,1520H+290,912H+270
.WORD 0,5,1520H+100,912H-50,1520H+290,912H-50+10
.WORD 0,3,1520H-40,912H+115,1520H-30,912H+135
.WORD 0,5,1520H+100,912H-50,1520H+290,912H-50+10
.WORD 0,1,1520H+100,912H+260,1520H+290,912H+270
.WORD 0,7,1520H+410,912H+115,1520H+420,912H+135
.WORD 0,5,1520H+100,912H-50,1520H+290,912H-50+10
AIRSTP0
;TURN ON A WARP BACK DISC!
;GO BACK FROM WARP LOCKDOWN #2
;SEND OUT CHASER!
MOVK 1,A0
MOVE A0,@ICONS_DN
SLEEP 90
MOVE @JET_KILLS,A0
MOVE @JET_KILLS+16,A10
ADD A10,A0
MOVK 12,A10 ;NO ;DUFUS
SUBK 20,A0
JRNZ YESBB
;GOT ALL JETS
MOVK 13,A10 ;YES
MOVI P1DATA,A2
MOVE @PLYRPRCS,A0,L
JRZ RD3B
CALLR RD4B
RD3B
MOVI P2DATA,A2
MOVE @PLYRPRCS+32,A0,L
JRZ YESB
CALLR RD4B
JRUC YESB
YESBB
;NO BONUS
YESB MOVI [-16,0],A9 ;Y ADD IN VALUE
CREATE0 ZONE_TXT2
JSRP DO_DESTROY
SLEEP 4*60
CREATE WARPPID,GOBACK
DIE
AIRSTP
;FIRST LOCKDOWN IN AIRPORT
MOVE @BAKMODS,A0,L
CMPI ROAD2_MOD,A0 ;SHOW ROAD
JRZ RD_END
MOVE @WORLDTLY,A0,L
CMPI [1250H,0],A0
JRGT SDIE
MOVI AIRRECT2A,A0
MOVE A0,@CURRENT,L
MOVI AIRBRECT2,A0
MOVE A0,@BCURRENT,L
SLEEP 160+180
; CALLA CLNPAL
CLR A0
MOVE A0,@P1DATA+WAVEPTS
MOVE A0,@P2DATA+WAVEPTS
MOVK 15,A10 ;FLESH FEAST
MOVI [0,0],A9 ;Y ADD IN VALUE
CREATE0 ZONE_TXT2
MOVK 19,A0
CALLA DOLORD ;STORE WAVE #, START WAVE CODE
CLR A0 ;1=STUCK IN GOO, 0=BALL AND CHAIN
MOVE A0,@HSTGSET
MOVE A0,@EN_CURRENT,L ;FOR BOX COLLISIONS
MOVI ERECT13,A0
MOVE A0,@ENEMY_RECT,L ;FOR SPAWNING
DIE
RD_END
SLEEP 4*60 ;10
;A FEW MORE TRUCKS ALONG ROAD
MOVI 40,A0
MOVE A0,@WAVE
SLEEP 5*60
MOVK 9,A10 ;NO BONUS
CLR A9 ;Y ADD IN VALUE
MOVE @NO_BONUS,A0
JRNZ RD2
MOVK 8,A10 ;YES BONUS
MOVI [-16,0],A9 ;Y ADD IN VALUE
RD2 CREATE0 ZONE_TXT2
MOVE A9,A9
JRZ GOAIR
;GOT ALL TRUCKS
MOVI P1DATA,A2
MOVE @PLYRPRCS,A0,L
JRZ RD3
CALLR RD4
RD3 MOVI P2DATA,A2
MOVE @PLYRPRCS+32,A0,L
JRZ GOAIR
CALLR RD4
GOAIR
SLEEPK 30
;DISPLAY TRUCKS GOT AWAY CNT
MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS
MOVI GWAY,A8
MOVI [180,0BCH],A9 ;SCRN Y/X
MOVI RD15FONT,A11 ;FONT TABLE
MOVK 2,A10 ;Y,X SPACING BETWEEN CHARCTERS
CLR A0
MOVE A0,@WRLD
JSRP STRCNRMO
;DIGITS
MOVE @GET_AWAY,A8
CALLA HEXTOASC
MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS
MOVI [180,011DH],A9 ;SCRN Y/X
CLR A0
JSRP STRLNRMO
;
JSRP DO_DESTROY
MOVI FIXPID,A0
CLR A1
NOT A1
CALLA EXISTP
* Z BIT CLR = MATCH, A0 = PTR TO PROCESS
JRZ GO1
CALLA KILL
GO1 SLEEP 3*60
MOVI 5*60,A9
MOVE @BAKMODS,A0,L
CMPI ROAD2_MOD,A0
JAZ PURPLE_DUDE
SLEEP 40
CREATE0 DO_WINNER
SLEEP 90
;START TOWARD AIRPORT GATES
MOVI 08000H,A0
MOVE A0,@HZSPD,L
MOVE @WORLDTLY,A9,L
SRL 16,A9
ADDI 80,A9 ;A9=Y TARGET LINE TO TRIGGER SCROLL
CLR A8 ;A8=0 MEANS NOT CHECKING FOR X TARGET
MOVI PATHU,A10 ;INDICATES NEW SCROLL WITH SCRL TABLE
CREATE TARGPID,TARGET
MOVK 18,A0
CALLA DOLORD
CLR A9 ;A9=0 FOR UP, 1 FOR RGT
CREATE ARWPID,ONARRW ;TURN ON UP ARROW
CREATE0 FIX ;ARROW OFF AFTER A TIME
MOVK 8,A0 ;10
MOVE A0,@CTOTAL
MOVI ICN2,A0
MOVE A0,@ICLIST,L
CLR A0
MOVE A0,@TARGET_NUM
MOVI AIRRECT1,A0
MOVE A0,@CURRENT,L
MOVI AIRBRECT1,A0
MOVE A0,@BCURRENT,L
MOVI ENAIR1,A0
MOVE A0,@EN_CURRENT,L ;FOR BOX COLLISIONS
MOVI TUNE5,A0
CALLA ONESND
MOVK 1,A0
MOVE A0,@ICONS_DN
SLEEP 12*60
CREATE ICONPID,SEND_ICON
DIE
DO_DESTROY
;NOW SHOW WHO GOT WHAT
MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS
MOVI DESTROY,A8
MOVI [3CH,037H],A9 ;SCRN Y/X
MOVI RD7FONT,A11 ;FONT TABLE
MOVK 1,A10 ;Y,X SPACING BETWEEN CHARCTERS
CLR A0
MOVE A0,@WRLD
JSRP STRCNRMO
;DIGITS
MOVE @JET_KILLS,A8
CALLA HEXTOASC
MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS
MOVI [3CH,5BH],A9 ;SCRN Y/X
CLR A0
JSRP STRLNRMO
;PLYR 2
MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS
MOVI DESTROY,A8
MOVI [3CH,14EH],A9 ;SCRN Y/X
MOVI RD7FONT,A11 ;FONT TABLE
MOVK 1,A10 ;Y,X SPACING BETWEEN CHARCTERS
CLR A0
MOVE A0,@WRLD
JSRP STRCNRMO
;DIGITS
MOVE @JET_KILLS+16,A8
CALLA HEXTOASC
MOVI 3E3EH,A6 ;COLOR CYCLE DIGITS
MOVI [3CH,173H],A9 ;SCRN Y/X
CLR A0
JSRP STRLNRMO
RETP
TUNE5 .WORD >F3F0,2,>8008,0 ;AIRPORT TUNE
GWAY .BYTE "TRUCKS ESCAPED:",0
.EVEN
DESTROY .BYTE "DESTROYED:",0
.EVEN
musicsnd .word >f3fe,10,>8009,0 ;Boss music
RD4
MOVI >25000,A1 ;AMOUNT OF SCORE FOR ALL TRUCKS
CALLA SCRADD2 ;DO IT!
CALLA DO_EXTRA
RETS
RD4B
MOVI >25000,A1 ;AMOUNT OF SCORE FOR ALL JETS
CALLA SCRADD2 ;DO IT!
RETS
.DEF XTRY_RCK
XTRY_RCK
;AT ROAD, BRING ON ORCUS
CLR A0
MOVE A0,@WORLDTLY,L
MOVE A0,@CURRENT,L
MOVE A0,@BCURRENT,L
MOVE A0,@EN_CURRENT,L ;FOR BOX COLLISIONS
MOVE A0,@FND_NOWLK ;FIENDS CAN WALK AGAIN
MOVI ERECT11,A0
MOVE A0,@ENEMY_RECT,L ;FOR SPAWNING
; CALLA CLNPAL
movi musicsnd,a0
calla ONESND
MOVI roarlongsnd,a0
calla ONESND
MOVE @START,A0
CMPI 6,A0
JRNZ XTR
CLR A0
MOVE A0,@AFTR_WRP ;NO FREE MAN
MOVI COLRPID,A0
CALLA KIL1C
CREATE COLRPID,CYCSPECT ;START COLOR CYCLE PROCESS
.REF SHORT_NOTE
JSRP SHORT_NOTE
JRUC XTR2
XTR
MOVK 7,A10 ;ORCUS HERE
MOVI [-16,0],A9 ;Y ADD IN VALUE
CREATE0 ZONE_TXT2
XTR2
CLR A0
MOVE A0,@P1DATA+WAVEPTS
MOVE A0,@P2DATA+WAVEPTS
MOVE @GAMSTATE,A0
CMPI INAMODE,A0
JRNZ XCXC
CREATE0 DELYBS
JRUC XVXV
XCXC
MOVK 16,A0
CALLA DOLORD ;STORE WAVE #, START WAVE CODE
XVXV MOVI ICN5,A0
MOVE A0,@ICLIST,L
MOVI ( 5 *32*32)+( 5 *32)+( 5 ),A1
MOVE A1,@IRQSKYE
CALLA DELZ10
;STUFF ORCUS ICONS HERE
CREATE ICONPID,SEND_ICON
; MOVE @START,A0
; CMPI 6,A0
; JAZ SUCIDE
CREATE ICONPID,SEND_ICON
DIE
DELYBS
MOVI LORDPID,A0
CALLA KIL1C
SLEEP 120
CREATE BOSSPID,BOSS
DIE
roarlongsnd .word >f990,120,>8117,0 ;Roar
PATHU ;DIR,CNT
.WORD 1,700,0
PATHA .WORD 8,17EH,1,438H,2,2E0H,3,40,14,1,9,120,7,2EAH+40,1,292H,0 ;DIR,CNT
PATHB .WORD 2,16AH,1,340H,8,2F4H,1,38AH,0 ;DIR,CNT
NEWSCRL
;A10=LIST OF ANGLES,CNTS
;TURN OF DELETE OFF BOTTOM
CLR A0
MOVE A0,@SLOW_DWN
MOVE @WAVE,A0
CMPI 18,A0
JRNZ UPS0
MOVE @BAKMODS,A0,L
CMPI ROAD2_MOD,A0 ;SHOW ROAD
JRNZ UPS
;ON ROAD #2
CREATE DELPID,DELOFFHR ;IMAGES OFF LEFT OF SCREEN
JRUC UP2
UPS0 CMPI 17,A0
JRNZ UPS
;ON ROAD
CREATE DELPID,DELOFFH ;IMAGES OFF LEFT OF SCREEN
JRUC UP2
UPS CREATE DELPID,DELOFF ;DELETE OFF BOTM OF SCRN ONLY
UP2
CMPI PATHA,A10
JRNZ NEWS1
MOVI ENRECT11,A0
MOVE A0,@EN_CURRENT,L ;FOR BOX COLLISIONS
MOVI ERECT11,A0
MOVE A0,@ENEMY_RECT,L ;FOR SPAWNING
NOT_YETT
SLEEPK 1
;DECIDE WHICH PATH
MOVE @WORLDTLX,A0,L
SRL 16,A0
ADDI 150,A0
MOVE A0,A1
ADDI 100,A1
MOVE @STATUS,A2
CMPI 3,A2
JRZ TWOPLYRS
MOVE @PLYROBJS,A2,L
JRNZ CKNOW
MOVE @PLYROBJS+32,A2,L
CKNOW
MOVE *A2(OXPOS),A3
CMP A0,A3
JRC NEWS0
CMP A1,A3
JRNC GOINRGT
MOVE @SLOW_DWN,A0
INC A0
MOVE A0,@SLOW_DWN
CMPI 190,A0
JRLO NOT_YETT
PUSH A8
MOVK 1,A8
CREATE FUTUREPID,bomb_neutron
PULL A8
CLR A0
MOVE A0,@SLOW_DWN
JRUC NOT_YETT ;BR=NOT GOING TO LEFT OR RGT
TWOPLYRS
MOVE @PLYROBJS,A2,L
MOVE @PLYROBJS+32,A4,L
MOVE *A2(OXPOS),A3
CMP A0,A3
JRC MAYBL
CMP A1,A3
JRNC MAYBR
JRUC NOT_YETT ;BR=NOT GOING TO LEFT OR RGT
MAYBL
MOVE *A4(OXPOS),A3
CMP A0,A3
JRC NEWS0
JRNC NOT_YETT
MAYBR MOVE *A4(OXPOS),A3
CMP A1,A3
JRC NOT_YETT
GOINRGT
CALLA STRT_D ;CYCLE SAT DISH
MOVI PATHB,A10 ;INDICATES NEW SCROLL WITH SCRL TABLE
;NOW SWITCH OVER TO OTHER RECTANGLE LIST FOR PATH B
CREATE FUTRPID,CKFORY3 ;START LAND MINES MOVING LATER ON!
MOVK 11,A0 ;IT IS PATHB!
CALLA DOLORD
MOVI DRECT3,A8 ;PATH B LIST
MOVI DBRECT3,A9
MOVI [250,0],A11 ;LINES BEFORE STUFFING
JRUC NEWS00
NEWS0
CALLA STRT_D ;CYCLE SAT DISH
CREATE FUTRPID,CKFORY4 ;START JEEP COMING DOWN AT PLAYER
; CREATE0 BEACONS ;SHOW AREA AROUND DISHES ETC.
MOVK 12,A0 ;ASSUME PATH A LIST
CALLA DOLORD
MOVI DRECT3A,A8 ;PATH A LIST
MOVI DBRECT3A,A9
MOVI [150,0],A11 ;LINES BEFORE STUFFING
NEWS00 CREATE TARGPID,STUFFRECT
.REF WARP_HELP
CREATE TARGPID,WARP_HELP
NEWS1
MOVE *A10+,A11,W ;A11=DIR OF SCROLL
JRZ STOPO
MOVE *A10+,A9,W ;A9=LENGTH OF SCROLL
NEWS2 MOVE @HALT,A0
JRZ NEW1
SLEEPK 1
JRUC NEWS2
NEW1 MOVE A11,A0
SLL 5,A0
ADDI JTBLS,A0
MOVE *A0,A0,L
JUMP A0
STUFFRECT
MOVE @WORLDTLY,A0,L
SUB A11,A0
MOVE A0,A11
STF SLEEPK 30
MOVE @WORLDTLY,A0,L
CMP A0,A11
JRLT STF
;REACHED Y TRIGGER LINE, STUFF CORRECT RECT INFO
MOVE A8,@CURRENT,L
MOVE A9,@BCURRENT,L
DIE
JTBLS .LONG 0,SUP,SUPRGT,SRGT,0,SDWN,0,SLFT,SUPLFT,WAIT_HR,UPDT1,UPDT2
.LONG UPDT3,UPDT4,UPDT5,UPDT6,UPDT7,UPDT8,UPDT9,UPDT10 ;19
UPDT10
CALLA JEEPCYC ;CYCLE JEEP TIRES
MOVK 29,A0
CALLA DOLORD
MOVI 097AH,A0 ;FOR JUMPING DOWN VERTICALLY
MOVE A0,@JUMPXY
;PUT IN RECTANGLES FOR ENEMY COLLISIONS HERE!
MOVI SIT5,A0
MOVE A0,@SITLST,L
MOVI AIR_ER,A0
MOVE A0,@ENEMY_RECT,L ;FOR SPAWNING
CREATE ICONPID,SEND_ICON
JRUC NEWS1
SIT5 ;[Y,X] ;PAD FOR OTHER DIR ;FOR WARP LOCKDWN IN AIRPORT
.LONG [0CFH,-10+60],[0CFH,015BH-15],0,0 ;RUNNING IN WITH DIR=1
.LONG [05CH,0BH+60],[0C8H,167H-15],0,0 ;3
.LONG [65H,-10+60],[6CH,157H-15],0,0 ;5
.LONG [6CH,163H-30],[0D8H,0BH+60] ;7
AIR_ER
.WORD 0,1,1370H+180,09A1H+265,1370H+190,09A1H+275
.WORD 0,3,1350H,09A1H+115,1350H+10,09A1H+125
.WORD 0,7,1370H+410,9A1H+115,1370H+420,9A1H+135
.WORD 0,1,1370H+180,09A1H+265,1370H+190,09A1H+275
.WORD 0,3,1350H,09A1H+115,1350H+10,09A1H+125
.WORD 0,7,1370H+410,9A1H+115,1370H+420,9A1H+135
.WORD 6,5,1370H+100,9A1H-50,1370H+290,9A1H-50+10
.WORD 6,5,1370H+100,9A1H-50,1370H+290,9A1H-50+10
UPDT9
;AT END OF PLANE AREA LOCKDOWN
; CALLA OFFBSCRN
CLR A0
MOVE A0,@MINE_FLG
; CALLA OFFSCRN
MOVI LK6RECT,A0
MOVE A0,@CURRENT,L
MOVI LK6BRECT,A0
MOVE A0,@BCURRENT,L
JRUC NEWS1
LK6RECT
.WORD 0AAH,098H,0367H,0EEH ;TOP FENCE
.WORD 0
LK6BRECT
.WORD 0AAH,098H,0367H-10,0EEH-18 ;TOP FENCE
.WORD 0
UPDT8
CALLA OFFBSCRN
JRUC NEWS1
UPDT7 CLR A0
MOVE A0,@MINE_FLG
;SPEED UP SCROLL
MOVI 010000H,A0
MOVE A0,@HZSPD,L
; CALLA OFFSCRN
MOVI AIRRECT3A,A0
MOVE A0,@CURRENT,L
MOVI AIRBRECT3,A0
MOVE A0,@BCURRENT,L
MOVK 25,A0
CALLA DOLORD
; MOVE A0,@WAVE
CREATE FUTUREPID,RGTJETS
MOVI ICN1,A0
MOVE A0,@ICLIST,L
JRUC NEWS1
AIRRECT3A ;AFTER AIRPLANE AREA
.WORD 01082H,0BF5H,0136AH,0C43H ;TOP FENCE AFTER PLANES
.WORD 014B8H,0BACH,01540H,0C40H ;FENCED IN AREA ON RGHT
;LOWER HUT
.WORD 0134EH,0A5FH,013AEH,0B1DH ;UPPER LEFT OF HUT
.WORD 0134EH,0B95H,013B2H,0BD4H ;LOWER LFT OF HUT
;UPPER HUT/FENCE
.WORD 0134EH,096DH,013AEH,09F8H ;UPPER LEFT OF HUT
.WORD 0C7CH+1782,0FECH-1663,0E34H+1782-65,1044H-1663 ;TOP LFT FENCE
;TOP RIGHT HANGAR
.WORD 1673H,9E0H,1769H,0A18H
.WORD 1677H,926H,1770H,0966H
.WORD 0
AIRBRECT3 ;AFTER AIRPLANE AREA FOR BULLETS
.WORD 01082H,0BF5H,01360H,0C36H ;TOP FENCE AFTER PLANES
.WORD 014B0H,0BACH,01540H,0C38H ;FENCED IN AREA ON RGHT
;LOWER HUT
.WORD 0134EH,0A5FH-8,013AEH-8,0B1DH-15 ;UPPER LEFT OF HUT
.WORD 0134EH,0B95H,013B2H-8,0BD4H-15 ;LOWER LFT OF HUT
;UPPER HUT/FENCE
.WORD 0134EH,096DH,013AEH-8,09F8H-15 ;UPPER LEFT OF HUT
.WORD 0C7CH+1782,0FECH-1663,0E34H+1782-65,9B0H ;TOP LFT FENCE
;TOP RIGHT HANGAR
.WORD 1683H,9D4H,1769H,0A0CH
.WORD 1683H,91AH,1770H,095AH
.WORD 0
UPDT6
;UP INTO AIRPLANE AREA
;START LAND MINES MOVING
MOVI ICN7,A0
MOVE A0,@ICLIST,L ;NO WEAPONS
CLR A0
MOVE A0,@CURRENT,L
MOVE A0,@BCURRENT,L
CREATE FUTUREPID,TUFFMINE
MOVI GLUCK,A0
CALLA ONESNDOVR
; MOVE @PLYROBJS,A0,L
; JRZ JU2
; MOVI P1DATA+BMB_CNT,A0
; CALLA ADDBMB
; CALLA ADDBMB
; CALLA ADDBMB
; CALLA ADDBMB
;JU2 MOVE @PLYROBJS+32,A0,L
; JRZ NEWS1
; MOVI P2DATA+BMB_CNT,A0
; CALLA ADDBMB
; CALLA ADDBMB
; CALLA ADDBMB
; CALLA ADDBMB
JRUC NEWS1
GLUCK .WORD >F1F7,>40,>80E5,0 ;"GOOD LUCK"
TUFFMINE
MOVK 24,A0
MOVE A0,@WAVE
MOVE A0,@MINE_FLG
;START THEM MOVING
DCKF3 CALLA JDOSHIFT
SLEEPK 30
;NOW STOP THEM
CALLA DOSHIFT2
;DIFFICULTY SETTING HERE!
SLEEP 45 ;SLEEP 5 FOR HARD DIFFICULTY
MOVE @MINE_FLG,A0
JRNZ DCKF3
DIE
UPDT5
;TURN ON ARROW TO LEFT
MOVK 2,A9 ;A9=0 FOR UP, 1 FOR RGT ,2=LFT
CREATE ARWPID,ONARRW ;TURN ON UP ARROW
CREATE0 FIX
JRUC NEWS1
UPDT4
;AS WE SCROLL UP TOWARD CLIFFS
MOVI ENRECT14,A0
MOVE A0,@EN_CURRENT,L
MOVI DRECT8,A8
MOVI DBRECT8,A9
MOVI [242,0],A11 ;LINES BEFORE STUFFING
CREATE TARGPID,STUFFRECT
JRUC NEWS1
UPDT3
;AS WE SCROLL UP AWAY FROM DISH, SET RECTANGLE CHECK TABLES
MOVI DRECT7,A0
MOVE A0,@CURRENT,L
MOVI DBRECT7,A0
MOVE A0,@BCURRENT,L
JRUC NEWS1
UPDT2
;AS WE SCROLL UP AWAY FROM DISH, SET RECTANGLE CHECK TABLES
MOVI DRECT6,A8
MOVI DBRECT6,A9
MOVI [200,0],A11 ;LINES BEFORE STUFFING
CREATE TARGPID,STUFFRECT
MOVK 1,A0
MOVE A0,@FND_NOWLK ;FIENDS CAN'T WALK NOW!
MOVI ENRECT13,A0
MOVE A0,@EN_CURRENT,L
; .REF BEACONS
; CREATE0 BEACONS ;SHOW AREA AROUND DISHES ETC.
JRUC NEWS1
UPDT1
;AS WE SCROLL UP INTO DESERT, SET RECTANGLE CHECK TABLES
MOVI DRECT5,A0
MOVE A0,@CURRENT,L
MOVI DBRECT5,A0
MOVE A0,@BCURRENT,L
JRUC NEWS1
FIX SLEEP 54
MOVK 10,A0
MOVE A0,@ARWOFF
DIE
WAIT_HR
MOVE A9,A0
CALLA PRCSLP
JRUC NEWS1
;WAIT HERE FOR THIS LONG
SLFT MOVE @HALT,A0
JRNZ ISTUK6
DEC A9
JRZ NEWS1
MOVE @WORLDTLX,A0,L
MOVE @HZSPD,A1,L
SUB A1,A0
MOVE A0,@WORLDTLX,L
CALLR MAYBE_UD1
SLEEPK 2
CALLR CK_RGTSD ;CHECK FOR PLAYERS DRAGGING AT RGT
JRNC SLFT
ISTUK6 SLEEPK 2
CALLA SEND_NEUT
CALLR PAUSEX2
JRC ISTUK6
JRUC SLFT
SRGT
MOVE @HALT,A0
JRNZ ISTUK6A
DEC A9
JRZ NEWS1
MOVE @WORLDTLX,A0,L
MOVE @HZSPD,A1,L
ADD A1,A0
MOVE A0,@WORLDTLX,L
CALLR MAYBE_UD1
SLEEPK 2
CALLR CK_LFTSD ;CHECK FOR PLAYERS DRAGGING AT LFT SD
JRC SRGT
ISTUK6A SLEEPK 2
CALLA SEND_NEUT
CALLR PAUSEX
JRNC ISTUK6A
JRUC SRGT
SUPLFT MOVE @HALT,A0
JRNZ ISTUK5
DEC A9
JRZ NEWS1
MOVE @WORLDTLY,A0,L
MOVE @HZSPD,A1,L
SUB A1,A0
MOVE A0,@WORLDTLY,L
MOVE @WORLDTLX,A0,L
SUB A1,A0
MOVE A0,@WORLDTLX,L
CALLR MAYBE_UD1
SLEEPK 2
CALLR CK_BTMSD ;CHECK FOR PLAYERS DRAGGING AT BOTM
JRC ISTUK5
CALLR CK_RGTSD ;CHECK FOR PLAYERS DRAGGING AT RGT SD
JRNC SUPLFT
;STUCK UNTIL PLAYERS MOVE
ISTUK5 SLEEPK 2
CALLA SEND_NEUT
CALLR PAUSE
JRC ISTUK5
CALLR PAUSEX2 ;FOR RGT SIDE OF SCRN
JRC ISTUK5
;CONTINUE SCROLL, I HAVE MOVED AWAY FROM WALLS
JRUC SUPLFT
SUP MOVE @HALT,A0
JRNZ ISTUK3
DEC A9
JRZ NEWS1
MOVE @WORLDTLY,A0,L
MOVE @HZSPD,A1,L
SUB A1,A0
MOVE A0,@WORLDTLY,L
CALLR MAYBE_UD1
SLEEPK 2
CALLR CK_BTMSD ;CHECK FOR PLAYERS DRAGGING AT BOTM
JRNC SUP
ISTUK3 SLEEPK 2
CALLA SEND_NEUT
CALLR PAUSE
JRC ISTUK3
JRUC SUP
SDWN MOVE @HALT,A0
JRNZ ISTUK3Z
DEC A9
JRZ NEWS1
MOVE @WORLDTLY,A0,L
MOVE @HZSPD,A1,L
ADD A1,A0
MOVE A0,@WORLDTLY,L
CALLR MAYBE_UD1
SLEEPK 2
CALLR CK_UPSD ;CHECK FOR PLAYERS DRAGGING AT BOTM
JRC SDWN
ISTUK3Z SLEEPK 2
CALLA SEND_NEUT
CALLR PAUSEZ
JRNC ISTUK3Z
JRUC SDWN
SUPRGT MOVE @HALT,A0
JRNZ ISTUK4
DEC A9
JRZ NEWS1
MOVE @WORLDTLY,A0,L
MOVE @HZSPD,A1,L
SUB A1,A0
MOVE A0,@WORLDTLY,L
MOVE @WORLDTLX,A0,L
ADD A1,A0
MOVE A0,@WORLDTLX,L
CALLR MAYBE_UD1
SLEEPK 2
CALLR CK_BTMSD ;CHECK FOR PLAYERS DRAGGING AT BOTM
JRC ISTUK4
CALLR CK_LFTSD ;CHECK FOR PLAYERS DRAGGING AT LFT SD
JRC SUPRGT
;STUCK UNTIL PLAYERS MOVE
ISTUK4 SLEEPK 2
CALLA SEND_NEUT
CALLR PAUSE
JRC ISTUK4
CALLR PAUSEX
JRNC ISTUK4
;CONTINUE SCROLL, I HAVE MOVED AWAY FROM WALLS
JRUC SUPRGT
ONEPX DEC A0
SLL 5,A0
ADDI PLYROBJS,A0
MOVE *A0,A0,L
MOVE *A0(OXPOS),A2
CMP A8,A2
JRNC DOHORZ
JRUC NOHITX
SCROLLFT:
;A9=WORLDTLX TARGET TO STOP AT
MOVE @HALT,A0
JRZ SCR1X
SLEEPK 1
JRUC SCROLLFT
SCR1X MOVE @WORLDTLX,A0,L
SUB A9,A0
ABS A0
CMPI 10000H,A0
JRC STOPITX
MOVE @WORLDTLX,A0,L
MOVE @HZSPD,A1,L
ADD A1,A0
MOVE A0,@WORLDTLX,L
CALLR MAYBE_UD1
SLEEPK 2
CALLR CK_LFTSD ;CHECK FOR PLAYERS DRAGGING AT LEFT
;IF CARRY CLEAR, THE SCROLLER IS STUCK RIGHT HERE
;IF CARRY SET, KEEP SCROLLING
JRC SCROLLFT
;STUCK UNTIL PLAYERS MOVE
ISTUK SLEEPK 2
CALLA SEND_NEUT
CALLR PAUSEX
JRNC ISTUK
;CONTINUE SCROLL, I HAVE MOVED
JRUC SCROLLFT
****************************************************************************
CK_LFTSD
MOVE @WORLDTLX,A1,L
SRL 16,A1
ADDK 10,A1 ;STOP SCROLL IF < THIS FROM EDGE
MOVE @PLYROBJS,A0,L
JRZ CK2X
MOVE *A0(OXPOS),A0
CMP A0,A1
JRNC CKRT
; JRC SETME
CK2X MOVE @PLYROBJS+32,A0,L
JRZ SETME
; JRZ CKRT
MOVE *A0(OXPOS),A0
CMP A0,A1
CKRT RETS
PAUSEX:
;ONE OF THE PLAYERS IS TO FAR LEFT
;WAIT UNTIL THIS IS NOT THE CASE THEN CONTINUE SCROLL
MOVE @WORLDTLX,A1,L
SRL 16,A1
ADDI 50,A1 ;70
MOVE @PLYROBJS,A0,L
JRZ CK2AX
MOVE *A0(OXPOS),A0
CMP A0,A1
JRNC PAUSE2X
; JRC SETME
CK2AX MOVE @PLYROBJS+32,A0,L
JRZ SETME
; JRZ PAUSE2X
MOVE *A0(OXPOS),A0
CMP A0,A1
PAUSE2X RETS
SETME SETC
RETS
CK_RGTSD
MOVE @WORLDTLX,A1,L
SRL 16,A1
ADDI 370,A1 ;STOP SCROLL IF < THIS FROM EDGE
MOVE @PLYROBJS,A0,L
JRZ CK3X
MOVE *A0(OXPOS),A0
CMP A0,A1
; JRNC CKRT2
JRC SETME
CK3X MOVE @PLYROBJS+32,A0,L
; JRZ SETME
JRZ CKRT2
MOVE *A0(OXPOS),A0
CMP A0,A1
CKRT2 RETS
PAUSEX2:
;ONE OF THE PLAYERS IS TO FAR RGT
;WAIT UNTIL THIS IS NOT THE CASE THEN CONTINUE SCROLL
MOVE @WORLDTLX,A1,L
SRL 16,A1
ADDI 340,A1 ;320
MOVE @PLYROBJS,A0,L
JRZ CK2AX2
MOVE *A0(OXPOS),A0
CMP A0,A1
; JRNC PAUSE2X2
JRC SETME
CK2AX2 MOVE @PLYROBJS+32,A0,L
; JRZ SETME
JRZ PAUSE2X2
MOVE *A0(OXPOS),A0
CMP A0,A1
PAUSE2X2
RETS
STOPITX MOVI DELPID,A0
CLR A1
NOT A1
CALLA KILALL
CALLA OFFSCRN
MOVE @TARGET_NUM,A0
CMPI 2,A0
JRNZ STPOUT
;IN FRONT OF ELEVATOR
MOVI RECT5,A0
MOVE A0,@CURRENT,L
CLR A0
MOVE A0,@HULK_DN
MOVE A0,@RUNIN ;FROM BOTTOM AGAIN
MOVE A0,@P1DATA+WAVEPTS
MOVE A0,@P2DATA+WAVEPTS
;DELAY START OF NEW HULK WAVE NEAR ELEVATOR
MOVI ERECT4,A0
MOVE A0,@ENEMY_RECT,L
MOVK 4,A0
CALLA DOLORD
MOVK 16,A0 ;FOR JUMPING DOWN VERTICALLY
MOVE A0,@JUMPXY
MOVI 035DH,A0 ;FOR JUMPING DOWN HORIZONTALLY
MOVE A0,@JUMPXY2
;PUT IN RECTANGLES FOR ENEMY COLLISIONS HERE!
MOVI ENRECT4,A0
MOVE A0,@EN_CURRENT,L
CREATE FUTUREPID,POL2 ;BRING ON SIDE POOL
DIE
YCHK
;CHECK PLAYERS FOR Y TARGET
MOVE @STATUS,A0
CMPI 3,A0
JRNZ ONEP
;BOTH PLYRS IN GAME
MOVE @PLYROBJS,A0,L
MOVE @PLYROBJS+32,A1,L
MOVE *A0(OYPOS),A2
MOVE *A1(OYPOS),A3
CMP A9,A2
JRC YESHIT
CMP A9,A3
JRC YESHIT
NOHIT SLEEPK 10
JRUC YCHK
YESHIT
;ONE OF PLAYERS IS ABOVE TARGET LINE
SUB A2,A3
ABS A3
CMPI 90,A3
JRNC NOHIT
DOVERT
;START VERT SCROLL!
MOVE A10,A10
JRNZ NEWSCRL
MOVE @TARGET_NUM,A10
MOVE @WORLDTLY,A9,L
CMPI 7,A10 ;AFTER 1ST LOCK DOWN
JRNZ DZL
;START HZ SCROLL ALSO
CREATE TARGPID,SCRDHZ
DZL
;PUT UP TEXT MESSAGE OF ZONE ZULU!
MOVE @START,A0
CMPI 1,A0
JRZ SKP
CMPI 1,A10
JRNZ SKP
; .IF DEBUG
; MOVE @START,A0
; CMPI 3,A0
; JRNZ SKP
; .ENDIF
MOVI 0C0CH,A8 ;0C0C ;3E3E
CREATE0 DO_ZONE_TXT
SKP SLL 5,A10
ADDI TARGET_LST,A10
MOVE *A10,A0,L
SUB A0,A9
JRNN OUTA
CLR A9
OUTA
CREATE TARGPID,SCROLLDWN
CREATE DELPID,DELOFF
DIE
DO_ZONE_TXT
CMPI 1,A10
JRNZ ASLP
CREATE FUTUREPID,SEND_TOP
ASLP SLEEP 60
MOVE @WORLDTLY,A0,L
CMPI [1F0H,0],A0
JRGT ASLP
CREATE0 ZONE_TXT
SLEEP 60
; CREATE FUTUREPID,SENDH_TOP
CREATE FUTUREPID,SHIFTLM
SLEEP 120
;DELAY START OF NEW HULK WAVE
MOVI ERECT2,A0
MOVE A0,@ENEMY_RECT,L
MOVK 2,A0
CALLA DOLORD
;POSSIBLY PUT IN RECTANGLES FOR COLLISIONS HERE!
CLR A0
MOVE A0,@EN_CURRENT,L
DIE
TARGET_LST:
.LONG [02CCH,0],[0275H,0],[01E0H,0],[0A01H,0],0
.LONG [26DH+2,0],[0,0],[1100,0],[0,0],0 ;DESERT START 26D
CKFORY2 SLEEP 60
MOVE @WORLDTLY,A0,L
CMPI [3F8H,0],A0
JRGT CKFORY2
;READY FOR JEEPS TO COME DOWN AT ME
MOVK 7,A0
CALLA DOLORD
MOVI ERECT7,A0
MOVE A0,@ENEMY_RECT,L ;FOR SPAWNING
MOVI SRECT1A,A0
MOVE A0,@CURRENT,L
MOVI BSRECT1A,A0
MOVE A0,@BCURRENT,L
MOVK 16,A0 ;FOR JUMPING DOWN VERTICALLY
MOVE A0,@JUMPXY
MOVK SUBSPDG1,A9 ;BULLET SUBTYPE
CREATE FIXPID,FIXGUNS
DIE
JEPCYC
CALLA JEEPCYC
;TURN ON A JEEP AND SEND HIM DOWN AT PLAYER
MOVE A0,*A13(PDATA+32),L ;KEEP COLOR CYCLE PROC PNTR
SLEEP 14*60 ;LAST JEEP IS OFF SCRN
CALLR KILJC
DIE
CKFORY3 SLEEP 60 ;FOR DESERT MINE FIELD BEFORE
MOVE @WORLDTLY,A0,L ;2ND LOCKDOWN! PATHA
CMPI [0E42H,0],A0
JRGT CKFORY3
CALLA JEEPCYC
;TURN ON A JEEP AND SEND HIM DOWN AT PLAYER
MOVE A0,*A13(PDATA+32),L ;KEEP COLOR CYCLE PROC PNTR
MOVE @PCNT,A11
ANDI 01,A11
ADDK 2,A11
JP2 SLEEPK 1
MOVE @HALT,A0
JRNZ JP2
MOVI [10CH,0],B0 ;X POS
MOVI [11EH,0],B1
CALLA RANGRAND
MOVE A0,A10
; MOVI [1,0],B0 ;JEEP SPEED
; MOVI [2,0E000H],B1
MOVI [1,8000H],B0 ;JEEP SPEED
MOVI [3,0A000H],B1
CALLA RANGRAND
MOVE A0,A9 ;VERT SPEED FOR JEEP
CREATE JEEPID,ONEJEEP ;FUTUREPID
MOVI 60*4,B0
MOVI 60*7,B1
CALLA RANGRAND
CALLA PRCSLP
DSJ A11,JP2
SLEEP 200 ;LAST JEEP IS OFF SCRN
CALLR KILJC
CKFORY3A
SLEEP 60 ;FOR DESERT MINE FIELD BEFORE
MOVE @WORLDTLY,A0,L ;2ND LOCKDOWN!
CMPI [0CD2H,0],A0
JRGT CKFORY3A
MOVE @WORLDTLX,A9,L
; ADDI [70,0],A9
MOVE A9,A10
ADDI [400,0],A10 ;300
MOVK 6,A8
;START THEM MOVING
CKF3 CALLA DOSHIFT
SLEEP 60
;NOW STOP THEM
CALLA DOSHIFT2
;DIFFICULTY SETTING HERE!
SLEEP 50 ;SLEEP 1 FOR HARD DIFFICULTY
DSJ A8,CKF3
DIE
KILJC
MOVE *A13(PDATA+32),A0,L
CALLA PEXIST
JRZ CRT
MOVE *A0(PROCID),A1
CMPI CYCPID,A1
JRNZ CRT
CALLA KILL ;KILL COLOR CYCLE PROCESS
CRT RETS
CKFORY4
SLEEP 120 ;FOR JEEPS
MOVE @WORLDTLY,A0,L
CMPI [0FD2H,0],A0
JRGT CKFORY4
CALLA JEEPCYC
;TURN ON A JEEP AND SEND HIM DOWN AT PLAYER
MOVE A0,*A13(PDATA+32),L ;KEEP COLOR CYCLE PROC PNTR
MOVE @PCNT,A11
ANDI 03H,A11
ADDK 7,A11
JP1 SLEEPK 1
MOVE @HALT,A0
JRNZ JP1
MOVI [125,0],B0
MOVI [185,0],B1
CALLA RANGRAND
MOVE A0,A10 ;XPOS FOR JEEP
; MOVI [1,0],B0
; MOVI [2,0E000H],B1
MOVI [1,8000H],B0
MOVI [3,0C000H],B1
CALLA RANGRAND
MOVE A0,A9 ;VERT SPEED FOR JEEP
CREATE JEEPID,ONEJEEP ;FUTUREPID
MOVI 60*4,B0
MOVI 60*7,B1
CALLA RANGRAND
CALLA PRCSLP
DSJ A11,JP1
SLEEP 200 ;LAST JEEP IS OFF SCRN
CALLR KILJC
; MOVE *A13(PDATA+32),A0,L
; CALLA KILL ;KILL COLOR CYCLE PROCESS
SLEEP 30*60
CK4A SLEEP 90
MOVE @WORLDTLY,A0,L
CMPI [0BD0H,0],A0
JRGT CK4A
MOVE @WORLDTLX,A0,L
CMPI [0160H,0],A0
JRGT CK4A
;START LAND MINES SHIFTING AT END OF PATHA!
MOVE @WORLDTLX,A9,L
SUBI [170,0],A9
MOVE A9,A10
ADDI [900,0],A10
MOVK 4,A8
;START THEM MOVING
CKF5 CALLA DOSHIFT
SLEEP 60
;NOW STOP THEM
CALLA DOSHIFT2
;DIFFICULTY SETTING HERE!
SLEEPK 5 ;SLEEP 1 FOR HARD DIFFICULTY
DSJ A8,CKF3
DIE
CKFORY SLEEP 60
MOVE @WORLDTLY,A0,L
CMPI [780H,0],A0
JRGT CKFORY
MOVE @WORLDTLX,A9,L
ADDI [76,0],A9
MOVE A9,A10
ADDI [170,0],A10
MOVK 6,A8
; MOVE A8,@WAVE
MOVI 34,A8
;START THEM MOVING
CKF CALLA DOSHIFT
SLEEP 30
;NOW STOP THEM
CALLA DOSHIFT2
;DIFFICULTY SETTING HERE!
SLEEP 25 ;SLEEP 1 FOR HARD DIFFICULTY
DSJ A8,CKF
MOVE @WORLDTLY,A0,L
MOVK 1,A8
CMPI [580H,0],A0
JRGT CKF
MOVK 7,A8 ;FOR BARRELS ALONG FREEWAY
MOVE A8,@WAVE
CREATE FUTRPID,CKFORY2
DIE
ONEP DEC A0
SLL 5,A0
ADDI PLYROBJS,A0
MOVE *A0,A0,L
JRZ NOHIT
MOVE *A0(OYPOS),A2
CMP A9,A2
JRC DOVERT
JRUC NOHIT
SCRDHZ
;MAYBE SCROLL SCREEN HORIZ
;CHECK TO SEE IF BOTH PLAYERS ARE IN FIXED Y COLUMN
;IF SO,
;CHECK CURRENT WORLDX
;IF IT IS AT BORDER, EXIT, IF NOT, SCROLL
;A9=WORLDTLY TARGET TO STOP AT
CLR A0
MOVE A0,*A13(PDATA),L ;BOTH LFT/RGT MINIMUM SCROLL
SCRDHZA
MOVE @HALT,A0
JRZ OSCR1
SLEEPK 1
JRUC SCRDHZA
OSCR1
MOVE *A13(PDATA),A0 ;GOING LEFT?
JRNZ GOL
MOVE *A13(PDATA+16),A0 ;GOING RIGHT
JRNZ GOR
MOVE @WORLDTLX,A1,L
SRL 16,A1
ADDI 140,A1
MOVE @PLYROBJS,A0,L
JRZ PK2
MOVE *A0(OXPOS),A0
CMP A0,A1
JRC NOTL ;NOT ON LEFT SIDE
;THIS GUY IS ON LEFT OF SCREEN
PK2 MOVE @PLYROBJS+32,A0,L
JRZ GOLZ ;GO LEFT
MOVE *A0(OXPOS),A0
CMP A0,A1
JRC NOTL
GOLZ
;SCROLL TO LEFT
MOVK 30,A0
MOVE A0,*A13(PDATA) ;TIME GOING LEFT
JRUC GOL
NOTL
;DO NOT SCROLL LEFT
;CHECK FOR RIGHT SIDE SCROLL
ADDI 120,A1
MOVE @PLYROBJS,A0,L
JRZ XPK2
MOVE *A0(OXPOS),A0
CMP A0,A1
JRNC NOTR ;NOT ON RGT SIDE
;THIS GUY IS ON RGT OF SCREEN
XPK2 MOVE @PLYROBJS+32,A0,L
JRZ GORZ ;GO LEFT
MOVE *A0(OXPOS),A0
CMP A0,A1
JRNC NOTR
GORZ
;SCROLL TO RIGHT
MOVK 30,A0
MOVE A0,*A13(PDATA+16) ;TIME GOING LEFT
JRUC GOR
NOTRZ CLR A0
MOVE A0,*A13(PDATA+16) ;NO MORE TO RIGHT
NOTR
;NOT SCROLLING TO RIGHT
SLEEPK 2
JRUC SCRDHZA
NOMORE CLR A0
MOVE A0,*A13(PDATA)
JRUC NOTR
GOL
;SCROLL LEFT
DEC A0
MOVE A0,*A13(PDATA)
MOVE @WORLDTLX,A0,L
CMPI [01CH,0],A0
JRLT NOMORE
;CAN GO FARTHER TO LEFT
MOVE @HZSPD,A1,L
SUB A1,A0
INH1 MOVE A0,@WORLDTLX,L
CALLR MAYBE_UD1
JRUC NOTR
GOR
;SCROLL LEFT
DEC A0
MOVE A0,*A13(PDATA+16)
MOVE @WORLDTLX,A0,L
CMPI [01A0H,0],A0
JRGT NOTRZ
;CAN GO FARTHER TO RIGHT
MOVE @HZSPD,A1,L
ADD A1,A0
JRUC INH1
SCROLLDWN:
;A9=WORLDTLY TARGET TO STOP AT
MOVE @HALT,A0
JRZ SCR1
SLEEPK 1
JRUC SCROLLDWN
SCR1 MOVE @WORLDTLY,A0,L
SUB A9,A0
ABS A0
CMPI 10000H,A0
JRC STOPIT
MOVE @WORLDTLY,A0,L
MOVE @HZSPD,A1,L
SUB A1,A0
MOVE A0,@WORLDTLY,L
CALLR MAYBE_UD1
SLEEPK 2
CALLR CK_BTMSD ;CHECK FOR PLAYERS DRAGGING AT BOTM
JRNC SCROLLDWN
ISTUK2 SLEEPK 2
CALLA SEND_NEUT
CALLR PAUSE
JRC ISTUK2
JRUC SCROLLDWN
CK_BTMSD
MOVE @WORLDTLY,A1,L
SRL 16,A1
ADDI 220,A1
MOVE @PLYROBJS,A0,L
JRZ CK2
MOVE *A0(OYPOS),A0
CMP A0,A1
JRC CKBR
CK2 MOVE @PLYROBJS+32,A0,L
JRZ SETME2
MOVE *A0(OYPOS),A0
CMP A0,A1
CKBR RETS
CK_UPSD
MOVE @WORLDTLY,A1,L
SRL 16,A1
ADDI 15,A1
MOVE @PLYROBJS,A0,L
JRZ CK2Z
MOVE *A0(OYPOS),A0
CMP A0,A1
JRNC CKBR
CK2Z MOVE @PLYROBJS+32,A0,L
JRZ SETME2
MOVE *A0(OYPOS),A0
CMP A0,A1
RETS
PAUSE:
;ONE OF THE PLAYERS IS TO LOW
;WAIT UNTIL THIS IS NOT THE CASE THEN CONTINUE SCROLL
MOVE @WORLDTLY,A1,L
SRL 16,A1
ADDI 195,A1 ;190
MOVE @PLYROBJS,A0,L
JRZ CK2A
MOVE *A0(OYPOS),A0
CMP A0,A1
JRC PAUSE2
CK2A MOVE @PLYROBJS+32,A0,L
JRZ SETME2
MOVE *A0(OYPOS),A0
CMP A0,A1
PAUSE2 RETS
SETME2 CLRC
RETS
PAUSEZ:
;ONE OF THE PLAYERS IS TO HI
;WAIT UNTIL THIS IS NOT THE CASE THEN CONTINUE SCROLL
MOVE @WORLDTLY+16,A1
ADDK 25,A1 ;190
MOVE @PLYROBJS,A0,L
JRZ CK2AZ
MOVE *A0(OYPOS),A0
CMP A0,A1
JRNC SETME2Z
CK2AZ MOVE @PLYROBJS+32,A0,L
JRZ PAUSE2Z
MOVE *A0(OYPOS),A0
CMP A0,A1
PAUSE2Z RETS
SETME2Z CLRC
RETS
MAYBE_UD1
MOVE @CNTDIG1,A0
JRZ ALREA
MOVE @CNTDIG2,A1
JRZ ALREA
;BOTH CNTRS GOING!
MOVI SCROLL_FIX,A0
CLR A1
NOT A1
CALLA EXISTP
JRNZ ALREA
;DO IT
MOVK 1,A0
MOVE A0,@HALT
CREATE SCROLL_FIX,BOTHDEAD
ALREA DEC A8
MOVE A8,A0
MOVK 1FH,A0
AND A8,A0
JRNZ NOBGND
;CALL BGND_UD1 OCCASIONALLY
CLR A0
MOVE A0,@SLOW_DWN
JAUC BGND_UD1
NOBGND
RETS
BOTHDEAD
SLEEPK 1
MOVE @CNTDIG1,A0
JRZ BDONE
MOVE @CNTDIG2,A0
JRNZ BOTHDEAD
BDONE CLR A0
MOVE A0,@HALT
DIE
STOPIT MOVI DELPID,A0
CLR A1
NOT A1
CALLA KILALL
CALLA OFFSCRN
MOVE @TARGET_NUM,A0
CMPI 8,A0
JRZ LCK1
CMPI 6,A0
JRZ YEA
CMPI 5,A0
JRNZ STP0
YEA
;DESERT AREA 1ST STOPPAGE
MOVK 2,A0
MOVE A0,@ARWOFF ;BLINK ARROW X MORE TIMES THEN KILL!
MOVI DRECT2,A0
MOVE A0,@CURRENT,L
MOVI DBRECT2,A0
MOVE A0,@BCURRENT,L
SLEEPK 20
MOVK 5,A10
MOVI [-16,0],A9 ;Y ADD IN VALUE
CREATE0 ZONE_TXT2
;NO COLLISIONS
CLR A0
MOVE A0,@P1DATA+WAVEPTS
MOVE A0,@P2DATA+WAVEPTS
MOVE A0,@EN_CURRENT,L ;FOR BOX COLLISIONS
MOVI ERECT10,A0
MOVE A0,@ENEMY_RECT,L ;FOR SPAWNING
SLEEPK 30 ;40
MOVK 8,A0
MOVE A0,@CTOTAL
MOVK 10,A0
CALLA DOLORD ;STORE WAVE #, START WAVE CODE
SLEEP 10*60
MOVE @WORLDTLX,A0,L
ADDI [01CH,0],A0
MOVE @WORLDTLY,A1,L
ADDI [0C5H,0],A1
MOVI FINDKEYS,A2
MOVI 71,A3
MOVI DMAWNZ|M_NOCOLL,A4
MOVI CLSDEAD,A5
CLR A6
CLR A7
CALLA BEGINOBJ2
MOVE A8,A0
CALLA OBJOFF
MOVK 12,A9
UB1 MOVE A8,A0
CALLA OBJON
SLEEPK 10
MOVE A8,A0
CALLA OBJOFF
SLEEPK 10
DSJ A9,UB1
MOVE A8,A0
CALLA DELOBJ
DIE
STP0 CMPI 1,A0
JRZ STP1
CMPI 3,A0
JRNZ STPOUT
;END OF SECRET PATH
CLR A0
MOVE A0,@P1DATA+WAVEPTS
MOVE A0,@P2DATA+WAVEPTS
MOVK 8,A0
CALLA DOLORD
MOVI ERECT8,A0
MOVE A0,@ENEMY_RECT,L ;FOR SPAWNING
CLR A0
MOVE A0,@WORLDTLY,L
CREATE FUTUREPID,POL ;BRING ON BOTTOM POOL
MOVI FIXPID,A0
CALLA KIL1C
DIE
STP1 ;REACTOR ON SCREEN
CLR A0
MOVE A0,@P1DATA+WAVEPTS
MOVE A0,@P2DATA+WAVEPTS
movk AUDREACTOR,a0
calla aud_addnumplyrs
CLR A0
MOVE A0,*A13(PROCID),W
MOVI 10000H,A0
MOVE A0,@WORLDTLY,L
MOVI RECT3,A0
MOVE A0,@CURRENT,L
;DELAY START OF NEW HULK WAVE
MOVI ERECT3,A0
MOVE A0,@ENEMY_RECT,L
MOVK 3,A0
CALLA DOLORD
MOVI ICN2,A0
MOVE A0,@ICLIST,L
CREATE ICONPID,SEND_ICON
;PUT IN RECTANGLES FOR ENEMY COLLISIONS HERE!
MOVI ENRECT3,A0
MOVE A0,@EN_CURRENT,L
CREATE FUTUREPID,POL ;BRING ON BOTTOM POOL
MOVI CYCPID,A0
MOVE A0,*A13(PROCID)
;ANI FLAG SHOULD HAVE DONE THIS!
MOVI -30,A0
MOVE A0,@JUMPXY
MOVI RECT2,A0
MOVE A0,@CURRENT,L
MOVI BRECT2,A0
MOVE A0,@BCURRENT,L
;TEMPORARY SHIT
SLEEP 7*60
CREATE CYCPID,PUMP_RED
MOVI 10000H,A0
MOVE A0,@WORLDTLY,L
DIE
ENDWV
;WAIT HERE UNTIL END OF WAVE REACHED!
;BATS TO FLY OUT OF SLIME?
;AT TOP OF FIRST WORLD
;START ARROW TO RIGHT!
;WAVE DONE
MOVI SECDR,A0
CLR A1
NOT A1
CALLA EXISTP
JRZ NOCH0
;FOUND SECRET DOOR PROCESS
CALLA KILL
NOCH0
CLR A0 ;FOR BARREL EXPLOSION TIMING
MOVE A0,@WAVE
MOVE @KEEPIT,A8,L ;GET RID OF RIGHT SIDE POOL
MOVI 8000H,A1
MOVE A1,*A8(OXVEL),L
CREATE0 DO_WINNER
;START HORZ SCROLL TO ELEVATOR
MOVK 1,A9 ;A9=0 FOR UP, 1 FOR RGT
CREATE ARWPID,ONARRW ;TURN ON UP ARROW
MOVK 2,A0
MOVE A0,@TARGET_NUM ;NEXT TARGET NUMBER FOR SCROLL
MOVE @WORLDTLX,A8,L
SRL 16,A8
ADDI 80,A8 ;200 ;A8=X TARGET LINE TO TRIGGER SCROLL
CLR A9 ;A9=0 MEANS NOT CHECKING FOR Y TARGET
CLR A10
CREATE TARGPID,TARGET
SLEEP 53
MOVK 15,A0
MOVE A0,@ARWOFF ;BLINK ARROW X MORE TIMES THEN KILL!
MOVE @KEEPIT,A0,L ;GET RID OF RIGHT SIDE POOL
CALLA DELOBJ
CREATE0 FIXSCROLL
STPOUT DIE
FIXSCROLL
SLEEPK 1
MOVE @WAVE,A0
SUBK 4,A0
JAZ SUCIDE
MOVE @WORLDTLX+16,A0
CMPI 480,A0
JRLT FIXSCROLL
MOVK 2,A0
MOVE A0,@TARGET_NUM
MOVI TARGPID,A0
CALLA KIL1C
JRUC STOPITX
SETRUNIN
;A10=TARGET FOR CHANGING @RUNIN TO 1
SLEEP 60
MOVE @WORLDTLX,A0,L
CMP A10,A0
JRLT SETRUNIN
MOVK 1,A0
MOVE A0,@RUNIN
DIE
DELOFF SLEEP 3*60
;FOR SCROLLING DOWN
CALLA DELOFFBOT
JRUC DELOFF
DELOFFH SLEEP 8*60
;FOR SCROLLING RGT TO LEFT
CALLA DELOFFBOTL
JRUC DELOFFH
DELOFFHR
SLEEP 8*60
;FOR SCROLLING LFT TO RGT
CALLA DELOFFBOTR
JRUC DELOFFHR
DELOFFBOTR:
;DELETE FOREGROUND OBJECTS THAT ARE OFF RIGHT SIDE OF SCREEN
MOVE @WORLDTLX,A1,L
SRL 16,A1
ADDI 400,A1
MOVI RAMLST,A3
CLR A0
MOVE A0,*A3,L
MOVI OBJLST,A0
ROBJS1X
MOVE *A0,A0,L
JREQ SOBJSX ;SEARCHED THEM ALL
MOVE *A0(OID),A4,W
CMPI CLSNEUT|TYPTRUNK,A4
JRZ RONTAX
CMPI CLSNEUT|TYPICON|SUBCSH,A4
JRZ RONTAX
;ENTER OTHER OIDS TO KILL HERE
JRUC ROBJS1X
RONTAX MOVE *A0(OXPOS),A2
CMP A2,A1
JRNC ROBJS1X
MOVE A0,*A3+,L ;IMG TO BE DELETED
CLR A4
MOVE A4,*A3,L ;ZERO NEXT ENTRY
JRUC ROBJS1X
DELOFFBOTL:
;DELETE FOREGROUND OBJECTS THAT ARE OFF LEFT SIDE OF SCREEN
MOVE @WORLDTLX,A1,L
SRL 16,A1
MOVI RAMLST,A3
CLR A0
MOVE A0,*A3,L
MOVI OBJLST,A0
SOBJS1X
MOVE *A0,A0,L
JREQ SOBJSX ;SEARCHED THEM ALL
MOVE *A0(OID),A4,W
CMPI CLSNEUT|TYPTRUNK,A4
JRZ CONTAX
CMPI CLSNEUT|TYPICON|SUBCSH,A4
JRZ CONTAX
;ENTER OTHER OIDS TO KILL HERE
JRUC SOBJS1X
CONTAX MOVE *A0(OXPOS),A2
MOVE *A0(OSIZEX),A4
ADD A4,A2
CMP A2,A1
JRC SOBJS1X
MOVE A0,*A3+,L ;IMG TO BE DELETED
CLR A4
MOVE A4,*A3,L ;ZERO NEXT ENTRY
JRUC SOBJS1X
DELOFFBOT:
;DELETE FOREGROUND OBJECTS THAT ARE OFF BOTTOM OF SCREEN
MOVE @WORLDTLY,A1,L
ADDI [260,0],A1
SRL 16,A1
MOVI RAMLST,A3
CLR A0
MOVE A0,*A3,L
MOVI OBJLST,A0
SOBJS1
MOVE *A0,A0,L
JREQ SOBJSX
MOVE *A0(OID),A4,W
CMPI CLSNEUT|TYPTRUNK,A4
JRZ CONTA
CMPI CLSNEUT|TYPICON|SUBCSH,A4
JRZ CONTA
; CMPI CLSNEUT|TYPMINE,A4 ;9/16/91
; JRZ CONTA0
;ENTER OTHER OIDS TO KILL HERE
JRUC SOBJS1
;CONTA0
; MOVE *A0(OYPOS),A2
; CMP A2,A1
; JRNC SOBJS1
; MOVE *A0(OPLINK),A1,L
; JRZ CONTAB
; SWAP A0,A1
; CALLA KILL
; MOVE A1,A0
; JRUC CONTAB
CONTA MOVE *A0(OYPOS),A2
CMP A2,A1
JRNC SOBJS1
CONTAB
MOVE A0,*A3+,L ;IMG TO BE DELETED
CLR A4
MOVE A4,*A3,L ;ZERO NEXT ENTRY
JRUC SOBJS1
SOBJSX
MOVI RAMLST,A1
DELT MOVE *A1+,A0,L
JRZ DELX
CALLA DELOBJ
JRUC DELT
DELX RETS
POL
;TURN ON BOTTOM GOOB POOL
MOVI GOOB,A14
CALLA DO_ALL_STUFF
MOVE A0,A8
SLEEP 04CH
CLR A0
MOVE A0,*A8(OYVEL),L
MOVI 0F4H,A0
MOVE A0,*A8(OYPOS)
DIE
;POL1
;;TURN ON BOTTOM GOOB POOL
; MOVI GOOB,A14
; CALLA DO_ALL_STUFF
; CALLA ADJSTWTL
; MOVE A0,A8
; SLEEP 04CH
; CLR A0
; MOVE A0,*A8(OYVEL),L
; DIE
POL2
;TURN ON SIDE GOOB POOL BY ELEVATOR
MOVI GOOBA,A14
CALLA DO_ALL_STUFF
CALLA ADJSTWTL
MOVE A0,A8
SLEEP 04CH
CLR A0
MOVE A0,*A8(OXVEL),L
DIE
GOOB:
.LONG [0DAH,0],[0108H,0],GOOBB
.WORD 20,DMAWNZ|M_NOCOLL,CLSNEUT|TYPNEUT
.LONG 0,-4000H
GOOBA:
.LONG [1DCH-1DFH,0],[084H,0],GOOBR
.WORD 20,DMAWNZ|M_NOCOLL|M_FLIPH,CLSNEUT|TYPNEUT
.LONG 04000H,0
BNC_PLYR2
;MOVE PLAYER AWAY FROM SOME OBJECT
;A8=PLYR LEGS
;A0=OBJECT TO SLIDE AWAY FROM
;BNC FARTHER AWAY WITH THIS ENTRY POINT
MMTM SP,A1,A2,A3,A4,A5,A6,A7,A9
MOVI [2,0],A7
JRUC BNCIN
BNC_PLYR
;MOVE PLAYER AWAY FROM SOME OBJECT
;A8=PLYR LEGS
;A0=OBJECT TO SLIDE AWAY FROM
MMTM SP,A1,A2,A3,A4,A5,A6,A7,A9
MOVI [1,8000H],A7
BNCIN:
MOVE *A8(OIMG),A1,L
CMPI BLADE,A1
JRZ AOUT3
CMPI SHLD1,A1
JRZ AOUT3
CMPI SHLD2,A1
JRZ AOUT3
move @WAVE,A1
subk 16,A1
jrnz notorc2 ;!Orcus?
move *a8(OYPOS),a1
move @WORLDTLY+16,a2
addi 240,a2
cmp a2,a1
jrge AOUT3 ;Don't push plyr
move @bossd_t,a0,L
move *a0(OXPOS),a2
addi 43,a2
move *a0(OYVAL),a3,L
jruc bossfix
notorc2 MOVE A0,A9
MOVE A8,-*SP,L ;PUSH A8
MOVE A0,A8
CALLA GETCPNT
;A1=Y/X CENTER POS
MOVE *SP+,A8,L ;PULL A8
MOVE A1,A2
MOVE A1,A3
bossfix sll 16,a2
MOVE *A8(OPLINK),A5,L
MOVE *A5(TSO_PTR),A5,L
MOVE A8,A1
MOVE *A1(OXVAL),A4,L
MOVE *A5(OXVAL),A6,L
CMP A4,A2
JRGT GONEG
;ADD TO PLYR X
ADD A7,A4
ADD A7,A6
JRUC GOGO
GONEG
SUB A7,A4
SUB A7,A6
GOGO
MMTM SP,A4,A6
MOVE *A1(OYVAL),A4,L
MOVE *A5(OYVAL),A6,L
CMP A4,A3
JRGT GONEG2
;ADD TO PLYR Y
ADD A7,A4
ADD A7,A6
JRUC GOGO1
GONEG2 SUB A7,A4
SUB A7,A6
GOGO1
MMFM SP,A0,A2
;FIRST CHECK TO SEE IF THIS WILL PUSH PLAYER INTO BAD RECTANGLE AREA
;A0 TO *A1(OXPOS)
;A4 TO *A1(OYPOS)
MMTM SP,A0,A1,A2,A4,A6
MOVE A4,A6
MOVE A0,A4
;CHECK FOR RECTANGLE COLLISIONS
ADDK 4,A4
ADDK 4,A6
MOVE @CURRENT,A0,L ;CURRENT RECT LIST
JRZ AOUT
ANEXT0 MOVE *A0+,A1,W
JRZ AOUT
SLL 16,A1
CMP A1,A4
JRLT ANEXT ;IF BRNCH RECT LFT EDGE > PLYR X
MOVE *A0+,A1,W
SLL 16,A1
CMP A1,A6
JRLT ANEXTA ;IF BRNCH RECT TOP EDGE > PLYR Y
MOVE *A0+,A1,W
SLL 16,A1
CMP A1,A4
JRGT ANEXTB ;IF BRNCH RECT RGT EDGE < PLYR X
MOVE *A0+,A1,W
SLL 16,A1
CMP A1,A6
JRGT ANEXT0 ;IF BRNCH RECT BOT EDGE < PLYR Y
;HIT
MMFM SP,A0,A1,A2,A4,A6
;BLOW UP BARREL IN A9!
MOVE *A9(OIMG),A0,L
CMPI BRRL2,A0
JRZ YKL
CMPI CRT1,A0
JRNZ AOUT3
YKL CALLA KILL_CRT3
JRUC AOUT3
ANEXT ADDI 48,A0
JRUC ANEXT0
ANEXTA ADDK 32,A0
JRUC ANEXT0
ANEXTB ADDK 16,A0
JRUC ANEXT0
AOUT
MMFM SP,A0,A1,A2,A4,A6
AOUT2
MOVE A4,*A1(OYVAL),L ;LEGS
MOVE A6,*A5(OYVAL),L
MOVE A0,*A1(OXVAL),L ;LEGS
MOVE A2,*A5(OXVAL),L
AOUT3
MMFM SP,A1,A2,A3,A4,A5,A6,A7,A9
RETS
SHOTKILL
;IN HERE WHEN A GOO SHOT KILLS PLAYER
;A8=PLAYER PNTR TO DIE
MMTM SP,A1,A2,A6,A7,A10,A11
MOVE *A13(MYLIST),A7,L ;SLM,A9
CMPI BOOB_BURST,A7
JRNZ SKL00
;ELECTROCUTE PLAYER
MOVI CLSNEUT|TYPMINE|01,A7
MOVE A7,*A0(OID) ;THIS BULLET WILL ELECTROCUTE PLAYER
JRUC SKL1
SKL00 CMPI BURST,A7
JRNZ SKL1
MOVI CLSENMY|TYPLAYR|SUBFLM,A7
MOVE A7,*A0(OID) ;THIS BULLET WILL FLAME PLAYER
SKL1 MOVE *A8(OPLINK),A7,L
MOVE *A7(DELYDET),A1
JRNZ GAMOK
MOVE @GAMSTATE,A0
CMPI INAMODE,A0
JRZ GAMOK
MOVE @WAVE,A1
SUBK 32,A1
JRZ GAMOK
MOVE *A7(DEAD),A1
JRNZ GAMOK
move a0,a1
; movi AUDDEATHPR,a0 ;Projectile deaths
; calla AUD1
move a1,a0
jruc SKL2
WARP_KIL
MMTM SP,A1,A2,A6,A7,A10,A11
;A0=PLYR PROCESS
;A7=^
MOVE *A7(TSO_PTR),A1,L
MOVE A2,A2
JRZ XWRPK
CLR A11
MOVE A11,*A1(OXVAL),L
XWRPK MOVI CLSENMY|TYPLAYR,A11
JRUC WRPK
bombn_killp ;A0=*Player process
MMTM SP,A1,A2,A6,A7,A10,A11
move a0,a7
movi CLSNEUT|TYPMINE,A11
JRUC WRPK
GATE_PLYR:
;PLYR IN A8, KILLER IN A0
MMTM SP,A1,A2,A6,A7,A10,A11
MOVE @HALT,A1
JRNZ GAMOK
MOVE *A8(OPLINK),A7,L
; MOVE *A7(DELYDET),A1
; JRZ EKRU
; sll 32-9,a1 ;And >1ff
; srl 32-9,a1
; JRNZ GAMOK
;EKRU
MOVE *A7(DEAD),A1
JRNZ GAMOK
;YES, KILL THIS PLYR
;A0=KILLER IMG PNTR
MOVE A0,A10 ;PASS ALONG FOR MINE DEATH
MOVE A10,*A7(KILLERO),L ;KEEP KILL PNTR
;AN ELECTRIFIED LAND MINE
MOVI CLSNEUT|TYPMINE|01,A11
JRUC NOT_MINE
KILL_PLYR:
;MAKE MORE EFFICIENT!!!
;SAVE REGISTERS!?!
;PLYR IN A8, KILLER IN A0
MMTM SP,A1,A2,A6,A7,A10,A11
; MOVE *A0(OID),A1
; ANDI 0FFFFH,A1
; CMPI CLSENMY|TYPORBL,A1
; JRNE NSHKME ;SHOCK PLAYER
;LAZER INTO PLAYER!
;DIFFERET SIZE FOR DETECTION
; CALLA SHORT2
; JRNC GAMOK
; JRUC KP99
;NSHKME
CALLA SHORT_PLYR ;REALLY A HIT?
JRNC GAMOK ;BR=NO COLLIDE!
;KP99
MOVE @HALT,A1
JRNZ GAMOK
MOVE *A8(OPLINK),A7,L
MOVE *A7(DELYDET),A1
JRNZ GAMOK
MOVE @WAVE,A1
SUBK 32,A1
JRZ GAMOK
MOVE *A7(DEAD),A1
JRNZ GAMOK
SKL2 MOVE @WAVE,A10
CMPI 16,A10
JRZ NOCHNG6
CMPI 35,A10
JRGE NOCHNG6
MOVE *A7(PNUM),A10
SUBK 1,A10
JRZ CKJ2
MOVE @P2DATA+PLIVES,A1
JRNZ NOCHNG6
MOVE @timerp2,A1 ;Player 2 seconds since death
JRUC CKJ1
CKJ2 MOVE @P1DATA+PLIVES,A1
JRNZ NOCHNG6
MOVE @timerp1,A1 ;Player 1 seconds since death
CKJ1 PUSH A0
MOVI ADJDIFF,A0
.REF GET_ADJ
CALLA GET_ADJ
;A0=0-9 DIFFICULTY LEVEL!
SLL 3,A0
ADDI MINIMUM,A0
MOVB *A0,A10
PULL A0
CMP A10,A1
JRGT NOCHNG6
;BOZO PLAYER, GIVE HIM A BREAK!
PUSH A9
MOVK 10,A9
MOVE A9,*A7(DELYDET)
MOVE *A7(PNUM),A9
MOVK 20,A10
CMPI 1,A9
JRZ PP1
CREATE RNG2PID,RINGS
JRUC PPO
PP1 CREATE RNG1PID,RINGS
PPO PULL A9
JRUC GAMOK
MINIMUM .BYTE 140,100,70,60,50,40,30,30,30,30,30 ;MINIMUM GAME TIME
.EVEN
NOCHNG6
;YES, KILL THIS PLYR
;A0=KILLER IMG PNTR
MOVE A0,A10 ;PASS ALONG FOR MINE DEATH
MOVE A10,*A7(KILLERO),L ;KEEP KILL PNTR
MOVE *A0(OID),A11
zext a11
CMPI CLSENMY|TYPHULK,A11
JRNZ NOTPNCH
;MAYBE DO PUNCH SND
MOVE *A0(OPLINK),A1,L
MOVE *A1(HULKTYP),A1
CMPI 2,A1
JRNZ NOTPNCH
PUSH A7
CREATE0 PUNCHSNDS
PULL A7
JRUC NOT_MINE
PUNCHSNDS
MOVK 10,A9
PUN1
MOVI PUNCHSND,A0
CALLA ONESND
SLEEPK 12
DSJS A9,PUN1
DIE
PUNCHSND .WORD >F5E5,20,>812B,0
NOTPNCH
CMPI CLSENMY|TYPLAYR,A11
JRNZ NOTLAY
;KILLED BY MINE LAYER, TELL MINE LAYER TO FLAME UP
MMTM SP,A7,A8
MOVE A0,A8
MOVE *A0(OFLAGS),A1
ORI M_NOCOLL,A1
MOVE A1,*A0(OFLAGS)
MOVE *A0(OPLINK),A0,L
MOVI LAY_EXP,A7 ;END OF MINE LAYER DEATH - NO FLAMES
CLR A1
CALLA XFERPROC
MMFM SP,A7,A8
NOTLAY CMPI CLSNEUT|TYPMINE,A11
JRNE NOT_MINE
MOVE *A7(LEG_PRC),A0,L
MOVE *A0(SHOECNT),A0
JRZ KM
BTST 15,A0 ;CHECK FOR TENNIS SHOES BIT
JRZ GAMOK
;YES, WEARING TENNIS SHOES!
;KILL MINE
KM PUSH A7
MOVE *A10(OIMG),A0,L
CMPI M1,A0
JRZ KM2
;AN ELECTRIFIED LAND MINE
MOVE *A10(OPLINK),A0,L
CALLA KILL
MOVI CLSNEUT|TYPMINE|01,A0
MOVI CLSNEUT|TYPMINE|01,A11
JRUC KM2A
KM2 MOVI CLSNEUT|TYPNEUT,A0
KM2A MOVE A0,*A10(OID),W
CREATE0 EXPMINE2 ;KILL LAND MINE (A10=PTR)
MOVI MTING,A0 ;LAND MINE EXPLOSION SND
CALLA ONESND
PULL A7
MOVE *A7(PNUM),A0
MOVI P1DATA,A2
DEC A0
JRZ KM1
MOVI P2DATA,A2
KM1 MOVE *A2(TMINEDTH),A0 ;LAND MINE DEATH STAT
INC A0
MOVE A0,*A2(TMINEDTH)
; movi AUDDEATHLM,a0 ;Land mine deaths
; calla AUD1
NOT_MINE
;A11=OID OF WHAT KILLED THIS PLAYER
;A10=KILLER IMAGE PTR
CLR A0
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
MOVE *A7(TSO_PTR),A1,L
MOVE A0,*A1(OXVEL),L
MOVE A0,*A1(OYVEL),L
MOVE A7,A0 ;A7=PLYR IMG OPLINK
WRPK
CMPI CLSENMY|TYPHULK,A11
JRNZ WRPK2
HULKTYP .EQU PDATA+320 ;UHW 0=NORM W/GUN,1=DEMON W/AXE
MOVE *A10(OPLINK),A10,L
MOVE *A10(HULKTYP),A1
SUBK 3,A1
JRNZ WRPK2
;FLAMING GRUNT!
MOVI CLSENMY|TYPLAYR,A11
WRPK2
MOVE A11,*A0(DEAD),W
;IF HELPER ON, SEND IT FLYING
MOVE *A0(LSRPTR),A1,L
JRZ NLZ
;YES LAZER ON
PUSH A8
MOVE A1,A8
CALLA LSHIT
PULL A8
NLZ
;GIVE THE PLAYER A POINT FOR DIEING!
MOVI P1DATA+BMB_CNT,A6
MOVI P1DATA,A11
CLR A2
movi timerp1sd,a1
MOVE *A0(PNUM),A0
DEC A0
JRZ CG
MOVI P2DATA+BMB_CNT,A6
MOVI P2DATA,A11
MOVI timerp2sd,a1
CG
move a2,*a1,W
MOVE *A6,A4
CMPI 4,A4
JRNC NOADD
MOVE A6,A0
CALLA ADDBMB
NOADD MOVE A11,A2
CLR A1
MOVE A1,*A11(PTSRAM),W
;A2=P1DATA OR P2DATA
MOVK >1,A1 ;AMOUNT OF SCORE
CALLA SCRADD2 ;DO IT!
* XFERPROC - TRANSFER CONTROL OF AN EXISTING PROCESS
* A0 = PTR OF PROCESS TO BE XFER'D
* A1 = NEW I.D.
* A7 = WAKE UP
* A8 - A11 = PASSED TO THE XFER'D PROC
MOVI PLY1PID,A1
MOVE *A7(PNUM),A0
CMPI 1,A0
JRZ U8A
MOVI PLY2PID,A1
U8A MOVE *A7(LEG_PRC),A0,L
MOVE A7,A10 ;A10=TSO_PRC
CALLA GETA8
MOVI I_DIE,A7
CALLA XFERPROC
; movi AUDDEATHTOT,a0 ;# deaths
; calla AUD1
MOVE *A11(PLIVES),A0,W ;TEMP
CMPI 9,A0
JRC TAG1
MOVK 9,A0 ;8
MOVE A0,*A11(PLIVES),W
TAG1 CMPI 0,A0
JRNZ GAMOK
;OUT OF LIVES
;CHANGE MESSAGE ON HIS SCOREBOARD/PLUS STILL SHOW PLAYER SCORE!
;COLOR CYCLE IT
;DISPLAY A COUNTDOWN
CLR A0
MOVE A0,@THIS_PLYR,W
MOVK 1,A1
MOVE A1,*A11(CNTD) ;FLAG FOR MESSAGES AND CNTR
MOVE @CNTDIG1,A2
MOVE @CNTDIG2,A10
OR A2,A10
CMPI P1DATA,A11
JRNE F3
CREATE0 PAUS0
CALLR SPECT
CREATE P1PID,MSG_PROC2
JRUC F4
F3 CREATE P2PID,MSG_PROC2
CREATE0 PAUS
CALLR SPECT
F4 MOVE @STATUS,A0
CMPI 3,A0
JRZ GAMOK
;IS PLAYER CNTING DOWN?
MOVE A10,A10
; MOVE @CNTDIG1,A2
; MOVE @CNTDIG2,A1
; OR A2,A1
JRNZ GAMOK
CREATE BUYINPID,PSTAT
GAMOK:
MMFM SP,A1,A2,A6,A7,A10,A11
RETS
PAUS0 SLEEPK 30
MOVK 10,A2 ;11/28/91
MOVE A2,@CNTDIG1
DIE
PAUS SLEEPK 30
MOVK 10,A2 ;11/28/91
MOVE A2,@CNTDIG2
DIE
SPECT MOVI COLRPID,A0
CLR A1
NOT A1
CALLA EXISTP
JRNZ SKIPCYC
CREATE COLRPID,CYCSPECT ;START CYCLE FOR CNTDWN DIGIT
SKIPCYC RETS
CTRLS .LONG P1CTRL,P2CTRL
**************************************************************************
* *
* DRAW_PLYR_TORSO *
* *
**************************************************************************
DRAW_PLYR_TORSO
;A8=1 OR 2 FOR PLAYER NUM
MOVE A8,*A13(PNUM) ;A8=1 OR 2 FOR WHAT PLAYER THIS IS
SLL 5,A8
MOVI CTRLS-32,A1
ADD A8,A1
MOVE *A1,A0,L
MOVE A0,*A13(STICK),L ;PLACE CORRECT STICK READ ADDR
ADDI PLYRPRCS-32,A8
MOVE A13,*A8,L ;PUT PLYR PROC INTO TABLE PLYRPRCS
CALLA STRT_PLYR_LEGS
MOVE A0,*A13(LEG_PTR),L ;KEEP LEG PTR IN TORSO STURCTURE
MOVK 02H,A0 ;1
; 1
; 8 5
;7 4
; 9 6
; 2
MOVE A0,*A13(P_DIR),W
MOVE A0,*A13(TMP_P_DIR),W
CALLA STRT_PLYR_TORSO
MOVE A8,*A13(TSO_PTR),L ;KEEP TORSO PTR IN TORSO STRUCTURE!?
MOVE *A13(PNUM),A0
SLL 5,A0
ADDI PLYROBJS-32,A0
MOVE A8,*A0,L ;INSERT TORSO PTRS INTO TABLE
MOVE *A13(LEG_PTR),A9,L ;READY TO PASS LEG ALONG TO LEG PROC
MOVE A13,A10 ;PASS TORSO PROC TO LEG
MOVE *A13(PNUM),A0
subk 1,A0
JRNE AXC
CREATE PLY1PID,DRAW_PLYR_LEGS
MOVI P1DATA,A11
JRUC AXCD
AXC CREATE PLY2PID,DRAW_PLYR_LEGS
MOVI P2DATA,A11
AXCD CALLA STUFF_LVADDR
MOVK 2,A0 ;1
MOVE A0,*A13(OLD_P_DIR),W
CLR A0
MOVE A0,*A13(DEAD),W
MOVE A0,*A13(LSRPTR),L
MOVE A0,*A13(SHOOT_FLAG),W
MOVE A0,*A13(WPN_TYP),W
; MOVE A0,*A13(TSHOTS) ;TOTAL SHOTS FIRED
MOVE *A13(PNUM),A7
SLL 5,A7
ADDI PLYRPRCS-32,A7
MOVE *A7,A7,L
MOVI 70,A0
MOVE A0,*A13(DELYDET)
TORSO_1
CLR A0
MOVE A0,*A13(REV_FLAG)
MOVE *A13(DEAD),A1
JRNZ DIE_CODE
NDD MOVE @NOSHOOT,A0
JRNZ NOTT
move *a13(STICK),a0,L
move *a0,a0 ;GET P1/P2CTRL INFO
srl 4,a0
jrnz TORSO_2 ;Pass A0
NOTT ;NOT TOUCHED
; 1
; 8 5
;7 4
; 9 6
; 2
CLR A0
MOVE A0,*A13(OSHTDIR)
MOVE *A13(P_DIR),A14 ;DIR + HIBIT SET IF STATIONARY
JRNN RUNNING ;Test bit15
; P1 IS STANDING STILL. PLACE CORRECT TORSO ON TOP OF FEET
; CHECK FOR ALREADY THERE!
movk >1f,a1
and a1,a14
move a0,*a13(OLD_P_DIR)
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 ;TORSO ALWAYS M_NOCOLL
CALLA GANISAG
MOVE A0,A8
MOVE A14,A0
MOVE *A13(WPN_TYP),A2,W
SLL 5,A2
ADDI WPNWALK,A2
MOVE *A2,A2,L
SLL 5,A0
ADD A0,A2
MOVE *A2,A1,L
ADDI T_WALK_FLG,A0
MOVE *A0,A4,W
CALLA ANI
LTP SLEEPK 1
JRUC TORSO_1
RUNNING
MOVE A8,A0
MOVE *A13(LEG_PTR),A8,L
CALLA GETANIXY
MOVE *A8(OFLAGS),A4,W
ORI M_NOCOLL,A4 ;TORSO ALWAYS M_NOCOLL
CALLA GANISAG
MOVE A0,A8
MOVE *A13(P_DIR),A4 ;CURRENT DIR P1 IS FACING
SLL 5,A4
MOVE *A13(WPN_TYP),A1
SLL 5,A1
ADDI WPNWALK,A1
MOVE *A1,A1,L ;MOVE BASE TABLE ADDRESS INTO A1
ADD A4,A1 ;CALCULATE OFFSET IN TABLE
MOVE *A1,A1,L ;MOVE TABLE VALUE INTO A9
CMP A1,A9
JREQ TEE
MOVE A1,A9
ADDI T_WALK_FLG,A4
MOVE *A4,A4 ;FLAG
CALLA ANI
TEE SLEEPK 1
JRUC TORSO_1
; .byte 0,1,5,0,7,8,6,0,3,2,4,0,0,0,0,0 ;Good
firedir_t .byte 1,1,5,1,7,8,6,1,3,2,4,1,1,1,1,1 ;Good with illegals
.byte 1,1,2,1,7,8,9,1,4,5,6,1,1,1,1,1 ;Old crap version
; PLAYER IS SHOOTING
; STICK IS BEING PRESSED
TORSO_2
clr a1
move a1,*a13(OLD_P_DIR)
sll 3,a0 ;*8
addi firedir_t,a0
movb *a0,a9 ;Pass A9 to weapon (New version)
addi 16*8,a0
movb *a0,a4
;PLAYER WILL BEGIN FRANIM OF SHOOTING IN PROPER DIRECTION
move *a13(P_DIR),a0
movk >f,a1
and a1,a0
MOVE *A13(OSHTDIR),A5
CMP A4,A5
JREQ JJ
CLR A5 ;SHOOTING IN NEW DIR. ZERO REV_DIR.
MOVE A5,*A13(REV_P_DIR),W
JJ MOVE A4,*A13(OSHTDIR)
MOVE A4,*A13(SHOOT_FLAG),W
MOVI REVERSE,A1
SLL 4,A4
ADD A4,A1
MOVE *A1,A1 ;GET TABLE VALUES FOR THIS BDIR
;NOW BIT TEST CORRECT PDIR BIT TO SEE IF WE WILL NEED TO FLIP LEGS
BTST A0,A1
JRZ NOR
;YES WE MUST REVERSE PLAYERS LEGS BECAUSE HE IS TWISTING TO FAR!
MOVK 1,A1
MOVE A1,*A13(REV_FLAG),W
NOR
SLL 1,A4
MOVE *A13(WPN_TYP),A5
SLL 5,A5
ADDI LISTWHAT,A5
MOVE *A5,A5,L
SLL 5,A0
ADD A0,A5
MOVE *A5,A3,L
ADD A4,A3 ;CALCULATE OFFSET IN TABLE
move a3,-*sp,L
CALLA STRT_WPN ;TORSO CONTROLS
move *sp+,a3,L
MOVE *A3,A9,L ;MOVE TABLE VALUE INTO A9
;THIS IS NEW FRANIM SCRIPT PNTR
JSRP FRANIMQ
CLR A0
MOVE A0,*A13(SHOOT_FLAG)
JRUC TORSO_1
**************************************************************************
* *
* DRAW_PLYR_LEGS *
* *
**************************************************************************
DRAW_PLYR_LEGS:
;A8=TORSO ABOVE THESE LEGS
;A9=LEG PNTR FOR THESE LEGS (IMAGE ALREADY STARTED)
;A10=PROCESS OF TORSO ABOVE THESE LEGS
MOVE A8,*A13(TSO_PTR),L ;A8=TORSO FOR THESE LEGS
MOVE A10,*A13(TSO_PRC),L ;A10=TORSO PROCESS PNTR
MOVE A9,*A13(LEG_PTR),L ;A9=LEG PTR
MOVE A13,*A10(LEG_PRC),L
CLR A0
MOVE A0,*A13(SHOECNT)
MOVE A9,A8 ;A8=LEG PNTR
MOVI PWK_UP,A10 ;INIT FRANIM SCRIPT RESET
MOVE A10,A9 ;FRANIM NEEDS IT IN A9
MOVE_TOP:
MOVE *A8(OFLAGS),A0
BTST 11,A0 ;TAKE OUT!!!!
JRZ MVT
.if DEBUG
LOCKUP
EINT
.endif
MVT
MOVE *A13(TSO_PRC),A7,L
CALLA UPDATE_PLYRXY
JRC DO_FRANI
; PLAYER IS NOT TOUCHING MOVEMENT STICK!
; SET STAND FLAG, AND PNT TO CORRECT IMAGE
MOVE *A13(SHOECNT),A1
jrle REG7
;FLYING BOOTS ON, NOT TENNIS SHOES
;SLOW DOWN THIS GUYS VELOCITY
MOVE *A8(OXVEL),A0,L
MOVE *A8(OYVEL),A1,L
OR A0,A1
JRZ REG71
MOVE *A8(OXVAL),A4,L
MOVE *A8(OYVAL),A5,L
CLR A3 ;DIR CNT
;CHECK FOR RIGHT SIDE OF SCREEN
MOVE @WORLDTLX,A0,L ;*A7(RGTBND),A0,L
ADDI [375,0],A0
CMP A0,A4
JRGT REG7
;SCRN EDGE OK
MOVE @WORLDTLX,A0,L ;MOVE *A7(LFTBND),A0,L
ADDI [10,0],A0
CMP A0,A4
JRLE REG7
MOVE @WORLDTLY,A0,L ;MOVE *A7(DNBND),A0,L
ADDI [240,0],A0
CMP A0,A5
JRGE REG7
MOVE @WORLDTLY,A0,L ;MOVE *A7(UPBND),A0,L
ADDI [15,0],A0
CMP A0,A5
JRLE REG7
MOVE A5,A6 ;T1 NEEDS A6=YVAL
CALLR THIS_DIR
subk 1,a1
JRZ REG7
;NOT COASTING INTO A WALL OR SCRN BORDER
MOVE @PCNT,A1
sll 32-3,a1
JRNZ REG71
;SLOW ME DOWN
MOVE *A13(TSO_PTR),A2,L ;GET TORSO PNTR FOR THESE LEGS
MOVE *A8(OXVEL),A1,L
sra 1,a1
MOVE A1,*A8(OXVEL),L
MOVE A1,*A2(OXVEL),L
MOVE *A8(OYVEL),A1,L
sra 1,a1
MOVE A1,*A8(OYVEL),L
MOVE A1,*A2(OYVEL),L
JRUC REG71
REG7 CLR A0
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
MOVE *A13(TSO_PTR),A1,L ;GET TORSO PNTR FOR THESE LEGS
MOVE A0,*A1(OXVEL),L ;UPDATE TORSO INFO
MOVE A0,*A1(OYVEL),L ;UPDATE TORSO
REG71
;A7=TORSO PROC
MOVK 1,A0
MOVE A0,*A7(HAVE_REV),W ;UPDATE TORSO
MOVE *A7(SHOOT_FLAG),A0 ;GET TORSO INFO
JRZ CONT_1
; PLAYERS TORSO IS SHOOTING, MAKE FEET TURN IN SAME DIRECTION AS BODY
ORI 08000H,A0
MOVE A0,*A7(P_DIR),W
sll 32-5,a0
srl 32-5-5,a0 ;*32
; PLAYER WILL BEGIN FRANIM OF SHOOTING IN PROPER DIRECTION
MOVE *A13(SHOECNT),A1
jrle REGS
;TENNIS
;BOOTS ON
ADDI SHOOT_LEG_LIST2,A0
JRUC NORG
REGS ADDI SHOOT_LEG_LIST,A0
NORG MOVE *A0,A9,L ;MOVE TABLE VALUE INTO A9
;THIS IS NEW FRANIM SCRIPT PNTR
JSRP FRANIMQ
JRUC MOVE_TOP
CONT_1:
MOVE *A7(P_DIR),A0 ;GET TORSO INFO
ORI 08000H,A0
MOVE A0,*A7(P_DIR) ;GET TORSO INFO
sll 32-5,a0
srl 32-5-5,a0 ;*32
MOVE *A13(SHOECNT),A1
jrle REGK ;TENNIS?
;BOOTS ON
MOVE @PCNT,A1
sll 32-2,a1
JRNZ REGK0
MOVE *A13(SHOEV),A1
XORI 1,A1
MOVE A1,*A13(SHOEV)
REGK0 MOVE *A13(SHOEV),A1
JRZ REGK1
MOVI STAND_TBL_L3,A2
JRUC REGK2
REGK1 MOVI STAND_TBL_L2,A2
JRUC REGK2
REGK MOVI STAND_TBL_L,A2
REGK2 ADD A0,A2
MOVE *A2,A1,L
ADDI L_WALK_FLG,A0
MOVE *A0,A4,W
CALLA ANI
;MAKE SURE A9,A10 ARE SET FOR THIS POSITION FOR WHEN HE DOES BEGIN RUNNING
SL_1 SLEEPK 1
JRUC MOVE_TOP
DO_FRANI:
; STICK IS BEING PRESSED
; PLAYERS LEGS
;A5=DIR READ FROM STICK AT THIS POINT
;A7=TORSO PROCESS
MOVE *A7(REV_FLAG),A0,W
JRZ NORV
; WE MUST REVERSE PLAYERS LEGS BECAUSE OF SHOOTING POSITION
; VEL MUST STAY SAME
MOVK 1,A0
MOVE A0,*A7(HAVE_REV),W ;UPDATE TORSO INFO!
MOVE *A7(REV_P_DIR),A4
MOVE A5,*A7(P_DIR)
MOVE A5,A6
SLL 5,A6
CMP A5,A4
JRZ SAME_DIR
; NEW DIRECTION, SET A9
MOVE A5,*A7(REV_P_DIR),W ;SAME, BUT SHOULD BE REVERSE
MOVE *A13(SHOECNT),A1
JRZ REGH
BTST 15,A1
JRZ BOOT
;TENNIS SHOES ON
MOVI REV_WALK_LIST3,A2 ;FAST SHOES ANIMATION!
JRUC REGHA
BOOT MOVI REV_WALK_LIST2,A2 ;MOVE BASE TABLE ADDRESS INTO A2
JRUC REGHA
REGH MOVI REV_WALK_LIST,A2 ;MOVE BASE TABLE ADDRESS INTO A2
REGHA ADD A6,A2 ;CALCULATE OFFSET IN TABLE
MOVE *A2,A9,L ;MOVE TABLE VALUE INTO A9
MOVE A9,A10
JRUC SAME_DIR
NORV: MOVE *A7(P_DIR),A4 ;CURRENT DIR P1 IS FACING
sll 32-5,a4 ;JUST IN CASE HE WAS STANDING STILL
srl 32-5,a4
MOVE A5,*A7(P_DIR) ;HI BIT IS NOT SET BECAUSE HE RUNS!
MOVE A5,A6
SLL 5,A6
MOVE *A7(HAVE_REV),A0
JRNZ GET_PROPER
CMP A5,A4 ;CMP WITH NEW DIR READ FROM STICK
JRZ SAME_DIR
GET_PROPER:
; NEW DIRECTION, SET A9
CLR A0
MOVE A0,*A7(HAVE_REV),W
MOVE *A13(SHOECNT),A1
JRZ REGJ
JRNN BOOT1
MOVI WALK_LIST3,A2 ;TENNIS SHOE LIST
JRUC REGJ2
BOOT1 MOVI WALK_LIST2,A2 ;BOOT LIST
JRUC REGJ2
REGJ MOVI WALK_LIST,A2 ;MOVE BASE TABLE ADDRESS INTO A2
REGJ2 ADD A6,A2 ;CALCULATE OFFSET IN TABLE
MOVE *A2,A9,L ;MOVE TABLE VALUE INTO A9
MOVE A9,A10
SAME_DIR:
; CHECK BOUNDARIES FIRST
; COMPARE FOR TOP/BOT BOUNDARIES
CALLA STUFF_VEL
CLR A1 ;COMMAND PASSED TO FRANIM
JSRP FRANIM
JRNC MOVE_TOP
MOVE A10,A9 ;RESET TO TOP OF RUNNING LIST
JRUC MOVE_TOP
I_DIE
;PLAYER DEAD, THIS IS WHAT LEGS DO DURING THIS TIME
;NEED A9=TSO_PRC
;A8=LEGS IMG
SLEEPK 05
;IF BLOWN UP INTO AIR, DO NOT DO THIS
MOVE *A10(DEAD),A1,W
ZEXT A1
CMPI CLSENMY|TYPLAYR|SUBFLM,A1
JREQ SKIPSP
CMPI CLSENMY|TYPLAYR,A1
JREQ SKIPSP
CMPI CLSNEUT|TYPMINE,A1
JREQ SKIPSP
CMPI CLSENMY|TYPT72|SUBTK,A1
JREQ SKIPSP
CMPI CLSENMY|TYPT72,A1
JREQ SKIPSP
srl 8,a1 ;/256
CMPI (CLSENMY|TYPFACE)/256,A1
JREQ SKIPSP
;REALIGN PLAYER HALVES WHEN WE RESET IF A SPIN DEATH
MOVI DIESCRM,A0
CALLA ONESNDOVR
MOVE A8,A0
MOVE *A13(TSO_PTR),A8,L ;GET LEG PTR OUT OF TORSO STRUCT
CALLA GETANIXY
MOVE *A8(OFLAGS),A4,W
ANDI 0F7FFH,A4 ;GET RID OF M_NOCOLL FOR LEGS
CALLA GANISAG
MOVE A0,A8
MOVI LSPN,A9
JSRP FRANIMQ
SKIPSP ;SKIP SPINNING OF LEGS IF NOT NEEDED
; MOVI 0A000000H,A0
; MOVE A0,*A8(OXVAL),L
MOVE A8,A0
CALLA OBJOFF
HG SLEEPK 1
MOVE *A10(DEAD),A0
JRNZ HG
MOVE A8,A0
CALLA OBJON
MOVI PWK_UP,A10 ;INIT FRANIM SCRIPT RESET
MOVE A10,A9 ;FRANIM NEEDS IT IN A9
JRUC MOVE_TOP ;OKAY_NOW
;
; UPDATE PLAYER 1 X Y POSITION BASED ON JOYSTICK INPUT
;
UPDATE_PLYRXY:
;
;READ MOVEMENT JOYSTICK FOR PLAYER
;A7=TSO_PRC PROCESS PNTR
;
CLR A0
MOVE A0,*A13(TCH_WALL)
MOVE *A7(STICK),A2,L ;GET STICK FROM TORSO STRUCT
MOVE *A2,A2,W ;GET ACTUAL CTRL INFO
ANDI 0FH,A2
JRNZ YES_A_MV
CLRC ;CLEAR CARRY SO WE DON'T FRANI
; STICK IS NOT BEING TOUCHED
RETS
YES_A_MV:
;
; PLAYER WILL MOVE IN DIRECTION SPECIFIED IN A2
;
MOVE *A8(OXVAL),A4,L
MOVE *A8(OYVAL),A5,L
CLR A3 ;DIR CNT
BTST BMPRYTE,A2
JRZ PLYR_LFT
;CHECK FOR RIGHT SIDE OF SCREEN
MOVE @WORLDTLX,A0,L
ADDI [375,0],A0
CMP A0,A4
JRGT TSTDN
;SCRN EDGE OK
ADDK 04,A3 ;YES VALID
JRUC TSTDN
PLYR_LFT:
BTST BMPLEFT,A2
JRZ TSTDN
MOVE @WORLDTLX,A0,L
ADDI [10,0],A0
CMP A0,A4
JRLE TSTDN
ADDK 7,A3
TSTDN:
BTST BMPDOWN,A2
JRZ PLYR_UP
MOVE @WORLDTLY,A0,L
ADDI [240,0],A0
CMP A0,A5
JRGE TEST_OUT
ADDK 2,A3
JRUC TEST_OUT
PLYR_UP:
BTST BMPUP,A2
JRZ TEST_OUT
MOVE @WORLDTLY,A0,L
ADDI [15,0],A0
CMP A0,A5
JRLE TEST_OUT
INC A3
TEST_OUT:
.IF DEBUG
CMPI 9,A3
JRLS OKAYSTK
LOCKUP
MOVK 9,A3
OKAYSTK
.ENDIF
MOVE A5,A6
MOVE A3,A5 ;KEEP IN A5 FOR LATER CMP WITH P_DIR
JRNZ T1
CLRC
RETS
T1:
CALLR THIS_DIR
SETC
MOVE A1,*A13(TCH_WALL)
MOVE A1,A1
JRNZ TAGN
RETS
TAGN
MOVE A5,A0
SLL 5,A0
ADDI ZCK2,A0
MOVE *A0,A0,L
JUMP A0
THIS_DIR
;CHECK FOR RECTANGLE COLLISIONS
ADDI [4,0],A4
ADDI [4,0],A6
SLL 5,A3
MOVE *A13(SHOECNT),A0
JRZ DREGS ;TENNIS?
ADDI CKOFF2,A3
JRUC DRTOP
DREGS ADDI CKOFF,A3
DRTOP MOVE *A3,A0,L
;A0=[Y,X] OFFSET FOR PLAYER TO CHECK AGAINST!
MOVY A0,A1
SLL 16,A0
ADD A0,A4 ;A4=X TO CHECK
ADD A1,A6 ;A6=Y TO CHECK
SRL 16,A4 ;X
SRL 16,A6 ;Y
MOVE @CURRENT,A0,L ;CURRENT RECT LIST
JRZ OUT
NEXT0 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 NEXT0 ;IF BRNCH RECT BOT EDGE < PLYR Y
;HIT
MOVK 1,A1
RETS
OUT
; SETC ;WE WILL FRANI
; STICK HAS BEEN TOUCHED, NO BUMP WITH WALL
CLR A1
RETS
NEXT ADDI 48,A0
JRUC NEXT0
NEXTA ADDK 32,A0
JRUC NEXT0
NEXTB ADDK 16,A0
JRUC NEXT0
ZCK2 .LONG OUT,OUT,OUT,OUT,OUT,CKME5,CKME6,OUT,CKME8,CKME9
CKME5
;CHECK RECTANGLES AS IF MY DIR WAS 4
;IF IT IS OKAY TO GO 4, SET MY DIR TO 4 AND GET OUT
;IF NOT OKAY TO GO 4, CHECK RECTANGLES AS IF MY DIR WAS 1
;IF IT IS OKAY TO GO 1, SET MY DIR TO 1 AND GET OUT
MOVE *A8(OXVAL),A4,L
MOVE *A8(OYVAL),A6,L
MOVK 4,A3
CALLR THIS_DIR
MOVE A1,*A13(TCH_WALL)
MOVE A1,A1
JRNZ CKJ
MOVK 4,A5 ;YES, GO DIR 4
SETC
RETS
CKJ MOVK 1,A3
MOVE *A8(OXVAL),A4,L
MOVE *A8(OYVAL),A6,L
CALLR THIS_DIR
MOVE A1,*A13(TCH_WALL)
MOVE A1,A1
JRNZ CKOUT
MOVK 1,A5
CKOUT SETC
RETS
CKME6
;CHECK RECTANGLES AS IF MY DIR WAS 4
;IF IT IS OKAY TO GO 4, SET MY DIR TO 4 AND GET OUT
;IF NOT OKAY TO GO 4, CHECK RECTANGLES AS IF MY DIR WAS 2
;IF IT IS OKAY TO GO 2, SET MY DIR TO 2 AND GET OUT
MOVE *A8(OXVAL),A4,L
MOVE *A8(OYVAL),A6,L
MOVK 4,A3
CALLR THIS_DIR
MOVE A1,*A13(TCH_WALL)
MOVE A1,A1
JRNZ CKJ6
MOVK 4,A5 ;YES, GO DIR 4
SETC
RETS
CKJ6 MOVK 2,A3
MOVE *A8(OXVAL),A4,L
MOVE *A8(OYVAL),A6,L
CALLR THIS_DIR
MOVE A1,*A13(TCH_WALL)
MOVE A1,A1
JRNZ CKOUT
MOVK 2,A5
SETC
RETS
CKME8
;CHECK RECTANGLES AS IF MY DIR WAS 7
;IF IT IS OKAY TO GO 7, SET MY DIR TO 7 AND GET OUT
;IF NOT OKAY TO GO 7, CHECK RECTANGLES AS IF MY DIR WAS 1
;IF IT IS OKAY TO GO 1, SET MY DIR TO 1 AND GET OUT
MOVE *A8(OXVAL),A4,L
MOVE *A8(OYVAL),A6,L
MOVK 7,A3
CALLR THIS_DIR
MOVE A1,*A13(TCH_WALL)
MOVE A1,A1
JRNZ CKJ7
MOVK 7,A5 ;YES, GO DIR 7
SETC
RETS
CKJ7 MOVK 1,A3
MOVE *A8(OXVAL),A4,L
MOVE *A8(OYVAL),A6,L
CALLR THIS_DIR
MOVE A1,*A13(TCH_WALL)
MOVE A1,A1
JRNZ CKOUT
MOVK 1,A5
SETC
RETS
CKME9
;CHECK RECTANGLES AS IF MY DIR WAS 7
;IF IT IS OKAY TO GO 7, SET MY DIR TO 7 AND GET OUT
;IF NOT OKAY TO GO 7, CHECK RECTANGLES AS IF MY DIR WAS 2
;IF IT IS OKAY TO GO 2, SET MY DIR TO 2 AND GET OUT
MOVE *A8(OXVAL),A4,L
MOVE *A8(OYVAL),A6,L
MOVK 7,A3
CALLR THIS_DIR
MOVE A1,*A13(TCH_WALL)
MOVE A1,A1
JRNZ CKJ8
MOVK 7,A5 ;YES, GO DIR 4
SETC
RETS
CKJ8 MOVK 2,A3
MOVE *A8(OXVAL),A4,L
MOVE *A8(OYVAL),A6,L
CALLR THIS_DIR
MOVE A1,*A13(TCH_WALL)
MOVE A1,A1
JRNZ CKOUT
MOVK 2,A5
SETC
RETS
;FIRST RECTANGLE LIST FOR PLAYERS
XX .EQU 241
YY .EQU 202
RECT1 .WORD 242-XX,927-YY,338-XX,990-YY ;ONE ENTRY = UPLFT,LOWRGT
.WORD 324-4-XX,922-YY,380-XX,980-YY
.WORD 500-XX,921-YY,551-XX,980-YY
.WORD 540-4-XX,927-YY,630-XX,990-YY
RECT2 .WORD 1,0,27H,23CH ;242-XX,202-YY,280-XX,774-YY ;AFTER FLAG IS DEAD
.WORD 026H,19DH,3DH,1FAH ;279-XX,618-YY,302-XX,708-YY
.WORD 26H,0FBH,3DH,15DH ;279-XX,453-YY,302-XX,551-YY
.WORD 14FH-4,1CAH,18FH,21EH ;579-XX,677-YY,640-XX,744-YY
.WORD 14FH-4,14AH,18FH,19DH ;579-XX,542-YY,640-XX,615-YY
.WORD 245-XX,202-YY,827-XX,263-YY
.WORD 268-XX,308-YY,368-XX,397-YY
.WORD 245-XX,202-YY,07AH,285-YY
.WORD 0
RECT3 .WORD 268-XX,312-YY,370-XX,397-YY ;VERT SCROLL STOPS
.WORD 245-XX,202-YY,827-XX,263-YY
.WORD 242-XX,202-YY,277-XX,574-YY
.WORD 245-XX,202-YY,07AH,277-YY ;285
.WORD 0
RECT4 .WORD 268-XX,312-YY,370-XX,397-YY ;HORZ SCROLL STARTS
.WORD 245-XX,202-YY,827-XX,263-YY
.WORD 242-XX,202-YY,277-XX,574-YY
.WORD 822-XX,206-YY,906-XX,307-YY
.WORD 955-XX,203-YY,1120-XX,307-YY
.WORD 1071-XX,278-YY,1125-XX,463-YY
.WORD 0
RECT5 .WORD 822-4-XX,206-YY,906-XX,306-YY ;HORZ SCROLL STOPS
.WORD 955-4-XX,203-YY,1120-XX,306-YY
.WORD 1079-4-XX,278-YY,1125-XX,463-YY ;1079=1071
.WORD 245-XX,203-YY,827-XX,263-YY
.WORD 0
SRECT1A ;FOR AREA ABOVE EXPRESSWAY
.WORD 252-XX,203-YY,420-XX,305-YY ;INTO ELEVATOR 45 WIDE
.WORD 465-XX,203-YY,637-XX,305-YY
.WORD 0
BSRECT1A ;ABOVE XPRESS
.WORD 252-XX,202-YY,420-XX,290-YY
.WORD 465-XX,202-YY,637-XX,290-YY
.WORD 0
BRECT1 .WORD 243-XX,900-YY,378-XX,970-YY
.WORD 503-XX,908-YY,635-XX,970-YY
BRECT2 .WORD 242-XX,203-YY,281-XX,772-YY
.WORD 582-XX,656-YY,641-XX,740-YY
.WORD 582-XX,527-YY,641-XX,610-YY
.WORD 243-XX,204-YY,843-XX,250-YY
.WORD 265-XX,305-YY,361-XX,385-YY
.WORD 0
BRECT3 .WORD 243-XX,204-YY,843-XX,250-YY ;FROM REACTOR TO ELEVATOR
.WORD 024DH,05H,02A0H,057H ;830-XX,207-YY,894-XX,294-YY
.WORD 02C0H,05H,036BH,057H ;965-XX,207-YY,1116-XX,294-YY
.WORD 1073-XX,244-YY,1118-XX,448-YY
.WORD 0
CKOFF .LONG 0,[-4,0],[8,0],0,[0,11],[-4,8],[8,8],[0,-5],[-4,-6],[8,-6]
;CKOFF2 .LONG 0,[-8,0],[16,0],0,[0,22],[-8,16],[16,16],[0,-10],[-8,-12],[16,-12]
CKOFF2 .LONG 0,[-6,0],[11,0],0,[0,14],[-6,10],[10,10],[0,-8],[-6,-9],[11,-9]
;
; 1
; 8 5
;7 4
; 9 6
; 2
;
VELX_LIST:
.LONG 0,0,0,0,HNORMVEL,HSLOVEL,HSLOVEL,-HNORMVEL,-HSLOVEL
.LONG -HSLOVEL
VELY_LIST:
.LONG 0,-VNORMVEL,VNORMVEL,0,0,-VSLOVEL,VSLOVEL,0
.LONG -VSLOVEL,VSLOVEL
VELX_LIST2:
.LONG 0,0,0,0,HNORMVEL2,HSLOVEL2,HSLOVEL2,-HNORMVEL2,-HSLOVEL2
.LONG -HSLOVEL2
VELY_LIST2:
.LONG 0,-VNORMVEL2,VNORMVEL2,0,0,-VSLOVEL2,VSLOVEL2,0
.LONG -VSLOVEL2,VSLOVEL2
VELX_LIST3:
.LONG 0,0,0,0,HNORMVEL3,HSLOVEL3,HSLOVEL3,-HNORMVEL3,-HSLOVEL3
.LONG -HSLOVEL3
VELY_LIST3:
.LONG 0,-VNORMVEL3,VNORMVEL3,0,0,-VSLOVEL3,VSLOVEL3,0
.LONG -VSLOVEL3,VSLOVEL3
;
STUFF_VEL:
MOVE *A13(TCH_WALL),A0
JRZ SVX
CLR A1
CLR A0
JRUC SV2
SVX
MOVE *A13(SHOECNT),A0
JRZ SV
DEC A0
MOVE A0,*A13(SHOECNT)
MOVE A0,A2
ANDI 03FFH,A0
JRNZ SVNO
;SHOES DONE!
MOVE A0,*A13(SHOECNT)
SVNO
BTST 15,A2
JRZ VBOOT
;TENNIS SHOE SPEED
MOVI VELX_LIST3,A2
ADD A6,A2
MOVE *A2,A0,L
MOVI VELY_LIST3,A2
ADD A6,A2
MOVE *A2,A1,L
JRUC SV2
VBOOT MOVI VELX_LIST2,A2
ADD A6,A2
MOVE *A2,A0,L
MOVI VELY_LIST2,A2
ADD A6,A2
MOVE *A2,A1,L
JRUC SV2
SV MOVI VELX_LIST,A2
ADD A6,A2
MOVE *A2,A0,L
MOVI VELY_LIST,A2
ADD A6,A2
MOVE *A2,A1,L
SV2 MOVE A1,*A8(OYVEL),L
MOVE A0,*A8(OXVEL),L
; NOW ADD SAME VALUES INTO TORSO RECORD
MOVE *A13(TSO_PTR),A3,L
MOVE A1,*A3(OYVEL),L
MOVE A0,*A3(OXVEL),L
RETS
;
; INITIALIZE PLAYER OBJECT
; GET OBJECT INFO AND DO INSERT INTO OBJECT LIST
;
STRT_PLYR_LEGS:
;CHECK TO SEE IF THIS IS PLAYER 1 OR 2
CLR A0
MOVE A0,@TMP
CALLR GETP
MOVI 158,A3
MOVI DMAWNZ,A4
CLR A6
CLR A7
CALLA BEGINOBJ2
RETS
STRT_PLYR_TORSO:
;CHECK TO SEE IF THIS IS PLAYER 1 OR 2
MOVK 1,A0
MOVE A0,@TMP
CALLR GETP
MOVI 159,A3 ;HIGHER THAN LEGS
MOVI DMAWNZ+M_NOCOLL,A4 ;NO COLLISIONS WITH CHEST!
CLR A6
CLR A7
CALLA BEGINOBJ2
RETS
GETP
;START CORRECT IMAGE/ STUFF PROPER ID
MOVE *A13(PNUM),A2
CMPI 1,A2
JREQ PYX
MOVE @TMP,A0
JRZ PYXXX
MMTM SP,A0,A1
MOVK 32,A9
MOVI MEP2,A8
CREATE0 ME1
MMFM SP,A0,A1
PYXXX
MOVI BLACK,A2 ;TURN ON PLAYER 2 (BLACK)
MOVI CLSPLYR|TYPPLYR|SUBPL_2,A5
SETPXY2
MOVE @WORLDTLX,A0,L
MOVE @RUNIN,A1
JRZ FB0
CMPI 3,A1
JRNZ SD4
ADDI 0CB0000H,A0
MOVE @WORLDTLY,A1,L
SUBI [10,0],A1
RETS
SD4
;FROM SIDE
SUBI 080000H,A0
MOVE @WORLDTLY,A1,L
ADDI [130,0],A1
RETS
FB0
MOVE @WORLDTLY,A3,L
CMPI [127EH,0],A3
JRNZ FB01
;PLACE NEAR P2 PARACHUTE
ADDI 010B0000H,A0
MOVE @WORLDTLY,A1,L
ADDI 05B0000H,A1
MMTM SP,A9,A10,A0,A1
MOVE @TMP,A0
JRZ FB00
callr aud_plyrbeg
MOVI 35,A10 ;TIME RINGS ARE ON
MOVK 2,A9
CREATE RNG2PID,RINGS
FB00 MMFM SP,A9,A10,A0,A1
RETS
FB01 ADDI 0C80000H,A0
MOVE @WORLDTLY,A1,L
ADDI 0FF0000H,A1
RETS
PYX
MOVE @TMP,A0
JRZ PYXX
MMTM SP,A0,A1
CLR A9
MOVI MEP1,A8
CREATE0 ME1
MMFM SP,A0,A1
PYXX
MOVI P1WG6T1,A2
MOVI CLSPLYR|TYPPLYR|SUBPL_1,A5
SETPXY1
MOVE @WORLDTLX,A0,L
MOVE @RUNIN,A1
JRZ FB1
CMPI 3,A1
JRNZ SD44
ADDI 0B30000H,A0
MOVE @WORLDTLY,A1,L
SUBI [5,0],A1
RETS
SD44
;FROM SIDE
SUBI 080000H,A0
MOVE @WORLDTLY,A1,L
ADDI [115,0],A1
RETS
FB1 MOVE @WORLDTLY,A3,L
CMPI [127EH,0],A3
JRNZ FB11
;PLACE NEAR P1 PARACHUTE
ADDI 0730000H,A0
MOVE @WORLDTLY,A1,L
ADDI 07F0000H,A1
MMTM SP,A9,A10,A0,A1
MOVE @TMP,A0
JRZ FB000
callr aud_plyrbeg
MOVI 35,A10 ;TIME RINGS ARE ON
MOVK 1,A9
CREATE RNG1PID,RINGS
FB000 MMFM SP,A9,A10,A0,A1
RETS
FB11 ADDI 0B30000H,A0
MOVE @WORLDTLY,A1,L
ADDI 0FF0000H,A1
apbx RETS
aud_plyrbeg
movk AUDBEGIN,a0
calla AUD1
move @STATUS,a0
subk 3,a0
jrne apbx
MOVE @GAMSTATE,A0
CMPI ININTRO,A0 ;IF IN INTRO, THE REGULAR START UP
JRZ apbx
movk AUD1STRT,a0 ;Mid game start
movi -1,a1
jauc AUD
ME1
;PLAYER NAME MESSAGE
;A9=PLYR # 1 OR 2
move @WAVE,a0
cmpi 40,a0
jaeq SUCIDE
SLEEPK 5
MOVI PLYROBJS,A0,L
ADD A9,A0
MOVE *A0,A10,L
MOVE A8,A2
MOVI 359,A3 ;HIGHER THAN LEGS
MOVI DMAWNZ+M_NOCOLL,A4 ;NO COLLISIONS WITH CHEST!
MOVI CLSPLYR|TYPHLPR,A5
CLR A6
CLR A7
CALLA BEGINOBJ2
MOVK 15,A9
CREATE0 MANY
MOVI 6*60+10,A11 ;8*60
METOP
MOVE A8,A0
MOVE A10,A8 ;*A13(LEG_PTR),A8,L
CALLA GETANIXY
ADDI 00D0000H,A2 ;Y
ADDI 0E0000H,A3 ;X
MOVE *A0(OFLAGS),A4,W
CALLA GANISAG
MOVE A0,A8
SLEEPK 1
DSJ A11,METOP
jauc DELOBJDIE
MANY
SLEEPK 12
MOVE A8,A0
CALLA OBJON
SLEEPK 12
MOVE A8,A0
CALLA OBJOFF
DSJ A9,MANY
DIE
DIE_CODE
;FROM TORSO CODE
; PUSH A1
; CREATE0 CHEER
; PULL A1
MOVE *A13(LEG_PTR),A2,L ;GET LEG INFO
;STOP PLAYER FROM FLOATING
CLR A0
MOVE A0,*A2(OXVEL),L
MOVE A0,*A2(OYVEL),L
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
zext a1
CMPI CLSENMY+TYPSL+SUBSM,A1
JRZ DIECHU2 ;SPIDER MOM?
CMPI CLSENMY|TYPLAYR|SUBFLM,A1
JREQ DIEFIRE2
CMPI CLSENMY|TYPLAYR,A1
JREQ DIEFIRE
CMPI CLSNEUT|TYPMINE,A1
JREQ DIECHU
CMPI CLSENMY|TYPT72|SUBTK,A1
JREQ DIECHU2
CMPI CLSENMY|TYPT72,A1
JREQ DIECHU2
CMPI CLSNEUT|TYPMINE|01,A1 ;SHOCK OIDS HERE
JRZ shokh
srl 8,a1 ;/256
CMPI (CLSENMY|TYPFACE)/256,A1
JREQ DIECHU2
jruc SPDTH
;SHOCK HERE
shokh CREATE0 SHKSND
MOVE *A8(OPLINK),A0,L
MOVE *A0(LEG_PTR),A0,L
MOVI 01A000000H,A1
MOVE A1,*A0(OXVAL),L ;MOVE LEGS OUT OF THE WAY!
CLR A0
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
MOVE *A8(OYPOS),A0
SUBK 16H,A0
MOVE A0,*A8(OYPOS)
; MOVE *A8(OXPOS),A0
; ADDI 2H,A0
; MOVE A0,*A8(OXPOS)
MOVI 342,A0 ;132
MOVE A0,*A8(OZPOS)
MOVI 120,A11
CREATE0 SHKPLYR
MOVI TSHK,A9
JSRP FRANIMQ
JRUC ALLDIE
SHKPLYR SLEEPK 1
movk 2,a0
CALLA RNDRNG0
subk 1,a0 ;-1 to 1
move *a8(OXPOS),a1
add a0,a1
move a1,*a8(OXPOS)
movk 2,a0
CALLA RNDRNG0
subk 1,a0 ;-1 to 1
move *a8(OYPOS),a1
add a0,a1
move a1,*a8(OYPOS)
DSJ A11,SHKPLYR
DIE
SHKSND
SLEEPK 01
MOVI ELECTRO,A0 ;SCREAM UP INTO AIR
CALLA ONESNDOVR
SLEEPK 1
MOVI AIRSCRM,A0 ;SCREAM UP INTO AIR
CALLA ONESNDOVR
SLEEP 35H
MOVI ELECTRO,A0 ;SCREAM UP INTO AIR
CALLA ONESNDOVR
DIE
DIEFIRE2
;IF FLAMING SPIN DEATH, FALL IN HERE
MOVI FIREDI,A0 ;FLAME PLAYER SCREAM
CALLA ONESNDOVR
MOVI FIRELST2,A9
MOVI 157,A0
JRUC DFZ2
FIXNUM SLEEPK 3
CLR A0
MOVE A0,@LOCK_NUM
DIE
DIEFIRE
;QUICK FLAME DEATH
MOVE @START,A0
CMPI 11,A0
JRZ DJJ
MOVE @LOCK_NUM,A0
CMPI 6,A0
JRNZ DF2X
DJJ CREATE0 FIXNUM
SLEEP 40
JRUC ALLDIE
DF2X
SLEEPK 05
MOVI FIREDI,A0
CALLA ONESNDOVR
MOVI FIRELST,A9
DFZ MOVI 159,A0
DFZ2 MOVE A0,*A8(OZPOS)
JSRP FRANIMQ
SLEEPK 1
JRUC ALLDIE
SPDTH
;IF SPIN DEATH, FALL IN HERE
SLEEPK 05
MOVI UGH2,A0
CALLA ONESNDOVR
;BLOOD CHUNKS
; MOVI 159,A0 ;157
; MOVE A0,*A8(OZPOS)
MOVE *A13(PNUM),A9
CREATE FUTUREPID,DTB
MOVK 1,A9
CREATE FUTUREPID,TWOCHNKS
MOVK 30,A9
CREATE FUTUREPID,TWOCHNKS
MOVI TSPN,A9
JSRP FRANIMQ
MOVI DIELST,A9
JSRP FRANIMQ
SLEEPK 1
JRUC ALLDIE
DTB SLEEPK 15
MOVI MEUGH,A0
CALLA ONESNDOVR
SLEEP 30+9
MOVI ELECTRO,A0 ;SHOCK SND AT DEATH
CALLA ONESNDOVR
SLEEP 02CH+20-30
MOVI 158,A0 ;BRING TORSO DOWN TO LEG ZPOS
MOVE A0,*A8(OZPOS)
SLEEPK 7
;A9=1/2 FOR PLAYER #
CREATE BMBPID,TBOMBD
DIE
CHNKS
;IF NO BOG, BLOOD FROM CHEST HOLE!
MOVE @HULK_CNT,A0
CMPI 20,A0
JRHI CDI
MOVE @PCTOT,A2
CMPI 013H,A2 ;19
JRLO ADDPCS
CDI DIE
ADDPCS MOVK 15,A10
SLEEPK 10
CH1 CREATE FUTUREPID,CHESTBLD
SLEEPK 1
DSJS A10,CH1
SLEEP 3FH
MOVK 4,A10
CH2 CREATE FUTUREPID,CHESTBLD2
SLEEPK 2
DSJS A10,CH2
DIE
CHESTBLD2
;FLOW BLOOD OUT OF CHEST HOLE
MOVI -03000H,B0
MOVI 03000H,B1
CALLA RANGRAND
MOVE A0,A6
MOVI -03000H,B0
MOVI 03000H,B1
CALLA RANGRAND
MOVE A0,A7
CALLA GETANIXY
MOVE A2,A1
SUBI 020000H,A3
MOVE *A8(OFLAGS),A0
BTST B_FLIPH,A0
JRZ NOHX
ADDI 040000H,A3
NOHX
SUBI 01C0000H,A1 ;1A
;A0=PROPER X,A1=Y
MOVI BLDB,A9
JRUC CHB
CHESTBLD
;FLOW BLOOD OUT OF CHEST HOLE
MOVI -0A000H,B0
MOVI 0A000H,B1
CALLA RANGRAND
MOVE A0,A6
MOVI -0A000H,B0
MOVI 0A000H,B1
CALLA RANGRAND
MOVE A0,A7
CALLA GETANIXY
MOVE A2,A1
SUBI 0B0000H,A3
MOVE *A8(OFLAGS),A0
BTST B_FLIPH,A0
JRZ NOHXX
ADDI 0110000H,A3
NOHXX
SUBI 01D0000H,A1
MOVI BLDBB,A9
CHB
MOVE A3,A0
;A0=PROPER X,A1=Y
MOVI BBS1,A2 ;(OIMG)
MOVI 343,A3 ;(OZPOS)
MOVI DMAWNZ+M_NOCOLL,A4 ;(OFLAGS) NON-ZERO VALUE
MOVI CLSDEAD,A5 ;(OID)
CALLA BEGIN_CHNK
jauc FRQDELDIE
BLDBB:
.LONG bldclt4
.WORD 6
.LONG bldclt5
.WORD 6
.LONG bldclt6
.WORD 6
.LONG bldclt7
.WORD 6
.LONG bldclt8
.WORD 6
.LONG 0
BLDB .LONG rblot1
.WORD 4
.LONG rblot2
.WORD 4
.LONG rblot3
.WORD 4
.LONG rblot4
.WORD 4
.LONG rblot5
.WORD 4
.LONG rblot6
.WORD 4
.LONG rblot7
.WORD 4
.LONG rblot8
.WORD 4
.LONG 0
TWOCHNKS
MOVE A9,A0
CALLA PRCSLP
;USED FOR PLAYER SPIN DEATH!
;A8=PLAYER PNTR
MOVI -02000H,B0
MOVI 02000H,B1
CALLA RANGRAND
MOVE A0,A6
MOVI -02000H,B0
MOVI 02000H,B1
CALLA RANGRAND
MOVE A0,A7
CALLA GETANIXY
MOVE A2,A1
ADDI 0180000H,A1 ;2A
SUBI 040000H,A3
MOVE A3,A0
;A0=PROPER X,A1=Y
MOVI BLDOTS,A9
MOVI BBS1,A2 ;(OIMG)
MOVI 161,A3 ;(OZPOS);150
MOVI DMAWNZ+M_NOCOLL,A4 ;(OFLAGS) NON-ZERO VALUE
MOVI CLSDEAD,A5 ;(OID)
CALLA BEGIN_CHNK
jauc FRQDELDIE
UNDERME
;A8=PLAYER PNTR
MOVI -04000H,B0
MOVI 04000H,B1
CALLA RANGRAND
MOVE A0,A6
MOVI -04000H,B0
MOVI 04000H,B1
CALLA RANGRAND
MOVE A0,A7
CALLA GETANIXY
MOVE A2,A1
MOVE A3,A0
;A0=PROPER X,A1=Y
MOVI T72BLAST1,A2
MOVI TBLST,A9 ;(OIMG)
MOVI 155,A3 ;(OZPOS)
MOVI DMAWNZ+M_NOCOLL,A4 ;(OFLAGS) NON-ZERO VALUE
MOVI CLSNEUT|TYPNEUT,A5 ;(OID)
CALLA BEGIN_CHNK
jauc FRQDELDIE
DIECHU2
;BLOOD CHUNKS
CREATE FUTUREPID,UNDERME
CREATE FUTUREPID,UNDERME
CREATE FUTUREPID,UNDERME
CREATE FUTUREPID,UNDERME
CREATE FUTUREPID,UNDERME
move @WAVE,A1
subk 16,A1
jrnz notorc ;!Orcus?
move @bossd_t,a0,L
move *a0(OXPOS),a2
addi 43,a2
move *a0(OYPOS),a3
jruc bosskp
notorc PUSH a8
MOVE *A13(KILLERO),A8,L
CALLA GETCPNT
;A1=Y/X CENTER POS
PULL A8
CLR A2
MOVX A1,A2
SRL 16,A1
MOVE A1,A3
bosskp MOVE *A8(OXPOS),A4
MOVI 09000H,A0 ;XVEL
MOVI 07000H,A6 ;YVEL
CMP A4,A2
JRLT GOGOX
;ADD TO PLYR X
NEG A0
GOGOX MOVE A0,*A8(OXVEL),L
MOVE *A8(OYPOS),A4
CMP A4,A3
JRLT GONEGD
;ADD TO PLYR Y
NEG A6
GONEGD MOVE A6,*A8(OYVEL),L
DIECHU:
MOVI AIRSCRM,A0 ;SCREAM UP INTO AIR
CALLA ONESNDOVR
MOVE *A8(OPLINK),A0,L
MOVE *A0(LEG_PTR),A0,L
MOVI 01A000000H,A1
MOVE A1,*A0(OXVAL),L ;MOVE LEGS OUT OF THE WAY!
;BIG IMAGE INTO AIR
MOVE *A8(OFLAGS),A0
BTST B_FLIPH,A0
JRZ NOH
ANDI 0FFEFH,A0
JRUC NOH1
NOH ORI M_FLIPH,A0
NOH1 MOVE A0,*A8(OFLAGS)
MOVE *A8(OYPOS),A0
ADDI 21H,A0
MOVE A0,*A8(OYPOS)
MOVI 342,A0 ;132
MOVE A0,*A8(OZPOS)
CREATE FUTUREPID,CHNKS
MOVI FLYUP,A9
JSRP FRANIMQ
CLR A0
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
MOVI 129,A0 ;142
MOVE A0,*A8(OZPOS)
MOVK 9H,A10
CALLA SHAKER
MOVI EXP1,A0
CALLA ONESND ;SOUND AT LANDING
SLEEPK 23
MOVK 4,A10
;ABOUT 1 SECOND OF BLINK
BK
MOVE A8,A0
CALLA OBJOFF
SLEEPK 4
MOVE A8,A0
CALLA OBJON
SLEEPK 4
DSJS A10,BK
SLEEPK 18
ALLDIE
MOVE *A13(PNUM),A0
SLL 5,A0
ADDI TBLP,A0
MOVE *A0,A11,L
SLP SLEEPK 1
MOVE @HALT,A0
JRNZ SLP
MOVE *A11(CNTD),A0
JRZ DOV
CLR A1
MOVE A1,*A8(OYPOS)
MOVE A1,*A8(OXVAL),L
MOVE *A8(OPLINK),A0,L
MOVE *A0(LEG_PTR),A0,L
MOVI 01A000000H,A1
MOVE A1,*A0(OXVAL),L ;MOVE LEGS OUT OF THE WAY!
; MOVE *A13(PNUM),A10 ;1 OR 2
; DEC A10
; MMTM SP,A8,A9,A10,A11
; CALLA SWAPSK ;TELL HULKS TO SEEK ANOTHER PLAYER
; MMFM SP,A8,A9,A10,A11
SLPZ
SLEEPK 1
MOVE @HALT,A0
JRNZ SLPZ
MOVE *A11(CNTD),A0
JRZ DOV
CMPI 1,A0
JRZ SLPZ
;PLAYERS TIME HAS EXPIRED.
;KILL PROC,OBJS,START MESSAGES!
CLR A0
MOVE A0,*A11(CNTD)
CMPI P1DATA,A11
JRNE KL2
;KILL PLYR1
CALLA KILLP1
;IS OTHER GUY STILL AROUND?
MOVI PLY2PID,A0
DYE0 CLR A1
NOT A1
CALLA EXISTP
JRNZ DYE
MOVI INGAMEOV,A0
MOVE A0,@GAMSTATE,W
SOUND1 MUSICOFF ;MUSIC HARD OFF
CLR A0
CLR A1
NOT A1
CALLA KILALL ;KILL ALL GAME PROCESSES
CREATE GMEOVPID,GAMEOVER ;GAME IS NOW OFFICIALLY OVER
DYE DIE
;KILL PLYR2
KL2 CALLA KILLP2
;IS OTHER GUY STILL AROUND?
MOVI PLY1PID,A0
JRUC DYE0
TBLP .LONG 0,P1DATA,P2DATA
;
DOV
;
;DEAD OVER
;
MOVI P1DATA,A1
MOVE *A13(PNUM),A0
CMPI 1,A0
JREQ ET1
MOVI P2DATA,A1
ET1
MOVE *A1(PLIVES),A2
DEC A2
MOVE A2,*A1(PLIVES),W
MOVE A1,A11
CALLA STUFF_LVADDR
MOVI 159,A0 ;TORSO REGULAR Z
MOVE A0,*A8(OZPOS)
MMTM SP,A8,A9
MOVE *A13(PNUM),A8 ;FOR SCRIPTPLAY
MOVE @RUNIN,A10,W ;INDICATES FROM BOTTOM OR LEFT
CREATE SCRPID,SCRIPTPLAY
PUSH A8
MOVE A8,A0
CLR A9
MOVI MEP1,A8
CMPI 1,A0
JRZ IMP1
;PLYR 2
MOVK 32,A9
MOVI MEP2,A8
IMP1 CREATE0 ME1
MOVE *A13(PNUM),A8 ;FOR SCRIPTPLAY
PULL A8
MOVE *A13(LEG_PRC),A1,L
CLR A0
MOVE A0,*A1(SHOECNT) ;CLEAR FAST SHOE CNT
;MAYBE START HIM WITH GREEN FLAME THROWER
MOVK 6,A3 ;START HIM OUT STRONG
MOVI 80,A4
MOVE *A13(PNUM),A0
MOVE @P1DATA+PLIVES,A2
CMPI 2,A0
JRNZ IMO2
MOVE @P2DATA+PLIVES,A2
IMO2 CMPI 0,A2
JRNZ IMO3
MOVE @PCNT,A0
BTST 0,A0
JRZ IMO3
MOVK 7,A3 ;START HIM OUT STRONG
MOVI 75,A4
IMO3
MOVE A3,*A13(WPN_TYP),W ;AFTER A DEATH
MOVE A4,*A13(SHOTCNT)
CMPI 1,A10
JRNZ FB
;RUNIN FROM SIDE
MOVE @WORLDTLX,A3,L ;Y LINE TO REAPPEAR AT
SUBI [08H,0],A3
CMPI 1,A8
JRNE VX1R
;THIS IS FOR BRINGING THE PLAYER ON FROM OFF LEFT OF SCREEN
MOVE @WORLDTLY,A2,L
ADDI [0115,0],A2
MOVE @PLYRPRCS,A0,L
JRUC AXZ
VX1R
MOVE @WORLDTLY,A2,L
ADDI [0130,0],A2
MOVE @PLYRPRCS+32,A0,L
JRUC AXZ
FB MOVE @WORLDTLY,A2,L ;Y LINE TO REAPPEAR AT
ADDI [0108H,0],A2 ;FF
CMPI 1,A8
JRNE VX1
;THIS IS FOR BRINGING THE PLAYER ON FROM OFF BOTTOM OF SCREEN
MOVE @WORLDTLX,A3,L
ADDI [0B3H,0],A3
MOVE @PLYRPRCS,A0,L
JRUC AXZ
VX1
MOVE @WORLDTLX,A3,L
ADDI [0C8H,0],A3
MOVE @PLYRPRCS+32,A0,L
AXZ
MOVE *A0(LEG_PTR),A0,L
MOVE A3,*A0(OXVAL),L
MOVE A2,*A0(OYVAL),L
MMFM SP,A8,A9
;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 ;NO COLLIDE FOR TORSO
CALLA GANISAG
MOVE A0,A8
;TURN BACK ON TORSO OBJECT
CALLA OBJON
;GIVE TORSO BACK HIS CORRECT PAL
MOVI nup1,A0
MOVE *A8(OPLINK),A1,L
MOVE *A1(PNUM),A1
CMPI 1,A1
JREQ OKP
;CHANGE TO PLAYER 2 PAL IF NEEDED!
MOVI nup2,A0
OKP
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
;SAFE FOR AWHILE
MOVI 120,A0 ;80
MOVE A0,*A13(DELYDET),W
CLR A0
MOVE A0,*A13(DEAD),W
JRUC NDD ;MAINLINE CODE REENTRY
KILLP1
;KILL OFF PLAYER 1 STUFF
CLR A1
NOT A1
MOVI PLY1PID,A0
CALLA KILALL
MOVI CLSPLYR|TYPPLYR|SUBPL_1,A0
CALLA KILOBJ ;KILL PLAYER 1 IMAGES
CLR A0
MOVE A0,@PLYROBJS,L
MOVE A0,@PLYRPRCS,L
RETS
KILLP2
;KILL OFF PLAYER 2 STUFF
CLR A1
NOT A1
MOVI PLY2PID,A0
CALLA KILALL
MOVI CLSPLYR|TYPPLYR|SUBPL_2,A0
CALLA KILOBJ
CLR A0
MOVE A0,@PLYROBJS+32,L
MOVE A0,@PLYRPRCS+32,L
RETS
BLDOTS .LONG BBS1
.WORD NEWPALET|20
.LONG RDBOOM ;ONUP1
.LONG BBS2
.WORD 5
.LONG BBS3
.WORD 5
.LONG BBS4
.WORD 5
.LONG BBS5
.WORD 5
.LONG 0
TSPN:
.LONG P1WG8T1
.WORD FLIPBITS|3,0
.LONG P1WG9T1
.WORD 3
.LONG P1WG10T1
.WORD 3
.LONG P1WG12T1
.WORD 3
.LONG P1WG10T1
.WORD FLIPBITS|3,(M_FLIPH)
.LONG P1WG9T1
.WORD 3
.LONG P1WG8T1
.WORD 3
.LONG P1WG6T1
.WORD FLIPBITS|3,0
.LONG 0
FLYUP:
.LONG FLY1
.WORD 4 ;3
.LONG FLY2
.WORD 4 ;3
.LONG FLY3
.WORD 4 ;3
.LONG FLY4
.WORD 4 ;3
.LONG FLY5
.WORD 6 ;5
.LONG FLY6
.WORD 8 ;7
.LONG FLY7
.WORD 8 ;7
.LONG FLY8
.WORD 12 ;10
.LONG FLY7
.WORD 8 ;7
.LONG FLY6
.WORD 8 ;7
.LONG FLY5
.WORD 6 ;5
.LONG FLY4
.WORD 4 ;3
.LONG FLY3
.WORD 4 ;3
.LONG FLY2
.WORD 4 ;3
.LONG FLY1
.WORD 4; 3
.LONG LAND
.WORD 1
.LONG 0
FIRELST:
.LONG PLYD1
.WORD FLIPBITS|4,0
.LONG PLYD2
.WORD 4
.LONG PLYD3
.WORD 4
.LONG PLYD4
.WORD 4
.LONG PLYD5
.WORD 4
.LONG PLYD6
.WORD 4
.LONG PLYD7
.WORD 4
.LONG PLYD8
.WORD 4 ;9
.LONG PFLM1
.WORD 4
.LONG PFLM2
.WORD 4
.LONG PFLM3
.WORD 4
.LONG PFLM4
.WORD 4
FIRELST2:
;SWITCH TO XPLOSION PAL (RDBOOM)
.LONG PLFR1
.WORD NEWPALET|6
.LONG RDBOOM
.LONG PLFR2
.WORD 6
.LONG PLFR3
.WORD NEWPALET|6
.LONG RDBOOM
.LONG PLFR4
.WORD 6
.LONG PLFR5
.WORD 6
.LONG PLFR6
.WORD 6
.LONG PLFR7
.WORD 6
.LONG PLFR8
.WORD 6
.LONG PLFR9
.WORD 6
.LONG PLFR10
.WORD 6
.LONG PLFR11
.WORD 6
.LONG PLFR12
.WORD 6
.LONG PLFR13
.WORD 6
.LONG PLFR14
.WORD 6
.LONG PLFR15
.WORD 6
.LONG PLFR16
.WORD 6
.LONG PLFR17
.WORD 6
.LONG PLFR18
.WORD 6
.LONG PLFR19
.WORD 6
.LONG PLFR20
.WORD 6
.LONG PLFR21
.WORD 6
.LONG PLFR22
.WORD 6
.LONG PLFR23
.WORD 6
.LONG PLFR24
.WORD 6
.LONG PLFR25
.WORD 6
.LONG 0
DIELST:
.LONG PLYD1
.WORD FLIPBITS|4,0
.LONG PLYD2
.WORD 4
.LONG PLYD3
.WORD 4
.LONG PLYD4
.WORD 4
.LONG PLYD5
.WORD 4
.LONG PLYD6
.WORD 4
.LONG PLYD7
.WORD 4
.LONG PLYD8
.WORD 9
.LONG STRIKE1
.WORD 3
.LONG STRIKE2
.WORD 3
.LONG STRIKE3
.WORD 3
.LONG STRIKE17
.WORD 3
.LONG STRIKE4
.WORD 3
.LONG STRIKE17
.WORD 3
.LONG STRIKE5
.WORD 3
.LONG STRIKE17
.WORD 3
.LONG STRIKE6
.WORD 3
.LONG STRIKE17
.WORD 3
.LONG STRIKE9
.WORD 3
.LONG STRIKE17
.WORD 3
.LONG STRIKE10
.WORD 3
.LONG STRIKE17
.WORD 3
.LONG STRIKE11
.WORD 3
.LONG STRIKE17
.WORD 3
.LONG STRIKE12
.WORD 3
.LONG STRIKE17
.WORD 3
.LONG STRIKE13
.WORD 3
.LONG STRIKE17
.WORD 3
.LONG STRIKE14
.WORD 3
.LONG STRIKE17
.WORD 3
.LONG STRIKE15
.WORD 3
.LONG STRIKE17
.WORD 3
.LONG STRIKE16
.WORD 3
.LONG 0
LSPN:
.LONG P1SH8L1
.WORD FLIPBITS|3,0
.LONG P1SH9L1
.WORD 3
.LONG P1S10L1
.WORD 3
.LONG P1S12L1
.WORD 3
.LONG P1S10L1
.WORD FLIPBITS|3,(M_FLIPH)
.LONG P1SH9L1
.WORD 3
.LONG P1SH8L1
.WORD 3
.LONG P1SH6L1
.WORD FLIPBITS|3,0
.LONG 0
;
WALK_LIST:
.LONG PWK_UP,PWK_UP,PWK_DN,PWK_UP,PWK_RGT,PWK_UPRGT,PWK_DNRGT,PWK_LFT
.LONG PWK_UPLFT,PWK_DNLFT
WALK_LIST3:
.LONG FPWK_UP,FPWK_UP,FPWK_DN,FPWK_UP,FPWK_RGT,FPWK_UPRGT,FPWK_DNRGT,FPWK_LFT
.LONG FPWK_UPLFT,FPWK_DNLFT
REV_WALK_LIST:
.LONG PWK_UP,PWK_DN,PWK_UP,PWK_UP,PWK_LFT,PWK_DNLFT,PWK_UPLFT,PWK_RGT
.LONG PWK_DNRGT,PWK_UPRGT
REV_WALK_LIST3:
.LONG FPWK_UP,FPWK_DN,FPWK_UP,FPWK_UP,FPWK_LFT,FPWK_DNLFT,FPWK_UPLFT,FPWK_RGT
.LONG FPWK_DNRGT,FPWK_UPRGT
WALK_LIST2:
.LONG TWK_UP,TWK_UP,TWK_DN,TWK_UP,TWK_RGT,TWK_UPRGT,TWK_DNRGT,TWK_LFT
.LONG TWK_UPLFT,TWK_DNLFT
REV_WALK_LIST2:
.LONG TWK_UP,TWK_DN,TWK_UP,TWK_UP,TWK_LFT,TWK_DNLFT,TWK_UPLFT,TWK_RGT
.LONG TWK_DNRGT,TWK_UPRGT
; 1
; 8 5
;7 4
; 9 6
; 2
;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
;SUNTHROW
LISTWHAT:
.LONG WHATLST1,WHATLST1,WHATLST2,WHATLST3,WHATLST4,WHATLST5
.LONG WHATLST6,WHATLST3
WHATLST1: ;NORMAL
.LONG S1_LIST,S1_LIST,S1_LIST,S1_LIST,S1_LIST
.LONG S1_LIST,S1_LIST,S1_LIST,S1_LIST,S1_LIST
WHATLST2: ;SPRAY WEAPON
.LONG S2_LIST,S2_LIST,S2_LIST,S2_LIST,S2_LIST
.LONG S2_LIST,S2_LIST,S2_LIST,S2_LIST,S2_LIST
WHATLST3: ;FIRE BALL
.LONG S3_LIST,S3_LIST,S3_LIST,S3_LIST,S3_LIST
.LONG S3_LIST,S3_LIST,S3_LIST,S3_LIST,S3_LIST
WHATLST4: ;GRENADES
.LONG S4_LIST,S4_LIST,S4_LIST,S4_LIST,S4_LIST
.LONG S4_LIST,S4_LIST,S4_LIST,S4_LIST,S4_LIST
WHATLST5: ;NON STOPPING BULLET
.LONG S5_LIST,S5_LIST,S5_LIST,S5_LIST,S5_LIST
.LONG S5_LIST,S5_LIST,S5_LIST,S5_LIST,S5_LIST
WHATLST6: ;MACHINE GUN
.LONG S6_LIST,S6_LIST,S6_LIST,S6_LIST,S6_LIST
.LONG S6_LIST,S6_LIST,S6_LIST,S6_LIST,S6_LIST
S1_LIST: ;NORMAL
.LONG SHT_UP,SHT_UP,SHT_DN,SHT_UP,SHT_RGT,SHT_UPRGT,SHT_DNRGT,SHT_LFT
.LONG SHT_UPLFT,SHT_DNLFT
S2_LIST: ;SPRAY
.LONG SHT2_UP,SHT2_UP,SHT2_DN,SHT2_UP,SHT2_RGT,SHT2_UPRGT,SHT2_DNRGT,SHT2_LFT
.LONG SHT2_UPLFT,SHT2_DNLFT
S3_LIST: ;FLAME THROWER
.LONG SHT3_UP,SHT3_UP,SHT3_DN,SHT3_UP,SHT3_RGT,SHT3_UPRGT,SHT3_DNRGT,SHT3_LFT
.LONG SHT3_UPLFT,SHT3_DNLFT
S4_LIST: ;GRENADE
.LONG SHT4_UP,SHT4_UP,SHT4_DN,SHT4_UP,SHT4_RGT,SHT4_UPRGT,SHT4_DNRGT,SHT4_LFT
.LONG SHT4_UPLFT,SHT4_DNLFT
S5_LIST: ;NON STOPPING BULLET
.LONG SHT5_UP,SHT5_UP,SHT5_DN,SHT5_UP,SHT5_RGT,SHT5_UPRGT,SHT5_DNRGT,SHT5_LFT
.LONG SHT5_UPLFT,SHT5_DNLFT
S6_LIST: ;MACHINE GUN
.LONG SHT6_UP,SHT6_UP,SHT6_DN,SHT6_UP,SHT6_RGT,SHT6_UPRGT,SHT6_DNRGT,SHT6_LFT
.LONG SHT6_UPLFT,SHT6_DNLFT
SHOOT_LEG_LIST:
.LONG L_SHT_UP,L_SHT_UP,L_SHT_DN,L_SHT_UP,L_SHT_RGT,L_SHT_UPRGT,L_SHT_DNRGT,L_SHT_LFT
.LONG L_SHT_UPLFT,L_SHT_DNLFT
SHOOT_LEG_LIST2:
.LONG L2_SHT_UP,L2_SHT_UP,L2_SHT_DN,L2_SHT_UP,L2_SHT_RGT,L2_SHT_UPRGT,L2_SHT_DNRGT
.LONG L2_SHT_LFT,L2_SHT_UPLFT,L2_SHT_DNLFT
; 1
; 8 5
;7 4
; 9 6
; 2
;
;WALK DIR IS ACROSS
;FIRE DIR IS DOWN
; 9876543210
REVERSE .WORD 0000000000B
.WORD 1001000100B
.WORD 0100100010B
.WORD 0000000000B
.WORD 1110000000B
.WORD 1010000100B
.WORD 0110000010B
.WORD 0001110000B
.WORD 0001010100B
.WORD 0000110010B
ANI_FLAG:
;A8=FLAG IMAGE FROM BACKGROUND UPDATER
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
MOVK 6,A10 ;8
ANIF1 MOVI FLGLST,A9
JSRP FRANIMQ
DSJ A10,ANIF1
CALLA SCRTST
JRZ ANI_FLAG
CALLA DELOBJA8
MOVE @WAVE,A0
CMPI 2,A0
JRNZ FORGO
FORDBG
MOVI -30,A0
MOVE A0,@JUMPXY
MOVI RECT2,A0
MOVE A0,@CURRENT,L
MOVI BRECT2,A0
MOVE A0,@BCURRENT,L
CALLA STRT_G
FORGO DIE
FLGLST .LONG FLAG1 ;IRAQFLG1
.WORD 5
.LONG FLAG2 ;IRAQFLG2
.WORD 5
.LONG FLAG3 ;IRAQFLG3
.WORD 5
.LONG FLAG4 ;IRAQFLG4
.WORD 5
.LONG FLAG5 ;IRAQFLG5
.WORD 5
.LONG 0
**************************************************************************
;
; TEMP ROUTINES
;
**************************************************************************
.IF DEBUG
StCpuLft:
move @TIMER,A0,W
jrz NoBog
clr A0
jruc GotTime
NoBog:
move @vcount,A0
subi HSINT,A0
jrnn SkIncCnt
addi 256,A0
SkIncCnt:
sll 2,A0
neg A0
addi 1024,A0
GotTime:
move A0,@CPULEFT,W
srl 4,A0
move @CPUAVG,A1,W
move A1,A2
srl 4,A2
sub A2,A1
add A0,A1
move A1,@CPUAVG,W
rets
.ENDIF
.END