2287 lines
45 KiB
NASM
2287 lines
45 KiB
NASM
**************************************************************
|
||
*
|
||
* Orcus software: Eugene Jarvis, Shawn Liptak
|
||
* Initiated: 7/12/91 from RBOSS SMASH TV
|
||
*
|
||
* Modified: Shawn Liptak, 9/25/91 -Started big fix
|
||
* Shawn Liptak, 11/7/91 -Done??
|
||
*
|
||
**************************************************************
|
||
*
|
||
* AFDM software: Shawn Liptak
|
||
* Initiated: 11/17/91
|
||
*
|
||
* Modified: !
|
||
*
|
||
**************************************************************
|
||
*
|
||
* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC.
|
||
*
|
||
*.Last mod - 11/23/91 17:38
|
||
**************************************************************
|
||
|
||
; .include "mproc.equ"
|
||
; .include "disp.equ"
|
||
; .include "\video\sys\sys.inc"
|
||
; .include "\video\sys\gsp.inc"
|
||
; .include "game.equ"
|
||
; .include "imgtbl.glo"
|
||
; .include "audit.equ"
|
||
; .include "shawn.hdr" ;My macros
|
||
; .include "orcus.tbl"
|
||
; .include "akhbship.tbl"
|
||
;
|
||
;
|
||
; .ref puffsnd
|
||
; .ref abossaballnum
|
||
; .ref BCURRENT
|
||
; .ref missilev_t
|
||
; .ref FRANIMQ
|
||
; .ref boss_scorehit
|
||
; .ref msllnchsnd
|
||
; .ref HALT
|
||
; .ref anim_script
|
||
; .ref seekob_dir32la
|
||
; .ref rocket_fireab
|
||
; .ref TARGET
|
||
; .ref abossseektop_dir32
|
||
; .ref boss_addrndxy
|
||
; .ref OUT_FLG
|
||
; .ref bossram
|
||
; .ref FLASHME
|
||
; .ref mslnofuel_l
|
||
; .ref missile_fireab
|
||
; .ref getplyr
|
||
; .ref ahkbang
|
||
; .ref getcloseplyr
|
||
; .ref PCNT
|
||
; .ref rndrng0
|
||
; .ref musicsnd
|
||
; .ref rcktlnchsnd
|
||
; .ref COLCYC
|
||
; .ref mslexpsnd
|
||
; .ref BOOM3
|
||
; .ref cycmem
|
||
; .ref bodystat
|
||
; .ref ahkb1
|
||
; .ref ahkb2
|
||
; .ref FADEIN
|
||
; .ref ahkb3
|
||
; .ref HZSPD
|
||
; .ref vel_set
|
||
; .ref abossseeko_dir32
|
||
; .ref aboss_smoketrail
|
||
; .ref WAVE
|
||
; .ref rnd
|
||
; .ref bloflg
|
||
; .ref ONESNDOVR
|
||
; .ref mk_objfranim
|
||
; .ref ahkbsta
|
||
; .ref abossshld
|
||
; .ref XBOOM2
|
||
; .ref TTORSO
|
||
; .ref doorsldsnd
|
||
; .ref bossramend
|
||
; .ref exp1snd
|
||
; .ref boss_addxy
|
||
; .ref PLYRPRCS
|
||
; .ref exp2snd
|
||
; .ref rocketv_t
|
||
; .ref CURRENT
|
||
; .ref bossd_t
|
||
|
||
|
||
|
||
**************************************************************
|
||
*
|
||
* Orcus software: Eugene Jarvis, Shawn Liptak
|
||
* Initiated: 7/12/91 from RBOSS SMASH TV
|
||
*
|
||
* Modified: Shawn Liptak, 9/25/91 -Started big fix
|
||
* Shawn Liptak, 11/7/91 -Done??
|
||
*
|
||
**************************************************************
|
||
*
|
||
* AFDM software: Shawn Liptak
|
||
* Initiated: 11/17/91
|
||
*
|
||
* Modified: !
|
||
*
|
||
**************************************************************
|
||
*
|
||
* COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC.
|
||
*
|
||
*.Last mod - 11/23/91 17:38
|
||
**************************************************************
|
||
|
||
;Sound headers
|
||
|
||
.ref LOVEIT
|
||
|
||
musicsnd .word >f3fe,10,>8009,0 ;Boss music
|
||
landsnd .word >fc88,30,>8030,0 ;Land from a jump
|
||
laughsnd .word >f194,30,>80f2,0 ;When plyr dies
|
||
exp1snd .word >fc80,7,>803e,0 ;Explosion
|
||
exp2snd .word >fd80,10,>80d9,0 ;^
|
||
;pain1snd .word >f985,20,>80f6,0 ;
|
||
;pain2snd .word >f985,20,>80f9,0 ;
|
||
groansnd .word >f985,20,>8113,0 ;Groan
|
||
groanlndsnd .word >f185,20,>8113,0 ;^ interruptable
|
||
oofsnd .word >f985,20,>8114,0 ;Oof
|
||
yowl1snd .word >f985,30,>8115,0 ;
|
||
yowl2snd .word >f985,30,>8116,0 ;
|
||
roarsnd .word >f990,40,>8117,0 ;Roar
|
||
roarlongsnd .word >f990,120,>8117,0 ;Roar
|
||
houchsnd .word >f985,20,>8120,0 ;
|
||
hyowlsnd .word >f985,20,>8122,0 ;
|
||
stvpainsnd .word >f985,30,>8123,0 ;
|
||
bubl1snd .word >f5e5,20,>8131,0 ;Blood bubbling
|
||
bubl2snd .word >f0e5,20,>8130,0 ;^
|
||
|
||
myeyesnd .word >f9e0,110,>8118,0 ;
|
||
myarmsnd .word >f9e0,120,>8119,0 ;
|
||
myheadsnd .word >f9e0,70,>8121,0 ;
|
||
|
||
msllnchsnd .word >f290,10,>80b6,0 ;Missile launch
|
||
mslexpsnd .word >f470,10,>8048,0 ;Missile explosion
|
||
|
||
* Aboss
|
||
ahkb1 .word >f9a0,60,>80eb,0 ;Akhboob speech
|
||
ahkb2 .word >f9a0,60,>80ec,0 ;^
|
||
ahkb3 .word >f9a0,60,>80ed,0 ;^
|
||
ahkbsta .word >f9a0,60,>80ee,0 ;^ start angry
|
||
ahkbang .word >f9a0,60,>80ef,0 ;^ angry
|
||
doorsldsnd .word >f480,2,>804c,0 ;Door slides
|
||
rcktlnchsnd .word >f290,10,>812c,0 ;Rocket launch
|
||
puffsnd .word >f280,10,>8085,0 ;Attack balls puffing
|
||
|
||
|
||
********************************
|
||
* Animation scripts
|
||
|
||
*ANIMATION NUMBERS
|
||
MOUTHCL .set 1 ;MOUTH CLOSED
|
||
MOUTHOP1 .set 2 ;MOUTH OPENING
|
||
MOUTHOP2 .set 3
|
||
MOUTHOP3 .set 4
|
||
EYEBLD .set 5
|
||
EYECNT .set 6 ;EYES CENTER
|
||
EYECL1 .set 7 ;EYES CLOSING
|
||
EYECL2 .set 8
|
||
EYEBUG .set 9 ;BUG EYES
|
||
EYERT1 .set 10 ;EYES RIGHT
|
||
EYERT2 .set 11
|
||
EYELFT1 .set 12 ;EYES LEFT
|
||
EYELFT2 .set 13
|
||
SIDE .set 14
|
||
SHOULDER .set 15
|
||
ARMDN .set 16 ;ARM DOWN
|
||
ARMDN1 .set 17 ;ARM DOWN RECOIL
|
||
ARMDN2 .set 18
|
||
ARML1 .set 19 ;ARM ROTATING TO LEFT
|
||
ARML2 .set 20
|
||
ARML3 .set 21
|
||
ARML4 .set 22
|
||
ARMR1 .set 23 ;ARM ROTATING TO RIGHT
|
||
HDST .set 24 ;LITTLE HEAD STRAIGHT
|
||
HDFROWN .set 25
|
||
HDROAR .set 26
|
||
HDOOOH .set 27
|
||
HDGRIN .set 28
|
||
HDL1NT .set 29 ;LIL HEAD SLIGHT LEFT W/TEETH
|
||
HDL1T .set 30
|
||
HDL2NT .set 31
|
||
HDL2T .set 32
|
||
HDL3 .set 33
|
||
HDL4 .set 34
|
||
HDL5 .set 35
|
||
NUSHD .set 36
|
||
;free .set 37
|
||
NULLOBJ .set 38
|
||
TNG1 .set 39
|
||
TNG2 .set 40
|
||
TNG3 .set 41
|
||
TNG4 .set 42
|
||
TNG5 .set 43
|
||
TNGL .set 44
|
||
TNGR .set 45
|
||
NULLOBJ1 .set 46
|
||
ARMDNPT .set 47
|
||
ARML1PT .set 48
|
||
ARML2PT .set 49
|
||
ARML3PT .set 50
|
||
ARML4PT .set 51
|
||
ARMR1PT .set 52
|
||
THRUST1 .set 53
|
||
THRUST2 .set 54
|
||
HDRIPL .set 55
|
||
TOPRIPL .set 56
|
||
THRUSTNULL .set 57
|
||
BASERIPA .set 58
|
||
LSTANI .set 58
|
||
|
||
|
||
MOUTHL .set 1 ;Part numbers
|
||
MOUTHR .set 2
|
||
SIDEL .set 3
|
||
SIDER .set 4
|
||
EYEL .set 5
|
||
EYER .set 6
|
||
SHLDRL .set 7
|
||
SHLDRR .set 8
|
||
LILHD .set 9 ;LIL HEAD
|
||
ARML .set 10
|
||
ARMR .set 11
|
||
LILHDF .set 14 ;FLIPPED LIL HEAD
|
||
TONGUE .set 15
|
||
THRUSTL .set 16
|
||
THRUSTR .set 17
|
||
|
||
*ANIANITB
|
||
*SEQ(32),TIME(16)
|
||
|
||
hddam_t .long frowner,frowner,frowner,frowner
|
||
.long grimmr,grimmr,grimmr,grimmr
|
||
.long oooher,oooher,oooher,oooher
|
||
.long oooher,oooher,oooher,oooher
|
||
|
||
grinner LW HDGRINA,15
|
||
LW HDGRINA,15
|
||
LWL0 HDGRINA,15
|
||
|
||
frowner LW HDFRWNA,10
|
||
LW HDFRWNA,10
|
||
LWL0 HDFRWNA,10
|
||
|
||
oooher LW HDOOOHA,30
|
||
LWL0 HDOOOHA,20
|
||
|
||
grimmr LW HDGRIM,1
|
||
LW HDGRIM,1
|
||
LW HDGRIM,1
|
||
LWL0 HDGRIM,1
|
||
|
||
|
||
eyequad_t ;Eyeball table
|
||
.long EYESCNT,EYESCNT,EYESCNT,EYESRT1
|
||
.long EYESRT1,EYESRT1,EYESRT2,EYESRT2
|
||
.long EYESRT2,EYESRT2,EYESRT2,EYESRT1
|
||
.long EYESRT1,EYESRT1,EYESCNT,EYESCNT
|
||
.long EYESCNT,EYESCNT,EYESCNT,EYESLFT1
|
||
.long EYESLFT1,EYESLFT1,EYESLFT2,EYESLFT2
|
||
.long EYESLFT2,EYESLFT2,EYESLFT2,EYESLFT1
|
||
.long EYESLFT1,EYESLFT1,EYESCNT,EYESCNT
|
||
|
||
hdquad_t ;Lil head table
|
||
.long HEAD225,HEAD225,HEAD225,HEAD225
|
||
.long HEAD225,HEAD270,HEAD270,HEAD270
|
||
.long HEAD270,HEAD270,HEAD300,HEAD300
|
||
.long HEAD330,HEAD330,HEAD330,HEAD0
|
||
.long HEAD0,HEAD0,HEAD30,HEAD30
|
||
.long HEAD30,HEAD60,HEAD60,HEAD90
|
||
.long HEAD90,HEAD90,HEAD90,HEAD90
|
||
.long HEAD135,HEAD135,HEAD135,HEAD135
|
||
|
||
eyedam_t
|
||
.long bugger,bugger,bugger,bugger
|
||
.long bugger,bugger,bugger,bugger
|
||
.long blinker,blinker,blinker,blinker
|
||
.long blinker,blinker,blinker,blinker
|
||
|
||
|
||
bugger LW EYESBLNK,1
|
||
LW EYESBUG,15
|
||
LW EYESBLNK,1
|
||
LWL0 EYESBUG,15
|
||
|
||
blinker LW EYESBLNK,2
|
||
LW EYESBLNK,2
|
||
LW EYESBLNK,2
|
||
LW EYESBLNK,2
|
||
LW EYESBLNK,2
|
||
LWL0 EYESBLNK,2
|
||
|
||
mouthrnd_t
|
||
LW TNGSTIKA,7
|
||
LW bite_seq,10
|
||
LW CHOMP3,2
|
||
LW CHOMP2,3
|
||
LW TNGSTIKA,7
|
||
LW bite_seq,10
|
||
LW CHOMP3,5
|
||
LW CHOMP2,1
|
||
LW TNGSTIKA,7
|
||
LW bite_seq,10
|
||
LW CHOMP3,5
|
||
LW CHOMP2,3
|
||
LW TNGSTIKA,7
|
||
LW bite_seq,10
|
||
LW TNGSTIKA,7
|
||
LW bite_seq,10
|
||
|
||
|
||
*ANIMATION TABLE
|
||
*PART #, ANI FRAME
|
||
*-=End of frame
|
||
|
||
*Thrust sequences
|
||
|
||
thrusthi_seq .byte THRUSTL,THRUST2,THRUSTR,-THRUST2
|
||
thrustlo_seq .byte THRUSTL,THRUST1,THRUSTR,-THRUST1
|
||
thrustnull_seq .byte THRUSTL,THRUSTNULL,THRUSTR,-THRUSTNULL
|
||
|
||
|
||
*OPEN MOUTH
|
||
|
||
bite_seq
|
||
.byte MOUTHL,MOUTHOP1,MOUTHR,-MOUTHOP1
|
||
.byte MOUTHL,MOUTHOP2,MOUTHR,-MOUTHOP2
|
||
.byte MOUTHL,MOUTHOP3,MOUTHR,-MOUTHOP3
|
||
.byte MOUTHL,MOUTHOP2,MOUTHR,-MOUTHOP2
|
||
.byte MOUTHL,MOUTHOP1,MOUTHR,-MOUTHOP1
|
||
BITECL .byte MOUTHL,MOUTHCL,MOUTHR,-MOUTHCL
|
||
.word 0
|
||
CHOMP3 .byte MOUTHL,MOUTHOP1,MOUTHR,-MOUTHOP1
|
||
.byte MOUTHL,MOUTHOP2,MOUTHR,-MOUTHOP2
|
||
.byte MOUTHL,MOUTHOP3,MOUTHR,-MOUTHOP3
|
||
.byte MOUTHL,MOUTHOP2,MOUTHR,-MOUTHOP2
|
||
.byte MOUTHL,MOUTHOP1,MOUTHR,-MOUTHOP1
|
||
.byte MOUTHL,MOUTHCL,MOUTHR,-MOUTHCL
|
||
CHOMP2 .byte MOUTHL,MOUTHOP1,MOUTHR,-MOUTHOP1
|
||
.byte MOUTHL,MOUTHOP2,MOUTHR,-MOUTHOP2
|
||
.byte MOUTHL,MOUTHOP3,MOUTHR,-MOUTHOP3
|
||
.byte MOUTHL,MOUTHOP2,MOUTHR,-MOUTHOP2
|
||
.byte MOUTHL,MOUTHOP1,MOUTHR,-MOUTHOP1
|
||
.byte MOUTHL,MOUTHCL,MOUTHR,-MOUTHCL
|
||
.byte MOUTHL,MOUTHOP1,MOUTHR,-MOUTHOP1
|
||
.byte MOUTHL,MOUTHOP2,MOUTHR,-MOUTHOP2
|
||
.byte MOUTHL,MOUTHOP3,MOUTHR,-MOUTHOP3
|
||
.byte MOUTHL,MOUTHOP2,MOUTHR,-MOUTHOP2
|
||
.byte MOUTHL,MOUTHOP1,MOUTHR,-MOUTHOP1
|
||
.byte MOUTHL,MOUTHCL,MOUTHR,-MOUTHCL
|
||
.word 0
|
||
|
||
*EYE ANIMATIONS
|
||
|
||
EYESBLNK
|
||
.byte EYEL,EYECL1,EYER,-EYECL1 ;EYES HALF CLOSED
|
||
.byte EYEL,EYECL2,EYER,-EYECL2 ;EYES CLOSED
|
||
.byte EYEL,EYECL2,EYER,-EYECL2 ;EYES CLOSED
|
||
.byte EYEL,EYECL1,EYER,-EYECL1 ;EYES HALF CLOSED
|
||
.byte EYEL,EYECNT,EYER,-EYECNT ;EYES CENTERED
|
||
.word 0
|
||
EYESCNT .byte EYEL,EYECNT,EYER,-EYECNT ;EYES CENTERED
|
||
EYESLFT1
|
||
.byte EYEL,EYELFT1,EYER,-EYERT1 ;EYES LEFT
|
||
EYESLFT2
|
||
.byte EYEL,EYELFT2,EYER,-EYERT2 ;EYES LEFT EXTREME
|
||
.byte EYEL,EYELFT1,EYER,-EYERT1 ;EYES LEFT
|
||
.byte EYEL,EYECNT,EYER,-EYECNT ;EYES CENTERED
|
||
EYESRT1 .byte EYEL,EYERT1,EYER,-EYELFT1 ;EYES RIGHT
|
||
EYESRT2 .byte EYEL,EYERT2,EYER,-EYELFT2 ;EYES RIGHT EXTREME
|
||
.byte EYEL,EYERT1,EYER,-EYELFT1 ;EYES RIGHT
|
||
.byte EYEL,EYECNT,EYER,-EYECNT ;EYES CENTERED
|
||
.word 0
|
||
EYESLT3 .byte EYEL,EYELFT1,EYER,-EYERT1 ;EYES LEFT
|
||
.byte EYEL,EYELFT2,EYER,-EYERT2 ;EYES LEFT EXTREME
|
||
.byte EYEL,EYELFT1,EYER,-EYERT1 ;EYES LEFT
|
||
.byte EYEL,EYECNT,EYER,-EYECNT ;EYES CENTERED
|
||
.word 0
|
||
|
||
|
||
|
||
*BUGEYES
|
||
EYESBUG .byte EYEL,EYEBUG,EYER,-EYEBUG ;EYES BUGGED
|
||
.byte EYEL,EYECNT,EYER,-EYECNT ;EYES CENTERED
|
||
.word 0
|
||
hdblo_seq ;Little head blown
|
||
.byte LILHD,HDRIPL,LILHDF,-NULLOBJ
|
||
|
||
shldrblo_seq ;Shoulders blown
|
||
.byte LILHD,NULLOBJ,LILHDF,NULLOBJ
|
||
.byte SHLDRL,TOPRIPL,SHLDRR,-TOPRIPL
|
||
|
||
bodyblo_seq
|
||
.byte ARML,NULLOBJ,ARMR,NULLOBJ
|
||
.byte EYEL,NULLOBJ,EYER,NULLOBJ
|
||
.byte SIDEL,NULLOBJ,SIDER,NULLOBJ
|
||
.byte TONGUE,NULLOBJ
|
||
.byte THRUSTL,THRUSTNULL,THRUSTR,THRUSTNULL
|
||
.byte SHLDRL,NULLOBJ,SHLDRR,NULLOBJ
|
||
.byte MOUTHL,BASERIPA,MOUTHR,-BASERIPA
|
||
|
||
*LITTLE HEAD ROTATE
|
||
HEAD30 .byte LILHD,HDL1NT,LILHDF,-NULLOBJ
|
||
HEAD60 .byte LILHD,HDL2NT,LILHDF,-NULLOBJ
|
||
HEAD90 .byte LILHD,HDL3,LILHDF,-NULLOBJ
|
||
HEAD135 .byte LILHD,HDL4,LILHDF,-NULLOBJ
|
||
HEAD225 .byte LILHD,NULLOBJ,LILHDF,-HDL4
|
||
HEAD270 .byte LILHD,NULLOBJ,LILHDF,-HDL3
|
||
HEAD300 .byte LILHD,NULLOBJ,LILHDF,-HDL2NT
|
||
HEAD330 .byte LILHD,NULLOBJ,LILHDF,-HDL1NT
|
||
HEAD0 .byte LILHD,HDST,LILHDF,-NULLOBJ
|
||
.word 0
|
||
|
||
|
||
HDGRIM .byte LILHD,HDL1T,LILHDF,-NULLOBJ
|
||
.byte LILHD,HDL2T,LILHDF,-NULLOBJ
|
||
.byte LILHD,HDL3,LILHDF,-NULLOBJ
|
||
.byte LILHD,HDL2T,LILHDF,-NULLOBJ
|
||
.byte LILHD,HDL1T,LILHDF,-NULLOBJ
|
||
.byte LILHD,HDST,LILHDF,-NULLOBJ
|
||
.byte LILHD,NULLOBJ,LILHDF,-HDL1T
|
||
.byte LILHD,NULLOBJ,LILHDF,-HDL2T
|
||
.byte LILHD,NULLOBJ,LILHDF,-HDL3
|
||
.byte LILHD,NULLOBJ,LILHDF,-HDL2T
|
||
.byte LILHD,NULLOBJ,LILHDF,-HDL1T
|
||
.byte LILHD,HDST,LILHDF,-NULLOBJ
|
||
.word 0
|
||
*HEAD GRIN
|
||
HDGRINA .byte LILHD,HDGRIN,LILHDF,-NULLOBJ
|
||
.byte LILHD,HDST,LILHDF,-NULLOBJ
|
||
.word 0
|
||
*HEAD OOOH
|
||
HDOOOHA .byte LILHD,HDOOOH,LILHDF,-NULLOBJ
|
||
.byte LILHD,HDST,LILHDF,-NULLOBJ
|
||
.word 0
|
||
*HEAD FROWN
|
||
HDFRWNA .byte LILHD,HDFROWN,LILHDF,-NULLOBJ
|
||
.byte LILHD,HDST,LILHDF,-NULLOBJ
|
||
.word 0
|
||
|
||
*LEFT ARM FIRE POS. 1
|
||
LARMF1
|
||
.byte ARML,-ARMDN1
|
||
.byte ARML,-ARMDN
|
||
.word 0
|
||
*LEFT ARM FIRE POS. 2
|
||
LARMF2
|
||
.byte ARML,-ARML1PT
|
||
.byte ARML,-ARML1
|
||
.word 0
|
||
|
||
*LEFT ARM FIRE POS. 3
|
||
LARMF3
|
||
.byte ARML,-ARML2PT
|
||
.byte ARML,-ARML2
|
||
.word 0
|
||
*LEFT ARM FIRE POS. 4
|
||
LARMF4
|
||
.byte ARML,-ARML3PT
|
||
.byte ARML,-ARML3
|
||
.word 0
|
||
*LEFT ARM FIRE POS. 5
|
||
LARMF5
|
||
.byte ARML,-ARML4PT
|
||
.byte ARML,-ARML4
|
||
.word 0
|
||
*LEFT ARM FIRE POS. 6
|
||
LARMF6
|
||
.byte ARML,-ARMR1PT
|
||
.byte ARML,-ARMR1
|
||
.word 0
|
||
*RT ARM FIRE POS. 1
|
||
RARMF1
|
||
.byte ARMR,-ARMDN1
|
||
.byte ARMR,-ARMDN
|
||
.word 0
|
||
*RT ARM FIRE POS. 2
|
||
RARMF2
|
||
.byte ARMR,-ARML1PT
|
||
.byte ARMR,-ARML1
|
||
.word 0
|
||
*RT ARM FIRE POS. 3
|
||
RARMF3
|
||
.byte ARMR,-ARML2PT
|
||
.byte ARMR,-ARML2
|
||
.word 0
|
||
|
||
*RT ARM FIRE POS. 4
|
||
RARMF4
|
||
.byte ARMR,-ARML3PT
|
||
.byte ARMR,-ARML3
|
||
.word 0
|
||
|
||
*RT ARM FIRE POS. 5
|
||
RARMF5
|
||
.byte ARMR,-ARML4PT
|
||
.byte ARMR,-ARML4
|
||
.word 0
|
||
|
||
*RT ARM FIRE POS. 6
|
||
RARMF6
|
||
.byte ARMR,-ARMR1PT
|
||
.byte ARMR,-ARMR1
|
||
.word 0
|
||
|
||
*ARM FIRE SEQUENCE
|
||
ARMFIRE
|
||
.byte ARML,ARMR1,ARMR,-ARMR1
|
||
.byte ARML,ARMR1PT,ARMR,-ARMR1PT
|
||
.byte ARML,ARMR1,ARMR,-ARMR1
|
||
.byte ARML,ARMDN,ARMR,-ARMDN
|
||
.byte ARML,ARMDNPT,ARMR,-ARMDNPT
|
||
.byte ARML,ARMDN,ARMR,-ARMDN
|
||
.byte ARML,ARML1,ARMR,-ARML1
|
||
.byte ARML,ARML1PT,ARMR,-ARML1PT
|
||
.byte ARML,ARML1,ARMR,-ARML1
|
||
.byte ARML,ARML2,ARMR,-ARML2
|
||
.byte ARML,ARML2PT,ARMR,-ARML2PT
|
||
.byte ARML,ARML2,ARMR,-ARML2
|
||
.byte ARML,ARML3,ARMR,-ARML3
|
||
.byte ARML,ARML3PT,ARMR,-ARML3PT
|
||
.byte ARML,ARML3,ARMR,-ARML3
|
||
.byte ARML,ARML4,ARMR,-ARML4
|
||
.byte ARML,ARML4PT,ARMR,-ARML4PT
|
||
.byte ARML,ARML4,ARMR,-ARML4
|
||
.byte ARML,ARML3,ARMR,-ARML3
|
||
.byte ARML,ARML2,ARMR,-ARML2
|
||
.byte ARML,ARML1,ARMR,-ARML1
|
||
.byte ARML,ARMDN,ARMR,-ARMDN
|
||
.word 0
|
||
*TONGUE STICK OUT
|
||
TNGSTIKA
|
||
.byte MOUTHL,MOUTHOP1,MOUTHR,-MOUTHOP1
|
||
.byte MOUTHL,MOUTHOP2,MOUTHR,-MOUTHOP2
|
||
.byte MOUTHL,MOUTHOP3,MOUTHR,-MOUTHOP3
|
||
.byte TONGUE,-TNG1
|
||
.byte TONGUE,-TNG2
|
||
.byte TONGUE,-TNG3
|
||
.byte TONGUE,-TNG4
|
||
.byte TONGUE,-TNG5
|
||
.byte TONGUE,-TNGL
|
||
.byte TONGUE,-TNGR
|
||
.byte TONGUE,-TNGL
|
||
.byte TONGUE,-TNGR
|
||
.byte TONGUE,-TNG5
|
||
.byte TONGUE,-TNG4
|
||
.byte TONGUE,-TNG3
|
||
.byte TONGUE,-TNG2
|
||
.byte TONGUE,-TNG1
|
||
.byte TONGUE,-NULLOBJ1
|
||
.byte MOUTHL,MOUTHOP2,MOUTHR,-MOUTHOP2
|
||
.byte MOUTHL,MOUTHOP1,MOUTHR,-MOUTHOP1
|
||
.byte MOUTHL,MOUTHCL,MOUTHR,-MOUTHCL
|
||
.word 0
|
||
|
||
********************************
|
||
* Boss damage table
|
||
* 0-255
|
||
|
||
BDAMSIZE .equ 32*3
|
||
|
||
bossdam_t
|
||
.long OMTH1,OMTH1A,OMTH1B ;1 MOUTH CLOSED
|
||
.long OMTH2,OMTH2A,OMTH2B ;2 MOUTH SLIGHTLY OPEN
|
||
.long OMTH3,OMTH3A,OMTH3B ;3 MOUTH MORE OPEN
|
||
.long OMTH4,OMTH4A,OMTH4B ;4 MOUTH MORE OPEN
|
||
.long OEYES1C,OEYES1C,OEYES1C ;5 BLOODY EYE
|
||
.long OEYES1,OEYES1A,OEYES1C ;6 EYE CENTERED
|
||
.long OEYES1A,OEYES1A,OEYES1C ;7 EYE HALF CLOSED
|
||
.long OEYES1B,OEYES1A,OEYES1C ;8 EYE CLOSED
|
||
.long OEYES2,OEYES1A,OEYES1C ;9 EYE BUGGED OPEN CENTERED
|
||
.long OEYES3,OEYES1A,OEYES1C ;10 EYE HALF RIGHT
|
||
.long OEYES4,OEYES1A,OEYES1C ;11 EYE RIGHT
|
||
.long OEYES3A,OEYES1A,OEYES1C ;12 EYE HALF LEFT
|
||
.long OEYES4A,OEYES1A,OEYES1C ;13 EYE LEFT
|
||
.long SIDEPC,SIDEPC,SIDEPC ;14 SIDE OF CHEEK
|
||
.long SHLDR,SHLDR,SHLDR ;15 SHOULDER STRAP
|
||
.long OARM1,ARMRIP,NULO ;16 ARM DOWN
|
||
.long OARM1A,ARMRIP,NULO ;17 ARM DOWN PARTIAL RECOIL
|
||
.long OARM1B,ARMRIP,NULO ;18 ARM DOWN FULL RECOIL
|
||
.long OARM2,ARMRIP,NULO ;19 ARM SLIGHT ANGLE LEFT
|
||
.long OARM3,ARMRIP,NULO ;20 ARM MORE ANGLE LEFT
|
||
.long OARM4,ARMRIP,NULO ;21 ARM EVEN MORE ANGLE LEFT
|
||
.long OARM5,ARMRIP,NULO ;22 ARM FULL LEFT HORIZONTAL
|
||
.long OARM6,ARMRIP,NULO ;23 ARM SLIGHT ANGLE RIGHT
|
||
.long ORCHD1,ORCHD1,ORCHD1 ;24 LITTLE HEAD STRAIGHT FACE
|
||
.long ORCHD1A,ORCHD1A,ORCHD1A ;25 LITTLE HEAD FROWN FACE
|
||
.long ORCHD1B,ORCHD1B,ORCHD1B ;26 LITTLE HEAD ROAR FACE
|
||
.long ORCHD1C,ORCHD1C,ORCHD1C ;27 LITTLE HEAD OOOOHHH FACE
|
||
.long ORCHD1D,ORCHD1D,ORCHD1D ;28 LITTLE HEAD TOOTHY GRIN FACE
|
||
.long ORCHD2,ORCHD2,ORCHD2 ;29 LITTLE HEAD SLIGHTLY LEFT FACE (NO TEETH)
|
||
.long ORCHD2A,ORCHD2A,ORCHD2A ;30 LITTLE HEAD SLIGHTLY LEFT FACE (TEETH)
|
||
.long ORCHD3,ORCHD3,ORCHD3 ;31 LITTLE HEAD 45 LEFT FACE (NO TEETH)
|
||
.long ORCHD3A,ORCHD3A,ORCHD3A ;32 LITTLE HEAD 45 LEFT FACE (TEETH)
|
||
.long ORCHD4,ORCHD4,ORCHD4 ;33 LIL HEAD 60
|
||
.long ORCHD5,ORCHD5,ORCHD5 ;34 LIL HEAD 90
|
||
.long ORCHD6,ORCHD6,ORCHD6 ;35 LIL HEAD 135
|
||
.long NUSHAD,NUSHAD,NUSHAD ;36 SHADOW
|
||
.long NULO,NULO,NULO ;37 SIDE SHADOW was> OSHAD2,OSHAD2,OSHAD2
|
||
.long NULO,NULO,NULO ;38 NULL OBJECT
|
||
.long TUNG1D,TUNG1D,TUNG1D ;39 TONGUE SMALLEST
|
||
.long TUNG1C,TUNG1C,TUNG1C ;40 TONGUE NEXT SMALLEST
|
||
.long TUNG1B,TUNG1B,TUNG1B ;41 TONGUE NEXT SMALLEST
|
||
.long TUNG1A,TUNG1A,TUNG1A ;42 TONGUE NEXT SMALLEST
|
||
.long TUNG1,TUNG1,TUNG1 ;43 TONGUE FULL SIZE
|
||
.long TUNG2,TUNG2,TUNG2 ;44 TONGUE FULL SIZE CURVE TO LEFT
|
||
.long TUNG3,TUNG3,TUNG3 ;45 TONGUE FULL SIZE CURVE TO RIGHT
|
||
.long NULO1,NULO1,NULO1 ;46 TONGUE NULL
|
||
.long OARM1PT,OARM1PT,ARMRIP ;47 ARM1 FIRE ANI
|
||
.long OARM2PT,OARM2PT,ARMRIP ;48 ARM2 FIRE ANI
|
||
.long OARM3PT,OARM3PT,ARMRIP ;49 ARM3 FIRE ANI
|
||
.long OARM4PT,OARM4PT,ARMRIP ;50 ARM4 FIRE ANI
|
||
.long OARM5PT,OARM5PT,ARMRIP ;51 ARM5 FIRE ANI
|
||
.long OARM6PT,OARM6PT,ARMRIP ;52 ARM6 FIRE ANI
|
||
.long ORCFLM1,ORCFLM1,ORCFLM1 ;53 FLAME 1
|
||
.long ORCFLM2,ORCFLM2,ORCFLM2 ;54 FLAME 2
|
||
.long HDRIP,HDRIP,HDRIP ;55 HEAD RIPPED LEFT
|
||
.long TOPRIP,TOPRIP,TOPRIP ;56 TOP (SHOULDERS) RIPPED OFF
|
||
.long THRSTNL,THRSTNL,THRSTNL ;57 Thrust null
|
||
.long BASERIP,BASERIP,BASERIP ;58 BASE RIP
|
||
|
||
|
||
|
||
|
||
* Boss initial data table
|
||
|
||
boss_t
|
||
*PART 1 LEFT MOUTH
|
||
.word DMAWNZ+M_PIXSCAN ;Flags
|
||
.word CLSENMY|TYPFACE|SUBMTHL ;Type
|
||
.byte -1,MOUTHCL ;Damage resistance, Ani#
|
||
.word 159 ;Z
|
||
*PART 2 RIGHT MOUTH
|
||
.word DMAWNZ+M_PIXSCAN+M_FLIPH
|
||
.word CLSENMY|TYPFACE|SUBMTHR
|
||
.byte -1,MOUTHCL
|
||
.word 159
|
||
*PART 3 LEFT SIDE PIECE
|
||
.word DMAWNZ+M_PIXSCAN
|
||
.word CLSENMY|TYPFACE|SUBSIDEL
|
||
.byte 0,SIDE
|
||
.word 159
|
||
*PART 4 RT SIDE PIECE
|
||
.word DMAWNZ+M_PIXSCAN+M_FLIPH
|
||
.word CLSENMY|TYPFACE|SUBSIDER
|
||
.byte 0,SIDE
|
||
.word 159
|
||
*PART 5 LEFT EYE
|
||
.word DMAWNZ
|
||
.word CLSENMY|TYPFACE|SUBEL
|
||
.byte 0,EYECNT
|
||
.word 160
|
||
*PART 6 RIGHT EYE
|
||
.word DMAWNZ+M_FLIPH
|
||
.word CLSENMY|TYPFACE|SUBER
|
||
.byte 0,EYECNT
|
||
.word 160
|
||
*PART 7 LEFT SHOULDER
|
||
.word DMAWNZ
|
||
.word CLSENMY|TYPFACE|SUBSHLDL
|
||
.byte 0,SHOULDER
|
||
.word 163
|
||
*PART 8 RT SHOULDER
|
||
.word DMAWNZ+M_FLIPH
|
||
.word CLSENMY|TYPFACE|SUBSHLDR
|
||
.byte 0,SHOULDER
|
||
.word 163
|
||
*PART 9 LIL HEAD
|
||
.word DMAWNZ
|
||
.word CLSENMY|TYPFACE|SUBHD
|
||
.byte 0,HDST
|
||
.word 163
|
||
*PART 10 LEFT ARM
|
||
.word DMAWNZ+M_PIXSCAN
|
||
.word CLSENMY|TYPFACE|SUBARML
|
||
.byte -1,ARMDN
|
||
.word 160
|
||
*PART 11 RIGHT ARM
|
||
.word DMAWNZ+M_PIXSCAN+M_FLIPH
|
||
.word CLSENMY|TYPFACE|SUBARMR
|
||
.byte -1,ARMDN
|
||
.word 160
|
||
*PART 12 LEFT SHADOW
|
||
.word DMACNZ+M_NOCOLL
|
||
.word CLSNEUT
|
||
.byte 0,NUSHD
|
||
.word 150
|
||
*PART 13 RIGHT SHADOW
|
||
.word DMACNZ+M_NOCOLL+M_FLIPH
|
||
.word CLSNEUT
|
||
.byte 0,NUSHD
|
||
.word 150
|
||
*PART 14 LIL HEAD FLIPPED
|
||
.word DMAWNZ+M_FLIPH
|
||
.word CLSENMY|TYPFACE|SUBHD
|
||
.byte 0,NULLOBJ
|
||
.word 162
|
||
*PART 15 TONGUE
|
||
.word DMAWNZ
|
||
.word CLSENMY|TYPFACE|SUBTUNG
|
||
.byte 0,NULLOBJ1
|
||
.word 160
|
||
*PART 16 LEFT FLAME
|
||
.word DMAWNZ
|
||
.word CLSENMY|TYPFACE|SUBFLAM
|
||
.byte 0,THRUSTNULL
|
||
.word 158
|
||
*PART 17 RT FLAME
|
||
.word DMAWNZ+M_FLIPH
|
||
.word CLSENMY|TYPFACE|SUBFLAM
|
||
.byte 0,THRUSTNULL
|
||
.word 158
|
||
.word 0
|
||
|
||
|
||
;Null object definition
|
||
;Lil head null
|
||
NULO .word 1,1,22,-8
|
||
.long IROM+3*32
|
||
.long ORCP1
|
||
;Tung null
|
||
NULO1 .word 1,1,11,-118
|
||
.long IROM+3*32
|
||
.long RIPAL
|
||
;Thrust null
|
||
THRSTNL .word 1,1,11,-118
|
||
.long IROM+3*32
|
||
.long BLUBOOM
|
||
|
||
|
||
|
||
|
||
****************************************************************
|
||
* Akhboob's flying death machine (Process)
|
||
****************************************************************
|
||
|
||
;Boss data struct
|
||
|
||
ABDOBJ .set >0 ;*Parts obj
|
||
ABDXO .set >20 ;X offset from ani pt
|
||
ABDSHLD .set >30 ;Shield, 0=Dead, +=OK
|
||
|
||
|
||
ABXO .equ 24 ;Obj 1 offsets for center
|
||
ABYO .equ 40
|
||
|
||
ABWRLDTY .set 249 ;Bkgnd world top Y for end of scroll
|
||
|
||
WORDPD abmode ,0 ;Mode, -=At top, 0=Msl mania,
|
||
; 1=Chase plyr, 2=Balls
|
||
WORDPD absko ,1 ;Seek offset -1/1
|
||
WORDPD abdrag ,2 ;Drag shift
|
||
; WORDPD abgunstat ,3 ;Guns stat, 0=OK, 1=Blown
|
||
|
||
|
||
SUBR aboss
|
||
|
||
|
||
clr a0 ;>Clear out boss variables
|
||
movi bossram,a1
|
||
abossc move a0,*a1+
|
||
cmpi bossramend,a1
|
||
jrlo abossc
|
||
|
||
|
||
movi bossrise_as,a8
|
||
CREATE ANIMPID,anim_script ;P1
|
||
|
||
SLEEP 356
|
||
|
||
movi abosspal_t,a0
|
||
movk 2,a1
|
||
calla FADEIN
|
||
|
||
SLEEPK 4+6*3
|
||
|
||
move @WORLDTLX+16,a0 ;Get starting coord
|
||
addi 200,a0
|
||
sll 16,a0
|
||
move @WORLDTLY+16,a1
|
||
addi SHPY,a1
|
||
sll 16,a1
|
||
callr aboss_init
|
||
|
||
movi BBSHPAL,a8
|
||
movi cycmem,a9 ;Ram area
|
||
movi [60,64],a10 ;Begin/end color #
|
||
movk 3,a11 ;Rate in ticks
|
||
CREATE CYCPID,COLCYC ;Color cycler on
|
||
|
||
move @bossd_t,a8,L ;A8=*1st obj
|
||
move a13,a11
|
||
CREATE BOSSPID,ab_scrollstrt
|
||
CREATE BOSSPID,ab_gunturrets
|
||
CREATE BOSSPID,ab_msllauncher
|
||
CREATE BOSSPID,ab_akhboobani
|
||
CREATE BOSSPID,plyr_shoeson
|
||
|
||
clr a10 ;A10=Dir 0-31
|
||
|
||
movk 1,a0
|
||
move a0,*a13(absko) ;-1 or 1
|
||
movi -4,a0 ;Normal speed
|
||
move a0,*a13(abdrag)
|
||
move a0,*a13(abmode) ;Neg
|
||
movi 60*15,a11 ;A11=Mode cnt down (Chase time)
|
||
|
||
abosslp
|
||
SLEEPK 1
|
||
|
||
move *a13(abmode),a0 ;>Mode change
|
||
jrle abl200 ;Guns still good?
|
||
|
||
subk 1,a11
|
||
jrgt abl200 ;Still counting?
|
||
movi 60*60*20,a11 ;Ball time
|
||
|
||
abl150 addk 1,a0
|
||
move a0,*a13(abmode)
|
||
subk 2,a0
|
||
jrne abl200 ;!Ball time?
|
||
movi bossd_t+BLPART,a9 ;*Left ball data
|
||
CREATE BOSSPID,ab_atkball
|
||
movi bossd_t+BRPART,a9 ;*Rgt ball data
|
||
CREATE BOSSPID,ab_atkball
|
||
movk 2,a0
|
||
move a0,@abossaballnum
|
||
|
||
abl200 movk 1,a0
|
||
callr rnd
|
||
jrnz abl230 ;No smoke?
|
||
CREATE0 aboss_smoketrail
|
||
|
||
|
||
abl230 movk 3,a0 ;>Turn
|
||
callr rnd
|
||
jrz abl500 ;Skip seek?
|
||
|
||
move *a13(abmode),a7
|
||
subk 1,a7
|
||
jrne abl250 ;Go top?
|
||
|
||
calla getcloseplyr ;>Chase plyr
|
||
jrz abl250 ;No player?
|
||
callr abossseeko_dir32
|
||
jruc abl300
|
||
|
||
abl250 movk 32,a0 ;Y
|
||
subk 2-1,a7
|
||
jrne abl260 ;!Ball time?
|
||
addk 22,a0 ;Lower
|
||
move @abossshld,a3
|
||
jrge abl260 ;!Docking?
|
||
movk 10,a0
|
||
abl260 callr abossseektop_dir32
|
||
|
||
abl300 sub a10,a0 ;A0=Difference
|
||
jrz abl500
|
||
|
||
move a0,a1
|
||
abs a0
|
||
cmpi 2,a0
|
||
jrle abl340 ;In seeker view?
|
||
move *a13(abmode),a7
|
||
subk 2,a7
|
||
jreq abl340 ;Ball time?
|
||
|
||
move *a13(absko),a2
|
||
movk >f,a0
|
||
callr rnd
|
||
jrnz abl320 ;No dir change?
|
||
neg a2
|
||
move a2,*a13(absko)
|
||
abl320 add a2,a10
|
||
jruc abl400
|
||
|
||
abl340 subk 16,a0
|
||
jrle abl350
|
||
neg a1
|
||
abl350 move a1,a1
|
||
jrnn abl360
|
||
subk 2,a10 ;-1
|
||
abl360 addk 1,a10 ;+1
|
||
|
||
abl400 ANDK >1f,a10 ;Make 0-31
|
||
|
||
|
||
abl500 move a10,a0 ;>Thrust
|
||
sll 4,a0 ;*16
|
||
addi missilev_t,a0
|
||
move *a0(8*16),a6 ;XV
|
||
move *a0,a7 ;YV
|
||
|
||
move *a13(abdrag),a2
|
||
move *a8(OXVEL),a0,L
|
||
move a0,a3
|
||
sra a2,a3
|
||
sub a3,a0 ;-Drag
|
||
add a6,a0 ;+Vel
|
||
move *a8(OYVEL),a1,L
|
||
move a1,a3
|
||
sra a2,a3
|
||
sub a3,a1 ;-Drag
|
||
add a7,a1 ;+Vel
|
||
|
||
move a8,a6
|
||
movi bossd_t,a8 ;A8=*Boss data struct
|
||
callr vel_set
|
||
move a6,a8
|
||
|
||
abl700
|
||
callr ab_keeponscrn
|
||
|
||
jruc abosslp
|
||
|
||
move @abossshld,a3
|
||
jrge abosslp ;OK?
|
||
|
||
SLEEP 60*5
|
||
|
||
DIE
|
||
|
||
abosspal_t
|
||
.long BBSHPAL,0
|
||
|
||
|
||
********************************
|
||
* Anim script for aboss flying out of pit
|
||
|
||
bossrise_as
|
||
ASNEW bossrisenew_t ;>Ship in pit and sliding door
|
||
ASSLP 60
|
||
|
||
ASRUN doorsnd_as
|
||
ASLAB 27 ;>Slide door up
|
||
ASXY >10,>f,0,-1
|
||
ASDSJS1
|
||
ASHIDE >10
|
||
ASLAB 33
|
||
ASXY >10,>f,0,-1
|
||
ASDSJS1
|
||
ASHIDE >11
|
||
ASLAB 33
|
||
ASXY >10,>f,0,-1
|
||
ASDSJS1
|
||
ASHIDE >12
|
||
ASLAB 27
|
||
ASXY >10,>f,0,-1
|
||
ASDSJS1
|
||
|
||
ASSLP 180
|
||
|
||
ASSND rcktlnchsnd
|
||
ASXY >20,3,-400,0 ;>Ship rises
|
||
ASXYV >20,3,0,->18000
|
||
ASSLP 6
|
||
ASANI LILBBSHP2,>20
|
||
ASANI LILBBSHP2A,>21
|
||
ASSLP 6
|
||
ASANI LILBBSHP3,>20
|
||
ASANI LILBBSHP3A,>21
|
||
ASSLP 6
|
||
ASDELM >20,1
|
||
|
||
ASLAB 27 ;>Slide door down
|
||
ASXY >10,>f,0,1
|
||
ASDSJS1
|
||
ASSHOW >12
|
||
ASLAB 33
|
||
ASXY >10,>f,0,1
|
||
ASDSJS1
|
||
ASSHOW >11
|
||
ASLAB 33
|
||
ASXY >10,>f,0,1
|
||
ASDSJS1
|
||
ASSHOW >10
|
||
ASLAB 27
|
||
ASXY >10,>f,0,1
|
||
ASDSJS1
|
||
|
||
ASSLP 60*120
|
||
ASDELM 0,>ff
|
||
|
||
|
||
|
||
ASASM
|
||
abas100 SLEEPK 10
|
||
move @WORLDTLY+16,a0
|
||
cmpi ABWRLDTY+90,a0
|
||
jrgt abas100
|
||
|
||
move @OBJLST,a2,L ;>Set wall Z down
|
||
abas200 move *a2(OZPOS),a0
|
||
cmpi 281,a0
|
||
jrne abas240
|
||
; movi 120,a0
|
||
; move a0,*a2(OZPOS)
|
||
abas240 move *a2,a2,L
|
||
jrnz abas200 ;More?
|
||
|
||
ASENDASM
|
||
|
||
ASNEW abwallnew_t
|
||
|
||
ASASM
|
||
abas400 SLEEPK 15
|
||
move @WORLDTLY+16,a0
|
||
cmpi ABWRLDTY+20,a0
|
||
jrgt abas400
|
||
move @abossshld,a0
|
||
jrnn abas400 ;Ship OK?
|
||
ASENDASM
|
||
|
||
ASLAB 60 ;>Slide doors open
|
||
ASXY >44,0,-1,0
|
||
ASXY >45,0,1,0
|
||
ASDSJS1
|
||
|
||
ASSLP 60*3
|
||
|
||
ASASM
|
||
abas500 SLEEPK 15
|
||
move @WORLDTLY+16,a0
|
||
cmpi ABWRLDTY+2,a0
|
||
jrgt abas500
|
||
|
||
movi 150,a1
|
||
move @bossd_t,a0,L ;>Set Z low
|
||
move a1,*a0(OZPOS)
|
||
move @bossd_t+AKPART,a0,L
|
||
move a1,*a0(OZPOS)
|
||
|
||
ASENDASM
|
||
|
||
ASLAB 60 ;>Slide doors closed
|
||
ASXY >44,0,1,0
|
||
ASXY >45,0,-1,0
|
||
ASDSJS1
|
||
|
||
ASDEL >40
|
||
ASSLP 60*2
|
||
|
||
ASLAB 60 ;>Slide doors open
|
||
ASXY >44,0,-1,0
|
||
ASXY >45,0,1,0
|
||
ASDSJS1
|
||
|
||
ASDELM >44,3
|
||
|
||
ASLAB 75 ;>Slide big face down
|
||
ASXY >60,0,0,1
|
||
ASDSJS1
|
||
|
||
ASEND
|
||
|
||
SHPY .set 48
|
||
BDX .set 196-71
|
||
BDY .set 59
|
||
|
||
bossrisenew_t
|
||
ASITEMN 600,SHPY+93,LILBBSHP1,20,DMAWNZ,>20
|
||
ASITEMN 600-1,SHPY+93,LILBBSHP1,20,DMAWNZ+M_FLIPH,>20
|
||
ASITEMN 600,SHPY+93,LILBBSHP1A,20,DMAWNZ,>21
|
||
ASITEMN 600-1,SHPY+93,LILBBSHP1A,20,DMAWNZ+M_FLIPH,>21
|
||
ASITEMN BDX-25,BDY-35,PCCOVER,35,DMAWNZ,8
|
||
ASITEMN BDX+166,BDY-35,PCCOVER,35,DMAWNZ+M_FLIPH,8
|
||
ASITEMN BDX,BDY,STEELPC1,30,DMAWNZ,>10
|
||
ASITEMN BDX+141,BDY,STEELPC1,30,DMAWNZ+M_FLIPH,>10
|
||
ASITEMN BDX,BDY+27,STEELPC2,30,DMAWNZ,>11
|
||
ASITEMN BDX+141,BDY+27,STEELPC2,30,DMAWNZ+M_FLIPH,>11
|
||
ASITEMN BDX,BDY+60,STEELPC2,30,DMAWNZ,>12
|
||
ASITEMN BDX+141,BDY+60,STEELPC2,30,DMAWNZ+M_FLIPH,>12
|
||
ASITEMN BDX,BDY+118,STEELPC1,30,DMAWNZ+M_FLIPV,>13
|
||
ASITEMN BDX+141,BDY+118,STEELPC1,30,DMAWNZ+M_FLIPH+M_FLIPV,>13
|
||
.word -1000
|
||
|
||
|
||
BWX .set 130
|
||
BWY .set -88
|
||
BHDX .set 200
|
||
BHDY .set -168
|
||
|
||
abwallnew_t
|
||
ASITEMN BWX,BWY,DORWAY1,50,DMAWNZ,>40
|
||
ASITEMN BWX+138,BWY,DORWAY1,50,DMAWNZ+M_FLIPH,>40
|
||
ASITEMN BWX,BWY,BIGDOR,155,DMAWNZ,>44
|
||
ASITEMN BWX+138,BWY,BIGDOR,155,DMAWNZ+M_FLIPH,>45
|
||
ASITEMN BHDX,BWY-120,TOPHED,152,DMAWNZ,>60
|
||
ASITEMN BHDX,BWY-120,HEDTUBES,152,DMAWNZ,>60
|
||
ASITEMN BHDX,BWY-120,HEDTUBES,152,DMAWNZ+M_FLIPH,>60
|
||
ASITEMN BHDX,BWY-120,CHEEK,152,DMAWNZ,>60
|
||
ASITEMN BHDX,BWY-120,CHIN,152,DMAWNZ,>60
|
||
ASITEMN BHDX,BWY-120,EAR,152,DMAWNZ,>60
|
||
.word -1000
|
||
|
||
|
||
|
||
doorsnd_as
|
||
ASLAB 120/5 ;Open
|
||
ASSND doorsldsnd
|
||
ASSLP 5
|
||
ASDSJ
|
||
|
||
ASSND musicsnd
|
||
ASSLP 60
|
||
ASSND ahkbang ;Yell!
|
||
ASSLP 126
|
||
|
||
ASLAB 120/5 ;Close
|
||
ASSND doorsldsnd
|
||
ASSLP 5
|
||
ASDSJ
|
||
ASEND
|
||
|
||
********************************
|
||
* Initialize boss
|
||
* A0=X, A1=Y
|
||
|
||
SUBRP aboss_init
|
||
|
||
PUSH a2,a3,a9,a10
|
||
movi aboss_t,a9 ;A9=*Init data
|
||
movi bossd_t,a10
|
||
|
||
abinlp move *a9+,a4 ;Get OFLAGS
|
||
jrz abinx ;End?
|
||
move *a9+,a5 ;OID
|
||
zext a5
|
||
move *a9+,a3 ;Z
|
||
move *a9+,a2,L ;*Img
|
||
clr a6 ;XV
|
||
clr a7 ;YV
|
||
PUSH a0
|
||
CALLA BEGINOBJ2
|
||
PULL a0
|
||
move a10,*a8(OPLINK),L ;Link object to block structure
|
||
move a8,*a10+,L ;Save pointer to obj
|
||
addk 32,a10
|
||
jruc abinlp
|
||
|
||
abinx clr a0
|
||
move a0,*a10,L ;Zero last pointer to mark end
|
||
|
||
CREATE BOSSPID,aboss_glue ;Keep boss together
|
||
|
||
PULL a2,a3,a9,a10
|
||
rets
|
||
|
||
ABZ equ 160
|
||
|
||
aboss_t
|
||
.word DMAWNZ,CLSENMY|TYPABOSS|SUBABBACK,ABZ ;Back
|
||
.long BBSHP1
|
||
shpart .word DMAWNZ|M_NOCOLL,CLSNEUT,120 ;L shadow (2 in row)
|
||
.long BIGSHAD
|
||
.word DMAWNZ|M_FLIPH|M_NOCOLL,CLSNEUT,120 ;R shadow
|
||
.long BIGSHAD
|
||
akpart .word DMAWNZ|M_NOCOLL,CLSNEUT|1,ABZ+5 ;Akhboob
|
||
.long AKB1ARMUP1
|
||
.word DMAWNZ,CLSENMY|TYPABOSS,ABZ ;Center
|
||
.long BBSHP2
|
||
.word DMAWNZ,CLSENMY|TYPABOSS,ABZ ;Front
|
||
.long BBSHP3
|
||
.word DMAWNZ,CLSENMY|TYPABOSS,ABZ ;Close left
|
||
.long BBSHP4
|
||
.word DMAWNZ,CLSENMY|TYPABOSS,ABZ ;Far left
|
||
.long BBSHP5
|
||
.word DMAWNZ|M_FLIPH,CLSENMY|TYPABOSS,ABZ ;Close rgt
|
||
.long BBSHP4
|
||
.word DMAWNZ|M_FLIPH,CLSENMY|TYPABOSS,ABZ ;Far rgt
|
||
.long BBSHP5
|
||
blpart .word DMAWNZ,CLSENMY|TYPABOSS,ABZ-1 ;Left ball (3 in row)
|
||
.long BBALL1
|
||
.word DMAWNZ,CLSENMY|TYPABOSS,ABZ-1 ;Left arm
|
||
.long BBARM
|
||
.word DMAWNZ,CLSENMY|TYPABOSS,ABZ-1 ;Left arm2
|
||
.long BBARM2
|
||
brpart .word DMAWNZ|M_FLIPH,CLSENMY|TYPABOSS,ABZ-1 ;Rgt ball
|
||
.long BBALL1
|
||
.word DMAWNZ|M_FLIPH,CLSENMY|TYPABOSS,ABZ-1 ;Rgt arm
|
||
.long BBARM
|
||
.word DMAWNZ|M_FLIPH,CLSENMY|TYPABOSS,ABZ-1 ;Rgt arm2
|
||
.long BBARM2
|
||
.word 0
|
||
|
||
SHPART equ (shpart-aboss_t)/80*64
|
||
AKPART equ (akpart-aboss_t)/80*64
|
||
BLPART equ (blpart-aboss_t)/80*64
|
||
BRPART equ (brpart-aboss_t)/80*64
|
||
|
||
|
||
********************************
|
||
* Keep plyrs shoes on (Process)
|
||
|
||
SUBRP plyr_shoeson
|
||
|
||
movi PLYRPRCS,a8
|
||
|
||
psolp movi >8140,a1
|
||
move *a8,a0,L
|
||
jrz pso50
|
||
move *a0(LEG_PRC),a0,L
|
||
move a1,*a0(SHOECNT)
|
||
pso50 move *a8(32),a0,L
|
||
jrz pso100
|
||
move *a0(LEG_PRC),a0,L
|
||
move a1,*a0(SHOECNT)
|
||
pso100 SLOOP 90,psolp
|
||
|
||
|
||
********************************
|
||
* Starts various scrollers
|
||
* A11=*Aboss process
|
||
|
||
SUBRP ab_scrollstrt
|
||
|
||
SLEEP 120
|
||
|
||
move @WORLDTLX+16,a8 ;>Start 1st scroll
|
||
addk 5,a8 ;A8=X target line to trigger scroll
|
||
clr a9 ;A9=0 (not checking for y target)
|
||
movi pathb2,a10 ;Scroll table
|
||
movi >8000,a0
|
||
move a0,@HZSPD,L
|
||
CREATE TARGPID,TARGET
|
||
; clr a9 ;A9=0 for up, 1 for rgt
|
||
; CREATE ARWPID,ONARRW ;Turn on lft arrow
|
||
; CREATE FUTUREPID,AOF ;Arrow off after a time
|
||
movi 35,a0
|
||
move a0,@WAVE
|
||
|
||
movi base2,a0 ;DEBUG
|
||
move a0,@CURRENT,L
|
||
; movi baseb2,a0
|
||
clr a0
|
||
move a0,@BCURRENT,L
|
||
|
||
|
||
asslp1 SLEEPK 30
|
||
move *a11(abmode),a0
|
||
jrn asslp1 ;Guns OK?
|
||
movi TARGPID,a0
|
||
movi -1,a1
|
||
calla EXISTP
|
||
jrnz asslp1 ;Scroll on?
|
||
|
||
move @WORLDTLX+16,a8 ;>Start 2nd scroll
|
||
addk 5,a8 ;A8=X target line to trigger scroll
|
||
clr a9 ;A9=0 (not checking for y target)
|
||
movi pathb3,a10
|
||
movi >2000,a0
|
||
move a0,@HZSPD,L
|
||
CREATE TARGPID,TARGET
|
||
|
||
movi base3,a0
|
||
move a0,@CURRENT,L
|
||
movi baseb3,a0
|
||
move a0,@BCURRENT,L
|
||
|
||
|
||
asslp2 SLEEPK 30
|
||
move @WORLDTLY+16,a0
|
||
cmpi ABWRLDTY+430,a0
|
||
jrgt asslp2 ;!Halfway there?
|
||
|
||
movk 1,a0
|
||
move a0,*a11(abmode) ;Start chase plyr
|
||
|
||
asslp3 SLEEPK 30
|
||
move *a11(abmode),a0
|
||
subk 1,a0
|
||
jreq asslp3 ;Guns OK?
|
||
movi TARGPID,a0
|
||
movi -1,a1
|
||
calla EXISTP
|
||
jrnz asslp3 ;Scroll on?
|
||
|
||
asslp4 SLEEPK 30
|
||
move @abossaballnum,a0
|
||
jrgt asslp4 ;Atkballs OK?
|
||
|
||
move @WORLDTLX+16,a8 ;>Start 3rd scroll
|
||
addk 5,a8 ;A8=X target line to trigger scroll
|
||
clr a9 ;A9=0 (not checking for y target)
|
||
movi pathb4,a10
|
||
movi >4000,a0
|
||
move a0,@HZSPD,L
|
||
CREATE TARGPID,TARGET
|
||
|
||
DIE
|
||
|
||
|
||
pathb2 .word 1,212*2,0
|
||
pathb3 .word 1,534*8,0
|
||
pathb4 .word 1,100*4,0
|
||
|
||
|
||
base2 .WORD 0B3BH,10,0B6BH,3000H ;SIDE WALL
|
||
.WORD 0C9BH,10,0CD7H,3000H ;SIDE WALL
|
||
.WORD 0
|
||
base3 .WORD 0B3BH,10,0B50H,03000H
|
||
.WORD 0CB8H,10,0CD7H,03000H
|
||
.WORD 0B3BH,10,0B96H,17CH ;TUBE UP LEFT
|
||
.WORD 0C74H,10,0CE6H,017CH ;TUBE UP RGHT
|
||
.WORD 0B3BH,10,0D26H,0140H ;BACK WALL
|
||
.WORD 0
|
||
baseb2 .WORD 0B3BH,10,0B6BH-12,3000H ;SIDE WALL
|
||
.WORD 0C9BH+12,10,0CD7H,3000H ;SIDE WALL
|
||
.WORD 0
|
||
baseb3 .WORD 0B3BH,10,0B50H-12,03000H
|
||
.WORD 0CB8H+12,10,0CD7H,03000H
|
||
.WORD 0B3BH,10,0B96H-12,17CH-12 ;TUBE UP LEFT
|
||
.WORD 0C74H+12,10,0CE6H,017CH-12 ;TUBE UP RGHT
|
||
.WORD 0B3BH,10,0D26H,0140H-12 ;BACK WALL
|
||
.WORD 0
|
||
|
||
|
||
|
||
********************************
|
||
* Keep boss objects together
|
||
|
||
SUBRP aboss_glue
|
||
|
||
movi bossd_t,a8 ;A8=*Data block
|
||
|
||
PUSH a12,a13
|
||
move *a8+,a10,L ;First piece index
|
||
move a8,a9
|
||
move *a10(OIMG),a1,L
|
||
move *a10(OSIZE),a2,L
|
||
move *a10(OFLAGS),a4
|
||
calla GANIOF ;Get XY ani offset
|
||
move a6,a12 ;Save X anioff
|
||
move a7,a13 ;Save Y anioff
|
||
jruc abg40
|
||
|
||
abglp move *a8(OIMG),a1,L
|
||
move *a8(OSIZE),a2,L
|
||
move *a8(OFLAGS),a4
|
||
calla GANIOF ;Get XY ani offset
|
||
sub a12,a6
|
||
sub a13,a7
|
||
|
||
move *a8(OID),a0 ;Get oid
|
||
move *a9,a1 ;ABDXO
|
||
|
||
btst B_FLIPH,a4
|
||
jrz abg5 ;No flip fix?
|
||
addi >10000,a6
|
||
neg a1
|
||
|
||
abg5 cmpi CLSNEUT,a0 ;>Adjust shadow for height
|
||
jrne abg10
|
||
btst B_FLIPH,a4
|
||
jrz abg8 ;No flip fix?
|
||
addi >10000,a6 ;One more
|
||
abg8
|
||
; move @bossz,a0,L
|
||
; sub a0,a7
|
||
subk 10,a7
|
||
|
||
abg10 move *a10(OXVAL),a0,L
|
||
sub a6,a0
|
||
sll 16,a1
|
||
sub a1,a0
|
||
move a0,*a8(OXVAL),L
|
||
move *a10(OYVAL),a1,L
|
||
sub a7,a1
|
||
move a1,*a8(OYVAL),L
|
||
|
||
abg40 addk 32,a9
|
||
move *a9+,a8,L ;Get next index
|
||
jrnz abglp ;More?
|
||
|
||
PULL a12,a13
|
||
|
||
SLOOP 1,aboss_glue
|
||
|
||
|
||
|
||
********************************
|
||
* Check if boss on screen
|
||
* A8=*Boss 1st obj
|
||
*Rets: Z if on screen, Trashes A0-A3
|
||
|
||
SUBRP ab_keeponscrn
|
||
|
||
PUSH a4,a5
|
||
clr a2
|
||
|
||
move *a8(OXPOS),a4
|
||
addi ABXO,a4 ;Center X
|
||
move *a8(OYPOS),a5
|
||
addi ABYO,a5 ;Center Y
|
||
move *a8(OXVEL),a0,L
|
||
move *a8(OYVEL),a1,L
|
||
|
||
move @WORLDTLX+16,a3
|
||
sub a3,a4 ;X
|
||
move @WORLDTLY+16,a3
|
||
sub a3,a5 ;Y
|
||
|
||
cmpi 50,a4 ;XMin
|
||
jrge akos50
|
||
movk 1,a2
|
||
abs a0 ;+
|
||
|
||
akos50 cmpi 350,a4 ;XMax
|
||
jrle akos80
|
||
movk 1,a2
|
||
abs a0
|
||
neg a0 ;-
|
||
|
||
akos80 cmpi -25,a5 ;YMin
|
||
jrge akos120
|
||
movk 1,a2
|
||
abs a1 ;+
|
||
|
||
|
||
akos120 cmpi 250,a5 ;YMax
|
||
jrle akos300
|
||
movk 1,a2
|
||
abs a1
|
||
neg a1 ;-
|
||
|
||
akos300 move a2,a2
|
||
jrz akosx
|
||
move a8,a2
|
||
movi bossd_t,a8 ;A8=*Boss data struct
|
||
callr vel_set
|
||
move a2,a8
|
||
|
||
akosx PULL a4,a5
|
||
rets
|
||
|
||
|
||
********************************
|
||
* Aboss akhboob pilot animations (Process)
|
||
* A11=*Aboss process
|
||
|
||
|
||
SUBRP ab_akhboobani
|
||
|
||
move @bossd_t+AKPART,a8,L ;*Akhboob obj
|
||
aabalp
|
||
movk 15,a0
|
||
callr rndrng0
|
||
sll 5,a0 ;*32
|
||
addi aaba_t,a0
|
||
move *a0,a9,L
|
||
move *a9+,a2 ;Get delay
|
||
jrn aaba50 ;No speech?
|
||
CREATE BOSSPID,ab_akhb_rndspch
|
||
move a2,*a0(PTIME)
|
||
aaba50 JSRP FRANIMQ
|
||
movi >7f,a0
|
||
callr rnd
|
||
addk 10,a0
|
||
calla PRCSLP
|
||
jruc aabalp
|
||
|
||
|
||
aaba_t .long akbrchl_l,akbrchl_l,akbrchr_l,akbrchr_l
|
||
.long akbrchl_l,akbrchl_l,akbrchr_l,akbrchr_l
|
||
.long akbhdtrn_l,akbhdtrn_l,akbhdtrn_l,akbhdtrn_l
|
||
.long akb1aup_l,akb2aup_l,akbyak_l,akblean_l
|
||
|
||
akbrchl_l
|
||
.word -1
|
||
LWW AKBREACH,FLIPBITS|15,0
|
||
LWL0 AKB1ARMUP1,1
|
||
akbrchr_l
|
||
.word -1
|
||
LWW AKBREACH,FLIPBITS|15,M_FLIPH
|
||
LWL0 AKB1ARMUP1,1
|
||
akbhdtrn_l
|
||
.word -1
|
||
LW AKBHEDTURN,40
|
||
LWL0 AKB1ARMUP1,1
|
||
akb1aup_l
|
||
.word 4*3
|
||
LW AKB1ARMUP1,4
|
||
LW AKB1ARMUP2,4
|
||
LW AKB1ARMUP3,4
|
||
LW AKB1ARMUP4,4
|
||
LW AKB1ARMUP5,4
|
||
LW AKB1ARMUP6,5
|
||
LW AKB1ARMUP5,4
|
||
LW AKB1ARMUP6,5
|
||
LW AKB1ARMUP5,4
|
||
LW AKB1ARMUP6,4
|
||
LW AKB1ARMUP5,4
|
||
LW AKB1ARMUP4,4
|
||
LW AKB1ARMUP3,4
|
||
LW AKB1ARMUP2,4
|
||
LWL0 AKB1ARMUP1,1
|
||
akb2aup_l
|
||
.word 4*3
|
||
LW AKB2ARMUP1,4
|
||
LW AKB2ARMUP2,4
|
||
LW AKB2ARMUP3,4
|
||
LW AKB2ARMUP4,4
|
||
LW AKB2ARMUP5,5
|
||
LW AKB2ARMUP4,5
|
||
LW AKB2ARMUP5,5
|
||
LW AKB2ARMUP4,5
|
||
LW AKB2ARMUP5,4
|
||
LW AKB2ARMUP4,4
|
||
LW AKB2ARMUP3,4
|
||
LW AKB2ARMUP2,4
|
||
LWL0 AKB2ARMUP1,1
|
||
akbyak_l
|
||
.word 0
|
||
LW AKBYAK,5
|
||
LW AKB1ARMUP1,5
|
||
LW AKBYAK,4
|
||
LW AKB1ARMUP1,5
|
||
LW AKBYAK,5
|
||
LW AKB1ARMUP1,4
|
||
LW AKBYAK,4
|
||
LW AKB1ARMUP1,4
|
||
LW AKBYAK,4
|
||
LWL0 AKB1ARMUP1,1
|
||
akblean_l
|
||
.word 0
|
||
LW AKBLEAN1,5
|
||
LW AKBLEAN2,5
|
||
LW AKBLEAN3,5
|
||
LW AKBLEAN4,5
|
||
LW AKBLEAN3,5
|
||
LW AKBLEAN4,5
|
||
LW AKBLEAN3,5
|
||
LW AKBLEAN4,5
|
||
LW AKBLEAN3,5
|
||
LW AKBLEAN2,5
|
||
LW AKBLEAN1,5
|
||
LWL0 AKB1ARMUP1,1
|
||
|
||
|
||
********************************
|
||
* Random akhboob speech
|
||
|
||
SUBRP ab_akhb_rndspch
|
||
|
||
movk 4,a0
|
||
callr rndrng0
|
||
sll 5,a0 ;*32
|
||
addi abakhspeech_t,a0
|
||
move *a0,a0,L
|
||
calla ONESND
|
||
DIE
|
||
|
||
abakhspeech_t
|
||
.long ahkb1,ahkb2,ahkb3,ahkbsta,ahkbang
|
||
|
||
|
||
********************************
|
||
* ABOSS turret spawner (Process)
|
||
* A8=*1st boss obj
|
||
* A11=*ABOSS process
|
||
|
||
APTRPD KPTSOBJ ,0 ;For turret (in ARAB)
|
||
|
||
SUBRP ab_gunturrets
|
||
|
||
movk 3,a9 ;Gun type
|
||
move a13,a10
|
||
CREATE T72PID,TTORSO
|
||
CREATE T72PID,TTORSO
|
||
CREATE T72PID,TTORSO
|
||
|
||
abgtlp SLEEPK 30
|
||
movi T72PID,a0
|
||
movi -1,a1
|
||
calla EXISTP
|
||
jrnz abgtlp ;Still alive?
|
||
|
||
clr a0
|
||
move a0,*a11(abmode) ;Start missile attack
|
||
|
||
DIE
|
||
|
||
|
||
|
||
********************************
|
||
* Aboss missile launcher (Process)
|
||
* A11=*Aboss process
|
||
|
||
APTRPD amlabproc ,0 ;*AB proc
|
||
|
||
SUBRP ab_msllauncher
|
||
|
||
move a11,*a13(amlabproc),L
|
||
|
||
amllp SLEEPK 8
|
||
move @HALT,a0
|
||
jrnz amllp ;Halt?
|
||
|
||
; move @bossd_t,a2,L ;Get * 1st obj
|
||
; move *a2(OYPOS),a2
|
||
; move @WORLDTLY+16,a0
|
||
; sub a0,a2
|
||
; cmpi 140,a2
|
||
; jrgt amllp ;Near bottom?
|
||
|
||
move *a13(amlabproc),a2,L
|
||
move *a2(abmode),a0
|
||
jrnz amlslp ;No missile mania?
|
||
|
||
move @bossd_t,a8,L ;*1st obj
|
||
movi abmslo_t,a9
|
||
movk 1,a0
|
||
callr rnd
|
||
jrnz aml500 ;Msl?
|
||
|
||
callr getplyr ;>Rocket
|
||
jrz amlslp ;No player?
|
||
callr abossseeko_dir32
|
||
move a0,a10
|
||
subk 9,a10
|
||
movk 7,a11
|
||
aml350 CREATE BOSSPID,rocket_fireab
|
||
movi rcktlnchsnd,a0
|
||
calla ONESND
|
||
SLEEPK 1
|
||
addk 3,a10 ;Turn
|
||
dsj a11,aml350
|
||
jruc amlslp
|
||
|
||
aml500 movk 3,a11 ;>Missile
|
||
aml550 movk 4,a0
|
||
callr rndrng0
|
||
addk 14,a0
|
||
move a0,a10 ;14-18
|
||
CREATE BOSSPID,missile_fireab
|
||
movi msllnchsnd,a0
|
||
calla ONESND
|
||
SLEEPK 7
|
||
addk 32,a9 ;Next slot
|
||
dsj a11,aml550
|
||
|
||
amlslp movi 55,a0
|
||
callr rndrng0
|
||
addk 10,a0
|
||
calla PRCSLP
|
||
jruc amllp
|
||
|
||
|
||
abmslo_t
|
||
.word ABXO,ABYO+15,ABXO-50,ABYO+15,ABXO+50,ABYO+15
|
||
|
||
|
||
|
||
********************************
|
||
* Aboss attack ball (Process)
|
||
* A9=*Ball data struct
|
||
|
||
; APTRPD aababproc ,0 ;*AB proc
|
||
WORDPD aabxvel ,2 ;XVel of ball
|
||
|
||
SUBRP ab_atkball
|
||
|
||
; movi 130,a0
|
||
movi 20,a0
|
||
move a0,*a9(ABDSHLD) ;Set shield
|
||
|
||
|
||
movi 40,a11
|
||
aab100 move a9,a8 ;>Extend ball and arms
|
||
movk 3,a3
|
||
aab120 addk 32,a8
|
||
move *a8,a1 ;ABDXO
|
||
addk 1,a1
|
||
move a1,*a8
|
||
addk 32,a8
|
||
dsj a3,aab120
|
||
SLEEPK 1
|
||
dsj a11,aab100
|
||
|
||
CREATE BOSSPID,ab_ballopen
|
||
SLEEP 60
|
||
move a13,a11
|
||
CREATE BOSSPID,ab_ballshoot
|
||
|
||
movk 1,a0
|
||
move a0,*a13(aabxvel)
|
||
|
||
aablp SLEEPK 1
|
||
move @HALT,a0
|
||
jrnz aablp ;Halt?
|
||
|
||
move *a13(aabxvel),a2
|
||
move *a9(ABDXO),a3
|
||
add a2,a3
|
||
cmpi 20,a3
|
||
jrge aab200 ;OK?
|
||
movk 20,a3
|
||
jruc aab400
|
||
|
||
aab200 cmpi 67,a3
|
||
jrle aab300 ;OK?
|
||
movi 67,a3
|
||
jruc aab400
|
||
|
||
aab300 movk >1f,a0
|
||
callr rnd
|
||
jrnz aab420 ;!Dir change?
|
||
aab400 neg a2 ;Neg XVel
|
||
aab420 move a2,*a13(aabxvel)
|
||
move a3,*a9(ABDXO)
|
||
move a3,*a9(ABDXO+64) ;Arm1
|
||
move a3,*a9(ABDXO+64*2) ;Arm2
|
||
|
||
;aab600 movk 3,a0
|
||
; callr rnd
|
||
; addk 3,a0 ;3-6
|
||
; move a0,a6
|
||
; move a9,a5
|
||
; move *a9,a8,L
|
||
; movi sparkball_l,a9
|
||
; movi 70,a0
|
||
; calla RNDRNGS
|
||
; move a0,a10
|
||
; movk 30,a11
|
||
;aab630 CREATE BOSSPID,mortar_relaboss
|
||
; addk 25,a11
|
||
; dsj a6,aab630
|
||
; move a5,a9
|
||
|
||
aab800 move *a9(ABDSHLD),a0
|
||
jrgt aablp ;Ball OK?
|
||
|
||
SLEEP 60*6
|
||
|
||
aab900 move a9,a8 ;>Retract ball and arms
|
||
movk 3,a3
|
||
aab920 addk 32,a8
|
||
move *a8,a1 ;ABDXO
|
||
subk 1,a1
|
||
move a1,*a8
|
||
addk 32,a8
|
||
dsj a3,aab920
|
||
SLEEPK 1
|
||
move *a9(ABDXO),a1
|
||
subk 12,a1
|
||
jrgt aab900 ;Still out?
|
||
|
||
|
||
move @abossaballnum,a0
|
||
subk 1,a0
|
||
move a0,@abossaballnum
|
||
jrgt aabx
|
||
movi 50,a0
|
||
move a0,@abossshld ;Let ship die
|
||
|
||
aabx DIE
|
||
|
||
|
||
sparkball_l
|
||
.long 0 ;*FRANIM
|
||
LW TEST1,2 ;82 Ticks
|
||
LW TEST2,3
|
||
LW TEST3,4
|
||
LW TEST4,6
|
||
LW TEST5,9
|
||
LW TEST6,11
|
||
LW TEST7,12
|
||
LW TEST6,11
|
||
LW TEST5,9
|
||
LW TEST4,6
|
||
LW TEST3,4
|
||
LW TEST2,3
|
||
LWL0 TEST1,2
|
||
.word DMAWNZ
|
||
.long BOOM3 ;*FRANIM
|
||
|
||
|
||
********************************
|
||
* Open the ball and animate (Process)
|
||
* A9=*Ball data struct
|
||
|
||
SUBRP ab_ballopen
|
||
|
||
SLEEPK 20
|
||
move *a9,a8,L
|
||
CREATE BOSSPID,ab_ballopenex
|
||
movi ballopen_l,a9
|
||
JSRP FRANIMQ
|
||
DIE
|
||
|
||
ballopen_l
|
||
LW BBALL2,7
|
||
LW BBALL3,7
|
||
LWL BLLFACE1,NEWPALET|5,GRNFCP
|
||
LW BLLFACE3,5
|
||
LW BLLFACE4,5
|
||
LW BLLFACE2,5
|
||
LW BLLGRIN1,5
|
||
LW BLLGRIN2,5
|
||
LW BLLGRIN1,5
|
||
LWL0 BLLFACE4,1
|
||
|
||
|
||
********************************
|
||
* Do extra face img for open ball (Process)
|
||
* A8=*Ball obj
|
||
|
||
SUBRP ab_ballopenex
|
||
|
||
move a8,a10
|
||
clr a0
|
||
clr a1
|
||
movi BLLOPEN1,a2
|
||
movi ABZ,a3 ;Z
|
||
move *a10(OFLAGS),a4
|
||
addi M_NOCOLL,a4
|
||
movi CLSDEAD,a5
|
||
clr a6
|
||
clr a7
|
||
calla BEGINOBJ2
|
||
movi ballopenex_l,a9
|
||
CREATE BOSSPID,FRQDELDIE
|
||
|
||
movk 13,a11 ;>Keep face on ball
|
||
aboelp move a8,a0
|
||
move a10,a8
|
||
calla GETANIXY
|
||
move *a0(OFLAGS),a4
|
||
calla GANISAG
|
||
move a0,a8
|
||
SLEEPK 1
|
||
dsj a11,aboelp
|
||
DIE
|
||
|
||
ballopenex_l
|
||
LW BLLOPEN1,7
|
||
LWL0 BLLOPEN2,7
|
||
|
||
|
||
|
||
********************************
|
||
* Fire shot from ball (Process)
|
||
* A9=*Ball data struct
|
||
* A11=*Ball main process
|
||
|
||
SUBRP ab_ballshoot
|
||
|
||
move *a9,a8,L
|
||
abslp CREATE BOSSPID,ab_ballpuff
|
||
movi puffsnd,a0
|
||
calla ONESND
|
||
SLEEPK 4
|
||
movk 3,a10
|
||
abs50 SLEEPK 3
|
||
CREATE BOSSPID,ab_ballshot
|
||
dsj a10,abs50
|
||
movk 30,a0
|
||
callr rndrng0
|
||
addi 60,a0
|
||
calla PRCSLP
|
||
move *a9(ABDSHLD),a0
|
||
jrgt abslp
|
||
DIE
|
||
|
||
********************************
|
||
* Do face puffing (Process)
|
||
* A8=*Ball obj
|
||
* A9=*Ball data struct
|
||
|
||
SUBRP ab_ballpuff
|
||
|
||
movi ballblow_l,a9
|
||
JSRP FRANIMQ
|
||
DIE
|
||
|
||
ballblow_l
|
||
LW BLLBLOW1,2
|
||
LW BLLBLOW2,2
|
||
LW BLLBLOW3,2
|
||
LW BLLBLOW4,2
|
||
LW BLLBLOW3,2
|
||
LW BLLBLOW2,2
|
||
LW BLLBLOW1,2
|
||
LWL0 BLLFACE4,1
|
||
|
||
|
||
********************************
|
||
* Fire shot from ball (Process)
|
||
* A8=*Ball obj
|
||
* A9=*Ball data struct
|
||
* A11=*Ball main process
|
||
|
||
WORDPD shotshield,0 ;Shield strength
|
||
; WORDPD shotsko,1 ;Seek offset -1/1
|
||
WORDPD shotdrag,2 ;Drag shift
|
||
|
||
SUBRP ab_ballshot
|
||
|
||
move *a11(aabxvel),a11
|
||
move *a8(OXPOS),a0
|
||
addk 26,a0
|
||
move *a8(OYPOS),a1
|
||
addi 42,a1
|
||
sll 16,a0
|
||
sll 16,a1
|
||
move *a8(OXVEL),a6,L
|
||
move *a8(OYVEL),a7,L
|
||
jrgt abf30 ;Pos YVel?
|
||
clr a7
|
||
abf30 addi >10000,a7
|
||
sll 17,a11 ;*2
|
||
move *a9(OFLAGS),a10
|
||
btst B_FLIPH,a10
|
||
jrz abf50 ;No flip?
|
||
neg a11
|
||
abf50 sub a11,a6
|
||
|
||
movi smrtball_t,a9
|
||
movk 16,a10
|
||
|
||
|
||
SUBRP smrtshot_fire ;A8=*Src obj, A9=*Offset_t, A10=Dir 0-31
|
||
|
||
movi 200,a11 ;Fuel
|
||
movk 1,a0 ;Shield
|
||
movi 159,a3 ;Z
|
||
|
||
move a0,*a13(shotshield)
|
||
movi -5,a0 ;Slow speed
|
||
move a0,*a13(shotdrag)
|
||
|
||
move *a8(OXPOS),a0
|
||
move *a8(OYPOS),a1
|
||
move *a9+,a2 ;+X offset
|
||
add a2,a0
|
||
move *a9+,a2 ;+Y offset
|
||
add a2,a1
|
||
|
||
sll 16,a0
|
||
sll 16,a1
|
||
movi BALL6,a2 ;*Image
|
||
movi DMAWNZ,a4
|
||
movi CLSENMY+TYPSL+SUBMSL,a5
|
||
calla BEGINOBJ2
|
||
|
||
movk 25,a9 ;Seek delay
|
||
jruc ssf400
|
||
|
||
|
||
ssf200 SLEEPK 1
|
||
subk 1,a9
|
||
jrlt ssf220
|
||
jrgt ssf500 ;Don't seek?
|
||
; movi 159,a0
|
||
; move a0,*a8(OZPOS)
|
||
|
||
ssf220
|
||
calla getcloseplyr
|
||
jrz ssf700 ;No player?
|
||
callr seekob_dir32la
|
||
|
||
ssf300 sub a10,a0 ;A0=Difference
|
||
jrz ssf500
|
||
|
||
move a0,a1
|
||
abs a0
|
||
subk 16,a0
|
||
jrle ssf350
|
||
neg a1
|
||
ssf350 move a1,a1
|
||
jrnn ssf360
|
||
subk 2,a10 ;-1
|
||
ssf360 addk 1,a10 ;+1
|
||
|
||
|
||
ssf400 ANDK >1f,a10 ;Make 0-31
|
||
|
||
ssf500 move a10,a0
|
||
sll 4,a0 ;*16
|
||
addi rocketv_t,a0
|
||
move *a0(8*16),a6 ;XV
|
||
move *a0,a7 ;YV
|
||
|
||
move *a13(shotdrag),a2
|
||
move *a8(OXVEL),a0,L
|
||
move a0,a1
|
||
sra a2,a1
|
||
sub a1,a0 ;-Drag
|
||
add a6,a0 ;+Vel
|
||
move a0,*a8(OXVEL),L
|
||
move *a8(OYVEL),a0,L
|
||
move a0,a1
|
||
sra a2,a1
|
||
sub a1,a0 ;-Drag
|
||
add a7,a0 ;+Vel
|
||
move a0,*a8(OYVEL),L
|
||
|
||
ssf700
|
||
movk >f,a1
|
||
and a11,a1
|
||
jrnz ssf800 ;Skip screen check?
|
||
calla SCRTST
|
||
janz DELOBJDIE
|
||
ssf800
|
||
; move @bloflg,a0
|
||
; jrn ssfx ;Big blow?
|
||
|
||
subk 1,a11
|
||
jrgt ssf200 ;Got fuel?
|
||
|
||
ssfx move *a8(OYPOS),a0
|
||
addk 15,a0
|
||
move a0,*a8(OYPOS)
|
||
movi DMAWNZ+M_NOCOLL,a0
|
||
move a0,*a8(OFLAGS)
|
||
movi mslexpsnd,a0
|
||
calla ONESND
|
||
movi mslnofuel_l,a9 ;Out of fuel!
|
||
jauc FRQDELDIE
|
||
|
||
|
||
|
||
smrtball_t
|
||
.word 26,42
|
||
|
||
|
||
|
||
********************************
|
||
* Part of boss monster takes a hit
|
||
* A0=*Obj that hit
|
||
* A8=*Boss obj
|
||
|
||
.def aboss_hit
|
||
|
||
SUBR aboss_hit
|
||
|
||
mmtm sp,a1,a2,a3,a4,a5,a6,a7,a9,a10,a11
|
||
|
||
movk 1,a1
|
||
move a1,@OUT_FLG ;Stop scan
|
||
|
||
move @bodystat,a1
|
||
jrnz abhx ;All blown?
|
||
|
||
move a0,a11 ;A11=*Obj that hit
|
||
move *a11(OID),a10 ;Get subtype
|
||
sll 32-3,a10
|
||
srl 32-3-4,a10 ;*16
|
||
jrz abh100 ;Bomb?
|
||
move @bloflg,a0
|
||
jrn abh100 ;Blow in progress?
|
||
; callr bosshit_big
|
||
|
||
abh100 move *a11(OXVEL),a1,L
|
||
move *a11(OYVEL),a2,L
|
||
addi buldat2_t,a10 ;A10=*Data_t
|
||
move *a10,a9 ;>Push back
|
||
sra a9,a1
|
||
sra a9,a2
|
||
callr boss_addxy
|
||
|
||
move *a10,a0 ;>Shake
|
||
addk 10,a0
|
||
callr boss_addrndxy
|
||
|
||
movk 3,a0 ;75%
|
||
callr rnd
|
||
jrnz abhx ;No damage?
|
||
|
||
movi >21210000,a9
|
||
CREATE0 FLASHME
|
||
|
||
move *a8(OPLINK),a9,L ;A9=*Obj data struct
|
||
move *a10(>80),a2 ;A2=Weapon damage
|
||
jrnn abh140 ;!Bomb?
|
||
movk 1,a0
|
||
callr rnd
|
||
move a0,a2 ;Bomb damage 0 or 1
|
||
abh140
|
||
move @abossshld,a3
|
||
jrle abh300 ;Not counting?
|
||
sub a2,a3
|
||
jrgt abh200 ;OK?
|
||
CREATE BOSSPID,ab_afdmxpld
|
||
clr a3
|
||
abh200 move a3,@abossshld
|
||
jruc abh700
|
||
|
||
abh300 move *a9(ABDSHLD),a3 ;A3=Shield strength
|
||
jrle abh700
|
||
sub a2,a3
|
||
jrgt abh400 ;OK?
|
||
move @bloflg,a0
|
||
jrnz abh700 ;Blow or lockout in progress?
|
||
CREATE BOSSPID,ab_ballxpld
|
||
|
||
abh400 move a3,*a9(ABDSHLD)
|
||
|
||
|
||
abh700 move *a10(>80),a1 ;Get score
|
||
abs a1
|
||
callr boss_scorehit
|
||
|
||
abhx mmfm sp,a1,a2,a3,a4,a5,a6,a7,a9,a10,a11
|
||
rets
|
||
|
||
; Bullet subtype data table
|
||
;SUBLZR 1 ;Regular shots
|
||
;SUBSPRY 2 ;Spray
|
||
;SUBFIRE1 3 ;Flame thrower
|
||
;SUBGRND 4 ;Arcing balls
|
||
;SUBNOSTP 5 ;Non-stopping rockets
|
||
;SUBSPDG1 6 ;Fast blue balls
|
||
buldat2_t
|
||
.word -2,-3,-3,-3, 0, 0,-2,0 ;Shift count
|
||
.word -1, 1, 1, 3, 4, 3, 1,0 ;Damage/score
|
||
|
||
|
||
********************************
|
||
* Explode the ball (Process)
|
||
* A8=*Ball obj
|
||
* A9=*Ball data struct
|
||
|
||
SUBRP ab_ballxpld
|
||
|
||
|
||
movi ahkbang,a0
|
||
calla ONESNDOVR
|
||
|
||
movi 60*3,a6
|
||
abxlp
|
||
move *a8(OFLAGS),a4
|
||
move *a8(OXPOS),a10
|
||
addk 25,a10 ;+XO
|
||
move *a8(OYPOS),a11
|
||
addk 20,a11 ;+YO
|
||
; movk 3,a0
|
||
; and a6,a0
|
||
btst 0,a6
|
||
jrnz abx150
|
||
movi aballlexp_t,a9 ;>Explosion
|
||
btst B_FLIPH,a4
|
||
jrz abx100 ;Left ball?
|
||
movi aballrexp_t,a9
|
||
abx100 CREATE BOSSPID,mk_objfranim
|
||
abx150
|
||
; addi AY+40,a11
|
||
; movi shldrl_t,a9 ;>Alternate LR shoulder
|
||
; btst 0,a6
|
||
; jrz abx200
|
||
; movi shldrr_t,a9
|
||
;abx200 CREATE BOSSPID,mk_objfranim
|
||
|
||
movi exp1snd,a0
|
||
calla ONESND
|
||
movi exp2snd,a0
|
||
calla ONESND
|
||
movk 8,a0
|
||
callr boss_addrndxy ;Shake!
|
||
movi >8000,a1
|
||
clr a2
|
||
btst B_FLIPH,a4
|
||
jrz abx400 ;LBall?
|
||
neg a1
|
||
abx400 callr boss_addxy ;Push
|
||
move a6,a9
|
||
SLEEPK 1
|
||
move a9,a6
|
||
dsj a6,abxlp
|
||
|
||
|
||
movi aballwrk_l,a9
|
||
JSRP FRANIMQ
|
||
DIE
|
||
|
||
aballlexp_t
|
||
.long XBOOM2
|
||
.word 190,->800,>200,->800,>800
|
||
aballrexp_t
|
||
.long XBOOM2
|
||
.word 190,->200,>800,->800,>800
|
||
|
||
aballwrk_l
|
||
LWL BBALLWRECK,NEWPALET|1,BBSHPAL
|
||
.long 0
|
||
|
||
|
||
|
||
|
||
********************************
|
||
* Explode the death machine (Process)
|
||
* A8=*Ball obj
|
||
* A9=*Ball data struct
|
||
|
||
SUBRP ab_afdmxpld
|
||
|
||
|
||
movi ahkbang,a0
|
||
calla ONESNDOVR
|
||
|
||
move @bossd_t,a8,L ;A8=*1st obj
|
||
|
||
movi 60*5,a6
|
||
aafxlp
|
||
; move *a8(OFLAGS),a4
|
||
move *a8(OXPOS),a10
|
||
addk 25,a10 ;+XO
|
||
move *a8(OYPOS),a11
|
||
addk 30,a11 ;+YO
|
||
; movk 3,a0
|
||
; and a6,a0
|
||
; jrnz aafx150
|
||
movi afdmexp_t,a9 ;>Explosion
|
||
CREATE BOSSPID,mk_objfranim
|
||
aafx150
|
||
; addi AY+40,a11
|
||
; movi shldrl_t,a9 ;>Alternate LR shoulder
|
||
; btst 0,a6
|
||
; jrz aafx200
|
||
; movi shldrr_t,a9
|
||
;aafx200 CREATE BOSSPID,mk_objfranim
|
||
|
||
movi exp1snd,a0
|
||
calla ONESND
|
||
movi exp2snd,a0
|
||
calla ONESND
|
||
movk 10,a0
|
||
callr boss_addrndxy ;Shake!
|
||
move a6,a9
|
||
SLEEPK 1
|
||
move a9,a6
|
||
dsj a6,aafxlp
|
||
|
||
|
||
movi afdmej_l,a9
|
||
JSRP FRANIMQ
|
||
|
||
|
||
movi bossd_t+AKPART+64,a9 ;>Delete all objs except for 1-3
|
||
jruc aafx530
|
||
aafx500 calla DELOBJ
|
||
clr a0
|
||
move a0,*a9+,L ;Clr out *
|
||
addk 32,a9
|
||
aafx530 move *a9,a0,L
|
||
jrnz aafx500
|
||
|
||
move @bossd_t+SHPART,a8,L ;>Small shadow
|
||
movi EJCTSHAD,a1
|
||
move *a8(OFLAGS),a4
|
||
calla ANI
|
||
move @bossd_t+SHPART+64,a8,L
|
||
move *a8(OFLAGS),a4
|
||
calla ANI
|
||
|
||
movi -1,a0
|
||
move a0,@abossshld ;Eject!
|
||
|
||
DIE
|
||
|
||
|
||
afdmexp_t
|
||
.long XBOOM2
|
||
.word 190,->800,>800,->800,>500
|
||
|
||
afdmej_l
|
||
LWL0 EJECTSEAT,1
|
||
.long 0
|
||
|
||
|
||
|
||
|
||
|
||
|
||
.end
|
||
|