diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 560700595..fd9ef463e 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -548,11 +548,11 @@ consvar_t cv_kartstacking_flame_stackable = CVAR_INIT ("vanillaboost_flame_stack consvar_t cv_kartstacking_attraction_speedboost_himin = CVAR_INIT ("vanillaboost_attraction_speedboost_himin", "0.42", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); consvar_t cv_kartstacking_attraction_speedboost_himax = CVAR_INIT ("vanillaboost_attraction_speedboost_himax", "0.50", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); -consvar_t cv_kartstacking_attraction_speedboost_normmin = CVAR_INIT ("vanillaboost_attraction_speedboost_normmin", "0.15", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); -consvar_t cv_kartstacking_attraction_speedboost_normmax = CVAR_INIT ("vanillaboost_attraction_speedboost_normmax", "0.20", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); -consvar_t cv_kartstacking_attraction_accelboost_hi = CVAR_INIT ("vanillaboost_attraction_accelboost_hi", "18.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); -consvar_t cv_kartstacking_attraction_accelboost_norm = CVAR_INIT ("vanillaboost_attraction_accelboost_norm", "4.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); -consvar_t cv_kartstacking_attraction_handleboost = CVAR_INIT ("vanillaboost_attraction_handleboost", "1.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); +consvar_t cv_kartstacking_attraction_speedboost_normmin = CVAR_INIT ("vanillaboost_attraction_speedboost_normmin", "0.24", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); +consvar_t cv_kartstacking_attraction_speedboost_normmax = CVAR_INIT ("vanillaboost_attraction_speedboost_normmax", "0.32", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); +consvar_t cv_kartstacking_attraction_accelboost_hi = CVAR_INIT ("vanillaboost_attraction_accelboost_hi", "16.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); +consvar_t cv_kartstacking_attraction_accelboost_norm = CVAR_INIT ("vanillaboost_attraction_accelboost_norm", "8.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); +consvar_t cv_kartstacking_attraction_handleboost = CVAR_INIT ("vanillaboost_attraction_handleboost", "0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); consvar_t cv_kartstacking_attraction_stackable = CVAR_INIT ("vanillaboost_attraction_stackable", "On", CV_NETVAR|CV_GUARD, CV_OnOff, NULL); consvar_t cv_kartstacking_start_speedboost = CVAR_INIT ("vanillaboost_start_speedboost", "0.25", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); @@ -718,6 +718,10 @@ consvar_t cv_kartflame_fastfuel = CVAR_INIT ("kartflame_fastfuel", "On", CV_NETV consvar_t cv_kartflame_offroadburn = CVAR_INIT ("kartflame_offroadburn", "On", CV_NETVAR, CV_OnOff, NULL); consvar_t cv_kartattraction_assistpower = CVAR_INIT ("kartattraction_assistpower", "0.5", CV_NETVAR|CV_FLOAT, CV_Unsigned, NULL); +// Attraction Shield damage toggles +static CV_PossibleValue_t kartattractiondmg_cons_t[] = {{0, "None"}, {DMG_WIPEOUT, "Wipe-out"}, {DMG_FLIPOVER, "Flip-over"}, {DMG_EXPLODE, "Explode"}, {0, NULL}}; +consvar_t cv_kartattraction_aoedmg = CVAR_INIT ("kartattraction_assistpower", "None", CV_NETVAR|CV_FLOAT, kartattractiondmg_cons_t, NULL); + // "Arrow Bullet": above a certain speed threshold, an aura in the shape of the Shrink arrow // covers you, signaling protection from (most) items and players. // Default threshold percentage is currently 166%. diff --git a/src/d_netcmd.h b/src/d_netcmd.h index 91589a515..fd80cd833 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -237,6 +237,7 @@ extern consvar_t cv_kartbubble_boost_offroadignore; extern consvar_t cv_kartflame_fastfuel; extern consvar_t cv_kartflame_offroadburn; extern consvar_t cv_kartattraction_assistpower; +extern consvar_t cv_kartattraction_aoedmg; extern consvar_t cv_kartaltshrink_arrowbullet; extern consvar_t cv_kartaltshrink_arrowbulletthres; diff --git a/src/k_collide.c b/src/k_collide.c index 51dd64b98..8819d7fd4 100644 --- a/src/k_collide.c +++ b/src/k_collide.c @@ -596,6 +596,7 @@ boolean K_LandMineCollide(mobj_t *t1, mobj_t *t2) static mobj_t *lightningSource; static fixed_t lightningDist; +static boolean attractionhipower; static inline BlockItReturn_t PIT_ThunderShieldAttack(mobj_t *thing) { @@ -696,7 +697,7 @@ static inline BlockItReturn_t PIT_AttractionShieldAttack(mobj_t *thing) return BMIT_ABORT; } - if (thing->player) + if (thing->player && (ATTRACTIONAOEDAMAGE == 0 || (!attractionhipower))) { // Don't damage players return BMIT_CONTINUE; @@ -741,16 +742,24 @@ static inline BlockItReturn_t PIT_AttractionShieldAttack(mobj_t *thing) K_SetIndirectItemCooldown(0); } - P_DamageMobj(thing, lightningSource, lightningSource, 1, DMG_VOLTAGE|DMG_CANTHURTSELF); + if (thing->player) + { + P_DamageMobj(thing, lightningSource, lightningSource, 1, ATTRACTIONAOEDAMAGE|DMG_CANTHURTSELF); + } + else + { + P_DamageMobj(thing, lightningSource, lightningSource, 1, DMG_VOLTAGE|DMG_CANTHURTSELF); + } return BMIT_CONTINUE; } -void K_AttractionShieldAttack(mobj_t *actor, fixed_t size) +void K_AttractionShieldAttack(mobj_t *actor, fixed_t size, boolean hipower) { INT32 bx, by, xl, xh, yl, yh; lightningDist = FixedMul(size, actor->scale); lightningSource = actor; + attractionhipower = hipower; // Use blockmap to check for nearby shootables yh = (unsigned)(actor->y + lightningDist - bmaporgy)>>MAPBLOCKSHIFT; diff --git a/src/k_collide.h b/src/k_collide.h index 416f14ec6..e7945f72e 100644 --- a/src/k_collide.h +++ b/src/k_collide.h @@ -20,7 +20,7 @@ boolean K_MineCollide(mobj_t *t1, mobj_t *t2); boolean K_MineExplosionCollide(mobj_t *t1, mobj_t *t2); boolean K_LandMineCollide(mobj_t *t1, mobj_t *t2); void K_ThunderShieldAttack(mobj_t *actor, fixed_t size); -void K_AttractionShieldAttack(mobj_t *actor, fixed_t size); +void K_AttractionShieldAttack(mobj_t *actor, fixed_t size, boolean hipower); boolean K_BubbleShieldReflect(mobj_t *t1, mobj_t *t2); boolean K_BubbleShieldCanReflect(mobj_t *t); diff --git a/src/k_items.c b/src/k_items.c index 207a9abdb..11389b8df 100644 --- a/src/k_items.c +++ b/src/k_items.c @@ -1923,7 +1923,7 @@ void K_DoAttractionShield(player_t *player, boolean hipower) } S_StartSound(player->mo, sfx_zio3); - K_AttractionShieldAttack(player->mo, (cv_kartthunder_radius.value + THUNDERSPRITE) * FRACUNIT); + K_AttractionShieldAttack(player->mo, (cv_kartthunder_radius.value + THUNDERSPRITE) * FRACUNIT, hipower); // spawn vertical bolt mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_THOK); diff --git a/src/k_items.h b/src/k_items.h index ab234bb3e..6311adf83 100644 --- a/src/k_items.h +++ b/src/k_items.h @@ -241,10 +241,11 @@ extern consvar_t cv_karteggmine_slotbrick; extern consvar_t cv_kartthunder_radius; #define BUBBLEBOOSTTIME (7 * sneakertime / 10) + #define ATTRACTIONCHARGETIME ((92*TICRATE)/60) #define ATTRACTIONATTACKTIME_FULL (TICRATE) -#define ATTRACTIONATTACKTIME_MAX (TICRATE/2) -#define ATTRACTIONATTACKTIME_MIN (TICRATE/3) +#define ATTRACTIONATTACKTIME_MAX (3*TICRATE/4) +#define ATTRACTIONATTACKTIME_MIN (TICRATE/2) #ifdef __cplusplus } // extern "C" diff --git a/src/k_kart.c b/src/k_kart.c index b43ecea26..a73fa3a07 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -457,6 +457,7 @@ void K_RegisterKartStuff(void) CV_RegisterVar(&cv_kartflame_fastfuel); CV_RegisterVar(&cv_kartflame_offroadburn); CV_RegisterVar(&cv_kartattraction_assistpower); + CV_RegisterVar(&cv_kartattraction_aoedmg); CV_RegisterVar(&cv_kartaltshrink_arrowbullet); CV_RegisterVar(&cv_kartaltshrink_arrowbulletthres); diff --git a/src/k_kart.h b/src/k_kart.h index 841dd0905..d10be0e76 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -139,6 +139,7 @@ extern vector3_t clusterpoint, clusterdtf; #define FLAMEHANDLEBOOST CV_Get(&cv_kartstacking_flame_handleboost) #define FLAMESTACKABLE CV_Get(&cv_kartstacking_flame_stackable) +#define ATTRACTIONAOEDAMAGE CV_Get(&cv_kartattraction_aoedmg) #define ATTRACTIONSPEEDHIMIN CV_Get(&cv_kartstacking_attraction_speedboost_himin) #define ATTRACTIONSPEEDHIMAX CV_Get(&cv_kartstacking_attraction_speedboost_himax) #define ATTRACTIONSPEEDNORMMIN CV_Get(&cv_kartstacking_attraction_speedboost_normmin)