Revert "RC3 fast balance/fixes"

This reverts commit 66fed52ca7.
This commit is contained in:
AJ Martinez 2025-09-17 17:25:04 -04:00
parent 66fed52ca7
commit 9735d93ee1
10 changed files with 30 additions and 59 deletions

View file

@ -1,6 +0,0 @@
{
"files.associations": {
"v_video.h": "c",
"music.h": "c"
}
}

View file

@ -2454,7 +2454,7 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
}
else
{
rings = 10; // Never mind, people love serious POSITION
rings = 20; // POSITION is fucking serious now
}
saveroundconditions = false;

View file

@ -10747,8 +10747,6 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
UINT32 bailboost = FixedInt(FixedMul(totalrings*FRACUNIT, BAIL_BOOST));
UINT32 baildrop = FixedInt(FixedMul((totalrings)*FRACUNIT, BAIL_DROP));
// CONS_Printf("R=%d SR=%d PR=%d DR=%d TR=%d\n", player->rings, player->superring, player->pickuprings, debtrings, totalrings);
player->rings = -20;
player->superring = 0;
player->pickuprings = 0;
@ -10762,7 +10760,6 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
// Below: The stun the player gets from bailing is reduced as a pity if you did it out of Burst. Longer charge, shorter stun.
player->stunned = BAILSTUN - player->bailcharge*5/4; // note: bailcharge goes up by 2 every tic, not 1, so this is actually - charge duration *2
player->bailcharge = 0;
player->defenseLockout = 2*PUNISHWINDOW;
player->ringboost += bailboost * (3+K_GetKartRingPower(player, true));
player->baildrop += baildrop * BAIL_DROPFREQUENCY + 1;
@ -11650,13 +11647,6 @@ void K_KartResetPlayerColor(player_t *player)
}
}
if (player->baildrop && (leveltime%4 == 0))
{
player->mo->colorized = true;
player->mo->color = SKINCOLOR_BLACK;
goto finalise;
}
if (player->eggmanTransferDelay)
{
player->mo->colorized = true;
@ -14851,7 +14841,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
S_StartSound(player->mo, sfx_s3k7b);
player->bailcharge = 0;
}
else if ((player->itemtype && player->itemamount) || (player->rings + player->superring + player->pickuprings > 0) || player->itemRoulette.active)
else if ((player->itemtype && player->itemamount) || player->rings > 0 || player->superring > 0 || player->pickuprings > 0 || player->itemRoulette.active)
{
// Set up bail charge, provided we have something to bail with (any rings or item resource).
// boolean grounded = P_IsObjectOnGround(player->mo);

View file

@ -42,12 +42,12 @@ Make sure this matches the actual number of states
#define INSTAWHIP_HOLD_DELAY (TICRATE*2)
// MUST be longer or equal to INSTAWHIP_CHARGETIME.
#define INSTAWHIP_TETHERBLOCK (TICRATE*4)
#define PUNISHWINDOW (10*TICRATE/10)
#define PUNISHWINDOW (7*TICRATE/10)
#define BAIL_MAXCHARGE (84) // tics to bail when in painstate nad in air, on ground is half, if you touch this, also update Obj_BailChargeThink synced animation logic
#define BAIL_DROP (FRACUNIT) // How many rings it has to drop before stun starts
#define BAIL_BOOST (6*FRACUNIT/5) // How fast bail itself is
#define BAIL_CREDIT_DEBTRINGS (true)
#define BAIL_CREDIT_DEBTRINGS (true)
#define BAIL_DROPFREQUENCY (2) // How quickly the rings spill out
#define BAILSTUN (TICRATE*6) // The fixed length of stun after baildrop is over

View file

@ -91,7 +91,7 @@ static UINT32 K_DynamicItemOddsRace[NUMKARTRESULTS-1][2] =
{1, 3}, // landmine
{25, 3}, // ballhog
{58, 6}, // selfpropelledbomb
{60, 7}, // grow
{55, 7}, // grow
{70, 8}, // shrink
{1, 1}, // lightningshield
{25, 4}, // bubbleshield
@ -1540,7 +1540,7 @@ void K_FillItemRouletteData(player_t *player, itemroulette_t *const roulette, bo
// A lot of items suck if no players are nearby to interact with them.
// Should we bias towards items that get us back to the action?
// This will set the "loneliness" percentage to be used later.
UINT32 lonelinessThreshold = 4*DISTVAR; // How far away can we be before items are considered useless?
UINT32 lonelinessThreshold = 3*DISTVAR; // How far away can we be before items are considered useless?
UINT32 toFront = lonelinessThreshold; // Distance to the player trying to kill us.
UINT32 toBack = lonelinessThreshold; // Distance to the player we are trying to kill.
fixed_t loneliness = 0;
@ -1662,7 +1662,7 @@ void K_FillItemRouletteData(player_t *player, itemroulette_t *const roulette, bo
// Conversely, if we're lonely, try not to reselect an item that wouldn't be useful to us
// without any players to use it on.
if (!K_IsItemSpeed(bestitem))
deltapenalty = Easing_Linear(loneliness, deltapenalty, 3*deltapenalty);
deltapenalty = Easing_Linear(loneliness, deltapenalty, 5*deltapenalty);
// Draw complex odds debugger. This one breaks down all the calcs in order.
if (cv_kartdebugdistribution.value > 1)

View file

@ -218,7 +218,12 @@ boolean Obj_OrbinautJawzCollide(mobj_t *t1, mobj_t *t2)
if ((t1->type == MT_ORBINAUT_SHIELD || t1->type == MT_JAWZ_SHIELD)
&& !t2->player->invincibilitytimer && !K_IsBigger(t2, t1)) // UGH. Stumble ignores invinc. Fix this damage type someday.
{
P_DamageMobj(t2, t1, t1->target, 1, DMG_WOMBO | DMG_STUMBLE);
// Same hack as Instawhip!
// If you do this a third time, please make it a part of the damage system.
// ^ remove all of P_DamageMobj and start over
P_PlayRinglossSound(t2);
P_PlayerRingBurst(t2->player, 5);
P_DamageMobj(t2, t1, t1->target, 1, DMG_WOMBO | DMG_WHUMBLE);
}
else
{

View file

@ -3515,9 +3515,9 @@ void A_AttractChase(mobj_t *actor)
// 2. ALL conditions that deleted flingrings off you didn't decrement pickuprings, desyncing your ring count
boolean stale = (!actor->target || P_MobjWasRemoved(actor->target) || !actor->target->player);
boolean blocked = (actor->target->player->baildrop);
boolean blocked = (actor->target->player->baildrop || actor->target->player->bailcharge);
if (G_CompatLevel(0x0010))
blocked |= !!(actor->target->player->bailcharge || actor->target->player->defenseLockout > PUNISHWINDOW);
blocked |= (actor->target->player->defenseLockout > PUNISHWINDOW);
if (stale || blocked)
{

View file

@ -3102,8 +3102,6 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
boolean clash = false;
sfxenum_t sfx = sfx_None;
CONS_Printf("unforced case\n");
if (!(gametyperules & GTR_BUMPERS))
{
if (damagetype & DMG_STEAL)
@ -3132,7 +3130,6 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
else if (player->overshield &&
(type != DMG_EXPLODE || inflictor->type != MT_SPBEXPLOSION || !inflictor->movefactor))
{
CONS_Printf("overshield case\n");
clash = true;
}
else if (player->hyudorotimer > 0)
@ -3154,8 +3151,6 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
clash = false;
}
CONS_Printf("invinc=%d clash=%d ad=%d type=%d whumb=%d\n", invincible, clash, player->pflags2 & PF2_ALWAYSDAMAGED, type, DMG_WHUMBLE);
// TODO: doing this from P_DamageMobj limits punting to objects that damage the player.
// And it may be kind of yucky.
// But this is easier than accounting for every condition in PIT_CheckThing!
@ -3164,11 +3159,8 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
return false;
}
CONS_Printf("xd\n");
if (invincible && type != DMG_WHUMBLE)
if (invincible && type != DMG_STUMBLE && type != DMG_WHUMBLE)
{
CONS_Printf("invinc case\n");
const INT32 oldHitlag = target->hitlag;
const INT32 oldHitlagInflictor = inflictor ? inflictor->hitlag : 0;
@ -3203,7 +3195,6 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
if (clash)
{
CONS_Printf("clash case\n");
player->spheres = max(player->spheres - 5, 0);
if (inflictor)
@ -3223,6 +3214,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
K_DoInstashield(player);
return false;
}
{
// Check if we should allow wombo combos (hard hits by default, inverted by the presence of DMG_WOMBO).
boolean allowcombo = ((hardhit || (type == DMG_STUMBLE || type == DMG_WHUMBLE)) == !(damagetype & DMG_WOMBO));
@ -3297,14 +3289,6 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
if (type == DMG_STING || type == DMG_STUMBLE)
{
damage = 0;
if (source && source != player->mo && source->player)
{
if (!P_PlayerInPain(player) && (player->defenseLockout || player->instaWhipCharge))
{
K_SpawnAmps(source->player, 20, target);
}
}
}
else
{
@ -3477,7 +3461,6 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
&& inflictor->type != MT_BANANA) // Are there other designed trap items that can be deployed and dropped? If you add one, list it here!
{
type = DMG_STUMBLE;
downgraded = true;
player->ringburst += 5; // IT'S THE DAMAGE STUMBLE HACK AGAIN AAAAAAAAHHHHHHHHHHH
K_PopPlayerShield(player);
}
@ -3516,7 +3499,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
case DMG_STUMBLE:
case DMG_WHUMBLE:
K_StumblePlayer(player);
ringburst = 5;
ringburst = 0;
break;
case DMG_TUMBLE:
K_TumblePlayer(player, inflictor, source, softenTumble);
@ -3543,18 +3526,22 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
ringburst = 0;
}
player->ringburst += ringburst;
K_PopPlayerShield(player);
if ((type != DMG_STUMBLE && type != DMG_WHUMBLE) || (type == DMG_STUMBLE && downgraded))
{
if (type != DMG_STING)
player->flashing = K_GetKartFlashing(player);
player->instashield = 15;
}
K_PlayPainSound(target, source);
player->ringburst += ringburst;
K_PopPlayerShield(player);
player->instashield = 15;
K_PlayPainSound(target, source);
}
else if (inflictor && inflictor->type == MT_INSTAWHIP)
{
K_PopPlayerShield(player);
}
if (gametyperules & GTR_BUMPERS)
player->spheres = min(player->spheres + 10, 40);

View file

@ -8399,7 +8399,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
P_MoveOrigin(mobj, mobj->target->x + FixedMul(34 * mapobjectscale, FINECOSINE((mobj->angle + mobj->movedir) >> ANGLETOFINESHIFT)),
mobj->target->y + FixedMul(34 * mapobjectscale, FINESINE((mobj->angle + mobj->movedir) >> ANGLETOFINESHIFT)),
mobj->target->z + (32 * mapobjectscale));
mobj->z + (32 * mapobjectscale));
K_MatchGenericExtraFlags(mobj, mobj->target);

View file

@ -5422,12 +5422,7 @@ static void P_EvaluateDamageType(player_t *player, sector_t *sector, boolean isT
break;
case SD_STUMBLE:
if (isTouching)
{
player->pflags2 |= PF2_ALWAYSDAMAGED;
P_DamageMobj(player->mo, NULL, NULL, 1, DMG_STUMBLE);
player->pflags2 &= ~PF2_ALWAYSDAMAGED;
}
break;
default:
break;