mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-12-27 18:24:40 +00:00
Underwater: tweak bubble VFX
- Spawn around the player, not just on a single point - 1.5x scaled - Opaque, not translucent - Carries player momentum
This commit is contained in:
parent
33a31f9979
commit
2b121bf3d0
3 changed files with 40 additions and 5 deletions
|
|
@ -1880,8 +1880,8 @@ state_t states[NUMSTATES] =
|
|||
{SPR_SMOK, FF_TRANS50|4, 8, {NULL}, 0, 0, S_NULL}, // S_SMOKE5
|
||||
|
||||
// Bubbles
|
||||
{SPR_BUBL, FF_TRANS50, 1, {A_BubbleRise}, 0, 1024, S_SMALLBUBBLE}, // S_SMALLBUBBLE
|
||||
{SPR_BUBL, FF_TRANS50|1, 1, {A_BubbleRise}, 0, 1024, S_MEDIUMBUBBLE}, // S_MEDIUMBUBBLE
|
||||
{SPR_BUBL, FF_SEMIBRIGHT, 1, {A_BubbleRise}, 1, 1024, S_SMALLBUBBLE}, // S_SMALLBUBBLE
|
||||
{SPR_BUBL, FF_SEMIBRIGHT|1, 1, {A_BubbleRise}, 1, 1024, S_MEDIUMBUBBLE}, // S_MEDIUMBUBBLE
|
||||
|
||||
// Extra Large Bubble (breathable)
|
||||
{SPR_BUBL, FF_TRANS50|FF_FULLBRIGHT|2, 8, {A_BubbleRise}, 0, 1024, S_LARGEBUBBLE2}, // S_LARGEBUBBLE1
|
||||
|
|
|
|||
|
|
@ -5941,6 +5941,8 @@ static void P_MobjSceneryThink(mobj_t *mobj)
|
|||
P_RemoveMobj(mobj);
|
||||
return;
|
||||
}
|
||||
mobj->momx -= mobj->momx / 64;
|
||||
mobj->momy -= mobj->momy / 64;
|
||||
break;
|
||||
case MT_FLAMEJET:
|
||||
P_FlameJetSceneryThink(mobj);
|
||||
|
|
|
|||
39
src/p_user.c
39
src/p_user.c
|
|
@ -1781,6 +1781,7 @@ static void P_DoBubbleBreath(player_t *player)
|
|||
if (!(player->mo->eflags & MFE_UNDERWATER) || player->spectator || player->curshield == KSHIELD_BUBBLE)
|
||||
return;
|
||||
|
||||
#if 0
|
||||
if (player->charflags & SF_MACHINE)
|
||||
{
|
||||
if (P_RandomChance(PR_BUBBLE, FRACUNIT/5))
|
||||
|
|
@ -1794,22 +1795,54 @@ static void P_DoBubbleBreath(player_t *player)
|
|||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
fixed_t topspeed = K_GetKartSpeed(player, false, false);
|
||||
fixed_t f = FixedDiv(player->speed, topspeed/2);
|
||||
|
||||
if (player->mo->eflags & MFE_VERTICALFLIP)
|
||||
z += player->mo->height - FixedDiv(player->mo->height,5*(FRACUNIT/4));
|
||||
else
|
||||
z += FixedDiv(player->mo->height,5*(FRACUNIT/4));
|
||||
|
||||
if (P_RandomChance(PR_BUBBLE, FRACUNIT/16))
|
||||
if (P_RandomChance(PR_BUBBLE, FixedMul(FRACUNIT/16, FRACUNIT + 3*f)))
|
||||
{
|
||||
UINT32 seed = P_GetRandSeed(PR_BUBBLE);
|
||||
x += P_RandomRange(PR_BUBBLE, -16, 16) * player->mo->scale;
|
||||
y += P_RandomRange(PR_BUBBLE, -16, 16) * player->mo->scale;
|
||||
z += P_RandomRange(PR_BUBBLE, -16, 16) * player->mo->scale;
|
||||
P_SetRandSeed(PR_BUBBLE, seed);
|
||||
bubble = P_SpawnMobj(x, y, z, MT_SMALLBUBBLE);
|
||||
else if (P_RandomChance(PR_BUBBLE, 3*FRACUNIT/256))
|
||||
}
|
||||
else if (P_RandomChance(PR_BUBBLE, FixedMul(3*FRACUNIT/256, FRACUNIT + 3*f)))
|
||||
{
|
||||
UINT32 seed = P_GetRandSeed(PR_BUBBLE);
|
||||
x += P_RandomRange(PR_BUBBLE, -16, 16) * player->mo->scale;
|
||||
y += P_RandomRange(PR_BUBBLE, -16, 16) * player->mo->scale;
|
||||
z += P_RandomRange(PR_BUBBLE, -16, 16) * player->mo->scale;
|
||||
P_SetRandSeed(PR_BUBBLE, seed);
|
||||
bubble = P_SpawnMobj(x, y, z, MT_MEDIUMBUBBLE);
|
||||
}
|
||||
|
||||
if (bubble)
|
||||
{
|
||||
bubble->color = SKINCOLOR_TEAL;
|
||||
bubble->colorized = true;
|
||||
|
||||
f = min(f, 11*FRACUNIT/10);
|
||||
vector3_t v = {FixedMul(player->mo->momx, f), FixedMul(player->mo->momy, f), FixedMul(player->mo->momz, f)};
|
||||
if (player->mo->standingslope)
|
||||
P_QuantizeMomentumToSlope(&v, player->mo->standingslope);
|
||||
bubble->momx += v.x;
|
||||
bubble->momy += v.y;
|
||||
bubble->momz += v.z;
|
||||
}
|
||||
}
|
||||
|
||||
if (bubble)
|
||||
{
|
||||
bubble->threshold = 42;
|
||||
bubble->destscale = player->mo->scale;
|
||||
bubble->destscale = 3 * player->mo->scale / 2;
|
||||
P_SetScale(bubble, bubble->destscale);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue