revolution-x/GXMISC.ASM

955 lines
24 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.

.MLIB "GXMACS.LIB"
.FILE "GXMISC.ASM"
.TITLE "<<< GENERATION X - MISCELLANEOUS ROUTINES >>>"
.WIDTH 132
.OPTION B,D,L,T
.MNOLIST
**************************************************************************
* *
* COPYRIGHT (C) 1992 MIDWAY MANUFACTURING COMPANY. *
* ALL RIGHTS RESERVED. *
* *
**************************************************************************
.INCLUDE "GX.INC"
.INCLUDE "GXSTRING.H"
.INCLUDE "IMGTBL.GLO"
.INCLUDE "BGNDTBL.GLO"
.DEF COLOR_START, DUMP_IT
.DEF SKYUP, SKYDOWN
.DEF BUYINWIN
.DEF BUYWIN_Z
.DEF SECURITY
.DEF SKYWHITE, SKYNORM
*SYMBOLS IN AP.ASM
.REF DUXNOFADE
*SYMBOLS IN GXRAM.ASM
.REF COLRTEMP, SKYCOLOR, BTIME, SEC_FLAG, BUYIN_SECS, BUYIN_NOFADE
.REF BUYIN_RESETS
*SYMBOLS IN APPALL.ASM
.REF PALSET
*SYMBOLS IN APCOIN.ASM
.REF CR_CONTP
*SYMBOLS IN APPOWER.ASM
.REF CLR_HEADS_UP, CLR_PLAYER_TEXT
*SYMBOLS IN APCMOS.ASM
.REF ADD_DUMP
*SYMBOLS IN APPROC.ASM
.IF NOTFINAL
.REF THISWAKE
.ENDIF
*SYMBOLS IN APPRNT.ASM
.IF PRINTER
.REF PRINT_DUMP
.ENDIF
***** from GXDTST.ASM
.ref _pic_secure
.EVEN
.TEXT
**************************************************************************
* *
* NOTE: PLACE THESE TWO DUMB COLLISION VECTORS IN A USABLE *
* POSITION SOMEDAY!!!! *
* *
**************************************************************************
DUMCRETS ;COLLISION RETURN TO CONTINUE SCAN
CLRZ
RETS
DUMCOLL ;LABEL FOR THE COMMON CAUSE
.WORD 0
.LONG DUMCRETS ;DO NOTHING
**************************************************************************
* *
* DUMPPRINT - Do a register dump to the Printer, if it's installed. *
* If not, then go to CMOS. *
* *
* If DEBUG then we jsut hang here. *
* If PRINTER & ~DEBUG then PRINT registers. *
* If ~PRINTER & ~DEBUG then Write to CMOS. *
* *
**************************************************************************
DUMPPRINT
.IF DEBUG
JRUC $
RETS ;USE THIS TO JUMP BACK.
.ELSE
MOVE *SP,B14,L ;Grab the return address for dump
.IF PRINTER
JAUC PRINT_DUMP
.ELSE
PUSH A0
AUDIT AUDWARNING
PULLQ A0
CLR A14
JRUC DUMP_IT
.ENDIF
.ENDIF
**************************************************************************
* *
* DUMP_IT - Dump Registers and relevent info to the CMOS dump pages. *
* A14 = Dump Code *
* B14 = Return Address *
* *
**************************************************************************
DUMP_IT
MMTM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8
MOVE A0,A7
; PUSH A14
; PUSH B14
; MOVI AUDUPTIME,A0
; CALLA GET_AUD
; MOVE A1,A6
; PULLQ B14
; PULLQ A14
MOVE @TIMER,A0,W
SLL 4,A0
OR A14,A0
SLL 16,A0
MOVE @GAME_STATE,A14,W
MOVX A14,A0 ;A0 = [CODE, GSTATE]
MOVE @WAVE,A1,W
SLL 16,A1
MOVE @CURPLYRS,A14,W
MOVX A14,A1 ;A1 = [WAVE, # OF PLAYERS]
; MOVE *SP(120H),A2,L ;A2 = RETURN ADDRESS
MOVE B14,A2 ;A2 = RETURN ADDRESS
.IF NOTFINAL
MOVE @THISWAKE,A3,L ;A3 = LAST WAKE-UP ADDRESS
.ENDIF
MOVE @WAVETIME,A4,L ;A4 = ELAPSED WAVE TIME
MOVE @XBASE,A5,L
MOVE @YBASE,A6,L
MOVE @ZBASE,A7,L
MOVE @ZREL_OFF,A8,L
SRA ZFRAC,A8
;NEED TO SEND WORLD COORDINATES ALSO
CALLA ADD_DUMP
MMFM SP,A0,A1,A2,A3,A4,A5,A6,A7,A8
RETS
**************************************************************************
* *
* SECURITY - AND FINALLY ... THERE IS SECURITY! *
* B0 = RETURN ADDRESS *
* SETS GLOBAL SEC_FLAG TO 1 IF BREECH! *
* NOTE: TRASHES A0,A1,A2,A3,A4,A6 *
* *
**************************************************************************
SECURITY
move @_pic_secure,a0,W
; CLR A0
MOVE A0,@SEC_FLAG,W
FRET B0
**************************************************************************
* *
* COLOR_START - START THE COLOR RAM PROCESSES *
* *
**************************************************************************
COLOR_START
MMTM SP,A0,A1,A7
MOVI PID_COLOR,A0
CALLA KILLPROC_ALL
CREATE PID_COLOR,LFLASH
CREATE PID_COLOR,RGB
CREATE PID_COLOR,BPR
CREATE PID_COLOR,DECAY
MMFM SP,A0,A1,A7
RETS
**************************************************************************
* *
* TABLE DRIVEN COLOR RAM PROCESSES *
* *
**************************************************************************
* xxxxxA0(10) - RGB
* xxxxxB0(11) - BPR
* xxxxxC0(12) - DECAY
* xxxxxD0(13) - LASER FLASH
RGB CALLR TABDRIVE
.LONG RGBTAB,COLRTEMP+0A0H
.WORD 8
RGBTAB .WORD 07C00H,001FH,077A0h,0741Ah,0FFFFH
*
DECAY CALLR TABDRIVE
.LONG DCATAB,COLRTEMP+0C0H
.WORD 2
DCATAB .WORD 001CH,001CH,011CH,021CH,031CH,039CH,239CH,2390H,2388H
.WORD 2380H,4300H,5280H,7180H,6180H,7080H,7000H,6000H,5000H
.WORD 4000H,3000H,2000H,1000H,0FFFFH
*
BPR CALLR TABDRIVE
.LONG BPRTAB,COLRTEMP+0B0H
.WORD 1
BPRTAB .WORD 001CH,101CH,201CH,301CH,401CH,501CH,601CH,701CH,7010H
.WORD 7010H,7008H,7008H,7000H,7000H,7008H,7008H,7010H,7010H
.WORD 701CH,701CH,601CH,501CH,401CH,301CH,201CH,101CH,0FFFFH
**************************************************************************
* *
* LFLASH - PROCESS TO CREATE THE FAMOUS LASER FLASH COLOR *
* *
**************************************************************************
LFLASH MOVI 07FFFH,A0
MOVE A0,@COLRTEMP+0D0H,W
SLEEP 2
LFLASH1
MOVE @RAND,A0,W
ANDI 0000001FH,A0
MOVI COLTAB,A1
SLL 4,A0
ADD A0,A1
MOVE *A1,A1,W
MOVE A1,@COLRTEMP+0D0H,W
SLEEP 6
JRUC LFLASH
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
**************************************************************************
* *
* THE TABLE DRIVEN PROCESS *
* *
**************************************************************************
TABDRIVE
MOVE *SP+,A0,L
MOVE *A0+,A11,L ;A11 = TABLE START
MOVE *A0+,A9,L ;A9 = LOCATION TO STUFF COLOR
MOVE *A0,A10,W ;A10 = SLEEP TIME
TABDRV1
MOVE A11,A8 ;RESET TO START OF TABLE
TABDRV2
MOVE *A8+,A0,W ;GET A COLOR
JRN TABDRV1 ;BR = END OF TABLE
MOVE A0,*A9,W
MOVE A10,A0
MOVI TABDRV2,A7
JAUC PRCLSP ;LOOP SLEEP
**************************************************************************
* *
* CYCLE16 - PROCESS TO CYCLE UP TO SIXTEEN COLORS OF A GIVEN PALETTE. *
* A8 = PTR TO PALETTE (PALETTE MUST BE ALLOCATED). *
* A9 = START COLOR # *
* A10 = END COLOR # *
* A11 = SPEED *
* *
**************************************************************************
CYCLE16:
MOVE A11,*A13(PDATA),W ;KEEP THE SLEEP TIME
MOVE A10,A2
CLR A11 ;THIS WILL BE THE DIRECTION FLAG
SUB A9,A2
JRNN CYCLE16_FOR ;BR = FOWARD CYCLE
ABS A2
NOT A11 ;FLAG A REVERSE CYCLE
SWAP A9,A10 ;SWAP THESE FOR LOAD
CYCLE16_FOR:
MOVE A9,*A13(PDATA+10H),W ;STORE THE START COLOR
MOVE A9,A3
MOVE A13,A9
ADDI PDATA+60H,A9 ;START COLOR ADDRESS
MOVE A9,A10
MOVE A2,A4
SLL 4,A4
ADD A4,A10 ;END COLOR ADDRESS
MOVE A8,A0
MOVE A9,A1 ;THIS IS THE STARTING COLOR LOCATION
ADDK 16,A0 ;SKIP THE COLOR COUNT
SLL 4,A3
ADD A3,A0 ;AND GET TO THE START COLOR
INC A2
MOVE A2,*A13(PDATA+20H),W ;STORE THE COLOR COUNT
CYCLE16_LOAD:
MOVE *A0+,*A1+,W ;TRANSFER THE PALETTE TO RAM
DSJS A2,CYCLE16_LOAD
CYCLE16_WAIT:
MOVE A8,A0
CALLA FINDPAL ;DOES THIS PALETTE EXIST?
JRNZ CYCLE16_FND ;BR = YES, GO AHEAD AND CYCLE
SLOOP 6,CYCLE16_WAIT ;WAIT FOR IT TO EXIST
CYCLE16_FND:
MOVE A0,A7 ;STORE FOUND PALETTE NUMBER HERE
MOVE *A13(PDATA+20H),A4,W ;DO IT THIS MANY TIMES
DEC A4 ;WATCH THE ZERO BASE
MOVE A11,A11 ;CHECK DIRECTION
JRNN CYCLE16_UP ;BR = CYCLE COLORS UP
MOVE A9,A1 ;GET THE END COLOR
MOVE *A1,A3,W ;STORE THE COLOR
MOVE A10,A2
MOVE A1,A0
ADDK 16,A1
CYCLE16_DN_LP:
MOVE *A1+,*A0+,W
DSJS A4,CYCLE16_DN_LP
JRUC CYCLE16_DONE
CYCLE16_UP:
MOVE A10,A1 ;GET THE END COLOR
MOVE *A1,A3,W ;STORE THE COLOR
MOVE A9,A2
MOVE A1,A0
ADDK 16,A1
CYCLE16_UP_LP:
MOVE -*A0,-*A1,W
DSJS A4,CYCLE16_UP_LP
CYCLE16_DONE:
MOVE A3,*A2,W ;WRAP COLOR
MOVE A9,A0
MOVE *A13(PDATA+10H),A1,W
ZEXT A7
**** .IF YUNIT
**** SRL 12,A7
**** .ELSE
SRL 8,A7
**** .ENDIF
SLL 8,A7
OR A7,A1 ;DESTINATION: 8-15 PALETTE, 0-7 START
MOVE *A13(PDATA+20H),A2,W ;GET THE COUNT
CALLA PALSET ;SETUP A TRANSFER
MOVE *A13(PDATA),A0,W
SLOOPR A0,CYCLE16_WAIT
**************************************************************************
* *
* CYCLE1 - PROCESS TO CYCLE ONE COLOR OF A PALETTE THROUGH DIFFERENT *
* VALUES. *
* A8 = PALETTE I.D. PROCESS WILL WAIT 'TIL PALETTE IS ALLOCATED. *
* A9 = TABLE OF COLORS *
* A10 = COLOR # *
* A11 = SPEED *
* *
**************************************************************************
CYCLE1:
MOVE A9,*A13(PDATA+10H),L ;STORE THE TABLE START ADDRESS
CYCLE1_WAIT:
MOVE A8,A0
CALLA FINDPAL ;DOES THIS PALETTE EXIST?
JRNZ CYCLE1_FND ;BR = YES, GO AHEAD AND CYCLE
SLOOP 6,CYCLE1_WAIT ;WAIT FOR IT TO EXIST
CYCLE1_FND:
MOVE A0,A8 ;KEEP FOR SUCCESSIVE ITERATIONS
MOVE A0,A5
CALLA INC_PALCNT ;SURELY YOUR NOT GOING ANYWHERE
ZEXT A8
SRL 8,A8
SLL 8,A8
CYCLE1_LP
MOVE A10,A1 ;COLOR NUMBER
OR A8,A1 ;DESTINATION: 8-15 PALETTE, 0-7 START
MOVE A9,A0
MOVK 1,A2
CALLA PALSET ;SETUP A TRANSFER
ADDK 16,A9 ;INCREMENT TABLE PTR
MOVE *A9,A14,W
JRNN CYCLE1_SLP
MOVE *A13(PDATA+10H),A9,L ;RESET TO THE HEAD OF THE TABLE
CYCLE1_SLP
SLOOPR A11,CYCLE1_LP
BUYWIN_Z .EQU 7FFF0001H
CURR_BUY_MESS .EQU PDATA ;UHL Ptr to current Text string
BUY_LINE1_OBJ .EQU PDATA+20H ;UHL Ptr to Line 1 string object
BUY_LINE2_OBJ .EQU PDATA+40H ;UHL Ptr to Line 2 string object
BUY_TIME_OBJ .EQU PDATA+60H ;UHL Ptr to Timer string object
.BSS B_CONT_CREDS,32 ;CREDITS TO CONTINUE
.BSS B_CONT_SUFFIX,32 ;SUFFIX FOR CREDIT(S)
**************************************************************************
* *
* BUYINWIN - PUT UP THE BUY-IN WINDOW PROCESS *
* *
**************************************************************************
BUYINWIN
**** MOVI 16,A0
**** MOVI BUYWIN_Z,A1
**** MOVI [88+SKYTOPOF,198],A10
**** MOVI [120,236],A8
**** JSRP OWINDOW ;OPEN THE WINDOW
**** JRZ BUYINWDI ;COULDN'T DO IT
CALLA IAUTOE ;DO THIS JUST IN CASE
MOVE @SKYCOLOR,@IRQSKYE,W
MOVE @GROUNDCOLOR,@IRQGNDE,W
ALLPLYR CLR_HEADS_UP ;CLEAR ALL HEADS UP DISPLAYS
ALLPLYR CLR_PLAYER_TEXT ;CLEAR ANY CURRENT PLAYER TEXT
PAUSEON
MOVE @BUYIN_NOFADE,A0,L
JRNZ BIW_FADE ;BR = We have a special fade script
MOVI DUXNOFADE,A0
BIW_FADE
CALLA FADE_FULL2HALF ;DROP THE PLAYFIELD BRIGHTNESS
SLEEP 16
; SOUND1 BUYSTART_SND ;START DAT CRAZY BUYIN TING
CALLA CLRPDATA ;Initialize our data area
CALLR INIBTIME ;INITIALIZE BUY IN TIME
CALLR INIBMESS ;INITIALIZE BUY IN MESSAGE
MOVK 1,A0
MOVE A0,@BUYNOW,W
MOVKM 8,@BUYIN_RESETS,W ;Initialize the allowed reset counter
CLRM @BUYIN_SECS,W ;Clear the seconds counter
PBUYOLP
MOVI BUYTICK,A11
PBUYILP
MOVE @CURPLYRS,A0,W
JRNZ PBUYDONE_BOUGHTIN ;OTHER GUY BOUGHT IN
SLEEP BUYSLP
CALLR UPBMESS1 ;UPDATE BUYIN MESSAGE 1
DSJS A11,PBUYILP
INCM @BUYIN_SECS,W ;Increment Buy-in seconds counter
CALLR DECBTIME ;DECREMENT BUYIN TIME
JRGE PBUYOLP ;WE ARE NOT DONE YET
JRUC PBUYDONE_GAMEOVER
*
*DUDE JUST SLAMMED SOME MORE TIN. HE'S WAY COOL. WHAT A GOD.
*
PBUYDONE_BOUGHTIN
; SOUND1 BUYEND_SND ;STOP DAT CRAZY BUYIN TING
*
*DUDE JUST WIMPED OUT. HE SURE DID. WHAT A FAG!
*
PBUYDONE_GAMEOVER
CALLR CLEAR_BUY_TIME
CALLR CLEAR_BUY_MESSAGE
MOVI PID_GOODIE,A0
CALLA KILLPROC_ALL
**** MOVI 20,A0
**** JSRP CWINDOW
MOVI PID_PFADE,A0
CALLA KILLPROC_ALL
SLEEP 3
CALLA CLR_0PALS
MOVE @BUYIN_NOFADE,A0,L
JRNZ PBD_FADE ;BR = We have a special fade script
MOVI DUXNOFADE,A0
PBD_FADE
CALLA FADE_HALF2FULL ;BRING THE PLAYFIELD UP
SLEEP 20
PAUSEOFF
CLR A0
MOVE A0,@BUYNOW,W
BUYINWDI
DIE
BUYSTART_SND
.WORD 0F2FEh,001h,08012h,0
BUYEND_SND
.WORD 0F2FEh,001h,08011h,0
**************************************************************************
* *
* INIBMESS - INITIALIZE THE BUY IN MESSAGE *
* A13 = PTR TO BUY-IN PROCESS *
* *
**************************************************************************
INIBMESS
MMTM SP,A0,A1,A2,A5,A6,A8,A9,A10,A11
ADJUST ADJCCONT
MOVE A0,@B_CONT_CREDS,W
CMPI 1,A0
JRNE IB_NOSUF
MOVIM SUFFIX_NULL,@B_CONT_SUFFIX,L
JRUC IB_MESS
IB_NOSUF
MOVIM SUFFIX_S,@B_CONT_SUFFIX,L
IB_MESS
CALLA CR_CONTP ;ENOUGH TO CONTINUE?
JRLO INIBMIN ;BR = NO
MOVI PRESS_MESS,A8
JRUC INIBM1
INIBMIN
MOVI INSRT_MESS,A8
INIBM1
MOVE A8,*A13(CURR_BUY_MESS),L
CALLA LM_SETUP
CALLR GWINCENT ;POSITION
PUSH A0 ;Save the center position
.IF GERMAN
SUBI [25,0],A0 ;OFFSET FROM BOX CENTER
.ELSE
SUBI [50,0],A0 ;OFFSET FROM BOX CENTER
.ENDIF
MOVE A0,A9
CLR A0
JSRP PRINTF
MOVE A2,*A13(BUY_LINE1_OBJ),L ;Store Line 1 object
.IF GERMAN
CLR A2
.ELSE
MOVI TOCON_MESS,A8
CALLA LM_SETUP
PULLQ A9 ;Restore center position in the proper reg
SUBI [22,0],A9 ;OFFSET FROM BOX CENTER
JSRP PRINTF
.ENDIF
MOVE A2,*A13(BUY_LINE2_OBJ),L ;Store Line 2 object
MMFM SP,A0,A1,A2,A5,A6,A8,A9,A10,A11
RETS
**************************************************************************
* *
* INIBTIME - INITIALIZE THE BUY IN TIMER *
* A13 = PTR TO BUY-IN PROCESS *
* *
**************************************************************************
INIBTIME
MMTM SP,A0,A1,A2,A5,A6,A8,A9,A10,A11
CALLR CLEAR_BUY_TIME
MOVI BUYTIME,A0
MOVE A0,@BTIME,W ;STORE IT AWAY
MOVI TIME_MESS,A8
CALLA LM_SETUP
CALLR GWINCENT ;POSITION
.IF GERMAN
ADDI [10,0],A0 ;OFFSET FROM BOX CENTER
.ELSE
ADDI [35,0],A0 ;OFFSET FROM BOX CENTER
.ENDIF
MOVE A0,A9
CLR A0
JSRP PRINTF
MOVE A2,*A13(BUY_TIME_OBJ),L ;Store Timer object
MMFM SP,A0,A1,A2,A5,A6,A8,A9,A10,A11
RETS
**************************************************************************
* *
* CLEAR_BUY_MESSAGE - Clear the Buy-In message text, all lines. *
* A13 = Ptr to Buy-In process. *
* *
**************************************************************************
CLEAR_BUY_MESSAGE
CALLR CLEAR_BUY_LINE1
CALLR CLEAR_BUY_LINE2
RETS
**************************************************************************
* *
* CLEAR_BUY_LINE1 - Clear the first line of the Buy-In message. *
* A13 = Ptr to Buy-In process. *
* *
**************************************************************************
CLEAR_BUY_LINE1
PUSH A8
MOVE *A13(BUY_LINE1_OBJ),A8,L
JRZ CBM_NO_LINE1
CALLA DELETE_OBJ
CLR A8
MOVE A8,*A13(BUY_LINE1_OBJ),L
MOVE A8,*A13(CURR_BUY_MESS),L
CBM_NO_LINE1
PULLQ A8
RETS
**************************************************************************
* *
* CLEAR_BUY_LINE2 - Clear the second line of the Buy-In message. *
* A13 = Ptr to Buy-In process. *
* *
**************************************************************************
CLEAR_BUY_LINE2
PUSH A8
MOVE *A13(BUY_LINE2_OBJ),A8,L
JRZ CBM_NO_LINE2
CALLA DELETE_OBJ
CLR A8
MOVE A8,*A13(BUY_LINE2_OBJ),L
CBM_NO_LINE2
PULLQ A8
RETS
**************************************************************************
* *
* CLEAR_BUY_TIME - CLEAR THE BUY-IN TIME TEXT. *
* A13 = Ptr to BuyIn process *
* *
**************************************************************************
CLEAR_BUY_TIME
PUSH A8
MOVE *A13(BUY_TIME_OBJ),A8,L
JRZ CBT_X
CALLA DELETE_OBJ
CLR A8
MOVE A8,*A13(BUY_TIME_OBJ),L
CBT_X
PULLQ A8
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,A2,A5,A6,A8,A9,A10,A11
CALLR CLEAR_BUY_TIME
MOVE @BTIME,A0,W
DEC A0
JRLT DECBTX
MOVE A0,@BTIME,W
; CMPI BUYTIME-5,A0
CMPK 5,A0
JRNE DBT_NOSPEAK1
SOUND1 BUYHURRY_SND
DBT_NOSPEAK1
; CMPI BUYTIME-7,A0
CMPK 3,A0
JRNE DBT_NOSPEAK2
SOUND1 SND_BUYHURRY2
DBT_NOSPEAK2
MOVI TIME_MESS,A8
CALLA LM_SETUP
CALLR GWINCENT ;POSITION
.IF GERMAN
ADDI [10,0],A0 ;OFFSET FROM BOX CENTER
.ELSE
ADDI [35,0],A0 ;OFFSET FROM BOX CENTER
.ENDIF
MOVE A0,A9
CLR A0
JSRP PRINTF
MOVE A2,*A13(BUY_TIME_OBJ),L ;Store Timer object
MOVE @BTIME,A8,W ;SET STATUS
DECBTX
MMFM SP,A0,A1,A2,A5,A6,A8,A9,A10,A11
RETS
BUYHURRY_SND
.WORD 0F3E1h,26,0880Bh,0 ;"HURRY!"
SND_BUYHURRY2
.WORD 0F3E1h,46,0880Dh,0 ;"Right Now"
**************************************************************************
* *
* UPBMESS1 - UPDATE THE "PRESS START" OR "INSERT COIN" MESSAGE. *
* A13 = PTR TO BUY-IN PROCESS *
* RETURNS: *
* A11 = UPDATED SLEEP LOOP TIME FOR BUYIN THING *
* *
**************************************************************************
UPBMESS1
MMTM SP,A0,A1,A2,A5,A6,A8 ;MORE PUSHING TO COME
CALLA CR_CONTP ;ENOUGH TO CONTINUE?
JRLO UPBMIN ;BR = NO
MOVI PRESS_MESS,A8
JRUC UPBM1
UPBMIN
MOVI INSRT_MESS,A8
UPBM1
MMTM SP,A9,A10,A11 ;WATCH OUT FOR THIS BOGUSNESS
MOVE *A13(CURR_BUY_MESS),A0,L
CMP A0,A8 ;SAME MESSAGE?
JREQ UPBMESS1_X ;BR = YES
CALLR CLEAR_BUY_LINE1
MOVE A8,*A13(CURR_BUY_MESS),L ;MARK NEW MESSAGE
CALLA LM_SETUP
CALLR GWINCENT ;POSITION
.IF GERMAN
SUBI [25,0],A0 ;OFFSET FROM BOX CENTER
.ELSE
SUBI [50,0],A0 ;OFFSET FROM BOX CENTER
.ENDIF
MOVE A0,A9
CLR A0
JSRP PRINTF ;OUTPUT NEW MESSAGE
MOVE A2,*A13(BUY_LINE1_OBJ),L
UPBMESS1_X
MMFM SP,A0,A1,A2,A5,A6,A8,A9,A10,A11
RETS
**************************************************************************
* *
* GWINCENT - GET THE CURRENT TEXT WINDOW CENTER POINT. *
* RETURNS: *
* A0 = CENTER PNT. *
* *
**************************************************************************
GWINCENT
MOVI [88+SKYTOPOF,198],A0
**** MMTM SP,A1,A8
**** MOVI TEXTWOID,A0
**** CALLA EXISTOBJ_ALL
**** JRZ GWINCX
**** MOVE A0,A8
**** CALLA GET_CPNT
**** MOVE A1,A0
****GWINCX
**** MMFM SP,A1,A8
RETS
*
*SOME MESSAGES
*
.IF GERMAN
INSRT_MESS:
MESS_MAC RD20FONT,1,200,(88+SKYTOPOF),COLOR_PLF,STRCNRMO,OID_BMES1
.STRING "%d\b KREDIT%p",0
.LONG B_CONT_CREDS
.WORD COLOR_RGB
.LONG B_CONT_SUFFIX
.EVEN
PRESS_MESS:
MESS_MAC RD20FONT,1,200,(88+SKYTOPOF),COLOR_PRGB,STRCNRMO,OID_BMES1
.STRING "START DR",C_GERU,"CKEN",0
.EVEN
TOCON_MESS:
MESS_MAC RD20FONT,1,200,(88+SKYTOPOF),COLOR_PBPR,STRCNRMO,OID_BMES2
.STRING "DIESES\nSPIEL BEN",C_GERO,"TICT",0
.EVEN
.ELSE
INSRT_MESS:
MESS_MAC RD20FONT,1,200,(88+SKYTOPOF),COLOR_PLF,STRCNRMO,OID_BMES1
.STRING "%d\b CREDIT%p",0
.LONG B_CONT_CREDS
.WORD COLOR_RGB
.LONG B_CONT_SUFFIX
.EVEN
PRESS_MESS:
MESS_MAC RD20FONT,1,200,(88+SKYTOPOF),COLOR_PRGB,STRCNRMO,OID_BMES1
.STRING "PRESS START",0
.EVEN
TOCON_MESS:
MESS_MAC RD20FONT,1,200,(88+SKYTOPOF),COLOR_PBPR,STRCNRMO,OID_BMES2
.STRING "TO\nCONTINUE",0
.EVEN
.ENDIF
TIME_MESS:
MESS_MAC RD20FONT,1,200,88+SKYTOPOF,COLOR_PLF,STRCNRMO,OID_BTIME
.STRING "%d",0
.LONG BTIME
.EVEN
**************************************************************************
* *
* SKYUP - FADE UP THE SKY COLOR AND DIE *
* A9 = FADER SPEED *
* I.D. = PID_SKY *
**************************************************************************
SKYUP
MOVE *A13(PROCID),A0,W
CLR A1
NOT A1
CALLA KILALL
CLR A8
SKYUP1
MOVE @SKYCOLOR,A0,W
MOVE A8,A1
CALLA XCOLOR
MOVE A0,@IRQSKYE,W
MOVE @GROUNDCOLOR,A0,W
MOVE A8,A1
CALLA XCOLOR
MOVE A0,@IRQGNDE,W
SLEEP 1
ADD A9,A8
CMPI 10000H,A8
JRLE SKYUP1
SKYFULL
MOVE @SKYCOLOR,@IRQSKYE,W
MOVE @GROUNDCOLOR,@IRQGNDE,W
DIE
**************************************************************************
* *
* SKYDOWN - FADE DOWN THE SKY COLOR AND DIE *
* A9 = FADER SPEED *
* I.D. = PID_SKY *
* *
**************************************************************************
SKYDOWN
MOVE *A13(PROCID),A0,W
CLR A1
NOT A1
CALLA KILALL
MOVI 10000H,A8
SKYDOWN1
MOVE @SKYCOLOR,A0,W
MOVE A8,A1
CALLA XCOLOR
MOVE A0,@IRQSKYE,W
MOVE @GROUNDCOLOR,A0,W
MOVE A8,A1
CALLA XCOLOR
MOVE A0,@IRQGNDE,W
SLEEP 1
SUB A9,A8
JRGT SKYDOWN1
SKYBLACK
CLR A1
MOVE A1,@IRQSKYE,W
MOVE A1,@IRQGNDE,W
DIE
**************************************************************************
* *
* SKYWHITE - FADE UP THE SKY COLOR TO WHITE AND DIE *
* A9 = FADER SPEED *
* I.D. = PID_SKY *
**************************************************************************
SKYWHITE
MOVE *A13(PROCID),A0,W
CLR A1
NOT A1
CALLA KILALL
CLR A8
SKYWHITE1
MOVI 07FFFh,A0
MOVE A8,A1
CALLA XCOLOR
MOVE A0,@IRQSKYE,W
SLEEP 1
ADD A9,A8
CMPI 10000H,A8
JRLE SKYWHITE1
JRUC SKYFULL
**************************************************************************
* *
* SKYNORM - FADE DOWN THE SKY COLOR FROM WHITE AND DIE *
* A9 = FADER SPEED *
* I.D. = PID_SKY *
* *
**************************************************************************
SKYNORM
MOVE *A13(PROCID),A0,W
CLR A1
NOT A1
CALLA KILALL
MOVI 10000H,A8
SKYNORM1
MOVI 07FFFh,A0
MOVE A8,A1
CALLA XCOLOR
MOVE @SKYCOLOR,A14,W
CMP A14,A0
JRHS SKY_OK
MOVE A14,@IRQSKYE,W
SLEEP 1
JRUC SKYBLACK
SKY_OK
MOVE A0,@IRQSKYE,W
SLEEP 1
SUB A9,A8
JRNN SKYNORM1
JRUC SKYBLACK
**************************************************************************
* *
* XCOLOR - COLOR VALUE MULTIPLIER *
* A0 = COLOR VALUE *
* A1 = X FACTOR (MSW:INTEGER LSW:FRACTION) *
* RETURNS *
* A0 = X COLOR VALUE *
* *
**************************************************************************
XCOLOR
MMTM SP,A3,A4
CLR A4
MOVE A0,A3
SLL 27,A3
SRL 27,A3 ;NOW I GOT 'DA BLUES
MPYU A1,A3
SLL 11,A3
SRL 27,A3
OR A3,A4
MOVE A0,A3
SLL 22,A3
SRL 27,A3 ;GREENS
MPYU A1,A3
SLL 11,A3 ;STRIP GARBAGE
SRL 27,A3
SLL 5,A3
OR A3,A4
MOVE A0,A3
SLL 17,A3
SRL 27,A3 ;NOW REDS
MPYU A1,A3
SLL 11,A3
SRL 27,A3
SLL 10,A3
OR A3,A4
MOVE A4,A0
MMFM SP,A3,A4
RETS
.END