total-carnage/CARN.ASV

5319 lines
94 KiB
Plaintext
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.

.FILE 'CARN.ASM'
;FINAL RELEASE CHANGES:
;FACCHECK IN MENU.ASM SHOULD SLEEP 60 NOT 1
.TITLE 'TOTAL CARNAGE GAME PROGRAM'
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
;
; INITIATED: JULY 17,1990
; MODIFIED: !
; SOFTWARE: MARK TURMELL
;
; COPYRIGHT (C) 1990 WILLIAMS ELECTRONICS GAMES, INC.
;
;
; GET THE SYSTEM STUFF
.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"
;
;SOUNDS EXTERNAL
;
.REF CROWD2,UGH,SHKSND,EXP3,MCSPK9,MUSICOFF
;
;SYMBOLS EXTERNALLY DEFINED
;
.REF STATUS,DEF_PAGE,GAMSTATE,INIT_ALL,UNSTACK,GET_AUD,PCNT
.REF FACCHECK,KILBGND,CLSCRACH,RANDOM,POWERTST,SCORE_FLAG,PCTOT
.REF ADD_DUMP,FIRE_DIRECTION,STRT_WPN,P1CTRL,P2CTRL,SENDH_TOP
.REF B_DIR,FRANIM,CHUNK_PLYR,BLOOD_LST2,EXPMINE2,SCRADD2,SNDPRC
.REF OBJOFF,OBJON,MSG_PROC2,GAMEOVER,GETFPAL,SHORT_PLYR,COLCYC
.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 CYCLE_TABLE,SPAWN_HULKS,WAVE,FRANIM_DIE,BEGIN_CHNK,ICLIST
.REF MAXHULK,HULK_CNT,SEND_TOP,HULK_DN,DO_ALL_STUFF,ENRECT4
.REF ERECT2,EN_CURRENT,ERECT3,ENRECT3,KEEPIT,ERECT4,LSHIT,SHAKER
.REF MAPON,PULLOBJ,JUMPXY,JUMPXY2,RANDPER,ERECT7,ERECT8,SPAWN_LYR
.REF TBOMBD,STRT_S,DELAYALL,ZONE_TXT2,LYR_CNT,MAXLYR,SPAWN_AHMD
.REF DBRECT2,DRECT2,TBLST,LAY_EXP,AHMD_CNT,MAXAHMD
.REF ENRECT0,ERECT10,CTOTAL,HTYPE,SPAWN_T72
;
;SYMBOLS DEFINED IN THIS FILE
;
.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,ANI_HSTG,XYSEEK2,ANI_STAT,DOLORD,WAVE_RAM
.DEF ANI_EYES,ANI_HD,ANI_LARM,ANI_RARM,ANI_TYP,ANI_MTH,ENEMY_RECT
.DEF ZEROCNTS,STRT_G,SHIFTLM,KPLARM,INTRO,ISTATE,SHOTKILL,ENDWV
.DEF CKFORY,SETPXY2,SETPXY1
.DEF HSTGSET,WARP_KIL
.IF DEBUG
.DEF FORDBG
; .BSS KEEPA0,32
; .BSS KEEPA5,32
.ENDIF
;
;UNINITIALIZED RAM DEFINITIONS
;
.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 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
.BSS CPUAVG,16
.BSS CPULEFT,16
.BSS TARGET_NUM,16 ;TARGET NUM FOR SCROLLING
.BSS WAVE_RAM,6*16*10 ;6=ELEMENTS,16=WORD SIZE
.BSS KPLARM,32 ;GI WALKIE TALKIE ARM
.BSS INTRO,16 ;INTRO # FOR CONTROL RM 0=PROF,1=GEN
.BSS ISTATE,16
.BSS RAMLST,32*35 ;IMG PNTRS FOR DELETION WHILE SCROLL
.BSS HSTGSET,16
;
;EQUATES FOR THIS FILE
;
VNORMVEL .EQU 016000H
HNORMVEL .EQU 016000H
VSLOVEL .EQU 0FA00H ;VNORMVEL*.707
HSLOVEL .EQU 0FA00H ;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
.TEXT
INIT_PROG:
DINT ;DISABLE INTERRUPTS
;
; SET FIELD PARAMETERS
SETF 16,1,0 ;WORD SIGN EXTEND (FIELD 0)
SETF 32,1,1 ;LONG WORD (FIELD 1)
; SET THE STACK POINTER TO THE END OF SCRATCHPAD
MOVI STCKST,SP,L ;MOVE STACK ADDR IN SP (32 BITS)
; MOVE @WDOGRAM,A0,L ;MARK SYSTEM AS INITIALIZED
; CMPI WDOGNUM,A0
; JRNZ WARMSET0
; MOVI AUDLOCK,A0
; CALLA AUD1
;DUMP REPORT OF WATCHDOG
; .IF DEBUG
; .ELSE
; CALLERR 11,0
; .ENDIF
;JUMP TO RECOVER CODE
; MOVI AUDSTAT,A0
; CALLA GET_AUD
; MOVE A1,A1
; JREQ WARMSET ;ATTRACT MODE GLITCH
; CLR A1
; CALLA STORE_AUDIT ;WARP ONLY ONCE, DUDE!!!
;
; JAUC BONUS_WARP
;WARMSET0:
; JAUC POWERTST
WARMSET:
DINT ;DISABLE INTERRUPTS
;
; SET FIELD PARAMETERS
SETF 16,1,0 ;WORD SIGN EXTEND (FIELD 0)
SETF 32,1,1 ;LONG WORD (FIELD 1)
; SET THE STACK POINTER TO THE END OF SCRATCHPAD
MOVI STCKST,SP,L ;MOVE STACK ADDR IN SP (32 BITS)
; RESET TODAYS HIGH SCORE TABLE
; CALLA INIT_TAB
; CLEAR SCRATCHPAD, INITIALIZE PROCESSES
CALLA CLSCRACH ;CLR SCRATCH RAM
CALLA INIT_ALL ;INITIALIZE Z-UNIT
MAIN0
CREATE 0,FACCHECK ;START ATTRACT IF THINGS O.K.
CREATE PLIST_ID,UNSTACK ;CREATE SWITCH UNSTACKER
;
; MAIN LINE LOGIC LOOP
;
MAINLP:
CALLA PRCDSP ;DISPATCH PROCESSES
MOVE A13,A13
JRZ MAINPOK
.IF DEBUG
LOCKUP
EINT
.ELSE
CALLERR 10,0
.ENDIF
;
MAINPOK:
CALLA SNDPRC ;DISPATCH AND TIME THE SOUND CALLS
CALLA RANDOM ;NEW SEED PLEASE
.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
MOVB @PCNT,A0
DEC A0
MOVB A0,@PCNT
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
*****************************************************************************
ZEROCNTS
CLR A0
MOVE A0,@HULK_CNT
MOVE A0,@AHMD_CNT
MOVE A0,@LYR_CNT
RETS
SETMAX:
;FOR HULK/GRUNT
MOVE @WAVE,A0
SLL 3,A0
ADDI HMAX,A0
MOVB *A0,A0
MOVK 4,A1 ;SUBTRACT THIS AMOUNT IF 1 PLYR GAME
CALLR ONEPADJ
; CALLR ADJMAX ;DIFFICULTY ADJUST
MOVE A0,@MAXHULK
MOVE @WAVE,A0
SLL 3,A0
ADDI HTYP,A0
MOVB *A0,A0
MOVB A0,@HTYPE
;FOR MINE LAYER
MOVE @WAVE,A0
SLL 3,A0
ADDI LMAX,A0
MOVB *A0,A0
CLR A1 ;SUBTRACT THIS AMOUNT IF 1 PLYR GAME
CALLR ONEPADJ
; CALLR ADJMAX ;DIFFICULTY ADJUST
MOVE A0,@MAXLYR
;FOR AHMED FLAME THROWER
MOVE @WAVE,A0
SLL 3,A0
ADDI AMAX,A0
MOVB *A0,A0
CLR A1 ;SUBTRACT THIS AMOUNT IF 1 PLYR GAME
CALLR ONEPADJ
; CALLR ADJMAX ;DIFFICULTY ADJUST
MOVE A0,@MAXAHMD
RETS
ONEPADJ
MOVE @STATUS,A2
CMPI 3,A2
JRZ TWEEK1
SUB A1,A0
TWEEK1
RETS
HTYP
;0=REGULAR SOLDIER GRUNT
;1=AXE CARRYING DEMON GRUNT
;2=AHMED FLAME THROWER GRUNT
.BYTE 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
HMAX .BYTE 2,20,24,28,26,25,20,25,30,20,19 ;(WAVE 10 AT END)
.BYTE 20,20,20 ;GRUNT/HULK
LMAX .BYTE 2,2,2,2,2,2,2,2,2,2,2
.BYTE 1,1,1 ;MINE LAYER
AMAX .BYTE 3,3,3,3,3,3,3,3,3,0,0
.BYTE 0,3,3 ;AHMED GRUNT
.EVEN
WAVE_INFO:
;RECORDS LOOK LIKE THIS
;TYPES:DIFFERENT ID'S
;#:TOTAL NUMBER PER WAVE
;DIFFICULTY:0,1,2,3 0=EASIEST
;RATE:# OF CYCLES/3 (SLP CNTR) BEFORE SPAWN IS CALLED
;ONSCRN:# OF TYPE ON SCREEN AT START OF WAVE
;CNTR USED IN WAVE RAM UPDATING
;RECORD LAYOUT
;TYPE # LEVEL RATE ONSCRN CNTR
;WAVE 1
.WORD HULK,165,2,18,0,20
.WORD 0
;WAVE 2
.WORD HULK,235,2,1,0,1
.WORD 0
;WAVE 3
.WORD HULK,290,2,9,0,1 ;REACTOR AREA
.WORD 0
;WAVE 4
.WORD HULK,305,2,8,0,1 ;NEAR ELEVATOR DOWN
.WORD 0
;WAVE 5
.WORD HULK,95,2,15,0,1 ;SECRET PATH REACTOR AREA
.WORD 0
;WAVE 6
.WORD HULK,65,3,20,0,20 ;SECRET PATH MIDDLE AREA
.WORD 0
;WAVE 7
.WORD HULK,245,4,13,0,1 ;SECRET PATH ROADWAY AREA,CARS ETC.
.WORD 0
;WAVE 8
.WORD HULK,285,4,10,0,90 ;SECRET PATH TOP AREA (END)
.WORD 0
;WAVE 9
.WORD HULK,285,4,10,0,90 ;UN USED
.WORD 0
;WAVE 10
.WORD HULK,280,2,3,0,1 ;START OF GAME AT DESERT - 1ST LOCKDOWN
.WORD TANK,5,3,55,0,200
.WORD AT72,1,0,0,0,675
.WORD 0
;WAVE 11
.WORD HULK,285,4,10,0,90 ;
.WORD AHMD,3,2,180,0,200
.WORD TANK,5,3,140,0,1
.WORD 0
TYP_TBL2:
;FOR SPAWNING
.LONG SPAWN_HULKS,SPAWN_LYR,SPAWN_AHMD,SPAWN_T72
OVERLORD:
SLEEP 3
MOVI BMBPID,A0
CLR A1
NOT A1
CALLA EXISTP
JRNZ OVERLORD
; MOVK 10,A0
; MOVE A0,@WAVE
; MOVB A0,@ECON ;NO ENEMY TO ENEMY COLLIDE ON!
; MOVB A0,@ENON ;NO ENEMY TO NEUTRAL COLLIDE ON!
CALLR SETMAX
CLR A3
MOVE A3,@HULK_DN
MOVI WAVE_INFO,A1
MOVE @WAVE,A0 ;WAVE 1 IS THE FIRST WAVE
DEC A0
JRNZ OL00
MOVE A1,A5
OL00: CLR A4
OL0: INC A4
MOVE *A1,A2,W
JRZ OL1
ADDI 6*16,A1
JRUC OL0
OL1: CMPI 0,A0
JRZ GOTIT
ADDK 16,A1 ;POINT TO NEXT WAVE INFO TABLE
INC A3
CMP A0,A3
JRNE OL00
MOVE A1,A5
GOTIT:
MOVE A5,A1 ;A5=ADDR OF THIS WAVE IN ROM
; CLEAR WAVE RAM
MOVI WAVE_RAM,A0
CLR A6
MOVI 29,A7
GT00 MOVE A6,*A0+,L
DSJS A7,GT00
; PUT WAVE INFO INTO RAM FOR UPDATING
MOVK 8,A4 ;CAN IT AT 8!
MOVI WAVE_RAM,A0
GT0 MOVI 6,A3 ;# OF FIELDS PER BAD GUY
GT MOVE *A1+,*A0+,W
DSJS A3,GT
DSJS A4,GT0
; NOW PUT ONSCRN # OF EACH TYPE ONTO SCREEN!
SLEEP 60*2 ;DELAY BEFORE BAD GUYS MOVE
RLSE:
;DISPERSE ENEMIES THROUGHOUT WAVE
MOVI WAVE_RAM,A0
MOVE @HALT,A1,W
JRNZ RDN
RTOP
MOVE *A0(0),A1
JRZ RDN
MOVE *A0(16),A1 ;A1=HOW MANY ARE LEFT
JRZ NXTR
MOVE *A0(5*16),A1 ;SPAWN RATE CNTR
DEC A1
MOVE A1,*A0(5*16)
JRNZ NXTR
MOVE *A0(3*16),A1 ;SPAWN RATE IN CYCLES
MOVE A1,*A0(5*16)
;TIME TO SPAWN
MOVE *A0(0),A1
DEC A1
SLL 5,A1
ADDI TYP_TBL2,A1
MOVE *A1,A1,L
PUSH A0
CALL A1
PULL A0
NXTR ADDI 6*16,A0
JRUC RTOP
;ALL ENEMIES HAVE BEEN CHECKED FOR RELEASE
RDN SLEEP 3
JRUC RLSE
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)
;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 5,A0
MOVE A0,*A13(TEMP)
MOVI 01FEH,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(TSO_PTR),A8,L
MOVE *A1(LEG_PTR),A11,L
;GIVE THESE IMAGES OTHER PAL
MOVI nup1a,A0
MOVE *A13(TEMP),A1
CMPI 2,A1
JRNZ RCL
MOVI nup2a,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
MOVE A9,A9
JRZ P01
MOVI nup2,A0
JRUC P001
P01 MOVI nup1,A0
P001 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
CALLA PRCSLP
DEC A10
JRZ XOUT
CMPI 25,A10
JRNZ RTP
MOVK 2,A0
MOVE A0,*A13(TEMP)
JRUC RTP
XOUT
;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 40,A1 ;10
MOVE A1,*A0(DELYDET) ;KEEP STUFFING A VALUE IN HERE
DIE
RESTUF .LONG CLSPLYR|TYPPLYR|SUBPL_1,CLSPLYR|TYPPLYR|SUBPL_2
ANI_STAT:
;A8=STATIC IMAGE FROM BACKGROUND UPDATER
SLEEP 1
MOVE @DELAYALL,A0
JRNZ ANI_STAT
SLEEP 1CH
MOVI STATLST,A9
MOVK 1,A1
JSRP FRANIM
MOVE A8,A0
CALLA DELOBJ
DIE
STATLST .LONG STAT2
.WORD 7
.LONG STAT3
.WORD 7
.LONG STAT4
.WORD 5
.LONG STAT5
.WORD 5
.LONG STAT6
.WORD 4
.LONG 0
ANI_TYP:
;A8=TYPIST ARM IMAGE FROM BACKGROUND UPDATER
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
SLEEP 4*60
MOVE *A8(OYPOS),A0
SUBI 46H,A0
MOVE A0,*A8(OYPOS)
MOVE *A8(OXPOS),A0
SUBK 1DH,A0
MOVE A0,*A8(OXPOS)
ANI_TYP2:
MOVI TYPLST,A9
MOVK 1,A1
JSRP FRANIM
JRUC ANI_TYP2
TYPLST .LONG TARM1
.WORD 30
.LONG TARM2
.WORD 5
.LONG TARM3
.WORD 3
.LONG TARM2
.WORD 3
.LONG TARM3
.WORD 6
.LONG TARM2
.WORD 3
.LONG TARM3
.WORD 3
.LONG TARM2
.WORD 3
.LONG TARM3
.WORD 20
.LONG TARM2
.WORD 4
.LONG TARM3
.WORD 3
.LONG TARM2
.WORD 4
.LONG TARM1
.WORD 5
.LONG 0
ANI_HD:
;A8=GENERAL HEAD IMAGE FROM BACKGROUND UPDATER
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
MOVE *A8(OYPOS),A0
SUBK 4,A0
MOVE A0,*A8(OYPOS)
MOVE *A8(OXPOS),A0
ADDK 11H,A0
MOVE A0,*A8(OXPOS)
;FOR IRAQ MAP
MOVI HDLST3,A9
MOVK 1,A1
JSRP FRANIM
MOVK 10,A10
IMP MOVI HDLST,A9
MOVK 1,A1
JSRP FRANIM
DSJS A10,IMP
DIE
;FOR PURPLE MONSTER
; MOVK 2,A10
;ANI_HD2:
; MOVI HDLST,A9
; MOVK 1,A1
; JSRP FRANIM
; DSJS A10,ANI_HD2
; SLEEP 20
; MOVI HDLST2,A9
; MOVK 1,A1
; JSRP FRANIM
; MOVK 10,A10
; JRUC ANI_HD2
HDLST3
.LONG GH2
.WORD 5
.LONG GH1
.WORD 03EH
.LONG GH2
.WORD 5
.LONG GH3
.WORD 10
.LONG GH2
.WORD 5
.LONG GH1
.WORD 30
.LONG GH2
.WORD 5
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 10
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 8
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 60
.LONG 0
HDLST2 .LONG GH3A
.WORD 5
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 10
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 8
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 10
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 5
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 10
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 10
.LONG GH3A
.WORD 5
.LONG GH3
.WORD 120
.LONG 0
HDLST
.LONG GH2
.WORD 5
.LONG GH1
.WORD 30
.LONG GH2
.WORD 5
.LONG GH3
.WORD 50
.LONG GH2
.WORD 5
.LONG GH1
.WORD 0D0H
.LONG GH2
.WORD 5
.LONG GH3
.WORD 58H
.LONG 0
ANI_LARM:
;A8=GENERAL LARM IMAGE FROM BACKGROUND UPDATER
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
SLEEP 1
MOVE @DELAYALL,A0
JRNZ ANI_LARM
MOVE *A8(OYPOS),A0
SUBI 3AH,A0
MOVE A0,*A8(OYPOS)
MOVE *A8(OXPOS),A0
ADDI 23H,A0
MOVE A0,*A8(OXPOS)
CREATE INTROPID,UPR
ANI_LARM2:
MOVI LARMLST,A9
MOVK 1,A1
JSRP FRANIM
JRUC ANI_LARM2
UPR SLEEP 120
MOVI 7FD3H,A0
MOVE A0,*A8(OZPOS)
DIE
LARMLST
.LONG GLARM1
.WORD 40
.LONG GLARM2
.WORD 5
.LONG GLARM3
.WORD 60
.LONG GLARM2
.WORD 5
.LONG GLARM1
.WORD 60*3
.LONG GLARM2
.WORD 5
.LONG GLARM3
.WORD 098H
.LONG GLARM4
.WORD 5
.LONG GLARM5
.WORD 5
.LONG GLARM6
.WORD 08FH
.LONG GLARM5
.WORD 5
.LONG GLARM4
.WORD 5
.LONG GLARM3
.WORD 30
.LONG GLARM2
.WORD 5
.LONG GLARM1
.WORD 60*3
.LONG GLARM2
.WORD 5
.LONG GLARM3
.WORD 60
.LONG GLARM2
.WORD 5
.LONG GLARM1
.WORD 60*3
.LONG 0
RARMLST
.LONG GRARM1
.WORD 40
.LONG GRARM2
.WORD 5
.LONG GRARM3
.WORD 60
.LONG GRARM2
.WORD 5
.LONG GRARM1
.WORD 60*3
.LONG GRARM2
.WORD 5
.LONG GRARM3
.WORD 098H
.LONG GRARM4
.WORD 5
.LONG GRARM5
.WORD 5
.LONG GRARM6
.WORD 08FH
.LONG GRARM5
.WORD 5
.LONG GRARM4
.WORD 5
.LONG GRARM3
.WORD 30
.LONG GRARM2
.WORD 5
.LONG GRARM1
.WORD 60*3
.LONG GRARM2
.WORD 5
.LONG GRARM3
.WORD 60
.LONG GRARM2
.WORD 5
.LONG GRARM1
.WORD 60*3
.LONG 0
ANI_RARM:
;A8=GENERAL RARM IMAGE FROM BACKGROUND UPDATER
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
SLEEP 1
MOVE @DELAYALL,A0
JRNZ ANI_RARM
MOVE *A8(OYPOS),A0
SUBI 39H,A0
MOVE A0,*A8(OYPOS)
MOVE *A8(OXPOS),A0
SUBK 1EH,A0
MOVE A0,*A8(OXPOS)
ANI_RARM2:
MOVI RARMLST,A9
MOVK 1,A1
JSRP FRANIM
JRUC ANI_RARM2
ANI_MTH:
MOVE @INTRO,A0
JRZ AM2
;GI MOUTH
SLEEP 7AH
MOVI T0G,A9
AM1 MOVE *A9+,A0,W
JRZ OUY
CALLA PRCSLP
MOVE A8,A0
CALLA OBJOFF
MOVE *A9+,A0,W
CALLA PRCSLP
MOVE A8,A0
CALLA OBJON
JRUC AM1
OUY MOVE A8,A0
CALLA DELOBJ
MOVK 1,A0
MOVE A0,@ISTATE
;TRIGGER INTO MOUTH
;TURN ON SOLDIER TILT IMAGE
;DELETE SOLDIER HALVES - GIPID OID!
MOVI SOLD,A14
CALLA DO_ALL_STUFF
; MOVE A8,A0
; CALLA ADJSTWTL
MOVI GIPID,A0 ;TWO SOLDIER HALVES
CLR A1
NOT A1
CALLA KILOBJ
SLEEP 5
MOVI SOLDR3,A1
MOVE *A8(OFLAGS),A4
CALLA ANI
MOVI 087H+20,A0
MOVE A0,*A8(OXPOS)
MOVI 042H,A0
MOVE A0,*A8(OYPOS)
MOVE A8,A0
CALLA ADJSTWTL
SLEEP 5
CREATE INTROPID,KIP
DIE
SOLD:
.LONG [09FH+20,0],[038FH,0],SOLDR1
.WORD 103H,DMAWNZ|M_NOCOLL,CLSNEUT|TYPNEUT ;109
.LONG 0,0
T0G .WORD 20,3,10,4,40,5,5,5,20,2,15,5,10,50,5,5,5,20,2,15,5,10
.WORD 2,15,5,10,0
AM2
;A8=PROF MOUTH IMAGE FROM BACKGROUND UPDATER
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
SLEEP 0C0H
MOVE *A8(OYPOS),A0
SUBI 56H,A0
MOVE A0,*A8(OYPOS)
MOVE *A8(OXPOS),A0
ADDK 0CH,A0
MOVE A0,*A8(OXPOS)
MOVI MTHLST0,A9
MOVK 1,A1
JSRP FRANIM
MOVK 7,A10
ANI_MTH2:
MOVI MTHLST,A9
MOVK 1,A1
JSRP FRANIM
DSJS A10,ANI_MTH2
SLEEP 8
MOVI PMTH4,A1
MOVE *A8(OFLAGS),A4
CALLA ANI
DIE
MTHLST0 .LONG PMTH2
.WORD 4
.LONG PMTH1
.WORD 4
.LONG PMTH2
.WORD 4
.LONG PMTH3
.WORD 10H ;30H
.LONG 0
MTHLST .LONG PMTH3
.WORD 4
.LONG PMTH2
.WORD 4
.LONG PMTH1
.WORD 4
.LONG PMTH2
.WORD 4
.LONG PMTH3
.WORD 18
.LONG PMTH2
.WORD 4
.LONG PMTH1
.WORD 10
.LONG PMTH2
.WORD 4
.LONG 0
ANI_EYES:
MOVE @INTRO,A0
JRZ AE2
SLEEP 120
;INTRO WITH GI
FT SLEEP 1
MOVE @ISTATE,A0
JRZ FT
;ABOUT TO SLIDE INTO MOUTH
MOVE A8,A0
CALLA OBJOFF
MOVE @KPLARM,A0,L
CALLA OBJOFF
SLEEP 5
;TURN ON A LEG AT NEW LOCATION
MOVI SOLDR4,A1
MOVE *A8(OFLAGS),A4
ORI M_FLIPH,A4
CALLA ANI
MOVE A8,A0
CALLA OBJON
MOVI 087H+23+20,A0
MOVE A0,*A8(OXPOS)
MOVI 042H+29,A0
MOVE A0,*A8(OYPOS)
MOVE A8,A0
CALLA ADJSTWTL
PUSH A8
MOVE @KPLARM,A8,L
MOVI SOLDR4,A1
MOVE *A8(OFLAGS),A4
CALLA ANI
MOVE A8,A0
CALLA OBJON
MOVI 087H-25+20,A0
MOVE A0,*A8(OXPOS)
MOVI 042H+29,A0
MOVE A0,*A8(OYPOS)
MOVE A8,A0
CALLA ADJSTWTL
CREATE INTROPID,KIP
PULL A8
CREATE INTROPID,KIP
DIE
KIP
;MOVE IT AROUND AND KPLARM AROUND
;DELETE IT
MOVK 6,A10
LP9 MOVK 10,A9
LPS MOVE A9,A0
CALLR DOXY
SLEEP 3
DSJS A9,LPS
CMPI 3,A10
JRNZ LKI
MOVE *A8(OYPOS),A0
SUBK 0FH,A0
MOVE A0,*A8(OYPOS)
CREATE INTROPID,OOUP
LKI DSJ A10,LP9
SLEEP 10
MOVE A8,A0
CALLA DELOBJ
DIE
OOUP MOVE *A8(OIMG),A0,L
CMPI SOLDR3,A0
JRZ OP2
SLEEP 034H
OP1 MOVI 100H,A0
MOVE A0,*A8(OZPOS)
MOVE A8,A0
CALLA PULLOBJ
CALLA INSOBJ
DIE
OP2 MOVI 1200,A0
MOVE A0,*A8(OZPOS)
MOVE A8,A0
CALLA PULLOBJ
CALLA INSOBJ
SLEEP 20
MOVI 10H,A0
MOVE A0,*A8(OZPOS)
MOVE A8,A0
CALLA PULLOBJ
CALLA INSOBJ
DIE
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,-7,0,7,-7,0,7,-4,-4,7,0
SHKY .BYTE 0,0,7,-4,4,-7,7,-4,0,-7,4
.EVEN
AE2
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
MOVE *A8(OYPOS),A0
SUBI 30H,A0
MOVE A0,*A8(OYPOS)
MOVE *A8(OXPOS),A0
ADDK 1DH,A0
MOVE A0,*A8(OXPOS)
MOVK 2,A10
ANI_EYES2:
MOVI EYELST,A9
MOVK 1,A1
JSRP FRANIM
DSJS A10,ANI_EYES2
SLEEP 1
MOVI EYELST2,A9
MOVK 1,A1
JSRP FRANIM
;TURN ON STATIC TO COVER REPORTER
CALLA STRT_S
MOVK 6,A10
MOVI [10,0],A1
MOVE A1,*A13(PDATA+32),L
XSLP0 MOVI [15,0],A0
MOVE A0,*A13(PDATA),L
MOVK 6,A9
XSLP
MOVE *A13(PDATA),A0,L
MOVE *A13(PDATA+32),A1,L
MOVI STAT6,A2
MOVI 279,A3
MOVI DMAWNZ,A4
MOVI CLSENMY|TYPGATE,A5 ;STATIC
CLR A6
CLR A7
CALLA BEGINOBJ
CREATE INTROPID,ANI_S2
MOVE *A13(PDATA),A0,L
ADDI [03CH,0],A0
MOVE A0,*A13(PDATA),L
DSJ A9,XSLP
MOVE *A13(PDATA+32),A0,L
ADDI [31,0],A0
MOVE A0,*A13(PDATA+32),L
DSJ A10,XSLP0
DIE
ANI_S2
;A8=STATIC IMAGE FROM BACKGROUND UPDATER
MOVI STATLST2,A9
MOVK 1,A1
JSRP FRANIM
;REPORTER HAS SCROLLED OFF SCREEN TO LEFT
SLEEP 0190H
MOVE A8,A0
CALLA DELOBJ
DIE
STATLST2
.LONG STAT5
.WORD 4
.LONG STAT4
.WORD 4
.LONG STAT3
.WORD 4
.LONG STAT2
.WORD 4
.LONG STAT1
.WORD 5
.LONG 0
EYELST2
.LONG PEYE4
.WORD 02CH
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 3
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 3
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 3
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 3
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 3
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 3
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 3
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 3
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 3
.LONG PEYE3
.WORD 3
.LONG PEYE4
.WORD 10
.LONG 0
EYELST
.LONG PEYE1
.WORD 5
.LONG PEYE2
.WORD 5
.LONG PEYE3
.WORD 9
.LONG PEYE2
.WORD 5
.LONG PEYE1
.WORD 1*60
.LONG PEYE2
.WORD 4
.LONG PEYE3
.WORD 4
.LONG PEYE2
.WORD 4
.LONG PEYE1
.WORD 30
.LONG PEYE2
.WORD 4
.LONG PEYE3
.WORD 4
.LONG PEYE2
.WORD 4
.LONG PEYE1
.WORD 2*60-50
.LONG PEYE2
.WORD 5
.LONG PEYE3
.WORD 20
.LONG PEYE2
.WORD 5
.LONG PEYE1
.WORD 1*60
.LONG 0
ANI_HSTG:
;A8=HSTG IMAGE FROM BACKGROUND UPDATER
;A9=HOSTAGE #
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
MOVE A13,*A8(OPLINK),L
MOVK 1,B0
MOVI 30,B1 ;91
CALLA RANGRAND
CALLA PRCSLP
SLL 5,A9
MOVE @HSTGSET,A0
JRNZ HS1
ADDI HSTGLST2,A9 ;BALL AND CHAIN
JRUC HSO
HS1 ADDI HSTGLST,A9 ;STUCK IN GOO
HSO MOVE *A9,A9,L
MOVE A9,A11
ANIH0 MOVI 20,A10
ANIHSTG
MOVK 1,A1
JSRP FRANIM
MOVE A11,A9
DSJ A10,ANIHSTG
CALLA SCRTST
JRZ ANIH0
MOVE A8,A0
CALLA DELOBJ
DIE
HSTGLST .LONG HGUYA,HGUYB,HGUYC,HGUYD
HSTGLST2
.LONG HGUYB2,HGUYA2,HGUYC2,HGUYB2
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
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
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
ANI_FLAG:
;A8=FLAG IMAGE FROM BACKGROUND UPDATER
;ANIMATE, THEN KILL OFF ONCE IT IS OFF SCREEN
MOVI 20,A10
ANIF1 MOVI FLGLST,A9
MOVK 1,A1
JSRP FRANIM
DSJ A10,ANIF1
CALLA SCRTST
JRZ ANI_FLAG
MOVE A8,A0
CALLA DELOBJ
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
CALLR STRT_G
FORGO DIE
STRT_G
MOVI GOOBP,A8 ;PAL NAME
MOVI PALTMP,A9 ;RAM AREA
MOVI [1,13],A10 ;BEGIN/END COLOR #
MOVK 6,A11 ;RATE IN TICKS
CREATE CYCPID,COLCYC ;COLOR CYCLER ON
RETS
FLGLST .LONG IRAQFLG1
.WORD 5
.LONG IRAQFLG2
.WORD 5
.LONG IRAQFLG3
.WORD 5
.LONG IRAQFLG4
.WORD 5
.LONG IRAQFLG5
.WORD 5
.LONG 0
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)
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 SLEEP 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 @WORLDTLX,A9,L
MOVE @TARGET_NUM,A0
CMPI 2,A0
JRNZ NOCH
;FROM REACTOR TO ELEVATOR
PUSH A0
MOVI [0E0H,0],A10
CREATE 0,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
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
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
SLEEP 1
JRUC SCROLLFT
SCR1X MOVE @WORLDTLX,A0,L
SUB A9,A0
ABS A0
CMPI 10000H,A0
JRC STOPITX
MOVE @WORLDTLX,A0,L
ADDI [0,8000H],A0 ;HORZ SCROLL SPEED
MOVE A0,@WORLDTLX,L
DEC A8
MOVE A8,A0
ANDI 01FH,A0
JRNZ NOBGNDX
;CALL BGND_UD1 OCCASIONALLY
CALLA BGND_UD1
NOBGNDX
SLEEP 2
MOVE @WORLDTLX,A1,L
SRL 16,A1
ADDK 30,A1 ;STOP SCROLL IF < THIS FROM EDGE
MOVE @PLYROBJS,A0,L
JRZ CK2X
MOVE *A0(OXPOS),A0
CMP A0,A1
JRNC PAUSEX
CK2X MOVE @PLYROBJS+32,A0,L
JRZ SCROLLFT
MOVE *A0(OXPOS),A0
CMP A0,A1
JRC SCROLLFT
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 70,A1
MOVE @PLYROBJS,A0,L
JRZ CK2AX
MOVE *A0(OXPOS),A0
CMP A0,A1
JRNC PAUSE2X
CK2AX MOVE @PLYROBJS+32,A0,L
JRZ SCROLLFT
MOVE *A0(OXPOS),A0
CMP A0,A1
JRC SCROLLFT
PAUSE2X SLEEP 2
JRUC PAUSEX
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,@RUNIN ;FROM BOTTOM AGAIN
;DELAY START OF NEW HULK WAVE NEAR ELEVATOR
MOVI ERECT4,A0
MOVE A0,@ENEMY_RECT,L
MOVK 4,A0
CALLR DOLORD
MOVI 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 0,POL2 ;BRING ON SIDE POOL
DIE
DOLORD MOVE A0,@WAVE
;A0=WAVE # TO START
MOVI LORDPID,A0
CLR A1
NOT A1
CALLA EXISTP
JRZ STR
CALLA KILL
STR CREATE LORDPID,OVERLORD
RETS
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 SLEEP 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 @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!
CMPI 1,A10
JRNZ SKP
.IF DEBUG
MOVE @START,A0
CMPI 3,A0
JRNZ SKP
.ENDIF
MOVI 0C0CH,A8 ;0C0C ;3E3E
CREATE 0,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 0,SEND_TOP
ASLP SLEEP 60
MOVE @WORLDTLY,A0,L
CMPI [1F0H,0],A0
JRGT ASLP
CREATE 0,ZONE_TXT
SLEEP 60
CREATE 0,SENDH_TOP
CREATE 0,SHIFTLM
SLEEP 120
;DELAY START OF NEW HULK WAVE
MOVI ERECT2,A0
MOVE A0,@ENEMY_RECT,L
MOVK 2,A0
CALLR DOLORD
;POSSIBLY PUT IN RECTANGLES FOR COLLISIONS HERE!
CLR A0
MOVE A0,@EN_CURRENT,L
DIE
TARGET_LST:
.LONG [0E7H,0],[0275H,0],[01E0H,0],[0701H,0],0
.LONG [26DH,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
MOVI 16,A0 ;FOR JUMPING DOWN VERTICALLY
MOVE A0,@JUMPXY
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
MOVK 17,A8
;START THEM MOVING
CKF CALLR DOSHIFT
SLEEP 60
;NOW STOP THEM
CALLR DOSHIFT2
;DIFFICULTY SETTING HERE!
SLEEP 50 ;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 0,CKFORY2
DIE
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
EXISTOBP:
MOVE *A2,A2,L ;GET NEXT
JREQ EXISTOBX ;ALL DONE
MOVE *A2(OID),A3
CMPI CLSNEUT|TYPMINE,A3
JRNE EXISTOBP ;NO
;GIVE THIS LAND MINE A VELOCITY
CLR B0
MOVK 5,B1
CALLA RANGRAND
DEC A0
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 EXISTOBP
EXISTOBX:
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
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
MOVE @HALT,A0
JRZ OSCR1
SLEEP 1
JRUC SCRDHZ
OSCR1
MOVE @WORLDTLX,A1,L
SRL 16,A1
ADDI 100,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 GOL ;GO LEFT
MOVE *A0(OXPOS),A0
CMP A0,A1
JRNC GOL
NOTL
;DO NOT SCROLL LEFT
;CHECK FOR RIGHT SIDE SCROLL
ADDI 200,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 GOR ;GO LEFT
MOVE *A0(OXPOS),A0
CMP A0,A1
JRC GOR
NOTR
;NOT SCROLLING TO RIGHT
SLEEP 2
JRUC SCRDHZ
GOL
;SCROLL LEFT
MOVE @WORLDTLX,A0,L
CMPI [01CH,0],A0
JRLT NOTR
;CAN GO FARTHER TO LEFT
SUBI 08000H,A0 ;HORZ SCROLL SPEED
INH1 MOVE A0,@WORLDTLX,L
DEC A8
MOVE A8,A0
ANDI 01FH,A0
JRNZ NOGND
;CALL BGND_UD1 OCCASIONALLY
CALLA BGND_UD1
NOGND JRUC NOTR
GOR
;SCROLL LEFT
MOVE @WORLDTLX,A0,L
CMPI [0198H,0],A0
JRGT NOTR
;CAN GO FARTHER TO RIGHT
ADDI 08000H,A0 ;HORZ SCROLL SPEED
JRUC INH1
SCROLLDWN:
;A9=WORLDTLY TARGET TO STOP AT
MOVE @HALT,A0
JRZ SCR1
SLEEP 1
JRUC SCROLLDWN
SCR1 MOVE @WORLDTLY,A0,L
SUB A9,A0
ABS A0
CMPI 10000H,A0
JRC STOPIT
MOVE @WORLDTLY,A0,L
SUBI [0,8000H],A0 ;VERT SCROLL SPEED
MOVE A0,@WORLDTLY,L
DEC A8
MOVE A8,A0
ANDI 01FH,A0
JRNZ NOBGND
;CALL BGND_UD1 OCCASIONALLY
CALLA BGND_UD1
NOBGND
SLEEP 2
MOVE @WORLDTLY,A1,L
SRL 16,A1
ADDI 220,A1
MOVE @PLYROBJS,A0,L
JRZ CK2
MOVE *A0(OYPOS),A0
CMP A0,A1
JRC PAUSE
CK2 MOVE @PLYROBJS+32,A0,L
JRZ SCROLLDWN
MOVE *A0(OYPOS),A0
CMP A0,A1
JRNC SCROLLDWN
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 190,A1
MOVE @PLYROBJS,A0,L
JRZ CK2A
MOVE *A0(OYPOS),A0
CMP A0,A1
JRC PAUSE2
CK2A MOVE @PLYROBJS+32,A0,L
JRZ SCROLLDWN
MOVE *A0(OYPOS),A0
CMP A0,A1
JRNC SCROLLDWN
PAUSE2 SLEEP 2
JRUC PAUSE
STOPIT MOVI DELPID,A0
CLR A1
NOT A1
CALLA KILALL
CALLA OFFSCRN
MOVE @TARGET_NUM,A0
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
SLEEP 20
MOVK 5,A10
MOVI 0,A9 ;Y ADD IN VALUE
CREATE 0,ZONE_TXT2
MOVI ENRECT0,A0 ;NO COLLISIONS
MOVE A0,@EN_CURRENT,L ;FOR BOX COLLISIONS
MOVI ERECT10,A0
MOVE A0,@ENEMY_RECT,L ;FOR SPAWNING
SLEEP 30 ;40
MOVK 10,A0
MOVE A0,@CTOTAL
CALLA DOLORD ;STORE WAVE #, START WAVE CODE
DIE
STP0 CMPI 1,A0
JRZ STP1
CMPI 3,A0
JRNZ STPOUT
;END OF SECRET PATH
MOVK 8,A0
CALLR DOLORD
MOVI ERECT8,A0
MOVE A0,@ENEMY_RECT,L ;FOR SPAWNING
CLR A0
MOVE A0,@WORLDTLY,L
CREATE 0,POL ;BRING ON BOTTOM POOL
DIE
STP1
;REACTOR ON SCREEN
CLR A0
MOVE A0,*A13(PROCID),W
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
CALLR DOLORD
MOVI ICN2,A0
MOVE A0,@ICLIST,L
;PUT IN RECTANGLES FOR ENEMY COLLISIONS HERE!
MOVI ENRECT3,A0
MOVE A0,@EN_CURRENT,L
CREATE 0,POL ;BRING ON BOTTOM POOL
MOVI CYCPID,A0
MOVE A0,*A13(PROCID)
;TEMPORARY SHIT
SLEEP 7*60
CREATE CYCPID,PUMP_RED
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
;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
CREATE TARGPID,TARGET
SLEEP 53
MOVI 15,A0
MOVE A0,@ARWOFF ;BLINK ARROW X MORE TIMES THEN KILL!
MOVE @KEEPIT,A0,L ;GET RID OF RIGHT SIDE POOL
CALLA DELOBJ
STPOUT 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
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
;ENTER OTHER OIDS TO KILL HERE
JRUC SOBJS1
CONTA MOVE *A0(OYPOS),A2
CMP A2,A1
JRNC SOBJS1
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
POL2
;TURN ON SIDE GOOB POOL BY ELEVATOR
MOVI GOOBA,A14
CALLA DO_ALL_STUFF
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 [01DCH,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
MOVK 2,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
MOVK 1,A7
BNCIN:
MOVE *A8(OIMG),A1,L
CMPI BLADE,A1
JRZ AOUT3
MOVE A8,-*SP,L ;PUSH A8
MOVE A0,A8
CALLA GETCPNT
;A1=Y/X CENTER POS
MOVE *SP+,A8,L ;PULL A8
CLR A2
MOVX A1,A2
SRL 16,A1
MOVE A1,A3
MOVE *A8(OPLINK),A5,L
MOVE *A5(TSO_PTR),A5,L
MOVE A8,A1
MOVE *A1(OXPOS),A4
MOVE *A5(OXPOS),A6
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(OYPOS),A4
MOVE *A5(OYPOS),A6
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
ANEXT0 MOVE *A0+,A1,W
JRZ AOUT
CMP A1,A4
JRLT ANEXT ;IF BRNCH RECT LFT EDGE > PLYR X
MOVE *A0+,A1,W
CMP A1,A6 ;
JRLT ANEXTA ;IF BRNCH RECT TOP EDGE > PLYR Y
MOVE *A0+,A1,W
CMP A1,A4
JRGT ANEXTB ;IF BRNCH RECT RGT EDGE < PLYR X
MOVE *A0+,A1,W
CMP A1,A6
JRGT ANEXT0 ;IF BRNCH RECT BOT EDGE < PLYR Y
;HIT
MMFM SP,A0,A1,A2,A4,A6
MOVE *A1(OYPOS),A4
INC A4
MOVE *A5(OYPOS),A6
INC A6
MOVE *A1(OXPOS),A0
DEC A0
MOVE *A5(OXPOS),A2
DEC A2
JRUC AOUT2
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(OYPOS) ;LEGS
MOVE A6,*A5(OYPOS)
MOVE A0,*A1(OXPOS) ;LEGS
MOVE A2,*A5(OXPOS)
AOUT3 MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7
RETS
SHOTKILL
;IN HERE WHEN A GOO SHOT KILLS PLAYER
;A8=PLAYER PNTR TO DIE
MMTM SP,A1,A2,A6,A7,A10,A11
JRUC SKL2
WARP_KIL
MMTM SP,A1,A2,A6,A7,A10,A11
;A11=TYPLAYR
;A0=PLYR PROCESS
MOVI CLSENMY|TYPLAYR,A11
JRUC WRPK
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
SKL2
MOVE *A8(OPLINK),A7,L
MOVE *A7(DELYDET),A1,W
JRZ KRU
ANDI 01FFH,A1
JRNZ GAMOK
KRU 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
MOVE *A0(OID),A11
ANDI 0FFFFH,A11
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
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
MOVI CLSNEUT|TYPNEUT,A0
MOVE A0,*A10(OID),W
CREATE 0,EXPMINE2 ;KILL LAND MINE (A10=PTR)
MOVI EXP3,A0
CALLA ONESND
PULL A7
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
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,A11
MOVE *A0(PNUM),A0
CMPI 1,A0
JREQ CG
MOVI P2DATA,A11
CG
MOVE A11,A2
CLR A1
MOVE A1,*A11(PTSRAM),W
;A2=P1DATA OR P2DATA
MOVI >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
MOVE *A11(PLIVES),A0,W ;TEMP
CMPI 9,A0
JRC TAG1
MOVK 9,A0
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
MOVI MCSPK9,A0 ;TEN SECONDS SPEECH
CALLA ONESND
CLR A0
MOVE A0,@THIS_PLYR,W
MOVK 1,A1
MOVB A1,*A11(CNTD) ;FLAG FOR MESSAGES AND CNTR
CMPI P1DATA,A11
JRNE F3
CREATE P1PID,MSG_PROC2
JRUC F4
F3 CREATE P2PID,MSG_PROC2
F4 MOVE @STATUS,A0
CMPI 3,A0
JRZ GAMOK
;IS PLAYER CNTING DOWN?
MOVE @CNTDIG1,A2
MOVE @CNTDIG2,A1
OR A2,A1
JRNZ GAMOK
CREATE BUYINPID,PSTAT
GAMOK:
MMFM SP,A1,A2,A6,A7,A10,A11
RETS
;SHOWIT
;SHOW SHRAPNEL FOR A MOMENT AFTER IT HAS KILLED PLAYER
;KILL CBALL/SHRAPNEL IMAGE (KILLER)
;A10=IMG PNTR OF KILLER
; MOVE *A10(OPLINK),A0,L
; JRZ DY
; CALLA KILL
; CLR A0
; MOVE A0,*A10(OPLINK),L
;
; MOVI 160,A0
; MOVE A0,*A10(OZPOS),W
; CLR A0
;;STOP ITS MOVEMENT
;;MAKE IT CONSTANT COLOR CYCLE COLOR
; MOVE A0,*A10(OXVEL),L
; MOVE A0,*A10(OYVEL),L
;
; MOVI BOOM3,A9
; MOVE A10,A8
; MOVK 1,A1
; JSRP FRANIM
;
; MOVE A10,A0
; CALLA DELOBJ
;DY DIE
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
DEC A8
SLL 5,A8
MOVI CTRLS,A1
ADD A8,A1
MOVE *A1,A0,L
MOVE A0,*A13(STICK),L ;PLACE CORRECT STICK READ ADDR
ADDI PLYRPRCS,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
DEC A0
SLL 5,A0
ADDI PLYROBJS,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
CMPI 1,A0
JRNE AXC
CREATE PLY1PID,DRAW_PLYR_LEGS
MOVI P1DATA,A11
CALLA STUFF_LVADDR
JRUC AXCD
AXC
CREATE PLY2PID,DRAW_PLYR_LEGS
MOVI P2DATA,A11
CALLA STUFF_LVADDR
AXCD
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(SHOTCNT)
MOVE *A13(PNUM),A7
DEC A7
SLL 5,A7
ADDI PLYRPRCS,A7
MOVE *A7,A7,L
MOVI 40,A0
MOVE A0,*A13(DELYDET)
TORSO_1:
CLR A0
MOVE A0,*A13(REV_FLAG),W
MOVE *A13(DELYDET),A0
JRZ TY
ANDI 01FFH,A0
DEC A0
MOVE A0,*A13(DELYDET)
TY
MOVE *A13(DEAD),A1
JRNZ DIE_CODE
NDD
MOVE *A13(STICK),A2,L
MOVE *A2,A2,W ;ACTUALLY GET P1/P2CTRL INFO
ANDI 0F0H,A2
JRNZ TORSO_2
;NOT_TOUCHED:
; 1
; 8 5
;7 4
; 9 6
; 2
CLR A0
MOVB A0,*A13(OSHTDIR)
MOVE *A13(P_DIR),A0 ;DIR + HIBIT SET IF STATIONARY
BTST 15,A0 ;TEST FOR STANDING FLAG
JRZ RUNNING
; P1 IS STANDING STILL. PLACE CORRECT TORSO ON TOP OF FEET
; CHECK FOR ALREADY THERE!
ANDI 01FH,A0
CLR A14
MOVE A14,*A13(OLD_P_DIR),W
MOVE A0,A14
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
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: SLEEP 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
CALLA GANISAG
MOVE A0,A8
MOVE *A13(P_DIR),A4 ;CURRENT DIR P1 IS FACING
SLL 5,A4
MOVE *A13(WPN_TYP),A1,W
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,W ;FLAG
CALLA ANI
TEE SLEEP 1
JRUC TORSO_1
TORSO_2:
; PLAYER IS SHOOTING
; STICK IS BEING PRESSED
CLR A0
MOVE A0,*A13(OLD_P_DIR),W
CALLA FIRE_DIRECTION
;PLAYER WILL BEGIN FRANIM OF SHOOTING IN PROPER DIRECTION
MOVE *A13(P_DIR),A0
ANDI 0FH,A0
MOVE @B_DIR,A4
MOVB *A13(OSHTDIR),A5
CMP A4,A5
JREQ JJ
;SHOOTING IN NEW DIR. ZERO REV_DIR.
CLR A5
MOVE A5,*A13(REV_P_DIR),W
JJ:
MOVB 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,A9,L ;MOVE TABLE VALUE INTO A9
;THIS IS NEW FRANIM SCRIPT PNTR
PUSH A8
CALLA STRT_WPN ;TORSO CONTROLS
PULL A8
MOVI 1,A1
JSRP FRANIM
MOVI 0,A0
MOVE A0,*A13(SHOOT_FLAG)
JRUC TORSO_1
**************************************************************************
* *
* DRAW_PLYR_LEGS *
* *
**************************************************************************
DRAW_PLYR_LEGS:
;A8=TORSO ABOVE THESE LEGS
;A10=PROCESS OF TORSO ABOVE THESE LEGS
;A9=LEG PNTR FOR THESE LEGS (IMAGE ALREADY STARTED)
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 *A13(TSO_PRC),A7,L
; MOVE *A7(DEAD),A0 ;GET DEAD FLAG FROM TORSO STRUCT
; JRNZ I_DIE
;OKAY_NOW:
CALLA UPDATE_PLYRXY
JRC DO_FRANI
; PLAYER IS NOT TOUCHING MOVEMENT STICK!
; SET STAND FLAG, AND PNT TO CORRECT IMAGE
;
MOVE *A13(SHOECNT),A1
JRZ REG7
BTST 15,A1
JRNZ 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 T1
CALLR THIS_DIR
; SETC
; MOVE A1,*A13(TCH_WALL)
MOVE A1,A1
CMPI 1,A1
JRZ REG7
;NOT COASTING INTO A WALL OR SCRN BORDER
MOVE @PCNT,A1
ANDI 07,A1
JRNZ REG71
;SLOW ME DOWN
MOVE *A13(TSO_PTR),A2,L ;GET TORSO PNTR FOR THESE LEGS
MOVE *A8(OXVEL),A1,L
JRN U7
SRL 1,A1
MOVE A1,*A8(OXVEL),L
MOVE A1,*A2(OXVEL),L
JRUC U7A
U7 NEG A1
SRL 1,A1
NEG A1
MOVE A1,*A8(OXVEL),L
MOVE A1,*A2(OXVEL),L
U7A
MOVE *A8(OYVEL),A1,L
JRN U8
SRL 1,A1
MOVE A1,*A8(OYVEL),L
MOVE A1,*A2(OYVEL),L
JRUC REG71
U8 NEG A1
SRL 1,A1
NEG 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
ANDI 01FH,A0
SLL 5,A0
; PLAYER WILL BEGIN FRANIM OF SHOOTING IN PROPER DIRECTION
MOVE *A13(SHOECNT),A1
JRZ REGS
BTST 15,A1
JRNZ 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
MOVI 1,A1
JSRP FRANIM
JRUC MOVE_TOP
CONT_1:
MOVE *A7(P_DIR),A0 ;GET TORSO INFO
ORI 08000H,A0
MOVE A0,*A7(P_DIR) ;GET TORSO INFO
ANDI 01FH,A0
SLL 5,A0
MOVE *A13(SHOECNT),A1
JRZ REGK
BTST 15,A1
;TENNIS?
JRNZ REGK
;BOOTS ON
MOVE @PCNT,A1
ANDI 03,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 SLEEP 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
ANDI 01FH,A4 ;JUST IN CASE HE WAS STANDING STILL
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
BTST 15,A1
JRZ 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
; MOVE A7,A9
;NEED A9=TSO_PRC
;A8=LEGS IMG
; MOVE A10,A9
SLEEP 05
;IF BLOWN UP INTO AIR, DO NOT DO THIS
MOVE *A10(DEAD),A1,W
ANDI 0FFFFH,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
;REALIGN PLAYER HALVES WHEN WE RESET IF A SPIN DEATH
MOVE A8,A0
MOVE *A13(TSO_PTR),A8,L ;GET LEG PTR OUT OF TORSO STRUCT
CALLA GETANIXY
MOVE *A8(OFLAGS),A4,W
CALLA GANISAG
MOVE A0,A8
MOVK 1,A1
MOVI LSPN,A9
JSRP FRANIM
SKIPSP ;SKIP SPINNING OF LEGS IF NOT NEEDED
MOVI 0A000000H,A0
MOVE A0,*A8(OXVAL),L
HG SLEEP 1
; MOVE *A13(TSO_PRC),A7,L
MOVE *A10(DEAD),A0
JRNZ HG
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
ADDK 1,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
; .IF DEBUG
; MOVE A0,@KEEPA0,L
; MOVE A5,@KEEPA5,L
; .ENDIF
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
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
SETC
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]
;
; 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
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
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
MMTM SP,A0,A1
MOVK 32,A9
MOVI MEP2,A8
CREATE 0,ME1
MMFM SP,A0,A1
MOVI BLACK,A2 ;TURN ON PLAYER 2 (BLACK)
MOVI CLSPLYR|TYPPLYR|SUBPL_2,A5
SETPXY2
MOVE @WORLDTLX,A0,L
MOVE @RUNIN,A1
JRZ FB0
;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
RETS
FB01 ADDI 0C80000H,A0
MOVE @WORLDTLY,A1,L
ADDI 0FF0000H,A1
RETS
PYX
MMTM SP,A0,A1
CLR A9
MOVI MEP1,A8
CREATE 0,ME1
MMFM SP,A0,A1
MOVI P1WG6T1,A2
MOVI CLSPLYR|TYPPLYR|SUBPL_1,A5
SETPXY1
MOVE @WORLDTLX,A0,L
MOVE @RUNIN,A1
JRZ FB1
;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
RETS
FB11 ADDI 0B30000H,A0
MOVE @WORLDTLY,A1,L
ADDI 0FF0000H,A1
RETS
ME1
;A9=PLYR # 1 OR 2
SLEEP 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 CLSDEAD,A5
CLR A6
CLR A7
CALLA BEGINOBJ2
MOVI 013H,A9
CREATE 0,MANY
MOVI 8*60,A11
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
SLEEP 1
DSJ A11,METOP
MOVE A8,A0
CALLA DELOBJ
DIE
MANY
SLEEP 12
MOVE A8,A0
CALLA OBJON
SLEEP 12
MOVE A8,A0
CALLA OBJOFF
DSJ A9,MANY
DIE
DIE_CODE
;FROM TORSO CODE
; PUSH A1
; CREATE 0,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
ANDI 0FFFFH,A1
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 0,A1 ;SHOCK OIDS HERE
JRNZ SPDTH
;SHOCK HERE
SLEEP 01
MOVI SHKSND,A0
CALLA ONESND
MOVK 1,A1
MOVI TSHK,A9
JSRP FRANIM
SLEEP 1
JRUC ALLDIE
DIEFIRE2
;IF FLAMING SPIN DEATH, FALL IN HERE
MOVI UGH,A0 ;FLAME PLAYER SCREAM
CALLA ONESND
MOVI FIRELST2,A9
JRUC DFZ
DIEFIRE
;IF FLAMING SPIN DEATH, FALL IN HERE
SLEEP 05
MOVI UGH,A0
CALLA ONESND
MOVI FIRELST,A9
DFZ MOVI 159,A0
MOVE A0,*A8(OZPOS)
MOVK 1,A1
JSRP FRANIM
SLEEP 1
JRUC ALLDIE
SPDTH
;IF SPIN DEATH, FALL IN HERE
SLEEP 05
;BLOOD CHUNKS
MOVI 159,A0 ;157
MOVE A0,*A8(OZPOS)
MOVI 1,A9
CREATE 0,TWOCHNKS
MOVI 30,A9
CREATE 0,TWOCHNKS
MOVI UGH,A0
CALLA ONESND
MOVK 1,A1
MOVI TSPN,A9
JSRP FRANIM
MOVE *A13(PNUM),A9
CREATE 0,DTB
MOVK 1,A1
MOVI DIELST,A9
JSRP FRANIM
SLEEP 1
JRUC ALLDIE
DTB SLEEP 01CH
;A9=1/2 FOR PLAYER #
CREATE BMBPID,TBOMBD
DIE
CHNKS
;IF NO BOG, BLLED FROM CHEST HOLE!
MOVE @HULK_CNT,A0
CMPI 20,A0
JRHI CDI
MOVB @PCTOT,A2
CMPI 010H,A2 ;19
JRLO ADDPCS
CDI DIE
ADDPCS MOVK 15,A10
SLEEP 10
CH1 CREATE 0,CHESTBLD
SLEEP 1
DSJS A10,CH1
SLEEP 3FH
MOVK 4,A10
CH2 CREATE 0,CHESTBLD2
SLEEP 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 FRANIM_DIE
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 CLSNEUT|TYPNEUT,A5 ;(OID)
CALLA BEGIN_CHNK
JAUC FRANIM_DIE
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 FRANIM_DIE
DIECHU2:
;BLOOD CHUNKS
CREATE 0,UNDERME
CREATE 0,UNDERME
CREATE 0,UNDERME
CREATE 0,UNDERME
CREATE 0,UNDERME
PUSH A8
MOVE *A13(KILLERO),A8,L ;MOVE @MUTPTR,A8,L
; MOVE *A8(PDATA),A8,L
CALLA GETCPNT
;A1=Y/X CENTER POS
PULL A8
CLR A2
MOVX A1,A2
SRL 16,A1
MOVE A1,A3
MOVE *A8(OXPOS),A4
MOVI 9000H,A0
CMP A4,A2
JRLT GOGOX
;ADD TO PLYR X
MOVI -9000H,A0
GOGOX MOVE A0,*A8(OXVEL),L
MOVE *A8(OYPOS),A4
MOVI -7000H,A0
CMP A4,A3
JRGT GONEGD
;ADD TO PLYR Y
MOVI 07000H,A0
GONEGD MOVE A0,*A8(OYVEL),L
DIECHU:
MOVI UGH,A0 ;SCREAM
CALLA ONESND
;IF CHUNK DEATH, FALL IN HERE
; MOVI 900,A0 ;700
; CALLA RANDPER
; JRNC CKS
;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 0,CHNKS
MOVK 1,A1
MOVI FLYUP,A9
JSRP FRANIM
CLR A0
MOVE A0,*A8(OXVEL),L
MOVE A0,*A8(OYVEL),L
MOVI 129,A0 ;142
MOVE A0,*A8(OZPOS)
MOVI 9H,A10
CALLA SHAKER
SLEEP 23
MOVK 4,A10
;ABOUT 1 SECOND OF BLINK
BK
MOVE A8,A0
CALLA OBJOFF
SLEEP 4
MOVE A8,A0
CALLA OBJON
SLEEP 4
DSJS A10,BK
SLEEP 18
JRUC ALLDIE
CKS
CREATE 0,CHUNK_PLYR
;CHANGE PRIORITY
MOVE *A8(OYPOS),A0
ADDK 12,A0
MOVE A0,*A8(OYPOS)
MOVK 1,A1
MOVI BLOOD_LST2,A9
JSRP FRANIM
MOVE A8,A0
CALLA OBJOFF
SLEEP 60*2
ALLDIE
MOVE *A13(PNUM),A0
SLL 5,A0
ADDI TBLP,A0
MOVE *A0,A11,L
SLP SLEEP 1
MOVE @HALT,A0
JRNZ SLP
MOVB *A11(CNTD),A0
JRZ DOV
CLR A1
MOVE A1,*A8(OYPOS)
MOVE A1,*A8(OXPOS)
; MOVB *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
SLEEP 1
MOVE @HALT,A0
JRNZ SLPZ
MOVB *A11(CNTD),A0
JRZ DOV
CMPI 1,A0
JRZ SLPZ
;PLAYERS TIME HAS EXPIRED.
;KILL PROC,OBJS,START MESSAGES!
CLR A0
MOVB 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
CREATE 0,GOGUYS ;PRINTS GAME OVER MESSAGE!
DYE DIE
;KILL PLYR2
KL2 CALLA KILLP2
;IS OTHER GUY STILL AROUND?
MOVI PLY1PID,A0
JRUC DYE0
GOGUYS
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
DIE
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
MOVE *A13(LEG_PRC),A1,L
CLR A0
MOVE A0,*A1(SHOECNT) ;CLEAR FAST SHOE CNT
MOVK 6,A0 ;START HIM OUT STRONG
MOVE A0,*A13(WPN_TYP),W ;AFTER A DEATH
MOVI 80,A0
MOVE A0,*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 [0FFH,0],A2
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
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 80,A0 ;140
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
;CHEER SLEEP 25
; MOVI CROWD2,A0
; CALLA ONESND
; DIE
BLDOTS .LONG BBS1
.WORD NEWPALET|20
.LONG 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 6
.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
LISTWHAT:
.LONG WHATLST1,WHATLST1,WHATLST1,WHATLST1,WHATLST1,WHATLST3
.LONG WHATLST6,WHATLST1
WHATLST1: ;NORMAL
.LONG SHOOT_LIST,SHOOT_LIST,SHOOT_LIST,SHOOT_LIST,SHOOT_LIST
.LONG SHOOT_LIST,SHOOT_LIST,SHOOT_LIST,SHOOT_LIST,SHOOT_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
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
;WHATLST4: ;GRENADES
; .LONG SHOOT_LIST2,SHOOT4_LIST2,SHOOT4_LIST2,SHOOT4_LIST,SHOOT4_LIST
; .LONG SHOOT4_LIST,SHOOT4_LIST,SHOOT4_LIST,SHOOT4_LIST,SHOOT4_LIST
;WHATLST5: ;NON STOPPING BULLET
; .LONG SHOOT_LIST2,SHOOT5_LIST2,SHOOT5_LIST2,SHOOT5_LIST,SHOOT5_LIST3
; .LONG SHOOT5_LIST,SHOOT5_LIST,SHOOT5_LIST,SHOOT5_LIST,SHOOT5_LIST
SHOOT_LIST: ;NORMAL
.LONG SHT_UP,SHT_UP,SHT_DN,SHT_UP,SHT_RGT,SHT_UPRGT,SHT_DNRGT,SHT_LFT
.LONG SHT_UPLFT,SHT_DNLFT
;SHOOT_LIST2: ;NORMAL BUT ADJUSTING FOR ODD ANI PNTS
; .LONG SHT_UP,SHT_UP,SHT_DN,SHT_UP,SHT_RGT2,SHT_UPRGT,SHT_DNRGT2,SHT_LFT2
; .LONG SHT_UPLFT,SHT_DNLFT
S3_LIST: ;NON STOP LIST
.LONG SHT3_UP,SHT3_UP,SHT3_DN,SHT3_UP,SHT3_RGT,SHT3_UPRGT,SHT3_DNRGT,SHT3_LFT
.LONG SHT3_UPLFT,SHT3_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
;SHOOT2_LIST: ;SPRAY
; .LONG SHT_UP,SHT2_UP,SHT2_DN,SHT_UP,SHT2_RGT,SHT2_UPRGT,SHT2_DNRGT,SHT2_LFT
; .LONG SHT2_UPLFT,SHT2_DNLFT
;SHOOT2_LIST2: ;SPRAY BUT ADJUSTING FOR ODD ANI PNTS
; .LONG SHT_UP,SHT2_UP,SHT2_DN,SHT_UP,SHT2_RGT2,SHT2_UPRGT,SHT2_DNRGT,SHT2_LFT2
; .LONG SHT2_UPLFT,SHT2_DNLFT
;SHOOT2_LIST3: ;SPRAY BUT ADJUSTING FOR ODD ANI PNTS
; .LONG SHT_UP,SHT2_UP,SHT2_DN2,SHT_UP,SHT2_RGT,SHT2_UPRGT,SHT2_DNRGT,SHT2_LFT
; .LONG SHT2_UPLFT,SHT2_DNLFT
;SHOOT3_LIST: ;POD
; .LONG SHT_UP,SHT3_UP,SHT3_DN,SHT_UP,SHT3_RGT,SHT3_UPRGT,SHT3_DNRGT,SHT3_LFT
; .LONG SHT3_UPLFT,SHT3_DNLFT
;SHOOT3_LIST2: ;POD BUT ADJUSTING FOR ODD ANI PNTS
; .LONG SHT_UP,SHT3_UP,SHT3_DN,SHT_UP,SHT3_RGT2,SHT3_UPRGT,SHT3_DNRGT,SHT3_LFT2
; .LONG SHT3_UPLFT,SHT3_DNLFT
;SHOOT3_LIST3: ;POD BUT ADJUSTING FOR ODD ANI PNTS
; .LONG SHT_UP,SHT3_UP,SHT3_DN2,SHT_UP,SHT3_RGT,SHT3_UPRGT,SHT3_DNRGT,SHT3_LFT
; .LONG SHT3_UPLFT,SHT3_DNLFT
;SHOOT4_LIST: ;GRENADE
; .LONG SHT_UP,SHT4_UP,SHT4_DN,SHT_UP,SHT4_RGT,SHT4_UPRGT,SHT4_DNRGT,SHT4_LFT
; .LONG SHT4_UPLFT,SHT4_DNLFT
;SHOOT4_LIST2: ;GRENADE BUT ADJUSTING FOR ODD ANI PNTS
; .LONG SHT_UP,SHT4_UP,SHT4_DN,SHT_UP,SHT4_RGT2,SHT4_UPRGT,SHT4_DNRGT,SHT4_LFT2
; .LONG SHT4_UPLFT,SHT4_DNLFT
;SHOOT5_LIST: ;NON STOPPING BULLET
; .LONG SHT_UP,SHT5_UP,SHT5_DN,SHT_UP,SHT5_RGT,SHT5_UPRGT,SHT5_DNRGT,SHT5_LFT
; .LONG SHT5_UPLFT,SHT5_DNLFT
;SHOOT5_LIST2: ;NON STOPPING BULLET BUT ADJUSTING FOR ODD ANI PNTS
; .LONG SHT_UP,SHT5_UP,SHT5_DN,SHT_UP,SHT5_RGT2,SHT5_UPRGT,SHT5_DNRGT,SHT5_LFT
; .LONG SHT5_UPLFT,SHT5_DNLFT
;SHOOT5_LIST3: ;NON STOPPING BULLET BUT ADJUSTING FOR ODD ANI PNTS
; .LONG SHT_UP,SHT5_UP,SHT5_DN2,SHT_UP,SHT5_RGT,SHT5_UPRGT,SHT5_DNRGT,SHT5_LFT
; .LONG SHT5_UPLFT,SHT5_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
STAND_TBL_L:
.LONG P1S12L1,P1S12L1,P1SH6L1,P1S12L1,P1SH9L1,P1S10L1,P1SH8L1
.LONG P1SH9L1,P1S10L1,P1SH8L1
STAND_TBL_L2:
.LONG P1TH12L1,P1TH12L1,P1TH6L1,P1TH12L1,P1TH9L1,P1TH10L1,P1TH8L1
.LONG P1TH9L1,P1TH10L1,P1TH8L1
STAND_TBL_L3:
.LONG P1TH12L2,P1TH12L2,P1TH6L2,P1TH12L2,P1TH9L2,P1TH10L2,P1TH8L2
.LONG P1TH9L2,P1TH10L2,P1TH8L2
SHT_UP:
.LONG P1S12T1
.WORD FLIPBITS|2,0
.LONG P1S12T2
.WORD 2
.LONG P1S12T1
.WORD FLIPBITS|2,0
.LONG P1S12T2
.WORD 2
.LONG 0
SHT_UPRGT:
.LONG P1S10T1
.WORD FLIPBITS|2,(M_FLIPH)
.LONG P1S10T2
.WORD 2
.LONG P1S10T1
.WORD FLIPBITS|2,(M_FLIPH)
.LONG P1S10T2
.WORD 2
.LONG 0
SHT_UPLFT:
.LONG P1S10T1
.WORD FLIPBITS|2,0
.LONG P1S10T2
.WORD 2
.LONG P1S10T1
.WORD FLIPBITS|2,0
.LONG P1S10T2
.WORD 2
.LONG 0
SHT_RGT:
.LONG P1SH9T1
.WORD FLIPBITS|2,(M_FLIPH)
.LONG P1SH9T2
.WORD 2
.LONG P1SH9T1
.WORD FLIPBITS|2,(M_FLIPH)
.LONG P1SH9T2
.WORD 2
.LONG 0
SHT_LFT:
.LONG P1SH9T1
.WORD FLIPBITS|2,0
.LONG P1SH9T2
.WORD 2
.LONG P1SH9T1
.WORD FLIPBITS|2,0
.LONG P1SH9T2
.WORD 2
.LONG 0
SHT_DN:
.LONG P1SH6T1
.WORD FLIPBITS|2,0
.LONG P1SH6T2
.WORD 2
.LONG P1SH6T1
.WORD FLIPBITS|2,0
.LONG P1SH6T2
.WORD 2
.LONG 0
SHT_DNLFT:
.LONG P1SH8T1
.WORD FLIPBITS|2,0
.LONG P1SH8T2
.WORD 2
.LONG P1SH8T1
.WORD FLIPBITS|2,0
.LONG P1SH8T2
.WORD 2
.LONG 0
SHT_DNRGT:
.LONG P1SH8T1
.WORD FLIPBITS|2,(M_FLIPH)
.LONG P1SH8T2
.WORD 2
.LONG P1SH8T1
.WORD FLIPBITS|2,(M_FLIPH)
.LONG P1SH8T2
.WORD 2
.LONG 0
;FOR NON STOP WEAPON
SHT3_UP:
.LONG P1S12T1
.WORD FLIPBITS|4,0
.LONG P1S12T2
.WORD 4
.LONG 0
SHT3_UPRGT:
.LONG P1S10T1
.WORD FLIPBITS|4,(M_FLIPH)
.LONG P1S10T2
.WORD 4
.LONG 0
SHT3_UPLFT:
.LONG P1S10T1
.WORD FLIPBITS|4,0
.LONG P1S10T2
.WORD 4
.LONG 0
SHT3_RGT:
.LONG P1SH9T1
.WORD FLIPBITS|4,(M_FLIPH)
.LONG P1SH9T2
.WORD 4
.LONG 0
SHT3_LFT:
.LONG P1SH9T1
.WORD FLIPBITS|4,0
.LONG P1SH9T2
.WORD 4
.LONG 0
SHT3_DN:
.LONG P1SH6T1
.WORD FLIPBITS|4,0
.LONG P1SH6T2
.WORD 4
.LONG 0
SHT3_DNLFT:
.LONG P1SH8T1
.WORD FLIPBITS|4,0
.LONG P1SH8T2
.WORD 4
.LONG 0
SHT3_DNRGT:
.LONG P1SH8T1
.WORD FLIPBITS|4,(M_FLIPH)
.LONG P1SH8T2
.WORD 4
.LONG 0
;FOR MACHINE GUN
SHT6_UP:
.LONG P1S12T1
.WORD FLIPBITS|2,0
.LONG P1S12T2
.WORD 2
.LONG 0
SHT6_UPRGT:
.LONG P1S10T1
.WORD FLIPBITS|2,(M_FLIPH)
.LONG P1S10T2
.WORD 2
.LONG 0
SHT6_UPLFT:
.LONG P1S10T1
.WORD FLIPBITS|2,0
.LONG P1S10T2
.WORD 2
.LONG 0
SHT6_RGT:
.LONG P1SH9T1
.WORD FLIPBITS|2,(M_FLIPH)
.LONG P1SH9T2
.WORD 2
.LONG 0
SHT6_LFT:
.LONG P1SH9T1
.WORD FLIPBITS|2,0
.LONG P1SH9T2
.WORD 2
.LONG 0
SHT6_DN:
.LONG P1SH6T1
.WORD FLIPBITS|2,0
.LONG P1SH6T2
.WORD 2
.LONG 0
SHT6_DNLFT:
.LONG P1SH8T1
.WORD FLIPBITS|2,0
.LONG P1SH8T2
.WORD 2
.LONG 0
SHT6_DNRGT:
.LONG P1SH8T1
.WORD FLIPBITS|2,(M_FLIPH)
.LONG P1SH8T2
.WORD 2
.LONG 0
L_SHT_UP:
.LONG P1S12L1
.WORD FLIPBITS|1,0
.LONG 0
L_SHT_UPRGT:
.LONG P1S10L1
.WORD FLIPBITS|1,(M_FLIPH)
.LONG 0
L_SHT_UPLFT:
.LONG P1S10L1
.WORD FLIPBITS|1,0
.LONG 0
L_SHT_RGT:
.LONG P1SH9L1
.WORD FLIPBITS|1,(M_FLIPH)
.LONG 0
L_SHT_LFT:
.LONG P1SH9L1
.WORD FLIPBITS|1,0
.LONG 0
L_SHT_DN:
.LONG P1SH6L1
.WORD FLIPBITS|1,0
.LONG 0
L_SHT_DNLFT:
.LONG P1SH8L1
.WORD FLIPBITS|1,0
.LONG 0
L_SHT_DNRGT:
.LONG P1SH8L1
.WORD FLIPBITS|1,(M_FLIPH)
.LONG 0
L2_SHT_UP:
.LONG P1TH12L1
.WORD FLIPBITS|1,0
.LONG 0
L2_SHT_UPRGT:
.LONG P1TH10L1
.WORD FLIPBITS|1,(M_FLIPH)
.LONG 0
L2_SHT_UPLFT:
.LONG P1TH10L1
.WORD FLIPBITS|1,0
.LONG 0
L2_SHT_RGT:
.LONG P1TH9L1
.WORD FLIPBITS|1,(M_FLIPH)
.LONG 0
L2_SHT_LFT:
.LONG P1TH9L1
.WORD FLIPBITS|1,0
.LONG 0
L2_SHT_DN:
.LONG P1TH6L1
.WORD FLIPBITS|1,0
.LONG 0
L2_SHT_DNLFT:
.LONG P1TH8L1
.WORD FLIPBITS|1,0
.LONG 0
L2_SHT_DNRGT:
.LONG P1TH8L1
.WORD FLIPBITS|1,(M_FLIPH)
.LONG 0
PWK_UP:
.LONG P1R12L1
.WORD FLIPBITS|3,0
.LONG P1R12L2
.WORD 3
.LONG P1R12L3
.WORD 3
.LONG P1R12L4
.WORD 3
.LONG P1R12L5
.WORD 3
.LONG P1R12L6
.WORD 3
.LONG P1R12L7
.WORD 3
.LONG P1R12L8
.WORD 3
.LONG 0
PWK_DN:
.LONG P1RN6L1
.WORD FLIPBITS|3,0
.LONG P1RN6L2
.WORD 3
.LONG P1RN6L3
.WORD 3
.LONG P1RN6L4
.WORD 3
.LONG P1RN6L5
.WORD 3
.LONG P1RN6L6
.WORD 3
.LONG P1RN6L7
.WORD 3
.LONG P1RN6L8
.WORD 3
.LONG 0
PWK_RGT:
.LONG P1RN9L1
.WORD FLIPBITS|3,(M_FLIPH)
.LONG P1RN9L2
.WORD 3
.LONG P1RN9L3
.WORD 3
.LONG P1RN9L4
.WORD 3
.LONG P1RN9L5
.WORD 3
.LONG P1RN9L6
.WORD 3
.LONG P1RN9L7
.WORD 3
.LONG P1RN9L8
.WORD 3
.LONG 0
PWK_UPRGT:
.LONG P1R10L1
.WORD FLIPBITS|3,(M_FLIPH)
.LONG P1R10L2
.WORD 3
.LONG P1R10L3
.WORD 3
.LONG P1R10L4
.WORD 3
.LONG P1R10L5
.WORD 3
.LONG P1R10L6
.WORD 3
.LONG P1R10L7
.WORD 3
.LONG 0
PWK_DNLFT:
.LONG P1RN8L1
.WORD FLIPBITS|3,0
.LONG P1RN8L2
.WORD 3
.LONG P1RN8L3
.WORD 3
.LONG P1RN8L4
.WORD 3
.LONG P1RN8L5
.WORD 3
.LONG P1RN8L6
.WORD 3
.LONG P1RN8L7
.WORD 3
.LONG P1RN8L8
.WORD 3
.LONG 0
PWK_LFT:
.LONG P1RN9L1
.WORD FLIPBITS|3,0
.LONG P1RN9L2
.WORD 3
.LONG P1RN9L3
.WORD 3
.LONG P1RN9L4
.WORD 3
.LONG P1RN9L5
.WORD 3
.LONG P1RN9L6
.WORD 3
.LONG P1RN9L7
.WORD 3
.LONG P1RN9L8
.WORD 3
.LONG 0
PWK_UPLFT:
.LONG P1R10L1
.WORD FLIPBITS|3,0
.LONG P1R10L2
.WORD 3
.LONG P1R10L3
.WORD 3
.LONG P1R10L4
.WORD 3
.LONG P1R10L5
.WORD 3
.LONG P1R10L6
.WORD 3
.LONG P1R10L7
.WORD 3
.LONG 0
PWK_DNRGT:
.LONG P1RN8L1
.WORD FLIPBITS|3,(M_FLIPH)
.LONG P1RN8L2
.WORD 3
.LONG P1RN8L3
.WORD 3
.LONG P1RN8L4
.WORD 3
.LONG P1RN8L5
.WORD 3
.LONG P1RN8L6
.WORD 3
.LONG P1RN8L7
.WORD 3
.LONG P1RN8L8
.WORD 3
.LONG 0
FPWK_UP:
.LONG P1R12L1
.WORD FLIPBITS|1,0
.LONG P1R12L2
.WORD 1
.LONG P1R12L3
.WORD 1
.LONG P1R12L4
.WORD 1
.LONG P1R12L5
.WORD 1
.LONG P1R12L6
.WORD 1
.LONG P1R12L7
.WORD 1
.LONG P1R12L8
.WORD 1
.LONG 0
FPWK_DN:
.LONG P1RN6L1
.WORD FLIPBITS|1,0
.LONG P1RN6L2
.WORD 1
.LONG P1RN6L3
.WORD 1
.LONG P1RN6L4
.WORD 1
.LONG P1RN6L5
.WORD 1
.LONG P1RN6L6
.WORD 1
.LONG P1RN6L7
.WORD 1
.LONG P1RN6L8
.WORD 1
.LONG 0
FPWK_RGT:
.LONG P1RN9L1
.WORD FLIPBITS|1,(M_FLIPH)
.LONG P1RN9L2
.WORD 1
.LONG P1RN9L3
.WORD 1
.LONG P1RN9L4
.WORD 1
.LONG P1RN9L5
.WORD 1
.LONG P1RN9L6
.WORD 1
.LONG P1RN9L7
.WORD 1
.LONG P1RN9L8
.WORD 1
.LONG 0
FPWK_UPRGT:
.LONG P1R10L1
.WORD FLIPBITS|1,(M_FLIPH)
.LONG P1R10L2
.WORD 1
.LONG P1R10L3
.WORD 1
.LONG P1R10L4
.WORD 1
.LONG P1R10L5
.WORD 1
.LONG P1R10L6
.WORD 1
.LONG P1R10L7
.WORD 1
.LONG 0
FPWK_DNLFT:
.LONG P1RN8L1
.WORD FLIPBITS|1,0
.LONG P1RN8L2
.WORD 1
.LONG P1RN8L3
.WORD 1
.LONG P1RN8L4
.WORD 1
.LONG P1RN8L5
.WORD 1
.LONG P1RN8L6
.WORD 1
.LONG P1RN8L7
.WORD 1
.LONG P1RN8L8
.WORD 1
.LONG 0
FPWK_LFT:
.LONG P1RN9L1
.WORD FLIPBITS|1,0
.LONG P1RN9L2
.WORD 1
.LONG P1RN9L3
.WORD 1
.LONG P1RN9L4
.WORD 1
.LONG P1RN9L5
.WORD 1
.LONG P1RN9L6
.WORD 1
.LONG P1RN9L7
.WORD 1
.LONG P1RN9L8
.WORD 1
.LONG 0
FPWK_UPLFT:
.LONG P1R10L1
.WORD FLIPBITS|1,0
.LONG P1R10L2
.WORD 1
.LONG P1R10L3
.WORD 1
.LONG P1R10L4
.WORD 1
.LONG P1R10L5
.WORD 1
.LONG P1R10L6
.WORD 1
.LONG P1R10L7
.WORD 1
.LONG 0
FPWK_DNRGT:
.LONG P1RN8L1
.WORD FLIPBITS|1,(M_FLIPH)
.LONG P1RN8L2
.WORD 1
.LONG P1RN8L3
.WORD 1
.LONG P1RN8L4
.WORD 1
.LONG P1RN8L5
.WORD 1
.LONG P1RN8L6
.WORD 1
.LONG P1RN8L7
.WORD 1
.LONG P1RN8L8
.WORD 1
.LONG 0
TWK_UP:
.LONG P1TH12L1
.WORD FLIPBITS|4,0
.LONG P1TH12L2
.WORD 4
.LONG 0
TWK_DN:
.LONG P1TH6L1
.WORD FLIPBITS|4,0
.LONG P1TH6L2
.WORD 4
.LONG 0
TWK_RGT:
.LONG P1TH9L1
.WORD FLIPBITS|4,(M_FLIPH)
.LONG P1TH9L2
.WORD 4
.LONG 0
TWK_UPRGT:
.LONG P1TH10L1
.WORD FLIPBITS|4,(M_FLIPH)
.LONG P1TH10L2
.WORD 4
.LONG 0
TWK_DNLFT:
.LONG P1TH8L1
.WORD FLIPBITS|4,0
.LONG P1TH8L2
.WORD 4
.LONG 0
TWK_LFT:
.LONG P1TH9L1
.WORD FLIPBITS|4,0
.LONG P1TH9L2
.WORD 4
.LONG 0
TWK_UPLFT:
.LONG P1TH10L1
.WORD FLIPBITS|4,0
.LONG P1TH10L2
.WORD 4
.LONG 0
TWK_DNRGT:
.LONG P1TH8L1
.WORD FLIPBITS|4,(M_FLIPH)
.LONG P1TH8L2
.WORD 4
.LONG 0
WPNWALK:
;BULLET SUB TYPES
.LONG T_WALK_LIST,T_WALK_LIST,T_WALK_LIST,T_WALK_LIST,T_WALK_LIST
.LONG T_WALK_LIST,T_WALK_LIST,T_WALK_LIST
T_WALK_LIST: ;REGULAR GUN
;T_WALK_LIST2: ;SPRAY GUN
;T_WALK_LIST5: ;NON STOPPING BULLET
.LONG P1WG12T1,P1WG12T1,P1WG6T1,P1WG12T1,P1WG9T1,P1WG10T1,P1WG8T1,P1WG9T1
.LONG P1WG10T1,P1WG8T1
;T_WALK_LIST2: ;SPRAY GUN
; .LONG P1WG12T1,P1SG12T1,P1SG6T1,P1WG12T1,P1SG9T1,P1SG10T1,P1SG8T1,P1SG9T1
; .LONG P1SG10T1,P1SG8T1
;T_WALK_LIST3: ;BACKPACK BOMBS
; .LONG P1WG12T1,P1B12T1,P1B6T1,P1WG12T1,P1B9T1,P1B10T1,P1B8T1,P1B9T1
; .LONG P1B10T1,P1B8T1
;T_WALK_LIST4: ;GRENADE
; .LONG P1WG12T1,P1GG12T1,P1GG6T1,P1WG12T1,P1GG9T1,P1GG10T1,P1GG8T1,P1GG9T1
; .LONG P1GG10T1,P1GG8T1
;T_WALK_LIST5: ;NON STOPPING BULLET
; .LONG P1WG12T1,P1GL12T1,P1GL6T1,P1WG12T1,P1GL9T1,P1GL10T1,P1GL8T1,P1GL9T1
; .LONG P1GL10T1,P1GL8T1
T_WALK_FLG:
.LONG DMAWNZ+M_NOCOLL,DMAWNZ+M_NOCOLL,DMAWNZ+M_NOCOLL,DMAWNZ+M_NOCOLL,DMAWNZ+M_NOCOLL+M_FLIPH
.LONG DMAWNZ+M_NOCOLL+M_FLIPH
.LONG DMAWNZ+M_NOCOLL+M_FLIPH,DMAWNZ+M_NOCOLL
.LONG DMAWNZ+M_NOCOLL,DMAWNZ+M_NOCOLL
L_WALK_FLG:
.LONG DMAWNZ+M_NOCOLL,DMAWNZ+0,DMAWNZ+0,DMAWNZ+M_NOCOLL,DMAWNZ+0+M_FLIPH
.LONG DMAWNZ+0+M_FLIPH
.LONG DMAWNZ+0+M_FLIPH,DMAWNZ+0
.LONG DMAWNZ+0,DMAWNZ+0
TSHK:
.LONG SHOCK1
.WORD 2
.LONG SHOCK2
.WORD 2
.LONG SHOCK3
.WORD 2
.LONG SHOCK2
.WORD 2
.LONG SHOCK1
.WORD 2
.LONG SHOCK3
.WORD 2
.LONG SHOCK1
.WORD 2
.LONG SHOCK2
.WORD 2
.LONG SHOCK1
.WORD 2
.LONG SHOCK2
.WORD 2
.LONG SHOCK3
.WORD 2
.LONG SHOCK2
.WORD 2
.LONG SHOCK1
.WORD 2
.LONG SHOCK3
.WORD 2
.LONG SHOCK1
.WORD 2
.LONG SHOCK2
.WORD 2
.LONG SHOCK1
.WORD 2
.LONG SHOCK2
.WORD 2
.LONG SHOCK3
.WORD 2
.LONG SHOCK2
.WORD 2
.LONG SHOCK1
.WORD 2
.LONG SHOCK3
.WORD 2
.LONG SHOCK1
.WORD 2
.LONG SHOCK2
.WORD 2
.LONG SHOCK1
.WORD 2
.LONG SHOCK2
.WORD 2
.LONG SHOCK3
.WORD 2
.LONG SHOCK2
.WORD 2
.LONG SHOCK1
.WORD 2
.LONG SHOCK3
.WORD 2
.LONG SHOCK1
.WORD 2
.LONG SHOCK2
.WORD 2
.LONG SHOCK1
.WORD 2
.LONG SHOCK2
.WORD 2
.LONG SHOCK3
.WORD 2
.LONG SHOCK2
.WORD 2
.LONG SHOCK1
.WORD 2
.LONG SHOCK3
.WORD 2
.LONG SHOCK1
.WORD 2
.LONG SHOCK2
.WORD 2
.LONG SHOCK1
.WORD 2
.LONG SHOCK2
.WORD 2
.LONG SHOCK3
.WORD 2
.LONG SHOCK2
.WORD 2
.LONG SHOCK1
.WORD 2
.LONG SHOCK3
.WORD 2
.LONG SHOCK1
.WORD 2
.LONG SHOCK2
.WORD 2
.LONG 0
PCTR .LONG P1CTRL,P2CTRL
;
;SEEK X-Y COORDINATE
;A8=OBJECT SEEKING
;A5=X COORD TO SEEK
;A6=Y COORD TO SEEK
;A7=MULTIPLIER OF VELOCITY
;RETURNS
;A5=X VEL
;A6=Y VEL
;
;NABBED FROM EUGENE JARVIS FOOTBALL CODE
;
XYSEEK2:
MOVE *A8(OXPOS),A3,W
MOVE *A8(OYPOS),A4,W
SUB A3,A5 ;FIND DIFFERENCE
SUB A4,A6
MOVE A6,A3 ;
MOVE A5,A1
ABS A5
ABS A6
ADD A5,A6 ;CALC SUM ABS(DX+DY)
SLL 16,A1 ;SHIFT TO ACCOMODATE FRACTIONAL VELOCITY
SLL 16,A3
DIVS A6,A1 ;GENERATE SPEED RATIOS
DIVS A6,A3
; MOVI 60H,A5 ;MULTIPLY BY VELOCITY FACTOR
MOVE A7,A5
MPYS A5,A3
MPYS A1,A5 ;FINAL X VEL
SRA 4,A3
SRA 4,A5
MOVE A3,A6 ;FINAL Y VEL
RETS
**************************************************************************
;
; 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
**************************************************************************
* *
* ERRORLOG - THIS SHOULD BE CALLED IN PLACE OF ANY JRxx $ *
* IN CASE OF ERROR. IF WE ARE IN DEBUG MODE *
* IT WILL HANG, IF NOT, THE ERROR WILL BE LOGGED *
* AND IT WILL RETURN. *
* A1 = RETURN ADDRESS OF CALLING ROUTINE *
* A2 = ERROR CODE *
**************************************************************************
ERRORLOG
; MMTM SP,A2,A3,A4,A5,A6,A7
; SLL 16,A2
ERRLOGG ;A8 IS IN A8
; MOVE A13,A7 ;PROC. BLOCK IN A7
; MOVE *A7(PROCID),A6,W
; SLL 16,A6
; MOVE *A8(OID),A3,W
; MOVX A3,A6 ;A6 = [PROCID:*A8(OID)]
; MOVE @CIRCUIT,A5,W
; SLL 16,A5
; MOVE @WAVE,A3,W
; MOVX A3,A5 ;A5 = [CIRCUIT#:WAVE#,)]
; MOVI AUD1STRT,A4 ;PLAY #
; CALLR GETAUD4
; SLL 16,A4
; MOVE *A0(OID),A3,W ;A4 = [STRT#:*A0(OID)]
; MOVX A3,A4
; MOVE @GAMSTATE,A3,W ;A2 = [STATUS:GAMSTATE]
; MOVX A3,A2
; MOVE @STATUS,A3,W ;A2 = [ERROR CODE:STATUS]
; MOVX A3,A2
; MOVE *SP(0C0H),A3,L ;A3=GET THE RETURN ADDRESS
; MOVE *SP(0E0H),A1,L ;A1=CALLING ADDRESS
; CALLA ADD_DUMP
; MOVE @SURVCNT,A2,W
; INC A2 ;INCREMENT THE SURVIVAL COUNT
; MOVE A2,@SURVCNT,W
; MMFM SP,A2,A3,A4,A5,A6,A7
RETS
**************************************************************************
* *
* GETAUD4 - GET AN AUDIT *
* A4 = AUDIT # *
* RETURNS: *
* A4 = AUDIT *
* *
**************************************************************************
;GETAUD4
; MMTM SP,A0,A1
; MOVE A4,A0
; CALLA GET_AUD
; CALLA DEF_PAGE ;POINT AT DEFAULT PAGE.
; MOVE A1,A4
; MMFM SP,A0,A1
; RETS
.END