mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-03-23 03:12:38 +00:00
Hardcoded the Canarivore
This commit is contained in:
parent
3a16a7d7d4
commit
98ea229680
8 changed files with 201 additions and 9 deletions
|
@ -2398,6 +2398,7 @@ static actionpointer_t actionpointers[] =
|
|||
{{A_DebrisRandom}, "A_DEBRISRANDOM"},
|
||||
{{A_TrainCameo}, "A_TRAINCAMEO"},
|
||||
{{A_TrainCameo2}, "A_TRAINCAMEO2"},
|
||||
{{A_CanarivoreGas}, "A_CANARIVOREGAS"},
|
||||
{{NULL}, "NONE"},
|
||||
|
||||
// This NULL entry must be the last in the list
|
||||
|
@ -4498,6 +4499,28 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
|||
"S_UNIDUS_RUN",
|
||||
"S_UNIDUS_BALL",
|
||||
|
||||
// Canarivore
|
||||
"S_CANARIVORE_LOOK",
|
||||
"S_CANARIVORE_AWAKEN1",
|
||||
"S_CANARIVORE_AWAKEN2",
|
||||
"S_CANARIVORE_AWAKEN3",
|
||||
"S_CANARIVORE_GAS1",
|
||||
"S_CANARIVORE_GAS2",
|
||||
"S_CANARIVORE_GAS3",
|
||||
"S_CANARIVORE_GAS4",
|
||||
"S_CANARIVORE_GAS5",
|
||||
"S_CANARIVORE_GASREPEAT",
|
||||
"S_CANARIVORE_CLOSE1",
|
||||
"S_CANARIVORE_CLOSE2",
|
||||
"S_CANARIVOREGAS_1",
|
||||
"S_CANARIVOREGAS_2",
|
||||
"S_CANARIVOREGAS_3",
|
||||
"S_CANARIVOREGAS_4",
|
||||
"S_CANARIVOREGAS_5",
|
||||
"S_CANARIVOREGAS_6",
|
||||
"S_CANARIVOREGAS_7",
|
||||
"S_CANARIVOREGAS_8",
|
||||
|
||||
// Boss Explosion
|
||||
"S_BOSSEXPLODE",
|
||||
|
||||
|
@ -7140,6 +7163,8 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
"MT_YELLOWSHELL", // Spring Shell (yellow)
|
||||
"MT_UNIDUS", // Unidus
|
||||
"MT_UNIBALL", // Unidus Ball
|
||||
"MT_CANARIVORE", // Canarivore
|
||||
"MT_CANARIVORE_GAS", // Canarivore gas
|
||||
|
||||
// Generic Boss Items
|
||||
"MT_BOSSEXPLODE",
|
||||
|
|
|
@ -175,6 +175,8 @@ light_t *t_lspr[NUMSPRITES] =
|
|||
&lspr[NOLIGHT], // SPR_MNUS
|
||||
&lspr[NOLIGHT], // SPR_SSHL
|
||||
&lspr[NOLIGHT], // SPR_UNID
|
||||
&lspr[NOLIGHT], // SPR_CANA
|
||||
&lspr[NOLIGHT], // SPR_CANG
|
||||
|
||||
// Generic Boos Items
|
||||
&lspr[JETLIGHT_L], // SPR_JETF // Boss jet fumes
|
||||
|
|
79
src/info.c
79
src/info.c
|
@ -63,6 +63,8 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"MNUS", // Minus
|
||||
"SSHL", // Spring Shell
|
||||
"UNID", // Unidus
|
||||
"CANA", // Canarivore
|
||||
"CANG", // Canarivore gas
|
||||
|
||||
// Generic Boss Items
|
||||
"JETF", // Boss jet fumes
|
||||
|
@ -1110,6 +1112,29 @@ state_t states[NUMSTATES] =
|
|||
{SPR_UNID, 0, 1, {A_Chase}, 0, 0, S_UNIDUS_RUN }, // S_UNIDUS_RUN
|
||||
{SPR_UNID, 1, 1, {A_UnidusBall}, 1, 0, S_UNIDUS_BALL}, // S_UNIDUS_BALL
|
||||
|
||||
// Canarivore
|
||||
{SPR_CANA, 0, 5, {A_Look}, 1200*FRACUNIT+1, 1, S_CANARIVORE_LOOK}, // S_CANARIVORE_LOOK
|
||||
{SPR_CANA, 0, 3, {A_PlaySound}, sfx_s3k76, 1, S_CANARIVORE_AWAKEN2}, // S_CANARIVORE_AWAKEN1
|
||||
{SPR_CANA, 1, 5, {NULL}, 0, 0, S_CANARIVORE_AWAKEN3}, // S_CANARIVORE_AWAKEN2
|
||||
{SPR_CANA, 2, 8, {NULL}, 0, 0, S_CANARIVORE_GAS1}, // S_CANARIVORE_AWAKEN3
|
||||
{SPR_CANA, 2, 15, {A_PlaySound}, sfx_s3k93, 1, S_CANARIVORE_GAS2}, // S_CANARIVORE_GAS1
|
||||
{SPR_CANA, 1, 4, {NULL}, 0, 0, S_CANARIVORE_GAS3}, // S_CANARIVORE_GAS2
|
||||
{SPR_CANA, 2, 0, {A_PlaySound}, sfx_s3k97, 1, S_CANARIVORE_GAS4}, // S_CANARIVORE_GAS3
|
||||
{SPR_CANA, 2, 5, {A_CanarivoreGas}, MT_CANARIVORE_GAS, 0, S_CANARIVORE_GAS5}, // S_CANARIVORE_GAS4
|
||||
{SPR_CANA, 1, 5, {NULL}, 0, 0, S_CANARIVORE_GASREPEAT}, // S_CANARIVORE_GAS5
|
||||
{SPR_CANA, 2, 0, {A_Repeat}, 6, S_CANARIVORE_GAS4, S_CANARIVORE_CLOSE1}, // S_CANARIVORE_GASREPEAT
|
||||
{SPR_CANA, 1, 8, {NULL}, 0, 0, S_CANARIVORE_CLOSE2}, // S_CANARIVORE_CLOSE1
|
||||
{SPR_CANA, 0, 90, {NULL}, sfx_s3k5d, 1, S_CANARIVORE_LOOK}, // S_CANARIVORE_CLOSE2
|
||||
|
||||
{SPR_CANG, 0|FF_TRANS90, 2, {NULL}, 0, 0, S_CANARIVOREGAS_2}, // S_CANARIVOREGAS_1
|
||||
{SPR_CANG, 0|FF_TRANS30, 2*TICRATE, {A_SetRandomTics}, 2, TICRATE, S_CANARIVOREGAS_3}, // S_CANARIVOREGAS_2
|
||||
{SPR_CANG, 0|FF_TRANS40, 10, {NULL}, 0, 0, S_CANARIVOREGAS_4}, // S_CANARIVOREGAS_3
|
||||
{SPR_CANG, 0|FF_TRANS50, 10, {NULL}, 0, 0, S_CANARIVOREGAS_5}, // S_CANARIVOREGAS_4
|
||||
{SPR_CANG, 0|FF_TRANS60, 10, {NULL}, 0, 0, S_CANARIVOREGAS_6}, // S_CANARIVOREGAS_5
|
||||
{SPR_CANG, 0|FF_TRANS70, 10, {NULL}, 0, 0, S_CANARIVOREGAS_7}, // S_CANARIVOREGAS_6
|
||||
{SPR_CANG, 0|FF_TRANS80, 10, {NULL}, 0, 0, S_CANARIVOREGAS_8}, // S_CANARIVOREGAS_7
|
||||
{SPR_CANG, 0|FF_TRANS90, 10, {NULL}, 0, 0, S_NULL}, // S_CANARIVOREGAS_8
|
||||
|
||||
// Boss Explosion
|
||||
{SPR_BOM2, FF_FULLBRIGHT|FF_ANIMATE, (5*7), {NULL}, 6, 5, S_NULL}, // S_BOSSEXPLODE
|
||||
|
||||
|
@ -4800,6 +4825,60 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_CANARIVORE
|
||||
134, // doomednum
|
||||
S_CANARIVORE_LOOK, // spawnstate
|
||||
1, // spawnhealth
|
||||
S_CANARIVORE_AWAKEN1, // seestate
|
||||
sfx_None, // seesound
|
||||
0, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_XPLD_FLICKY, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_pop, // deathsound
|
||||
0, // speed
|
||||
12*FRACUNIT, // radius
|
||||
80*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SPECIAL|MF_SHOOTABLE|MF_ENEMY|MF_SPAWNCEILING|MF_NOGRAVITY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_CANARIVORE_GAS
|
||||
-1, // doomednum
|
||||
S_CANARIVOREGAS_1, // spawnstate
|
||||
1, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
0, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_s3k5d, // deathsound
|
||||
0, // speed
|
||||
16*FRACUNIT, // radius
|
||||
32*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOCLIP|MF_SPECIAL, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_BOSSEXPLODE
|
||||
-1, // doomednum
|
||||
S_BOSSEXPLODE, // spawnstate
|
||||
|
|
28
src/info.h
28
src/info.h
|
@ -256,7 +256,7 @@ void A_TNTExplode();
|
|||
void A_DebrisRandom();
|
||||
void A_TrainCameo();
|
||||
void A_TrainCameo2();
|
||||
|
||||
void A_CanarivoreGas();
|
||||
|
||||
// ratio of states to sprites to mobj types is roughly 6 : 1 : 1
|
||||
#define NUMMOBJFREESLOTS 256
|
||||
|
@ -300,6 +300,8 @@ typedef enum sprite
|
|||
SPR_MNUS, // Minus
|
||||
SPR_SSHL, // Spring Shell
|
||||
SPR_UNID, // Unidus
|
||||
SPR_CANA, // Canarivore
|
||||
SPR_CANG, // Canarivore gas
|
||||
|
||||
// Generic Boss Items
|
||||
SPR_JETF, // Boss jet fumes
|
||||
|
@ -1255,6 +1257,28 @@ typedef enum state
|
|||
S_UNIDUS_RUN,
|
||||
S_UNIDUS_BALL,
|
||||
|
||||
// Canarivore
|
||||
S_CANARIVORE_LOOK,
|
||||
S_CANARIVORE_AWAKEN1,
|
||||
S_CANARIVORE_AWAKEN2,
|
||||
S_CANARIVORE_AWAKEN3,
|
||||
S_CANARIVORE_GAS1,
|
||||
S_CANARIVORE_GAS2,
|
||||
S_CANARIVORE_GAS3,
|
||||
S_CANARIVORE_GAS4,
|
||||
S_CANARIVORE_GAS5,
|
||||
S_CANARIVORE_GASREPEAT,
|
||||
S_CANARIVORE_CLOSE1,
|
||||
S_CANARIVORE_CLOSE2,
|
||||
S_CANARIVOREGAS_1,
|
||||
S_CANARIVOREGAS_2,
|
||||
S_CANARIVOREGAS_3,
|
||||
S_CANARIVOREGAS_4,
|
||||
S_CANARIVOREGAS_5,
|
||||
S_CANARIVOREGAS_6,
|
||||
S_CANARIVOREGAS_7,
|
||||
S_CANARIVOREGAS_8,
|
||||
|
||||
// Boss Explosion
|
||||
S_BOSSEXPLODE,
|
||||
|
||||
|
@ -3917,6 +3941,8 @@ typedef enum mobj_type
|
|||
MT_YELLOWSHELL, // Spring Shell (yellow)
|
||||
MT_UNIDUS, // Unidus
|
||||
MT_UNIBALL, // Unidus Ball
|
||||
MT_CANARIVORE, // Canarivore
|
||||
MT_CANARIVORE_GAS, // Canarivore gas
|
||||
|
||||
// Generic Boss Items
|
||||
MT_BOSSEXPLODE,
|
||||
|
|
|
@ -285,6 +285,7 @@ void A_TNTExplode(mobj_t *actor);
|
|||
void A_DebrisRandom(mobj_t *actor);
|
||||
void A_TrainCameo(mobj_t *actor);
|
||||
void A_TrainCameo2(mobj_t *actor);
|
||||
void A_CanarivoreGas(mobj_t *actor);
|
||||
//for p_enemy.c
|
||||
|
||||
//
|
||||
|
@ -12457,9 +12458,10 @@ void A_LookForBetter(mobj_t *actor)
|
|||
* \param z Center Z coordinates.
|
||||
* \param radius Radius.
|
||||
* \param speed Additional thrust on particles.
|
||||
* \param scale Scale.
|
||||
* \param initscale Initial scale when spawning.
|
||||
* \param scale "Default" scale.
|
||||
*/
|
||||
static void P_DustRing(mobjtype_t mobjtype, UINT32 div, fixed_t x, fixed_t y, fixed_t z, fixed_t radius, fixed_t speed, fixed_t scale)
|
||||
static void P_DustRing(mobjtype_t mobjtype, UINT32 div, fixed_t x, fixed_t y, fixed_t z, fixed_t radius, fixed_t speed, fixed_t initscale, fixed_t scale)
|
||||
{
|
||||
angle_t ang = FixedAngle(FixedDiv(360*FRACUNIT, div*FRACUNIT)); //(ANGLE_180/div)*2;
|
||||
UINT32 i;
|
||||
|
@ -12480,7 +12482,7 @@ static void P_DustRing(mobjtype_t mobjtype, UINT32 div, fixed_t x, fixed_t y, fi
|
|||
);
|
||||
|
||||
dust->angle = ang*i + ANGLE_90;
|
||||
P_SetScale(dust, scale);
|
||||
P_SetScale(dust, FixedMul(initscale, scale));
|
||||
dust->destscale = FixedMul(4*FRACUNIT + P_RandomFixed(), scale);
|
||||
dust->scalespeed = scale/24;
|
||||
P_Thrust(dust, ang*i, speed + FixedMul(P_RandomFixed(), scale));
|
||||
|
@ -12513,8 +12515,8 @@ void A_Boss5BombExplode(mobj_t *actor)
|
|||
if (actor->target)
|
||||
P_RadiusAttack(actor, actor->target, 7*actor->radius, 0);
|
||||
|
||||
P_DustRing(locvar1, 4, actor->x, actor->y, actor->z+actor->height, 2*actor->radius, 0, actor->scale);
|
||||
P_DustRing(locvar1, 6, actor->x, actor->y, actor->z+actor->height/2, 3*actor->radius, FRACUNIT, actor->scale);
|
||||
P_DustRing(locvar1, 4, actor->x, actor->y, actor->z+actor->height, 2*actor->radius, 0, FRACUNIT, actor->scale);
|
||||
P_DustRing(locvar1, 6, actor->x, actor->y, actor->z+actor->height/2, 3*actor->radius, FRACUNIT, FRACUNIT, actor->scale);
|
||||
//P_StartQuake(9*actor->scale, TICRATE/6, {actor->x, actor->y, actor->z}, 20*actor->radius);
|
||||
// the above does not exist, so we set the quake values directly instead
|
||||
quake.intensity = 9*actor->scale;
|
||||
|
@ -12776,8 +12778,8 @@ void A_TNTExplode(mobj_t *actor)
|
|||
|
||||
if (locvar1)
|
||||
{
|
||||
P_DustRing(locvar1, 4, actor->x, actor->y, actor->z+actor->height, 64, 0, actor->scale);
|
||||
P_DustRing(locvar1, 6, actor->x, actor->y, actor->z+actor->height/2, 96, FRACUNIT, actor->scale);
|
||||
P_DustRing(locvar1, 4, actor->x, actor->y, actor->z+actor->height, 64, 0, FRACUNIT, actor->scale);
|
||||
P_DustRing(locvar1, 6, actor->x, actor->y, actor->z+actor->height/2, 96, FRACUNIT, FRACUNIT, actor->scale);
|
||||
}
|
||||
|
||||
actor->destscale *= 4;
|
||||
|
@ -12893,4 +12895,24 @@ void A_TrainCameo2(mobj_t *actor)
|
|||
//Front and back.
|
||||
P_TrainSeg(actor, x + len, y, z, ang + ANGLE_90, spr, 2);
|
||||
P_TrainSeg(actor, x - len, y, z, ang + ANGLE_90, spr, 2);
|
||||
}
|
||||
|
||||
// Function: A_CanarivoreGas
|
||||
//
|
||||
// Description: Releases gas clouds. Used by the Canarivore.
|
||||
//
|
||||
// var1 = Mobj type.
|
||||
// var2 = Unused
|
||||
//
|
||||
void A_CanarivoreGas(mobj_t *actor)
|
||||
{
|
||||
INT32 locvar1 = var1;
|
||||
|
||||
#ifdef HAVE_BLUA
|
||||
if (LUA_CallAction("A_CanarivoreGas", actor))
|
||||
return;
|
||||
#endif
|
||||
|
||||
P_DustRing(locvar1, 4, actor->x, actor->y, actor->z + actor->height / 5, 18, 0, FRACUNIT/10, actor->scale);
|
||||
P_DustRing(locvar1, 6, actor->x, actor->y, actor->z + actor->height / 5, 28, FRACUNIT, FRACUNIT/10, actor->scale);
|
||||
}
|
|
@ -1699,6 +1699,16 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
|||
}
|
||||
return;
|
||||
|
||||
case MT_CANARIVORE_GAS:
|
||||
// if player and gas touch, attach gas to player (overriding any gas that already attached) and apply slowdown effect
|
||||
P_TeleportMove(special, toucher->x - toucher->momx / 2, toucher->y - toucher->momy / 2, toucher->z - toucher->momz / 2);
|
||||
toucher->momx = FixedMul(toucher->momx, 50 * FRACUNIT / 51);
|
||||
toucher->momy = FixedMul(toucher->momy, 50 * FRACUNIT / 51);
|
||||
special->momx = toucher->momx;
|
||||
special->momy = toucher->momy;
|
||||
special->momz = toucher->momz;
|
||||
return;
|
||||
|
||||
default: // SOC or script pickup
|
||||
if (player->bot)
|
||||
return;
|
||||
|
|
28
src/p_mobj.c
28
src/p_mobj.c
|
@ -8439,6 +8439,34 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
steam->momz = 2 * FRACUNIT;
|
||||
}
|
||||
break;
|
||||
case MT_CANARIVORE_GAS:
|
||||
{
|
||||
fixed_t momz;
|
||||
|
||||
if (mobj->flags2 & MF2_AMBUSH)
|
||||
{
|
||||
mobj->momx = FixedMul(mobj->momx, 50 * FRACUNIT / 51);
|
||||
mobj->momy = FixedMul(mobj->momy, 50 * FRACUNIT / 51);
|
||||
break;
|
||||
}
|
||||
|
||||
if (mobj->eflags & MFE_VERTICALFLIP)
|
||||
{
|
||||
if ((mobj->z + mobj->height + mobj->momz) <= mobj->ceilingz)
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((mobj->z + mobj->momz) >= mobj->floorz)
|
||||
break;
|
||||
}
|
||||
|
||||
momz = abs(mobj->momz);
|
||||
if (R_PointToDist2(0, 0, mobj->momx, mobj->momy) < momz)
|
||||
P_InstaThrust(mobj, R_PointToAngle2(0, 0, mobj->momx, mobj->momy), momz);
|
||||
mobj->flags2 |= MF2_AMBUSH;
|
||||
break;
|
||||
}
|
||||
case MT_SPINFIRE:
|
||||
if (mobj->flags & MF_NOGRAVITY)
|
||||
{
|
||||
|
|
|
@ -385,7 +385,7 @@ sfxinfo_t S_sfx[NUMSFX] =
|
|||
{"s3k90", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Impact"},
|
||||
{"s3k91", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Closed"},
|
||||
{"s3k92", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Ghost"},
|
||||
{"s3k93", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Rebuilding"},
|
||||
{"s3k93", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Gas release"},
|
||||
{"s3k94", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Spike"},
|
||||
{"s3k95", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Lava burst"},
|
||||
{"s3k96", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Falling object"},
|
||||
|
|
Loading…
Reference in a new issue