about summary refs log tree commit diff stats
path: root/client
Commit message (Expand)AuthorAgeFilesLines
* [Client] Prevent hotel panels from warping awayStar Rauchenberger11 days1-0/+11
* [Client] Fixed keyholders after ending bugStar Rauchenberger11 days1-2/+2
* Bump versionsStar Rauchenberger11 days1-1/+1
* [Client] Display wincon in entryStar Rauchenberger11 days1-1/+19
* Worked on the documentationStar Rauchenberger11 days1-7/+0
* [Client] Fixed darkroom double letter panel blockersStar Rauchenberger11 days2-0/+40
* [Client] Read major version from datafileStar Rauchenberger12 days2-3/+3
* [Client] Changed version formatStar Rauchenberger13 days2-2/+3
* [Client] Handle symbol shuffleStar Rauchenberger13 days5-0/+159
* [Client] Remove door behind X1Star Rauchenberger13 days1-0/+5
* Fixed links to repo??Star Rauchenberger14 days1-2/+2
* Started writing READMEsStar Rauchenberger14 days1-0/+97
* [Client] Prevent text client on connection screenStar Rauchenberger2025-09-083-1/+13
* [Client] Handle lavender cubesStar Rauchenberger2025-09-081-1/+4
* [Client] Handle cyan door behaviorStar Rauchenberger2025-09-082-19/+52
* [Client] Handle grouped doors / shuffled CC doorsStar Rauchenberger2025-09-071-0/+17
* [Client] Location scouting for lettersStar Rauchenberger2025-09-065-8/+89
* [Client] Handle letter shuffleStar Rauchenberger2025-09-069-15/+345
* [Client] Client pause mode?Star Rauchenberger2025-09-051-0/+2
* [Client] Maybe for real fixed the crash on connectStar Rauchenberger2025-09-051-2/+1
* [Client] Fixed external names in messages popupStar Rauchenberger2025-09-041-8/+8
* [Client] Handle roof access optionStar Rauchenberger2025-09-042-1/+3
* [Client] Handle keyholder sanityStar Rauchenberger2025-09-022-2/+28
* [Client] Handle progressive doorsStar Rauchenberger2025-09-017-63/+99
* [Client] Fix intermittent crash on connectStar Rauchenberger2025-09-011-1/+1
* [Client] Display message when goalingStar Rauchenberger2025-09-011-0/+2
* [Client] Handle triggering goalStar Rauchenberger2025-09-015-3/+51
* [Client] Batch sending locations on map loadStar Rauchenberger2025-08-313-1/+27
* [Client] Restrict Daedalus roof accessStar Rauchenberger2025-08-311-0/+50
* [Client] Keyholders in locationsStar Rauchenberger2025-08-311-0/+19
* [Client] Handle locations needing specific answersStar Rauchenberger2025-08-301-2/+9
* [Client] Potentially fixed crash when loading corrupted localdataStar Rauchenberger2025-08-302-6/+4
* [Client] Added textclientStar Rauchenberger2025-08-294-0/+145
* [Client] Save connection settings to diskStar Rauchenberger2025-08-292-2/+37
* [Client] Last received item is rememberedStar Rauchenberger2025-08-291-1/+33
* [Client] Added ending locationsStar Rauchenberger2025-08-293-0/+22
* [Client] Added mastery checksStar Rauchenberger2025-08-291-0/+12
* [Client] Various fixesStar Rauchenberger2025-08-296-13/+101
* [Client] Added messages overlayStar Rauchenberger2025-08-284-6/+166
* Client is starting to work!Star Rauchenberger2025-08-2812-0/+1269
<fefferburbia@gmail.com> 2023-06-17 20:03:02 -0400 committer Star Rauchenberger <fefferburbia@gmail.com> 2023-06-17 20:03:02 -0400 Atbash lasts until you solve a puzzle' href='/lingo-archipelago/commit/Archipelago/effects.gd?h=v5.4.0&id=3695cb4b951bde7488d0084bcb61d67d7ea9374f'>3695cb4 ^
793564a ^
























044649d ^
793564a ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188

            
                     


                          
                            
                      



                          



























                                                                                            








                                           












                                                                             



                                   




                                                                                              
                               




                                  
                           

                                       


                                                             




                                  







                                                             
















































                                                                                                


                             
                                                                                                    
                             

                                                                            


                                                                     

                                                    
                                                                                                                    
                                          

                                            
























                                                                                                              
                                        
                              
extends Node

var activated = false
var effect_running = false
var slowness_remaining = 0
var iceland_remaining = 0
var atbash_activated = false
var queued_iceland = 0
var skip_available = false
var puzzle_focused = false
var solve_mode = false
var puzzle_to_skip = ""

var orig_env
var orig_walk
var orig_run


func _ready():
	orig_env = get_tree().get_root().get_node("Spatial/player/pivot/camera").environment
	orig_walk = get_tree().get_root().get_node("Spatial/player").walk_speed
	orig_run = get_tree().get_root().get_node("Spatial/player").run_speed

	var label = Label.new()
	label.set_name("label")
	label.margin_right = 1920.0 - 20.0
	label.margin_top = 20.0
	label.align = Label.ALIGN_RIGHT
	label.valign = Label.VALIGN_TOP

	var dynamic_font = DynamicFont.new()
	dynamic_font.font_data = load("res://fonts/Lingo.ttf")
	dynamic_font.size = 36
	dynamic_font.outline_color = Color(0, 0, 0, 1)
	dynamic_font.outline_size = 2
	label.add_font_override("font", dynamic_font)

	add_child(label)


func activate():
	activated = true

	for _i in range(0, queued_iceland):
		trigger_iceland_trap()

	queued_iceland = 0


func trigger_slowness_trap():
	if slowness_remaining == 0:
		var player = get_tree().get_root().get_node("Spatial/player")
		player.walk_speed = orig_walk / 2.0
		player.run_speed = orig_run / 2.0

	slowness_remaining += 30

	if not effect_running:
		_process_effects()


func trigger_iceland_trap():
	if not activated:
		queued_iceland += 1
		return

	if iceland_remaining == 0:
		get_tree().get_root().get_node("Spatial/player/pivot/camera").set_environment(
			load("res://environments/level_iceland.tres")
		)

	iceland_remaining += 60

	if not effect_running:
		_process_effects()


func trigger_atbash_trap():
	if not atbash_activated:
		atbash_activated = true

		var apclient = global.get_node("Archipelago")
		apclient.evaluateSolvability()

	if not effect_running:
		_process_effects()


func deactivate_atbash_trap():
	if atbash_activated:
		atbash_activated = false

		var apclient = global.get_node("Archipelago")
		apclient.evaluateSolvability()


func show_puzzle_skip_message(node_path):
	var panel_input = get_tree().get_root().get_node(node_path)
	if not panel_input.visible:
		return

	var ap_panel = panel_input.get_parent().get_parent().get_parent().get_parent().get_node(
		"AP_Panel"
	)
	if not ap_panel.solvable:
		return

	puzzle_focused = true
	puzzle_to_skip = node_path
	_evaluate_puzzle_skip()


func hide_puzzle_skip_message():
	puzzle_focused = false
	_evaluate_puzzle_skip()


func enter_solve_mode():
	solve_mode = true
	_evaluate_puzzle_skip()


func exit_solve_mode():
	solve_mode = false
	_evaluate_puzzle_skip()


func skip_puzzle():
	if not solve_mode and puzzle_focused:
		var apclient = global.get_node("Archipelago")
		if apclient.getAvailablePuzzleSkips() > 0:
			apclient.usePuzzleSkip()
			get_tree().get_root().get_node(puzzle_to_skip).complete()


func _evaluate_puzzle_skip():
	if puzzle_focused and not solve_mode:
		skip_available = true

		if not effect_running:
			_process_effects()
	else:
		skip_available = false


func _process_effects():
	effect_running = true

	while slowness_remaining > 0 or iceland_remaining > 0 or atbash_activated or skip_available:
		var text = ""
		if atbash_activated:
			text += "Atbash Trap lasts until you solve a puzzle"
		if skip_available:
			var apclient = global.get_node("Archipelago")
			if apclient.getAvailablePuzzleSkips() > 0:
				if not text.empty():
					text += "\n"
				text += "Press P to skip puzzle (%d available)" % apclient.getAvailablePuzzleSkips()
		if slowness_remaining > 0:
			if not text.empty():
				text += "\n"
			text += "Slowness: %d seconds" % slowness_remaining
		if iceland_remaining > 0:
			if not text.empty():
				text += "\n"
			text += "Iceland: %d seconds" % iceland_remaining
		self.get_node("label").text = text

		yield(get_tree().create_timer(1.0), "timeout")

		if slowness_remaining > 0:
			slowness_remaining -= 1

			if slowness_remaining == 0:
				var player = get_tree().get_root().get_node("Spatial/player")
				player.walk_speed = orig_walk
				player.run_speed = orig_run

		if iceland_remaining > 0:
			iceland_remaining -= 1

			if iceland_remaining == 0:
				get_tree().get_root().get_node("Spatial/player/pivot/camera").set_environment(
					orig_env
				)

	self.get_node("label").text = ""
	effect_running = false