about summary refs log tree commit diff stats
path: root/Archipelago/effects.gd
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2024-01-23 15:16:37 -0500
committerStar Rauchenberger <fefferburbia@gmail.com>2024-01-23 15:16:37 -0500
commitf696286fdab96ccfc2bb4bddd8cc0ceda87309db (patch)
tree2fa224845289e6eb44e2643c555e8153aee16c81 /Archipelago/effects.gd
parentf407444ceab9284f54597830160267f250c3c4c6 (diff)
downloadlingo-archipelago-f696286fdab96ccfc2bb4bddd8cc0ceda87309db.tar.gz
lingo-archipelago-f696286fdab96ccfc2bb4bddd8cc0ceda87309db.tar.bz2
lingo-archipelago-f696286fdab96ccfc2bb4bddd8cc0ceda87309db.zip
Effects text is more prompt now
Slowness and Iceland aren't forced to tick at the same time anymore. Puzzle skip popups show up instantly and disappear instantly. Puzzle skip popups do not show up for puzzles hidden behind walls (although you can still press p to skip).
Diffstat (limited to 'Archipelago/effects.gd')
-rw-r--r--Archipelago/effects.gd112
1 files changed, 70 insertions, 42 deletions
diff --git a/Archipelago/effects.gd b/Archipelago/effects.gd index ae134bc..e830fbc 100644 --- a/Archipelago/effects.gd +++ b/Archipelago/effects.gd
@@ -9,11 +9,14 @@ var queued_iceland = 0
9var skip_available = false 9var skip_available = false
10var puzzle_focused = false 10var puzzle_focused = false
11var solve_mode = false 11var solve_mode = false
12var not_behind_wall = false
12var puzzle_to_skip = "" 13var puzzle_to_skip = ""
14var text_dirty = true
13 15
14var orig_env 16var orig_env
15var orig_walk 17var orig_walk
16var orig_run 18var orig_run
19var wallcast
17 20
18 21
19func _ready(): 22func _ready():
@@ -21,6 +24,8 @@ func _ready():
21 orig_walk = get_tree().get_root().get_node("Spatial/player").walk_speed 24 orig_walk = get_tree().get_root().get_node("Spatial/player").walk_speed
22 orig_run = get_tree().get_root().get_node("Spatial/player").run_speed 25 orig_run = get_tree().get_root().get_node("Spatial/player").run_speed
23 26
27 wallcast = get_tree().get_root().get_node("Spatial/player/pivot/camera/wallcast")
28
24 var label = Label.new() 29 var label = Label.new()
25 label.set_name("label") 30 label.set_name("label")
26 label.margin_right = 1920.0 - 20.0 31 label.margin_right = 1920.0 - 20.0
@@ -37,6 +42,18 @@ func _ready():
37 42
38 add_child(label) 43 add_child(label)
39 44
45 var slowness_timer = Timer.new()
46 slowness_timer.name = "SlownessTimer"
47 slowness_timer.wait_time = 1.0
48 add_child(slowness_timer)
49 slowness_timer.connect("timeout", self, "_tick_slowness")
50
51 var iceland_timer = Timer.new()
52 iceland_timer.name = "IcelandTimer"
53 iceland_timer.wait_time = 1.0
54 add_child(iceland_timer)
55 iceland_timer.connect("timeout", self, "_tick_iceland")
56
40 57
41func activate(): 58func activate():
42 activated = true 59 activated = true
@@ -53,10 +70,10 @@ func trigger_slowness_trap():
53 player.walk_speed = orig_walk / 2.0 70 player.walk_speed = orig_walk / 2.0
54 player.run_speed = orig_run / 2.0 71 player.run_speed = orig_run / 2.0
55 72
56 slowness_remaining += 30 73 $SlownessTimer.start()
57 74
58 if not effect_running: 75 slowness_remaining += 30
59 _process_effects() 76 text_dirty = true
60 77
61 78
62func trigger_iceland_trap(): 79func trigger_iceland_trap():
@@ -69,10 +86,10 @@ func trigger_iceland_trap():
69 load("res://environments/level_iceland.tres") 86 load("res://environments/level_iceland.tres")
70 ) 87 )
71 88
72 iceland_remaining += 60 89 $IcelandTimer.start()
73 90
74 if not effect_running: 91 iceland_remaining += 60
75 _process_effects() 92 text_dirty = true
76 93
77 94
78func trigger_atbash_trap(): 95func trigger_atbash_trap():
@@ -82,8 +99,7 @@ func trigger_atbash_trap():
82 var apclient = global.get_node("Archipelago") 99 var apclient = global.get_node("Archipelago")
83 apclient.evaluateSolvability() 100 apclient.evaluateSolvability()
84 101
85 if not effect_running: 102 text_dirty = true
86 _process_effects()
87 103
88 104
89func deactivate_atbash_trap(): 105func deactivate_atbash_trap():
@@ -93,6 +109,8 @@ func deactivate_atbash_trap():
93 var apclient = global.get_node("Archipelago") 109 var apclient = global.get_node("Archipelago")
94 apclient.evaluateSolvability() 110 apclient.evaluateSolvability()
95 111
112 text_dirty = true
113
96 114
97func show_puzzle_skip_message(node_path): 115func show_puzzle_skip_message(node_path):
98 var panel_input = get_tree().get_root().get_node(node_path) 116 var panel_input = get_tree().get_root().get_node(node_path)
@@ -106,12 +124,15 @@ func show_puzzle_skip_message(node_path):
106 return 124 return
107 125
108 puzzle_focused = true 126 puzzle_focused = true
127 wallcast.enabled = true
128 not_behind_wall = false
109 puzzle_to_skip = node_path 129 puzzle_to_skip = node_path
110 _evaluate_puzzle_skip() 130 _evaluate_puzzle_skip()
111 131
112 132
113func hide_puzzle_skip_message(): 133func hide_puzzle_skip_message():
114 puzzle_focused = false 134 puzzle_focused = false
135 wallcast.enabled = false
115 _evaluate_puzzle_skip() 136 _evaluate_puzzle_skip()
116 137
117 138
@@ -136,26 +157,49 @@ func skip_puzzle():
136func _evaluate_puzzle_skip(): 157func _evaluate_puzzle_skip():
137 if puzzle_focused and not solve_mode: 158 if puzzle_focused and not solve_mode:
138 skip_available = true 159 skip_available = true
139
140 if not effect_running:
141 _process_effects()
142 else: 160 else:
143 skip_available = false 161 skip_available = false
162 text_dirty = true
163
144 164
165func _tick_slowness():
166 slowness_remaining -= 1
167 text_dirty = true
168
169 if slowness_remaining == 0:
170 var player = get_tree().get_root().get_node("Spatial/player")
171 player.walk_speed = orig_walk
172 player.run_speed = orig_run
173
174 $SlownessTimer.stop()
175
176
177func _tick_iceland():
178 iceland_remaining -= 1
179 text_dirty = true
180
181 if iceland_remaining == 0:
182 get_tree().get_root().get_node("Spatial/player/pivot/camera").set_environment(
183 orig_env
184 )
145 185
146func _process_effects(): 186 $IcelandTimer.stop()
147 effect_running = true 187
188
189func _process(_delta):
190 if puzzle_focused:
191 if wallcast.is_colliding():
192 var should_nbw = (get_tree().get_root().get_node("Spatial/player")._get_panel_from_ray(wallcast) != null)
193 if should_nbw != not_behind_wall:
194 not_behind_wall = true
195 text_dirty = true
196
197 if text_dirty:
198 text_dirty = false
148 199
149 while slowness_remaining > 0 or iceland_remaining > 0 or atbash_activated or skip_available:
150 var text = "" 200 var text = ""
151 if atbash_activated: 201 if atbash_activated:
152 text += "Atbash Trap lasts until you solve a puzzle" 202 text += "Atbash Trap lasts until you solve a puzzle"
153 if skip_available:
154 var apclient = global.get_node("Archipelago")
155 if apclient.getAvailablePuzzleSkips() > 0:
156 if not text.empty():
157 text += "\n"
158 text += "Press P to skip puzzle (%d available)" % apclient.getAvailablePuzzleSkips()
159 if slowness_remaining > 0: 203 if slowness_remaining > 0:
160 if not text.empty(): 204 if not text.empty():
161 text += "\n" 205 text += "\n"
@@ -164,26 +208,10 @@ func _process_effects():
164 if not text.empty(): 208 if not text.empty():
165 text += "\n" 209 text += "\n"
166 text += "Iceland: %d seconds" % iceland_remaining 210 text += "Iceland: %d seconds" % iceland_remaining
211 if skip_available and not_behind_wall:
212 var apclient = global.get_node("Archipelago")
213 if apclient.getAvailablePuzzleSkips() > 0:
214 if not text.empty():
215 text += "\n"
216 text += "Press P to skip puzzle (%d available)" % apclient.getAvailablePuzzleSkips()
167 self.get_node("label").text = text 217 self.get_node("label").text = text
168
169 yield(get_tree().create_timer(1.0), "timeout")
170
171 if !get_tree().paused:
172 if slowness_remaining > 0:
173 slowness_remaining -= 1
174
175 if slowness_remaining == 0:
176 var player = get_tree().get_root().get_node("Spatial/player")
177 player.walk_speed = orig_walk
178 player.run_speed = orig_run
179
180 if iceland_remaining > 0:
181 iceland_remaining -= 1
182
183 if iceland_remaining == 0:
184 get_tree().get_root().get_node("Spatial/player/pivot/camera").set_environment(
185 orig_env
186 )
187
188 self.get_node("label").text = ""
189 effect_running = false