cruisin-usa/TRANS.ASM

1478 lines
22 KiB
NASM
Executable File

.FILE "TRANS.ASM"
*----------------------------------------------------------------------------
*CHOOSE TRANSMISSION AND RELATED ROUTINES
*
*COPYRIGHT (C) 1994 BY TV GAMES, INC.
*ALL RIGHTS RESERVED
*
.include MACS.EQU
.include OBJ.EQU
.include MPROC.EQU
.include VUNIT.EQU
.include CMOS.EQU
.include SYSID.EQU
.include SYS.EQU
.include GLOBALS.EQU
.include SNDTAB.EQU
.include PALL.EQU
.include OBJECTS.EQU
.include TEXT.EQU
.include DELTA.EQU
EPALR .word EPALRR
EPALL .word EPALRL
.bss EPALRR,129
.bss EPALRL,129
*----------------------------------------------------------------------------
*CHOOSE TRANSMISSION
*
*
CHOOSE_TRANSMISSION:
CALL CLEANUP_PALS
LDI 1,R0
STI R0,@NOAERASE
STI R0,@NOSWAP
LDI MCT,R0
STI R0,@_MODE
CALL ENGINE_COLOR_INIT
LDL chostrns_grp,AR2
CALL LOAD_SINGLE_SECTION
CALL FIX_TRANSMISSION_SCREEN
LDI @CT_LENG,AR0
LDI @EPALL,AR2
CALL PAL_FIND_RAW
STI R0,*+AR0(OPAL)
LDI *+AR0(OFLAGS),R0
OR O_1PAL,R0
STI R0,*+AR0(OFLAGS)
LDI @CT_RENG,AR0
LDI @EPALR,AR2
CALL PAL_FIND_RAW
STI R0,*+AR0(OPAL)
LDI *+AR0(OFLAGS),R0
OR O_1PAL,R0
STI R0,*+AR0(OFLAGS)
LDF 1,R0
CALL ENGINE_COLOR
CLRI R0
STI R0,@NOAERASE
STI R0,@NOSWAP
CREATE TILE_PIECES,UTIL_C|CHOOSETRANS_T
LDI 39,AR5
LGF7 CALL SIDE_DOOR
CALL WHEEL_FROM_BELOW
CALL TRANSCHOICE
PUSH AR5
LDF 1,R0
CALL ENGINE_COLOR
POP AR5
SLEEP 1
DBU AR5,LGF7
SONDFX MHIT
LDI MCT|MGO|MINFIN|MWATER,R0
STI R0,@_MODE
CLRI R0
STI R0,@NOAERASE
STI R0,@NOSWAP
FLOAT @_pot0,R0
STF R0,@GUWP
*
*CHOOSE TRANSMISSION LOOP
*
CLRI R0
STI R0,@START_HIT
LDI 10,R0
STI R0,@_countdown
CALL INIT_PEDALCHK
CTLP
LDI @START_HIT,R0
BNZ CTLPX
LDI @CT_CURSOR,AR2
LDF *+AR2(OPOSX),R0
ADDF 101,R0
FLOAT 204,R1
CALL DIV_F30
CALL ENGINE_COLOR
CALL TRANSCHOICE
CALL WHEEL_ROUT
;-------time remaining
;
LDL time,AR2
LDI 242,R2 ;R2 POS X
LDI 337,R3 ;R3 POS Y
LDI TM|ZS,R4
CALL BLTMOD2D
CALL PEDALCHK
BC CTLPX
CALL INTROTIMER
SLEEP 1
LDI @_countdown,R0
BGT CTLP
CTLPX
SONDFX TRANS
LDF @START_RADY,R2
LDI @MATRIXAI,AR2
CALL HPFIND_YMATRIX
CALL CLR_VECTORA
FLOAT -650,R0
STF R0,*+AR2(Y)
FLOAT -28000,R0
STF R0,*+AR2(Z)
LDI @MATRIXAI,R2
LDI AR2,R3
CALL MATRIX_MUL
LDF *+AR2(X),R2
ADDF @START_POS+X,R2
LDP @_CAMERAPOS+X
STF R2,@_CAMERAPOS+X
SETDP
LDF *+AR2(Y),R2
ADDF @START_POS+Y,R2
LDP @_CAMERAPOS+Y
STF R2,@_CAMERAPOS+Y
SETDP
LDF *+AR2(Z),R2
ADDF @START_POS+Z,R2
LDP @_CAMERAPOS+Z
STF R2,@_CAMERAPOS+Z
SETDP
CREATE CENTERTHEONE,UTIL_C|CHOOSECAR_T
CREATE DROPTHEOTHER,UTIL_C|CHOOSETRANS_T
CALL SNAPCURSOR
NEGF @START_RADY,R2
LDP @_CAMERARAD+Y
STF R2,@_CAMERARAD+Y
SETDP
LDI @CAMERAMATRIXI,AR2
CALL HPFIND_YMATRIX
LDL garage_grp,AR2
CALL LOAD_SINGLE_SECTION_OFFSET
SLEEP 3
SONDFX DD1
SLEEP 7
CREATE MOVE_PUSH_BOX,UTIL_C|CHOOSETRANS_T
CALL GETTHECARS
CLRI R0
STI R0,@LASTCHOICE
LDI 4,R0
STI R0,@POSES
LDI 2,R0
STI R0,@POSE
LDI 1,R0
STI R0,@CHOSEN_VEHICLE
CREATE ROUNDER,UTIL_C|CHOOSECAR_T
CLRF R0
STF R0,@DOORTHETA
SONDFX DOPEN
JSRP OPEN_DOOR_PROC
RETP
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
OPEN_DOOR_PROC:
.globl THE_CAR_CHOICE_PROC
CREATE THE_CAR_CHOICE_PROC,UTIL_C
LDI @VECTORCI,AR2
CLRF R0
STF R0,*+AR2(X)
STF R0,*+AR2(Y)
FLOAT -8500,R0
STF R0,*+AR2(Z)
LDI @MATRIXAI,R2
LDI AR2,R3
CALL MATRIX_MUL
LDF *+AR2(X),R0
ADDF @START_POS+X,R0
STF R0,*+AR2(X)
LDF *+AR2(Z),R0
ADDF @START_POS+Z,R0
STF R0,*+AR2(Z)
LDI 30,AR4
IJH LDF @DOORTHETA,R0
ADDF 0.0628,R0
STF R0,@DOORTHETA
PUSH AR4
CALL DOOR_OPENING
POP AR4
LDI @CAMERAPOSI,AR0
LDI @VECTORCI,AR1
LDF *+AR1(X),R0
SUBF *+AR0(X),R0
MPYF 0.15,R0
ADDF *+AR0(X),R0
STF R0,*+AR0(X)
LDF *+AR1(Z),R0
SUBF *+AR0(Z),R0
MPYF 0.15,R0
ADDF *+AR0(Z),R0
STF R0,*+AR0(Z)
SLEEP 1
DBU AR4,IJH
CALL DOOR_ELEMENT_DELETE_ALL
LDI UTIL_C|CHOOSETRANS_T,R0
LDI -1,R1
CALL PRC_KILLALL
LDI @EPALL,AR2
CALL PAL_FIND_RAW
LDI R0,AR2
CALL PAL_DELETE_RAW
LDI @EPALR,AR2
CALL PAL_FIND_RAW
LDI R0,AR2
CALL PAL_DELETE_RAW
RETP
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*AS THE PIECES COME SLIDING IN FROM THE SIDES,
*THE WHEEL AND PUSH TO CHOOSE COME FROM BELOW
*
WHEEL_FROM_BELOW:
LDI @CT_WHEEL,AR0
LDF *+AR0(OPOSY),R0
SUBF 8,R0
STF R0,*+AR0(OPOSY)
LDI @CT_PUSHTOCYCLE,AR0
LDF *+AR0(OPOSY),R0
SUBF 8,R0
STF R0,*+AR0(OPOSY)
LDI @CT_TURNTOSEL,AR0
LDF *+AR0(OPOSY),R0
SUBF 8,R0
STF R0,*+AR0(OPOSY)
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
CENTERTHEONE:
LDI @CHOSEN_TRANSMISSION,R0
CMPI MANUAL_TRANSMISSION,R0
LDIEQ AUD_MANUAL_TRANS_SELECTED,AR2
LDINE AUD_AUTOMATIC_TRANS_SELECTED,AR2
CALL AUDIT_INC
LDI @CHOSEN_TRANSMISSION,R0
CMPI MANUAL_TRANSMISSION,R0
LDIEQ @CT_MAN,AR4
LDINE @CT_AUTO,AR4
LDI AR4,AR2
CALL DOOR_ELEMENT_DELETE
LDI 15,AR5
CTOLP LDF *+AR4(OPOSX),R0
MPYF 0.8,R0
STF R0,*+AR4(OPOSX)
LDF *+AR4(OPOSY),R0
MPYF 0.8,R0
STF R0,*+AR4(OPOSY)
SLEEP 1
DBU AR5,CTOLP
LDF 1,R7
LDF 1,R6
FLYUPL
LDF *+AR4(ORADX),R2
SUBF 0.1,R2
STF R2,*+AR4(ORADX)
LDI AR4,AR2
ADDI OMATRIX,AR2
CALL FIND_XMATRIX
MPYF 1.4,R6
MPYF 1.4,R7
LDF *+AR4(OPOSX),R0
ADDF R6,R0
STF R0,*+AR4(OPOSX)
LDF *+AR4(OPOSY),R0
SUBF R6,R0
STF R0,*+AR4(OPOSY)
LDF *+AR4(OPOSZ),R0
SUBF R6,R0
STF R0,*+AR4(OPOSZ)
SLEEP 1
BU FLYUPL
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
DROPTHETURN:
LDI @CT_TURNTOSEL,AR4
BU J85
DROPTHECYCLE:
LDI @CT_PUSHTOCYCLE,AR4
BU J85
DROPTHEWHEEL:
LDI @CT_WHEEL,AR4
BU J85
DROPTHEOTHER:
LDI @CHOSEN_TRANSMISSION,R0
CMPI MANUAL_TRANSMISSION,R0
LDINE @CT_MAN,AR4
LDIEQ @CT_AUTO,AR4
J85 LDI AR4,AR2
CALL DOOR_ELEMENT_DELETE
J86 LDI 10,AR5
LDF 2,R6
DTOLP
LDF *+AR4(OPOSY),R0
ADDF R6,R0
STF R0,*+AR4(OPOSY)
MPYF 2,R6
SLEEP 1
DBU AR5,DTOLP
DIE
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
SIDE_DOOR:
LDI @DOORLISTI,AR4
SUBI OLINK2,AR4
DOLS LDI *+AR4(OLINK2),R0
BZ DOLSX
LDI R0,AR4
CMPI @CT_MAN,AR4
BEQ DOLS
CMPI @CT_AUTO,AR4
BEQ DOLS
LDI *+AR4(OID),R0
ANDN 0FFh,R0
CMPI 100h,R0
BNE NTLTS
LDF *+AR4(OPOSX),R0
ADDF 15,R0
STF R0,*+AR4(OPOSX)
BU DOLS
NTLTS
LDF *+AR4(OPOSX),R0
SUBF 15,R0
STF R0,*+AR4(OPOSX)
BU DOLS
DOLSX
RETS
*----------------------------------------------------------------------------
romdata
.include ENGINE.PAL
.text
*----------------------------------------------------------------------------
*
* OLINK2 - the link of the list
* OID - 1 == left
* - 2 == right
*
* OVEL? - original position
*
*
*
.bss DOORTHETA,1 ;FL
DOORLISTI: .word DOORLIST
.bss DOORLIST,1 ;UH
*
*
DO_LPPX .float -256
DO_PPZ .float 368
DO_RPPX .float 256
*
*
DOOR_OPENING:
LDF @DOORTHETA,R2
LDI @MATRIXAI,AR2
CALL FIND_YMATRIX
NEGF @DOORTHETA,R2
LDI @MATRIXBI,AR2
CALL FIND_YMATRIX
LDI @DOORLISTI,AR4
SUBI OLINK2,AR4
DOL LDI *+AR4(OLINK2),R0
BZ DOLX
LDI R0,AR4
CALL CLR_VECTORA
LDI *+AR4(OID),R0
ANDN 0FFh,R0
CMPI 100h,R0
BNE NOTLEFT
LDF *+AR4(OVELX),R0
SUBF @DO_LPPX,R0
STF R0,*+AR2(X)
LDF *+AR4(OVELZ),R0
SUBF @DO_PPZ,R0
STF R0,*+AR2(Z)
LDI @MATRIXAI,R2
LDI AR2,R3
CALL MATRIX_MUL
LDF *+AR2(X),R0
ADDF @DO_LPPX,R0
STF R0,*+AR4(OPOSX)
LDF *+AR2(Z),R0
ADDF @DO_PPZ,R0
STF R0,*+AR4(OPOSZ)
LDI @MATRIXAI,R2
LDI AR4,AR2
ADDI OMATRIX,AR2
CALL CPYMAT
BU KJL
NOTLEFT
LDF *+AR4(OVELX),R0
SUBF @DO_RPPX,R0
STF R0,*+AR2(X)
LDF *+AR4(OVELZ),R0
SUBF @DO_PPZ,R0
STF R0,*+AR2(Z)
LDI @MATRIXBI,R2
LDI AR2,R3
CALL MATRIX_MUL
LDF *+AR2(X),R0
ADDF @DO_RPPX,R0
STF R0,*+AR4(OPOSX)
LDF *+AR2(Z),R0
ADDF @DO_PPZ,R0
STF R0,*+AR4(OPOSZ)
LDI @MATRIXBI,R2
LDI AR4,AR2
ADDI OMATRIX,AR2
CALL CPYMAT
KJL
BU DOL
DOLX
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
SNAPCURSOR:
LDI @CT_CURSOR,AR2
CALL DOOR_ELEMENT_DELETE
CALL OBJ_DELETE
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*
*
*
.bss LASTCHOICEA,1
WHEEL_ROUT:
CALL GET_UNIT_WHEEL
LDI @CHOSEN_TRANSMISSION,R1
LDI @CT_CURSOR,AR2
CMPF 0.1,R0
LDFLT 0.0,R0
CMPF 0.9,R0
LDFGT 1.0,R0
CMPF 0.5,R0
BLT ISL
CMPF 0.55,R0
BGT ISR
CMPI AUTO_TRANSMISSION,R1
BEQ ISLT
ISR LDF *+AR2(OPOSX),R2
LDF 101,R0
SUBF R2,R0
MPYF 0.22,R0
ADDF *+AR2(OPOSX),R0
STF R0,*+AR2(OPOSX)
LDI MANUAL_TRANSMISSION,R0
STI R0,@CHOSEN_TRANSMISSION
BU ISDN2
ISL
CMPF 0.45,R0
BLT ISLT
CMPI MANUAL_TRANSMISSION,R1
BEQ ISR
ISLT LDF *+AR2(OPOSX),R2
LDF -101,R0
SUBF R2,R0
MPYF 0.22,R0
ADDF *+AR2(OPOSX),R0
STF R0,*+AR2(OPOSX)
LDI AUTO_TRANSMISSION,R0
STI R0,@CHOSEN_TRANSMISSION
ISDN2
LDF @STEERMN,R1
LDF @STEERMX,R2
SUBF R1,R2,R3
MPYF 0.2,R3
ADDF R3,R1
SUBF R3,R2
LDI @CHOSEN_TRANSMISSION,R0
CMPI AUTO_TRANSMISSION,R0
LDFEQ R1,R0
LDFNE R2,R0
STF R0,@WHEELPOS
LDI @CHOSEN_TRANSMISSION,R0
LDI @LASTCHOICEA,R1
CMPI R0,R1
BEQ NUTHIN
STI R0,@LASTCHOICEA
CMPI AUTO_TRANSMISSION,R0
LDIEQ GSWIPE1,AR2
LDINE GSWIPE2,AR2
CALL ONESNDFX
NUTHIN
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
DOOR_ELEMENT_DELETE_ALL:
LDI @DOORLIST,R0
DEDL LDI R0,AR0
CMPI 0,AR0
BEQ DEDX
LDI *+AR0(OLINK2),R0
LDI AR0,AR2
CALL OBJ_DELETE
BU DEDL
DEDX
CLRI R0
STI R0,@DOORLIST
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*
*PARAMETERS
* AR2 ELEMENT TO DELETE
*
DOOR_ELEMENT_DELETE:
PUSH R0
PUSH AR1
LDI @DOORLISTI,R0
SUBI OLINK2,R0 ;(we are offset pointing)
DELLP LDI R0,AR1
LDI *+AR1(OLINK2),R0
BZ FREEDE_X
CMPI R0,AR2
BNE DELLP
LDI *+AR2(OLINK2),R0
STI R0,*+AR1(OLINK2) ;LINK AROUND
FREEDE_X
POP AR1
POP R0
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
TRANSCHOICE:
CALL GET_UNIT_WHEEL
LDF PI,R2
MPYF R0,R2
SUBF HALFPI,R2
NEGF R2
LDI @CT_WHEEL,AR2
ADDI OMATRIX,AR2
CALL FIND_ZMATRIX
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*
*RETURNS
* R0 FL 0-1.0 Steering wheel position
*
.bss GUWP,1
GET_UNIT_WHEEL:
FLOAT @_pot0,R0
LDF @GUWP,R1
MPYF 0.2,R0
MPYF 0.8,R1
ADDF R1,R0
STF R0,@GUWP
SUBF @STEERMN,R0
LDF @STEERMX,R1
SUBF @STEERMN,R1
CALL DIV_F30
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
TILE_PIECES:
SLEEP 10
LDI 29,AR5
TP_LP
LDI @CT_AUTO,AR4
LDF *+AR4(ORADZ),R2
ADDF 0.3,R2
STF R2,*+AR4(ORADZ)
LDI AR4,AR2
ADDI OMATRIX,AR2
CALL FIND_ZMATRIX
LDF *+AR4(OPOSY),R0 ;300, 400
SUBF 13.3,R0
STF R0,*+AR4(OPOSY)
LDF *+AR4(OPOSX),R0
SUBF 8,R0
STF R0,*+AR4(OPOSX)
LDI @CT_MAN,AR4
LDF *+AR4(ORADZ),R2
SUBF 0.3,R2
STF R2,*+AR4(ORADZ)
LDI AR4,AR2
ADDI OMATRIX,AR2
CALL FIND_ZMATRIX
LDF *+AR4(OPOSY),R0
SUBF 13.3,R0
STF R0,*+AR4(OPOSY)
LDF *+AR4(OPOSX),R0
ADDF 8,R0
STF R0,*+AR4(OPOSX)
SLEEP 1
DBU AR5,TP_LP
DIE
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*
*Object Z values
* cursor -3
* wheel -2
* forward objects -1
* others 0
*
.bss CT_CURSOR,1
.bss CT_WHEEL,1
.bss CT_PUSHTOCYCLE,1
.bss CT_LENG,1
.bss CT_RENG,1
.bss CT_MAN,1
.bss CT_AUTO,1
.bss CT_TURNTOSEL,1
.bss TRANS_HEAD,1
*
*
FIX_TRANSMISSION_SCREEN:
LDI -1,R6
CLRI R0
STI R0,@DOORLIST
LDI @OACTIVE,AR5
FTSL LDI AR5,R0
BZ FTSLX
LDI R0,AR0
LDI *AR0,AR5
CMPI -1,R6
LDIEQ AR0,R6
STI AR5,*+AR0(OLINK2)
LDI *+AR0(OFLAGS),R0
ANDN O_1PAL,R0
OR O_NOUNIV|O_NOUROT,R0
STI R0,*+AR0(OFLAGS)
LDF *+AR0(OPOSX),R0
STF R0,*+AR0(OVELX)
LDI *+AR0(OID),R0
ANDN 0FFh,R0
CMPI 100h,R0
LDINE 600,R0
LDIEQ -600,R0
FLOAT R0
LDF *+AR0(OPOSX),R1
ADDF R1,R0
STF R0,*+AR0(OPOSX)
FIX *+AR0(OPOSZ),R0
FLOAT 368,R1
STF R1,*+AR0(OPOSZ)
STF R1,*+AR0(OVELZ)
LDI *+AR0(OID),R0
AND 0FFh,R0
CMPI 18h,R0
BNE NOTFRNT
LDI AR0,AR2
CALL OBJ_PULL
CALL OBJ_INSERTP
CALL ADD_TO_DOOR_LIST
BU FTSL
NOTFRNT
CMPI 15h,R0 ;THE WHEEL?
BNE NOT366
STI AR0,@CT_WHEEL
LDI AR0,AR2
CALL OBJ_PULL
CALL OBJ_INSERTP
LDI *+AR0(OID),R0
ANDN 0FFh,R0
CMPI 100h,R0
LDIEQ 600,R0
LDINE -600,R0
FLOAT R0
LDF *+AR0(OPOSX),R1
ADDF R1,R0
STF R0,*+AR0(OPOSX)
FLOAT 320,R0
ADDF *+AR0(OPOSY),R0
STF R0,*+AR0(OPOSY)
BU FTSL
NOT366
CMPI 14h,R0 ;CURSOR?
BNE NOTCURSOR
STI AR0,@CT_CURSOR
LDI AR0,AR2
CALL OBJ_PULL
CALL OBJ_INSERTP
CALL ADD_TO_DOOR_LIST
BU FTSL
NOTCURSOR
CMPI 10h,R0 ;LEFT ENGINE
BNE NOTLEN
STI AR0,@CT_LENG
CALL ADD_TO_DOOR_LIST
BU FTSL
NOTLEN
CMPI 11h,R0 ;RIGHT ENGINE
BNE NOTREN
STI AR0,@CT_RENG
CALL ADD_TO_DOOR_LIST
BU FTSL
NOTREN
CMPI 12h,R0 ;AUTO BOX (LEFT)
BNE NOTMAN
STI AR0,@CT_MAN
LDI AR0,AR2
CALL OBJ_PULL
CALL OBJ_INSERTP
FLOAT -240,R1
LDF *+AR0(OPOSX),R0
ADDF R1,R0
STF R0,*+AR0(OPOSX)
LDF *+AR0(OPOSY),R0
FLOAT 400,R1
ADDF R1,R0
STF R0,*+AR0(OPOSY)
LDF 9.0,R2
STF R2,*+AR0(ORADZ)
LDI AR0,AR2
ADDI OMATRIX,AR2
CALL FIND_ZMATRIX
LDI *+AR0(OID),R0
ANDN 0FFh,R0
CMPI 100h,R0
LDIEQ 600,R0
LDINE -600,R0
FLOAT R0
LDF *+AR0(OPOSX),R1
ADDF R1,R0
STF R0,*+AR0(OPOSX)
CALL ADD_TO_DOOR_LIST
BU FTSL
NOTMAN
CMPI 13h,R0 ;MANUAL BOX (RIGHT)
BNE NOTAUTO
STI AR0,@CT_AUTO
LDI AR0,AR2
CALL OBJ_PULL
CALL OBJ_INSERTP
FLOAT 240,R1
LDF *+AR0(OPOSX),R0
ADDF R1,R0
STF R0,*+AR0(OPOSX)
LDF *+AR0(OPOSY),R0
FLOAT 400,R1
ADDF R1,R0
STF R0,*+AR0(OPOSY)
LDF -9.0,R2
STF R2,*+AR0(ORADZ)
LDI AR0,AR2
ADDI OMATRIX,AR2
CALL FIND_ZMATRIX
LDI *+AR0(OID),R0
ANDN 0FFh,R0
CMPI 100h,R0
LDIEQ 600,R0
LDINE -600,R0
FLOAT R0
LDF *+AR0(OPOSX),R1
ADDF R1,R0
STF R0,*+AR0(OPOSX)
CALL ADD_TO_DOOR_LIST
BU FTSL
NOTAUTO
CMPI 16h,R0 ;PUSH TO CYCLE?
BNE NOTPTCYC
STI AR0,@CT_PUSHTOCYCLE
LDI AR0,AR2
CALL OBJ_PULL
CALL OBJ_INSERTP
LDI *+AR0(OID),R0
ANDN 0FFh,R0
CMPI 100h,R0
LDIEQ 600,R0
LDINE -600,R0
FLOAT R0
LDF *+AR0(OPOSX),R1
ADDF R1,R0
STF R0,*+AR0(OPOSX)
FLOAT 320,R0
ADDF *+AR0(OPOSY),R0
STF R0,*+AR0(OPOSY)
LDI AR0,AR4
CREATE CYCLE_PUSH,UTIL_C|CHOOSECAR_T
BU FTSL
NOTPTCYC
CMPI 17h,R0 ;PUSH TO CYCLE?
BNE NOTWHELTOSEL
STI AR0,@CT_TURNTOSEL
LDI AR0,AR2
CALL OBJ_PULL
CALL OBJ_INSERTP
LDI *+AR0(OID),R0
ANDN 0FFh,R0
CMPI 100h,R0
LDIEQ 600,R0
LDINE -600,R0
FLOAT R0
LDF *+AR0(OPOSX),R1
ADDF R1,R0
STF R0,*+AR0(OPOSX)
FLOAT 320,R0
ADDF *+AR0(OPOSY),R0
STF R0,*+AR0(OPOSY)
LDI AR0,AR4
CREATE TURNTO_SELECT,UTIL_C|CHOOSECAR_T
BU FTSL
NOTWHELTOSEL
CALL ADD_TO_DOOR_LIST
BU FTSL
FTSLX
STI R6,@TRANS_HEAD
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
MOVE_PUSH_BOX:
LDI @CT_TURNTOSEL,AR6
LDI @CT_PUSHTOCYCLE,AR4
LDI 10,AR5
MVPBL
LDF *+AR4(OPOSX),R0
ADDF 4,R0
STF R0,*+AR4(OPOSX)
LDF *+AR4(OPOSY),R0
ADDF 3,R0
STF R0,*+AR4(OPOSY)
LDF *+AR6(OPOSX),R0
ADDF -4,R0
STF R0,*+AR6(OPOSX)
LDF *+AR6(OPOSY),R0
ADDF 3,R0
STF R0,*+AR6(OPOSY)
SLEEP 1
DBU AR5,MVPBL
DIE
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
TRNTABI .word TRNTAB
TRNTAB .word whel1,whel2,whel3,whel4,whel3,whel2,-1
TURNTO_SELECT:
LDI @TRNTABI,AR5
TURNLP LDI *AR5++,R0
CMPI -1,R0
BEQ TURNTO_SELECT
STI R0,*+AR4(OROMDATA)
SLEEP 5
BU TURNLP
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
CYCTABI .word CYCTAB
CYCTAB .word trm3,trm2,trm1,trm2,trm3,trm4,-1
CYCLE_PUSH:
LDI @CYCTABI,AR5
SLEEP 16
CYCLP
LDI *AR5++,R0
CMPI -1,R0
BEQ CYCLE_PUSH
STI R0,*+AR4(OROMDATA)
LDI @NFRAMES,R1
LDI 6,R0
CALL DIV_I30
LDI R0,AR2
CALL PRC_SLEEP
BU CYCLP
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*
*
*PARAMETERS
* AR0 DOOR OBJECT
*
ADD_TO_DOOR_LIST:
LDI @DOORLIST,R0
STI R0,*+AR0(OLINK2)
STI AR0,@DOORLIST
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*
*
*
*
ENGINE_COLOR_INIT:
LDI @EPALR,AR0
LDI trmeng1_p,AR3
ADDI @PALROMI,AR3
LDI *AR3,AR3 ;NOW HOLDS RAM LOCATION
LDI *AR3++,R0
STI R0,*AR0++
LDI R0,AR2
AND 0FFFh,AR2
RS 1,AR2
SUBI 1,AR2
L342 LDI *AR3++,R0
STI R0,*AR0++
DBU AR2,L342
LDI @EPALR,AR2
CALL PAL_ALLOC_RAW
LDI @EPALL,AR0
LDI trmeng1_p,AR3
ADDI @PALROMI,AR3
LDI *AR3,AR3 ;NOW HOLDS RAM LOCATION
LDI *AR3++,R0
STI R0,*AR0++
LDI R0,AR2
AND 0FFFh,AR2
RS 1,AR2
SUBI 1,AR2
L343 LDI *AR3++,R0
STI R0,*AR0++
DBU AR2,L343
LDI @EPALL,AR2
CALL PAL_ALLOC_RAW
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*
*
*
*PARAMETERS
* R0 PERCENTAGE OF LEFT BRIGHTNESS
*
*
ENGINE_COLOR:
PUSH R5
PUSHFL R6
PUSHFL R7
LDF R0,R7 ;PERCENTAGE OF LEFT
CMPF 0.08,R0
LDFLT 0,R0
CMPF 0.92,R0
LDFGT 1.0,R0
LDI @EPALL,AR0
LDI trmeng1_p,AR3
ADDI @PALROMI,AR3
LDI *AR3,AR3 ;NOW HOLDS RAM LOCATION
LDL trmeng1_chrome,AR2
LDI *AR3++,R0
LDI *AR2++,R0
ANDN 0FFFh,R0
ADDI 64,R0
STI R0,*AR0++
LDI 31,AR5
L894
LDI *AR3++,R4 ;get src2 (TRUE)
LDI R4,R5
AND 01Fh,R5
FLOAT R5
LDI *AR2++,R0 ;get src2 (TPAL)
LDI R0,R1
AND 01Fh,R1
FLOAT R1
SUBF R5,R1,R6 ;TPAL-TRUE->C
MPYF R7,R6 ;C*UNIT
ADDF R5,R6,R1 ;C+A->D
FIX R1
LDI R4,R5 ;TRUE
RS 5,R5
AND 01Fh,R5
FLOAT R5
LDI R0,R2 ;TPAL
RS 5,R2
AND 01Fh,R2
FLOAT R2
SUBF R5,R2,R6 ;TRUE-TPAL->C
MPYF R7,R6
ADDF R5,R6,R2
FIX R2
LS 5,R2
OR R2,R1
LDI R4,R5 ;TRUE
RS 10,R5
AND 01Fh,R5
FLOAT R5
LDI R0,R2 ;TPAL
RS 10,R2
AND 01Fh,R2
FLOAT R2
SUBF R5,R2,R6 ;TRUE-TPAL
MPYF R7,R6
ADDF R5,R6,R2
FIX R2
LS 10,R2
OR R2,R1
PUSH R1
;----second word----------
RS 16,R4 ;get src1(B)
RS 16,R0 ;get src2(B)
LDI R4,R5 ;TRUE
AND 01Fh,R5
FLOAT R5
LDI R0,R1 ;TPAL
AND 01Fh,R1
FLOAT R1
SUBF R5,R1,R6 ;TPAL-TRUE
MPYF R7,R6
ADDF R5,R6,R1
FIX R1
LDI R4,R5 ;--
RS 5,R5
AND 01Fh,R5
FLOAT R5
LDI R0,R2
RS 5,R2
AND 01Fh,R2
FLOAT R2
SUBF R5,R2,R6
MPYF R7,R6
ADDF R5,R6,R2
FIX R2
LS 5,R2
OR R2,R1
LDI R4,R5 ;--
RS 10,R5
AND 01Fh,R5
FLOAT R5
LDI R0,R2
RS 10,R2
AND 01Fh,R2
FLOAT R2
SUBF R5,R2,R6
MPYF R7,R6
ADDF R5,R6,R2
FIX R2
LS 10,R2
OR R2,R1
POP R4
LS 16,R1
OR R4,R1
STI R1,*AR0++
DBU AR5,L894
LDF 1.0,R0
SUBF R7,R0,R7
LDI @EPALL,AR2
CALL PAL_FIND_RAW
LDI *AR2++,R3
LDI R0,R2
CALL PAL_SET
*
*
*
*
*
LDI @EPALR,AR0
LDI trmeng1_p,AR3
ADDI @PALROMI,AR3
LDI *AR3,AR3 ;NOW HOLDS RAM LOCATION
LDL trmeng1_chrome,AR2
LDI *AR3++,R0
LDI *AR2++,R0
ANDN 0FFFh,R0
ADDI 64,R0
STI R0,*AR0++
LDI 31,AR5
L894D
LDI *AR3++,R4 ;get src2 (TRUE)
LDI R4,R5
AND 01Fh,R5
FLOAT R5
LDI *AR2++,R0 ;get src2 (TPAL)
LDI R0,R1
AND 01Fh,R1
FLOAT R1
SUBF R5,R1,R6 ;TPAL-TRUE->C
MPYF R7,R6 ;C*UNIT
ADDF R5,R6,R1 ;C+A->D
FIX R1
LDI R4,R5 ;TRUE
RS 5,R5
AND 01Fh,R5
FLOAT R5
LDI R0,R2 ;TPAL
RS 5,R2
AND 01Fh,R2
FLOAT R2
SUBF R5,R2,R6 ;TRUE-TPAL->C
MPYF R7,R6
ADDF R5,R6,R2
FIX R2
LS 5,R2
OR R2,R1
LDI R4,R5 ;TRUE
RS 10,R5
AND 01Fh,R5
FLOAT R5
LDI R0,R2 ;TPAL
RS 10,R2
AND 01Fh,R2
FLOAT R2
SUBF R5,R2,R6 ;TRUE-TPAL
MPYF R7,R6
ADDF R5,R6,R2
FIX R2
LS 10,R2
OR R2,R1
PUSH R1
;----second word----------
RS 16,R4 ;get src1(B)
RS 16,R0 ;get src2(B)
LDI R4,R5 ;TRUE
AND 01Fh,R5
FLOAT R5
LDI R0,R1 ;TPAL
AND 01Fh,R1
FLOAT R1
SUBF R5,R1,R6 ;TPAL-TRUE
MPYF R7,R6
ADDF R5,R6,R1
FIX R1
LDI R4,R5 ;--
RS 5,R5
AND 01Fh,R5
FLOAT R5
LDI R0,R2
RS 5,R2
AND 01Fh,R2
FLOAT R2
SUBF R5,R2,R6
MPYF R7,R6
ADDF R5,R6,R2
FIX R2
LS 5,R2
OR R2,R1
LDI R4,R5 ;--
RS 10,R5
AND 01Fh,R5
FLOAT R5
LDI R0,R2
RS 10,R2
AND 01Fh,R2
FLOAT R2
SUBF R5,R2,R6
MPYF R7,R6
ADDF R5,R6,R2
FIX R2
LS 10,R2
OR R2,R1
POP R4
LS 16,R1
OR R4,R1
STI R1,*AR0++
DBU AR5,L894D
LDI @EPALR,AR2
CALL PAL_FIND_RAW
LDI *AR2++,R3
LDI R0,R2
CALL PAL_SET
POPFL R7
POPFL R6
POP R5
RETS
*----------------------------------------------------------------------------
.END