diff --git a/src/.vscode/settings.json b/src/.vscode/settings.json deleted file mode 100644 index e51dc73aa..000000000 --- a/src/.vscode/settings.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "files.associations": { - "v_video.h": "c", - "music.h": "c" - } -} diff --git a/src/g_game.c b/src/g_game.c index 5604e1bc6..88f64d126 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -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; diff --git a/src/k_kart.c b/src/k_kart.c index 4a396ac2c..fd627bcf0 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -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); diff --git a/src/k_kart.h b/src/k_kart.h index d9ca6c6c3..c54d3f9f3 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -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 diff --git a/src/k_roulette.c b/src/k_roulette.c index 73e05f3ba..e3db1838a 100644 --- a/src/k_roulette.c +++ b/src/k_roulette.c @@ -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) diff --git a/src/objects/orbinaut.c b/src/objects/orbinaut.c index 32f11603a..9767f49f1 100644 --- a/src/objects/orbinaut.c +++ b/src/objects/orbinaut.c @@ -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 { diff --git a/src/p_enemy.c b/src/p_enemy.c index 8c6aed7c1..761931ec6 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -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) { diff --git a/src/p_inter.c b/src/p_inter.c index 1efc263bd..0055fd139 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -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); diff --git a/src/p_mobj.c b/src/p_mobj.c index 493bf2a89..c945a281b 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -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); diff --git a/src/p_spec.c b/src/p_spec.c index 5c0484705..2212a5b6d 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -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;