diff --git a/src/info.c b/src/info.c index 0f48c82ac..b39ee8f10 100644 --- a/src/info.c +++ b/src/info.c @@ -4077,7 +4077,7 @@ state_t states[NUMSTATES] = {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, 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, 1, 1, {NULL}, 0, 0, S_ORBINAUT3}, // S_ORBINAUT2 diff --git a/src/k_collide.c b/src/k_collide.c index b03cdfdec..d3b9bc60c 100644 --- a/src/k_collide.c +++ b/src/k_collide.c @@ -94,7 +94,7 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2) S_StartSound(t2, t2->info->deathsound); 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_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); 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); } @@ -351,7 +351,7 @@ boolean K_MineCollide(mobj_t *t1, mobj_t *t2) S_StartSound(t2, t2->info->deathsound); 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); } 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); 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_SpawnMobj(t2->x/2 + t1->x/2, t2->y/2 + t1->y/2, t2->z/2 + t1->z/2, MT_ITEMCLASH); diff --git a/src/k_kart.c b/src/k_kart.c index 546f48328..448c802e2 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6670,7 +6670,7 @@ killnext: S_StartSound(banana, banana->info->deathsound); P_KillMobj(banana, inflictor, source, DMG_NORMAL); - P_SetObjectMomZ(banana, 8*FRACUNIT, false); + P_SetObjectMomZ(banana, 24*FRACUNIT, false); if (inflictor) 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; 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); shoe->momx += shoe->target->momx; shoe->momy += shoe->target->momy; diff --git a/src/objects/orbinaut.c b/src/objects/orbinaut.c index 4d5738e00..ee6e72ed5 100644 --- a/src/objects/orbinaut.c +++ b/src/objects/orbinaut.c @@ -217,7 +217,7 @@ boolean Obj_OrbinautJawzCollide(mobj_t *t1, mobj_t *t2) S_StartSound(t2, t2->info->deathsound); 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_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); 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); } diff --git a/src/p_mobj.c b/src/p_mobj.c index 80c49017c..04462afb5 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1158,66 +1158,68 @@ fixed_t P_GetMobjGravity(mobj_t *mo) 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_FLINGBLUESPHERE: - case MT_FLINGNIGHTSCHIP: - case MT_BOUNCERING: - case MT_RAILRING: - case MT_INFINITYRING: - case MT_AUTOMATICRING: - case MT_EXPLOSIONRING: - case MT_SCATTERRING: - case MT_GRENADERING: - case MT_BOUNCEPICKUP: - case MT_RAILPICKUP: - case MT_AUTOPICKUP: - case MT_EXPLODEPICKUP: - case MT_SCATTERPICKUP: - case MT_GRENADEPICKUP: - case MT_REDFLAG: - case MT_BLUEFLAG: - if (mo->target) + case MT_FLINGRING: + case MT_FLINGCOIN: + case MT_FLINGBLUESPHERE: + case MT_FLINGNIGHTSCHIP: + case MT_BOUNCERING: + case MT_RAILRING: + case MT_INFINITYRING: + case MT_AUTOMATICRING: + case MT_EXPLOSIONRING: + case MT_SCATTERRING: + case MT_GRENADERING: + case MT_BOUNCEPICKUP: + case MT_RAILPICKUP: + case MT_AUTOPICKUP: + case MT_EXPLODEPICKUP: + case MT_SCATTERPICKUP: + case MT_GRENADEPICKUP: + case MT_REDFLAG: + 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. - if ((mo->target->eflags & MFE_VERTICALFLIP) && !(mo->eflags & MFE_VERTICALFLIP)) - { - gravityadd = -gravityadd; - mo->eflags |= MFE_VERTICALFLIP; - } + gravityadd = -gravityadd; + mo->eflags |= MFE_VERTICALFLIP; } - break; - case MT_WATERDROP: - case MT_BATTLEBUMPER: - gravityadd /= 2; - break; - case MT_BANANA: - case MT_EGGMANITEM: - case MT_SSMINE: - case MT_LANDMINE: - case MT_DROPTARGET: - case MT_SINK: - case MT_EMERALD: + } + break; + case MT_WATERDROP: + case MT_BATTLEBUMPER: + gravityadd /= 2; + break; + case MT_BANANA: + case MT_EGGMANITEM: + case MT_SSMINE: + case MT_LANDMINE: + case MT_DROPTARGET: + case MT_SINK: + case MT_EMERALD: + if (mo->health > 0) + { if (mo->extravalue2 > 0) { gravityadd *= mo->extravalue2; } gravityadd = (5*gravityadd)/2; - break; - case MT_KARMAFIREWORK: - gravityadd /= 3; - break; - case MT_ITEM_DEBRIS: - gravityadd *= 6; - break; - default: - break; - } + } + break; + case MT_KARMAFIREWORK: + gravityadd /= 3; + break; + case MT_ITEM_DEBRIS: + gravityadd *= 6; + break; + default: + break; } } @@ -1769,7 +1771,7 @@ void P_XYMovement(mobj_t *mo) S_StartSound(mo, mo->info->deathsound); 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); } break; @@ -6491,8 +6493,20 @@ static boolean P_MobjDeadThink(mobj_t *mobj) P_SetObjectMomZ(mobj, -2*FRACUNIT/3, true); } break; - case MT_ORBINAUT: 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_LANDMINE: //case MT_DROPTARGET: @@ -9490,7 +9504,7 @@ void P_MobjThinker(mobj_t *mobj) S_StartSound(mobj, mobj->info->deathsound); 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); }