Skip to content

Commit d001767

Browse files
committed
Overhaul bubble berry
You no longer get squished by moving blocks while in the return bubble. Return berries can also now be seeded.
1 parent 776ec4b commit d001767

File tree

3 files changed

+67
-8
lines changed

3 files changed

+67
-8
lines changed

Ahorn/entities/bubbleReturnBerry.jl

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,25 @@
22

33
using ..Ahorn, Maple
44

5-
@mapdef Entity "SpringCollab2020/returnBerry" ReturnBerry(x::Integer, y::Integer, order::Integer=-1, checkpointID::Integer=-1, winged::Bool=false)
5+
@mapdef Entity "SpringCollab2020/returnBerry" ReturnBerry(x::Integer, y::Integer, order::Integer=-1, checkpointID::Integer=-1, winged::Bool=false, nodes::Array{Tuple{Integer, Integer}, 1}=Tuple{Integer, Integer}[])
66

77
const placements = Ahorn.PlacementDict(
8-
"Strawberry With Return (Spring Collab 2020)" => Ahorn.EntityPlacement(
8+
"Return Strawberry (Spring Collab 2020)" => Ahorn.EntityPlacement(
99
ReturnBerry
10+
),
11+
"Winged Return Strawberry (Spring Collab 2020)" => Ahorn.EntityPlacement(
12+
ReturnBerry,
13+
"point",
14+
Dict{String,Any}(
15+
"winged" => true
16+
)
1017
)
1118
)
1219

20+
seedSprite = "collectables/strawberry/seed00"
21+
22+
Ahorn.nodeLimits(entity::ReturnBerry) = 0, -1
23+
1324
function getSpriteName(entity::ReturnBerry)
1425
winged = get(entity.data, "winged", false)
1526

@@ -22,12 +33,37 @@ end
2233

2334
function Ahorn.selection(entity::ReturnBerry)
2435
x, y = Ahorn.position(entity)
36+
nodes = get(entity.data, "nodes", ())
37+
38+
res = Ahorn.Rectangle[Ahorn.getSpriteRectangle(getSpriteName(entity), x, y)]
39+
40+
for node in nodes
41+
nx, ny = node
42+
push!(res, Ahorn.getSpriteRectangle(seedSprite, nx, ny))
43+
end
44+
45+
return res
46+
end
47+
48+
function Ahorn.renderSelectedAbs(ctx::Ahorn.Cairo.CairoContext, entity::ReturnBerry)
49+
x, y = Ahorn.position(entity)
2550

26-
return Ahorn.getSpriteRectangle(getSpriteName(entity), x, y)
51+
for node in get(entity.data, "nodes", ())
52+
nx, ny = node
53+
54+
Ahorn.drawLines(ctx, Tuple{Number, Number}[(x, y), (nx, ny)], Ahorn.colors.selection_selected_fc)
55+
end
2756
end
2857

2958
function Ahorn.renderAbs(ctx::Ahorn.Cairo.CairoContext, entity::ReturnBerry, room::Maple.Room)
3059
x, y = Ahorn.position(entity)
60+
nodes = get(entity.data, "nodes", ())
61+
62+
for node in nodes
63+
nx, ny = node
64+
65+
Ahorn.drawSprite(ctx, seedSprite, nx, ny)
66+
end
3167

3268
Ahorn.drawSprite(ctx, getSpriteName(entity), x, y)
3369
end

Entities/BubbleReturnBerry.cs

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,43 @@
1-
using Celeste;
2-
using Celeste.Mod.Entities;
1+
using Celeste.Mod.Entities;
32
using Microsoft.Xna.Framework;
43
using Monocle;
54
using System;
65
using System.Collections;
6+
using MonoMod.Cil;
7+
using Mono.Cecil.Cil;
78

89
namespace Celeste.Mod.SpringCollab2020.Entities {
9-
[CustomEntity("SpringCollab2020/returnBerry")]
1010
[RegisterStrawberry(true, false)]
11+
[CustomEntity("SpringCollab2020/returnBerry")]
1112
class BubbleReturnBerry : Strawberry {
1213
public BubbleReturnBerry(EntityData data, Vector2 position, EntityID gid) : base(data, position, gid) {
1314
Add(collider = new PlayerCollider(new Action<Player>(OnPlayer)));
1415
}
1516

17+
public static void Load() {
18+
On.Celeste.Player.OnSquish += ModOnSquish;
19+
}
20+
21+
public static void Unload() {
22+
On.Celeste.Player.OnSquish -= ModOnSquish;
23+
}
24+
1625
public new void OnPlayer(Player player) {
17-
Add(new Coroutine(Return(player), true));
26+
base.OnPlayer(player);
27+
28+
if (!WaitingOnSeeds) {
29+
Add(new Coroutine(Return(player), true));
30+
Collidable = false;
31+
}
32+
}
33+
34+
private static void ModOnSquish(On.Celeste.Player.orig_OnSquish orig, Player player, CollisionData data) {
35+
// State 21 is the state where the player is located within the Cassette Bubble.
36+
// They shouldn't be squished by moving blocks inside of it, so we prevent that.
37+
if (player.StateMachine.State == 21)
38+
return;
1839

19-
Collidable = false;
40+
orig(player, data);
2041
}
2142

2243
private IEnumerator Return(Player player) {

SpringCollab2020Module.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public override void Load() {
1818
RemoveLightSourcesTrigger.Load();
1919
SafeRespawnCrumble.Load();
2020
UpsideDownJumpThru.Load();
21+
BubbleReturnBerry.Load();
2122
}
2223

2324
public override void LoadContent(bool firstLoad) {
@@ -34,6 +35,7 @@ public override void Unload() {
3435
SafeRespawnCrumble.Unload();
3536
GlassBerry.Unload();
3637
UpsideDownJumpThru.Unload();
38+
BubbleReturnBerry.Unload();
3739
}
3840
}
3941
}

0 commit comments

Comments
 (0)