Skip to content

Commit 896e34b

Browse files
authored
Merge pull request #119 from EverestAPI/lightning-trigger
Add lightning strike trigger
2 parents 2683132 + 07fe59f commit 896e34b

File tree

3 files changed

+81
-0
lines changed

3 files changed

+81
-0
lines changed

Ahorn/lang/en_gb.lang

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ placements.entities.SpringCollab2020/LightningDashSwitch.tooltips.persistent=Whe
2020
# Cave Wall
2121
placements.entities.SpringCollab2020/caveWall.tooltips.tiletype=Changes the visual appearance of the wall.
2222

23+
# Lightning Strike Trigger
24+
placements.triggers.SpringCollab2020/LightningStrikeTrigger.tooltips.playerOffset=The X offset of the lightning relative to the player's position.
25+
placements.triggers.SpringCollab2020/LightningStrikeTrigger.tooltips.seed=The seed for the randomizer which generates the lightning strike.
26+
placements.triggers.SpringCollab2020/LightningStrikeTrigger.tooltips.delay=The delay, in seconds, between the player entering the trigger and the appearance of the lightning strike.
27+
placements.triggers.SpringCollab2020/LightningStrikeTrigger.tooltips.rain=Upon lightning strike, rain will begin falling in the level.
28+
placements.triggers.SpringCollab2020/LightningStrikeTrigger.tooltips.flash=Upon lightning strike, the screen will flash white.
29+
2330
# Variable Crumble Blocks
2431
placements.entities.SpringCollab2020/variableCrumbleBlock.tooltips.texture=The texture of the blocks that are crumbling.2
2532
placements.entities.SpringCollab2020/variableCrumbleBlock.tooltips.timer=How long the blocks will shake for before falling.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
module SpringCollab2020LightningStrikeTrigger
2+
3+
using ..Ahorn, Maple
4+
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)
6+
7+
const placements = Ahorn.PlacementDict(
8+
"Lightning Strike (Spring Collab 2020)" => Ahorn.EntityPlacement(
9+
LightningStrikeTrigger,
10+
"rectangle",
11+
),
12+
)
13+
14+
end

Triggers/LightningStrikeTrigger.cs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
using Celeste;
2+
using Celeste.Mod.Entities;
3+
using Microsoft.Xna.Framework;
4+
using System.Linq;
5+
using Monocle;
6+
using System.Collections;
7+
8+
namespace Celeste.Mod.SpringCollab2020.Triggers {
9+
[CustomEntity("SpringCollab2020/LightningStrikeTrigger")]
10+
class LightningStrikeTrigger : Trigger {
11+
public bool Activated { get; private set; }
12+
13+
private float PlayerOffset;
14+
15+
private int Seed;
16+
17+
private float Delay;
18+
19+
private bool Raining;
20+
21+
private bool Flash;
22+
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)) { }
24+
25+
public LightningStrikeTrigger(EntityData data, Vector2 offset, float playerOffset, int seed, float delay, bool raining, bool flash) : base (data, offset) {
26+
PlayerOffset = playerOffset;
27+
Seed = seed;
28+
Delay = delay;
29+
Raining = raining;
30+
Flash = flash;
31+
}
32+
33+
public override void OnEnter(Player player) {
34+
base.OnEnter(player);
35+
36+
Level level = player.SceneAs<Level>();
37+
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));
42+
43+
if (Raining && !level.Background.Backdrops.OfType<RainFG>().Any()) {
44+
level.Background.Backdrops.Add(new RainFG());
45+
}
46+
}
47+
}
48+
49+
private IEnumerator ThunderEffect(Level level) {
50+
yield return Delay;
51+
Audio.Play("event:/new_content/game/10_farewell/lightning_strike");
52+
level.Shake(0.3f);
53+
54+
if (Flash)
55+
level.Flash(Color.White, false);
56+
57+
yield break;
58+
}
59+
}
60+
}

0 commit comments

Comments
 (0)