mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-12-31 12:13:16 +00:00
WIP - Overdrive polish
This commit is contained in:
parent
199a92ebb2
commit
2b61497536
12 changed files with 58 additions and 39 deletions
|
|
@ -1033,7 +1033,7 @@ struct player_t
|
|||
UINT8 ampsounds;
|
||||
UINT8 ampspending;
|
||||
|
||||
UINT16 overdriveboost;
|
||||
UINT16 overdrive;
|
||||
fixed_t overdrivepower;
|
||||
|
||||
UINT8 itemflags; // holds IF_ flags (see itemflags_t)
|
||||
|
|
|
|||
|
|
@ -22093,7 +22093,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
1, // speed
|
||||
32*FRACUNIT, // radius
|
||||
32*FRACUNIT, // height
|
||||
0, // dispoffset
|
||||
|
|
|
|||
|
|
@ -1194,6 +1194,7 @@ boolean K_PvPTouchDamage(mobj_t *t1, mobj_t *t2)
|
|||
auto doStumble = [](mobj_t *t1, mobj_t *t2)
|
||||
{
|
||||
K_StumblePlayer(t2->player);
|
||||
K_SpawnAmps(t1->player, 20, t2);
|
||||
};
|
||||
|
||||
if (forEither(shouldStumble, doStumble))
|
||||
|
|
|
|||
|
|
@ -3170,7 +3170,7 @@ static void K_drawRingCounter(boolean gametypeinfoshown)
|
|||
.width(uselives ? (stplyr->lives >= 10 ? 70 : 64) : 33)
|
||||
.small_sticker();
|
||||
|
||||
if (stplyr->overdriveboost)
|
||||
if (stplyr->overdrive)
|
||||
{
|
||||
V_DrawMappedPatch(LAPS_X+7-8, fy-5-8, V_HUDTRANS|V_SLIDEIN|splitflags, kp_overdrive[leveltime%32], R_GetTranslationColormap(TC_RAINBOW, static_cast<skincolornum_t>(stplyr->skincolor), GTC_CACHE));
|
||||
}
|
||||
|
|
|
|||
53
src/k_kart.c
53
src/k_kart.c
|
|
@ -2012,7 +2012,7 @@ static void K_SpawnGenericSpeedLines(player_t *player, boolean top)
|
|||
fast->color = SKINCOLOR_WHITE;
|
||||
fast->colorized = true;
|
||||
}
|
||||
else if (player->overdriveboost)
|
||||
else if (player->overdrive)
|
||||
{
|
||||
fast->color = player->skincolor;
|
||||
fast->renderflags |= RF_ADD;
|
||||
|
|
@ -3518,7 +3518,7 @@ static void K_GetKartBoostPower(player_t *player)
|
|||
); // + 80% top speed (peak), +400% acceleration (peak), +20% handling
|
||||
}
|
||||
|
||||
if (player->overdriveboost)
|
||||
if (player->overdrive)
|
||||
{
|
||||
ADDBOOST(
|
||||
Easing_InCubic(
|
||||
|
|
@ -3599,7 +3599,7 @@ static void K_GetKartBoostPower(player_t *player)
|
|||
if (player->ringboost) // Ring Boost
|
||||
{
|
||||
fixed_t ringboost_base = FRACUNIT/4;
|
||||
if (player->overdriveboost)
|
||||
if (player->overdrive)
|
||||
ringboost_base += FRACUNIT/2;
|
||||
// This one's a little special: we add extra top speed per tic of ringboost stored up, to allow for Ring Box to really rocket away.
|
||||
// (We compensate when decrementing ringboost to avoid runaway exponential scaling hell.)
|
||||
|
|
@ -4018,15 +4018,31 @@ void K_SpawnAmps(player_t *player, UINT8 amps, mobj_t *impact)
|
|||
void K_AwardPlayerAmps(player_t *player, UINT8 amps)
|
||||
{
|
||||
UINT16 getamped = player->amps + amps;
|
||||
UINT8 oldamps = player->amps;
|
||||
|
||||
if (getamped > 200)
|
||||
player->amps = 200;
|
||||
else
|
||||
player->amps = getamped;
|
||||
|
||||
player->ampsounds++;
|
||||
player->ampsounds = 1;
|
||||
player->ampspending--;
|
||||
|
||||
if (oldamps/AMPLEVEL != player->amps/AMPLEVEL)
|
||||
{
|
||||
UINT8 amplevel = player->amps / AMPLEVEL;
|
||||
static sfxenum_t bwips[7] = {sfx_mbs4c,
|
||||
sfx_mbs4d, sfx_mbs4e, sfx_mbs4f, sfx_mbs50,
|
||||
sfx_mbs51, sfx_mbs52};
|
||||
amplevel = min(amplevel, 6);
|
||||
|
||||
if (P_IsDisplayPlayer(player))
|
||||
{
|
||||
S_StartSound(NULL, bwips[amplevel]);
|
||||
S_StartSound(NULL, bwips[amplevel]);
|
||||
}
|
||||
}
|
||||
|
||||
if (player->rings <= 0 && player->ampspending == 0)
|
||||
{
|
||||
K_Overdrive(player);
|
||||
|
|
@ -4068,7 +4084,7 @@ boolean K_Overdrive(player_t *player)
|
|||
S_StartSound(player->mo, sfx_cdfm35);
|
||||
S_StartSound(player->mo, sfx_cdfm13);
|
||||
|
||||
player->overdriveboost += (player->amps)*6;
|
||||
player->overdrive += (player->amps)*6;
|
||||
player->overdrivepower = FRACUNIT;
|
||||
|
||||
player->amps = 0;
|
||||
|
|
@ -9070,9 +9086,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
player->wavedashboost--;
|
||||
}
|
||||
|
||||
if (player->overdriveboost > 0 && onground == true)
|
||||
if (player->overdrive > 0 && onground == true)
|
||||
{
|
||||
player->overdriveboost--;
|
||||
player->overdrive--;
|
||||
}
|
||||
|
||||
if (player->wavedashboost == 0 || player->wavedashpower > FRACUNIT)
|
||||
|
|
@ -9138,21 +9154,6 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
S_StartSoundAtVolume(NULL, sfx_mbs43, 127);
|
||||
}
|
||||
player->ampsounds--;
|
||||
|
||||
if (player->ampsounds == 0)
|
||||
{
|
||||
UINT8 amplevel = player->amps / AMPLEVEL;
|
||||
static sfxenum_t bwips[7] = {sfx_mbs4c,
|
||||
sfx_mbs4d, sfx_mbs4e, sfx_mbs4f, sfx_mbs50,
|
||||
sfx_mbs51, sfx_mbs52};
|
||||
amplevel = min(amplevel, 6);
|
||||
|
||||
if (P_IsDisplayPlayer(player))
|
||||
{
|
||||
S_StartSound(NULL, bwips[amplevel]);
|
||||
S_StartSound(NULL, bwips[amplevel]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -9816,7 +9817,7 @@ void K_KartResetPlayerColor(player_t *player)
|
|||
goto finalise;
|
||||
}
|
||||
|
||||
if (player->overdriveboost && (leveltime & 1))
|
||||
if (player->overdrive && (leveltime & 1))
|
||||
{
|
||||
player->mo->colorized = true;
|
||||
fullbright = true;
|
||||
|
|
@ -9824,7 +9825,7 @@ void K_KartResetPlayerColor(player_t *player)
|
|||
goto finalise;
|
||||
|
||||
}
|
||||
else if (player->overdriveboost)
|
||||
else if (player->overdrive)
|
||||
{
|
||||
player->mo->colorized = true;
|
||||
fullbright = true;
|
||||
|
|
@ -11955,7 +11956,7 @@ static void K_KartSpindashWind(mobj_t *parent)
|
|||
if (parent->player && parent->player->wavedashboost)
|
||||
P_SetScale(wind, wind->scale * 2);
|
||||
|
||||
if (parent->player && parent->player->overdriveboost)
|
||||
if (parent->player && parent->player->overdrive)
|
||||
P_SetScale(wind, wind->scale * 2);
|
||||
|
||||
if (parent->momx || parent->momy)
|
||||
|
|
@ -12025,7 +12026,7 @@ static void K_KartSpindash(player_t *player)
|
|||
K_KartSpindashWind(player->mo);
|
||||
}
|
||||
|
||||
if ((player->overdriveboost > 0) && (spawnWind == true))
|
||||
if ((player->overdrive > 0) && (spawnWind == true))
|
||||
{
|
||||
K_KartSpindashWind(player->mo);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -364,8 +364,8 @@ static int player_get(lua_State *L)
|
|||
lua_pushinteger(L, plr->wavedashdelay);
|
||||
else if (fastcmp(field,"wavedashboost"))
|
||||
lua_pushinteger(L, plr->wavedashboost);
|
||||
else if (fastcmp(field,"overdriveboost"))
|
||||
lua_pushinteger(L, plr->overdriveboost);
|
||||
else if (fastcmp(field,"overdrive"))
|
||||
lua_pushinteger(L, plr->overdrive);
|
||||
else if (fastcmp(field,"wavedashpower"))
|
||||
lua_pushinteger(L, plr->wavedashpower);
|
||||
else if (fastcmp(field,"overdrivepower"))
|
||||
|
|
@ -934,8 +934,8 @@ static int player_set(lua_State *L)
|
|||
plr->wavedashdelay = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"wavedashboost"))
|
||||
plr->wavedashboost = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"overdriveboost"))
|
||||
plr->overdriveboost = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"overdrive"))
|
||||
plr->overdrive = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"wavedashpower"))
|
||||
plr->wavedashpower = luaL_checkinteger(L, 3);
|
||||
else if (fastcmp(field,"overdrivepower"))
|
||||
|
|
|
|||
|
|
@ -51,6 +51,10 @@ void Obj_AmpsThink (mobj_t *amps)
|
|||
if (amps->extravalue1)
|
||||
amps->extravalue1--;
|
||||
|
||||
amps->extravalue2++;
|
||||
|
||||
speed += amps->extravalue1 * amps->scale/2;
|
||||
|
||||
fakez = mo->z + (vert * amps->extravalue1 / AMP_ARCTIME);
|
||||
damper = 1;
|
||||
}
|
||||
|
|
@ -63,6 +67,11 @@ void Obj_AmpsThink (mobj_t *amps)
|
|||
fakez = mo->z + vert;
|
||||
}
|
||||
|
||||
if (mo->flags & MFE_VERTICALFLIP)
|
||||
fakez -= mo->height/2;
|
||||
else
|
||||
fakez += mo->height/2;
|
||||
|
||||
hang = R_PointToAngle2(amps->x, amps->y, mo->x, mo->y);
|
||||
vang = R_PointToAngle2(amps->z, 0, fakez, dist);
|
||||
|
||||
|
|
@ -71,7 +80,7 @@ void Obj_AmpsThink (mobj_t *amps)
|
|||
amps->momy += FixedMul(FINESINE(vang>>ANGLETOFINESHIFT), FixedMul(FINESINE(hang>>ANGLETOFINESHIFT), speed));
|
||||
amps->momz += FixedMul(FINECOSINE(vang>>ANGLETOFINESHIFT), speed);
|
||||
|
||||
if (dist < (120 * amps->scale) && amps->extravalue2)
|
||||
if (dist < (120 * amps->scale) && amps->extravalue2 && !player->ampsounds)
|
||||
{
|
||||
K_AwardPlayerAmps(player, 2);
|
||||
P_RemoveMobj(amps);
|
||||
|
|
|
|||
|
|
@ -36,6 +36,8 @@ void Obj_BlockRingThink (mobj_t *ring)
|
|||
|
||||
fixed_t baseScale = mo->scale / 2;
|
||||
baseScale += (mo->scale / 30) * player->spheres;
|
||||
if (player->overdrive)
|
||||
baseScale += mo->scale;
|
||||
P_SetScale(ring, baseScale);
|
||||
|
||||
// Twirl
|
||||
|
|
@ -48,7 +50,7 @@ void Obj_BlockRingThink (mobj_t *ring)
|
|||
else
|
||||
ring->renderflags |= RF_DONTDRAW;
|
||||
|
||||
if (K_PowerUpRemaining(player, POWERUP_BARRIER) || !K_PlayerGuard(player))
|
||||
if (K_PowerUpRemaining(player, POWERUP_BARRIER) || !(K_PlayerGuard(player) || player->overdrive))
|
||||
ring->renderflags |= RF_DONTDRAW;
|
||||
}
|
||||
}
|
||||
|
|
@ -69,6 +71,8 @@ void Obj_BlockBodyThink (mobj_t *body)
|
|||
|
||||
fixed_t baseScale = mo->scale / 2;
|
||||
baseScale += (mo->scale / 30) * player->spheres;
|
||||
if (player->overdrive)
|
||||
baseScale += mo->scale;
|
||||
P_SetScale(body, baseScale);
|
||||
|
||||
P_MoveOrigin(body, mo->x, mo->y, mo->z + mo->height/2);
|
||||
|
|
@ -83,7 +87,7 @@ void Obj_BlockBodyThink (mobj_t *body)
|
|||
else
|
||||
body->renderflags |= RF_DONTDRAW;
|
||||
|
||||
if (K_PowerUpRemaining(player, POWERUP_BARRIER) || !K_PlayerGuard(player))
|
||||
if (K_PowerUpRemaining(player, POWERUP_BARRIER) || !(K_PlayerGuard(player) || player->overdrive))
|
||||
body->renderflags |= RF_DONTDRAW;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -601,6 +601,8 @@ hyudoro_patrol_hit_player
|
|||
|
||||
P_SetTarget(&hyudoro_target(hyu), master);
|
||||
|
||||
K_SpawnAmps(master->player, 20, toucher);
|
||||
|
||||
if (center)
|
||||
P_RemoveMobj(center);
|
||||
|
||||
|
|
|
|||
|
|
@ -3006,7 +3006,8 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
|||
sfx = sfx_s3k3a;
|
||||
clash = true;
|
||||
}
|
||||
else if (player->overdriveboost)
|
||||
else if (player->overdrive &&
|
||||
(type != DMG_EXPLODE || inflictor->type != MT_SPBEXPLOSION || !inflictor->movefactor))
|
||||
{
|
||||
clash = true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -581,7 +581,7 @@ static void P_NetArchivePlayers(savebuffer_t *save)
|
|||
WRITEUINT16(save->p, players[i].wavedash);
|
||||
WRITEUINT8(save->p, players[i].wavedashdelay);
|
||||
WRITEUINT16(save->p, players[i].wavedashboost);
|
||||
WRITEUINT16(save->p, players[i].overdriveboost);
|
||||
WRITEUINT16(save->p, players[i].overdrive);
|
||||
WRITEFIXED(save->p, players[i].wavedashpower);
|
||||
WRITEFIXED(save->p, players[i].overdrivepower);
|
||||
WRITEUINT16(save->p, players[i].speedpunt);
|
||||
|
|
@ -1191,7 +1191,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
|
|||
players[i].wavedash = READUINT16(save->p);
|
||||
players[i].wavedashdelay = READUINT8(save->p);
|
||||
players[i].wavedashboost = READUINT16(save->p);
|
||||
players[i].overdriveboost = READUINT16(save->p);
|
||||
players[i].overdrive = READUINT16(save->p);
|
||||
players[i].wavedashpower = READFIXED(save->p);
|
||||
players[i].overdrivepower = READFIXED(save->p);
|
||||
players[i].speedpunt = READUINT16(save->p);
|
||||
|
|
|
|||
|
|
@ -2048,6 +2048,7 @@ static void K_HandleLapIncrement(player_t *player)
|
|||
|
||||
K_SpawnDriftBoostExplosion(player, 4);
|
||||
K_SpawnDriftElectricSparks(player, SKINCOLOR_SILVER, false);
|
||||
K_SpawnAmps(player, 50, player->mo);
|
||||
|
||||
rainbowstartavailable = false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue