288 lines
5.2 KiB
NASM
Executable File
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
|