diff --git a/src/d_player.h b/src/d_player.h index 255f5dc75..4b704519c 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -754,6 +754,7 @@ struct player_t UINT16 bigwaypointgap; // timer counts down if finish line distance gap is too big to update waypoint UINT8 startboost; // (0 to 125) - Boost you get from start of race UINT8 dropdashboost; // Boost you get when holding A while respawning + UINT8 aciddropdashboost; // acid dropdash UINT16 flashing; UINT16 spinouttimer; // Spin-out from a banana peel or oil slick (was "pw_bananacam") diff --git a/src/g_demo.cpp b/src/g_demo.cpp index 634529ca6..9a04ff20d 100644 --- a/src/g_demo.cpp +++ b/src/g_demo.cpp @@ -180,6 +180,7 @@ demoghost *ghosts = NULL; // - 0x000E (Ring Racers 2.4 staff ghosts part 1 - initial recordings) // - 0x000F (Ring Racers 2.4 staff ghosts part 2 - dynslopes thinker fix) // - 0x0010 (Ring Racers 2.4 staff ghosts part 3 - skinlimit raise. don't say we never did anythin for 'ya) +// - 0x0011 (Ring Racers 2.4 staff ghosts part 4 - acid dropdash) #define MINDEMOVERSION 0x000E #define DEMOVERSION 0x0011 diff --git a/src/k_kart.c b/src/k_kart.c index 4e33632e8..f63c6e1d9 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1909,7 +1909,7 @@ void K_SpawnDashDustRelease(player_t *player) if (!P_IsObjectOnGround(player->mo)) return; - if (!player->speed && !player->startboost && !player->spindash && !player->dropdashboost) + if (!player->speed && !player->startboost && !player->spindash && !player->dropdashboost && !player->aciddropdashboost) return; travelangle = player->mo->angle; @@ -3780,6 +3780,11 @@ static void K_GetKartBoostPower(player_t *player) ADDBOOST(FRACUNIT/3, 4*FRACUNIT, HANDLESCALING); // + 33% top speed, + 400% acceleration, +50% handling } + if (player->aciddropdashboost) // Great value Drop dash + { + ADDBOOST(FRACUNIT/3, 4*FRACUNIT, HANDLESCALING/3); // + 33% top speed, + 400% acceleration, +33% handling, No sliptides here + } + if (player->driftboost) // Drift Boost { // Rebuff Eggman's stat block corner @@ -10023,6 +10028,20 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (onground && player->transfer) { + + if (G_CompatLevel(0x0010)) + { + // Ghosts prior to 2.4 RC2 don't get this + } + else + { + if (player->fastfall) // If you elected to acid drop, you get a small dropdash boost on landing + { + S_StartSound(player->mo, sfx_s23c); + player->aciddropdashboost = max(player->aciddropdashboost, 35); + K_SpawnDashDustRelease(player); + } + } player->fastfall = 0; player->transfer = 0; player->pflags2 &= ~PF2_SUPERTRANSFERVFX; @@ -10543,6 +10562,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->dropdashboost) player->dropdashboost--; + if (player->aciddropdashboost) + player->aciddropdashboost--; + if (player->wavedashboost > 0 && onground == true) { player->wavedashboost--; diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index 6fee01b18..231ed07e0 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -321,6 +321,8 @@ static int player_get(lua_State *L) lua_pushinteger(L, plr->startboost); else if (fastcmp(field,"dropdashboost")) lua_pushinteger(L, plr->dropdashboost); + else if (fastcmp(field,"aciddropdashboost")) + lua_pushinteger(L, plr->aciddropdashboost); else if (fastcmp(field,"aizdriftstrat")) lua_pushinteger(L, plr->aizdriftstrat); else if (fastcmp(field,"aizdriftextend")) @@ -986,6 +988,8 @@ static int player_set(lua_State *L) plr->startboost = luaL_checkinteger(L, 3); else if (fastcmp(field,"dropdashboost")) plr->dropdashboost = luaL_checkinteger(L, 3); + else if (fastcmp(field,"aciddropdashboost")) + plr->aciddropdashboost = luaL_checkinteger(L, 3); else if (fastcmp(field,"aizdriftstrat")) plr->aizdriftstrat = luaL_checkinteger(L, 3); else if (fastcmp(field,"aizdrifttilt")) diff --git a/src/p_saveg.cpp b/src/p_saveg.cpp index 760fef520..8072a905f 100644 --- a/src/p_saveg.cpp +++ b/src/p_saveg.cpp @@ -468,6 +468,7 @@ static void P_NetArchivePlayers(savebuffer_t *save) WRITEUINT16(save->p, players[i].bigwaypointgap); WRITEUINT8(save->p, players[i].startboost); WRITEUINT8(save->p, players[i].dropdashboost); + WRITEUINT8(save->p, players[i].aciddropdashboost); WRITEUINT16(save->p, players[i].flashing); WRITEUINT16(save->p, players[i].spinouttimer); @@ -1146,6 +1147,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save) players[i].bigwaypointgap = READUINT16(save->p); players[i].startboost = READUINT8(save->p); players[i].dropdashboost = READUINT8(save->p); + players[i].aciddropdashboost = READUINT8(save->p); players[i].flashing = READUINT16(save->p); players[i].spinouttimer = READUINT16(save->p);