diff --git a/src/d_player.h b/src/d_player.h index 7a42340c8..6be32e47c 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -1038,6 +1038,7 @@ struct player_t UINT16 overdrive; UINT16 overshield; fixed_t overdrivepower; + UINT8 overdriveready; UINT8 itemflags; // holds IF_ flags (see itemflags_t) diff --git a/src/k_kart.c b/src/k_kart.c index 5df38627e..6e88dc3da 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4125,6 +4125,15 @@ boolean K_Overdrive(player_t *player) if (player->amps == 0) return false; + if (player->cmd.buttons & BT_ATTACK) + { + player->overdriveready = OVERDRIVE_STARTUP + 2; // Activates on 1, decremented BEFORE we call this again + return false; + } + + if (player->overdriveready > 1) + return false; + K_SpawnDriftBoostExplosion(player, 3); K_SpawnDriftElectricSparks(player, player->skincolor, true); S_StartSound(player->mo, sfx_cdfm35); @@ -4135,6 +4144,7 @@ boolean K_Overdrive(player_t *player) player->overdrivepower = FRACUNIT; player->amps = 0; + player->overdriveready = 0; return true; } @@ -9183,6 +9193,17 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) player->wavedashboost--; } + if (player->overdriveready) + { + if (player->amps == 0 || player->rings > 0) + player->overdriveready = 0; + else + { + player->overdriveready--; + K_Overdrive(player); + } + } + if (player->overdrive > 0 && onground == true) { player->overdrive--; diff --git a/src/k_kart.h b/src/k_kart.h index a44c2594f..fdc3e1e88 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -50,6 +50,8 @@ Make sure this matches the actual number of states #define MINCOMBOFLOAT (mapobjectscale*1) #define MAXCOMBOTIME (TICRATE*4) +#define OVERDRIVE_STARTUP (0) + #define AMPLEVEL (30) #define FLAMESHIELD_MAX (120) diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index 6e75a017e..700eeb98a 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -374,6 +374,8 @@ static int player_get(lua_State *L) lua_pushinteger(L, plr->wavedashpower); else if (fastcmp(field,"overdrivepower")) lua_pushinteger(L, plr->overdrivepower); + else if (fastcmp(field,"overdriveready")) + lua_pushinteger(L, plr->overdriveready); else if (fastcmp(field,"speedpunt")) lua_pushinteger(L, plr->speedpunt); else if (fastcmp(field,"trickcharge")) @@ -950,6 +952,8 @@ static int player_set(lua_State *L) plr->wavedashpower = luaL_checkinteger(L, 3); else if (fastcmp(field,"overdrivepower")) plr->overdrivepower = luaL_checkinteger(L, 3); + else if (fastcmp(field,"overdriveready")) + plr->overdriveready = luaL_checkinteger(L, 3); else if (fastcmp(field,"speedpunt")) plr->speedpunt = luaL_checkinteger(L, 3); else if (fastcmp(field,"trickcharge")) diff --git a/src/objects/amps.c b/src/objects/amps.c index 89d86344f..2fad0cd1b 100644 --- a/src/objects/amps.c +++ b/src/objects/amps.c @@ -151,12 +151,12 @@ void Obj_AmpBodyThink (mobj_t *amps) amps->angle = amps->target->angle; amps->renderflags |= RF_ADD|RF_FULLBRIGHT; - if (player->overdrive) + if (player->overdrive || player->overdriveready) amps->renderflags &= ~RF_DONTDRAW; else amps->renderflags |= RF_DONTDRAW; - if (player->overdrive < 35 && player->overdrive % 2) + if ((player->overdrive < 35 && player->overdrive % 2) || (player->overdriveready && leveltime % 2)) amps->renderflags |= RF_DONTDRAW; } } diff --git a/src/p_saveg.c b/src/p_saveg.c index 35d240d7c..3b613f95d 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -587,6 +587,7 @@ static void P_NetArchivePlayers(savebuffer_t *save) WRITEUINT16(save->p, players[i].overshield); WRITEFIXED(save->p, players[i].wavedashpower); WRITEFIXED(save->p, players[i].overdrivepower); + WRITEUINT8(save->p, players[i].overdriveready); WRITEUINT16(save->p, players[i].speedpunt); WRITEUINT16(save->p, players[i].trickcharge); @@ -1201,6 +1202,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save) players[i].overshield = READUINT16(save->p); players[i].wavedashpower = READFIXED(save->p); players[i].overdrivepower = READFIXED(save->p); + players[i].overdriveready = READUINT8(save->p); players[i].speedpunt = READUINT16(save->p); players[i].trickcharge = READUINT16(save->p);