From 88c77cfff34a406735a4ccabddbe311dff124e73 Mon Sep 17 00:00:00 2001 From: Ashnal Date: Sun, 15 Sep 2024 21:53:44 -0400 Subject: [PATCH 1/4] Clean up debug messages left from slope adjustments branch --- src/p_map.c | 8 ++++---- src/p_mobj.c | 38 +++++++++++++++++++------------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/p_map.c b/src/p_map.c index 3a217fb83..e97f7a1ac 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -2783,11 +2783,11 @@ fixed_t P_GetThingStepUp(mobj_t *thing, fixed_t destX, fixed_t destY) slopemom.z = 0; P_QuantizeMomentumToSlope(&slopemom, thing->standingslope); fixed_t momentumzdelta = FixedDiv(slopemom.z, FixedHypot(slopemom.x, slopemom.y)); // so this lets us know what the zdelta is for the vector the player is travelling along, in addition to the slope's zdelta in its xydirection - if (thing->player) - CONS_Printf("%s P_GetThingStepUp %d +", player_names[thing->player-players], maxstep); + // if (thing->player) + // CONS_Printf("%s P_GetThingStepUp %d +", player_names[thing->player-players], maxstep); maxstep += abs(momentumzdelta); - if (thing->player) - CONS_Printf(" %d = %d\n", momentumzdelta, maxstep); + // if (thing->player) + // CONS_Printf(" %d = %d\n", momentumzdelta, maxstep); } diff --git a/src/p_mobj.c b/src/p_mobj.c index 1b56232a4..ab88f215b 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1916,13 +1916,13 @@ boolean P_XYMovement(mobj_t *mo) mo->standingslope = oldslope; P_SetPitchRollFromSlope(mo, mo->standingslope); P_SlopeLaunch(mo); - if (mo->player) - CONS_Printf("%s Slope change launch old angle %f - new angle %f = %f\n", - player_names[mo->player-players], - FIXED_TO_FLOAT(AngleFixed(oldangle)), - FIXED_TO_FLOAT(AngleFixed(newangle)), - FIXED_TO_FLOAT(AngleFixed(oldangle-newangle)) - ); + // if (mo->player) + // CONS_Printf("%s Slope change launch old angle %f - new angle %f = %f\n", + // player_names[mo->player-players], + // FIXED_TO_FLOAT(AngleFixed(oldangle)), + // FIXED_TO_FLOAT(AngleFixed(newangle)), + // FIXED_TO_FLOAT(AngleFixed(oldangle-newangle)) + // ); } } else @@ -1934,8 +1934,8 @@ boolean P_XYMovement(mobj_t *mo) || ( (mo->eflags & MFE_VERTICALFLIP) && FixedDiv(slopemom.z, mo->scale) + P_GetMobjGravity(mo)*24 < 0 && predictedz - mo->z < slopemom.z*4/5 ) ) { - if (mo->player) - CONS_Printf("%s Ramp Launch %d %d %d+%d > 0 && %d-%d > %d True\n", player_names[mo->player-players], mo->scale, momentumzdelta, FixedDiv(slopemom.z, mo->scale), P_GetMobjGravity(mo)*24, predictedz, mo->z, slopemom.z*4/5); + // if (mo->player) + // CONS_Printf("%s Ramp Launch %d %d %d+%d > 0 && %d-%d > %d True\n", player_names[mo->player-players], mo->scale, momentumzdelta, FixedDiv(slopemom.z, mo->scale), P_GetMobjGravity(mo)*24, predictedz, mo->z, slopemom.z*4/5); P_SlopeLaunch(mo); } // else @@ -2282,8 +2282,8 @@ boolean P_ZMovement(mobj_t *mo) mo->standingslope = NULL; else if (!onground) { - if (mo->player) - // CONS_Printf("ZMovement launch?\n"); + // if (mo->player) + // CONS_Printf("ZMovement launch?\n"); P_SlopeLaunch(mo); } } @@ -2821,16 +2821,16 @@ void P_PlayerZMovement(mobj_t *mo) if (mo->eflags & MFE_JUSTSTEPPEDDOWN && abs(mo->momz) > 1) { - CONS_Printf("%s Check Step up momz reset %d < %d + %d", player_names[mo->player-players], abs(mo->momz), P_GetThingStepUp(mo, mo->x, mo->y)/6, abs(P_GetMobjGravity(mo)*3)); + // CONS_Printf("%s Check Step up momz reset %d < %d + %d", player_names[mo->player-players], abs(mo->momz), P_GetThingStepUp(mo, mo->x, mo->y)/6, abs(P_GetMobjGravity(mo)*3)); if (abs(mo->momz) < P_GetThingStepUp(mo, mo->x, mo->y)/6 + abs(P_GetMobjGravity(mo)*3)) { - CONS_Printf(" True\n"); + // CONS_Printf(" True\n"); mo->momz = 0; } - else - { - CONS_Printf(" False\n"); - } + // else + // { + // CONS_Printf(" False\n"); + // } } mo->z += mo->momz; @@ -2847,9 +2847,9 @@ void P_PlayerZMovement(mobj_t *mo) mo->standingslope = NULL; else if (!onground) { - CONS_Printf("%s PlayerZMovement launch %d ", player_names[mo->player-players], mo->momz); + // CONS_Printf("%s PlayerZMovement launch %d ", player_names[mo->player-players], mo->momz); P_SlopeLaunch(mo); - CONS_Printf("%d\n", mo->momz); + // CONS_Printf("%d\n", mo->momz); } } From d4c0603808d2c262c2391c1b002aac6af9a47ed2 Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Sun, 15 Sep 2024 21:05:30 -0700 Subject: [PATCH 2/4] Wall transfer buffs --- src/d_player.h | 2 + src/deh_tables.c | 13 ++++++ src/info.c | 12 ++++++ src/info.h | 13 ++++++ src/k_kart.c | 89 +++++++++++++++++++++++++++++++++++++++- src/k_kart.h | 1 + src/lua_playerlib.c | 6 ++- src/objects/dash-rings.c | 1 + src/p_map.c | 2 + src/p_mobj.c | 6 +++ src/p_saveg.c | 2 + src/sounds.c | 3 ++ src/sounds.h | 3 ++ 13 files changed, 151 insertions(+), 2 deletions(-) diff --git a/src/d_player.h b/src/d_player.h index 00bb5d1c5..0d932aab5 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -1053,6 +1053,8 @@ struct player_t fixed_t outrun; // Milky Way road effect + fixed_t transfer; // Tired of Ramp Park fastfalls + uint8_t public_key[PUBKEYLENGTH]; #ifdef HWRENDER diff --git a/src/deh_tables.c b/src/deh_tables.c index 0b2e3a9dc..ab4b0907b 100644 --- a/src/deh_tables.c +++ b/src/deh_tables.c @@ -1772,6 +1772,19 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi "S_WIPEOUTTRAIL10", "S_WIPEOUTTRAIL11", + // "Firework" dust trail + "S_FIREWORKTRAIL", + "S_FIREWORKTRAIL2", + "S_FIREWORKTRAIL3", + "S_FIREWORKTRAIL4", + "S_FIREWORKTRAIL5", + "S_FIREWORKTRAIL6", + "S_FIREWORKTRAIL7", + "S_FIREWORKTRAIL8", + "S_FIREWORKTRAIL9", + "S_FIREWORKTRAIL10", + "S_FIREWORKTRAIL11", + // Rocket sneaker "S_ROCKETSNEAKER_L", "S_ROCKETSNEAKER_R", diff --git a/src/info.c b/src/info.c index 40cc9949f..315f02880 100644 --- a/src/info.c +++ b/src/info.c @@ -2316,6 +2316,18 @@ state_t states[NUMSTATES] = {SPR_WIPD, 8, 1, {NULL}, 0, 0, S_WIPEOUTTRAIL10}, // S_WIPEOUTTRAIL9 {SPR_WIPD, 9, 1, {NULL}, 0, 0, S_WIPEOUTTRAIL11}, // S_WIPEOUTTRAIL10 {SPR_WIPD, 10, 1, {NULL}, 0, 0, S_NULL}, // S_WIPEOUTTRAIL11 + + {SPR_WIPD, 0, 1, {NULL}, 0, 0, S_FIREWORKTRAIL2}, // S_FIREWORKTRAIL + {SPR_WIPD, 1|FF_TRANS10, 1, {NULL}, 0, 0, S_FIREWORKTRAIL3}, // S_FIREWORKTRAIL2 + {SPR_WIPD, 2|FF_TRANS20, 1, {NULL}, 0, 0, S_FIREWORKTRAIL4}, // S_FIREWORKTRAIL3 + {SPR_WIPD, 3|FF_TRANS30, 1, {NULL}, 0, 0, S_FIREWORKTRAIL5}, // S_FIREWORKTRAIL4 + {SPR_WIPD, 4|FF_TRANS40, 1, {NULL}, 0, 0, S_FIREWORKTRAIL6}, // S_FIREWORKTRAIL5 + {SPR_WIPD, 5|FF_TRANS50, 1, {NULL}, 0, 0, S_FIREWORKTRAIL7}, // S_FIREWORKTRAIL6 + {SPR_WIPD, 6|FF_TRANS60, 1, {NULL}, 0, 0, S_FIREWORKTRAIL8}, // S_FIREWORKTRAIL7 + {SPR_WIPD, 7|FF_TRANS70, 1, {NULL}, 0, 0, S_FIREWORKTRAIL9}, // S_FIREWORKTRAIL8 + {SPR_WIPD, 8|FF_TRANS80, 1, {NULL}, 0, 0, S_FIREWORKTRAIL10}, // S_FIREWORKTRAIL9 + {SPR_WIPD, 9|FF_TRANS90, 1, {NULL}, 0, 0, S_FIREWORKTRAIL11}, // S_FIREWORKTRAIL10 + {SPR_WIPD, 10|FF_TRANS90, 1, {NULL}, 0, 0, S_NULL}, // S_FIREWORKTRAIL11 {SPR_RSHE, 0, -1, {NULL}, 0, 0, S_NULL}, // S_ROCKETSNEAKER_L {SPR_RSHE, 1, -1, {NULL}, 0, 0, S_NULL}, // S_ROCKETSNEAKER_R diff --git a/src/info.h b/src/info.h index e16625725..f8c880633 100644 --- a/src/info.h +++ b/src/info.h @@ -2798,6 +2798,19 @@ typedef enum state S_WIPEOUTTRAIL10, S_WIPEOUTTRAIL11, + // "Firework"" dust trail + S_FIREWORKTRAIL1, + S_FIREWORKTRAIL2, + S_FIREWORKTRAIL3, + S_FIREWORKTRAIL4, + S_FIREWORKTRAIL5, + S_FIREWORKTRAIL6, + S_FIREWORKTRAIL7, + S_FIREWORKTRAIL8, + S_FIREWORKTRAIL9, + S_FIREWORKTRAIL10, + S_FIREWORKTRAIL11, + // Rocket sneaker S_ROCKETSNEAKER_L, S_ROCKETSNEAKER_R, diff --git a/src/k_kart.c b/src/k_kart.c index 6ac5d873c..868655caf 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -5096,6 +5096,8 @@ void K_TumbleInterrupt(player_t *player) player->pflags &= ~PF_TUMBLELASTBOUNCE; //players->tumbleHeight = 20; + player->transfer = 0; + player->mo->rollangle = 0; player->spinouttype = KSPIN_WIPEOUT; player->spinouttimer = player->wipeoutslow = TICRATE+2; @@ -6268,6 +6270,33 @@ void K_SpawnWipeoutTrail(mobj_t *mo) K_FlipFromObject(dust, mo); } +void K_SpawnFireworkTrail(mobj_t *mo) +{ + mobj_t *dust; + + I_Assert(mo != NULL); + I_Assert(!P_MobjWasRemoved(mo)); + + dust = P_SpawnMobjFromMobj(mo, 0, 0, 0, MT_WIPEOUTTRAIL); + + P_SetTarget(&dust->target, mo); + dust->angle = K_MomentumAngle(mo); + + P_SetMobjState(dust, S_FIREWORKTRAIL1); + + if (mo->player) + dust->color = mo->player->skincolor; + else + dust->color = mo->color; + dust->colorized = true; + + P_InstaScale(dust, mo->scale/2); + dust->destscale = 2*mo->scale; + dust->scalespeed = mo->scale/2; + + K_FlipFromObject(dust, mo); +} + void K_SpawnDraftDust(mobj_t *mo) { UINT8 i; @@ -9014,6 +9043,50 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->itemtype == KITEM_NONE) player->itemflags &= ~IF_HOLDREADY; + if (onground) + player->transfer = 0; + + if (player->transfer) + { + if ((abs(player->mo->momz) < (2*abs(player->transfer)/4)) || (player->mo->momz > 0) != (player->transfer > 0)) + { + fixed_t fuckfactor = FRACUNIT; + fixed_t transfergravity = 10*FRACUNIT/100; + + fixed_t transferclamp = min(abs(player->transfer), (player->mo->scale*100)); + if (player->transfer < 0) + transferclamp *= -1; + + if ((player->mo->momz > 0) == (transferclamp > 0)) + { + if (!S_SoundPlaying(player->mo, sfx_ggfall)) + S_StartSound(player->mo, sfx_ggfall); + + fuckfactor = FRACUNIT/2; + } + + fixed_t sx, sy; + sx = P_RandomRange(PR_DECORATION, -48, 48)*FRACUNIT; + sy = P_RandomRange(PR_DECORATION, -48, 48)*FRACUNIT; + + mobj_t *spdl = P_SpawnMobjFromMobj(player->mo, sx, sy, 0, MT_DOWNLINE); + spdl->colorized = true; + spdl->color = player->skincolor; + K_MatchGenericExtraFlags(spdl, player->mo); + P_SetTarget(&spdl->owner, player->mo); + spdl->renderflags |= RF_REDUCEVFX; + P_InstaScale(spdl, 4*player->mo->scale/2); + + if (abs(player->mo->momz) < (3*transferclamp/2)) + player->mo->momz -= FixedMul(transferclamp, FixedMul(fuckfactor, transfergravity)); + } + else + { + if (leveltime % 2) + K_SpawnFireworkTrail(player->mo); + } + } + // DKR style camera for boosting if (player->karthud[khud_boostcam] != 0 || player->karthud[khud_destboostcam] != 0) { @@ -10099,7 +10172,6 @@ void K_KartResetPlayerColor(player_t *player) fullbright = true; player->mo->color = player->skincolor; goto finalise; - } else if (player->overdrive) { @@ -10109,6 +10181,21 @@ void K_KartResetPlayerColor(player_t *player) goto finalise; } + if (player->transfer && (leveltime & 1)) + { + player->mo->colorized = true; + fullbright = true; + player->mo->color = player->skincolor; + goto finalise; + } + else if (player->transfer) + { + player->mo->colorized = true; + fullbright = true; + player->mo->color = SKINCOLOR_WHITE; + goto finalise; + } + if (player->ringboost && (leveltime & 1)) // ring boosting { player->mo->colorized = true; diff --git a/src/k_kart.h b/src/k_kart.h index bf73ffcf2..81bb5c9a4 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -174,6 +174,7 @@ UINT16 K_DriftSparkColor(player_t *player, INT32 charge); void K_SpawnBoostTrail(player_t *player); void K_SpawnSparkleTrail(mobj_t *mo); void K_SpawnWipeoutTrail(mobj_t *mo); +void K_SpawnFireworkTrail(mobj_t *mo); void K_SpawnDraftDust(mobj_t *mo); void K_SpawnMagicianParticles(mobj_t *mo, int spread); void K_DriftDustHandling(mobj_t *spawner); diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index 9398ea373..6c585cb12 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -262,6 +262,8 @@ static int player_get(lua_State *L) lua_pushboolean(L, plr->flipDI); else if (fastcmp(field,"analoginput")) lua_pushboolean(L, plr->analoginput); + else if (fastcmp(field,"transfer")) + lua_pushboolean(L, plr->transfer); else if (fastcmp(field,"markedfordeath")) lua_pushboolean(L, plr->markedfordeath); else if (fastcmp(field,"incontrol")) @@ -855,7 +857,9 @@ static int player_set(lua_State *L) else if (fastcmp(field,"ringvisualwarning")) plr->ringvisualwarning = luaL_checkboolean(L, 3); else if (fastcmp(field,"analoginput")) - plr->markedfordeath = luaL_checkboolean(L, 3); + plr->analoginput = luaL_checkboolean(L, 3); + else if (fastcmp(field,"transfer")) + plr->transfer = luaL_checkboolean(L, 3); else if (fastcmp(field,"markedfordeath")) plr->markedfordeath = luaL_checkboolean(L, 3); else if (fastcmp(field,"dotrickfx")) diff --git a/src/objects/dash-rings.c b/src/objects/dash-rings.c index 89fb81a4e..f7a8637be 100644 --- a/src/objects/dash-rings.c +++ b/src/objects/dash-rings.c @@ -188,6 +188,7 @@ static void DashRingLaunch(player_t *player, mobj_t *ring) player->flashing = 0; player->fastfall = 0; K_TumbleInterrupt(player); + player->transfer = 0; switch (ring->extravalue1) { diff --git a/src/p_map.c b/src/p_map.c index e97f7a1ac..3a2494b75 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -456,6 +456,8 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object) spring->reactiontime++; } + + object->player->transfer = 0; } P_SetMobjState(spring, raisestate); diff --git a/src/p_mobj.c b/src/p_mobj.c index ab88f215b..89deadbaf 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1791,6 +1791,12 @@ boolean P_XYMovement(mobj_t *mo) if (P_MobjFlip(mo)*(transfermomz - mo->momz) > 2*FRACUNIT) // Do the actual launch! { mo->momz = transfermomz; + if (mo->player) + { + mo->player->transfer = transfermomz; + S_StartSound(mo, sfx_s3k98); + } + mo->standingslope = NULL; mo->terrain = NULL; P_SetPitchRoll(mo, ANGLE_90, diff --git a/src/p_saveg.c b/src/p_saveg.c index a8638d03d..ad99621d4 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -655,6 +655,7 @@ static void P_NetArchivePlayers(savebuffer_t *save) WRITEUINT8(save->p, players[i].itemflags); WRITEFIXED(save->p, players[i].outrun); + WRITEFIXED(save->p, players[i].transfer); WRITEUINT8(save->p, players[i].rideroid); WRITEUINT8(save->p, players[i].rdnodepull); @@ -1279,6 +1280,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save) players[i].itemflags = READUINT8(save->p); players[i].outrun = READFIXED(save->p); + players[i].transfer = READFIXED(save->p); players[i].rideroid = (boolean)READUINT8(save->p); players[i].rdnodepull = (boolean)READUINT8(save->p); diff --git a/src/sounds.c b/src/sounds.c index 465af1aac..7e5ac1b73 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -1537,6 +1537,9 @@ sfxinfo_t S_sfx[NUMSFX] = {"die02", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, {"die03", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, + // Walltransfer + {"ggfall", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, + // SRB2kart - Skin sounds {"kwin", false, 64, 96, -1, NULL, 0, SKSKWIN, -1, LUMPERROR, ""}, {"klose", false, 64, 96, -1, NULL, 0, SKSKLOSE, -1, LUMPERROR, ""}, diff --git a/src/sounds.h b/src/sounds.h index 0abcd2110..bed72efa2 100644 --- a/src/sounds.h +++ b/src/sounds.h @@ -1613,6 +1613,9 @@ typedef enum sfx_die02, sfx_die03, + // Walltransfer fuck + sfx_ggfall, + // And LASTLY, Kart's skin sounds. sfx_kwin, sfx_klose, From ba22dabfe2fb9d20d700b2200e6d0419639fa780 Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Sun, 15 Sep 2024 21:23:40 -0700 Subject: [PATCH 3/4] Transfer polish --- src/d_player.h | 1 + src/k_kart.c | 28 +++++++++------------------- src/lua_playerlib.c | 4 ++++ src/p_saveg.c | 2 ++ 4 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/d_player.h b/src/d_player.h index 0d932aab5..a63a145b6 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -1054,6 +1054,7 @@ struct player_t fixed_t outrun; // Milky Way road effect fixed_t transfer; // Tired of Ramp Park fastfalls + boolean transfersound; uint8_t public_key[PUBKEYLENGTH]; diff --git a/src/k_kart.c b/src/k_kart.c index 868655caf..89be80a67 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9043,8 +9043,11 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->itemtype == KITEM_NONE) player->itemflags &= ~IF_HOLDREADY; - if (onground) + if (onground || player->transfer < 10*player->mo->scale) + { player->transfer = 0; + player->transfersound = false; + } if (player->transfer) { @@ -9059,11 +9062,13 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if ((player->mo->momz > 0) == (transferclamp > 0)) { - if (!S_SoundPlaying(player->mo, sfx_ggfall)) - S_StartSound(player->mo, sfx_ggfall); - fuckfactor = FRACUNIT/2; } + else if (!player->transfersound) + { + S_StartSound(player->mo, sfx_ggfall); + player->transfersound = true; + } fixed_t sx, sy; sx = P_RandomRange(PR_DECORATION, -48, 48)*FRACUNIT; @@ -10181,21 +10186,6 @@ void K_KartResetPlayerColor(player_t *player) goto finalise; } - if (player->transfer && (leveltime & 1)) - { - player->mo->colorized = true; - fullbright = true; - player->mo->color = player->skincolor; - goto finalise; - } - else if (player->transfer) - { - player->mo->colorized = true; - fullbright = true; - player->mo->color = SKINCOLOR_WHITE; - goto finalise; - } - if (player->ringboost && (leveltime & 1)) // ring boosting { player->mo->colorized = true; diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index 6c585cb12..e96a2db13 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -264,6 +264,8 @@ static int player_get(lua_State *L) lua_pushboolean(L, plr->analoginput); else if (fastcmp(field,"transfer")) lua_pushboolean(L, plr->transfer); + else if (fastcmp(field,"transfersound")) + lua_pushboolean(L, plr->transfersound); else if (fastcmp(field,"markedfordeath")) lua_pushboolean(L, plr->markedfordeath); else if (fastcmp(field,"incontrol")) @@ -860,6 +862,8 @@ static int player_set(lua_State *L) plr->analoginput = luaL_checkboolean(L, 3); else if (fastcmp(field,"transfer")) plr->transfer = luaL_checkboolean(L, 3); + else if (fastcmp(field,"transfersound")) + plr->transfersound = luaL_checkboolean(L, 3); else if (fastcmp(field,"markedfordeath")) plr->markedfordeath = luaL_checkboolean(L, 3); else if (fastcmp(field,"dotrickfx")) diff --git a/src/p_saveg.c b/src/p_saveg.c index ad99621d4..8497b4506 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -656,6 +656,7 @@ static void P_NetArchivePlayers(savebuffer_t *save) WRITEFIXED(save->p, players[i].outrun); WRITEFIXED(save->p, players[i].transfer); + WRITEUINT8(save->p, players[i].transfersound); WRITEUINT8(save->p, players[i].rideroid); WRITEUINT8(save->p, players[i].rdnodepull); @@ -1281,6 +1282,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save) players[i].outrun = READFIXED(save->p); players[i].transfer = READFIXED(save->p); + players[i].transfersound = READUINT8(save->p); players[i].rideroid = (boolean)READUINT8(save->p); players[i].rdnodepull = (boolean)READUINT8(save->p); From c294785528560f096c17ac4e973db4ec23b5304e Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Mon, 16 Sep 2024 18:24:50 -0700 Subject: [PATCH 4/4] Experimental: only transfer assist while holding A --- src/k_kart.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index 89be80a67..32028cf7b 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9051,7 +9051,8 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->transfer) { - if ((abs(player->mo->momz) < (2*abs(player->transfer)/4)) || (player->mo->momz > 0) != (player->transfer > 0)) + boolean eligible = (abs(player->mo->momz) < (2*abs(player->transfer)/4)) || (player->mo->momz > 0) != (player->transfer > 0); + if ((player->cmd.buttons & BT_ACCELERATE) && eligible) { fixed_t fuckfactor = FRACUNIT; fixed_t transfergravity = 10*FRACUNIT/100;