Add banana death particles

This commit is contained in:
Sally Coolatta 2022-11-18 15:55:47 -05:00
parent d0cd25328e
commit d0b86ee7ed
5 changed files with 115 additions and 2 deletions

View file

@ -3488,6 +3488,11 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
"S_BANANA",
"S_BANANA_DEAD",
"S_BANANA_SPARK",
"S_BANANA_SPARK2",
"S_BANANA_SPARK3",
"S_BANANA_SPARK4",
//{ Orbinaut
"S_ORBINAUT1",
"S_ORBINAUT2",
@ -5311,6 +5316,7 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
"MT_BANANA", // Banana Stuff
"MT_BANANA_SHIELD",
"MT_BANANA_SPARK",
"MT_ORBINAUT", // Orbinaut stuff
"MT_ORBINAUT_SHIELD",

View file

@ -557,6 +557,7 @@ char sprnames[NUMSPRITES + 1][5] =
"RSHE", // Rocket sneaker
"FITM", // Eggman Monitor
"BANA", // Banana Peel
"BAND", // Banana Peel death particles
"ORBN", // Orbinaut
"JAWZ", // Jawz
"SSMN", // SS Mine
@ -4079,6 +4080,11 @@ state_t states[NUMSTATES] =
{SPR_BANA, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BANANA
{SPR_BANA, 1, 175, {NULL}, 0, 0, S_NULL}, // S_BANANA_DEAD
{SPR_BAND, 0, -1, {NULL}, 0, 0, S_BANANA_SPARK2}, // S_BANANA_SPARK
{SPR_BAND, 1|FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_BANANA_SPARK3}, // S_BANANA_SPARK2
{SPR_BAND, 2|FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_BANANA_SPARK4}, // S_BANANA_SPARK3
{SPR_BAND, 3|FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_BANANA_SPARK4
{SPR_ORBN, 0, 1, {NULL}, 0, 0, S_ORBINAUT2}, // S_ORBINAUT1
{SPR_ORBN, 1, 1, {NULL}, 0, 0, S_ORBINAUT3}, // S_ORBINAUT2
{SPR_ORBN, 2, 1, {NULL}, 0, 0, S_ORBINAUT4}, // S_ORBINAUT3
@ -23121,6 +23127,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_BANANA_SPARK
-1, // doomednum
S_BANANA_SPARK, // spawnstate
1000, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
0, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_BANANA_SPARK2,// deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
0, // speed
4*FRACUNIT, // radius
8*FRACUNIT, // height
0, // display offset
100, // mass
1, // damage
sfx_None, // activesound
MF_DONTENCOREMAP|MF_NOCLIPTHING|MF_NOSQUISH, // flags
S_NULL // raisestate
},
{ // MT_ORBINAUT
-1, // doomednum
S_ORBINAUT1, // spawnstate

View file

@ -1103,6 +1103,7 @@ typedef enum sprite
SPR_RSHE, // Rocket sneaker
SPR_FITM, // Eggman Monitor
SPR_BANA, // Banana Peel
SPR_BAND, // Banana Peel death particles
SPR_ORBN, // Orbinaut
SPR_JAWZ, // Jawz
SPR_SSMN, // SS Mine
@ -4500,6 +4501,11 @@ typedef enum state
S_BANANA,
S_BANANA_DEAD,
S_BANANA_SPARK,
S_BANANA_SPARK2,
S_BANANA_SPARK3,
S_BANANA_SPARK4,
//{ Orbinaut
S_ORBINAUT1,
S_ORBINAUT2,
@ -6359,6 +6365,7 @@ typedef enum mobj_type
MT_BANANA, // Banana Stuff
MT_BANANA_SHIELD,
MT_BANANA_SPARK,
MT_ORBINAUT, // Orbinaut stuff
MT_ORBINAUT_SHIELD,

View file

@ -1585,6 +1585,32 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
target->fuse = 1;
break;
case MT_BANANA:
case MT_BANANA_SHIELD:
{
const UINT8 numParticles = 8;
const angle_t diff = ANGLE_MAX / numParticles;
UINT8 i;
for (i = 0; i < numParticles; i++)
{
mobj_t *spark = P_SpawnMobjFromMobj(target, 0, 0, 0, MT_BANANA_SPARK);
spark->angle = (diff * i) - (diff / 2);
if (inflictor != NULL && P_MobjWasRemoved(inflictor) == false)
{
spark->angle += K_MomentumAngle(inflictor);
spark->momx += inflictor->momx / 2;
spark->momy += inflictor->momy / 2;
spark->momz += inflictor->momz / 2;
}
P_SetObjectMomZ(spark, (12 + P_RandomRange(PR_DECORATION, -4, 4)) * FRACUNIT, true);
P_Thrust(spark, spark->angle, (12 + P_RandomRange(PR_DECORATION, -4, 4)) * spark->scale);
}
break;
}
default:
break;
}

View file

@ -6495,7 +6495,7 @@ static boolean P_MobjDeadThink(mobj_t *mobj)
break;
case MT_BANANA:
{
angle_t spin = FixedMul(FixedDiv(mobj->momz, 8 * mobj->scale), ANGLE_67h);
angle_t spin = FixedMul(FixedDiv(abs(mobj->momz), 8 * mobj->scale), ANGLE_67h);
mobj->angle -= spin;
mobj->rollangle += spin;
@ -6506,6 +6506,12 @@ static boolean P_MobjDeadThink(mobj_t *mobj)
}
}
break;
case MT_BANANA_SPARK:
{
angle_t spin = FixedMul(FixedDiv(abs(mobj->momz), 8 * mobj->scale), ANGLE_22h);
mobj->rollangle += spin;
}
break;
case MT_ORBINAUT:
case MT_EGGMANITEM:
case MT_LANDMINE:
@ -6960,7 +6966,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
else
{
// tilt n tumble
angle_t spin = FixedMul(FixedDiv(mobj->momz, 8 * mobj->scale), ANGLE_67h);
angle_t spin = FixedMul(FixedDiv(abs(mobj->momz), 8 * mobj->scale), ANGLE_67h);
mobj->angle += spin;
mobj->rollangle -= spin;
}
@ -6968,6 +6974,39 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
if (mobj->threshold > 0)
mobj->threshold--;
break;
case MT_BANANA_SPARK:
{
if (leveltime & 1)
{
mobj->spritexscale = mobj->spriteyscale = FRACUNIT;
}
else
{
if ((leveltime / 2) & 1)
{
mobj->spriteyscale = 3*FRACUNIT/2;
}
else
{
mobj->spritexscale = 3*FRACUNIT/2;
}
}
if (P_IsObjectOnGround(mobj) == true && mobj->momz * P_MobjFlip(mobj) <= 0)
{
P_SetObjectMomZ(mobj, 8*FRACUNIT, false);
if (mobj->health > 0)
{
mobj->tics = 1;
mobj->destscale = 0;
mobj->spritexscale = mobj->spriteyscale = FRACUNIT;
mobj->health = 0;
}
}
break;
}
case MT_SPB:
{
Obj_SPBThink(mobj);
@ -13694,6 +13733,8 @@ mobj_t *P_SpawnMobjFromMobj(mobj_t *mobj, fixed_t xofs, fixed_t yofs, fixed_t zo
if (!newmobj)
return NULL;
newmobj->hitlag = mobj->hitlag;
newmobj->destscale = P_ScaleFromMap(mobj->destscale, newmobj->destscale);
P_SetScale(newmobj, P_ScaleFromMap(mobj->scale, newmobj->scale));