Skip to content

Commit 60b7737

Browse files
authored
Merge pull request #179 from EverestAPI/lightning_enhancements
Lightning strike additions
2 parents 3c930a5 + 10e5d61 commit 60b7737

File tree

3 files changed

+49
-10
lines changed

3 files changed

+49
-10
lines changed

Ahorn/lang/en_gb.lang

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,13 @@ placements.entities.SpringCollab2020/caveWall.tooltips.disableTransitionFading=I
2525

2626
# Lightning Strike Trigger
2727
placements.triggers.SpringCollab2020/LightningStrikeTrigger.tooltips.playerOffset=The X offset of the lightning relative to the player's position.
28+
placements.triggers.SpringCollab2020/LightningStrikeTrigger.tooltips.verticalOffset=The Y offset of the lightning relative to the player's position.
29+
placements.triggers.SpringCollab2020/LightningStrikeTrigger.tooltips.strikeHeight=The height of the lightning strike. If set to 0, the height will be the screen's height.
2830
placements.triggers.SpringCollab2020/LightningStrikeTrigger.tooltips.seed=The seed for the randomizer which generates the lightning strike.
2931
placements.triggers.SpringCollab2020/LightningStrikeTrigger.tooltips.delay=The delay, in seconds, between the player entering the trigger and the appearance of the lightning strike.
3032
placements.triggers.SpringCollab2020/LightningStrikeTrigger.tooltips.rain=Upon lightning strike, rain will begin falling in the level.
3133
placements.triggers.SpringCollab2020/LightningStrikeTrigger.tooltips.flash=Upon lightning strike, the screen will flash white.
34+
placements.triggers.SpringCollab2020/LightningStrikeTrigger.tooltips.constant=If lightning should constantly strike while the player is inside the trigger.
3235

3336
# Variable Crumble Blocks
3437
placements.entities.SpringCollab2020/variableCrumbleBlock.tooltips.texture=The texture of the blocks that are crumbling.2

Ahorn/triggers/lightningStrikeTrigger.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
using ..Ahorn, Maple
44

5-
@mapdef Trigger "SpringCollab2020/LightningStrikeTrigger" LightningStrikeTrigger(x::Integer, y::Integer, width::Integer=Maple.defaultTriggerWidth, height::Integer=Maple.defaultTriggerHeight, playerOffset::Number=0.0, seed::Integer=0, delay::Number=0.0, rain::Bool=true, flash::Bool=true)
5+
@mapdef Trigger "SpringCollab2020/LightningStrikeTrigger" LightningStrikeTrigger(x::Integer, y::Integer, width::Integer=Maple.defaultTriggerWidth, height::Integer=Maple.defaultTriggerHeight, playerOffset::Number=0.0, verticalOffset::Number=0.0, strikeHeight::Number=0.0, seed::Integer=0, delay::Number=0.0, rain::Bool=true, flash::Bool=true, constant::Bool=false)
66

77
const placements = Ahorn.PlacementDict(
88
"Lightning Strike (Spring Collab 2020)" => Ahorn.EntityPlacement(

Triggers/LightningStrikeTrigger.cs

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Linq;
55
using Monocle;
66
using System.Collections;
7+
using System;
78

89
namespace Celeste.Mod.SpringCollab2020.Triggers {
910
[CustomEntity("SpringCollab2020/LightningStrikeTrigger")]
@@ -12,40 +13,75 @@ class LightningStrikeTrigger : Trigger {
1213

1314
private float PlayerOffset;
1415

16+
private float VerticalOffset;
17+
18+
private float StrikeHeight;
19+
1520
private int Seed;
1621

1722
private float Delay;
1823

1924
private bool Raining;
2025

2126
private bool Flash;
27+
28+
private bool Constant;
29+
30+
private int ConstantTimer = 10;
31+
32+
private Random rand;
2233

23-
public LightningStrikeTrigger(EntityData data, Vector2 offset) : this(data, offset, data.Float("playerOffset", 0f), data.Int("seed", 0), data.Float("delay", 0f), data.Bool("rain", true), data.Bool("flash", true)) { }
34+
public LightningStrikeTrigger(EntityData data, Vector2 offset) : this(data, offset, data.Float("playerOffset", 0f), data.Float("verticalOffset", 0), data.Float("strikeHeight", 0), data.Int("seed", 0), data.Float("delay", 0f), data.Bool("rain", true), data.Bool("flash", true), data.Bool("constant", false)) { }
2435

25-
public LightningStrikeTrigger(EntityData data, Vector2 offset, float playerOffset, int seed, float delay, bool raining, bool flash) : base (data, offset) {
36+
public LightningStrikeTrigger(EntityData data, Vector2 offset, float playerOffset, float verticalOffset, float height, int seed, float delay, bool raining, bool flash, bool constant) : base (data, offset) {
2637
PlayerOffset = playerOffset;
38+
VerticalOffset = verticalOffset;
39+
StrikeHeight = height;
2740
Seed = seed;
2841
Delay = delay;
2942
Raining = raining;
3043
Flash = flash;
44+
Constant = constant;
45+
46+
rand = new Random(seed);
3147
}
3248

3349
public override void OnEnter(Player player) {
3450
base.OnEnter(player);
51+
if (!Activated && !Constant) {
52+
Activated = true;
3553

36-
Level level = player.SceneAs<Level>();
54+
Strike(player);
55+
}
56+
}
3757

38-
if (!Activated) {
39-
Activated = true;
40-
level.Add(new LightningStrike(new Vector2(player.X + PlayerOffset, level.Bounds.Top), Seed, level.Bounds.Height, Delay));
41-
Add(new Coroutine(ThunderEffect(level), true));
58+
public override void OnStay(Player player) {
59+
base.OnStay(player);
60+
61+
if (Constant) {
62+
ConstantTimer -= 1;
4263

43-
if (Raining && !level.Background.Backdrops.OfType<RainFG>().Any()) {
44-
level.Background.Backdrops.Add(new RainFG());
64+
if (ConstantTimer <= 0) {
65+
Strike(player);
66+
ConstantTimer = rand.Next(40, 60);
4567
}
4668
}
4769
}
4870

71+
public void Strike(Player player) {
72+
Level level = player.SceneAs<Level>();
73+
if (StrikeHeight == 0)
74+
level.Add(new LightningStrike(new Vector2(player.X + PlayerOffset, level.Bounds.Top), Seed, level.Bounds.Height, Delay));
75+
else
76+
level.Add(new LightningStrike(new Vector2(player.X + PlayerOffset, player.Y + VerticalOffset), rand.Next(1, 100), StrikeHeight, Delay));
77+
78+
Add(new Coroutine(ThunderEffect(level), true));
79+
80+
if (Raining && !level.Background.Backdrops.OfType<RainFG>().Any()) {
81+
level.Background.Backdrops.Add(new RainFG());
82+
}
83+
}
84+
4985
private IEnumerator ThunderEffect(Level level) {
5086
yield return Delay;
5187
Audio.Play("event:/new_content/game/10_farewell/lightning_strike");

0 commit comments

Comments
 (0)