Skip to content

Commit 84ea8ed

Browse files
authored
Merge pull request #44 from swoolcock/swoolcock/purple-booster-legacy-gh
Add legacy gravity helper checkbox to manually enable jank
2 parents ebbea6f + 6f85998 commit 84ea8ed

5 files changed

Lines changed: 50 additions & 14 deletions

File tree

Code/Entities/LavenderBooster.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,17 @@ public class LavenderBooster : Booster
1717

1818
private readonly DynData<Booster> boosterData;
1919
private readonly bool QoL;
20+
private readonly bool LegacyGravityHelper;
21+
2022
public LavenderBooster(EntityData data, Vector2 offset)
2123
: base(data.Position + offset, red: false)
2224
{
2325
this.boosterData = new DynData<Booster>(this);
2426
QoL = data.Bool("QoL", false);
27+
28+
// Unlike most legacy settings, this defaults to false so that old maps used the "fixed" functionality.
29+
// If an older map specifically wants the jank interaction, they will need to replace the entities and rerelease.
30+
LegacyGravityHelper = data.Bool("legacyGravityHelper", false);
2531

2632
Sprite oldSprite = this.boosterData.Get<Sprite>("sprite");
2733
Remove(oldSprite);
@@ -61,7 +67,8 @@ private static void Booster_PlayerReleased(On.Celeste.Booster.orig_PlayerRelease
6167
{
6268
Audio.Play(SFX.game_05_redbooster_end, player.Center);
6369
PurpleBooster.LaunchPlayerParticles(player, player.DashDir, P_BurstExplodeLavender);
64-
VortexHelperModule.SessionProperties.BoosterQoL = false;
70+
VortexHelperModule.SessionProperties.BoosterQoL = l.QoL;
71+
VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper = l.LegacyGravityHelper;
6572
PurpleBooster.PurpleBoosterExplodeLaunch(player, self.Center - player.DashDir, null, -1f);
6673
}
6774
}

Code/Entities/PurpleBooster.cs

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,15 @@ public bool BoostingPlayer
4848

4949
private readonly SoundSource loopingSfx;
5050
public readonly bool QoL;
51+
public readonly bool LegacyGravityHelper;
52+
5153
public PurpleBooster(EntityData data, Vector2 offset)
5254
: this(data.Position + offset, data.Attr("spriteOverride", null)) {
5355
QoL = data.Bool("QoL");
56+
57+
// Unlike most legacy settings, this defaults to false so that old maps used the "fixed" functionality.
58+
// If an older map specifically wants the jank interaction, they will need to replace the entities and rerelease.
59+
LegacyGravityHelper = data.Bool("legacyGravityHelper", false);
5460
}
5561

5662
public PurpleBooster(Vector2 position, string spriteOverride)
@@ -149,6 +155,7 @@ public static void Boost(Player player, PurpleBooster booster)
149155
player.Speed = Vector2.Zero;
150156
player.boostTarget = booster.Center;
151157
VortexHelperModule.SessionProperties.BoosterQoL = booster.QoL;
158+
VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper = booster.LegacyGravityHelper;
152159
booster.StartedBoosting = true;
153160
}
154161

@@ -254,7 +261,7 @@ public override void Update()
254261
{
255262
base.Update();
256263

257-
var inverted = GravityHelperInterop.IsPlayerInverted();
264+
var inverted = !this.LegacyGravityHelper && GravityHelperInterop.IsPlayerInverted();
258265

259266
this.actualLinkPercent = Calc.Approach(this.actualLinkPercent, this.linkPercent, 5f * Engine.DeltaTime);
260267

@@ -382,10 +389,11 @@ public static int PurpleBoostUpdate(Player player)
382389
Vector2 value = Input.Aim.Value * 3f;
383390
Vector2 vector = Calc.Approach(player.ExactPosition, boostTarget - player.Collider.Center + value, 80f * Engine.DeltaTime);
384391

385-
GravityHelperInterop.BeginOverride();
392+
var legacyGravityHelper = VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper;
393+
if (!legacyGravityHelper) GravityHelperInterop.BeginOverride();
386394
player.MoveToX(vector.X, null);
387395
player.MoveToY(vector.Y, null);
388-
GravityHelperInterop.EndOverride();
396+
if (!legacyGravityHelper) GravityHelperInterop.EndOverride();
389397

390398
if (Vector2.DistanceSquared(player.Center, boostTarget) >= 275f)
391399
{
@@ -410,11 +418,12 @@ public static int PurpleBoostUpdate(Player player)
410418

411419
public static void PurpleBoostEnd(Player player)
412420
{
413-
GravityHelperInterop.BeginOverride();
421+
var legacyGravityHelper = VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper;
422+
if (!legacyGravityHelper) GravityHelperInterop.BeginOverride();
414423
Vector2 vector = (player.boostTarget - player.Collider.Center).Floor();
415424
player.MoveToX(vector.X, null);
416425
player.MoveToY(vector.Y, null);
417-
GravityHelperInterop.EndOverride();
426+
if (!legacyGravityHelper) GravityHelperInterop.EndOverride();
418427
}
419428

420429
public static IEnumerator PurpleBoostCoroutine(Player player)
@@ -428,7 +437,9 @@ public static void PurpleDashingBegin(Player player)
428437
{
429438
Celeste.Freeze(0.05f); // this freeze makes fastbubbling much more lenient
430439
DynamicData playerData = DynamicData.For(player);
431-
player.DashDir = GravityHelperInterop.InvertIfRequired(Input.GetAimVector(player.Facing));
440+
player.DashDir = Input.GetAimVector(player.Facing);
441+
if (!VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper)
442+
player.DashDir = GravityHelperInterop.InvertIfRequired(player.DashDir);
432443
playerData.Set(POSSIBLE_EARLY_DASHSPEED, Vector2.Zero);
433444

434445
foreach (PurpleBooster b in player.Scene.Tracker.GetEntities<PurpleBooster>())
@@ -478,14 +489,17 @@ public static IEnumerator PurpleDashingCoroutine(Player player)
478489
Vector2 origin = player.boostTarget;
479490
if(VortexHelperModule.SessionProperties.BoosterQoL) {
480491
yield return null;
481-
player.DashDir = GravityHelperInterop.InvertIfRequired(player.lastAim);
492+
player.DashDir = player.lastAim;
493+
if (!VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper)
494+
player.DashDir = GravityHelperInterop.InvertIfRequired(player.DashDir);
482495
}
483496

484497
Vector2 earlyExitBoost = Vector2.Zero;
485498
while (t < 1f)
486499
{
487500
t = Calc.Approach(t, 1.0f, Engine.DeltaTime * 1.5f);
488-
float offset = GravityHelperInterop.IsPlayerInverted() ? -6f : 6f;
501+
var inverted = !VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper && GravityHelperInterop.IsPlayerInverted();
502+
float offset = inverted ? -6f : 6f;
489503
Vector2 vec = origin + Vector2.UnitY * offset + player.DashDir * 60f * (float) Math.Sin(t * Math.PI);
490504

491505
if(VortexHelperModule.SessionProperties.BoosterQoL)
@@ -494,7 +508,9 @@ public static IEnumerator PurpleDashingCoroutine(Player player)
494508
{
495509
// frame 0: mimics speed at launch exit exactly, Input.MoveX.Value == -Math.Sign(player.DashDir) ? 300 : 250
496510
earlyExitBoost = 250f * -player.DashDir;
497-
Vector2 aim = GravityHelperInterop.InvertIfRequired(Input.GetAimVector(player.Facing));
511+
Vector2 aim = Input.GetAimVector(player.Facing);
512+
if (!VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper)
513+
aim = GravityHelperInterop.InvertIfRequired(aim);
498514
aim = aim.EightWayNormal().Sign();
499515
if (aim.X == Math.Sign(earlyExitBoost.X)) earlyExitBoost.X *= 1.2f;
500516
if (aim.Y == Math.Sign(earlyExitBoost.Y)) earlyExitBoost.Y *= 1.2f;
@@ -516,9 +532,11 @@ public static IEnumerator PurpleDashingCoroutine(Player player)
516532
player.StateMachine.State = Player.StNormal;
517533
yield break;
518534
}
519-
GravityHelperInterop.BeginOverride();
535+
536+
var legacyGravityHelper = VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper;
537+
if (!legacyGravityHelper) GravityHelperInterop.BeginOverride();
520538
player.MoveToX(vec.X); player.MoveToY(vec.Y);
521-
GravityHelperInterop.EndOverride();
539+
if (!legacyGravityHelper) GravityHelperInterop.EndOverride();
522540
yield return null;
523541
}
524542

@@ -529,10 +547,12 @@ public static IEnumerator PurpleDashingCoroutine(Player player)
529547
public static void PurpleDashingEnd(Player player)
530548
{
531549
VortexHelperModule.SessionProperties.BoosterQoL = false;
550+
VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper = false;
532551
}
533552
public static void PurpleBoosterExplodeLaunch(Player player, Vector2 from, Vector2? origin, float factor = 1f)
534553
{
535554
bool QoL = VortexHelperModule.SessionProperties.BoosterQoL;
555+
bool legacyGravityHelper = VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper;
536556
Input.Rumble(RumbleStrength.Strong, RumbleLength.Medium);
537557
Celeste.Freeze(QoL ? 0.05f : 0.1f);
538558
player.launchApproachX = null;
@@ -544,7 +564,7 @@ public static void PurpleBoosterExplodeLaunch(Player player, Vector2 from, Vecto
544564
level.Shake(0.15f);
545565

546566
Vector2 vector = (player.Center - from).SafeNormalize(-Vector2.UnitY);
547-
vector = GravityHelperInterop.InvertIfRequired(vector);
567+
if (!legacyGravityHelper) vector = GravityHelperInterop.InvertIfRequired(vector);
548568

549569
if (Math.Abs(vector.X) < 1f && Math.Abs(vector.Y) < 1f)
550570
vector *= 1.1f;

Code/VortexHelperSession.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ public enum SwitchBlockColor
1212
public SwitchBlockColor SessionSwitchBlockColor { get; set; } = SwitchBlockColor.Blue;
1313

1414
internal bool BoosterQoL { get; set; } = false;
15+
internal bool BoosterLegacyGravityHelper { get; set; } = false;
1516
}

Loenn/entities/purple_booster.lua

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,25 @@ purpleBooster.placements = {
1111
data = {
1212
lavender = false,
1313
QoL = true,
14+
legacyGravityHelper = false,
1415
spriteOverride = ""
1516
}
1617
},
1718
{
1819
name = "lavender",
1920
data = {
2021
lavender = true,
21-
QoL = true
22+
QoL = true,
23+
legacyGravityHelper = false
2224
}
2325
}
2426
}
2527

28+
purpleBooster.fieldOrder = {
29+
"x", "y",
30+
"lavender", "QoL", "spriteOverride", "legacyGravityHelper"
31+
}
32+
2633
function purpleBooster.texture(room, entity)
2734
return entity.lavender and "objects/VortexHelper/lavenderBooster/boosterLavender00"
2835
or "objects/VortexHelper/slingBooster/slingBooster00"

Loenn/lang/en_gb.lang

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ entities.VortexHelper/PurpleBooster.placements.name.lavender=Booster (Lavender)
7777
entities.VortexHelper/PurpleBooster.attributes.description.lavender=Whether the booster should instead be lavender in color, and launch the player forward instead of arcing back.
7878
entities.VortexHelper/PurpleBooster.attributes.name.QoL=Version 2
7979
entities.VortexHelper/PurpleBooster.attributes.description.QoL=Enables Wallbouncing during the windup animation.\nFixes speedboost not applying when dashing early from booster.\nReduces Freeze Timer upon launch exit and ensures a shorter dashCooldownTimer.
80+
entities.VortexHelper/PurpleBooster.attributes.description.legacyGravityHelper=Disables explicit support for Gravity Helper and reverts to the janky interactions while upside down.\nDon't enable this, ever. Really. PLEASE DON'T.
8081

8182
# Switch Block
8283
entities.VortexHelper/SwitchBlock.placements.name.switch_block_0=Switch Block (0 - Blue)

0 commit comments

Comments
 (0)