stacking part 5: Implement stacking visual
This commit is contained in:
parent
64eb425b78
commit
a68eb51465
5 changed files with 48 additions and 20 deletions
|
|
@ -1058,6 +1058,8 @@ _(TUMBLECOIN)
|
||||||
_(KARMAFIREWORK)
|
_(KARMAFIREWORK)
|
||||||
_(GAINAX)
|
_(GAINAX)
|
||||||
|
|
||||||
|
_(BOOSTSTACK)
|
||||||
|
|
||||||
_(FOLLOWER)
|
_(FOLLOWER)
|
||||||
_(FOLLOWERBUBBLE_FRONT)
|
_(FOLLOWERBUBBLE_FRONT)
|
||||||
_(FOLLOWERBUBBLE_BACK)
|
_(FOLLOWERBUBBLE_BACK)
|
||||||
|
|
|
||||||
|
|
@ -715,6 +715,8 @@ _(WTRU) // Water Trail Underlay
|
||||||
_(GCHA) // follower: generic chao
|
_(GCHA) // follower: generic chao
|
||||||
_(CHEZ) // follower: cheese
|
_(CHEZ) // follower: cheese
|
||||||
|
|
||||||
|
_(BSSS) // Stacking effect
|
||||||
|
|
||||||
_(TRCK)
|
_(TRCK)
|
||||||
|
|
||||||
// First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw later
|
// First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw later
|
||||||
|
|
|
||||||
|
|
@ -4200,6 +4200,8 @@ _(GAINAX_HUGE)
|
||||||
_(GAINAX_MID1)
|
_(GAINAX_MID1)
|
||||||
_(GAINAX_MID2)
|
_(GAINAX_MID2)
|
||||||
|
|
||||||
|
_(BOOSTSTACK)
|
||||||
|
|
||||||
_(WAYPOINTORB)
|
_(WAYPOINTORB)
|
||||||
_(WAYPOINTSPLAT)
|
_(WAYPOINTSPLAT)
|
||||||
_(EGOORB)
|
_(EGOORB)
|
||||||
|
|
|
||||||
34
src/k_kart.c
34
src/k_kart.c
|
|
@ -2301,6 +2301,17 @@ void K_SpawnInvincibilitySpeedLines(mobj_t *mo)
|
||||||
fast->destscale = 6*((mo->player->invincibilitytimer/TICRATE)*FRACUNIT)/8;
|
fast->destscale = 6*((mo->player->invincibilitytimer/TICRATE)*FRACUNIT)/8;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void K_SpawnStackingEffect(player_t *player)
|
||||||
|
{
|
||||||
|
// Thanks to 1ndev for code used for booststack->scale and boosttack->frame! (taken and modified from BoostStack)
|
||||||
|
mobj_t *booststack = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BOOSTSTACK);
|
||||||
|
P_SetTarget(&booststack->target, player->mo);
|
||||||
|
P_SetScale(booststack, FixedMul(FRACUNIT + FixedMul(2*FRACUNIT - FRACUNIT, FixedDiv(min(player->numboosts,4)*FRACUNIT, 4*FRACUNIT)), mapobjectscale));
|
||||||
|
|
||||||
|
booststack->angle = player->mo->angle + ANGLE_90;
|
||||||
|
booststack->color = player->mo->color;
|
||||||
|
}
|
||||||
|
|
||||||
void K_SpawnBumpEffect(mobj_t *mo)
|
void K_SpawnBumpEffect(mobj_t *mo)
|
||||||
{
|
{
|
||||||
mobj_t *fx = P_SpawnMobj(mo->x, mo->y, mo->z, MT_BUMP);
|
mobj_t *fx = P_SpawnMobj(mo->x, mo->y, mo->z, MT_BUMP);
|
||||||
|
|
@ -7194,25 +7205,11 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if (gametype == GT_RACE && player->rings <= 0 && (K_RingsActive() == true)) // spawn ring debt indicator
|
// Stacking Effect
|
||||||
|
if (stackingactive && player->numboosts > 1)
|
||||||
{
|
{
|
||||||
mobj_t *debtflag = P_SpawnMobj(player->mo->x + player->mo->momx, player->mo->y + player->mo->momy,
|
K_SpawnStackingEffect(player);
|
||||||
player->mo->z + P_GetMobjZMovement(player->mo) + player->mo->height + (24*player->mo->scale), MT_THOK);
|
}
|
||||||
|
|
||||||
P_SetMobjState(debtflag, S_RINGDEBT);
|
|
||||||
P_SetScale(debtflag, (debtflag->destscale = player->mo->scale));
|
|
||||||
|
|
||||||
K_MatchGenericExtraFlags(debtflag, player->mo);
|
|
||||||
debtflag->frame += (leveltime % 4);
|
|
||||||
|
|
||||||
if ((leveltime/12) & 1)
|
|
||||||
debtflag->frame += 4;
|
|
||||||
|
|
||||||
debtflag->color = player->skincolor;
|
|
||||||
debtflag->fuse = 2;
|
|
||||||
|
|
||||||
debtflag->renderflags = K_GetPlayerDontDrawFlag(player);
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player->itemtype == KITEM_NONE)
|
if (player->itemtype == KITEM_NONE)
|
||||||
|
|
@ -8812,6 +8809,7 @@ INT32 K_GetKartDriftSparkValueForStage(player_t *player, UINT8 stage)
|
||||||
static void K_SpawnDriftEFX(player_t *player,SINT8 level)
|
static void K_SpawnDriftEFX(player_t *player,SINT8 level)
|
||||||
{
|
{
|
||||||
mobj_t *overlay = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BOOSTFLAME);
|
mobj_t *overlay = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BOOSTFLAME);
|
||||||
|
P_SetMobjState(overlay, S_DRIFTBOOSTFLAME);
|
||||||
P_SetTarget(&overlay->target, player->mo);
|
P_SetTarget(&overlay->target, player->mo);
|
||||||
P_SetScale(overlay, (overlay->destscale = player->mo->scale));
|
P_SetScale(overlay, (overlay->destscale = player->mo->scale));
|
||||||
K_FlipFromObject(overlay, player->mo);
|
K_FlipFromObject(overlay, player->mo);
|
||||||
|
|
|
||||||
28
src/p_mobj.c
28
src/p_mobj.c
|
|
@ -7081,11 +7081,15 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||||
mobj->angle = mobj->extravalue1 && p ? p->drawangle : mobj->target->angle;
|
mobj->angle = mobj->extravalue1 && p ? p->drawangle : mobj->target->angle;
|
||||||
P_MoveOrigin(mobj, mobj->target->x + P_ReturnThrustX(mobj, mobj->angle+ANGLE_180, mobj->target->radius),
|
P_MoveOrigin(mobj, mobj->target->x + P_ReturnThrustX(mobj, mobj->angle+ANGLE_180, mobj->target->radius),
|
||||||
mobj->target->y + P_ReturnThrustY(mobj, mobj->angle+ANGLE_180, mobj->target->radius), mobj->target->z);
|
mobj->target->y + P_ReturnThrustY(mobj, mobj->angle+ANGLE_180, mobj->target->radius), mobj->target->z);
|
||||||
|
K_FlipFromObject(mobj, mobj->target);
|
||||||
P_SetScale(mobj, mobj->target->scale);
|
P_SetScale(mobj, mobj->target->scale);
|
||||||
|
|
||||||
mobj->roll = mobj->target->roll;
|
mobj->roll = mobj->target->roll;
|
||||||
mobj->pitch = mobj->target->pitch;
|
mobj->pitch = mobj->target->pitch;
|
||||||
|
|
||||||
|
mobj->sloperoll = mobj->target->sloperoll;
|
||||||
|
mobj->slopepitch = mobj->target->slopepitch;
|
||||||
|
|
||||||
if (p)
|
if (p)
|
||||||
{
|
{
|
||||||
if (mobj->extravalue1)
|
if (mobj->extravalue1)
|
||||||
|
|
@ -7129,7 +7133,6 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||||
|
|
||||||
if (mobj->extravalue1)
|
if (mobj->extravalue1)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (leveltime % 2 == 1)
|
if (leveltime % 2 == 1)
|
||||||
{
|
{
|
||||||
mobj->frame |= FF_TRANS60;
|
mobj->frame |= FF_TRANS60;
|
||||||
|
|
@ -7143,7 +7146,6 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||||
{
|
{
|
||||||
mobj->color = K_RainbowColor(leveltime);
|
mobj->color = K_RainbowColor(leveltime);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mobj->state == &states[S_BOOSTSMOKESPAWNER])
|
if (mobj->state == &states[S_BOOSTSMOKESPAWNER])
|
||||||
|
|
@ -7307,6 +7309,28 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
case MT_BOOSTSTACK:
|
||||||
|
{
|
||||||
|
if (!mobj->target || P_MobjWasRemoved(mobj->target) || !mobj->target->health || (mobj->target->player && !mobj->target->player->numboosts))
|
||||||
|
{
|
||||||
|
P_RemoveMobj(mobj);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
mobj->roll = mobj->target->roll;
|
||||||
|
mobj->pitch = mobj->target->pitch;
|
||||||
|
|
||||||
|
mobj->sloperoll = mobj->target->sloperoll;
|
||||||
|
mobj->slopepitch = mobj->target->slopepitch;
|
||||||
|
|
||||||
|
// Thx Indev! (taken and modified from BoostStack)
|
||||||
|
P_MoveOrigin(mobj, mobj->target->x + FixedMul(cos(mobj->target->angle), FixedMul(30*FRACUNIT, mapobjectscale)), mobj->target->y + FixedMul(sin(mobj->target->angle), FixedMul(30*FRACUNIT, mapobjectscale)), mobj->target->z);
|
||||||
|
K_FlipFromObject(mobj, mobj->target);
|
||||||
|
|
||||||
|
// Leveltime based animation
|
||||||
|
mobj->frame = states[S_BOOSTSTACK].frame + (leveltime / 3) % 5;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case MT_THUNDERSHIELD:
|
case MT_THUNDERSHIELD:
|
||||||
{
|
{
|
||||||
if (!mobj->target || !mobj->target->health || !mobj->target->player
|
if (!mobj->target || !mobj->target->health || !mobj->target->player
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue