Anti-bump
This commit is contained in:
parent
5ef24abba4
commit
0901ea89de
10 changed files with 65 additions and 1 deletions
|
|
@ -93,7 +93,7 @@
|
|||
#define ASSET_HASH_TEXTURES_KART 0xb4211b2f32b6a291
|
||||
#define ASSET_HASH_CHARS_KART 0x1e68a3e01aa5c68b
|
||||
#define ASSET_HASH_MAPS_KART 0x38558ed00da41ce9
|
||||
#define ASSET_HASH_MAIN_PK3 0xc15d8361362b3ed7
|
||||
#define ASSET_HASH_MAIN_PK3 0xef23efdd239ac20d
|
||||
#define ASSET_HASH_MAPPATCH_PK3 0x7d1f6b96dd119296
|
||||
#define ASSET_HASH_BONUSCHARS_KART 0x60e6f13d822a7461
|
||||
#ifdef USE_PATCH_FILE
|
||||
|
|
|
|||
|
|
@ -162,6 +162,7 @@ static void KartSlopeBoost_OnChange(void);
|
|||
static void KartDrafting_OnChange(void);
|
||||
static void KartAirDrop_OnChange(void);
|
||||
static void KartItemLitter_OnChange(void);
|
||||
static void KartAntiBump_OnChange(void);
|
||||
static void KartItemBreaker_OnChange(void);
|
||||
static void KartInvinType_OnChange(void);
|
||||
static void KartBumpSpark_OnChange(void);
|
||||
|
|
@ -568,8 +569,14 @@ consvar_t cv_kartdrafting_closedeadzone = CVAR_INIT ("kartdrafting_closedeadzone
|
|||
consvar_t cv_kartdrafting_basedistance = CVAR_INIT ("kartdrafting_basedistance", "2560", CV_NETVAR|CV_CHEAT, CV_Unsigned, NULL);
|
||||
|
||||
consvar_t cv_kartairdrop = CVAR_INIT ("kartairdrop", "No", CV_NETVAR|CV_CALL|CV_NOINIT, CV_YesNo, KartAirDrop_OnChange);
|
||||
|
||||
consvar_t cv_kartitemlitter = CVAR_INIT ("kartitemlitter", "On", CV_NETVAR|CV_CALL|CV_NOINIT, CV_OnOff, KartItemLitter_OnChange);
|
||||
|
||||
#define ANTIBUMP_MAX (UINT32_MAX / TICRATE)
|
||||
static CV_PossibleValue_t antibump_cons_t[] = {{0, "MIN"}, {ANTIBUMP_MAX, "MAX"}, {0, NULL}};
|
||||
consvar_t cv_kartantibump = CVAR_INIT ("kartantibump", "0", CV_NETVAR|CV_CALL|CV_NOINIT, antibump_cons_t, KartAntiBump_OnChange);
|
||||
#undef ANTIBUMP_MAX
|
||||
|
||||
// Odds distancing
|
||||
#define MAXODDSDIST ((INT32_MAX / FRACUNIT) / 2)
|
||||
static CV_PossibleValue_t distvar_cons_t[] = {{1, "MIN"}, {MAXODDSDIST, "MAX"}, {0, NULL}};
|
||||
|
|
@ -7695,6 +7702,30 @@ static void KartItemLitter_OnChange(void)
|
|||
}
|
||||
}
|
||||
|
||||
static void KartAntiBump_OnChange(void)
|
||||
{
|
||||
if (K_CanChangeRules() == false)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (leveltime < starttime)
|
||||
{
|
||||
CONS_Printf(
|
||||
M_GetText("Player collision delay has been changed to \"%s\".\n"),
|
||||
cv_kartantibump.string
|
||||
);
|
||||
antibumptime = (tic_t)cv_kartantibump.value * TICRATE;
|
||||
}
|
||||
else
|
||||
{
|
||||
CONS_Printf(
|
||||
M_GetText("Player collision delay will be changed to \"%s\" next round.\n"),
|
||||
cv_kartantibump.string
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
static void KartItemBreaker_OnChange(void)
|
||||
{
|
||||
if (K_CanChangeRules() == false)
|
||||
|
|
|
|||
|
|
@ -210,6 +210,8 @@ extern consvar_t cv_kartairdrop;
|
|||
|
||||
extern consvar_t cv_kartitemlitter;
|
||||
|
||||
extern consvar_t cv_kartantibump;
|
||||
|
||||
extern consvar_t cv_kartoddsdist;
|
||||
extern consvar_t cv_kartlegacyoddsdist;
|
||||
extern consvar_t cv_kartspbdist;
|
||||
|
|
|
|||
|
|
@ -688,6 +688,7 @@ extern tic_t bombflashtimer; // Used to avoid causing seizures if multiple mines
|
|||
extern boolean legitimateexit;
|
||||
extern boolean comebackshowninfo;
|
||||
extern tic_t curlap, bestlap;
|
||||
extern tic_t antibumptime;
|
||||
|
||||
extern INT16 votelevels[12][2];
|
||||
extern SINT8 votes[MAXPLAYERS];
|
||||
|
|
|
|||
|
|
@ -313,6 +313,7 @@ boolean legitimateexit; // Did this client actually finish the match?
|
|||
boolean comebackshowninfo; // Have you already seen the "ATTACK OR PROTECT" message?
|
||||
tic_t curlap; // Current lap time
|
||||
tic_t bestlap; // Best lap time
|
||||
tic_t antibumptime; // Delay before players start bumping into one another.
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
|
|
|||
|
|
@ -376,8 +376,11 @@ void K_RegisterKartStuff(void)
|
|||
CV_RegisterVar(&cv_kartchainingsound);
|
||||
|
||||
CV_RegisterVar(&cv_kartairdrop);
|
||||
|
||||
CV_RegisterVar(&cv_kartitemlitter);
|
||||
|
||||
CV_RegisterVar(&cv_kartantibump);
|
||||
|
||||
CV_RegisterVar(&cv_kartitembreaker);
|
||||
|
||||
//CV_RegisterVar(&cv_kartwalltransfer);
|
||||
|
|
|
|||
|
|
@ -1154,6 +1154,12 @@ static BlockItReturn_t PIT_CheckThing(mobj_t *thing)
|
|||
if (g_tm.thing->z + g_tm.thing->height < thing->z)
|
||||
return BMIT_CONTINUE; // underneath
|
||||
|
||||
// If antibump is active, ignore player collisions.
|
||||
if (leveltime < starttime + antibumptime)
|
||||
{
|
||||
return BMIT_CONTINUE;
|
||||
}
|
||||
|
||||
if (thing->player->squishedtimer || thing->player->hyudorotimer
|
||||
|| thing->player->justbumped || thing->scale > g_tm.thing->scale + (mapobjectscale/8)
|
||||
|| g_tm.thing->player->squishedtimer || g_tm.thing->player->hyudorotimer
|
||||
|
|
|
|||
|
|
@ -4177,6 +4177,7 @@ static boolean P_NetSyncMisc(savebuffer_t *save, boolean resending)
|
|||
SYNCBOOLEAN(itemlittering);
|
||||
SYNC(bumpsparkactive);
|
||||
SYNC(invintype);
|
||||
SYNC(antibumptime);
|
||||
|
||||
for (i = 0; i < sizeof(votelevels)/sizeof(*votelevels); i++)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -8044,6 +8044,7 @@ static void P_InitLevelSettings(boolean reloadinggamestate)
|
|||
airdropactive = false;
|
||||
itemlittering = false;
|
||||
bumpsparkactive = 0;
|
||||
antibumptime = 0;
|
||||
|
||||
if (cv_kartrings.value)
|
||||
ringsactive = true;
|
||||
|
|
@ -8075,6 +8076,8 @@ static void P_InitLevelSettings(boolean reloadinggamestate)
|
|||
bumpsparkactive = (UINT8)cv_kartbumpspark.value;
|
||||
invintype = (UINT8)cv_kartinvintype.value;
|
||||
|
||||
antibumptime = (tic_t)cv_kartantibump.value * TICRATE;
|
||||
|
||||
// emerald hunt
|
||||
hunt1 = hunt2 = hunt3 = NULL;
|
||||
|
||||
|
|
|
|||
16
src/p_tick.c
16
src/p_tick.c
|
|
@ -746,10 +746,26 @@ void P_Ticker(boolean run)
|
|||
K_UpdateAllPlayerPositions();
|
||||
|
||||
// OK! Now that we got all of that sorted, players can think!
|
||||
UINT8 p = 0;
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
if (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo))
|
||||
{
|
||||
P_PlayerThink(&players[i]);
|
||||
|
||||
if (!players[i].spectator)
|
||||
p++;
|
||||
}
|
||||
}
|
||||
|
||||
if (p > (MAXPLAYERS / 2))
|
||||
{
|
||||
// At the point where players spawn on top of one another, start silently
|
||||
// adding a minimum to the antibump timer.
|
||||
// This prevents annoying race-start bonks.
|
||||
antibumptime = max(p, antibumptime);
|
||||
}
|
||||
|
||||
ps_playerthink_time = I_GetPreciseTime() - ps_playerthink_time;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue