cruisin-usa/DELTA.ASM

288 lines
5.2 KiB
NASM
Executable File

.FILE "DELTA.ASM"
*----------------------------------------------------------------------------
*DELTA DRONE
*
*COPYRIGHT (C) 1994 BY TV GAMES, INC.
*ALL RIGHTS RESERVED
*
.include C30.EQU
.include OBJ.EQU
.include MACS.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
.text
*----------------------------------------------------------------------------
*GENERAL DRONE OBJECT INITIALIZATION
*
*PARAMETERS
* AR4 OBJECT (NOT INSERTED)
* AR7 PROCESS (DELTA STYLE)
*RETURNS
* AR5 CAR BLOCK
*
DELTA_OINIT:
LDI *+AR7(DELTA_MODEL),R0
CALL _CARV0 ;RETURNS BLOCK PTR IN AR0
LDI AR4,AR2
CALL OBJ_INSERT
CALL ADD_DRONE
STI AR7,*+AR4(OPLINK)
LDI 1,R0
LS O_PROC_B,R0
OR *+AR4(OFLAGS),R0
STI R0,*+AR4(OFLAGS)
LDI DM_NORMAL,R0
STI R0,*+AR7(DELTA_MODE)
LDI *+AR4(OCARBLK),AR5
LDF THROTTLE_INIT,R0 ;INITIALIZE THROTTLE AND BRAKE
STF R0,*+AR5(CARTHROTTLE)
CLRF R0
STF R0,*+AR5(CARBRAKE)
LDF MAX_ACCEL_INIT,R0
STF R0,*+AR5(CARMAXACCEL) ;SET ACCEL POWER
LDF 1.0,R0
STF R0,*+AR7(DELTA_THROTTLE)
LDI 0101h,R0 ;SET THE STARTUP LAST KNOWN OID
STI R0,*+AR7(DELTA_LAST_OID)
LDI *+AR7(DELTA_MODEL),AR2
MPYI VEHTAB_SIZE,AR2
ADDI @VEHICLE_TABLEI,AR2
LDF *+AR2(VEHTAB_MASS),R0
STF R0,*+AR5(CARMASS)
LDI *+AR2(VEHTAB_DMODEL),R0
BZ NOTDEGRADE
STI R0,*+AR4(ODEGRADE_ROM)
LDI *+AR4(OFLAGS),R0
OR O_DEGRADE,R0
STI R0,*+AR4(OFLAGS)
LDI *+AR2(VEHTAB_DMODEL2),R0
BZ NOTDEGRADE
STI R0,*+AR4(ODEGRADE_ROM2)
LDI *+AR4(OFLAGS),R0
OR O_DEGRADE2,R0
STI R0,*+AR4(OFLAGS)
NOTDEGRADE
LDI *+AR4(OID),R0
CMPI DRONE_C|VEHICLE_T|DRNE_RHO,R0
BEQ NODYNAX1
LDI *+AR2(VEHTAB_DDYNATAB),R0
BZ NODYNAX1
LDI R0,AR2
CALL DDYNA_INIT
NODYNAX1
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*DDYNA_INIT
*
*DRONE (STRIPPED DOWN) DYNAMIC OBJECT
*
*GET DYNAMIC OBJECTS FOR A CAR
*
*PARAMETERS
* AR2 TABLE POINTER
* AR4 CAR OBJECT
*
DDYNA_INIT:
PUSH R1
PUSH R2
PUSH R6
PUSH AR0
PUSH AR2
PUSH AR3
LDI O_DYNAMIC,R0 ;MAKE PARENT OBJECT DYNAMIC
LDI *+AR4(OFLAGS),R1
TSTB R0,R1
BNZ VANIX
OR R0,R1
STI R1,*+AR4(OFLAGS)
;INITIALIZE CENTERXYZ,TRANSXYZ,VERTS
;
LDI AR4,AR3
ADDI ODYNALIST,AR3
LDI *AR2++,RC ;GET DYNAMIC OBJECT COUNT
DEC RC
LDI *AR2++,R6 ;GET NUMBER OF VERTICES
RPTB WHEELLP
CALL GETDYNA ;LINK HIM INTO LIST
STI AR0,*AR3
LDI *AR2++,R0
SUBI R0,R6
SUBI 1,R0
STI R0,*+AR0(DYNANVERTS)
FLOAT *AR2++,R0
STF R0,*+AR0(DYNACENTERX)
STF R0,*+AR0(DYNATRANSX)
FLOAT *AR2++,R0
STF R0,*+AR0(DYNACENTERY)
STF R0,*+AR0(DYNATRANSY)
FLOAT *AR2++,R0
STF R0,*+AR0(DYNACENTERZ)
STF R0,*+AR0(DYNATRANSZ)
WHEELLP LDI AR0,AR3
CALL GETDYNA ;LINK HIM INTO LIST
STI AR0,*AR3
SUBI 1,R6
STI R6,*+AR0(DYNANVERTS)
CLRF R0
STF R0,*+AR0(DYNACENTERX)
STF R0,*+AR0(DYNATRANSX)
STF R0,*+AR0(DYNACENTERY)
STF R0,*+AR0(DYNATRANSY)
STF R0,*+AR0(DYNACENTERZ)
STF R0,*+AR0(DYNATRANSZ)
LDI AR0,AR3
LDI 0,R0
STI R0,*AR3 ;LAST LINK IS ZERO, DUDES
ADDI DYNAMATRIX,AR0
CALL INITMAT
*GET A CAR PROCESS
LDI @DRONE_DANI_PROCI,AR2
LDI DRONE_C|ANI_T,R2 ;PID
CALL PRC_CREATE_CHILD
STI AR0,*+AR4(ORADZ) ;DOUBLING AS A PROC PTR
VANIX
POP AR3
POP AR2
POP AR0
POP R6
POP R2
POP R1
RETS
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
*DRONE DYNA ANIMATION PROCESS
*
* SPINS WHEELS (ONLY!)
*
*PARAMETERS
* AR4 CAR OBJECT
* AR5 CAR BLOCK
* R6 X RADIANS ;FOR WHEEL SPIN
*USES
* AR3 DYNA OBJECT
* AR4 MASTER OBJECT
* AR5 CAR BLOCK
* AR6 DYNAMATRIX
* R4 OLD ORADY
* R5 Z RADIANS FOR BODY LEAN
* R6 X RADIANS FOR BODY LEAN
* R7 OLD CAR SPEED
* PDATA OLD CAR ORADY
* PDATA+1 BODY LEAN Z RADIANS
* PDATA+2 X RADIANS FOR WHEEL SPIN
*
DRONE_DANI_PROCI .word DRONE_DANI_PROC
DRONE_DANI_PROC:
LDI *+AR4(OCARBLK),AR5
LDF 0,R6 ;INIT SPIN RADIANS
STF R6,*+AR7(PDATA+2) ;SAVE WHEEL X RADIANS
LDF *+AR5(CARSPEED),R0 ;INIT SPEED
LDF R0,R7
CARPROCL
LDI 3,AR2 ;SLEEP TIME
LDI @SUSPEND_MODE,R0
CMPI SM_HALT,R0
BEQ CARSLP
LDI *+AR4(ODIST),R0
CMPI 20000,R0 ;FAR OFF JUST SLEEP
BGT CARSLP
;
;GET WHEEL SPIN MATRIX
;
LDF *+AR5(CARSPEED),R2
MPYF 0.02,R2 ;FUDGE FACTOR
ADDF *+AR7(PDATA+2),R2
STF R2,*+AR7(PDATA+2) ;SAVE WHEEL X RADIANS
LDI @MATRIXBI,AR2 ;GET X SPIN IN MATRIXB
CALL FIND_XMATRIX
LDI AR2,AR3 ;SAVE REAR WHEEL MATRIX PTR
;STUFF YOUR DYNAMIC MATRICES
;
LDI *+AR4(ODYNALIST),R0
SLOCKON Z,"DELTA\DRONE_DANI_PROC 1"
CDTOP
LDI R0,AR0
LDI *AR0,R0
BZ CARSLP
LDI AR0,AR2
ADDI DYNAMATRIX,AR2
;STUFF WHEEL
;
LDF *AR3++,R0
RPTS 7
LDF *AR3++,R0
|| STF R0,*AR2++
STF R0,*AR2++
NOP *AR3--(9)
LDI *AR0,R0
BNZ CDTOP
CARSLP
SLEEP 3
B CARPROCL
*----------------------------------------------------------------------------
.END