************************************************************** * * 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