about summary refs log tree commit diff stats
path: root/apworld/client
diff options
context:
space:
mode:
Diffstat (limited to 'apworld/client')
-rw-r--r--apworld/client/manager.gd13
-rw-r--r--apworld/client/maps/control_center.gd35
-rw-r--r--apworld/client/player.gd11
3 files changed, 58 insertions, 1 deletions
diff --git a/apworld/client/manager.gd b/apworld/client/manager.gd index 00f03ea..f10a0b7 100644 --- a/apworld/client/manager.gd +++ b/apworld/client/manager.gd
@@ -67,6 +67,7 @@ const kEndingNameByVictoryValue = {
67} 67}
68 68
69var apworld_version = [0, 0, 0] 69var apworld_version = [0, 0, 0]
70var custom_mint_ending = ""
70var cyan_door_behavior = kCYAN_DOOR_BEHAVIOR_H2 71var cyan_door_behavior = kCYAN_DOOR_BEHAVIOR_H2
71var daedalus_only = false 72var daedalus_only = false
72var daedalus_roof_access = false 73var daedalus_roof_access = false
@@ -76,6 +77,7 @@ var endings_requirement = 0
76var fast_travel_access = 0 77var fast_travel_access = 0
77var keyholder_sanity = false 78var keyholder_sanity = false
78var masteries_requirement = 0 79var masteries_requirement = 0
80var music_mapping = {}
79var port_pairings = {} 81var port_pairings = {}
80var rte_mapping = [] 82var rte_mapping = []
81var shuffle_control_center_colors = false 83var shuffle_control_center_colors = false
@@ -84,6 +86,7 @@ var shuffle_gallery_paintings = false
84var shuffle_letters = kSHUFFLE_LETTERS_VANILLA 86var shuffle_letters = kSHUFFLE_LETTERS_VANILLA
85var shuffle_symbols = false 87var shuffle_symbols = false
86var shuffle_worldports = false 88var shuffle_worldports = false
89var slot_rng = null
87var strict_cyan_ending = false 90var strict_cyan_ending = false
88var strict_purple_ending = false 91var strict_purple_ending = false
89var victory_condition = -1 92var victory_condition = -1
@@ -476,6 +479,7 @@ func _client_connected(slot_data):
476 _last_new_item = localdata[0] 479 _last_new_item = localdata[0]
477 480
478 # Read slot data. 481 # Read slot data.
482 custom_mint_ending = slot_data.get("custom_mint_ending", "")
479 cyan_door_behavior = int(slot_data.get("cyan_door_behavior", 0)) 483 cyan_door_behavior = int(slot_data.get("cyan_door_behavior", 0))
480 daedalus_only = bool(slot_data.get("daedalus_only", false)) 484 daedalus_only = bool(slot_data.get("daedalus_only", false))
481 daedalus_roof_access = bool(slot_data.get("daedalus_roof_access", false)) 485 daedalus_roof_access = bool(slot_data.get("daedalus_roof_access", false))
@@ -514,6 +518,15 @@ func _client_connected(slot_data):
514 if slot_data.has("rte"): 518 if slot_data.has("rte"):
515 rte_mapping = slot_data.get("rte") 519 rte_mapping = slot_data.get("rte")
516 520
521 slot_rng = RandomNumberGenerator.new()
522 slot_rng.seed = int(slot_data.get("seed", 0))
523
524 music_mapping.clear()
525 if bool(slot_data.get("shuffle_music", false)):
526 for map_name in global.reserved_scenes:
527 var track_index = slot_rng.randi_range(0, musicPlayer.all_tracks.size() - 1)
528 music_mapping[map_name] = musicPlayer.all_tracks.keys()[track_index]
529
517 # Set up item locks. 530 # Set up item locks.
518 _item_locks = {} 531 _item_locks = {}
519 532
diff --git a/apworld/client/maps/control_center.gd b/apworld/client/maps/control_center.gd index 92999d3..8e919ab 100644 --- a/apworld/client/maps/control_center.gd +++ b/apworld/client/maps/control_center.gd
@@ -79,7 +79,7 @@ func on_map_load(root):
79 var mastery_count = 0 79 var mastery_count = 0
80 for key in unlocks.data: 80 for key in unlocks.data:
81 if unlocks.data[key] == "unlocked": 81 if unlocks.data[key] == "unlocked":
82 if key.ends_with("_ending"): 82 if key.ends_with("_ending") and key != "free_ending":
83 ending_count += 1 83 ending_count += 1
84 elif key.ends_with("_mastery"): 84 elif key.ends_with("_mastery"):
85 mastery_count += 1 85 mastery_count += 1
@@ -96,6 +96,39 @@ func on_map_load(root):
96 sign2.text = "Masteries: %d/%d" % [mastery_count, ap.masteries_requirement] 96 sign2.text = "Masteries: %d/%d" % [mastery_count, ap.masteries_requirement]
97 root.get_node("/root/scene").add_child.call_deferred(sign2) 97 root.get_node("/root/scene").add_child.call_deferred(sign2)
98 98
99 # Handle custom Mint Ending.
100 if ap.custom_mint_ending != "":
101 var panel_prefab = preload("res://objects/nodes/panel.tscn")
102 var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn")
103
104 var mint_ending = root.get_node("/root/scene/Components/Endings/mint_ending")
105
106 var mint_panel = panel_prefab.instantiate()
107 mint_panel.name = "mint_panel"
108 mint_panel.clue = ap.custom_mint_ending
109 mint_panel.symbol = ""
110 mint_panel.answer = ap.custom_mint_ending
111 mint_panel.position = Vector3(-63, 3, -29)
112 mint_panel.rotation_degrees = Vector3(-45, 90, 0)
113 root.get_node("/root/scene").add_child.call_deferred(mint_panel)
114
115 var mint_tpl = tpl_prefab.instantiate()
116 mint_tpl.name = "mint_tpl"
117 mint_tpl.teleport_point = mint_ending.position
118 mint_tpl.teleport_rotate = mint_ending.rotation_degrees
119 mint_tpl.target_path = mint_ending
120 mint_tpl.senders.append(NodePath("/root/scene/mint_panel"))
121 root.get_node("/root/scene").add_child.call_deferred(mint_tpl)
122
123 var mint_tpl2 = tpl_prefab.instantiate()
124 mint_tpl2.name = "mint_tpl2"
125 mint_tpl2.teleport_point = Vector3(0, -1000, 0)
126 mint_tpl2.target_path = mint_panel
127 mint_tpl2.senders.append(NodePath("/root/scene/mint_panel"))
128 root.get_node("/root/scene").add_child.call_deferred(mint_tpl2)
129
130 mint_ending.position.y = -1000
131
99 132
100func _set_up_mastery_listener(root, name): 133func _set_up_mastery_listener(root, name):
101 var prefab = preload("res://objects/nodes/listeners/unlockReaderListener.tscn") 134 var prefab = preload("res://objects/nodes/listeners/unlockReaderListener.tscn")
diff --git a/apworld/client/player.gd b/apworld/client/player.gd index 95c05d7..dabc15d 100644 --- a/apworld/client/player.gd +++ b/apworld/client/player.gd
@@ -196,6 +196,17 @@ func _ready():
196 minimap.visible = ap.show_minimap 196 minimap.visible = ap.show_minimap
197 get_parent().add_child.call_deferred(minimap) 197 get_parent().add_child.call_deferred(minimap)
198 198
199 if ap.music_mapping.has(global.map):
200 var song_setter = get_node_or_null("/root/scene/songSetter")
201 if song_setter:
202 song_setter.song_name = ap.music_mapping[global.map]
203 else:
204 var song_setter_prefab = preload("res://objects/nodes/songSetter.tscn")
205 song_setter = song_setter_prefab.instantiate()
206 song_setter.name = "songSetter"
207 song_setter.song_name = ap.music_mapping[global.map]
208 get_parent().add_child.call_deferred(song_setter)
209
199 super._ready() 210 super._ready()
200 211
201 await get_tree().process_frame 212 await get_tree().process_frame