927 lines
16 KiB
Plaintext
927 lines
16 KiB
Plaintext
**************************************************************
|
||
*
|
||
* INITIATED: JUNE 27,1991
|
||
* MODIFIED: !
|
||
* SOFTWARE: SHAWN LIPTAK
|
||
*
|
||
* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC.
|
||
*
|
||
**************************************************************
|
||
.FILE 'SHAWN.ASM'
|
||
.TITLE 'TOTAL CARNAGE GAME PROGRAM'
|
||
.WIDTH 132
|
||
.OPTION B,D,L,T
|
||
.MNOLIST
|
||
|
||
.include "mproc.equ"
|
||
.include "disp.equ"
|
||
.include "\video\sys\sys.inc"
|
||
.include "\video\sys\gsp.inc"
|
||
.include "game.equ"
|
||
.include "imgtbl.glo"
|
||
.include "shawn.hdr"
|
||
|
||
|
||
;sound headers used
|
||
|
||
;symbols externally defined
|
||
|
||
.ref ANI,FRANIM,BEGINOBJ,BEGINOBJ2,PLYRPRCS
|
||
.ref BOOM3,STATUS
|
||
|
||
;symbols defined in this file
|
||
|
||
|
||
;uninitialized ram definitions
|
||
|
||
|
||
.text
|
||
|
||
|
||
********************************
|
||
* Mortar weapon
|
||
|
||
SUBR DO_SHAWN
|
||
|
||
; movi eyemaker_t,a8
|
||
; CREATE 0,eye
|
||
; movi morttnk_t,a8
|
||
; CREATE 0,morttnk
|
||
; movi morttnk2_t,a8
|
||
; CREATE 0,morttnk
|
||
; movi morttnk3_t,a8
|
||
; CREATE 0,morttnk
|
||
; movi morttnk4_t,a8
|
||
; CREATE 0,morttnk
|
||
CREATE 0,jumper_maker
|
||
DIE
|
||
|
||
eyemaker_t
|
||
.word 200,90,50,DMAWNZ,CLSENMY
|
||
.long PDOME
|
||
morttnk_t
|
||
.word 30,150,158,DMAWNZ,CLSENMY
|
||
.long MTNK6
|
||
morttnk2_t
|
||
.word 370,150,158,DMAWNZ,CLSENMY
|
||
.long MTNK6
|
||
morttnk3_t
|
||
.word 50,50,158,DMAWNZ,CLSENMY
|
||
.long MTNK6
|
||
morttnk4_t
|
||
.word 350,50,158,DMAWNZ,CLSENMY
|
||
.long MTNK6
|
||
|
||
|
||
********************************
|
||
* Slime pool
|
||
|
||
WORDPD slimex,0
|
||
WORDPD slimey,1
|
||
|
||
SUBR POND
|
||
movi DMAWNZ+M_NOCOL,a0
|
||
move a0,*a8(OFLAGS) ;Collisions off
|
||
movi CLSNEUT,a0
|
||
move a0,*a8(OID)
|
||
|
||
; callr obj_get
|
||
sp100 movi >ff,a0
|
||
callr rnd
|
||
calla PRCSLP ;SLEEP some
|
||
movk 3,a0
|
||
callr rnd
|
||
jruc sp600 ;DEBUG
|
||
btst 1,a0 ;Rnd mode
|
||
jrnz sp500
|
||
|
||
move a0,a11 ;>At player 0-1
|
||
movi slimepat_t,a9
|
||
movk 7,a0
|
||
callr rnd
|
||
addk 1,a0
|
||
move a0,a10 ;Loop 1-8
|
||
sp200 PUSH a10
|
||
movi goob_l,a10
|
||
CREATE 0,mortar_atp
|
||
PULL a10
|
||
addk 32,a9 ;Next slot
|
||
movk >1f,a0
|
||
callr rnd
|
||
jrz sp300
|
||
calla PRCSLP ;SLEEP 0-31
|
||
sp300 dsj a10,sp200
|
||
jruc sp800
|
||
|
||
sp500 movk 7,a0
|
||
callr rnd
|
||
jrz sp600 ;13% do circle
|
||
|
||
move a13,a9 ;>Random shot
|
||
addi slimex,a9
|
||
movi >ff,a0
|
||
callr rnd
|
||
subi >7f,a0
|
||
move a0,*a9 ;X
|
||
movi >7f,a0
|
||
callr rnd
|
||
subi >3f,a0
|
||
move a0,*a9(16) ;Y
|
||
PUSH a10
|
||
movi goob_l,a10
|
||
CREATE 0,mortar_relsrc
|
||
PULL a10
|
||
jruc sp800
|
||
|
||
sp600 movi slimepat2_t,a9 ;>Circle pattern
|
||
movk 3,a11
|
||
sp610 movk 16,a10
|
||
sp620 PUSH a10
|
||
movi goob_l,a10
|
||
CREATE 0,mortar_relsrc
|
||
PULL a10
|
||
addk 32,a9
|
||
dsj a10,sp620
|
||
SLEEP 20
|
||
dsj a11,sp610
|
||
|
||
sp800 move @WORLDTLY+16,a0
|
||
move *a8(OYPOS),a1
|
||
addi 250,a1
|
||
cmp a0,a1
|
||
jrgt sp100 ;Continue till scroll off bottom
|
||
move a8,a0
|
||
calla DELOBJ
|
||
DIE
|
||
|
||
|
||
slimepat_t
|
||
.word 0,0, -30,-20, 30,20, -30,20, 30,-20, -40,0, 40,0, 0,0
|
||
|
||
slimepat2_t
|
||
.word 0,-80,30,-74,56,-56,74,-30
|
||
.word 80,0,74,30,56,56,30,74
|
||
.word 0,80,-30,74,-56,56,-74,30
|
||
.word -80,0,-74,-30,-56,-56,-30,-74
|
||
|
||
.word 0,-60,23,-55,42,-42,55,-23
|
||
.word 60,0,55,23,42,42,23,55
|
||
.word 0,60,-23,55,-42,42,-55,23
|
||
.word -60,0,-55,-23,-42,-42,-23,-55
|
||
|
||
.word 0,-40,15,-37,28,-28,37,-15
|
||
.word 40,0,37,15,28,28,15,37
|
||
.word 0,40,-15,37,-28,28,-37,15
|
||
.word -40,0,-37,-15,-28,-28,-15,-37
|
||
|
||
goob_l .long slimeburst_l
|
||
LW GOOB1,2
|
||
LW GOOB2,4
|
||
LW GOOB3,4
|
||
LW GOOB4,6
|
||
LW GOOB5,8
|
||
LW GOOB6,12
|
||
LW GOOB7,4
|
||
LW GOOB8,4
|
||
LW GOOB7,4
|
||
LW GOOB6,12
|
||
LW GOOB5,8
|
||
LW GOOB4,6
|
||
LW GOOB3,4
|
||
LW GOOB2,2
|
||
LW GOOB1,2
|
||
.long 0
|
||
.long slimesplat_l
|
||
|
||
slimesplat_l
|
||
LW GOOB9,10
|
||
.long 0
|
||
slimeburst_l
|
||
LW GOOB9,10
|
||
.long 0
|
||
|
||
|
||
********************************
|
||
* Eye
|
||
|
||
WORDPD eyex,0
|
||
WORDPD eyey,1
|
||
|
||
SUBRP eye
|
||
callr obj_get
|
||
e100 movi >7f,a0
|
||
callr rnd
|
||
calla PRCSLP ;SLEEP some
|
||
movk 3,a0
|
||
callr rnd
|
||
btst 1,a0 ;Rnd mode
|
||
jrnz e500
|
||
|
||
move a0,a11 ;>At player 0-1
|
||
movi eyepat_t,a9
|
||
movk >f,a0
|
||
callr rnd
|
||
addk 1,a0
|
||
move a0,a10 ;Loop 1-16
|
||
e200 PUSH a10
|
||
movi eye_l,a10
|
||
CREATE 0,mortar_atpnoa
|
||
movk 5,a1
|
||
move a1,*a0(msinea)
|
||
PULL a10
|
||
addk 32,a9 ;Next slot
|
||
movk >f,a0
|
||
callr rnd
|
||
jrz e300
|
||
calla PRCSLP ;SLEEP 0-31
|
||
e300 dsj a10,e200
|
||
jruc e800
|
||
|
||
e500 movk 7,a0
|
||
callr rnd
|
||
jrz e600 ;13% do circle
|
||
|
||
move a13,a9 ;>Random shot
|
||
addi eyex,a9
|
||
movi >ff,a0
|
||
callr rnd
|
||
subi >7f,a0
|
||
move a0,*a9 ;X
|
||
movi >7f,a0
|
||
callr rnd
|
||
subi >3f,a0
|
||
move a0,*a9(16) ;Y
|
||
PUSH a10
|
||
movi eye_l,a10
|
||
CREATE 0,mortar_relsrcnoa
|
||
movk 5,a1
|
||
move a1,*a0(msinea)
|
||
PULL a10
|
||
jruc e800
|
||
|
||
e600 movi eyepat2_t,a9 ;>Circle pattern
|
||
movk 16,a10
|
||
e620 PUSH a10
|
||
movi eye_l,a10
|
||
CREATE 0,mortar_relsrcnoa
|
||
movk 5,a1
|
||
move a1,*a0(msinea)
|
||
PULL a10
|
||
addk 32,a9
|
||
dsj a10,e620
|
||
|
||
e800 move @WORLDTLY+16,a0
|
||
move *a8(OYPOS),a1
|
||
addi 250,a1
|
||
cmp a0,a1
|
||
jrgt e100 ;Continue till scroll off bottom
|
||
move a8,a0
|
||
calla DELOBJ
|
||
DIE
|
||
|
||
|
||
eyepat_t
|
||
.word 0,0, -30,-20, 30,20, -30,20, 30,-20, -40,0, 40,0, 0,0
|
||
|
||
eyepat2_t
|
||
.word 0,-80, 31,-74, 57,-57, 74,-31, 80,0, 74,31, 57,57, 31,74
|
||
.word 0,80, -31,74, -57,57, -74,31, -80,0, -74,-31, -57,-57, -31,-74
|
||
|
||
eye_l .long eyeburst_l
|
||
LW I1,1
|
||
LW I2,2
|
||
LW I3,4
|
||
LW I4,8
|
||
LW I5,12
|
||
LW I6,14
|
||
LW I7,14
|
||
LW I8,12
|
||
LW I9,8
|
||
LW I10,4
|
||
LW I11,2
|
||
LW I12,1
|
||
.long 0
|
||
.long eyesplat_l
|
||
|
||
eyesplat_l
|
||
LW GOOB9,10
|
||
.long 0
|
||
eyeburst_l
|
||
LW GOOB9,10
|
||
.long 0
|
||
|
||
|
||
|
||
********************************
|
||
* Mortar tank
|
||
|
||
SUBRP morttnk
|
||
callr obj_get
|
||
movi -1,a11
|
||
mt100 movi >ff,a0
|
||
callr rnd
|
||
movk 5,a0 ;DEBUG
|
||
calla PRCSLP
|
||
movk 1,a10 ;#Shots in pattern
|
||
movi mortpat_t,a9
|
||
mt200 PUSH a10
|
||
movi mortar_l,a10
|
||
CREATE 0,mortar_atp
|
||
PULL a10
|
||
addk 32,a9
|
||
; SLEEP 1
|
||
dsj a10,mt200
|
||
dsj a11,mt100
|
||
DIE
|
||
|
||
mortpat_t
|
||
.word 0,0, -30,-20, 30,20, -30,20, 30,-20
|
||
|
||
mortar_l
|
||
.long 0 ;*FRANIM
|
||
LW BALL1,2 ;82 Ticks
|
||
LW BALL2,3
|
||
LW BALL3,4
|
||
LW BALL4,6
|
||
LW BALL5,9
|
||
LW BALL6,11
|
||
LW BALL7,12
|
||
LW BALL6,11
|
||
LW BALL5,9
|
||
LW BALL4,6
|
||
LW BALL3,4
|
||
LW BALL2,3
|
||
LW BALL1,2
|
||
.long 0
|
||
.long BOOM3 ;*FRANIM
|
||
; .long 0
|
||
|
||
|
||
********************************
|
||
* Jumping object
|
||
|
||
SUBRP jumper_maker
|
||
movi -1,a11
|
||
jm100 movi >1f,a0
|
||
callr rnd
|
||
movi 60*3,a0
|
||
calla PRCSLP
|
||
movk 1,a10 ;#Shots in pattern
|
||
movi jumppat_t,a9
|
||
jm200
|
||
PUSH a10
|
||
movi jump_l,a10
|
||
CREATE 0,jumper
|
||
PULL a10
|
||
addk 32,a9
|
||
dsj a10,jm200
|
||
dsj a11,jm100
|
||
DIE
|
||
|
||
jumppat_t
|
||
.word 0,0, -30,-20, 30,20, -30,20, 30,-20
|
||
|
||
|
||
jump_l .long FIEND1 ;Pallette
|
||
.long jumpstrt_l ;*FRANIM
|
||
LW FJUMP6C,82
|
||
.long 0
|
||
.long jumpland_l ;*FRANIM
|
||
|
||
jumpstrt_l
|
||
LW FJUMP6A,10
|
||
LW FJUMP6B,10
|
||
.long 0
|
||
jumpland_l
|
||
LW FJUMP6B,10
|
||
LW FJUMP6A,10
|
||
.long 0
|
||
|
||
.if 0
|
||
jump_l .long jumpstrt_l ;*FRANIM
|
||
LW BALL1,2 ;82 Ticks
|
||
LW BALL2,3
|
||
LW BALL3,4
|
||
LW BALL4,6
|
||
LW BALL5,9
|
||
LW BALL6,11
|
||
LW BALL7,12
|
||
LW BALL6,11
|
||
LW BALL5,9
|
||
LW BALL4,6
|
||
LW BALL3,4
|
||
LW BALL2,3
|
||
LW BALL1,2
|
||
.long 0
|
||
.long jumpland_l ;*FRANIM
|
||
jumpstrt_l
|
||
LW GOOB9,10
|
||
.long 0
|
||
jumpland_l
|
||
LW GOOB9,10
|
||
.long 0
|
||
.endif
|
||
|
||
|
||
********************************
|
||
* Mortar shot (Process)
|
||
|
||
APTRPD msobj_p ,0 ;*Mortar shadow object
|
||
WORDPD mpos ,2 ;Mortar pos in arc
|
||
WORDPD msinea ,3 ;Sine add per tick
|
||
|
||
MZ .set 159
|
||
|
||
SUBRP mortar_relsrc ;A8=*Src Obj, A9=*SrcXY offset_t, A10=*Obj_t
|
||
|
||
movk 1,a0
|
||
move a0,*a13(msinea)
|
||
|
||
SUBRP mortar_relsrcnoa ;^
|
||
|
||
move *a8(OXPOS),a6 ;Get X
|
||
move *a8(OSIZEX),a3
|
||
srl 1,a3
|
||
add a3,a6
|
||
move *a8(OYPOS),a7 ;Get Y
|
||
move *a8(OSIZEY),a3
|
||
srl 1,a3
|
||
add a3,a7
|
||
jruc mortar_shot
|
||
|
||
SUBRP mortar_atp ;A8=*Src Obj, A9=*DestXY offset_t, A10=*Obj_t
|
||
;A11=0-1 (P1-P2)
|
||
movk 1,a0
|
||
move a0,*a13(msinea)
|
||
|
||
SUBRP mortar_atpnoa ;^
|
||
|
||
move @PLYRPRCS,a2,L
|
||
move @STATUS,a3
|
||
jrz ms900 ;Demo?
|
||
btst 0,a11
|
||
jrz ma20
|
||
btst 1,a3 ;P2 valid?
|
||
jrnz ma30
|
||
ma20 btst 0,a3 ;P1 valid?
|
||
jrnz ma40
|
||
ma30 move @PLYRPRCS+32,a2,L
|
||
ma40 move *a2(LEG_PTR),a2,L
|
||
move *a2(OXPOS),a6
|
||
jrz ms900
|
||
addk 10,a6
|
||
move *a2(OYPOS),a7
|
||
addk 16,a7
|
||
movk 7,a0
|
||
callr rnd
|
||
subk 3,a0
|
||
add a0,a6 ;X offset -3 to 4
|
||
movk 7,a0
|
||
callr rnd
|
||
subk 3,a0
|
||
add a0,a7 ;Y^
|
||
|
||
SUBRP mortar_shot ;A8=*Src Obj, A9=*XY offset_t, A10=*Obj_t
|
||
|
||
move *a8(OXPOS),a0 ;Get X
|
||
move *a8(OSIZEX),a3
|
||
srl 1,a3
|
||
add a3,a0 ;Center X
|
||
move *a8(OYPOS),a1 ;Get Y
|
||
move *a8(OSIZEY),a3
|
||
srl 1,a3
|
||
add a3,a1 ;Center Y
|
||
sll 16,a0
|
||
sll 16,a1
|
||
|
||
move *a9+,a3
|
||
add a3,a6 ;+X offset
|
||
sll 16,a6
|
||
sub a0,a6 ;DestX-SrcX
|
||
move *a9+,a3
|
||
add a3,a7 ;+Y offset
|
||
sll 16,a7
|
||
sub a1,a7 ;DestY-SrcY
|
||
|
||
move a6,a11
|
||
abs a11 ;A11=Distance
|
||
move a7,a5
|
||
abs a5
|
||
cmp a5,a11 ;Use max
|
||
jrhs ms30
|
||
move a5,a11
|
||
ms30
|
||
srl 6,a11 ;/64
|
||
move a11,a3
|
||
srl 2,a3
|
||
sub a3,a11 ;Sub .25 = /96
|
||
cmpi 25000,a11
|
||
jrhs ms60
|
||
movi 25000,a11 ;Minimum
|
||
|
||
ms60 sra 1,a6 ;>Scale down to A11
|
||
sra 1,a7
|
||
move a6,a2
|
||
abs a2
|
||
cmp a11,a2 ;A6&A7 < A11
|
||
jrgt ms60
|
||
move a7,a2
|
||
abs a2
|
||
cmp a11,a2
|
||
jrgt ms60
|
||
|
||
move a6,a4 ;>Fine scale up to A11
|
||
move a7,a5
|
||
sra 4,a4 ;/16
|
||
sra 4,a5
|
||
ms150 add a4,a6
|
||
add a5,a7
|
||
move a6,a2
|
||
abs a2
|
||
cmp a11,a2
|
||
jrgt ms200
|
||
move a7,a2
|
||
abs a2
|
||
cmp a11,a2
|
||
jrle ms150
|
||
|
||
ms200 move *a8(OZPOS),a3
|
||
addk 2,a3
|
||
movi DMAWNZ+M_NOCOLL,a4 ;No collisions
|
||
movi CLSDEAD,a5
|
||
move a10,a9
|
||
addk 32,a10
|
||
move *a10,a2,L ;Get *1st obj
|
||
mmtm a12,a0,a1,a3,a4,a5,a6,a7
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2 ;Get shot obj
|
||
|
||
move *a9,a9,L ;Get *FRANIM list
|
||
jrz ms250
|
||
movk 1,a1
|
||
JSRP FRANIM ;Fire sequence
|
||
|
||
ms250 mmfm a12,a0,a1,a3,a4,a5,a6,a7
|
||
movi SHADW,a2
|
||
subk 1,a3
|
||
move a8,a9
|
||
calla BEGINOBJ2 ;Get shadow obj
|
||
move a8,*a13(msobj_p),L
|
||
move a9,a8
|
||
|
||
move a10,a9
|
||
clr a0
|
||
move a0,*a13(mpos)
|
||
jruc ms400
|
||
|
||
ms300 movi DMAWNZ+M_NOCOLL,a4 ;No collisions
|
||
calla ANI ;New frame
|
||
move *a9+,a10 ;Get #ticks for frame
|
||
ms350 move *a8(OIMG),a1,L
|
||
move *a8(OSIZE),a2,L
|
||
move *a8(OFLAGS),a4
|
||
calla GANIOF
|
||
sra 16,a6 ;AniOf X
|
||
sra 16,a7 ;Y
|
||
move *a13(msobj_p),a5,L
|
||
move *a5(OXPOS),a1
|
||
sub a6,a1
|
||
move a1,*a8(OXPOS) ;Set shot X
|
||
move *a13(mpos),a0 ;New height
|
||
move *a13(msinea),a1
|
||
add a1,a0
|
||
cmpi 82,a0 ;Max table range
|
||
jrlo ms370
|
||
clr a0
|
||
ms370 move a0,*a13(mpos)
|
||
callr sine_get
|
||
srl 5,a0 ;/32
|
||
move *a5(OYPOS),a1
|
||
sub a0,a1
|
||
sub a7,a1
|
||
move a1,*a8(OYPOS) ;Set shot Y
|
||
addi MZ,a0
|
||
move a0,*a8(OZPOS)
|
||
SLEEP 1
|
||
dsj a10,ms350
|
||
ms400 move *a9+,a1,L ;Get *Img
|
||
jrnz ms300
|
||
|
||
|
||
move *a13(msobj_p),a0,L ;Kill shadow
|
||
calla DELOBJ
|
||
movi DMAWNZ,a0
|
||
move a0,*a8(OFLAGS) ;Collisions ON
|
||
movi CLSENMY+TYPLAYR+SUBFLM,a0
|
||
move a0,*a8(OID) ;Flame death
|
||
move *a9+,a9,L ;Get *FRANIM list
|
||
jrz ms880
|
||
movk 1,a1
|
||
JSRP FRANIM ;Explode
|
||
ms880 move a8,a0
|
||
calla DELOBJ
|
||
ms900 DIE
|
||
|
||
|
||
********************************
|
||
* Jumping object (Process)
|
||
|
||
APTRPD jsobj_p ,0 ;*Jumper shadow object
|
||
WORDPD jpos ,2 ;Jumper pos in arc
|
||
WORDPD jsinea ,3 ;Sine add per tick
|
||
APTRPD jobjt_p ,4 ;*Jumper object_t
|
||
WORDPD jx ,6 ;X pos
|
||
WORDPD jy ,7 ;Y pos
|
||
|
||
JZ .set 159
|
||
|
||
SUBRP jumper ;A9=*DestXY offset_t, A10=*Obj_t
|
||
|
||
movk 1,a0
|
||
move a0,*a13(jsinea)
|
||
move a10,*a13(jobjt_p),L
|
||
clr a8
|
||
|
||
jlp movk 1,a0 ;FIX!
|
||
callr rnd
|
||
move a0,a11 ;Player 0/1
|
||
|
||
move @PLYRPRCS,a2,L
|
||
move @STATUS,a3
|
||
; jrz j900 ;Demo?
|
||
btst 0,a11
|
||
jrz ja20
|
||
btst 1,a3 ;P2 valid?
|
||
jrnz ja30
|
||
ja20 btst 0,a3 ;P1 valid?
|
||
jrnz ja40
|
||
ja30 move @PLYRPRCS+32,a2,L
|
||
ja40 move *a2(LEG_PTR),a2,L
|
||
move *a2(OXPOS),a6
|
||
; jrz j900
|
||
addk 10,a6
|
||
move *a2(OYPOS),a7
|
||
addk 16,a7
|
||
movk 7,a0
|
||
callr rnd
|
||
subk 3,a0
|
||
add a0,a6 ;X offset -3 to 4
|
||
movk 7,a0
|
||
callr rnd
|
||
subk 3,a0
|
||
add a0,a7 ;Y^
|
||
|
||
move a8,a8 ;Have an object?
|
||
jrnz j60
|
||
|
||
movi >ff,a0 ;>Start off screen
|
||
callr rnd
|
||
move @WORLDTLY+16,a1
|
||
add a0,a1
|
||
move @WORLDTLX+16,a0
|
||
subk 30,a0
|
||
|
||
; move *a9+,a3
|
||
; add a3,a6 ;+X offset
|
||
; move *a9+,a3
|
||
; add a3,a7 ;+Y offset
|
||
jruc j100
|
||
|
||
|
||
j60 move *a13(jx),a0 ;Get XY
|
||
move *a13(jy),a1
|
||
|
||
j100
|
||
move a0,a6 ;DEBUG
|
||
addi 50,a6
|
||
move a1,a7
|
||
|
||
sll 16,a0
|
||
sll 16,a1
|
||
|
||
sll 16,a6
|
||
sll 16,a7
|
||
sub a0,a6 ;DestX-SrcX
|
||
sub a1,a7 ;DestY-SrcY
|
||
|
||
move a6,a11
|
||
abs a11 ;A11=Distance
|
||
move a7,a2
|
||
abs a2
|
||
cmp a2,a11 ;Use max
|
||
jrhs j120
|
||
move a2,a11
|
||
j120
|
||
srl 6,a11 ;/64
|
||
move a11,a2
|
||
srl 2,a2
|
||
sub a2,a11 ;Sub .25 = /96
|
||
|
||
cmpi 25000,a11
|
||
jrhs j140
|
||
movi 25000,a11 ;Minimum
|
||
|
||
j140 sra 1,a6 ;>Scale down to A11
|
||
sra 1,a7
|
||
move a6,a2
|
||
abs a2
|
||
cmp a11,a2 ;A6&A7 < A11
|
||
jrgt j140
|
||
move a7,a2
|
||
abs a2
|
||
cmp a11,a2
|
||
jrgt j140
|
||
|
||
move a6,a4 ;>Fine scale up to A11
|
||
move a7,a5
|
||
sra 4,a4 ;/16
|
||
sra 4,a5
|
||
jrnz j150
|
||
move a4,a4
|
||
jrz j200 ;Both 0 then skip
|
||
j150 add a4,a6
|
||
add a5,a7
|
||
move a6,a2
|
||
abs a2
|
||
cmp a11,a2
|
||
jrgt j200
|
||
move a7,a2
|
||
abs a2
|
||
cmp a11,a2
|
||
jrle j150
|
||
|
||
j200 move a8,a8
|
||
jrz j220 ;No object?
|
||
|
||
move *a13(jobjt_p),a10,L ;Get start of table
|
||
addk 32,a10
|
||
move *a10+,a9,L ;Get *FRANIM list
|
||
jrz j210
|
||
mmtm a12,a0,a1,a6,a7 ;Save XY&Vel
|
||
movk 1,a1
|
||
JSRP FRANIM ;Jump sequence
|
||
mmfm a12,a0,a1,a6,a7
|
||
j210 movi 100,a3 ;Z
|
||
movi DMAWNZ+M_NOCOLL,a4 ;No collisions
|
||
movi CLSDEAD,a5
|
||
jruc j260
|
||
|
||
|
||
j220 movi 100,a3 ;Z
|
||
movi DMAWNZ+M_NOCOLL,a4 ;No collisions
|
||
movi CLSDEAD,a5
|
||
move *a10+,a2,L ;Get *1st obj with Pallette
|
||
mmtm a12,a0,a1,a3,a4,a5,a6,a7
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2 ;Get shot obj
|
||
|
||
move *a10+,a9,L ;Get *FRANIM list
|
||
jrz j250
|
||
movk 1,a1
|
||
JSRP FRANIM ;Jump sequence
|
||
j250 mmfm a12,a0,a1,a3,a4,a5,a6,a7
|
||
|
||
j260 movi SHAD1,a2
|
||
subk 1,a3
|
||
move a8,a9
|
||
calla BEGINOBJ2 ;Get shadow obj
|
||
move a8,*a13(jsobj_p),L
|
||
move a9,a8
|
||
|
||
move a10,a9
|
||
clr a0
|
||
move a0,*a13(jpos)
|
||
jruc j400
|
||
|
||
j300 movi DMAWNZ+M_NOCOLL,a4 ;No collisions
|
||
calla ANI ;New frame
|
||
move *a9+,a10 ;Get #ticks for frame
|
||
|
||
j350 move *a13(jsobj_p),a5,L
|
||
move *a5(OIMG),a1,L
|
||
move *a5(OSIZE),a2,L
|
||
move *a5(OFLAGS),a4
|
||
calla GANIOF
|
||
move *a13(jpos),a0 ;New height
|
||
move *a13(jsinea),a1
|
||
add a1,a0
|
||
cmpi 82,a0 ;Max table range
|
||
jrlo j370
|
||
clr a0
|
||
j370 move a0,*a13(jpos)
|
||
callr sine_get
|
||
srl 6,a0 ;/64
|
||
move *a5(OYPOS),a2
|
||
sub a0,a2
|
||
addi MZ,a0
|
||
move a0,*a8(OZPOS)
|
||
move a8,a0
|
||
move *a5(OXPOS),a3
|
||
sll 16,a2
|
||
sll 16,a3
|
||
add a6,a3 ;Add Anim pt
|
||
add a7,a2
|
||
move *a8(OFLAGS),a4
|
||
calla GANISAG
|
||
SLEEP 1
|
||
dsj a10,j350
|
||
|
||
j400 move *a9+,a1,L ;Get *Img
|
||
jrnz j300
|
||
|
||
|
||
move *a13(jsobj_p),a0,L ;Kill shadow
|
||
move *a0(OIMG),a1,L
|
||
move *a0(OSIZE),a2,L
|
||
move *a0(OFLAGS),a4
|
||
calla GANIOF
|
||
sra 16,a6
|
||
sra 16,a7
|
||
move *a0(OXPOS),a1
|
||
add a6,a1
|
||
move a1,*a13(jx) ;Save XY
|
||
move *a0(OYPOS),a1
|
||
add a7,a1
|
||
move a1,*a13(jy)
|
||
|
||
calla DELOBJ
|
||
movi DMAWNZ,a0
|
||
move a0,*a8(OFLAGS) ;Collisions ON
|
||
movi CLSENMY+TYPLAYR+SUBFLM,a0
|
||
move a0,*a8(OID) ;Flame death
|
||
move *a9+,a9,L ;Get *FRANIM list
|
||
jrz j880
|
||
movk 1,a1
|
||
JSRP FRANIM ;Land
|
||
j880 calla SCRTST
|
||
jreq jlp
|
||
|
||
move a8,a0
|
||
calla DELOBJ
|
||
j900 DIE
|
||
|
||
|
||
|
||
********************************
|
||
* Get an object
|
||
|
||
SUBRP obj_get ;A8=*Data
|
||
move *a8+,a0 ;Get X
|
||
move *a8+,a1 ;Get Y
|
||
sll 16,a0
|
||
sll 16,a1
|
||
move *a8+,a3 ;Get Z
|
||
move *a8+,a4 ;Flags
|
||
move *a8+,a5 ;ID
|
||
move *a8+,a2,L ;*Img
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ
|
||
rets ;>A8=*Object
|
||
|
||
|
||
********************************
|
||
* Get random # with mask
|
||
|
||
SUBRP rnd ;A0=Mask
|
||
PUSH a2
|
||
move @RAND,a1,L
|
||
rl a1,a1
|
||
rl a0,a1
|
||
move @HCOUNT,a2
|
||
rl a2,a1
|
||
xor a2,a1
|
||
move a1,@RAND,L
|
||
PULL a2
|
||
and a1,a0 ;A0=Rnd #
|
||
rets ;Pass CC
|
||
|
||
|
||
********************************
|
||
* Get sine
|
||
|
||
SUBRP sine_get ;A0=0-81 (PI-Half circle)
|
||
cmpi 41,a0 ;Max table range
|
||
jrlo sin10
|
||
neg a0
|
||
addi 81,a0 ;-Table range
|
||
jrnn sin10
|
||
clr a0
|
||
sin10 sll 4,a0 ;*16
|
||
addi sine_t,a0
|
||
move *a0,a0
|
||
zext a0 ;>A0=Sin 0-4096
|
||
rets
|
||
|
||
|
||
sine_t .word 0,158,317,475,633,789,944,1098
|
||
.word 1251,1401,1549,1695,1838,1979,2117,2251
|
||
.word 2382,2510,2633,2753,2869,2980,3087,3189
|
||
.word 3286,3379,3466,3548,3625,3696,3762,3822
|
||
.word 3876,3925,3967,4004,4035,4059,4078,4090
|
||
.word 4096
|
||
|
||
.end
|
||
|