diff options
Diffstat (limited to 'apworld/client')
| -rw-r--r-- | apworld/client/manager.gd | 13 | ||||
| -rw-r--r-- | apworld/client/maps/control_center.gd | 35 | ||||
| -rw-r--r-- | apworld/client/player.gd | 11 |
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 | ||
| 69 | var apworld_version = [0, 0, 0] | 69 | var apworld_version = [0, 0, 0] |
| 70 | var custom_mint_ending = "" | ||
| 70 | var cyan_door_behavior = kCYAN_DOOR_BEHAVIOR_H2 | 71 | var cyan_door_behavior = kCYAN_DOOR_BEHAVIOR_H2 |
| 71 | var daedalus_only = false | 72 | var daedalus_only = false |
| 72 | var daedalus_roof_access = false | 73 | var daedalus_roof_access = false |
| @@ -76,6 +77,7 @@ var endings_requirement = 0 | |||
| 76 | var fast_travel_access = 0 | 77 | var fast_travel_access = 0 |
| 77 | var keyholder_sanity = false | 78 | var keyholder_sanity = false |
| 78 | var masteries_requirement = 0 | 79 | var masteries_requirement = 0 |
| 80 | var music_mapping = {} | ||
| 79 | var port_pairings = {} | 81 | var port_pairings = {} |
| 80 | var rte_mapping = [] | 82 | var rte_mapping = [] |
| 81 | var shuffle_control_center_colors = false | 83 | var shuffle_control_center_colors = false |
| @@ -84,6 +86,7 @@ var shuffle_gallery_paintings = false | |||
| 84 | var shuffle_letters = kSHUFFLE_LETTERS_VANILLA | 86 | var shuffle_letters = kSHUFFLE_LETTERS_VANILLA |
| 85 | var shuffle_symbols = false | 87 | var shuffle_symbols = false |
| 86 | var shuffle_worldports = false | 88 | var shuffle_worldports = false |
| 89 | var slot_rng = null | ||
| 87 | var strict_cyan_ending = false | 90 | var strict_cyan_ending = false |
| 88 | var strict_purple_ending = false | 91 | var strict_purple_ending = false |
| 89 | var victory_condition = -1 | 92 | var 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 | ||
| 100 | func _set_up_mastery_listener(root, name): | 133 | func _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 |
