Rev 1 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*
--------------------------------------------------------------------------------
Duke Caribbean: Life's A Beach
By Joris Weimar
© 1997 Sunstorm Interactive
--------------------------------------------------------------------------------
Duke Caribbean: Life's A Beach Plus
By Hendricks266
--------------------------------------------------------------------------------
// CON Files for the 'Duke Carribean Add-on' by SunStorm Interactive
//
// Actor - DRAGON - Sprite #3585
//
// --- Resources ---
//
// Sounds:
// Dragon Dying Sound - DRAGDIE.WAV
// Dragon Hurt Sound - DRAGHURT.WAV
// Dragon Roam Sound - DRAGROAM.WAV
// Dragon Wake-up Sound - DRAGRECO.WAV
//
// Art:
// 5 * 5 frame(s) - Dragon Bouncing Animation
// 6 * 1 frame(s) - Dragon Dying Animation
// 5 * 2 frame(s) - Dragon Firing Animation
*/
action DRAGONBOUNCE 0 2 5 1 20
action DRAGONBOUNCE2 10 3 5 1 20
action DRAGONSHOOT 31 2 5 1 40
action DRAGONSHRUNK 0 5 5 1 30
action DRAGONGROW 0 1 5
action DRAGONFROZEN 31 1 5 1
action DRAGONDEAD 30 1 1
action DRAGONDYING 25 6 1 1 12
move DRAGONSPEED 60 0
move DRAGONFLEE 300 0
move DRAGONSTOPPED
move DRAGONBACK -500 0
move DRAGONSHRUNKSPEED 50 0
ai AIDRAGONFLEE DRAGONBOUNCE DRAGONFLEE fleeenemy randomangle
ai AIDRAGONBOUNCESEE DRAGONBOUNCE DRAGONSPEED seekplayer
ai AIDRAGONBOUNCE DRAGONBOUNCE DRAGONSPEED faceplayer
ai AIDRAGONFLEE2 DRAGONBOUNCE2 DRAGONFLEE fleeenemy randomangle
ai AIDRAGONBOUNCESEE2 DRAGONBOUNCE2 DRAGONSPEED faceplayerslow
ai AIDRAGONBOUNCE2 DRAGONBOUNCE2 DRAGONSPEED faceplayer
ai AIDRAGONSHOOT DRAGONSHOOT DRAGONSTOPPED faceplayer
ai AIDRAGONSHRUNK DRAGONBOUNCE DRAGONSHRUNKSPEED fleeenemy randomangle
ai AIDRAGONGROW DRAGONGROW DRAGONSPEED faceplayer
ai AIDRAGONDYING DRAGONDYING DRAGONBACK
// faceplayer
state dragon_jibs
state scrap3_colorchange
debris SCRAP1 20
debris SCRAP2 22
debris SCRAP3 22
debris SCRAP4 22
debris SCRAP5 22
getlastpal
spritepal 0
state standard_jibs
getlastpal
ends
state dragongrowstate
ifcount 32
{
state scrap3_colorchange
debris SCRAP1 20
debris SCRAP2 22
debris SCRAP3 22
debris SCRAP4 22
debris SCRAP5 22
getlastpal
spritepal 0
guts JIBS4 24
guts JIBS6 28
getlastpal
addkills 1
sound SQUISHED
sound PIPEBOMB_EXPLODE
sound BALLEXPLODE
hitradius 2048 60 70 80 90
spawn BLOODPOOL
spawn EXPLOSION2
killit
}
else
{
sizeto 84 100
break
}
ends
state dragondeathanglecode
ifvare temp3 -1
{
getactor[THISACTOR].htang temp // get the angle of the projectile that hit the dragon
ifvarg temp 1024 subvar temp 1024 else addvar temp 1024 // turn the angle around to face the projectile
setvar temp2 0
randvar temp2 128 // randomizes the angle within a certain logical range, since the bullet holes are facing the player
ifrnd 128 addvarvar temp temp2 else subvarvar temp temp2
getactor[THISACTOR].ang temp3 // pass this along to EVENT_ANIMATESPRITES
setactor[THISACTOR].ang temp // sets the angle, just in time for movement
}
ends
state DRAGONBOUNCESTATESEE
ifbulletnear ai AIDRAGONFLEE
ifai AIDRAGONBOUNCESEE
{
ifactioncount 2
{
sound DRAGONROAM
ai AIDRAGONBOUNCESEE2
}
}
else ifactioncount 3 ai AIDRAGONBOUNCESEE
ifpdistl 6000
{
ifrnd 5
ifp palive
ai AIDRAGONSHOOT
}
ifcansee nullop else ai AIDRAGONBOUNCE
ends
state DRAGONBOUNCESTATE
ifai AIDRAGONBOUNCE
{
ifactioncount 2
{
sound DRAGONROAM
ai AIDRAGONBOUNCE2
}
}
else
{
ifactioncount 3 ai AIDRAGONBOUNCE
}
ifcansee
ifrnd 64
ifcanshoottarget
{
ifp palive ai AIDRAGONSHOOT
else ai AIDRAGONBOUNCESEE
}
ends
state DRAGONSHOOTSTATE
ifcount 8 nullop
else ifcount 7
{
shoot RPG
sound DRAGONSHOOTING
}
ifactioncount 2
{
ifrnd 100
{
ifcansee nullop else ai AIDRAGONBOUNCESEE // This line should make the dragon smarter.
resetcount
resetactioncount
}
else
{
ai AIDRAGONBOUNCESEE
resetcount
resetactioncount
}
}
ends
state DRAGONHITSTATE
ifdead
{
state random_wall_jibs
ifwasweapon GROWSPARK
{
sound ACTOR_GROWING
ai AIDRAGONGROW
break
}
ifwasweapon FREEZEBLAST
{
sound SOMETHINGFROZE
spritepal 1
move 0
action DRAGONFROZEN
strength 0
break
}
addkills 1
ifwasweapon RADIUSEXPLOSION
{
sound SQUISHED
state dragon_jibs
killit
}
else ifwasweapon RPG
{
sound SQUISHED
state dragon_jibs
killit
}
else
{
state dragondeathanglecode
ai AIDRAGONDYING
}
sound BALLEXPLODE
}
else
{
sound DRAGONPAIN
state random_wall_jibs
debris SCRAP3 5
ifwasweapon SHRINKSPARK
{
sound ACTOR_SHRINKING
ai AIDRAGONSHRUNK
}
else ifwasweapon GROWSPARK sound EXPANDERHIT
else ifrnd 64 ifai AIDRAGONSHOOT nullop else ai AIDRAGONSHOOT
}
ends
state DRAGONFLEESTATE
ifai AIDRAGONFLEE
{
ifactioncount 2
{
sound DRAGONROAM
ai AIDRAGONFLEE2
}
}
else
{
ifactioncount 3 ai AIDRAGONFLEE
}
ifrnd 15 ai AIDRAGONBOUNCE
ends
state DRAGONSHRINKSTATE
ifcount SHRUNKDONECOUNT ai AIDRAGONBOUNCE
else
ifcount SHRUNKCOUNT
sizeto 42 50
else
state genericshrunkcode
ends
state DRAGONDYINGSTATE
ifactioncount 6
{
state rf
iffloordistl 8 sound THUD
action DRAGONDEAD
move DRAGONSTOPPED
break
}
else move DRAGONBACK
// Note: Because of the way actioncounts work, "ifactioncount" really asks if it is at that value or greater.
// That's why we have to put bigger ones first, with "else" statements.
ends
useractor enemy DRAGON DRAGONSTRENGTH DRAGONBOUNCE
fall
cstator 257
setactor[THISACTOR].mdflags 16
ifai 0
{
setvar temp3 -1
ai AIDRAGONBOUNCE
}
state checksquished
ifaction DRAGONDEAD
{
cstat 0
ifrespawn
ifcount RESPAWNACTORTIME
{
spawn TRANSPORTERSTAR
cstat 257
strength DRAGONSTRENGTH
setvar temp3 -1
ai AIDRAGONBOUNCE
}
else
{
strength 0
ifhitweapon
ifwasweapon RADIUSEXPLOSION
{
sound BALLEXPLODE
state dragon_jibs
killit
}
break
}
}
else ifaction DRAGONFROZEN
{
// setactor[THISACTOR].mdflags 2
ifcount THAWTIME
{
ai AIDRAGONBOUNCE
getlastpal
}
else ifcount FROZENDRIPTIME ifrnd 8 spawn WATERDRIP
ifhitweapon
{
ifwasweapon FREEZEBLAST
{
strength 0
break
}
addkills 1
lotsofglass 30
ifrnd 84 spawn BLOODPOOL
sound GLASS_BREAKING
killit
}
ifp pfacing
ifpdistl FROZENQUICKKICKDIST
pkick
break
}
ifai AIDRAGONDYING
{
state DRAGONDYINGSTATE
break
}
ifhitweapon
state DRAGONHITSTATE
ifai AIDRAGONGROW state dragongrowstate
else ifai AIDRAGONSHRUNK state DRAGONSHRINKSTATE
else
{
sizeat 42 50
ifai AIDRAGONBOUNCESEE state DRAGONBOUNCESTATESEE
else ifai AIDRAGONBOUNCE state DRAGONBOUNCESTATE
else ifai AIDRAGONSHOOT state DRAGONSHOOTSTATE
else ifai AIDRAGONFLEE state DRAGONFLEESTATE
else ifai AIDRAGONFLEE2 state DRAGONFLEESTATE
else ifai AIDRAGONBOUNCESEE2 state DRAGONBOUNCESTATESEE
else ifai AIDRAGONBOUNCE2 state DRAGONBOUNCESTATE
}
enda
useractor notenemy DRAGONDEATH 0
setvar temp3 -1
setactor[THISACTOR].mdflags 16
addvar temp 1
ifvare temp 1
{
getplayer[THISACTOR].i temp2 // get the player's ID
// get the coordinates of the player and dragon
getactor[temp2].x x2
getactor[temp2].y y2
getactor[THISACTOR].x x
getactor[THISACTOR].y y
subvarvar x2 x
subvarvar y2 y
getangle y x2 y2 // calculates the angle to face the player
setactor[THISACTOR].htang y
}
ifvare temp 26
{
setvar temp 0
getactor[THISACTOR].x x
subvar x 1536
setactor[THISACTOR].x x
sizeat 42 50
state random_wall_jibs
sound BALLEXPLODE
cactor DRAGON
state dragondeathanglecode
ai AIDRAGONDYING
}
enda