about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--Archipelago/client.gd8
-rw-r--r--Archipelago/effects.gd89
-rw-r--r--Archipelago/load.gd6
3 files changed, 102 insertions, 1 deletions
diff --git a/Archipelago/client.gd b/Archipelago/client.gd index dba8227..97e2ca4 100644 --- a/Archipelago/client.gd +++ b/Archipelago/client.gd
@@ -523,7 +523,7 @@ func processItem(item, index, from):
523 _has_colors.append(lcol) 523 _has_colors.append(lcol)
524 emit_signal("evaluate_solvability") 524 emit_signal("evaluate_solvability")
525 525
526 # Show a message about the item if it's new. 526 # Show a message about the item if it's new. Also apply effects here.
527 if index != null and index > _last_new_item: 527 if index != null and index > _last_new_item:
528 _last_new_item = index 528 _last_new_item = index
529 saveLocaldata() 529 saveLocaldata()
@@ -545,6 +545,12 @@ func processItem(item, index, from):
545 else: 545 else:
546 messages_node.showMessage("Received %s from %s" % [item_name, player_name]) 546 messages_node.showMessage("Received %s from %s" % [item_name, player_name])
547 547
548 var effects_node = get_tree().get_root().get_node("Spatial/AP_Effects")
549 if item_name == "Slowness Trap":
550 effects_node.trigger_slowness_trap()
551 if item_name == "Iceland Trap":
552 effects_node.trigger_iceland_trap()
553
548 554
549func doorIsVanilla(door): 555func doorIsVanilla(door):
550 return !_mentioned_doors.has(door) 556 return !_mentioned_doors.has(door)
diff --git a/Archipelago/effects.gd b/Archipelago/effects.gd new file mode 100644 index 0000000..7d7e0fe --- /dev/null +++ b/Archipelago/effects.gd
@@ -0,0 +1,89 @@
1extends Node
2
3var effect_running = false
4var slowness_remaining = 0
5var iceland_remaining = 0
6
7var orig_env
8var orig_walk
9var orig_run
10
11
12func _ready():
13 orig_env = get_tree().get_root().get_node("Spatial/player/pivot/camera").environment
14 orig_walk = get_tree().get_root().get_node("Spatial/player").walk_speed
15 orig_run = get_tree().get_root().get_node("Spatial/player").run_speed
16
17 var label = Label.new()
18 label.set_name("label")
19 label.margin_right = 1920.0 - 20.0
20 label.margin_top = 20.0
21 label.align = Label.ALIGN_RIGHT
22 label.valign = Label.VALIGN_TOP
23
24 var dynamic_font = DynamicFont.new()
25 dynamic_font.font_data = load("res://fonts/Lingo.ttf")
26 dynamic_font.size = 36
27 dynamic_font.outline_color = Color(0, 0, 0, 1)
28 dynamic_font.outline_size = 2
29 label.add_font_override("font", dynamic_font)
30
31 add_child(label)
32
33
34func trigger_slowness_trap():
35 if slowness_remaining == 0:
36 var player = get_tree().get_root().get_node("Spatial/player")
37 player.walk_speed = orig_walk / 2.0
38 player.run_speed = orig_run / 2.0
39
40 slowness_remaining += 30
41
42 if not effect_running:
43 _process_effects()
44
45
46func trigger_iceland_trap():
47 if iceland_remaining == 0:
48 get_tree().get_root().get_node("Spatial/player/pivot/camera").set_environment(
49 load("res://environments/level_iceland.tres")
50 )
51
52 iceland_remaining += 30
53
54 if not effect_running:
55 _process_effects()
56
57
58func _process_effects():
59 effect_running = true
60
61 while slowness_remaining > 0 or iceland_remaining > 0:
62 var text = ""
63 if slowness_remaining > 0:
64 text += "Slowness: %d seconds" % slowness_remaining
65 if iceland_remaining > 0:
66 if not text.empty():
67 text += "\n"
68 text += "Iceland: %d seconds" % iceland_remaining
69 self.get_node("label").text = text
70
71 yield(get_tree().create_timer(1.0), "timeout")
72
73 if slowness_remaining > 0:
74 slowness_remaining -= 1
75
76 if slowness_remaining == 0:
77 var player = get_tree().get_root().get_node("Spatial/player")
78 player.walk_speed = orig_walk
79 player.run_speed = orig_run
80
81 if iceland_remaining > 0:
82 iceland_remaining -= 1
83
84 if iceland_remaining == 0:
85 get_tree().get_root().get_node("Spatial/player/pivot/camera").set_environment(
86 orig_env
87 )
88
89 effect_running = false
diff --git a/Archipelago/load.gd b/Archipelago/load.gd index f526411..80f7d06 100644 --- a/Archipelago/load.gd +++ b/Archipelago/load.gd
@@ -200,6 +200,12 @@ func _load():
200 messages.set_name("AP_Messages") 200 messages.set_name("AP_Messages")
201 self.add_child(messages) 201 self.add_child(messages)
202 202
203 # Create the effects node.
204 var effects_script = ResourceLoader.load("user://maps/Archipelago/effects.gd")
205 var effects = effects_script.new()
206 effects.set_name("AP_Effects")
207 self.add_child(effects)
208
203 # Hook up the scene to be able to handle connection failures. 209 # Hook up the scene to be able to handle connection failures.
204 apclient.connect("could_not_connect", self, "archipelago_disconnected") 210 apclient.connect("could_not_connect", self, "archipelago_disconnected")
205 211