Skip to content

Commit

Permalink
Merge pull request #44 from swoolcock/swoolcock/purple-booster-legacy-gh
Browse files Browse the repository at this point in the history
Add legacy gravity helper checkbox to manually enable jank
  • Loading branch information
bigkahuna443 authored Jan 23, 2025
2 parents ebbea6f + 6f85998 commit 84ea8ed
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 14 deletions.
9 changes: 8 additions & 1 deletion Code/Entities/LavenderBooster.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,17 @@ public class LavenderBooster : Booster

private readonly DynData<Booster> boosterData;
private readonly bool QoL;
private readonly bool LegacyGravityHelper;

public LavenderBooster(EntityData data, Vector2 offset)
: base(data.Position + offset, red: false)
{
this.boosterData = new DynData<Booster>(this);
QoL = data.Bool("QoL", false);

// Unlike most legacy settings, this defaults to false so that old maps used the "fixed" functionality.
// If an older map specifically wants the jank interaction, they will need to replace the entities and rerelease.
LegacyGravityHelper = data.Bool("legacyGravityHelper", false);

Sprite oldSprite = this.boosterData.Get<Sprite>("sprite");
Remove(oldSprite);
Expand Down Expand Up @@ -61,7 +67,8 @@ private static void Booster_PlayerReleased(On.Celeste.Booster.orig_PlayerRelease
{
Audio.Play(SFX.game_05_redbooster_end, player.Center);
PurpleBooster.LaunchPlayerParticles(player, player.DashDir, P_BurstExplodeLavender);
VortexHelperModule.SessionProperties.BoosterQoL = false;
VortexHelperModule.SessionProperties.BoosterQoL = l.QoL;
VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper = l.LegacyGravityHelper;
PurpleBooster.PurpleBoosterExplodeLaunch(player, self.Center - player.DashDir, null, -1f);
}
}
Expand Down
44 changes: 32 additions & 12 deletions Code/Entities/PurpleBooster.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,15 @@ public bool BoostingPlayer

private readonly SoundSource loopingSfx;
public readonly bool QoL;
public readonly bool LegacyGravityHelper;

public PurpleBooster(EntityData data, Vector2 offset)
: this(data.Position + offset, data.Attr("spriteOverride", null)) {
QoL = data.Bool("QoL");

// Unlike most legacy settings, this defaults to false so that old maps used the "fixed" functionality.
// If an older map specifically wants the jank interaction, they will need to replace the entities and rerelease.
LegacyGravityHelper = data.Bool("legacyGravityHelper", false);
}

public PurpleBooster(Vector2 position, string spriteOverride)
Expand Down Expand Up @@ -149,6 +155,7 @@ public static void Boost(Player player, PurpleBooster booster)
player.Speed = Vector2.Zero;
player.boostTarget = booster.Center;
VortexHelperModule.SessionProperties.BoosterQoL = booster.QoL;
VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper = booster.LegacyGravityHelper;
booster.StartedBoosting = true;
}

Expand Down Expand Up @@ -254,7 +261,7 @@ public override void Update()
{
base.Update();

var inverted = GravityHelperInterop.IsPlayerInverted();
var inverted = !this.LegacyGravityHelper && GravityHelperInterop.IsPlayerInverted();

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

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

GravityHelperInterop.BeginOverride();
var legacyGravityHelper = VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper;
if (!legacyGravityHelper) GravityHelperInterop.BeginOverride();
player.MoveToX(vector.X, null);
player.MoveToY(vector.Y, null);
GravityHelperInterop.EndOverride();
if (!legacyGravityHelper) GravityHelperInterop.EndOverride();

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

public static void PurpleBoostEnd(Player player)
{
GravityHelperInterop.BeginOverride();
var legacyGravityHelper = VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper;
if (!legacyGravityHelper) GravityHelperInterop.BeginOverride();
Vector2 vector = (player.boostTarget - player.Collider.Center).Floor();
player.MoveToX(vector.X, null);
player.MoveToY(vector.Y, null);
GravityHelperInterop.EndOverride();
if (!legacyGravityHelper) GravityHelperInterop.EndOverride();
}

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

foreach (PurpleBooster b in player.Scene.Tracker.GetEntities<PurpleBooster>())
Expand Down Expand Up @@ -478,14 +489,17 @@ public static IEnumerator PurpleDashingCoroutine(Player player)
Vector2 origin = player.boostTarget;
if(VortexHelperModule.SessionProperties.BoosterQoL) {
yield return null;
player.DashDir = GravityHelperInterop.InvertIfRequired(player.lastAim);
player.DashDir = player.lastAim;
if (!VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper)
player.DashDir = GravityHelperInterop.InvertIfRequired(player.DashDir);
}

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

if(VortexHelperModule.SessionProperties.BoosterQoL)
Expand All @@ -494,7 +508,9 @@ public static IEnumerator PurpleDashingCoroutine(Player player)
{
// frame 0: mimics speed at launch exit exactly, Input.MoveX.Value == -Math.Sign(player.DashDir) ? 300 : 250
earlyExitBoost = 250f * -player.DashDir;
Vector2 aim = GravityHelperInterop.InvertIfRequired(Input.GetAimVector(player.Facing));
Vector2 aim = Input.GetAimVector(player.Facing);
if (!VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper)
aim = GravityHelperInterop.InvertIfRequired(aim);
aim = aim.EightWayNormal().Sign();
if (aim.X == Math.Sign(earlyExitBoost.X)) earlyExitBoost.X *= 1.2f;
if (aim.Y == Math.Sign(earlyExitBoost.Y)) earlyExitBoost.Y *= 1.2f;
Expand All @@ -516,9 +532,11 @@ public static IEnumerator PurpleDashingCoroutine(Player player)
player.StateMachine.State = Player.StNormal;
yield break;
}
GravityHelperInterop.BeginOverride();

var legacyGravityHelper = VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper;
if (!legacyGravityHelper) GravityHelperInterop.BeginOverride();
player.MoveToX(vec.X); player.MoveToY(vec.Y);
GravityHelperInterop.EndOverride();
if (!legacyGravityHelper) GravityHelperInterop.EndOverride();
yield return null;
}

Expand All @@ -529,10 +547,12 @@ public static IEnumerator PurpleDashingCoroutine(Player player)
public static void PurpleDashingEnd(Player player)
{
VortexHelperModule.SessionProperties.BoosterQoL = false;
VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper = false;
}
public static void PurpleBoosterExplodeLaunch(Player player, Vector2 from, Vector2? origin, float factor = 1f)
{
bool QoL = VortexHelperModule.SessionProperties.BoosterQoL;
bool legacyGravityHelper = VortexHelperModule.SessionProperties.BoosterLegacyGravityHelper;
Input.Rumble(RumbleStrength.Strong, RumbleLength.Medium);
Celeste.Freeze(QoL ? 0.05f : 0.1f);
player.launchApproachX = null;
Expand All @@ -544,7 +564,7 @@ public static void PurpleBoosterExplodeLaunch(Player player, Vector2 from, Vecto
level.Shake(0.15f);

Vector2 vector = (player.Center - from).SafeNormalize(-Vector2.UnitY);
vector = GravityHelperInterop.InvertIfRequired(vector);
if (!legacyGravityHelper) vector = GravityHelperInterop.InvertIfRequired(vector);

if (Math.Abs(vector.X) < 1f && Math.Abs(vector.Y) < 1f)
vector *= 1.1f;
Expand Down
1 change: 1 addition & 0 deletions Code/VortexHelperSession.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ public enum SwitchBlockColor
public SwitchBlockColor SessionSwitchBlockColor { get; set; } = SwitchBlockColor.Blue;

internal bool BoosterQoL { get; set; } = false;
internal bool BoosterLegacyGravityHelper { get; set; } = false;
}
9 changes: 8 additions & 1 deletion Loenn/entities/purple_booster.lua
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,25 @@ purpleBooster.placements = {
data = {
lavender = false,
QoL = true,
legacyGravityHelper = false,
spriteOverride = ""
}
},
{
name = "lavender",
data = {
lavender = true,
QoL = true
QoL = true,
legacyGravityHelper = false
}
}
}

purpleBooster.fieldOrder = {
"x", "y",
"lavender", "QoL", "spriteOverride", "legacyGravityHelper"
}

function purpleBooster.texture(room, entity)
return entity.lavender and "objects/VortexHelper/lavenderBooster/boosterLavender00"
or "objects/VortexHelper/slingBooster/slingBooster00"
Expand Down
1 change: 1 addition & 0 deletions Loenn/lang/en_gb.lang
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ entities.VortexHelper/PurpleBooster.placements.name.lavender=Booster (Lavender)
entities.VortexHelper/PurpleBooster.attributes.description.lavender=Whether the booster should instead be lavender in color, and launch the player forward instead of arcing back.
entities.VortexHelper/PurpleBooster.attributes.name.QoL=Version 2
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.
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.

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

0 comments on commit 84ea8ed

Please sign in to comment.