Bananas use proper death frame

This commit is contained in:
Sally Coolatta 2022-11-18 01:56:45 -05:00
parent 1688325c67
commit 32c477e619
5 changed files with 77 additions and 63 deletions

View file

@ -4077,7 +4077,7 @@ state_t states[NUMSTATES] =
{SPR_FITM, 24|FF_FULLBRIGHT, 175, {NULL}, 0, 0, S_NULL}, // S_EGGMANITEM_DEAD {SPR_FITM, 24|FF_FULLBRIGHT, 175, {NULL}, 0, 0, S_NULL}, // S_EGGMANITEM_DEAD
{SPR_BANA, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BANANA {SPR_BANA, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BANANA
{SPR_BANA, 0, 175, {NULL}, 0, 0, S_NULL}, // S_BANANA_DEAD {SPR_BANA, 1, 175, {NULL}, 0, 0, S_NULL}, // S_BANANA_DEAD
{SPR_ORBN, 0, 1, {NULL}, 0, 0, S_ORBINAUT2}, // S_ORBINAUT1 {SPR_ORBN, 0, 1, {NULL}, 0, 0, S_ORBINAUT2}, // S_ORBINAUT1
{SPR_ORBN, 1, 1, {NULL}, 0, 0, S_ORBINAUT3}, // S_ORBINAUT2 {SPR_ORBN, 1, 1, {NULL}, 0, 0, S_ORBINAUT3}, // S_ORBINAUT2

View file

@ -94,7 +94,7 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2)
S_StartSound(t2, t2->info->deathsound); S_StartSound(t2, t2->info->deathsound);
P_KillMobj(t2, t1, t1, DMG_NORMAL); P_KillMobj(t2, t1, t1, DMG_NORMAL);
P_SetObjectMomZ(t2, 8*FRACUNIT, false); P_SetObjectMomZ(t2, 24*FRACUNIT, false);
P_InstaThrust(t2, bounceangle, 16*FRACUNIT); P_InstaThrust(t2, bounceangle, 16*FRACUNIT);
P_SpawnMobj(t2->x/2 + t1->x/2, t2->y/2 + t1->y/2, t2->z/2 + t1->z/2, MT_ITEMCLASH); P_SpawnMobj(t2->x/2 + t1->x/2, t2->y/2 + t1->y/2, t2->z/2 + t1->z/2, MT_ITEMCLASH);
@ -122,7 +122,7 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2)
S_StartSound(t1, t1->info->deathsound); S_StartSound(t1, t1->info->deathsound);
P_KillMobj(t1, t2, t2, DMG_NORMAL); P_KillMobj(t1, t2, t2, DMG_NORMAL);
P_SetObjectMomZ(t1, 8*FRACUNIT, false); P_SetObjectMomZ(t1, 24*FRACUNIT, false);
P_InstaThrust(t1, bounceangle, 16*FRACUNIT); P_InstaThrust(t1, bounceangle, 16*FRACUNIT);
} }
@ -351,7 +351,7 @@ boolean K_MineCollide(mobj_t *t1, mobj_t *t2)
S_StartSound(t2, t2->info->deathsound); S_StartSound(t2, t2->info->deathsound);
P_KillMobj(t2, t1, t1, DMG_NORMAL); P_KillMobj(t2, t1, t1, DMG_NORMAL);
P_SetObjectMomZ(t2, 8*FRACUNIT, false); P_SetObjectMomZ(t2, 24*FRACUNIT, false);
P_InstaThrust(t2, bounceangle, 16*FRACUNIT); P_InstaThrust(t2, bounceangle, 16*FRACUNIT);
} }
else if (t2->flags & MF_SHOOTABLE) else if (t2->flags & MF_SHOOTABLE)
@ -414,7 +414,7 @@ boolean K_LandMineCollide(mobj_t *t1, mobj_t *t2)
S_StartSound(t2, t2->info->deathsound); S_StartSound(t2, t2->info->deathsound);
P_KillMobj(t2, t1, t1, DMG_NORMAL); P_KillMobj(t2, t1, t1, DMG_NORMAL);
P_SetObjectMomZ(t2, 8*FRACUNIT, false); P_SetObjectMomZ(t2, 24*FRACUNIT, false);
P_InstaThrust(t2, bounceangle, 16*FRACUNIT); P_InstaThrust(t2, bounceangle, 16*FRACUNIT);
P_SpawnMobj(t2->x/2 + t1->x/2, t2->y/2 + t1->y/2, t2->z/2 + t1->z/2, MT_ITEMCLASH); P_SpawnMobj(t2->x/2 + t1->x/2, t2->y/2 + t1->y/2, t2->z/2 + t1->z/2, MT_ITEMCLASH);

View file

@ -6670,7 +6670,7 @@ killnext:
S_StartSound(banana, banana->info->deathsound); S_StartSound(banana, banana->info->deathsound);
P_KillMobj(banana, inflictor, source, DMG_NORMAL); P_KillMobj(banana, inflictor, source, DMG_NORMAL);
P_SetObjectMomZ(banana, 8*FRACUNIT, false); P_SetObjectMomZ(banana, 24*FRACUNIT, false);
if (inflictor) if (inflictor)
P_InstaThrust(banana, R_PointToAngle2(inflictor->x, inflictor->y, banana->x, banana->y)+ANGLE_90, 16*FRACUNIT); P_InstaThrust(banana, R_PointToAngle2(inflictor->x, inflictor->y, banana->x, banana->y)+ANGLE_90, 16*FRACUNIT);
} }
@ -7071,7 +7071,7 @@ void K_DropRocketSneaker(player_t *player)
flingangle = ANG60; flingangle = ANG60;
S_StartSound(shoe, shoe->info->deathsound); S_StartSound(shoe, shoe->info->deathsound);
P_SetObjectMomZ(shoe, 8*FRACUNIT, false); P_SetObjectMomZ(shoe, 24*FRACUNIT, false);
P_InstaThrust(shoe, R_PointToAngle2(shoe->target->x, shoe->target->y, shoe->x, shoe->y)+flingangle, 16*FRACUNIT); P_InstaThrust(shoe, R_PointToAngle2(shoe->target->x, shoe->target->y, shoe->x, shoe->y)+flingangle, 16*FRACUNIT);
shoe->momx += shoe->target->momx; shoe->momx += shoe->target->momx;
shoe->momy += shoe->target->momy; shoe->momy += shoe->target->momy;

View file

@ -217,7 +217,7 @@ boolean Obj_OrbinautJawzCollide(mobj_t *t1, mobj_t *t2)
S_StartSound(t2, t2->info->deathsound); S_StartSound(t2, t2->info->deathsound);
P_KillMobj(t2, t1, t1, DMG_NORMAL); P_KillMobj(t2, t1, t1, DMG_NORMAL);
P_SetObjectMomZ(t2, 8*FRACUNIT, false); P_SetObjectMomZ(t2, 24*FRACUNIT, false);
P_InstaThrust(t2, bounceangle, 16*FRACUNIT); P_InstaThrust(t2, bounceangle, 16*FRACUNIT);
P_SpawnMobj(t2->x/2 + t1->x/2, t2->y/2 + t1->y/2, t2->z/2 + t1->z/2, MT_ITEMCLASH); P_SpawnMobj(t2->x/2 + t1->x/2, t2->y/2 + t1->y/2, t2->z/2 + t1->z/2, MT_ITEMCLASH);
@ -254,7 +254,7 @@ boolean Obj_OrbinautJawzCollide(mobj_t *t1, mobj_t *t2)
S_StartSound(t1, t1->info->deathsound); S_StartSound(t1, t1->info->deathsound);
P_KillMobj(t1, t2, t2, DMG_NORMAL); P_KillMobj(t1, t2, t2, DMG_NORMAL);
P_SetObjectMomZ(t1, 8*FRACUNIT, false); P_SetObjectMomZ(t1, 24*FRACUNIT, false);
P_InstaThrust(t1, bounceangle, 16*FRACUNIT); P_InstaThrust(t1, bounceangle, 16*FRACUNIT);
} }

View file

@ -1158,66 +1158,68 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
gravityadd = -gravityadd; gravityadd = -gravityadd;
} }
} }
else //Otherwise, sort through the other exceptions.
// Sort through the other exceptions.
switch (mo->type)
{ {
switch (mo->type) case MT_FLINGRING:
{ case MT_FLINGCOIN:
case MT_FLINGRING: case MT_FLINGBLUESPHERE:
case MT_FLINGCOIN: case MT_FLINGNIGHTSCHIP:
case MT_FLINGBLUESPHERE: case MT_BOUNCERING:
case MT_FLINGNIGHTSCHIP: case MT_RAILRING:
case MT_BOUNCERING: case MT_INFINITYRING:
case MT_RAILRING: case MT_AUTOMATICRING:
case MT_INFINITYRING: case MT_EXPLOSIONRING:
case MT_AUTOMATICRING: case MT_SCATTERRING:
case MT_EXPLOSIONRING: case MT_GRENADERING:
case MT_SCATTERRING: case MT_BOUNCEPICKUP:
case MT_GRENADERING: case MT_RAILPICKUP:
case MT_BOUNCEPICKUP: case MT_AUTOPICKUP:
case MT_RAILPICKUP: case MT_EXPLODEPICKUP:
case MT_AUTOPICKUP: case MT_SCATTERPICKUP:
case MT_EXPLODEPICKUP: case MT_GRENADEPICKUP:
case MT_SCATTERPICKUP: case MT_REDFLAG:
case MT_GRENADEPICKUP: case MT_BLUEFLAG:
case MT_REDFLAG: if (mo->target)
case MT_BLUEFLAG: {
if (mo->target) // Flung items copy the gravity of their tosser.
if ((mo->target->eflags & MFE_VERTICALFLIP) && !(mo->eflags & MFE_VERTICALFLIP))
{ {
// Flung items copy the gravity of their tosser. gravityadd = -gravityadd;
if ((mo->target->eflags & MFE_VERTICALFLIP) && !(mo->eflags & MFE_VERTICALFLIP)) mo->eflags |= MFE_VERTICALFLIP;
{
gravityadd = -gravityadd;
mo->eflags |= MFE_VERTICALFLIP;
}
} }
break; }
case MT_WATERDROP: break;
case MT_BATTLEBUMPER: case MT_WATERDROP:
gravityadd /= 2; case MT_BATTLEBUMPER:
break; gravityadd /= 2;
case MT_BANANA: break;
case MT_EGGMANITEM: case MT_BANANA:
case MT_SSMINE: case MT_EGGMANITEM:
case MT_LANDMINE: case MT_SSMINE:
case MT_DROPTARGET: case MT_LANDMINE:
case MT_SINK: case MT_DROPTARGET:
case MT_EMERALD: case MT_SINK:
case MT_EMERALD:
if (mo->health > 0)
{
if (mo->extravalue2 > 0) if (mo->extravalue2 > 0)
{ {
gravityadd *= mo->extravalue2; gravityadd *= mo->extravalue2;
} }
gravityadd = (5*gravityadd)/2; gravityadd = (5*gravityadd)/2;
break; }
case MT_KARMAFIREWORK: break;
gravityadd /= 3; case MT_KARMAFIREWORK:
break; gravityadd /= 3;
case MT_ITEM_DEBRIS: break;
gravityadd *= 6; case MT_ITEM_DEBRIS:
break; gravityadd *= 6;
default: break;
break; default:
} break;
} }
} }
@ -1769,7 +1771,7 @@ void P_XYMovement(mobj_t *mo)
S_StartSound(mo, mo->info->deathsound); S_StartSound(mo, mo->info->deathsound);
P_KillMobj(mo, NULL, NULL, DMG_NORMAL); P_KillMobj(mo, NULL, NULL, DMG_NORMAL);
P_SetObjectMomZ(mo, 8*FRACUNIT, false); P_SetObjectMomZ(mo, 24*FRACUNIT, false);
P_InstaThrust(mo, R_PointToAngle2(mo->x, mo->y, mo->x + xmove, mo->y + ymove)+ANGLE_90, 16*FRACUNIT); P_InstaThrust(mo, R_PointToAngle2(mo->x, mo->y, mo->x + xmove, mo->y + ymove)+ANGLE_90, 16*FRACUNIT);
} }
break; break;
@ -6491,8 +6493,20 @@ static boolean P_MobjDeadThink(mobj_t *mobj)
P_SetObjectMomZ(mobj, -2*FRACUNIT/3, true); P_SetObjectMomZ(mobj, -2*FRACUNIT/3, true);
} }
break; break;
case MT_ORBINAUT:
case MT_BANANA: case MT_BANANA:
{
angle_t spin = FixedMul(FixedDiv(mobj->momz, 8 * mobj->scale), ANGLE_67h);
mobj->angle -= spin;
mobj->rollangle += spin;
if (P_IsObjectOnGround(mobj) && mobj->momz * P_MobjFlip(mobj) <= 0)
{
P_RemoveMobj(mobj);
return false;
}
}
break;
case MT_ORBINAUT:
case MT_EGGMANITEM: case MT_EGGMANITEM:
case MT_LANDMINE: case MT_LANDMINE:
//case MT_DROPTARGET: //case MT_DROPTARGET:
@ -9490,7 +9504,7 @@ void P_MobjThinker(mobj_t *mobj)
S_StartSound(mobj, mobj->info->deathsound); S_StartSound(mobj, mobj->info->deathsound);
P_KillMobj(mobj, NULL, NULL, DMG_NORMAL); P_KillMobj(mobj, NULL, NULL, DMG_NORMAL);
P_SetObjectMomZ(mobj, 8*FRACUNIT, false); P_SetObjectMomZ(mobj, 24*FRACUNIT, false);
P_InstaThrust(mobj, R_PointToAngle2(0, 0, mobj->momx, mobj->momy) + ANGLE_90, 16*FRACUNIT); P_InstaThrust(mobj, R_PointToAngle2(0, 0, mobj->momx, mobj->momy) + ANGLE_90, 16*FRACUNIT);
} }