total-carnage/STVWAVES.ASM

4839 lines
96 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters!

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

.FILE 'WAVES.ASM'
.TITLE 'ROBO-RAMA GAME PROGRAM WAVE STUFF'
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
;
; INITIATED: APRIL 13,1989
; MODIFIED: !
; SOFTWARE: MARK TURMELL
;
; COPYRIGHT (C) 1989 WILLIAMS ELECTRONICS GAMES, INC.
;
;
; GET THE SYSTEM STUFF
.INCLUDE "MPROC.EQU" ;MPROC EQUATES
.INCLUDE "DISP.EQU" ;DISPLAY PROC. EQUATES
.INCLUDE "\VIDEO\SYS\SYS.INC" ;Z UNIT SYSTEM EQUATES
.INCLUDE "\VIDEO\SYS\MACROS.HDR" ;MACROS DEFINITIONS
.INCLUDE "MAC2.ASM" ;MACRO 2 DEFINITIONS
.INCLUDE "IMGTBL.GLO"
.INCLUDE "BGNDTBL.GLO" ;BACKGROUND EQUATES
.INCLUDE "ROBO.EQU"
.INCLUDE "AUDIT.EQU"
.INCLUDE "LINK.EQU"
;
;SYMBOLS EXTERNALLY DEFINED
;
;SOUNDS
.REF TUNE2,BTUNE1,SCASH,PZLSND,BEEP3,BONS1,BONS2,HIMUSC,VICMSC
.REF BTUNE2,BTUNE3,TUNE3,HA2SND,NOWAY,TUNE4,MCSPK4
.REF YAMOFF,BUYMSC,ENDTUNE,MUSICOFF,MCSPK9,CROWD1,SOUNDSUP
;
;HI SCORE ENTRY
.REF ISHSTD,GETINIT1,GETINIT2,INITTIM,GRATS,CLRP1PZ,CLRP2PZ
.REF CLNPAL,BCDBIN,SETDIFF,OFSCRTST,FIXBUG,BAKMODS,GAMEMODS
;
.REF STORE_AUDIT
.REF CLSCRACH,INIT_ALL,UNSTACK,MAINLP,SCORETYP,COLTAB
.REF SPR_LIT,SPR_LIT1,HULKTYP,FACEON,INIT_PROG
.REF CLRPAL,COLCYC,RINGS,SPEECH,RANDPER
.REF STATIC_LIT,HOSPG_LIT,HOSPR_LIT,CLRBPAL
.REF BLNKAREA,FILLAREA,DOMNTR,FREETOT,UNGETPAL,TOID_ON
.REF P1PZ1,P1PZ2,P1PZ3,P2PZ1,P2PZ2,P2PZ3,P1CSH,P2CSH
.REF P1_LIT,P2_LIT,FLR2_LIT,FRANIM,SCRADD3,INITIALS
.REF CNTDIG1,CNTDIG2,DUMB,DEC_LV,SET_1ST,FINDPAL
.REF SET_GATE_2,INIT_RAM,WANTIN,PLYROBJS,PLYRPRCS,IS2,IS1
.REF HEXTOASC,KILOBJ,NAMEBASE,IRQSKYE,PIECES
.REF NM2BASE,NM3BASE,CMP_LIT
.REF FIXMETERS,FIXMETERS2
.REF RD15FONT,COLLISIONS,STRCNRMO,STRLNRMO,STRCNRM
.REF DRAW_PLYR_TORSO,JOY_UPDATE
.REF GAMSTATE,AFONT0,INIT_SCORE
.REF AUTOEOFF,GAMERASE,DMAQWAIT,CLRWORLD
.REF BAKBITS,GPALOBJ
.REF GETFPAL,GETBPAL,BAKBITS
.REF ALLOFF,GETCPNT,CR_CONTP,P1DATA
.REF P2DATA,EXISTP
.REF GET_ADJ,AUD1,WARMSET,AUD
.REF ADDBUY,ATSTRT,WIPEOUT
.REF UNIT_CLR,DMAHALT
.REF P1CTRL,P2CTRL,AUTOEON,STATUS
.REF SCRTST,INSBOBJ
.REF KEEP_TOPL_GATE,KEEP_TOPR_GATE,KEEP_LFT_GATE,KEEP_RGT_GATE
.REF PUTBGND,DEMOBGND,WORLDTLX,WORLDTLY,SCRIPTPLAY,SCORE_FLAG
.REF OVERLORD,BEGINOBJ,BEGINOBJ2,BGND_UD1
.REF WRLD,EHALT,DELSCORE,FSCORE,BSCORE
.REF FROMDR,P1MTRY,P2MTRY
.REF FPALRAM,KP_LS,KP_RS,KP_TS
.REF RANGRAND
.REF EXPTLXY,EXPLRXY
.REF STRT_CHSR
.REF FADEIN,FADEOUT,BLAKOUT
.REF AUTOPAL
.REF FADE_DOWN
.REF SEND_ICON
;
;SYMBOLS DEFINED IN THIS FILE
;
.DEF KEEPON,DO_ALL_STUFF
.DEF BONUS_WARP
.DEF GAMEOVER,BTOF,GAL1P,GAL2P,MCPTR,MYID,BOUND
.DEF RFACEP,LFACEP,LFCY,RFCY,KILLP1,KILLP2,KILLPLYR,FIGURES
.DEF WAVE,WNDWON,WNDWOFF,EXPSCRN,SNKSCRN,SNKNOW,DELWNDW,WNDO
.DEF KILBGND,COLRSTRT,CLR_ALL,INIT_GAME,COLRTEMP,AWAVE,CANT
.DEF CHNGOID,HALT,PSTAT,STARTUP,DRAWLIVES,DEMOPLAY,SET_WAVE
.DEF LIVECNT,CIRCUIT,STANDBY,BTIME,ENTERON
.DEF CRCTTAB,WAVEYX,METERP1,METERP2
.DEF COLRPRC,DO_BND,P1LVS,P2LVS
.DEF OBJEXP32,OBJSCRN
.DEF CWINDOW,OWINDOW
;
;UNINITIALIZED RAM DEFINITIONS
;
BSIZE .EQU 320
.BSS PAL1,16*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM
.BSS PAL2,16*16*2 ;ALLOCATE 2 X COLOR AREA IN RAM
; .BSS PZCNTR,8
; .BSS ITEM,8
.BSS ENTERON,16
.BSS BOUND,8
.BSS KPA0,64
; .BSS FGBK,8
.BSS MYID,8
.BSS P1BON,32
.BSS P2BON,32
.BSS GAL1P,32
.BSS GAL2P,32
.BSS MCPTR,32
.BSS LFACEP,32
.BSS RFACEP,32
.BSS LFCY,16
.BSS RFCY,16
.BSS STANDBY,8
.BSS OLDSTATUS,16
.BSS WNDO,8
.BSS CANT,8
.BSS CANT2,8
.BSS CIRCUIT,32
.BSS WAVE,32
.BSS OBJPTR,32
.BSS AWAVE,32
.BSS COLRTEMP,16*16 ;RAM COPY OF CYCLING COLORS
.BSS BTIMERST,16
.BSS BTIME,16
.BSS LOOPWAVE,16
.BSS TEMP,16
.BSS SURVCNT,16
.BSS STARTUP,16
.BSS HALT,16
.BSS BOBJECTS,32*BSIZE ;BACKGROUND OBJECTS LIST
.BSS TMPA8,32
.BSS TMPA9,32
.BSS TMPA10,32
.BSS TMPA11,32
.BSS WAVEYX,32
.BSS METERP1,32
.BSS METERP2,32
.BSS P1LVS,32 ;PNTR FOR LIVES DIGIT
.BSS P2LVS,32 ;PLAYER 2
.BSS KEEPON,16 ;KEEP HI TABLE ON LONGER
.BSS GRATSON,16 ;KEEP HI TABLE ON LONGER
;
;EQUATES FOR THIS FILE
;
CWSPD .SET 45 ;CLOSE WINDOW SPEED (HIGHER THE SLOWER)
OWSPD .SET 21 ;31 ;OPEN WINDOW SPEED (HIGHER THE SLOWER)
CWSPD2 .SET 01 ;CLOSE WINDOW SPEED (HIGHER THE SLOWER)
OWSPD2 .SET 01 ;OPEN WINDOW SPEED (HIGHER THE SLOWER)
SCNOFFX .SET 01D0H
;BUYTIME .EQU 8
;BUYSLP .EQU 4
;BUYTICK .EQU 75/BUYSLP ;52*2
BUYTICK .EQU 10
SCRNTOP .EQU 100
LASTWAVE .EQU 8
ZID .EQU 100 ;BACKGROUND Z TO LOOK FOR
ZGAL1 .EQU 100
;GAL2 .EQU 101
MCH .EQU 102 ;MC HAMMER
LFACE .EQU 116 ;FACE ON LEFT
RFACE .EQU 117 ;FACE ON RIGHT
P1METER .EQU 118
TLGATE .EQU 120
TRGATE .EQU 121
LGATE .EQU 122
RGATE .EQU 123
RED .EQU >3B3B ;PURPLE IN nup1 PALLETTE
OWHITE .EQU >0808 ;OFF WHITE
SCRLXSPD .EQU [3,0] ;X SCROLL SPEED
SCRLYSPD .EQU [3,0] ;Y SCROLL SPEED
SCRLYSPD2 .EQU [6,0] ;Y SCROLL SPEED
SCRLXSPD1 .EQU [6,0] ;X SCROLL SPEED
SCRLYSPD1 .EQU [5,0] ;Y SCROLL SPEED
;
;FIGURES LAYOUT
;
CHST1L .EQU PDATA ;UHL PLYR 1 CHEST LEFT
CH1R .EQU PDATA+32 ;UHL TANK RGT PTR
HD1L .EQU PDATA+64 ;UHL TORSO LEFT PTR
HD1R .EQU PDATA+96 ;UHL TORSO RGT PTR
SM1 .EQU PDATA+128 ;UHL ARM LEFT PTR
EY1 .EQU PDATA+160 ;UHL ARM RGT PTR
CHST2L .EQU PDATA+192 ;UHL TANK LEFT/FRONT TREAD
CH2R .EQU PDATA+224 ;UHL TANK RGT/FRONT TREAD
HD2L .EQU PDATA+256 ;UHL TANK LEFT/SIDE TREAD
HD2R .EQU PDATA+288 ;UHL TANK RGT/SIDE TREAD
SM2 .EQU PDATA+320 ;UHL SHADOW ON RIGHT SIDE OF TANK
EY2 .EQU PDATA+352 ;UHL ARM RGT PTR
PZCNTR .EQU PDATA
ITEM .EQU PDATA+8
IWAIT .EQU PDATA+16
SHUT .EQU PDATA+24 ;UHB SHUT DWN SND FLAG
.TEXT
;
;WARP TO BONUS RACK UP SCREEN FROM WATCHDOG LOCKUP
;
;GROW WINDOW FULL SCREEN
;CHECK FOR VALID INFO
;IF NOT VALID, RESET
;ZERO OUT BACKGROUND, OBJLST, PROC LIST
;RESTART CORRECT NUMBER OF PLAYERS
;POINT AT CORRECT CIRCUIT BACKGROUND MAP
;SET X/Y LOCATION FOR RACKUP MODULE
;DISPLAY TEXT MESSAGE TALKING ABOUT SECRET WARP.
;JUMP TO CODE WHICH CALLS RACKUP CODE.
BONUS_WARP:
.IF DEBUG
DINT
; SET THE STACK POINTER TO THE END OF SCRATCHPAD
MOVI STCKST,SP,L ;MOVE STACK ADDR IN SP (32 BITS)
; SET FIELD PARAMETERS
SETF 16,1,0 ;WORD SIGN EXTEND (FIELD 0)
SETF 32,1,1 ;LONG WORD (FIELD 1)
.ENDIF
MOVE @STATUS,A0
JRZ RESETME
CMPI 4,A0
JRNC RESETME
MOVE @CIRCUIT,A0
CMPI 3,A0
JRNC RESETME
MOVE @WAVE,A0
CMPI 24,A0
JRNC RESETME
;SCORE,LIVES, ETC
;OTHER CHECKS FOR RECOVERABLE GAME HERE:
;I BELIEVE THIS GAME CAN RECOVER.
;HOLD ON TO NEEDED INFORMATION
;STATUS,CIRCUIT,PLYR1 SCORE,PLYR2 SCORE,PLYR1 LIVES,PLYR2 LIVES
MOVE @P1DATA+PSCORE,A9,L
MOVE @P2DATA+PSCORE,A10,L
MOVE A9,A0
CALLR CK_BCD
JRC RESETME
MOVE A10,A0
CALLR CK_BCD
JRC RESETME
;SCORE OKAY
MOVE @P1DATA+PNEXTREP,A5,L
MOVE @P2DATA+PNEXTREP,A6,L
MOVE A5,A0
CALLR CK_BCD
JRC RESETME
MOVE A6,A0
CALLR CK_BCD
JRC RESETME
;FREE MAN SCORE OKAY
MOVE @STATUS,A7
MOVE @CIRCUIT,A8
MOVE @P1DATA+PLIVES,A11
MOVE @P2DATA+PLIVES,A12
; CLEAR SCRATCHPAD, INITIALIZE PROCESSES
CALLA CLSCRACH ;CLR SCRATCH RAM
MMTM SP,A5,A6,A7,A8,A9,A10,A11,A12
CALLA INIT_ALL ;INITIALIZE Z-UNIT
CREATE PLIST_ID,UNSTACK ;CREATE SWITCH UNSTACKER
MMFM SP,A5,A6,A7,A8,A9,A10,A11,A12
;DISPLAY BACKGROUND MODULE OF BONUS
;TURN ON BIG PLAYERS
;UPDATE GAMSTATE
;CREATE PLYR PROCS, OBJECTS
;GIVE BOTH PLAYERS SOME PRIZES, CASH.
MOVE A5,@P1DATA+PNEXTREP,L
MOVE A6,@P2DATA+PNEXTREP,L
MOVE A9,@P1DATA+PSCORE,L
MOVE A10,@P2DATA+PSCORE,L
ANDI 07,A11
ANDI 07,A12
MOVE A11,@P1DATA+PLIVES
MOVE A12,@P2DATA+PLIVES
MOVI ININTRO,A0
MOVE A0,@GAMSTATE ;PUT US BACK IN GAMEPLAY MODE
MOVK 1,A0
MOVE A0,@GAMERASE
MOVI 09380000H,A1
MOVE A1,@WORLDTLX,L
MOVE A7,@STATUS ;A7=STATUS
CMPI 2,A8
JRLO THRU
MOVK 1,A8
THRU MOVE A8,@CIRCUIT
SLL 5,A8 ;A8=CIRCUIT
ADDI WRLDY,A8
MOVE *A8,A0,L
MOVE A0,@WORLDTLY,L
ANDI 0FFFF0000H,A0
ORI 0938H,A0
ADDI 01D8H,A0
MOVE A0,@WAVEYX,L
MOVK 3,B0
MOVK 30,B1
CALLA RANGRAND
MOVE A0,@P1PZ1
MOVE A0,@P1PZ2
MOVE A0,@P1PZ3
MOVE A0,@P1CSH
MOVK 3,B0
MOVK 30,B1
CALLA RANGRAND
MOVE A0,@P2PZ1
MOVE A0,@P2PZ2
MOVE A0,@P2PZ3
MOVE A0,@P2CSH
CALLA SETDIFF ;RESET DIFFICULTY SETTINGS
MOVK 1,A0
MOVB A0,@CANT2 ;NO WALK IN UNTIL AFTER SCROLL
;TURN ON FIGURES BELOW CURRENT SCREEN
; CALLA FIGSON
CREATE BONPID,SECRET
CREATE 0,DELAYUPDT
CALLA COLRPRC ;SETUP COLOR PROCESSES
;BONUS SCREEN UP, BIG PLAYERS VISIBLE
MOVI IBUYINS,A0
MOVE A0,@P1DATA+PBUYINS,W
MOVE A0,@P2DATA+PBUYINS,W
MOVI AUDSURV,A0
CALLA AUD1 ;SURVIVE CNT
JAUC MAINLP
CK_BCD
;CHECK IF VALUE IN A0 IS BCD
;CS=NO
MMTM SP,A0,A1,A2
MOVK 8,A2
BCD_LOOP
MOVE A0,A1
SRL 28,A1
CMPI 0AH,A1
JRHS BCD_FAIL
SLL 4,A0
DSJS A2,BCD_LOOP
CLRC
JRUC BCD_EXIT
BCD_FAIL
SETC
BCD_EXIT MMFM SP,A0,A1,A2
RETS
DELAYUPDT
SLEEP 30
;TURN ON FIGURES BELOW CURRENT SCREEN
MOVK 1,A0
MOVE A0,@SOUNDSUP
CALLA FIGSON
SLEEP 1
MOVE @WORLDTLY,A0,L
ADDI 01130000H,A0
MOVE A0,@WORLDTLY,L
MOVE @CIRCUIT,A0 ;FETCH CIRCUIT
SLL 5,A0 ;TABLE ENTRY UHL OFFSET
ADDI GAMEMODS,A0
MOVE *A0,A0,L ;FETCH DATA POINTER TO WAVE MODULES
MOVE A0,@BAKMODS,L
SLEEP 1
CALLA BGND_UD1
SLEEP 3*60
MOVK 1,A0
MOVB A0,@CANT2
CREATE 0,CTP
ACTP SLEEP 1
MOVB @CANT2,A0
JRNZ ACTP
CALLA INIT_SCORE ;START ALL SCORE PROCESSES
CREATE 0,JOY_UPDATE
CREATE PCPID,PIECES
MOVK 1,A9
MOVE @STATUS,A0
MOVE A0,@SCORETYP
CMPI 2,A0
JRZ TWOP
CMPI 3,A0
JRZ BOTH
MOVK 1,A8
CREATE PLY1PID,DRAW_PLYR_TORSO ;CREATE PLAYER CHARACTER
CREATE 0,ADJUST
DIE
BOTH
MOVK 1,A8
CREATE PLY1PID,DRAW_PLYR_TORSO ;CREATE PLAYER CHARACTER
CREATE 0,ADJUST
TWOP MOVK 2,A8
CREATE PLY2PID,DRAW_PLYR_TORSO ;CREATE PLAYER CHARACTER
CREATE 0,ADJUST
DIE
ADJUST SLEEP 1
DEC A8
SLL 5,A8
MOVI PLYROBJS,A1
ADD A8,A1
MOVE *A1,A1,L
JRZ ADJUST
MOVE *A1(OPLINK),A2,L
MOVE *A2(LEG_PTR),A2,L
CLR A0
MOVE A0,*A1(OYPOS)
MOVE A0,*A2(OYPOS)
DIE
RESETME JAUC WARMSET
WRLDY .LONG 1580000H,02A40000H,02A40000H
AUDITWAVE
MOVE @CIRCUIT,A0
SLL 5,A0
ADDI CAUD,A0
MOVE *A0,A0,L
MOVE @WAVE,A1
SLL 5,A1
ADD A1,A0
MOVE *A0,A0,L
JRZ NONE
;FOUND AN AUDIT WAVE
;WE ARE ABOUT TO SCROLL TO IT!
CALLA AUD1 ;CHALK IT!
NONE RETS
CAUD .LONG CIRC1,CIRC2,CIRC3
CIRC1 .LONG 0,AUDWAVE1,AUDWAVE2,0,0,0,0,0,0,0,AUDMUTOID,0
CIRC2 .LONG 0,AUDCIRC2,0,0,0,0,0,AUDSCAR,0,0,0,0,0,0,0
.LONG 0,0,0,0,0,0
CIRC3 .LONG 0,AUDCIRC3,0,0,AUDTEMPL,0,0,AUDSNAKES,0,0,0,0,0,0,0,0,0,0
.LONG AUDTEMPL,0,0,0,0,0
;GAME INTRO SCREEN THEN ONTO FIRST GAMEPLAY WAVE (JSRP'D IN PLAY MODE ONLY)
INIT_GAME:
;INC CMOS COUNT OF GAMES STARTED!
MOVI AUDBONE,A0
CALLA AUD1 ;INC GAMES STARTED FROM ATTRACT IN CMOS
MOVI AUDSTAT,A0 ;SECRET BONUS FLAG
MOVK 1,A1
CALLA STORE_AUDIT
CLR A0
MOVE A0,@ENTERON
MOVE A0,@HALT
; CLR A0 ;CIRCUIT 3
MOVE A0,@CIRCUIT
MOVE A0,@GRATSON
CALLA SETDIFF ;SET GAME DIFFICULTY!
MOVI AMDEPID,A0
CLR A1
MOVE A1,@FROMDR,W
MOVI ININTRO,A2
MOVE A2,@GAMSTATE
NOT A1
MOVB A1,@CANT ;INDICATES ANOTHER PLYR CAN BUYIN
;UNTIL CANT=1 THEN HE CAN'T BUYIN
;UNTIL CANT=0!
MOVE A1,@DISPLAYON,W
CALLA KILALL
CALLA COLRPRC ;SETUP DEMO GAMEPLAY COLOR PROCESSES
MOVE @STATUS,A8,W ;PLAYER 1 OR 2
CLR A9 ;INDICATES START PLAYER BEHIND PODIUM
CMPI 3,A8
JRNE AXE
;BOTH PLAYERS ARE STARTING
MOVK 1,A8
MOVB A8,@CANT
CREATE PLY1PID,DRAW_PLYR_TORSO ;CREATE PLAYER CHARACTER
MOVK 2,A8
CREATE PLY2PID,DRAW_PLYR_TORSO ;CREATE PLAYER CHARACTER
MOVI P1DATA,A11
CALLA DEC_LV
MOVI P2DATA,A11
CALLA DEC_LV
JRUC AX2
AXE
CMPI 1,A8
JRNE AXC
CREATE PLY1PID,DRAW_PLYR_TORSO ;CREATE PLAYER CHARACTER
MOVI P1DATA,A11
CALLA DEC_LV
JRUC AX2
AXC
CREATE PLY2PID,DRAW_PLYR_TORSO ;CREATE PLAYER CHARACTER
MOVI P2DATA,A11
CALLA DEC_LV
AX2
JSRP PUTBGND ;SET START SCREENS WORLD COOR
MOVK 1,A0
MOVE A0,@WAVE ;FIRST WAVE AT START OF GAME
CLR A0
MOVB A0,@FREETOT
MOVB A0,@KP_TS
MOVB A0,@KP_LS
MOVB A0,@KP_RS
;CLR WPN_TYP FOR THIS PLAYER?
MOVE @STATUS,A0
CLR A9 ;INDICATES NOT WALKING IN FROM A DOOR
CMPI 3,A0
JRNE AX3
;BOTH PLAYERS ARE STARTING
MOVI P1CTRL,A8
CREATE 0,SCRIPTPLAY ;MOVE PLAYER INTO FIRST PHASE.
MOVI P2CTRL,A8
CREATE 0,SCRIPTPLAY ;MOVE PLAYER INTO FIRST PHASE.
;ZERO BOTH SCORES
MOVI P1DATA,A1
CLR A0
MOVE A0,*A1(PSCORE),L
CALLA CLRP1PZ
;SET FREE MAN POINT LEVEL
MOVE A1,A11
CALLA SET_1ST
MOVI P2DATA,A1
MOVE A0,*A1(PSCORE),L
CALLA CLRP2PZ
MOVE A1,A11
;SET FREE MAN POINT LEVEL
CALLA SET_1ST
JRUC AX4
AX3
MOVE A0,A10
MOVE A10,A0
MOVI P1DATA,A1
CMPI 1,A0
JREQ AXF
MOVI P2DATA,A1
AXF CLR A2
MOVE A2,*A1(PSCORE),L
;SET FREE MAN POINT LEVEL
MOVE A1,A11
CALLA SET_1ST
DEC A0
SLL 5,A0
ADDI CTRL,A0
MOVE *A0,A8,L
CREATE 0,SCRIPTPLAY ;MOVE PLAYER INTO FIRST PHASE.
;ZERO THIS PLAYERS SCORE
MOVK 1,A0
MOVB A0,@CANT
AX4
SLEEP 0C8H
CALLA INIT_SCORE ;START ALL SCORE PROCESSES
JSRP SET_WAVE ;WALK PLAYER OUT TO FIRST WAVE
;SCROLL DONE FOR FIRST WAVE
CALLA CLNPAL
CREATE 0,JOY_UPDATE
CREATE PCPID,PIECES
CREATE 0,UPOFF
MOVI ( 6 *32*32)+( 6 *32)+( 6 ),A1 ;CONSTANT FOR AUTOERASE
MOVE @CIRCUIT,A0
JRZ DOFA
;HAVE DIFFERENT COLOR FOR JUNGLE!
MOVI ( 6 *32*32)+( 3 *32)+( 4 ),A1 ; color 4
CMPI 1,A0
JRZ DOFA
MOVI ( 6 *32*32)+( 2 *32)+( 2 ),A1 ; color 4
DOFA MOVE A1,@IRQSKYE
DIE
CTRL .LONG P1CTRL,P2CTRL,P1CTRL
;INIT DEMO WAVE
DEMOPLAY:
JSRP WNDWON
CALLA KILBGND ;KILL OLD BACKGROUND IF ANY EXISTED
CALLA CLNPAL
CALLA SETDIFF ;SET GAME DIFFICULTY!
MOVI CLSNEUT|TYPTEXT|SUBWNDW,A0
CLR A1
NOT A1
CALLA KILOBJ
CALLA COLRPRC ;SETUP DEMO GAMEPLAY COLOR PROCESSES
MOVI NUARENAP,A0 ;FOR SCORE DIGITS!
CALLA GETFPAL
CALLA DEMOBGND ;BLOW OUT BACKGROUND
MOVI NUARENAP,A0
CALLA BLAKOUT
MOVI PRPLARN,A0
CALLA BLAKOUT
MOVE @WAVE,A0
SLL 5,A0
ADDI WVFADE,A0
MOVE *A0,A0,L
MOVK 3,A1
CALLA FADEIN
CALLA INIT_RAM ;INIT GAME RAM USAGE
CALLA INIT_SCORE
MOVK 1,A0
MOVE A0,@SCORE_FLAG ;TURN ON SCORES
CREATE LORDPID,OVERLORD
CREATE COLPID,COLLISIONS
CREATE PCPID,PIECES
CREATE ICONPID,SEND_ICON
MOVK 1,A8 ;INDICATE PLAYER 1
CLR A9 ;INDICATE START ME BEHIND PODIUM
;FOR DEMO MODE SCREENS
CREATE PLY1PID,DRAW_PLYR_TORSO ;START ALL GAME PROCESSES
CALLA BTOF
MOVE @WAVE,A8
CALLA HEXTOASC
CLR A0
MOVI 03F3FH,A6 ;COLOR CYCLE
MOVI [080H,0C4H],A9 ;Y,X POSITION
MOVE @WAVE,A8
DEC A8
;CIRCUIT 1 ONLY
MOVI NAMEBASE,A10
SLL 5,A8
ADD A8,A10
MOVE *A10,A8,L
MOVI [0,2],A10 ;Y,X SPACING BETWEEN CHARCTERS
MOVI RD15FONT,A11 ;FONT TABLE
JSRP STRCNRMO
CALLA DRAWLIVES ;DRAW PLAYERS LIVES IN P BOX
SLEEP 54*2 ;ALLOW ENOUGH TIME TO SEE WAVE NO.
CALLA ERASE_TXT
MOVK 2,A0 ;TAKE OUT AND PUT IN TURMELL FILE
MOVE A0,@EHALT
MOVE @PLYRPRCS,A7,L ;ADJUST PLYR 1 BNDRYS
CALLA DO_BND
;EVEN THOUGH DEMO ONLY SHOWS PLAYER 1 RIGHT NOW!
; MOVE @PLYRPRCS+32,A7,L ;ADJUST PLYR 2 BNDRYS
; CALLA DO_BND
;TURN ON RING AROUND PLAYER 1
MOVK 1,A9
MOVI 06D0H,A10 ;TIME RINGS ARE ON
CREATE RNGPID,RINGS ;PLACE RING AROUND PLAYER X
DIE
WVFADE .LONG 0,PAL5TAB,P5TAB,P6TAB,0,0,0,0,0,0,P5TAB
PAL5TAB:
.LONG AUTOPAL,PRPLARN,NUARENAP,0
P5TAB:
.LONG AUTOPAL,NUARENAP,0
P6TAB:
.LONG NUARENAP,RBTP5,0
ERASE_TXT:
; ERASE WAVE #
MOVI CLSNEUT|TYPTEXT|SUBTXT,A0
CLR A1
NOT A1
CALLA KILOBJ
RETS
;
; SET_WAVE - SET UP GAME PLAY WAVE
; PARAMS:
; CIRCUIT = CIRCUIT TO INITIALIZE
; WAVE = WAVE TO INITIALIZE FROM WITHIN CIRCUIT
; RETURNS:
; NOTHING AT ALL!
; MUST BE CALLED AS JSRP!
;
SET_WAVE:
CLR A1
NOT A1
MOVI ICONPID,A0 ;KILL ICON GENERATION PROCESS
CALLA KILALL
MOVI ININTRO,A0
MOVE A0,@GAMSTATE ;WE ARE NOW NOT IN PLAY MODE
MOVE @CIRCUIT,A1 ;FETCH CIRCUIT
SLL 5,A1 ;TABLE ENTRY UHL OFFSET
ADDI CRCTTAB,A1
MOVE *A1,A1,L ;FETCH DATA POINTER TO WAVE SCROLL
;VALUE OFFSETS
MOVE @WAVE,A0 ;WAVE TO SCROLL TO FROM WITHIN CRCT
SLL 5,A0 ;FOR LONG WORD LOOKUP
ADD A1,A0
MOVE *A0,A0,L ;SCREEN TEXT IMAGE OFFSET
MOVE A0,@WAVEYX,L ;RELATIVE TL SCREEN OFFSET
; CLR A1
; MOVE A1,@BSCORE ;INSURE WE ARE AT WORLD COORD.
; MOVE A1,@SCORE_FLAG,W ;TURN OFF DMA'D SCORES
;MAKE SURE MESSAGE TEXT IS GONE FROM SCOREBOARD
MOVE @WAVE,A0
MOVE @CIRCUIT,A1
JRNZ CT2
;CIRCUIT 1 CHECKS
CMPI 11,A0 ;IS IT TV END?
; CMPI 2,A0 ;IS IT TV END?
JRNZ NOBONS
SLEEP 3
JRUC SKIPALL ;BR = END OF CIRCUIT
CT2 CMPI 1,A1
JRNE CT3
;CIRCUIT 2
CMPI 19,A0 ;IS IT TV END?
JRNZ NOBONS
SLEEP 3
JRUC SKIPALL ;BR = END OF CIRCUIT
CT3
;CIRCUIT 3
CMPI 22,A0 ;IS IT TV END?
JRNZ NOBONS
SLEEP 3
JRUC SKIPALL ;BR = END OF CIRCUIT
NOBONS
CLR A1
MOVE A1,@BSCORE ;INSURE WE ARE AT WORLD COORD.
MOVE A1,@SCORE_FLAG,W ;TURN OFF DMA'D SCORES
CMPI 1,A0
JRZ NOTFER ;DO NOT TRANSFER SCORES ON INTRO
CALLA SHOWSC
CALLA DRAWLIVES
; CREATE 0,FIXMETERS
; CREATE 0,FIXMETERS2 ;FOR PLAYER 2 ALSO!
NOTFER:
; SOUND1 THECROWD
CALLA KILTXT
;
; DRAW WAVE NAME
;
CLR A0
MOVI 03F3FH,A6 ;COLOR CYCLE
MOVE @WAVEYX,A9,L
ADDI [080H,0C4H],A9 ;Y,X POSITION
MOVE @WAVE,A8
DEC A8
MOVE @CIRCUIT,A10
JRZ CY1
CMPI 1,A10
JRZ CY2
MOVI NM3BASE,A10
JRUC CYOUT
CY2 MOVI NM2BASE,A10
JRUC CYOUT
CY1 MOVI NAMEBASE,A10
CYOUT SLL 5,A8
ADD A8,A10
MOVE *A10,A8,L
MOVI [0,2],A10 ;Y,X SPACING BETWEEN CHARCTERS
MOVI RD15FONT,A11 ;FONT TABLE
MOVK 1,A0
MOVE A0,@WRLD
JSRP STRCNRMO
;
MOVK 1,A9
MOVE A9,@BSCORE ;NOW AT NEW COORDINATES (NOT WORLD)
CALLA FSCORE ;PRINT SCORES ON NEXT SCREEN
CALLA DRAWLIVES
CLR A0
MOVE A0,@WRLD,W
MOVE @WAVE,A0,W
CMPI 1,A0
JRZ NOSCRIPT
MOVE @STATUS,A0
CLR A9 ;INDICATES NOT A BUYIN WALK IN
CMPI 3,A0
JRNE AX5
;BOTH PLAYERS NEED SCRIPT
MOVI P1CTRL,A8
CREATE 0,SCRIPTPLAY ;MOVE PLAYER INTO FIRST PHASE.
MOVI P2CTRL,A8
CREATE 0,SCRIPTPLAY ;MOVE PLAYER INTO FIRST PHASE.
JRUC NOSCRIPT
AX5
DEC A0
SLL 5,A0
ADDI CTRL,A0
MOVE *A0,A8,L
CREATE 0,SCRIPTPLAY ;MOVE PLAYER INTO NEXT PHASE.
NOSCRIPT:
CREATE DRSPID,DRS ;OPEN DOORS PLEASE
CREATE LORDPID,OVERLORD
CALLA CLNPAL
CLR A1
NOT A1
MOVI SETPID,A0
CALLA KILALL ;CLAP,GALS,MC,COLOR CYCLE, ETC
MOVI MCYCPID,A0
CALLA KILALL ;KILL LAND MINE CYCLE
CALLA KILTXT
;TRANSFER PROCID OF CYCPID TO CYC2PID
CLR A1
NOT A1
OUT0 MOVI CYCPID,A0
CALLA EXISTP
JRZ OUT
MOVI CYC2PID,A2
MOVE A2,*A0(PROCID)
JRUC OUT0
OUT
MOVE @STATUS,A0
CMPI 3,A0
JRNZ AUDONCE
CALLA AUDITWAVE
AUDONCE
CALLA AUDITWAVE
;START BAK CYC FOR NEXT ARENA
MOVE @CIRCUIT,A0
JRNZ OY1
MOVE @WAVE,A0
CMPI 5,A0
JRNZ LAB0
CALLA BONSC
JRUC LAB0
BONSC
;START BONUS ARENA COLOR CYCLE
MOVI BACP,A8 ;PAL NAME
MOVI PAL1,A9 ;RAM AREA
MOVI [52,64],A10 ;BEGIN/END COLOR #
MOVK 4,A11 ;RATE IN TICKS
CREATE CYCPID,COLCYC ;COLOR CYCLER ON
RETS
OY1
CMPI 2,A0
JRNZ OY1A
;A0=SNKGP, OR SPL
MOVI SNKGP,A9
CREATE CYCPID,SPR_LIT
MOVI SPL,A9
CREATE CYCPID,SPR_LIT1
;3RD CIRCUIT BONUS CYCLE
MOVE @WAVE,A0
CMPI 19,A0
JRNC OY0O
CMPI 14,A0
JRZ OY0O
CMPI 12,A0
JRNZ LAB0
OY0O CALLA BONSC
JRUC LAB0
OY1A CMPI 1,A0
JRNZ LAB0
MOVE @WAVE,A0
CMPI 7,A0
JRZ NORBTS
CMPI 14,A0
JRZ OY0
CMPI 12,A0
JRNZ OY2
OY0 CALLA BONSC
OY2
; MOVI YBG,A9
; MOVK 1,A10
; CREATE CYCPID,BRN_LIT
; MOVI WHITE,A9
; MOVK 2,A10
; CREATE CYCPID,BRN_LIT
; MOVI ORANGE,A9
; MOVK 3,A10
; CREATE CYCPID,BRN_LIT
; MOVI GREEN,A9
; MOVK 4,A10
; CREATE CYCPID,BRN_LIT
NORBTS CALLA BAK_CYC
LAB0 JSRP SCROLL_WAVE ;SCROLL WAVE ONTO SCREEN
MOVI FIXIT,A0
CLR A1
NOT A1
CALLA KILALL
CREATE FIXIT,FIXBUG ;START SMART BOMBS EVERY 20 SECONDS
CREATE 0,CKONSCRN
*
CLR A0
MOVB A0,@CANT ;ALLOW NEW PLAYERS TO WALK IN
CALLA BTOF
CLR A1
NOT A1
MOVI CYC2PID,A0
CALLA KILALL ;CLAP,GALS,MC,COLOR CYCLE, ETC
MOVI STPPID,A0
CALLA KILALL
MOVI CLSNEUT|TYPPILE|SUBEDGE,A0
CALLA KILOBJ
CLR A0
MOVB A0,@BOUND
MOVE @CIRCUIT,A0
CMPI 1,A0
JRNZ LAB4
CALLA STOP_PLYR
MOVE @WAVE,A0
CMPI 1,A0
JRNZ LAB4
CREATE CYCPID,CMP_LIT
LAB4 MOVK 1,A0
MOVE A0,@SCORE_FLAG ;TURN BACK ON SCORES
SLEEP 60
CALLA CLRLIST
CALLA OBJSCRN ;DELETE OBJECTS NOT IN SCREEN VIEW
; CALLA OBJSCRNB ;DELETE BGND OBJECTS NOT IN SCREEN VIEW
MOVE @CIRCUIT,A0
CMPI 1,A0
JRNZ LAB3
MOVE @WAVE,A0
CMPI 1,A0
JRZ LAB2
;WILL DELETE GALS, MC ETC.
LAB3 CALLA DELPALS
;DELETE EVERYTHING OF WRONG PALETTE!
LAB2
SLEEP 30 ;ALLOW ENOUGH TIME TO SEE WAVE NO.
CALLA ERASE_TXT
MOVE @CIRCUIT,A0
JRZ CV1
CMPI 2,A0
JRNZ CV0
MOVE @WAVE,A0
CMPI 1,A0
JRNZ MUS
JRUC NOMUS
; MOVE @WAVE,A0
; CMPI 12,A0
; JRZ MUS
; CMPI 14,A0
; JRZ MUS
; CMPI 5,A0
; JRZ MUS
; CMPI 16,A0
; JRZ MUS
; CMPI 15,A0
; JRZ MUS
; CMPI 6,A0
; JRZ MUS
; CMPI 17,A0
; JRZ MUS
; CMPI 11,A0
; JRZ MUS
; CMPI 19,A0
; JRNC MUS
; CMPI 7,A0
; JRZ MUS
; JRNZ NOMUS
CV0
;CIRC 2
MOVE @WAVE,A0
CMPI 7,A0
JRZ MUS
CMPI 1,A0
JRZ MUS
JRNZ NOMUS
CV1
MOVE @WAVE,A0
CMPI 10,A0
JRZ MUS
; CMPI 1,A0
JRNZ NOMUS
MUS CALLA WAVEMUSIC
NOMUS CALLA DELSCORE ;DELETE SCORE FGND OBJECTS
MOVI INGAME,A0
MOVE A0,@GAMSTATE ;PUT US BACK IN GAMEPLAY MODE
MOVE @PLYRPRCS,A7,L ;NEW WORLD BNDS PLYR 1 AND 2
JRZ NOPE1
CALLA DO_BND
NOPE1 MOVE @PLYRPRCS+32,A7,L
JRZ NOPE2
CALLA DO_BND
NOPE2
MOVK 2,A0
MOVE A0,@EHALT
MOVE @METERP1,A0,L
MOVE @METERP2,A2,L
MOVI 0410000H,A1
MOVE A1,*A0(OYVAL),L
MOVE A1,*A2(OYVAL),L
MOVI 0220000H,A1
MOVE A1,*A0(OXVAL),L
MOVI 010F0000H,A1
MOVE A1,*A2(OXVAL),L
CALLA ADJSTWTL ;ADJUST TO THE WORLD TOP LEFT
MOVE A2,A0
CALLA ADJSTWTL ;ADJUST TO THE WORLD TOP LEFT
;KILL ICONPID HERE?
CLR A1
NOT A1
MOVI ICONPID,A0
CALLA KILALL
MOVI COLPID,A0
CALLA KILALL
CREATE ICONPID,SEND_ICON
CREATE COLPID,COLLISIONS
CLR A1
NOT A1
MOVI TV2PID,A0
CALLA KILALL
MOVI CLSNEUT|TYPTEXT|SUBTV2,A0
CALLA KILOBJ
MOVI TVPID,A0
CALLA KILALL
MOVI CLSNEUT|TYPTEXT|SUBTV,A0
CALLA KILOBJ
; MOVI DLSTM,A1
; CALLA UNGET
CALLA CLNPAL
MOVE @CIRCUIT,A0
JRNZ MON2
;CIRCUIT 1 MONITORS
MOVE @WAVE,A0
CMPI 5,A0
JRNE TAG0
MOVK 3,A0
MOVE A0,@SPEECH
;CIRCUIT 1 CASH ROOM
MOVK 2,A9 ;WITH CASH
JRUC TAG1
TAG0 CMPI 2,A0
JRNE TAG2
PPE MOVK 1,A9 ;INTRO MONITOR
CLR A1
MOVI 850,A0
CALLA RANDPER
JRC TAGSP
MOVK 1,A1
MOVI 500,A0
CALLA RANDPER
JRC TAGSP
MOVK 2,A1
TAGSP MOVE A1,@SPEECH
JRUC TAG1
TAG2 CMPI 10,A0
JRNE KPOP
TAGSP2 CLR B0
MOVK 3,B1
CALLA RANGRAND
MOVE A0,@SPEECH
MOVK 1,A9
TAG1 CREATE TVPID,DOMNTR
KPOP RETP
MON2 CMPI 1,A0
JRNE MON3
MOVE @WAVE,A0
CMPI 7,A0 ;FLAT FACE!
JRZ TAGSP2
TAG3 CMPI 9,A0
JRZ TAGSP2
TAG3A CMPI 12,A0
JRNE TAG3B
MOVK 3,A0
MOVE A0,@SPEECH
MOVK 2,A9 ;CASH
JRUC TAG1
TAG3B CMPI 14,A0
JRNE KPOP
MOVK 3,A0
MOVE A0,@SPEECH
MOVK 2,A9 ;CASH
JRUC TAG1
MON3
MOVE @WAVE,A0
CMPI 21,A0
JRZ PPE
CMPI 7,A0 ;SNAKES
JRZ TAGSP2
CMPI 9,A0
JRZ TAGSP2
CMPI 12,A0
JRNE TAG5B
MOVK 3,A0
MOVE A0,@SPEECH
MOVK 2,A9 ;CASH
JRUC TAG1
TAG5B CMPI 14,A0
JRNE KPOP
MOVK 3,A0
MOVE A0,@SPEECH
MOVK 2,A9 ;CASH
JRUC TAG1
EDG
.LONG 02EF0000H,034E0000H,EDGE
.WORD 120,DMAWNZ,CLSNEUT|TYPPILE|SUBEDGE
.LONG 0,0
CKONSCRN
SLEEP 2*60
;CHECK TO SEE IF PLAYERS ARE ON SCRN!
MOVK 2,A10
MOVE @PLYRPRCS,A1,L
CKONE PUSH A10
CMPI 0,A1
JRZ OKAY
MOVE *A1(TSO_PTR),A8,L
MOVE *A1(LEG2_PTR),A9,L
MOVI [>23-5,>1A],A2 ;BOUNDS CHECK
MOVI [>FC,>171+5],A3
CALLA OFSCRTST ;IS IT IN BOUNDS ?
JRZ OKAY
MOVE @WAVEYX,A0,L
ADDI 500000H,A0
MOVE A0,*A8(OYVAL),L
MOVE A0,*A9(OYVAL),L
SLL 16,A0
ADDI 800000H,A0
MOVE A0,*A8(OXVAL),L
MOVE A0,*A9(OXVAL),L
OKAY PULL A10
MOVE @PLYRPRCS+32,A1,L
DSJ A10,CKONE
DIE
STOP_PLYR
;BASED ON WAVE #, CREATE A PROCESS FOR EACH PLAYER THAT WILL STOP
;HIS X/Y MOVEMENT IF WALKING INTO PIT/WALL
MOVE @WAVE,A0
CMPI 1,A0
JRNE STP0
;TURN ON EDGE
MOVI EDG,A14
CALLR DO_ALL_STUFF
MOVE A0,A8
STP0
MOVE @WAVE,A0
SLL 3,A0
ADDI TYPTBL,A0
MOVB *A0,A9
MOVB A9,@BOUND
JRZ STPEX
CLR A8
CREATE STPPID,STOPME
MOVI 32,A8
CREATE STPPID,STOPME
STPEX RETS
DO_ALL_STUFF
CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
CALLA STFOBJ ;STUFF OBJECT DATA
MOVE A13,*A0(OPLINK),L
CALLA INSOBJ ;INSERT OBJECT INTO LIST
RETS
TYPTBL .BYTE 0,1,3,0,0,0,0,0,0,0,0,2,0,0,0,0,0,3,0,0
.EVEN
STX .LONG [0,258],[150,400],[150,0EBH]
STOPME
;A8=0 OR 32
;A9=1,2,3
DEC A9
SLL 5,A9
MOVI STX,A0
ADD A9,A0
MOVE *A0,A10,L
MOVX A10,A9
SLL 16,A9
STPTOP
SLEEP 1
;A9=RIGHT SIDE PIT X TO CHECK AGAINST
;A10=LEFT SIDE PIT X
MOVI PLYRPRCS,A0,L
ADD A8,A0
MOVE *A0,A0,L
JRZ STPTOP
MOVE *A0(DEAD),A4
JRNZ STPTOP
MOVE *A0(LEG_PTR),A4,L
MOVE *A4(OYVAL),A2,L
MOVE @WORLDTLY,A1,L
SUB A1,A2
CMPI [167,0],A2
JRC STPTOP2
MOVE *A4(OXVAL),A0,L
MOVE @WORLDTLX,A1,L
SUB A1,A0
CMP A10,A0
JRC AHIT
CMP A9,A0
JRNC AHIT
STPTOP2
;VALID X/Y COOR
MOVE *A4(OXVAL),A11,L
MOVE *A4(OYVAL),A0,L
MOVI KPA0,A1
ADD A8,A1
MOVE A0,*A1,L
JRUC STPTOP
AHIT
MOVE A11,*A4(OXVAL),L
MOVI KPA0,A1
ADD A8,A1
MOVE *A1,A0,L
MOVE A0,*A4(OYVAL),L
MOVE *A4(OPLINK),A1,L
MOVE *A1(TSO_PTR),A1,L
CLR A0
MOVE A0,*A4(OXVEL),L
MOVE A0,*A4(OYVEL),L
MOVE A0,*A1(OXVEL),L
MOVE A0,*A1(OYVEL),L
MOVE A1,A0
PUSH A8
MOVE A4,A8
CALLA GETANIXY
MOVE *A8(OFLAGS),A4,W
ORI M_NOCOLL,A4
CALLA GANISAG
PULL A8
; MOVE A0,A8
JRUC STPTOP
BAK_CYC
CREATE 0,BAK2_CYC
RETS
BAK2_CYC
SLEEP 43 ;40
;CHECK WHICH ARENA IS ON AND COLOR CYCLE CORRECT PALETTE
MOVE @WAVE,A0
CMPI 11,A0
JRNZ BK00
MOVI RBTP4,A9
CREATE CYCPID,STATIC_LIT
JRUC BK2
BK00 CMPI 5,A0
JRZ BK0
CMPI 6,A0
JRNE BK1
;TURN ON STATIC IN RBTP
BK0
MOVI RBTP5,A9
CREATE CYCPID,STATIC_LIT
MOVI RBTP,A9
CREATE CYCPID,STATIC_LIT
JRUC BK2
BK1 CMPI 16,A0
JREQ BK0
CMPI 7,A0
JRNE BK2
;IN BLUE PAL
MOVI RBTP5,A9
CREATE CYCPID,STATIC_LIT
BK2 MOVE @WAVE,A0
SLL 5,A0
ADDI CYCTBL,A0
MOVE *A0,A9,L
CREATE CYCPID,HOSPG_LIT
CREATE CYCPID,HOSPR_LIT
DIE
CYCTBL .LONG 0,RBTP,RBTP,RBTP5,RBTP3,RBTP,RBTP,RBTP5,RBTP5,RBTP2
.LONG 0,RBTP4,RBTP5,RBTP5,RBTP4,RBTP2,RBTP,RBTP,RBTP5,RBTP
KILTXT:
MOVI CLSNEUT|TYPTEXT|SUBP1TXT,A0
CLR A1
NOT A1
CALLA KILOBJ
MOVI CLSNEUT|TYPTEXT|SUBP2TXT,A0
CALLA KILOBJ
RETS
SHOWSC
;SHOW SCORE AND METER BEFORE SCROLL
CLR A1
MOVE A1,@BSCORE ;INSURE WE ARE AT WORLD COORD.
MOVE A1,@SCORE_FLAG,W ;TURN OFF DMA'D SCORES
MOVE @METERP1,A0,L
MOVE @P1MTRY,A1,W
MOVE A1,*A0(OYPOS),W
MOVE @METERP2,A0,L
MOVE @P2MTRY,A1,W
MOVE A1,*A0(OYPOS),W
CALLA FSCORE ;AND SET THEM AS FGND OBJECTS
RETS
SKIPALL:
MOVK 1,A0
MOVB A0,@CANT2
CALLA KILTXT ;GET RID OF TEXT MESSAGES
CALLA SHOWSC
MOVI 9,A1
MOVB A1,@KP_RS
; CREATE DRSPID,DRS ;OPEN DOORS LEADING TO TV SET
;WALKING INTO TVSET ARENA!!!!
MOVE @STATUS,A0
CLR A9 ;NOT A BUYIN
CMPI 3,A0
JRNE AX6
;BOTH PLAYERS RUNNING IN TO TVSET AREA
MOVI P1CTRL,A8
CREATE 0,SCRIPTPLAY ;MOVE PLAYER INTO FIRST PHASE.
MOVI P2CTRL,A8
CREATE 0,SCRIPTPLAY ;MOVE PLAYER INTO FIRST PHASE.
JRUC AX7
AX6
DEC A0
SLL 5,A0
ADDI CTRL,A0
MOVE *A0,A8,L
CREATE 0,SCRIPTPLAY ;MOVE PLAYER ONTO SET
AX7
SLEEP 1*60
;TURN ON PLAYERS AND TEXT
; MOVI CLEANIT,A1
; CALLA UNGET
CALLA CLNPAL
CALLA FIGSON
MOVI [264H,0],A10 ;CIRCUIT 1
MOVE @CIRCUIT,A0
JRZ SCRLU
MOVI [3B0H,0],A10 ;FOR CIRCUIT 2
; CMPI 1,A0
; JRZ SCRLU
; MOVI [648H,0],A10 ;CIRCUIT 3
SCRLU
CALLA BGND_UD1
MOVE @WORLDTLY,A7,L ;WORLD TOP Y
ADDI SCRLYSPD2,A7 ;CHECK FOR OVERRUN WRLDCOOR-PIX VEL
MOVE A7,@WORLDTLY,L
CMP A10,A7
JRGE T69
SLOOP 1,SCRLU
T69
CREATE BONPID,FLR2_LIT
CREATE BONPID,P1_LIT
CREATE BONPID,P2_LIT
;FADE AUTOPAL
MOVI PALB,A0
MOVK 2,A1
CALLA FADEOUT
CTP SLEEP 1
MOVB @CANT2,A0
JRNZ CTP
; MOVK 1,A0
; MOVB A0,@CANT
;FADE DOWN BONUS SCREEN ITEMS
;CLEAR OUT BACKGROUND BLOCKS
;CLEAR BAKBITS?
;RESET WORLD X/Y TO CIRCUIT 2 GAMESHOW SET
;GOTO CODE THAT BRINGS OUT OVERHEAD LIGHTS, AND FADES IN TVSET
;SET CIRCUIT=2, WAVE=1
;KILL TEXT
CLR A1
NOT A1
MOVI BONPID,A0
CALLA KILALL
MOVI DG1PID,A0
CALLA KILALL
SLEEP 2
MOVI CLSNEUT|TYPTEXT|SUBTXT,A0
CLR A1
NOT A1
CALLA KILOBJ
;KILL NUMBERS ALSO!
MOVK 1,A0
CALLA KILOBJ
MOVK 2,A0
CALLA KILOBJ
MOVI 41H,A0
CALLA KILOBJ
MOVI 42H,A0
CALLA KILOBJ
MOVI 40H,A0
CALLA KILOBJ
MOVI 21,A0
CALLA KILOBJ
MOVI 20,A0
CALLA KILOBJ
MOVE @STATUS,A0
CMPI 3,A0
JRZ ALL3
CMPI 1,A0
JRZ ALL1
MOVI PALBNS2,A0
JRUC ALO
ALL1 MOVI PALBNS1,A0
JRUC ALO
ALL3
MOVI PALBNS,A0
ALO
MOVK 1,A1
CALLA FADEOUT ;FADE OUT TV SET SCREEN
SLEEP 40 ;50 ;60
CALLA KILBGND
SLEEP 2
CALLA CLRBPAL
CALLA CLNPAL
MOVI CLSNEUT|TYPNEUT|SUBCHNK,A0
CLR A1
NOT A1
CALLA KILOBJ
;EXTRA TEXT?
MOVK 1,A0
CALLA KILOBJ
;NEXT CIRCUIT ROUTINE
CLR A1
MOVE A1,@FROMDR,W
NOT A1
; MOVB A1,@CANT ;INDICATES ANOTHER PLYR CAN BUYIN
;UNTIL CANT=1 THEN HE CAN'T BUYIN
;UNTIL CANT=0!
MOVE @PLYRPRCS,A0,L ;RAISE HELPER OVER PODIUM
JRZ NXP
MOVE *A0(LSRPTR),A1,L
JRZ NXP
MOVI 260,A2
MOVE A2,*A1(OZPOS)
NXP
MOVE @PLYRPRCS+32,A0,L
JRZ NXP2
MOVE *A0(LSRPTR),A1,L
JRZ NXP2
MOVI 260,A2
MOVE A2,*A1(OZPOS)
NXP2
MOVE @CIRCUIT,A0
INC A0
MOVE A0,@CIRCUIT
CMPI 3,A0
JRNZ F0
CLR A0
MOVE A0,@CIRCUIT
MOVI AUDEND,A0 ;SUCKER WILL NOT CONTINUE
CALLA AUD1 ;CHALK IT!
MOVE @STATUS,A0
CMPI 3,A0
JRNZ NO2
MOVI AUDEND,A0 ;SUCKER WILL NOT CONTINUE
CALLA AUD1 ;CHALK IT!
NO2
;KILL ALL OBJECTS
CLR A1
NOT A1
MOVI CYCPID,A0
CALLA KILALL ;CLAP,GALS,MC,COLOR CYCLE, ETC
MOVI PLY2PID,A0
CALLA KILALL
MOVI PLY1PID,A0
CALLA KILALL
MOVI PCPID,A0
CALLA KILALL
MOVI MCYCPID,A0
CALLA KILALL ;KILL LAND MINE CYCLE
CALLA OINIT
JSRP WNDWON
JSRP GRATS
MOVK 1,A0
MOVE A0,@GRATSON
SLEEP 1
JSRP WNDWON
CREATE GMEOVPID,GAMEOVER
SLEEP 1000
DIE
F0
CREATE 0,PLACEP
CLR A0
;POSSIBLY MOVK 1,A0?
MOVB A0,@FREETOT
CALLA CLRP2PZ
CALLA CLRP1PZ
JSRP PUTBGND ;SET START SCREENS WORLD COOR
MOVK 1,A0
MOVE A0,@WAVE ;FIRST WAVE AT START OF GAME
CLR A0
MOVB A0,@KP_TS
MOVB A0,@KP_LS
MOVB A0,@KP_RS
;CLR WPN_TYP FOR THIS PLAYER?
SLEEP 2*60
MOVE @STATUS,A0
CLR A9 ;INDICATES NOT WALKING IN FROM A DOOR
CMPI 3,A0
JRNE CAX3
;BOTH PLAYERS ARE STARTING
MOVI P1CTRL,A8
CREATE 0,SCRIPTPLAY ;MOVE PLAYER INTO FIRST PHASE.
MOVI P2CTRL,A8
CREATE 0,SCRIPTPLAY ;MOVE PLAYER INTO FIRST PHASE.
JRUC CAX4
CAX3
MOVE A0,A10
DEC A0
SLL 5,A0
ADDI CTRL,A0
MOVE *A0,A8,L
CREATE 0,SCRIPTPLAY ;MOVE PLAYER INTO FIRST PHASE.
CAX4
SLEEP 040H
MOVE @PLYRPRCS,A0,L
JRZ NXP3
MOVE *A0(LSRPTR),A1,L
JRZ NXP3
MOVI 171,A2
MOVE A2,*A1(OZPOS)
NXP3
MOVE @PLYRPRCS+32,A0,L
JRZ NXP4
MOVE *A0(LSRPTR),A1,L
JRZ NXP4
MOVI 171,A2
MOVE A2,*A1(OZPOS)
NXP4
SLEEP 088H
;CHANGE BACKGROUND COLOR FOR CIRCUIT 2
JSRP SET_WAVE ;WALK PLAYER OUT TO FIRST WAVE
MOVI ( 6 *32*32)+( 3 *32)+( 4 ),A1 ; color 4
; MOVE @CIRCUIT,A0
; JRNZ FIFI
;;WRAP COLOR AGAIN
; MOVI ( 6 *32*32)+( 6 *32)+( 6 ),A1 ; color 4
;FIFI
MOVE A1,@IRQSKYE
CREATE 0,UPOFF
DIE
PLACEP
SLEEP 45
;PLACE PLAYERS BEHIND THEIR PODIUM
MOVE @PLYROBJS,A0,L
JRZ TWO
MOVE *A0(OPLINK),A2,L
MOVI 08002H,A3
MOVE A3,*A2(P_DIR)
MOVE *A2(LEG_PTR),A2,L
MOVI 620000H,A1
MOVE A1,*A0(OXVAL),L
MOVE A1,*A2(OXVAL),L
MOVI 2E80000H,A1
MOVE @CIRCUIT,A3
ADDK 1,A3
MOVE A1,*A0(OYVAL),L
MOVE A1,*A2(OYVAL),L
TWO MOVE @PLYROBJS+32,A0,L
JRZ THR
MOVE *A0(OPLINK),A2,L
MOVI 08002H,A3
MOVE A3,*A2(P_DIR)
MOVE *A2(LEG_PTR),A2,L
MOVI 12B0000H,A1
MOVE A1,*A0(OXVAL),L
MOVE A1,*A2(OXVAL),L
MOVI 2E80000H,A1
MOVE @CIRCUIT,A3
ADDK 1,A3
MOVE A1,*A0(OYVAL),L
MOVE A1,*A2(OYVAL),L
THR
DIE
;UNGET
;LIST IN A1, TERMINATED BY A 0
;GET RID OF UNEEDED PALS!
; MOVE *A1+,A0,L
; JRZ UNOUT
; CALLA FINDPAL
; JRZ SON1
; CALLA UNGETPAL
;SON1
; JRUC UNGET
;UNOUT RETS
;DLSTM .LONG MNTR,MAPP,FIGCOL,PAL2TV,0
;DLST .LONG MUTT,RP,BP,PURPTK,TKCOL1,GRNTP,GRNTG,DUXPAL,GALP2,GALP
; .LONG 0
;CLEANIT .LONG REDYLW,MCP,SPL
;DLSTZ .LONG MUTT,RP,BP,PURPTK,TKCOL1,GRNTP,DUXPAL,GALP2,GALP
; .LONG YBG,GREEN,FCE2,WHITE,ORANGE,TKCOL1,GRNTG,RP
; .LONG NUORB,FCE1,FCE3,BLUE,0
;DLST1 .LONG BGPLYR1P,BGPLYR2P,0
;DLST2 .LONG FIGCOL,MNTR,LGHTFX,0
;CLEAN .LONG PALSMSH,PALTV,PAL2TV,0
;DLST0 .LONG FBIP,HSC,WTP1,WTP2,WTP3,smlg,0
;ANIMATE FACES
;UPDATE TEXT FOR ANY PLAYERS NOT IN GAME
;RACK UP BONUS POINTS FOR BOTH PLAYERS SIMULTANEOUSLY
;FADE OUT
;FADE IN TVSET WITH PLAYERS BEHIND PODIUMS
;SCROLL TO NEXT CIRCUIT
;
PALB:
.LONG AUTOPAL,NUARENAP,0
PALBNS:
.LONG BONUSP,BGPLYR1P,BGPLYR2P,0
PALBNS1:
.LONG BONUSP,BGPLYR1P,0
PALBNS2:
.LONG BONUSP,BGPLYR2P,0
KEYWARP .STRING "WARP #3 ACTIVATED=SECRET KEY"
.BYTE 0
.EVEN
JOIN .STRING "CONTESTANT"
.BYTE 0
.EVEN
JN2 .STRING "NEEDED!"
.BYTE 0
.EVEN
JN3 .STRING "JOIN IN!"
.BYTE 0
.EVEN
FIGURES
;USED FOR INITALS SCREEN
MOVK 1,A0
MOVE A0,@ENTERON
;EUGENE
;CHECK PLYR 1 SCORE AND PLYR 2 SCORE HERE
;IF PLYR 1 GETS TO ENTER HIS INITIALS, A0=1, IF PLYR 2, A0=2, IF BOTH A0=3
CALLA ISHSTD
JREQ YAOUT
MOVE A0,B0
CALLA INITTIM
SRL 1,B0
JRNC YA2
CREATE BONPID,P1_LIT
MOVI LTTRP,A8 ;PAL NAME
MOVI PAL1,A9 ;RAM AREA
MOVI [4,12],A10 ;BEGIN/END COLOR #
MOVK 3,A11 ;RATE IN TICKS
CREATE CYCPID,COLCYC ;COLOR CYCLER ON
CREATE BONPID,FIG1
CREATE BONPID,GETINIT1 ;GET PLAYER 1 INITS
YA2
SRL 1,B0
JRNC YAOUT
MOVI LTRP2,A8 ;PAL NAME
MOVI PAL2,A9 ;RAM AREA
MOVI [4,12],A10 ;BEGIN/END COLOR #
MOVK 3,A11 ;RATE IN TICKS
CREATE CYCPID,COLCYC ;COLOR CYCLER ON
CREATE BONPID,FIG2
CREATE BONPID,P2_LIT
CREATE BONPID,GETINIT2 ;GET PLAYER 2 INITS
YAOUT
RETS
FIGSON
;CHECK WHICH PLAYERS ARE PLAYING
CLR A1
NOT A1
MOVI CYCPID,A0
CALLA KILALL ;CLAP,GALS,MC,COLOR CYCLE, ETC
MOVE @STATUS,A0
CMPI 3,A0
JRNE ABB
;BOTH PLAYERS RUNNING IN TO TVSET AREA
CREATE BONPID,FIG1
CREATE BONPID,FIG2
MOVI P1BON,A9
CREATE BON1PID,RACKUP
MOVI P2BON,A9
CREATE BON1PID,RACKUP
RETS
ABB CMPI 1,A0
JREQ ABC
CREATE BONPID,FIG2
CREATE BONPID,TX1
MOVI P2BON,A9
CREATE BON1PID,RACKUP
RETS
ABC CREATE BONPID,FIG1
CREATE BONPID,TX0
MOVI P1BON,A9
CREATE BON1PID,RACKUP
RETS
FIG1
MOVE A13,A10
CREATE BONPID,EYES1
CREATE BONPID,MOUTH1
MOVK 6,A9
MOVE @ENTERON,A1
JRZ TP
MOVK 11,A9
TP MOVE A9,A0
SLL 5,A0
MOVE @ENTERON,A1
JRZ REGA
ADDI ON1B,A0
JRUC REGA1
REGA ADDI ON1,A0
REGA1 CALLA DOIMG
CMPI 7,A9
JRNC TOHI
ADDI CHST1L,A0
MOVE A8,*A0,L
TOHI DEC A9
JRNZ TP
;OBJECTS ALL ON
MOVE *A13(CHST1L),A8,L
F1S
CALLA LINE_UP1
SLEEP 5
DIE
MOUTH1
SLEEP 45
;A10=FIG1 PROCESS PNTR
MOVE *A10(SM1),A8,L
MTHIN
MOVI SMILES,A9
MOVE A9,A10
MOVE @ENTERON,A0
JRZ AMTH1
MOVI SMILESE,A9
MOVE A9,A10
AMTH1
MOVK 1,A1
JSRP FRANIM
SLEEP 150
MOVE A10,A9
JRUC AMTH1
MOUTH2
SLEEP 4*60
;A10=FIG1 PROCESS PNTR
MOVE *A10(SM2),A8,L
JRUC MTHIN
EYES1 SLEEP 70
MOVE *A10(EY1),A8,L
EYS MOVI EYES,A9
MOVK 1,A1
JSRP FRANIM
JRUC EYS
EYES2 SLEEP 150
MOVE *A10(EY2),A8,L
JRUC EYS
RACKUP
;SHOW RUNNING TOTAL AT BOTTOM OF SCREEN
;BASED ON CIRCUIT, DISPLAY PRIZE 1 TEXT
;RACKUP PRIZES
;SYNC WITH OTHER PLAYER
;GO ONTO PRIZES 2,3
;DO CASH BONUS
;SCROLL UP SCORES
;DIE
;OTHER PROCESS TAKES CONTROL AND FADES OUT SCREEN
MOVB @P1PZ1,A0
ADDI 10,A0
MOVB A0,@P1PZ1
MOVB @P1PZ2,A0
ADDI 10,A0
MOVB A0,@P1PZ2
MOVB @P1PZ3,A0
ADDI 10,A0
MOVB A0,@P1PZ3
MOVB @P2PZ1,A0
ADDI 10,A0
MOVB A0,@P2PZ1
MOVB @P2PZ2,A0
ADDI 10,A0
MOVB A0,@P2PZ2
MOVB @P2PZ3,A0
ADDI 10,A0
MOVB A0,@P2PZ3
MOVB @P1CSH,A0
ADDI 10,A0
MOVB A0,@P1CSH
MOVB @P2CSH,A0
ADDI 10,A0
MOVB A0,@P2CSH
;A9=P1/P2BON
; MOVI CROWD1,A0
; CALLA ONESND
SLEEP 120
;TURN OFF MUSIC
; MOVI MUSICOFF,A0
; CALLA ONESND
; SLEEP 10
CLR A1
MOVB A1,*A13(IWAIT)
CLR A10
CMPI P1BON,A9
JREQ R1
MOVK 1,A10
R1
;A10=0 OR 1 FOR WHICH PLAYER
CLR A0
MOVE A0,*A9,L ;ZERO BONUS SCORE CNTR
;TURN ON BONUS SCORE BEHIND PLAYERS HEAD
CREATE DG1PID,DIGIT ;DRAW NEW UPDATED STRING
CREATE DG1PID,BCDASC ;DRAW NEW TOTAL SCORE
CLR A0
MOVB A0,*A13(ITEM)
CREATE BONPID,WORDB ;WORD 'BONUS'
R_TOP
PUSH A10
MOVE A13,A10
CREATE BONPID,BWORD ;BONUS WORD
PULL A10
;
;RACK UP PRIZES
;
MOVI 27,A0
MOVB A0,*A13(PZCNTR) ;USED FOR SPACING DURING BONUS RACK UP
MOVE A10,A0
SLL 5,A0
ADDI PZ12,A0
MOVE *A0,A1,L
;A1=P1PZ1 OR P2PZ1 RAM LIST
MOVB *A13(ITEM),A0
CMPI 3,A0
JRNE SAS
SLL 3,A0
ADD A0,A1
MOVE *A1,A8
ANDI 03FFH,A8
JRUC SAS2
SAS
SLL 3,A0
ADD A0,A1
MOVB *A1,A8
ANDI 0FFH,A8
;A2=TOTAL FOR PRIZE 1
SAS2
JRZ DNONE
CLR A0
MOVE A0,@SOUNDSUP
MOVI BONS1,A0
CALLA ONESND
MOVE @STATUS,A0
CMPI 3,A0
JRNZ ONEP
;WILL THIS PLAYER SHUT DWN SND OR THE OTHER PLYR?
CLR A0
MOVB A0,*A13(SHUT)
;ASSUME THE OTHER GUY WILL
MOVE A10,A0
SLL 5,A0
ADDI PZ12,A0
MOVE *A0,A1,L
;A1=P1PZ1 OR P2PZ1 RAM LIST
MOVB *A13(ITEM),A0
CMPI 3,A0
JRNZ TF1
;CASH
SLL 3,A0
ADD A0,A1
MOVE *A1,A2
ANDI 03FFH,A2
JRUC TFOUT
TF1
SLL 3,A0
ADD A0,A1
MOVB *A1,A2
ANDI 0FFH,A2
TFOUT
;A2=TOTAL FOR ME
;NOW GET TOTAL FOR OTHER PLAYER
MOVE A10,A0
XORI 1,A0
;A10=0 OR 1
SLL 5,A0
ADDI PZ12,A0
MOVE *A0,A1,L
;A1=P1PZ1 OR P2PZ1 RAM LIST
MOVB *A13(ITEM),A0
CMPI 3,A0
JRNZ TF2
;CASH
SLL 3,A0
ADD A0,A1
MOVE *A1,A3
ANDI 03FFH,A3
JRUC TFOUT1
TF2
SLL 3,A0
ADD A0,A1
MOVB *A1,A3
ANDI 0FFH,A3
TFOUT1
;A3=TOTAL FOR OTHER GUY
CMP A2,A3
JREQ TIE1
JRNC DRW
JRUC ONEP
TIE1 MOVK 2,A0
MOVB A0,*A13(SHUT)
JRUC DRW
;I HAVE MORE, I WILL SHUT DWN SND
ONEP
MOVK 1,A0 ;THIS GUY WILL SHUT DWN SNDS
MOVB A0,*A13(SHUT)
DRW
PUSH A10
MOVE A13,A10
CREATE PICPID,DRWPIC
CREATE BONPID,ADDIT
PULL A10
MOVB *A13(ITEM),A0
CMPI 3,A0
JRNZ SAS3
MOVI SCASH,A0 ;GET CASH PICKUP SND
CALLA ONESND
SLEEP 2
JRUC SAS4
SAS3
SLEEP 2 ;6 ;3
SAS4 DSJ A8,DRW
;ONLY OFF IS ONE PLAYER
;OR 2ND PLAYER FINISHING RACKUP FOR THIS ITEM!
MOVE @STATUS,A0
CMPI 3,A0
JRZ SAS5
;RAISE SINGLE GAME PLYR ARM
XORI 1,A10
CREATE 0,RAISE
XORI 1,A10
SAS5
MOVB *A13(SHUT),A0 ;0=OTHER PLAYER WILL SHUT DWN SND
CMPI 2,A0
JRZ SASTIE
CMPI 0,A0
JRNZ NOPS
; MOVE @STATUS,A0
; CMPI 3,A0
; JRNZ SKPS
;TELL OTHER PLAYER TO RAISE ARMS!
CREATE 0,RAISE
JRUC SKPS
NOPS MOVI YAMOFF,A0
CALLA ONESND
SLEEP 2
MOVI BONS2,A0 ;DING SND AT END
CALLA ONESND
SKPS
SLEEP 1
;SPEECH YAHOO HERE?
SLEEP 40
MOVI CROWD1,A0
CALLA ONESND
SLEEP 80
;DELETE FIRST ITEM
SASX MOVE A10,A0
ORI 0AH,A0
CLR A1
NOT A1
CALLA EXISTOBJ
JRZ DN
CALLA DELOBJ
SLEEP 3 ;4
;DELETE ITEM SND
JRUC SASX
SASTIE
;TELL OTHER PLAYER TO RAISE ARMS!
CREATE 0,RAISE
JRUC NOPS
DNONE SLEEP 120 ;NO PRIZES
DN
;CHECK TO SEE IF WE NEED TO WAIT FOR THE OTHER PLAYER!
CLR A1
NOT A1
MOVI BON1PID,A0
CALLA EXISTP
JRZ NO
;YES, FOUND OTHER PLAYER!
MOVE A0,A8
MOVB *A8(IWAIT),A1
JRNZ LETSGO
MOVK 1,A1
MOVB A1,*A13(IWAIT)
WLP MOVB *A13(IWAIT),A1
JRZ LETSGO
SLEEP 1
JRUC WLP
LETSGO
MOVI YAMOFF,A0
CALLA ONESND
CLR A1
MOVB A1,*A8(IWAIT)
MOVB A1,*A13(IWAIT)
NO
;
;KILL OFF WORD ABOVE BONUS
MOVE A10,A0
ORI 20,A0
CLR A1
NOT A1
CALLA KILOBJ
MOVB *A13(ITEM),A0
INC A0
MOVB A0,*A13(ITEM)
CMPI 4,A0
JREQ DN2
;
JRUC R_TOP
DN2
PUSH A10
MOVE A13,A10
CREATE BONPID,BWORD ;BONUS WORD
PULL A10
;WHICH PLAYER HAS LARGER BONUS?
;START THAT PLAYER RAISING ARMS!
;IF ONE PLAYER GAME, RAISE THAT PLAYERS ARMS
MOVE @STATUS,A0
CMPI 1,A0
JRNZ FAG1
JRZ FAG0A
VAG0
;FROWN ON PLYR 2
CALLA PISS2
FAG0A
;RAISE ARMS ON PLYR 1
CLR A1
NOT A1
MOVI 0DH,A0
CALLA EXISTOBJ
; JRZ DIOUT
MOVE A0,A8
CREATE 0,ARML
CLR A1
NOT A1
MOVI 0EH,A0
CALLA EXISTOBJ
; JRZ DIOUT
MOVE A0,A8
CREATE 0,ARMR
JRUC DN2Z
FAG1
CMPI 2,A0
JRNZ FAG2
JRZ FAG1A
VAG1
;FROWN PLYR 1
CALLA PISS1
FAG1A
;RAISE ARMS ON PLYR 2
CLR A1
NOT A1
MOVI 0FH,A0
CALLA EXISTOBJ
; JRZ DIOUT
MOVE A0,A8
CREATE 0,ARML
CLR A1
NOT A1
MOVI 010H,A0
CALLA EXISTOBJ
; JRZ DIOUT
MOVE A0,A8
CREATE 0,ARMR
JRUC DN2Z
FAG2
MOVE @P1BON,A0,L
MOVE @P2BON,A1,L
CMP A0,A1
JRC VAG0
JRNC VAG1
DN2Z
;
MOVI YAMOFF,A0
CALLA ONESND
SLEEP 2
MOVI CROWD1,A0
CALLA ONESND
;DIOUT
SLEEP 4*60
;FADE OUT SCREEN
;FADE IN TVSET SCREEN
;
CLR A0
MOVB A0,@CANT2
DIE
RAISE2
;A10=0 OR 1, XOR FOR PLYR TO RAISE ARMS
XORI 1,A10
JRZ P1RSA
;RAISE PLYR 2 ARMS
;PISS OFF PLYR 1
CALLA RAS1
DIE
P1RSA
CALLA RAS2
DIE
RAS2
CLR A1
NOT A1
MOVI 0DH,A0
CALLA EXISTOBJ
; JRZ $
MOVE A0,A8
CREATE 0,ARML
RETS
RAS1
CLR A1
NOT A1
MOVI 0FH,A0
CALLA EXISTOBJ
; JRZ $
MOVE A0,A8
CREATE 0,ARML
RETS
RAISE
;A10=0 OR 1, XOR FOR PLYR TO RAISE ARMS
XORI 1,A10
JRZ P1RS
;RAISE PLYR 2 ARMS
;PISS OFF PLYR 1
CALLA RAS1
CALLA PISS1
DIE
P1RS
CALLA RAS2
;PLYR 2 PISS OFF
;DO EYES AND MOUTH
CALLA PISS2
DIE
PISS2
CREATE 0,PEED2
CLR A1
NOT A1
MOVI 0FH,A0
CALLA EXISTOBJ
; JRZ $
MOVE A0,A8
CREATE 0,ARMLP
CLR A1
NOT A1
MOVI 010H,A0
CALLA EXISTOBJ
; JRZ $
MOVE A0,A8
CREATE 0,ARMRP
RETS
PISS1
;PLYR 1 PISS OFF
;DO EYES AND MOUTH
;SHOW PISSED FACE
CREATE 0,PEED1
CLR A1
NOT A1
MOVI 0DH,A0
CALLA EXISTOBJ
; JRZ $
MOVE A0,A8
CREATE 0,ARMLP
CLR A1
NOT A1
MOVI 0EH,A0
CALLA EXISTOBJ
; JRZ $
MOVE A0,A8
CREATE 0,ARMRP
RETS
PEED1
;TURN ON PISSED OFF HEAD PLYR 1
;ALIGN WITH BODY
;SLEEP
;KILL IT
;DIE
MOVI HEDS1,A14
CALLR DO_ALL_STUFF
; CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
; CALLA STFOBJ ;STUFF OBJECT DATA
; CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A9
MOVI 0DH,A0
CLR A1
NOT A1
CALLA EXISTOBJ
; JRZ $
MOVE A0,A8
CALLA GETANIXY
MOVE A9,A0
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
; SUBI 0010000H,A3 ;SUB 1 FROM X
; SUBI 0010000H,A2 ;SUB 1 FROM Y
CALLA GANISAG
;ALIGN
SLEEP 220
MOVE A9,A0
CALLA DELOBJ
DIE
PEED2
;TURN ON PISSED OFF HEAD
;SLEEP
;KILL IT
;DIE
MOVI HEDS1,A14
CALLR DO_ALL_STUFF
; CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
; CALLA STFOBJ ;STUFF OBJECT DATA
; CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A9
;CHANGE TO BLACK GUY PAL
MOVI BGPLYR2P,A0
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
MOVE A0,*A9(OPAL),W ;STORE THE NEW PALETTE
MOVI 0FH,A0
CLR A1
NOT A1
CALLA EXISTOBJ
; JRZ $
MOVE A0,A8
CALLA GETANIXY
MOVE A9,A0
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
; SUBI 0010000H,A3 ;SUB 1 FROM X
; SUBI 0010000H,A2 ;SUB 1 FROM Y
CALLA GANISAG
;ALIGN
SLEEP 220
MOVE A9,A0
CALLA DELOBJ
DIE
ARML
MOVI ARMLUP,A9
JRUC ARMCONT
ARMCONT MOVI 7FE0H,A0
MOVE A0,*A8(OZPOS),W
MOVK 1,A1
JSRP FRANIM
DIE
ARMR
MOVI ARMRUP,A9
JRUC ARMCONT
ARMLP
MOVI ARMLP0,A9
JRUC ARMCONT
ARMRP
MOVI ARMRP0,A9
JRUC ARMCONT
ARMLP0 .LONG ARMUP5
.WORD 220
.LONG BPLYRTRS
.WORD 4
.LONG 0
ARMRP0 .LONG ARMUP5
.WORD FLIPBITS|220,M_FLIPH
.LONG BPLYRTRS
.WORD 4
.LONG 0
ARMRUP
.LONG ARMUP1
.WORD FLIPBITS|6,M_FLIPH
.LONG ARMUP2
.WORD 6
.LONG ARMUP3
.WORD 6
.LONG ARMUP4
.WORD 120
.LONG ARMUP3
.WORD 6
.LONG ARMUP2
.WORD 6
.LONG ARMUP1
.WORD 6
.LONG BPLYRTRS
.WORD 6
.LONG 0
ARMLUP
.LONG ARMUP1
.WORD FLIPBITS|6,0
.LONG ARMUP2
.WORD 6
.LONG ARMUP3
.WORD 6
.LONG ARMUP4
.WORD 120
.LONG ARMUP3
.WORD 6
.LONG ARMUP2
.WORD 6
.LONG ARMUP1
.WORD 6
.LONG BPLYRTRS
.WORD 6
.LONG 0
DRWPIC
;A10=A13 OF RACKUP THAT CREATED ME
;INC PZCNTR
;GET PROPER X/Y SPACING FOR THIS PLAYER AND THIS PRIZE
;BEGIN OBJ
;DIE
MOVE A10,A8
CLR A10
CMPI P1BON,A9
JREQ R1E
MOVK 1,A10
R1E
;A10=0 OR 1
MOVB *A8(PZCNTR),A0
JRZ DY
DEC A0
MOVB A0,*A8(PZCNTR)
SLL 3,A0
MOVI YPZ,A1
ADD A0,A1
MOVB *A1,A9
ADDI XPZ,A0
MOVB *A0,A11
ANDI 0FFH,A11
MOVE A10,A10
JRZ AY
;P2
ADDI 195,A11
AY
MOVB *A8(ITEM),A0
CMPI 3,A0
JRZ AY2
; MOVI BEEP1,A0
; CALLA ONESND
AY2
; MOVE @CIRCUIT,A0
; SLL 5,A0
; ADDI PZLSND,A0
; MOVE *A0,A0,L
; MOVB *A8(ITEM),A2
; SLL 5,A2
; ADD A2,A0
; MOVE *A0,A0,L
; CALLA ONESND
MOVE @CIRCUIT,A0
SLL 5,A0
ADDI PCTBL,A0
MOVE *A0,A2,L
MOVB *A8(ITEM),A0
SLL 5,A0
ADD A0,A2
MOVE *A2,A14,L
CALLR DO_ALL_STUFF
; CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
; CALLA STFOBJ ;STUFF OBJECT DATA
; MOVE A13,*A0(OPLINK),L
; CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
MOVE A9,*A8(OYPOS),W
MOVE A11,*A8(OXPOS),W
CALLA ADJSTWTL
ORI 0AH,A10
MOVE A10,*A8(OID)
DY DIE
XPZ: .BYTE 30,60,90,120,150
.BYTE 43,73,103,133
.BYTE 30,60,90,120,150
.BYTE 43,73,103,133
.BYTE 30,60,90,120,150
.BYTE 43,73,103,133
YPZ: .BYTE 58,58,58,58,58
.BYTE 70,70,70,70
.BYTE 82,82,82,82,82
.BYTE 94,94,94,94
.BYTE 106,106,106,106,106
.BYTE 118,118,118,118
.EVEN
PCTBL .LONG P1LST,P2LST,P3LST
P1LST .LONG P1,P2,P3,CAZH
P2LST .LONG BP1,BP2,BP3,CAZH
P3LST .LONG CP1,CP2,CP3,CAZH
P1:
.LONG 0,0,TSTR2
.WORD 91,DMAWNZ,CLSNEUT|TYPICON
.LONG 0,0
P2:
.LONG 0,0,CR
.WORD 91,DMAWNZ,CLSNEUT|TYPICON
.LONG 0,0
P3:
.LONG 0,0,VCR2
.WORD 91,DMAWNZ,CLSNEUT|TYPICON
.LONG 0,0
CAZH:
.LONG 0,0,CSHIN
.WORD 91,DMAWNZ,CLSNEUT|TYPICON
.LONG 0,0
BP1:
.LONG 0,0,TV
.WORD 91,DMAWNZ,CLSNEUT|TYPICON
.LONG 0,0
BP2:
.LONG 0,0,LUGG2
.WORD 91,DMAWNZ,CLSNEUT|TYPICON
.LONG 0,0
BP3:
.LONG 0,0,TRP
.WORD 91,DMAWNZ,CLSNEUT|TYPICON
.LONG 0,0
CP1:
.LONG 0,0,HGM
.WORD 91,DMAWNZ,CLSNEUT|TYPICON
.LONG 0,0
CP2:
.LONG 0,0,MWR
.WORD 91,DMAWNZ,CLSNEUT|TYPICON
.LONG 0,0
CP3:
.LONG 0,0,MT
.WORD 91,DMAWNZ,CLSNEUT|TYPICON
.LONG 0,0
GTA10
CLR A10
CMPI P1BON,A9
JREQ R1EE
MOVK 1,A10
R1EE
;A10=0 OR 1
RETS
ADDIT
MOVE A10,A8
CALLA GTA10
MOVI DG1PID,A0
CLR A1
NOT A1
CALLA EXISTP
JRNZ RYI
CREATE DG1PID,DIGIT ;DRAW NEW UPDATED STRING
CREATE DG1PID,BCDASC ;DRAW NEW TOTAL SCORE
RYI MOVE *A9,A0,L
MOVB *A8(ITEM),A1
SLL 4,A1
ADDI ADITM,A1
MOVE *A1,A1
MMTM SP,A0,A1
;ADD TO REAL SCORE ALSO!
MOVB *A8(ITEM),A1
SLL 4,A1
ADDI ADITM2,A1
MOVE *A1,A1
ANDI 0FFFFH,A1
;A2=P1DATA OR P2DATA
MOVI P1DATA,A2
MOVE A10,A10
JRZ VB1
MOVI P2DATA,A2
VB1 CALLA SCRADD3
MMFM SP,A0,A1
ADD A1,A0
MOVE A0,*A9,L
DIE
ADITM .WORD 2000,2500,2500,900
ADITM2 .WORD >2000,>2500,>2500,>900
PZ12 .LONG P1PZ1,P2PZ1
BWORD
MOVE @CIRCUIT,A0
SLL 5,A0
ADDI CTBL,A0
MOVE *A0,A2,L ;A2=TABLE OF TEXT ENTRIES
MOVB *A10(ITEM),A1
CALLA GTA10
MOVE A1,A0
SLL 5,A0
ADD A0,A2 ;GET TO CORRECT BONUS STRING
MOVE *A2,A8,L ;A3=FIRST TEXT STRING TO DRAW
MOVE @WAVEYX,A9,L
MOVE A10,A0
SLL 5,A0
ADDI LFRG2,A0 ;GET LEFT/RIGHT POSITION FOR PLYR 1/2
MOVE *A0,A1,L
ADD A1,A9
MOVI 03F3FH,A6 ;COLOR CYCLE DIGITS
;A8 GOTTEN FROM HEXTOASC
MOVI RD15FONT,A11 ;FONT TABLE
MOVK 1,A0 ;ADJUST FOR WORLD
MOVE A0,@WRLD
ORI 20,A10
MOVB A10,@MYID
CLR A0
MOVI [0,2],A10 ;Y,X SPACING BETWEEN CHARCTERS
JSRP STRCNRMO ;PRINT STRING, NO OBJECTS
CLR A0
MOVB A0,@MYID
DIE
WORDB
MOVI BNS,A8 ;BONUS WORD
MOVE @WAVEYX,A9,L
MOVE A10,A0
SLL 5,A0
ADDI LFRGB,A0 ;GET LEFT/RIGHT POSITION FOR PLYR 1/2
MOVE *A0,A1,L
ADD A1,A9
MOVI 03F3FH,A6 ;COLOR CYCLE DIGITS
;A8 GOTTEN FROM HEXTOASC
MOVI RD15FONT,A11 ;FONT TABLE
MOVK 1,A0 ;ADJUST FOR WORLD
MOVE A0,@WRLD
; INC A10
CLR A0
MOVB A0,@MYID
MOVI [0,2],A10 ;Y,X SPACING BETWEEN CHARCTERS
JSRP STRCNRMO ;PRINT STRING, NO OBJECTS
DIE
LFRG: .LONG [0158H,0FE8EH],[0158H,0FF54H]
LFRGA: .LONG [01F8H,0FE8EH],[01F8H,0FF54H] ;FOR TOTAL SCORE STRING
LFRG2: .LONG [0128H,0FE8EH],[0128H,0FF54H]
LFRGB: .LONG [013AH,0FE8EH],[013AH,0FF54H]
CTBL .LONG CC1,CC2,CC3
CC1 .LONG CA1,CA2,CA3,CA4,CA5
CC2 .LONG CB1,CB2,CB3,CA4,CA5
CC3 .LONG CD1,CD2,CD3,CA4,CA5
CA1 .STRING "TOASTER"
.BYTE 0
.EVEN
CA2 .STRING "AUTOMOBILE"
.BYTE 0
.EVEN
CA3 .STRING "SUPER VCR"
.BYTE 0
.EVEN
CA4 .STRING "CASH"
.BYTE 0
.EVEN
CA5 .STRING "TOTAL"
.BYTE 0
.EVEN
BNS .STRING "BONUS"
.BYTE 0
.EVEN
CB1 .STRING "TELEVISION"
.BYTE 0
.EVEN
CB2 .STRING "LUGGAGE"
.BYTE 0
.EVEN
CB3 .STRING "VACATION"
.BYTE 0
.EVEN
CD1 .STRING "HOME GAME"
.BYTE 0
.EVEN
CD2 .STRING "LAWN MOWER"
.BYTE 0
.EVEN
CD3 .STRING "GOOD MEAT"
.BYTE 0
.EVEN
BCDASC
;A10=0 OR 1
;TAKE PLAYER SCORES, CONVERT TO ASC STRING FOR OUTPUT TO SCREEN
MOVI P2DATA,A9
CMPI 1,A10
JRZ AP1
MOVI P1DATA,A9
AP1
CLR A2 ;RUNNING SCORE IN HEX
CLR A3 ;INDEX INTO DEC VALUE FOR ADD
MOVK 8,A5
MOVE *A9(PSCORE),A0,L
CALLA BCDBIN
MOVE A0,A8
PUSH A10
ADDI 40H,A10
MOVE A10,A0
CLR A1
NOT A1
CALLA KILOBJ
PULL A10
CALLA HEXTOASC ;CREATE STRING FOR BONUS SCORE
MOVE @WAVEYX,A9,L
MOVE A10,A0
SLL 5,A0
ADDI LFRGA,A0 ;GET LEFT/RIGHT POSITION FOR PLYR 1/2
MOVE *A0,A1,L
ADD A1,A9
MOVI 02525H,A6 ;COLOR CYCLE DIGITS
;A8 GOTTEN FROM HEXTOASC
MOVI RD15FONT,A11 ;FONT TABLE
MOVK 1,A0 ;ADJUST FOR WORLD
MOVE A0,@WRLD
ADDI 40H,A10
MOVB A10,@MYID
CLR A0
MOVI [0,2],A10 ;Y,X SPACING BETWEEN CHARCTERS
JSRP STRCNRMO ;PRINT STRING, NO OBJECTS
CLR A0
MOVB A0,@MYID
DIE
DIGIT:
;PROCESS
;DISPLAY BONUS STRING FOR PLAYER 1 OR 2
;A9=PLYR BONUS DATA AREA
;A10=0 FOR PLYR 1, 1 FOR PLYR 2
INC A10
MOVE A10,A0
CLR A1
NOT A1
CALLA KILOBJ
DEC A10
MOVE *A9,A8,L
CALLA HEXTOASC ;CREATE STRING FOR BONUS SCORE
MOVE @WAVEYX,A9,L
MOVE A10,A0
SLL 5,A0
ADDI LFRG,A0 ;GET LEFT/RIGHT POSITION FOR PLYR 1/2
MOVE *A0,A1,L
ADD A1,A9
MOVI 03F3FH,A6 ;COLOR CYCLE DIGITS
;A8 GOTTEN FROM HEXTOASC
MOVI RD15FONT,A11 ;FONT TABLE
MOVK 1,A0 ;ADJUST FOR WORLD
MOVE A0,@WRLD
INC A10
MOVB A10,@MYID
CLR A0
MOVI [0,2],A10 ;Y,X SPACING BETWEEN CHARCTERS
JSRP STRCNRMO ;PRINT STRING, NO OBJECTS
CLR A0
MOVB A0,@MYID
DIE
SMILES
.LONG BPLYRMTH1
.WORD 4*60 ;9
.LONG BPLYRSML
.WORD 7*60
.LONG BPLYRMTH1
.WORD 4*60
.LONG BPLYRSML
.WORD 7*60
.LONG 0
SMILESE
.LONG BPLYRMTH1
.WORD 1*60 ;9
.LONG BPLYRSML
.WORD 7*60
.LONG 0
EYES
.LONG BPLYRI1
.WORD 5
.LONG BPLYRI2
.WORD 9
.LONG BPLYRI1
.WORD 5
.LONG BPLYRI3
.WORD 3*60
.LONG BPLYRI1
.WORD 4
.LONG BPLYRI2
.WORD 4
.LONG BPLYRI1
.WORD 4
.LONG BPLYRI3
.WORD 30
.LONG BPLYRI1
.WORD 4
.LONG BPLYRI2
.WORD 4
.LONG BPLYRI1
.WORD 4
.LONG BPLYRI3
.WORD 5*60
.LONG BPLYRI1
.WORD 5
.LONG BPLYRI2
.WORD 20
.LONG BPLYRI1
.WORD 5
.LONG BPLYRI3
.WORD 3*60
.LONG 0
SECRET SLEEP 10
MOVI 03F3FH,A6 ;COLOR CYCLE
MOVE @WAVEYX,A9,L
ADDI >116FEF2,A9 ;[0F8H,0FF84H],A9 ;Y,X POSITION
MOVI KEYWARP,A8
MOVI [0,2],A10 ;Y,X SPACING BETWEEN CHARCTERS
MOVI RD15FONT,A11 ;FONT TABLE
MOVK 1,A0
MOVE A0,@WRLD
JSRP STRCNRMO
DIE
TX0
MOVI 03F3FH,A6 ;COLOR CYCLE
MOVE @WAVEYX,A9,L
ADDI [0128H,0FF54H],A9 ;Y,X POSITION
MOVI JOIN,A8
MOVI [0,2],A10 ;Y,X SPACING BETWEEN CHARCTERS
MOVI RD15FONT,A11 ;FONT TABLE
MOVK 1,A0
MOVE A0,@WRLD
JSRP STRCNRMO
MOVI 03F3FH,A6 ;COLOR CYCLE
MOVE @WAVEYX,A9,L
ADDI [013AH,0FF54H],A9 ;Y,X POSITION
MOVI JN2,A8
MOVI [0,2],A10 ;Y,X SPACING BETWEEN CHARCTERS
MOVI RD15FONT,A11 ;FONT TABLE
MOVK 1,A0
MOVE A0,@WRLD
JSRP STRCNRMO
MOVI 03F3FH,A6 ;COLOR CYCLE
MOVE @WAVEYX,A9,L
ADDI [0188H,0FF53H],A9 ;Y,X POSITION
MOVI JN3,A8
MOVI [0,2],A10 ;Y,X SPACING BETWEEN CHARCTERS
MOVI RD15FONT,A11 ;FONT TABLE
MOVK 1,A0
MOVE A0,@WRLD
JSRP STRCNRMO
DIE
TX1
MOVI 03F3FH,A6 ;COLOR CYCLE
MOVE @WAVEYX,A9,L
ADDI [0128H,0FE8EH],A9 ;Y,X POSITION
MOVI JOIN,A8
MOVI [0,2],A10 ;Y,X SPACING BETWEEN CHARCTERS
MOVI RD15FONT,A11 ;FONT TABLE
MOVK 1,A0
MOVE A0,@WRLD
JSRP STRCNRMO
MOVI 03F3FH,A6 ;COLOR CYCLE
MOVE @WAVEYX,A9,L
ADDI [013AH,0FE8EH],A9 ;Y,X POSITION
MOVI JN2,A8
MOVI [0,2],A10 ;Y,X SPACING BETWEEN CHARCTERS
MOVI RD15FONT,A11 ;FONT TABLE
MOVK 1,A0
MOVE A0,@WRLD
JSRP STRCNRMO
MOVI 03F3FH,A6 ;COLOR CYCLE
MOVE @WAVEYX,A9,L
ADDI [0188H,0FE8EH],A9 ;Y,X POSITION
MOVI JN3,A8
MOVI [0,2],A10 ;Y,X SPACING BETWEEN CHARCTERS
MOVI RD15FONT,A11 ;FONT TABLE
MOVK 1,A0
MOVE A0,@WRLD
JSRP STRCNRMO
DIE
FIG2
MOVE A13,A10
CREATE BONPID,EYES2
CREATE BONPID,MOUTH2
MOVK 6,A9
MOVE @ENTERON,A0
JRZ TP2
MOVK 11,A9
TP2 MOVE A9,A0
SLL 5,A0
MOVE @ENTERON,A1
JRZ TPREG
ADDI ON2B,A0
JRUC TPOUT
TPREG
ADDI ON2,A0
TPOUT
CALLA DOIMG
CMPI 7,A9
JRNC SKPA
PUSH A0
MOVI BGPLYR2P,A0 ;P2 PAL
CALLA GETFPAL ;GET A COLOR MAP ASSIGNMENT
MOVE A0,*A8(OPAL),W ;STORE THE NEW PALETTE
PULL A0
ADDI CHST2L,A0
MOVE A8,*A0,L
SKPA
DEC A9
JRNZ TP2
MOVE *A13(CHST2L),A8,L
;OBJECTS ALL ON
MOVI 0C9H,A11
MOVE @ENTERON,A0
JRZ REGH
MOVI 0A9H,A11
MOVE *A8(OYPOS),A0
ADDI 4,A0
MOVE A0,*A8(OYPOS)
REGH
MOVE *A8(OXPOS),A0
ADD A0,A11
MOVE A11,*A8(OXPOS),W
F2S
CALLA LINE_UP2
SLEEP 5
JRUC F2S
;
DOIMG
MOVE *A0,A14,L
CALLR DO_ALL_STUFF
; CALLA GPALOBJ ;ALLOCATE A COLOR PALETTE
; CALLA STFOBJ ;STUFF OBJECT DATA
; MOVE A13,*A0(OPLINK),L
; CALLA INSOBJ ;INSERT OBJECT INTO LIST
MOVE A0,A8
MOVI 026H,A11 ;X 24
MOVI 019CH,A10 ;Y
MOVE @ENTERON,A1
JRZ REGB
CMPI 7,A9
JRNC REGB2
MOVI 038H,A11 ;X 24
MOVI 089H,A10 ;Y
REGB
MOVE A10,*A8(OYPOS),W
MOVE A11,*A8(OXPOS),W
REGB2
CALLA ADJSTWTL
MOVE A9,A0
DEC A0
SLL 5,A0
ADD A13,A0
RETS
LINE_UP1
;RIGHT SIDE OF TANK
CALLA GETANIXY
MOVE *A13(CH1R),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 030000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;DO HEAD
CALLA GETANIXY
MOVE *A13(HD1L),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
; SUBI 000000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;ADJUST LEFT SIDE TORSO
CALLA GETANIXY
MOVE *A13(HD1R),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 030000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;ADJUST RGT TORSO
CALLA GETANIXY
MOVE *A13(SM1),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
; SUBI 000000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;ADJUST LEFT SIDE ARM
CALLA GETANIXY
MOVE *A13(EY1),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
; SUBI 000000H,A3 ;SUB 1 FROM X
CALLA GANISAG
RETS
LINE_UP2
;RIGHT SIDE OF TANK
CALLA GETANIXY
MOVE *A13(CH2R),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 030000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;DO HEAD
CALLA GETANIXY
MOVE *A13(HD2L),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
; SUBI 000000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;ADJUST LEFT SIDE TORSO
CALLA GETANIXY
MOVE *A13(HD2R),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
SUBI 030000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;ADJUST RGT TORSO
CALLA GETANIXY
MOVE *A13(SM2),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
; SUBI 000000H,A3 ;SUB 1 FROM X
CALLA GANISAG
;ADJUST LEFT SIDE ARM
CALLA GETANIXY
MOVE *A13(EY2),A0,L
MOVE *A0(OFLAGS),A4,W ;SAME FLAGS AS BEFORE
; SUBI 000000H,A3 ;SUB 1 FROM X
CALLA GANISAG
RETS
ON1 .LONG 0,T1,T2,T3,T4,T5,T6
ON1B .LONG 0,T1E,T2,T3,T4,T5,T6,TE1,TE2,TE3,TE4,TE5
ON2 .LONG 0,T1A,T2A,T7,T8,T5,T6
ON2B .LONG 0,T1A,T2E,T7,T8,T5,T6,TE1A,TE2A,TE3A,TE4A,TE5A
HEDS1
.LONG 0,0,HED1
.WORD 06FFFH,DMAWNZ,CLSNEUT|TYPNEUT
.LONG 0,0
TE1 ;PLYR 1 TRS
.LONG 250000H,130000H,CNTST
.WORD 06FFDH,DMAWNZ,CLSNEUT|TYPNEUT
.LONG 0,0
TE2 ;PLYR 1 TRS
.LONG 4A0000H,220000H,NMBR1
.WORD 06FFDH,DMAWNZ,CLSNEUT|TYPNEUT
.LONG 0,0
TE3 ;PLYR 1 TRS
.LONG 300000H,550000H,LTTRBR
.WORD 06FFDH,DMAWNZ,CLSNEUT|TYPNEUT
.LONG 0,0
TE4 ;PLYR 1 TRS
.LONG 700000H,5A0000H,BIGGAL
.WORD 06FFEH,DMAWNZ,CLSNEUT|TYPNEUT
.LONG 0,0
TE5 ;PLYR 1 TRS
.LONG 700000H,5A0000H,PLYRHND
.WORD 06FFFH,DMAWNZ,CLSNEUT|TYPNEUT
.LONG 0,0
TE1A ;PLYR 1 TRS
.LONG 250000H+0F00000H,130000H,CNTST
.WORD 06FFDH,DMAWNZ,CLSNEUT|TYPNEUT
.LONG 0,0
TE2A ;PLYR 1 TRS
.LONG 480000H+0F00000H,220000H,NMBR2
.WORD 06FFDH,DMAWNZ,CLSNEUT|TYPNEUT
.LONG 0,0
TE3A ;PLYR 1 TRS
.LONG 300000H+0F00000H,550000H,LTTRBR
.WORD 06FFDH,DMAWNZ,CLSNEUT|TYPNEUT
.LONG 0,0
TE4A ;PLYR 1 TRS
.LONG 11A0000H,5A0000H,BIGGAL
.WORD 06FFEH,DMAWNZ+M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
TE5A ;PLYR 1 TRS
.LONG 11A0000H,5A0000H,PLYRHND
.WORD 06FFFH,DMAWNZ+M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T1 ;PLYR 1 TRS
.LONG 0,0,BPLYRTRS
.WORD 07FCDH,DMAWNZ,CLSNEUT|TYPNEUT|0DH
.LONG 0,0
T1E ;PLYR 1 TRS ENTRY SCREEN
.LONG 0,0,ARMLESS
.WORD 06FFDH,DMAWNZ,CLSNEUT|TYPNEUT|0DH
.LONG 0,0
T2E ;PLYR 1 TRS ENTRY SCREEN
.LONG 0,0,ARMLESS
.WORD 06FFDH,DMAWNZ+M_FLIPH,CLSNEUT|TYPNEUT
.LONG 0,0
T2 ;PLYR 1
.LONG 0,0,BPLYRTRS
.WORD 07FCDH,DMAWNZ+M_FLIPH,CLSNEUT|TYPNEUT|0EH
.LONG 0,0
T1A ;PLYR 2 TRS
.LONG 0,0,BPLYRTRS
.WORD 07FCDH,DMAWNZ,CLSNEUT|TYPNEUT|0FH
.LONG 0,0
T2A ;PLYR 2
.LONG 0,0,BPLYRTRS
.WORD 07FCDH,DMAWNZ+M_FLIPH,CLSNEUT|TYPNEUT|010H
.LONG 0,0
T3 ;ARM LEFT
.LONG 0,0,BPLYR1HD
.WORD 06FFEH,DMAWNZ,CLSNEUT|TYPNEUT|SUBCHNK
.LONG 0,0
T4 ;ARM LEFT
.LONG 0,0,BPLYR1HD
.WORD 06FFEH,DMAWNZ+M_FLIPH,CLSNEUT|TYPNEUT|SUBCHNK
.LONG 0,0
T5 ;TORSO RGT
.LONG 0,0,BPLYRMTH1
.WORD 06FFEH,DMAWNZ,CLSNEUT|TYPNEUT|SUBCHNK
.LONG 0,0
T6 ;TORSO LEFT
.LONG 0,0,BPLYRI3
.WORD 06FFEH,DMAWNZ,CLSNEUT|TYPNEUT|SUBCHNK
.LONG 0,0
T7 ;ARM LEFT
.LONG 0,0,BPLYR2HD
.WORD 06FFEH,DMAWNZ,CLSNEUT|TYPNEUT|SUBCHNK
.LONG 0,0
T8 ;ARM LEFT
.LONG 0,0,BPLYR2HD
.WORD 06FFEH,DMAWNZ+M_FLIPH,CLSNEUT|TYPNEUT|SUBCHNK
.LONG 0,0
DRS:
;OPEN CORRECT DOOR ACCORDING TO ARROW NUMBER
SLEEP 3 ;NO SLEEP!
MOVE @FROMDR,A1,W
SLL 5,A1
ADDI ARWTBL,A1
MOVE *A1,A1,L
JUMP A1
;
ARWTBL:
.LONG TVWAVE,LDOOR,RDOOR,TDOOR,BDOOR
TVWAVE:
SLEEP 01H
MOVI 10,A1
MOVK 2,A0
CALLA SET_GATE_2
SLEEP 045H
MOVI 10,A1
MOVK 1,A0
CALLA SET_GATE_2
DIE
BDOOR:
MOVK 4,A0
CALLA SET_GATE_2 ;DO SOUND FOR BOTTOM DOOR
SLEEP 020H
MOVI 10,A1
MOVK 3,A0
CALLA SET_GATE_2
DIE
RDOOR:
MOVI 13,A1 ;9
MOVB A1,@KP_RS
SLEEP 045H
MOVI 7,A1
MOVK 1,A0
CALLA SET_GATE_2
DIE
LDOOR:
MOVI 13,A1 ;9
MOVB A1,@KP_LS
SLEEP 036H
MOVI 7,A1
MOVK 2,A0
CALLA SET_GATE_2
DIE
TDOOR:
MOVI 13,A1 ;9
MOVB A1,@KP_TS
DIE
;
;UPDATE WALL BOUNDARIES
;
DO_BND:
;A7=PLYR 1 OR PROCESS BLOCK
MMTM SP,A0,A1,A2,A3,A4,A5,A6
;THESE MMTM'S NEEDED?
MOVB *A7(BNDTYP),A1
MOVB *A7(PRVBND),A0
CMP A0,A1
JRGE SETBND
MMFM SP,A0,A1,A2,A3,A4,A5,A6
RETS
SETBND:
MOVB A1,*A7(PRVBND)
MOVI BNDTBL,A0
SLL 5,A1
ADD A1,A0
MOVE *A0,A0,L
MOVE *A0+,A1,L
MOVE *A0+,A2,L
MOVE *A0+,A3,L
MOVE *A0+,A4,L
MOVE @WORLDTL,A5,L
CLR A6
MOVY A5,A6
ADD A1,A6
MOVE A6,*A7(UPBND),L
;
MOVY A5,A6
ADD A2,A6
MOVE A6,*A7(DNBND),L
;
MOVX A5,A6
SLL 16,A6
ADD A3,A6
MOVE A6,*A7(LFTBND),L
;
MOVX A5,A6
SLL 16,A6
ADD A4,A6
MOVE A6,*A7(RGTBND),L
MMFM SP,A0,A1,A2,A3,A4,A5,A6
RETS
;
BNDTBL:
.LONG NORMBND,POW2BND,POW1BND
;
NORMBND: ;UP,DN,LEFT,RIGHT
.LONG [>2C,0],[>F3-4,0],[>25,0],[>162,0]
POW2BND:
.LONG [>2C+13,0],[>F3-4,0],[>25+15,0],[>162-14,0]
POW1BND:
.LONG [>2C+35,0],[>F3-20,0],[>25+35,0],[>162-32,0]
;
; SCROLL_WAVE - SCROLL SCREEN TO WAVE SPECIFIED
; PARAMS:
; WAVEYX = WAVE OFFSET TO SCROLL TO FROM WITHIN CIRCUIT
; RETURNS:
; NOTHING AT ALL!
; MUST BE CALLED AS JSRP!
;
SCROLL_WAVE:
;DO OVERHEAD IMAGES EXIST? IF SO, GIVE EACH IMAGE A NEGATIVE X VEL
; SLEEP 1
D33 MOVI CLSNEUT|TYPNEUT|SUBUP,A0
CLR A1
NOT A1
CALLA EXISTOBJ
JRZ D34
MOVI >FFFF6000,A1
MOVE A1,*A0(OXVEL),L
MOVI CLSNEUT|TYPNEUT|SUBUP2,A1
MOVE A1,*A0(OID),W
JRUC D33
D34
MOVI SCRLXSPD,A3 ;X VELOCITY OF SCROLL
MOVI SCRLYSPD,A8 ;Y VELOCITY OF SCROLL
MOVE @WORLDTLX,A6,L ;WORLD TOP X
MOVE @WORLDTLY,A7,L ;WORLD TOP Y
CLR A10
MOVE @WAVEYX,A0,L ;WAVE TL OFFSET
MOVY A0,A10 ;Y VALUE TO SCROLL TO IN A10
MOVX A0,A9 ;X VALUE TO SCROLL TO IN A9
SLL 16,A9 ;MAKE A 32 BIT VALUE
CLR A11 ;CLEAR REVERSE INDICATION FLAG
CMP A9,A6 ;FIRST CHECK X DIRECTION FOR SCROLL
JRLT RGTLFT
JREQ CHKY ;NO WHERE TO SCROLL NOW CHECK Y
NEG A3 ;NEGATIVE SCROLL DIRECTION
MOVK 1,A11 ;INDICATE REVERSE SCROLL
RGTLFT:
MOVE A3,@SCROLLX,L ;SET SCROLL X
SCRLXLUP:
CALLA BTOF
MOVE @WORLDTLX,A6,L ;WORLD TOP X
MOVE A11,A11 ;FIND OUT WHICH SCROLL DIRECTION
JRZ NORVRSEX
SUBI SCRLXSPD,A6 ;CHECK FOR OVERRUN WRLDCOOR-PIX VEL
CMP A9,A6
JRLE STOPX ;BR = SCROLL MATCH EXIT!
SLOOP 1,SCRLXLUP
NORVRSEX:
ADDI SCRLXSPD,A6 ;CHECK FOR OVERRUN WRLDCOOR+PIX VEL
CMP A9,A6
JRGE STOPX ;BR = SCROLL MATCH EXIT!
SLOOP 1,SCRLXLUP
STOPX: ;NOW DO Y CHECK
MOVE A9,@WORLDTLX,L ;SET EXACT PIXEL TO STOP AT
CLR A0
MOVE A0,@SCROLLX,L
CHKY:
CLR A11 ;CLEAR SCROLL REVERSE FLAG
MOVE @WORLDTLY,A7,L ;WORLD TOP Y
CMP A10,A7 ;FIRST CHECK Y DIRECTION FOR SCROLL
JRLT DNUP
JREQ SCRLYLUP
NEG A8
MOVK 1,A11 ;INDICATE REVERSE SCROLL
DNUP:
MOVE A8,@SCROLLY,L ;SET SCROLL Y
SCRLYLUP:
CALLA BTOF
MOVE @WORLDTLY,A7,L ;WORLD TOP Y
MOVE A11,A11 ;FIND OUT WHICH SCROLL DIRECTION
JRZ NORVRSEY
SUBI SCRLYSPD,A7 ;CHECK FOR OVERRUN WRLDCOOR-PIX VEL
CMP A10,A7
JRLE STOPY
SLOOP 1,SCRLYLUP
NORVRSEY:
ADDI SCRLYSPD,A7 ;CHECK FOR OVERRUN WRLDCOOR+PIX VEL
CMP A10,A7
JRGE STOPY
SLOOP 1,SCRLYLUP
STOPY:
MOVE A10,@WORLDTLY,L ;SET EXACT PIXEL TO STOP AT
CLR A0
MOVE A0,@SCROLLY,L
; SLEEP 1
D35 MOVI CLSNEUT|TYPNEUT|SUBUP2,A0
CLR A1
NOT A1
CALLA EXISTOBJ
JRZ D36
CLR A1
MOVE A1,*A0(OXVEL),L
MOVI CLSNEUT|TYPNEUT|SUBUP,A1
MOVE A1,*A0(OID),W
JRUC D35
D36
RETP
UPOFF
SLEEP 1*60
;DO OVERHEAD IMAGES EXIST? IF SO, GIVE EACH IMAGE A NEGATIVE X VEL
D37 MOVI CLSNEUT|TYPNEUT|SUBUP,A0
CLR A1
NOT A1
CALLA EXISTOBJ
JRZ D38
MOVI 08000H,A1
MOVE A1,*A0(OYVEL),L
MOVI CLSNEUT|TYPNEUT|SUBUP2,A1
MOVE A1,*A0(OID),W
JRUC D37
D38 MOVI 54,A9
D38A
SLEEP 10
MOVE @HALT,A0
JRNZ D38A
DSJS A9,D38A
;9*60
;DELETE ALL OVERHEAD OBJECTS
MOVI CLSNEUT|TYPNEUT|SUBUP2,A0
CLR A1
NOT A1
CALLA KILOBJ
SLEEP 3
;TURN OFF LGHTFX PAL
; MOVI DLST2,A1
; CALLA UNGET
CALLA CLNPAL
DIE
;
CRCTTAB:
.LONG CRCT1YX,CRCT2YX,CRCT3YX
;
;WAVE Y:X SCROLL VALUES FOR CIRCUITS 1~3
;
CRCT1YX:
.LONG 0,[>152,>1D8],[>152,>3B0],[5,>3B0],[5,>588]
.LONG [5,>760],[>29E,>3B0],[>29E,>588],[>152,>588]
.LONG [>152,>760],[>152,>938],[>152,>B10]
CRCT2YX:
.LONG 0,[>29E,>1D8],[>29E,>3B0],[>29E,>588],[>152,>588]
.LONG [>152,>760],[>29E,>760],[>29E,>938],[>152,>1D8]
.LONG [>152,>3B0],0,[>5,>588],[>5,>760]
.LONG [>3EA,>1D8],[>3EA,>3B0],[>3EA,>588] ;13-
.LONG [>3EA,>760],[>536,>588],[>536,>760],[>29E,>B10]
CRCT3YX:
.LONG 0,[>29E,>1D8],[>29E,>3B0],[>29E,>588],[>152,>588]
.LONG [>152,>760],[>29E,>760],[>29E,>938],[>152,>1D8]
.LONG [>152,>3B0],0,[>5,>588],[>5,>760]
.LONG [>3EA,>1D8],[>3EA,>3B0],[>3EA,>588] ;13-
.LONG [>3EA,>760],[>536,>588],[>536,>760],[>29E,>B10]
.LONG [>29E,>CE9],[>29E,>EC2],[>29E,>EC2+>1D8]
;
;LIVECNT - UPDATE LIVES LEFT COUNT IN STATUS BOX
; NO PARAMS:
;
LIVECNT:
;KILL BOTH IMAGES THEN REDRAW NEW VALUES
;A11=P1DATA OR P2DATA
CLR A1
MOVE A1,@BSCORE
NOT A1
MOVI CLSNEUT|TYPTEXT|SUBP1LVS,A0 ;P1LIVEOID,A0
CMPI P1DATA,A11
JRZ LC1
MOVI CLSNEUT|TYPTEXT|SUBP2LVS,A0 ;P2LIVEOID,A0
CALLA KILOBJ
CALLA DRW2
RETS
LC1 CALLA KILOBJ
CALLA DRW1
RETS
;DRAWLIVES - PUT UP PLAYERS LIVES COUNT IN STATUS BOX
;
; PARAMS:
; BSCORE SET = TEXT OFFSET ADDED, WORLD COORDINATES IGNORED
; BSCORE CLR = TEXT OFFSET IGNORED, SET TO WORLD COORDINATES
;
;PUT UP PLAYERS LIVES LEFT IN P BOX
DRAWLIVES:
CALLA DRW1
CALLA DRW2
RETS
DRW2
;NOW, DO PLAYER 2!
F5T MOVB @CNTDIG2,A0
JRNZ FT6
CLR A0
MOVI P2DATA,A5
MOVE @WAVEYX,A1,L
MOVE @BSCORE,A2
JRNZ NXTSCRN2
CLR A1
NXTSCRN2:
MOVX A1,A0
SLL 16,A0
SRL 16,A1
SLL 16,A1
ADDI [01CH,0],A1 ;Y POS.
ADDI [169H,0],A0 ;X POS.
MOVE *A5(PLIVES),A2,W ;GET NUMBER OF PLAYERS LIVES
MOVI CLSNEUT|TYPTEXT|SUBP2LVS,A5
CALLA DO_LIVES
MOVE A8,@P2LVS,L
FT6 RETS
DRW1
MOVI P1DATA,A5
MOVE @WAVEYX,A1,L
MOVE @BSCORE,A2
JRNZ NXTSCRN1
CLR A1
NXTSCRN1
MOVB @CNTDIG1,A0
JRNZ F5T
MOVX A1,A0
SLL 16,A0
SRL 16,A1
SLL 16,A1
ADDI [01CH,0],A1 ;Y POS.
ADDI [01EH,0],A0 ;X POS.
MOVE *A5(PLIVES),A2,W ;GET NUMBER OF PLAYERS LIVES
MOVI CLSNEUT|TYPTEXT|SUBP1LVS,A5
CALLA DO_LIVES ;PRINT THE PLAYERS LIVES LEFT
MOVE A8,@P1LVS,L
RETS
;
DO_LIVES:
CLR A6
CLR A7 ;NOT X,Y VELOCITIES
MOVI DMAWNZ|M_NOCOLL,A4 ;CONSTANT COLOR:PALLETTE
MOVI 300,A3 ;SET Z POSITION OF OBJECT
CMPI 10,A2 ;MAX DRAW DIGIT IS A 9
JRLT Y
MOVK 9,A2
Y SLL 7,A2 ;*128 (NEXT HEADER PLEASE!!)
MOVI AFONT0,A10 ;BASE ADDRESS OF NUMBERS HEADER
ADD A10,A2 ;COMPUTE CORRECT HEADER
MOVE @BSCORE,A9
JRNZ NXTSCRN3
;PUT ON DIFFERENT LIST
CALLA BEGINOBJ ;DRAW OBJECT, WORLD ADJUSTED
RETS
NXTSCRN3:
CALLA BEGINOBJ2 ;DRAW OBJECT, WORLD UNADJUSTED
RETS
CLR_ALL:
CLR A0
MOVE A0,@CIRCUIT
MOVE A0,@HULKTYP
MOVE A0,@FACEON
MOVB A0,@TOID_ON
CALLA KILBGND ;KILL ALL BACKGROUND
CLR A0 ;KILL SCORE DISPLAY
MOVE A0,@SCORE_FLAG,W
MOVE A0,@IRQSKYE,W
CLR A1
NOT A1
CALLA KILALL
MOVI PLY1PID,A0
CALLA KILALL
MOVI PLY2PID,A0
CALLA KILALL
MOVI LORDPID,A0
CALLA KILALL
; MOVI PCPID,A0
; CALLA KILALL
MOVI FATPID,A0
CALLA KILALL
MOVI TNKPID,A0
CALLA KILALL
MOVI HULKPID,A0
CALLA KILALL
MOVI COLPID,A0
CALLA KILALL
MOVI DRLPID,A0
CALLA KILALL
MOVI DRTOPID,A0
CALLA KILALL
MOVI DRRPID,A0
CALLA KILALL
MOVI ORBPID,A0
CALLA KILALL
MOVI WLMNPID,A0
CALLA KILALL
MOVI RBTAPID,A0
CALLA KILALL
MOVI TNKPID,A0
CALLA KILALL
MOVI SCOREPID,A0 ;SCORE PROCESSES
CALLA KILALL
MOVI P1PID,A0 ;PLAYER 1 SUBORDINATES
CALLA KILALL
MOVI P2PID,A0 ;PLAYER 2 SUBORDINATES
CALLA KILALL
MOVI CYCPID,A0 ;
CALLA KILALL
MOVI BONPID,A0 ;
CALLA KILALL
MOVI BON1PID,A0 ;
CALLA KILALL
MOVI TNKPID,A0 ;
CALLA KILALL
MOVI DUM_ID,A0 ;MUTOID
CALLA KILALL
MOVI TYPFACE,A0 ;FACE
CALLA KILALL
MOVI GALPID,A0 ;FACE
CALLA KILALL
MOVI TYPGAL,A0
CALLA KILALL
MOVI TYPGAL+SUBHEAD,A0
CALLA KILALL
MOVI TYPGAL+SUBBALL,A0
CALLA KILALL
MOVI RNGPID,A0
CALLA KILALL
MOVI BULPID,A0
CALLA KILALL
MOVI LZRPID,A0
CALLA KILALL
MOVI COBPID,A0
CALLA KILALL
MOVI COBPIDA,A0
CALLA KILALL
MOVI COBPIDM,A0
CALLA KILALL
MOVI COBPIDS,A0
CALLA KILALL
MOVI LSRPID,A0
CALLA KILALL
MOVI CHNSWPID,A0
CALLA KILALL
MOVI MCYCPID,A0
CALLA KILALL ;KILL LAND MINE CYCLE
MOVI FIXIT,A0
CALLA KILALL
MOVI B1PID,A0
CALLA KILALL
CLR A0 ;????
CALLA KILALL
MOVI CLSNEUT|TYPTEXT|SUBWNDW,A0
CALLA KILBUT ;KILL EVERYTHING BUT WHAT IS IN A0
RETS
KILBUT:
;KILL EVERYTHING EXCEPT WHAT IS IN A0
MOVI OBJLST,A2,L
KILOBP:
MOVE A2,A3 ;SAVE PREVIOUS
MOVE *A2,A2,L ;GET NEXT
JREQ KILX ;ALL DONE
MOVE *A2(OID),A4
CMP A0,A4 ;MATCH?
JREQ KILOBP ;NO
MOVE *A2,*A3,L ;LINK AROUND IN ACTIVE LIST
MOVE @OFREE,A5,L ;LINK INTO FREE LIST AT START
MOVE A5,*A2,L
MOVE A2,@OFREE,L ;POINT FREE TO CELL
MOVE A3,A2
JRUC KILOBP ;KILL THE REST
KILX:
RETS
WNDWON:
MOVI [256,400],A8
MOVI SCRNMID,A10
JSRP OWINDOW
MOVE A8,@OBJPTR,L
RETP
WNDWOFF:
MOVE @OBJPTR,A8,L
JSRP CWINDOW
RETP
;
; BTOF - GET A ALL BACKGROUND OBJECTS ON SCREEN THAT HAVE Z
; SET TO "ZID" OR HIGHER AND TRANSFER TO OBJECT LIST
; NOTE: BACKGROUND MUST BE IN PLACE BEFORE CALLING!
;
BTOF:
MOVE A8,@TMPA8,L
MOVE A9,@TMPA9,L
MOVE A10,@TMPA10,L
MOVE A11,@TMPA11,L
CALLA BGND_UD1 ;UPDATE BACKGROUND LIST
CALLA CLRLIST
MOVE @BAKLST,A8,L ;LOOK THROUGH THE BACKGROUND
JREQ GFAIL ;DOES NOT EXIST! INDICATE ERROR
MOVI BOBJECTS,A9 ;BASE TABLE OF BACKGROUND OBJ. SAVES
GBOBJLUP:
MOVE *A8(OZPOS),A5,W ;CHECK BACKGROUND Z
CMPI ZID,A5 ;A MATCH?
JRLT GBOBJL ;NEXT OBJECT PLEASE!
CALLA GOTBOBJ ;BAK OBJECT FOUND, NOW TRANSFER
MOVE A8,*A9+,L ;ADD TO BACKGROUND SAVE LIST
GBOBJL:
MOVE *A8(OLINK),A8,L ;LET'S SEARCH FOR ANOTHER
JRNE GBOBJLUP
CALLA PUTOBJ ;PLACE THEM ON OBJECT LIST
GFAIL:
MOVE @TMPA8,A8,L
MOVE @TMPA9,A9,L
MOVE @TMPA10,A10,L
MOVE @TMPA11,A11,L
RETS
;
;NOW TAKE BGND OBJECT AND LINK INTO OBJECT LIST, WHILST LINKING IT OFF THE
;BACKGROUND LIST.
;
GOTBOBJ:
MOVE @BAKLST,A4,L
DELETE:
MOVE A4,A2 ; PTR TO PREVIOUS IN A2
MOVE *A2,A4,L ; PTR TO NEXT IN A4
JRNZ DEL_LUP
JRUC GFAIL
DEL_LUP:
CMP A4,A8
JRNE DELETE
MOVE *A8,*A2,L ; PUT NEXT LINK IN PREV BLOCK
RETS
PUTOBJ:
;PUT THESE OBJECTS ON APPROPRIATE LIST
MOVI BOBJECTS,A9
ALLOBJ:
MOVE *A9+,A0,L
JRZ NOMORE
MOVI CLSNEUT|TYPNEUT|SUBNEW,A1 ;TRANSFERED OBJECTS
MOVE A1,*A0(OID),W ;TAG NEW FOREGROUND OBJECT ID
MOVE *A0(OFLAGS),A1,W
ORI M_NOCOLL,A1
MOVE A1,*A0(OFLAGS),W
CLR A1
MOVE A1,*A0(OXVEL),L
MOVE A1,*A0(OYVEL),L
MOVI 128,A6
MOVE *A0(OZPOS),A5,W
;CK FOR FACES
CMPI LFACE,A5
JRNZ CE1
;LFACE FOUND
MOVE A0,@LFACEP,L
MOVE *A0(OYPOS),A1
MOVE A1,@LFCY
CE1 CMPI RFACE,A5
JRNZ CE2
;RFACE FOUND
MOVE A0,@RFACEP,L
MOVE *A0(OYPOS),A1
MOVE A1,@RFCY
CE2
;CK FOR METERS
CMPI P1METER,A5
JRNZ C1A
;P1 METER FOUND
MOVE A0,@METERP1,L
MOVE *A0(OYPOS),A1
MOVE A1,@P1MTRY
MOVI -100,A6
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7
CREATE 0,FIXMETERS
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7
C1A CMPI P1METER+1,A5
JRNZ C1B
;P2 METER FOUND
MOVE A0,@METERP2,L
MOVE *A0(OYPOS),A1
MOVE A1,@P2MTRY
MOVI -100,A6
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7
CREATE 0,FIXMETERS2
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7
C1B CMPI TLGATE,A5 ;TOP LEFT GATE
JRNZ CHKTR
MOVE A0,@KEEP_TOPL_GATE,L ;SAVE OBJECT POINTER
MOVI 10,A6
CHKTR:
CMPI TRGATE,A5 ;TOP RIGHT GATE
JRNZ CHKTL
MOVE A0,@KEEP_TOPR_GATE,L ;SAVE OBJECT POINTER
MOVI 10,A6
CHKTL:
CMPI LGATE,A5 ;LEFT GATE
JRNZ CHKL
MOVE A0,@KEEP_LFT_GATE,L ;SAVE OBJECT POINTER
MOVI 10,A6
CHKL:
CMPI RGATE,A5 ;RIGHT GATE
JRNZ NOGATE
MOVE A0,@KEEP_RGT_GATE,L ;SAVE OBJECT POINTER
MOVI 10,A6
NOGATE:
;CK FOR GAL1
CMPI ZGAL1,A5
JRNZ CF1
;GAL LEFT FOUND
MOVE A0,@GAL1P,L
MOVI 2BH,A6
CF1 CMPI ZGAL1+1,A5
JRNZ CF2
;GAL RGT FOUN
MOVE A0,@GAL2P,L
MOVI 2BH,A6
CF2 CMPI MCH,A5
JRNZ CF3
;MC FOUND
MOVE A0,@MCPTR,L
MOVI 111,A6
CF3
ADD A6,A5
MOVE A5,*A0(OZPOS),W ;AND NEW Z POSITION
CALLA INSOBJ ;INSERT INTO OBJECT LIST
JRUC ALLOBJ
NOMORE:
RETS
DELPALS:
;DELETE FOREGROUND AND BACKGROUND OBJECTS THAT HAVE WRONG PALETTE!
; MOVI SETCOLS,A0
; CALLA FINDPAL
; JRZ NOM
;IS AROUND
; MOVE A0,A10
; CALLA DELP
;NOM
MOVI SETCOL,A0
CALLA FINDPAL
JRZ NO1
;IS AROUND
MOVE A0,A10
CALLA DELP
NO1
; MOVI BLCH1A,A0
; CALLA FINDPAL
; JRZ NO2
;IS AROUND
; MOVE A0,A10
; CALLA DELP
;NO2
MOVI BLCHR2,A0
CALLA FINDPAL
JRZ NO3
;IS AROUND
MOVE A0,A10
CALLA DELP
NO3
RETS
DELP
MOVI BOBJECTS,A9
MOVE @OBJLST,A8,L ;LOOK THROUGH THE FGNDLIST
JREQ ZFAIL ;DOES NOT EXIST! INDICATE ERROR
ZHKFOBJ:
MOVE *A8(OPAL),A0,W
ANDI 0FFFFH,A0
CMP A10,A0
JRNZ ZNSCRN ;OBJECT IS DEFINITELY ON SCREEN!
MOVE A8,*A9+,L ;DUMP INTO RAM STACK
ZNSCRN:
MOVE *A8(OLINK),A8,L ;LET'S SEARCH FOR ANOTHER
JRNE ZHKFOBJ
CLR A0
MOVE A0,*A9,L ;TERMINATE TABLE
CALLA OBJPULL
ZFAIL:
RETS
;DELETE FOREGROUND OBJECTS THAT ARE NOT WITHIN VISIBLE SCREEN AREA
OBJSCRN:
MOVI BOBJECTS,A9
MOVE @OBJLST,A8,L ;LOOK THROUGH THE FGNDLIST
JREQ OFAIL ;DOES NOT EXIST! INDICATE ERROR
CHKFOBJ:
CALLA SCRTST ;TEST FOR OBJECT ON SCREEN
JREQ ONSCRN ;OBJECT IS DEFINITELY ON SCREEN!
MOVE A8,*A9+,L ;DUMP INTO RAM STACK
ONSCRN:
MOVE *A8(OLINK),A8,L ;LET'S SEARCH FOR ANOTHER
JRNE CHKFOBJ
CLR A0
MOVE A0,*A9,L ;TERMINATE TABLE
CALLA OBJPULL
OFAIL:
RETS
OBJPULL:
MOVI BOBJECTS,A9
LUPOBJ:
MOVE *A9+,A0,L
JRZ NOLIST ;NO OBJECT LIST EXITS!
MOVE *A0(OID),A1,W
CMPI CLSPLYR|TYPPLYR|SUBPL_1,A1
;AND OFF BITS TO CHECK FOR EITHER PLAYER! (DON'T CHECK SUB BITS)
JRZ NODPLYR
CMPI CLSPLYR|TYPPLYR|SUBPL_2,A1
;AND OFF BITS TO CHECK FOR EITHER PLAYER! (DON'T CHECK SUB BITS)
JRZ NODPLYR
CMPI CLSPLYR|TYPLSR,A1
;CHECK FOR LASER HELPER IMAGE
JRZ NODPLYR
CALLA DELOBJ ;DELETE OBJECT FROM LIST
NODPLYR:
JRUC LUPOBJ
NOLIST:
RETS
;
;FTOB - REPLACE BACKGROUND OBJECTS ON SAVE LIST ONTO BACKGROUND LIST
;
MOVI BOBJECTS,A9 ;BASE TABLE OF OBJECTS TO RE-INSERT
FTOBLUP:
MOVE *A9+,A0,L
JRZ INSDONE
CALLA INSBOBJ
JRUC FTOBLUP
INSDONE:
MOVI CLSNEUT|TYPNEUT|SUBNEW,A0
CLR A1
NOT A1
CALLA KILOBJ ;NOW REMOVE THEM FROM OBJECT LIST
RETS
;INIT OBJECT RAM STACK
CLRLIST:
CLR A1
MOVI BOBJECTS,A2
MOVI BSIZE,A0 ;UHL TO CLEAR
CLRLUP:
MOVE A1,*A2+,L
DSJS A0,CLRLUP
RETS
;
;
; OWINDOW - OPEN A TEXT WINDOW, ON THE OBJECT LIST.
;
; A8 = WINDOW SIZE
; A10 = CENTER POINT OF WINDOW (SCREEN RELATIVE)
; RETURNS:
; A8 = PTR WINDOW OBJECT
; ZBIT SET = FAILURE TO CREATE
; ZBIT CLR = WINDOW IS OPEN
; NOTE: CALL WITH JSRP
; TRASHES A9,A10 & A11
;
;
OWINDOW:
MOVI WINDINIT,A14
CALLA GPALOBJ
MOVE A8,A11
MOVE A0,A8
JRZ OWINDOWX ;BR = FAILED MISERBLY
CALLA STFOBJ
MOVE A10,*A8(OXPOS),W
MOVY A10,A1
SRL 16,A1
MOVE A1,*A8(OYPOS),W
MOVI >0,A1
MOVE A1,*A8(OCONST),W
CALLA ADJSTWTL ;ADJUST TO THE WORLD TOP LEFT
CALLA INSOBJ
; MOVI [>0101,0],A0 ;WINDOW IS BLACK IN COLOR
; MOVE A0,*A8(OPAL),L
MOVE *A8(OXPOS),A10,W
MOVE *A8(OYPOS),A0,W
SLL 16,A0
MOVY A0,A10 ;GET NEW WORLD COORDS.
MOVE A10,A0 ;STORE HERE
MOVY A11,A1
SRL 17,A1
SLL 16,A1 ;DIVIDE Y BY 2
SLL 16,A11
SRL 17,A11 ;AND X
MOVY A1,A11
SUBXY A11,A10
ADDXY A0,A11
MOVI OWSPD,A0 ;WINDOW SPEED
MOVB @DUMB,A1
JREQ OA
MOVI OWSPD2,A0 ;WINDOW SPEED
OA JSRP OBJEXP32
MOVE A8,A8
OWINDOWX:
RETP
*INIT TABLE FOR WINDOW
WINDINIT
.LONG 0,0,AFONT0
.WORD 7FD0H,DMACAL,CLSNEUT|TYPTEXT|SUBWNDW
.LONG 0,0
;
; CWINDOW - CLOSE A TEXT WINDOW, ON THE OBJECT LIST.
; A8 = PTR TO WINDOW OBJECT
; RETURNS:
; WITH WINDOW OBJECT DELETED
; NOTE: CALL WITH JSRP
; TRASHES A9,A10 & A11
;
CWINDOW:
MOVE *A8(OXPOS),A10,W
MOVE *A8(OYPOS),A11,W
SLL 16,A11
MOVY A11,A10
MOVE *A8(OSIZE),A11,L
MOVY A11,A1
SRL 17,A1
SLL 16,A1
SLL 16,A11
SRL 17,A11
MOVY A1,A11
ADDXY A11,A10
MOVE A10,A11 ;CALCULATED CENTER OF OBJECT
MOVI CWSPD,A0 ;WINDOW SPEED
MOVB @DUMB,A1
JREQ OA2
MOVI CWSPD2,A0 ;WINDOW SPEED
OA2 JSRP OBJEXP32
MOVE A8,A0
; CALLA DELPAL
CALLA DELOBJ
RETP
DELWNDW:
MOVE @OBJPTR,A0,L
MOVE A0,A8
; CALLA DELPAL
CALLA DELOBJ
RETS
;
; OBJEXP32 - SHRINK OR EXPAND AN OBJECT FROM THE CURRENT SIZE
; TO THE GIVEN SIZE IN A GIVEN AMOUNT OF TICKS.
; A0 = # OF TICKS
; A8 = PTR TO OBJECT
; A10 = NEW OBJTL
; A11 = NEW OBJLR
; NOTE: CALL WITH JSRP
; TRASHES A9
;
OBJEXP32:
MOVE *A8(OXPOS),A1,W
MOVE *A8(OYPOS),A14,W
SLL 16,A14
MOVX A1,A14 ;A14 = OBJECT UL
SLL 16,A1
CLR A2
MOVY A14,A2
SUBXY A10,A14
MOVX A14,A5
SLL 16,A5
DIVS A0,A5
NEG A5
MOVE A5,A6
CLR A5
MOVY A14,A5
DIVS A0,A5
NEG A5
MOVE A5,A7
MOVE *A8(OXPOS),A3,W
MOVE *A8(OYPOS),A14,W
SLL 16,A14
MOVX A3,A14
MOVE *A8(OSIZE),A3,L
ADDXY A3,A14 ;A14 = OBJECT LR
PUSH A8 ;STACK OBJECT
MOVX A14,A3
SLL 16,A3
CLR A4
MOVY A14,A4
SUBXY A11,A14
MOVX A14,A5
SLL 16,A5
DIVS A0,A5
NEG A5
MOVE A5,A8
CLR A5
MOVY A14,A5
DIVS A0,A5
NEG A5
MOVE A5,A9
MOVE A0,A5
PULL A14 ;KEEP OBJECT HERE
OBJTIMLP:
ADD A6,A1 ;ADD THE TLX INCREMENT
ADD A7,A2 ;ADD THE TLY INCREMENT
ADD A8,A3 ;ADD THE LRX INCREMENT
ADD A9,A4 ;ADD THE LRY INCREMENT
MMTM A12,A1,A2,A3,A4,A5,A6,A7,A14
MOVE A1,*A14(OXVAL),L
MOVE A2,*A14(OYVAL),L
SUB A1,A3
SUB A2,A4 ;GET A SIZE FOR THE WINDOW
SRL 16,A3
MOVY A4,A3
CALLA FIXA3XY
MOVE A3,*A14(OSIZE),L
SLEEP 1
MMFM A12,A1,A2,A3,A4,A5,A6,A7,A14
DSJS A5,OBJTIMLP
MOVE A10,*A14(OXPOS),W
MOVY A10,A1
SRL 16,A1
MOVE A1,*A14(OYPOS),W
MOVE A11,A9
SUBXY A10,A11
MOVE A11,A3
CALLA FIXA3XY
MOVE A3,*A14(OSIZE),L ;MATCH WHAT THE CALLER WANTED
MOVE A9,A11 ;PRESERVE FOR YUKS
MOVE A14,A8
RETP
**************************************************************************
* *
* FIXA3XY - CHECKS THE X AND Y COMPONENT OF A3, ANY ONE THAT IS ZERO *
* WILL BE SET TO ONE. KEEPS OSIZE IN ORDER. *
* A3 = [Y,X] *
* *
**************************************************************************
FIXA3XY:
PUSH A0
CLR A0
MOVY A3,A0
MOVE A0,A0
JRNZ FA3YOK
MOVK 1,A0
SLL 16,A0
MOVY A0,A3
FA3YOK:
CLR A0
MOVX A3,A0
MOVE A0,A0
JRNZ FA3XOK
MOVK 1,A0
MOVX A0,A3
FA3XOK:
PULL A0
RETS
EXPSCRN:
MOVI 35,A0
MOVI SCRNST,A10
MOVI SCRNEND,A11
JSRP SCREXP32
RETP
SNKSCRN:
MOVI 35,A0
MOVI SCRNMID,A10
MOVI SCRNMID,A11
JSRP SCREXP32
RETP
SNKNOW:
MOVI SCRNMID,A1
MOVE A1,@SCRNTL,L
MOVE A1,@SCRNLR,L
RETP
;
; SCREXP32 - SHRINK OR EXPAND THE SCREEN WINDOW FROM THE CURRENT SIZE
; TO THE GIVEN IN A GIVEN AMOUNT OF TICKS
; A0 = # OF TICKS
; A10 = NEW SCRNTL
; A11 = NEW SCRNLR
; NOTE: CALL WITH JSRP
; TRASHES A8 & A9
;
SCREXP32:
MOVE @SCRNTL,A14,L
MOVX A14,A1
SLL 16,A1
CLR A2
MOVY A14,A2
SUBXY A10,A14
MOVX A14,A5
SLL 16,A5
DIVS A0,A5
NEG A5
MOVE A5,A6
CLR A5
MOVY A14,A5
DIVS A0,A5
NEG A5
MOVE A5,A7
MOVE @SCRNLR,A14,L
MOVX A14,A3
SLL 16,A3
CLR A4
MOVY A14,A4
SUBXY A11,A14
MOVX A14,A5
SLL 16,A5
DIVS A0,A5
NEG A5
MOVE A5,A8
CLR A5
MOVY A14,A5
DIVS A0,A5
NEG A5
MOVE A5,A9
MOVE A0,A5
SHTIMLP:
ADD A6,A1 ;ADD THE TLX INCREMENT
ADD A7,A2 ;ADD THE TLY INCREMENT
ADD A8,A3 ;ADD THE LRX INCREMENT
ADD A9,A4 ;ADD THE LRY INCREMENT
MMTM A12,A1,A2,A3,A4,A5,A6,A7
SRL 16,A1
MOVY A2,A1
MOVE A1,@SCRNTL,L
SRL 16,A3
MOVY A4,A3
MOVE A3,@SCRNLR,L
SLEEP 1
MMFM A12,A1,A2,A3,A4,A5,A6,A7
DSJS A5,SHTIMLP
SHTIMR:
MOVE A10,@SCRNTL,L ;MATCH WHAT THE CALLER WANTED
MOVE A11,@SCRNLR,L
RETP
;
; CHECK AND SEE IF LAST PLAYER IN GAME IF SO LOOP BUYIN (RESTART WAVE)
; THIS ROUTINE IS CALLED UPON PLAYERS UNTIMELY DEMISE
; CALL AS A PROCESS!
;PARAMS:
; A11=PLAYER INDEX
PSTAT:
CLR A0
MOVE A0,@STARTUP,W
MOVE A0,*A11(PFLAGS) ;ALLOW PLAYER TO RESTART GAME
PBUYLPLP:
CREATE BUYINPID,BUYINLP ;CREATE BUYIN LOOP WINDOW
JRNZ PBUYIWT4
SLOOP 4,PBUYLPLP
PBUYIWT4:
*WAIT FOR BUYIN MESSAGE TO COMPLETE
MOVI BUYINPID,A0
CLR A1
NOT A1
CALLA EXISTP
JRZ PBUYIWT5 ;BR = BUY IN IS DONE
SLOOP 1,PBUYIWT4
PBUYIWT5:
; MOVE @GAMSTATE,A0
; CMPI INGAMEOV,A0
; JRNZ DIEOFF
; CALLA STOPOBJS
; CREATE GMEOVPID,GAMEOVER
;DIEOFF:
DIE ;CIAO
**************************************************************************
* *
* GAME OVER PROCESS *
* *
**************************************************************************
GAMEOVER:
; AUDITCNT AUDSURV,SURVCNT ;COUNT THE SURVIVES
MOVI AUDBONE,A0 ;DEC CMOS CONT OF GAMES STARTED
MOVI -1,A1
CALLA AUD
MOVI AUDSTAT,A0 ;CLEAR GAME ON STATE
CLR A1
CALLA STORE_AUDIT
MOVI INGAMEOV,A0
MOVE A0,@GAMSTATE,W
CLR A0
MOVE A0,@PLYRPRCS,L
MOVE A0,@PLYRPRCS+32,L
MOVE A0,@PLYROBJS,L
MOVE A0,@PLYROBJS+32,L
MOVE A0,@STATUS
MOVE A0,@STARTUP
MOVI P1DATA,A14
MOVE A0,@P1CTRL
MOVE A0,@P2CTRL
MOVE A0,*A14(PSWTCH),L
MOVI P2DATA,A14
MOVE A0,*A14(PSWTCH),L
; MOVE @P1DATA+PBUYINS,A0,W ;CHECK FOR BUY-IN
; JRZ GAMOVRGD ;DO GAME-OVER MESSAGE FOR SURE
;
;GAMOVRGD
CALLA UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS
CALLA ADDBUY ;DO IT AGAIN FOR CERTAINTY
CREATE INDPID,GAMEOTXT
MOVE @GRATSON,A0
JRNZ GOB
SOUND1 MUSICOFF
GOB
MOVK 1,A0
MOVE A0,@HALT
SOUND1 NOWAY
SLEEP 080H ;LET EVERYONE SEE PLEASE
SOUND1 HA2SND
CREATE 0,KILGOTXT
JSRP WNDWON
CLR A0
MOVE A0,@IRQSKYE ;AUTOERASE TO BLACK
SLEEP 01 ;40H ;20H
GAMEDETH
CALLA ADDBUY ;RESET THE BUY-IN COUNTERS
CALLA UNIT_CLR ;CLEAR THE FACTIONS OF FRACTIONS
CALLA CLR_ALL
MOVI 01000h,A1
CLR A0
CALLA KILALL ;KILL ALL PROCS, EXCEPT FOR COINS
MOVI P1DATA,A14
MOVE A0,*A14(POBJ),L
MOVI P2DATA,A14
MOVE A0,*A14(POBJ),L
CALLA KILBGND
SLEEP 2
CALLA WIPEOUT
SLEEP 1
CALLA CLRPAL
SLEEP 1
CALLA COLRPRC ;INIT FIXED PAL 0
;INIT NUARENAP AS SECOND PAL!
MOVI NUARENAP,A0 ;FOR SCORE DIGITS!
CALLA GETFPAL
MOVK 1,A0
MOVE A0,@DISPLAYON,W ;TURN THE DISPLAY BACK ON
MOVE A0,@GAMERASE,W ;KICK IN AUTOERASE
;ONLY JSRP TO INITIALS IF SOMEONE WILL ENTER INITIALS
*CHECK HIGH SCORE TO DATE
CALLA ISHSTD ;GOT A HI SCORE?
JREQ GENDNOHS ;NOPE, NOTHING HAPPENING ... BLOW OUT
MOVE @GRATSON,A0
JRNZ GOB2
SOUND1 HIMUSC ;START HIGH SCORE MUSIC
GOB2 JSRP INITIALS ;DRAWS BACKGROUND PAGE FOR INITIALS
;RETURNS AFTER INITIALS ENTERED!
; CLR A0
; MOVI P1DATA,A1
; MOVE A0,*A1(PSCORE)
; MOVI P2DATA,A1
; MOVE A0,*A1(PSCORE)
MOVK 1,A0
MOVE A0,@KEEPON ;KEEP HIGH SCORE TABLE ON LONGER!
GENDNOHS
CALLA ATSTRT ;START ATTRACT MODE
DIE
KILGOTXT
SLEEP 13
CLR A1
NOT A1
MOVI CLSNEUT|TYPTEXT|SUBGOTXT,A0
CALLA KILOBJ
DIE
**************************************************************************
* *
* INIBMESS - INITIALIZE THE BUY IN MESSAGE *
* *
**************************************************************************
INIBMESS:
MMTM SP,A0,A1,A2,A6,A8,A9,A10,A11
CALLA CR_CONTP ;ENOUGH TO CONTINUE?
JRLO INIBMIN ;BR = NO
MOVI PRESSMSG,A8
CLR A0
MOVE A0,@BTIMERST,W
JRUC INIBM1
INIBMIN:
MOVI INSRTMSG,A8
MOVK 1,A0
MOVE A0,@BTIMERST,W
INIBM1:
MMFM SP,A0,A1,A2,A6,A8,A9,A10,A11
RETS
**************************************************************************
* *
* INIBTIME - INITIALIZE THE BUY IN TIMER *
* *
**************************************************************************
INIBTIME:
MMTM SP,A0,A1,A6,A8,A9,A10,A11
CALLA CLRBTIME
MOVB @CNTDIG1,A8
JRNZ YUP
MOVB @CNTDIG2,A8
YUP
; MOVI BUYTIME,A8
MOVE A8,@BTIME,W ;STORE IT AWAY
CALLA HEXTOASC
MMFM SP,A0,A1,A6,A8,A9,A10,A11
RETS
**************************************************************************
* *
* DECBTIME - DECREMENT THE BUY IN TIMER *
* RETURNS: *
* Z BIT SET = BUY IN TIME DONE *
* Z BIT CLR = HURRY WHILE SPECIALS LAST! *
* *
**************************************************************************
DECBTIME:
MMTM SP,A0,A1,A6,A8,A9,A10,A11
CALLA CLRBTIME
; MOVE @BTIME,A8,W
; DEC A8
; JRLT DECBTX
MOVB @CNTDIG1,A8
JRNZ YUP1
MOVB @CNTDIG2,A8
YUP1 DEC A8
PUSH A8
MOVE A8,@BTIME,W
CALLA HEXTOASC
CALLA GWINCENT ;POSITION
ADDI [24,0],A0
MOVE @WORLDTL,A1,L
SUB A1,A0
MOVE A0,A9
CLR A0
MOVI ROBO_LASER,A6
MOVI RD15FONT,A11 ;BIG OLD NUMBERS
MOVI [0,1],A10
JSRP STRCNRMO ;OUTPUT THE TIME
MOVI CLSNEUT|TYPTEXT|SUBTXT,A0
MOVI CLSNEUT|TYPTEXT|SUBTIME,A1
CALLA CHNGOID ;CHANGE THE OID
PULL A8
MOVE A8,A0
DEC A0
MOVE A0,A0
; MOVE @BTIME,A8,W ;SET STATUS
DECBTX:
MMFM SP,A0,A1,A6,A8,A9,A10,A11
RETS
**************************************************************************
* *
* UPBMESS1 - UPDATE THE "PRESS START" OR "INSERT COIN" MESSAGE. *
* RETURNS: *
* A11 = UPDATED SLEEP LOOP TIME FOR BUYIN THING *
* *
**************************************************************************
UPBMESS1:
MMTM SP,A0,A1,A6,A8 ;MORE PUSHING TO COME
CALLA CR_CONTP ;ENOUGH TO CONTINUE?
JRLO UPBMIN ;BR = NO
MOVI PRESSMSG,A8
JRUC UPBM1
UPBMIN:
MOVI INSRTMSG,A8
UPBM1:
MMTM SP,A9,A10,A11 ;WATCH OUT FOR THIS BOGUSNESS
CALLA GWINCENT ;POSITION
SUBI [39,0],A0
MOVE @WORLDTL,A1,L
SUB A1,A0 ;MAKE'UM SCREEN RELATIVE
MOVE A0,A9
CLR A0
MOVI OWHITE,A6 ;WHITE COLOR
MOVI RD15FONT,A11 ;BIG OLD LETTERS
MOVI [0,1],A10 ;ONE SPACE BETWEEN LETTERS
JSRP STRCNRMO ;OUTPUT "PRESS START" OR "INSERT COIN"
MOVI CLSNEUT|TYPTEXT|SUBMES1,A0
CLR A1
NOT A1
CALLA KILOBJ ;KILL OLD MESSAGE
MOVI CLSNEUT|TYPTEXT|SUBTXT,A0
MOVI CLSNEUT|TYPTEXT|SUBMES1,A1
CALLA CHNGOID ;CHANGE THE OID
MMFM SP,A0,A1,A6,A8,A9,A10,A11
RETS
**************************************************************************
* *
* UPBMESS2 - UPDATE THE "TO CONTINUE" MESSAGE, TO INSURE ALIGNMENT. *
* *
**************************************************************************
UPBMESS2:
MMTM SP,A0,A1,A2,A6,A8,A9,A10,A11
MOVI RD15FONT,A11 ;BIG OLD LETTERS
MOVI [0,1],A10 ;ONE SPACE BETWEEN LETTERS
CALLA GWINCENT ;POSITION
MOVE A0,A2
MOVI TOMSG,A8
MOVI RED,A6
SUBI [18,0],A0
MOVE @WORLDTL,A1,L
SUB A1,A0
MOVE A0,A9
CLR A0
JSRP STRCNRMO ;"TO"
MOVI CONMSG,A8
MOVI RED,A6
MOVE A2,A0
ADDI [3,0],A0
MOVE @WORLDTL,A1,L
SUB A1,A0
MOVE A0,A9
CLR A0
JSRP STRCNRMO ;"CONTINUE"
MOVI CLSNEUT|TYPTEXT|SUBMES2,A0
CLR A1
NOT A1
CALLA KILOBJ ;KILL OLD MESSAGE
MOVI CLSNEUT|TYPTEXT|SUBTXT,A0
MOVI CLSNEUT|TYPTEXT|SUBMES2,A1
CALLA CHNGOID ;CHANGE THE OID
MMFM SP,A0,A1,A2,A6,A8,A9,A10,A11
RETS
**************************************************************************
* *
* CLRBMESS - CLEAR THE BUY-IN MESSAGE TEXT. *
* *
**************************************************************************
CLRBMESS:
MMTM SP,A0,A1
MOVI CLSNEUT|TYPTEXT|SUBMES1,A0
CLR A1
NOT A1
CALLA KILOBJ
MOVI CLSNEUT|TYPTEXT|SUBMES2,A0
CALLA KILOBJ
MMFM SP,A0,A1
RETS
**************************************************************************
* *
* CLRBTIME - CLEAR THE BUY-IN TIME TEXT. *
* *
**************************************************************************
CLRBTIME:
MMTM SP,A0,A1
MOVI CLSNEUT|TYPTEXT|SUBTIME,A0
CLR A1
NOT A1
CALLA KILOBJ
MMFM SP,A0,A1
RETS
**************************************************************************
* *
* GWINCENT - GET THE CURRENT TEXT WINDOW CENTER POINT. *
* RETURNS: *
* A0 = CENTER PNT. *
* *
**************************************************************************
GWINCENT:
MMTM SP,A1,A8
MOVI CLSNEUT|TYPTEXT|SUBWNDW,A0
CLR A1
NOT A1
CALLA EXISTOBJ
JRZ GWINCX
MOVE A0,A8
CALLA GETCPNT
MOVE A1,A0
GWINCX:
MMFM SP,A1,A8
RETS
**************************************************************************
* *
* GAMEOTXT - PROCESS TO PUT "GAME OVER" UP AND KEEP IT CENTERED *
* *
**************************************************************************
GAMEOTXT:
CLR A0
MOVI ROBO_LASER,A6
MOVI GAMOVMSG,A8
MOVI [37+SCRNTOP,200],A9
MOVI [0,2],A10 ;ONE SPACE BETWEEN LETTERS
MOVI RD15FONT,A11 ;SET UP FONT
JSRP STRCNRMO ;"GAME OVER"
MOVI CLSNEUT|TYPTEXT|SUBGOTXT,A0
CLR A1
NOT A1
CALLA KILOBJ ;KILL OLD MESSAGE
MOVI CLSNEUT|TYPTEXT|SUBTXT,A0
MOVI CLSNEUT|TYPTEXT|SUBGOTXT,A1
CALLA CHNGOID ;CHANGE THE OID
GMEDSPLY:
SLOOP 1,GMEDSPLY
**************************************************************************
* *
* CHNGOID - CHANGE ALL MATCHING OID'S ON THE OBJECT LIST TO A NEW ONE. *
* A0 = OID TO CHANGE *
* A1 = NEW OID *
* *
**************************************************************************
CHNGOID:
MMTM SP,A2,A3
MOVI OBJLST,A2
CHNGOLP:
MOVE *A2,A2,L
JRZ CHNGOIDX ;BR = DONE WITH THE LIST
MOVE *A2(OID),A3,W
CMP A0,A3
JRNE CHNGOLP ;THIS IS NOT ONE OF THEM
MOVE A1,*A2(OID),W ;STUFF THE NEW ONE
JRUC CHNGOLP
CHNGOIDX:
MMFM SP,A2,A3
RETS
**************************************************************************
* *
* BUYINLP - PUT UP THE BUY-IN WINDOW PROCESS AND LOOP BACK ON BUY-IN. *
* *
**************************************************************************
BUYINLP:
;FOR WHEN THERE IS JUST ONE PLAYER IN GAME
CLR A0
MOVE A0,@STARTUP
MOVI [41+SCRNTOP,200],A10
SLEEP 2*60
MOVI >005D0093,A8
JSRP OWINDOW ;OPEN THE WINDOW
JRZ BUYINLPDI ;COULDN'T DO IT
MOVK 1,A0 ;HALT GAMEPLAY WHILE BUYIN
MOVE A0,@HALT,W ;BOX IS ON SCREEN
SOUND1 MUSICOFF
SLEEP 1
MOVI BUYMSC,A0
CALLA ONESND
CALLA INIBTIME ;INITIALIZE BUY IN TIME
CALLA INIBMESS ;INITIALIZE BUY IN MESSAGE
*YES IT'S BUY-IN TIME AGAIN!
MOVI INGAME,A0
MOVE A0,@GAMSTATE,W ;TAKE US OUT OF GAME PLAY
MOVI IBUYINS,A0
MOVE A0,@P1DATA+PBUYINS,W
MOVE A0,@P2DATA+PBUYINS,W
BUYLPOLP:
MOVI BUYTICK,A11
BUYLPILP:
;CHECK IF SOMEONE JUST HIT START (BOUGHT IN)
;IF SO, JRUC TO CLOSE BOX DOWN
;OTHERWISE, CONT COUNT DOWN
SLEEP 1 ;BUYSLP
MOVE @STARTUP,A0,W
JRNZ BUYLPBAK
CNT CALLA UPBMESS1 ;UPDATE BUYIN MESSAGE 1
CALLA UPBMESS2
DSJS A11,BUYLPILP
CALLA DECBTIME ;DECREMENT BUYIN TIME
JRGE BUYLPOLP ;WE ARE NOT DONE YET
* TIME IS UP!
CALLA CLRBTIME
CALLA CLRBMESS
; SOUND1 MUSICOFF ;MUSIC HARD OFF
JSRP CWINDOW
CLR A0
MOVE A0,@HALT
MOVE A0,@EHALT
MOVB A0,@WNDO
BUYINLPDI:
DIE
KILLPLYR
;KILL PLAYER STUFF!
;RESTART MESSAGES ON SCOREBOARD
MOVI PLY1PID,A0
CLR A1
NOT A1
CALLA EXISTP
JRNZ KILLP1
;MUST BE PLAYER 2 THAT HAS JUST DIED!
KILLP2
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
;RESTART SCOREBOARD MESSAGES PLAYER 2
CALLA IS2
MOVI P2DATA,A11
JRUC P1P
KILLP1
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
;RESTART SCOREBOARD MESSAGES PLAYER 1
CALLA IS1
MOVI P1DATA,A11
P1P
RETS
*
*SOMEBODY JUST BOUGHT IN
*IT IS TIME TO CONTINUE GAME
BUYLPBAK:
;A0=1 OR 2
;UPDATE PLAYER LIVES
; MOVI P1DATA,A11
MOVE @PLYRPRCS,A1,L
CMPI 1,A0
JREQ XX2
; AUDIT AUD2CONT
MOVE @PLYRPRCS+32,A1,L
; MOVI P2DATA,A11
JRUC XX2A
XX2
; AUDIT AUD1CONT
XX2A MOVI 320,A2
MOVE A2,*A1(DELYDET),W
; ADJUST ADJLIVES ;GET LIVES PER GAME
; MOVK 3,A0
; MOVE A0,*A11(PLIVES),W
;XZ
CLR A0
MOVE A0,@HALT,W ;UN-FREEZE GAME PLAY
MOVE A0,@EHALT,W ;UN-FREEZE GAME PLAY
MOVB A0,@WANTIN ;IN CASE
; MOVB A0,@STANDBY
; AUDIT AUDLOOP
CALLA CLRBTIME
CALLA CLRBMESS
JSRP CWINDOW
CREATE 0,SETEHALT
MOVI MCSPK4,A0
CALLA ONESND
CLR A0
MOVB A0,@WNDO
CREATE 0,DOMUSE
MOVK 1,A0
MOVE A0,@DISPLAYON,W ;TURN THE DISPLAY PROC ON
MOVI INGAME,A0
MOVE A0,@GAMSTATE,W ;START YOUR ENGINES
CALLA LIVECNT
DIE
SETEHALT
SLEEP 30
MOVE @EHALT,A0
JRZ DIOFZ
CLR A0
MOVE A0,@EHALT
DIOFZ DIE
DOMUSE SLEEP 20
CALLA WAVEMUSIC
DIE
WAVEMUSIC:
MOVE @CIRCUIT,A1 ;FETCH CIRCUIT
SLL 5,A1 ;TABLE ENTRY OFFSET
ADDI CRCTMSC,A1
MOVE *A1,A1,L ;FETCH DATA POINTER TO MUSIC VALUES
MOVE @WAVE,A2 ;WAVE TO PUT MUSIC TO
SLL 5,A2 ;FOR LONG WORD LOOKUP
ADD A1,A2
MOVE *A2,A0,L ;MUSIC OFFSET
JAUC ONESND ;START ROOM MUSIC
**************************************************************************
* *
* CLRBUYIN - CLEAR THE PLAYERS BUYIN COUNTERS, I.E. NO MORE BUYIN ALLOWE *
* *
**************************************************************************
;CLRBUYIN
; PUSH A0
; MOVE @WAVE,A0,W
; CMPI LASTWAVE,A0
; JREQ CLRBALW ;ALWAYS CLEAR IN THE FINAL WAVE
; ADJUST ADJBUYIN
; JRNZ CLRBXX ;ADJUSTMENT SAYS NO CLEAR
;CLRBALW
; CLR A0
; MOVE A0,@P1DATA+PBUYINS,W
; MOVE A0,@P2DATA+PBUYINS,W
;CLRBXX
; PULL A0
; RETS
;
;BOPO
; MOVB A0,@STANDBY
; CLR A0
; MOVE A0,@STARTUP
; MOVI BEEP3,A0
; CALLA ONESND
; RETS
;
KILBGND:
; KILL ALL BACKGROUND OBJECTS AND FREES ITS PALLETTE
MMTM SP,A0,A2,A3,A4,A5
MOVI BAKLST,A2,L ;ACTIVE BACKGROUND OBJECTS LIST
MOVE *A2,A0,L
JREQ KILOBX ;BR=NO MORE OBJECTS ON LIST
; CALLA DELPAL
FREEB:
MOVE A2,A3 ;SAVE PREVIOUS
MOVE *A2,A2,L ;GET NEXT BLOCK
JREQ KILOBX ;BR=ALL DONE
MOVE *A2,*A3,L ;LINK AROUND IN ACTIVE LIST
MOVE @OFREE,A5,L ;LINK INTO FREE LIST AT START
MOVE A5,*A2,L
MOVE A2,@OFREE,L ;UPDATE FREE LIST POINTER
MOVE A3,A2
JRUC FREEB ;KILL ALL OBJECTS ON BACKGROUND LIST
KILOBX:
CLR A0
MOVE A0,@BAKLST,L
MOVI 10000/16,A2 ;SIZE OF BAKBITS IN WORDS
MOVI BAKBITS,A1
KILUP:
MOVE A0,*A1+,W
DSJS A2,KILUP
MMFM SP,A0,A2,A3,A4,A5
RETS
COLRSTRT:
MOVI COLRPID,A0
CLR A1
MOVE A1,@IRQSKYE
MOVI FPALRAM,A2
MOVE A1,*A2(PALCNT),W
NOT A1
CALLA KILALL ;KILL ALL COLOR UPDATE PROCESSES
MOVI DIAGP,A0 ;CREATE DIAGNOSTICS PALLETTE
CALLA GETFPAL
CREATE COLRPID,CYCSPECT ;START COLOR CYCLE PROCESS
RETS
COLRPRC:
MOVI COLRPID,A0
CLR A1
MOVI FPALRAM,A2
MOVE A1,*A2(PALCNT),W
NOT A1
CALLA KILALL ;KILL ALL COLOR UPDATE PROCESSES
MOVI nup1,A0 ;PLAYER PALLETTE
CALLA GETFPAL
CREATE COLRPID,CYCSPECT ;START COLOR CYCLE PROCESS
MOVI NUARENAP,A0 ;SECOND SLOT NEEDED IN PALRAM FOR SCORE DIGS
CALLA GETFPAL
RETS
*
*CYCLE COLOR SPECTRUM
*
CYCSPECT
MOVI COLTAB,A8
CYCSPEC1
MOVE *A8+,A0,W ;GET A COLOR
JRN CYCSPECT ;OUT OF COLORS (NEGATIVE VALUE)
MOVI COLRTEMP,A1
MOVE A1,A2
ADDK 16,A2 ;A2 = NEXT COLOR
MOVK 15,A3
CYCSUCK
MOVE *A2+,*A1+,W ;CYCLE DOWN ONE
DSJS A3,CYCSUCK
MOVE A0,*A1 ;SHIFT IN WALLY NEW GUY
SLOOP 2,CYCSPEC1
;
;COLTAB .WORD 0380H,1380H,2380H,3380H,4380H,5380H,6380H,7380H,7300H
; .WORD 7280H,7200H,7180H,7080H,7008H,7008H,7010H,7010H,701CH
; .WORD 701CH,601CH,501CH,409CH,309CH,209CH,219CH,029CH,039CH
; .WORD 139CH,239CH,339CH,539CH,739CH,7390H,7380H,6380H,4380H
; .WORD 0FFFFH
*
*SOME MESSAGES
INSRTMSG:
.STRING "INSERT COIN"
.BYTE 0
.EVEN
PRESSMSG:
.STRING "PRESS START"
.BYTE 0
.EVEN
TOMSG
.STRING "TO"
.BYTE 0
.EVEN
CONMSG:
.STRING "CONTINUE"
.BYTE 0
.EVEN
GAMOVMSG:
.STRING "GAME OVER"
.BYTE 0
.EVEN
CRCTMSC:
.LONG CRCT1MSC,CRCT2MSC,CRCT3MSC
;
CRCT1MSC:
.LONG 0,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2,TUNE2
.LONG TUNE2,BTUNE1,TUNE2
CRCT2MSC:
.LONG 0,TUNE3,TUNE3,TUNE3,TUNE3,TUNE3,TUNE3,BTUNE1,TUNE3
.LONG TUNE3,TUNE3,TUNE3
.LONG TUNE3,TUNE3,TUNE3
.LONG TUNE3,TUNE3,TUNE3
.LONG TUNE3,TUNE3,TUNE3
CRCT3MSC:
.LONG 0,TUNE4,TUNE4,BTUNE2,TUNE4,TUNE4,TUNE2,BTUNE3,TUNE4
.LONG TUNE4,TUNE4,TUNE4
.LONG VICMSC,TUNE4,VICMSC
.LONG BTUNE2,TUNE4,TUNE4
.LONG TUNE4,BTUNE1,HIMUSC
.LONG VICMSC
.END