Merge branch 'fix-inside-top-bug' into 'master'

Fix THAT ONE Garden Top bug, which is also a bug with Rocket Sneakers

Closes #610

See merge request KartKrew/Kart!1499
This commit is contained in:
Oni 2023-09-17 05:22:48 +00:00
commit 6ccaae4a0c
3 changed files with 32 additions and 13 deletions

View file

@ -11388,7 +11388,11 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
} }
break; break;
case KITEM_GARDENTOP: case KITEM_GARDENTOP:
if (ATTACK_IS_DOWN && NO_HYUDORO) if (player->curshield == KSHIELD_TOP && K_GetGardenTop(player) == NULL)
{
Obj_GardenTopDeploy(player->mo);
}
else if (ATTACK_IS_DOWN && NO_HYUDORO)
{ {
if (player->curshield != KSHIELD_TOP) if (player->curshield != KSHIELD_TOP)
{ {

View file

@ -411,6 +411,13 @@ anchor_top (mobj_t *top)
return; return;
} }
/* Rider lost track of this object. */
if (rider_top(rider) != top)
{
P_RemoveMobj(top);
return;
}
tilt(top); tilt(top);
anchor(top, rider, rider->angle, 0); anchor(top, rider, rider->angle, 0);
@ -578,6 +585,7 @@ Obj_GardenTopThrow (player_t *player)
should fall off. */ should fall off. */
P_SetOrigin(player->mo, player->mo->x, player->mo->y, P_SetOrigin(player->mo, player->mo->x, player->mo->y,
player->mo->z + height * P_MobjFlip(player->mo)); player->mo->z + height * P_MobjFlip(player->mo));
}
if (player->itemamount > 0) if (player->itemamount > 0)
player->itemamount--; player->itemamount--;
@ -588,7 +596,6 @@ Obj_GardenTopThrow (player_t *player)
player->curshield = KSHIELD_NONE; player->curshield = KSHIELD_NONE;
player->mo->radius = K_DefaultPlayerRadius(player); player->mo->radius = K_DefaultPlayerRadius(player);
}
return top; return top;
} }

View file

@ -11338,14 +11338,22 @@ void P_RemoveMobj(mobj_t *mobj)
mobj_t *cachenext = mobj->hnext; mobj_t *cachenext = mobj->hnext;
if (mobj->hnext && !P_MobjWasRemoved(mobj->hnext)) if (mobj->hnext && !P_MobjWasRemoved(mobj->hnext))
{
if (mobj->hnext->hprev == mobj)
{ {
P_SetTarget(&mobj->hnext->hprev, mobj->hprev); P_SetTarget(&mobj->hnext->hprev, mobj->hprev);
}
P_SetTarget(&mobj->hnext, NULL); P_SetTarget(&mobj->hnext, NULL);
} }
if (mobj->hprev && !P_MobjWasRemoved(mobj->hprev)) if (mobj->hprev && !P_MobjWasRemoved(mobj->hprev))
{
if (mobj->hprev->hnext == mobj)
{ {
P_SetTarget(&mobj->hprev->hnext, cachenext); P_SetTarget(&mobj->hprev->hnext, cachenext);
}
P_SetTarget(&mobj->hprev, NULL); P_SetTarget(&mobj->hprev, NULL);
} }
} }