diff options
| author | Star Rauchenberger <fefferburbia@gmail.com> | 2026-02-08 09:28:23 -0500 |
|---|---|---|
| committer | Star Rauchenberger <fefferburbia@gmail.com> | 2026-02-08 09:28:23 -0500 |
| commit | b7900ade0309d3b8c13b830746ca1435141ffe26 (patch) | |
| tree | 2edb8d9f5bb146749a52959ce45e2bf7717cdade /apworld | |
| parent | d591399e6a134d98d8e2095aa740dadd33e17b29 (diff) | |
| download | lingo2-archipelago-b7900ade0309d3b8c13b830746ca1435141ffe26.tar.gz lingo2-archipelago-b7900ade0309d3b8c13b830746ca1435141ffe26.tar.bz2 lingo2-archipelago-b7900ade0309d3b8c13b830746ca1435141ffe26.zip | |
Added music shuffle
Diffstat (limited to 'apworld')
| -rw-r--r-- | apworld/__init__.py | 2 | ||||
| -rw-r--r-- | apworld/client/manager.gd | 11 | ||||
| -rw-r--r-- | apworld/client/player.gd | 11 | ||||
| -rw-r--r-- | apworld/options.py | 8 |
4 files changed, 32 insertions, 0 deletions
| diff --git a/apworld/__init__.py b/apworld/__init__.py index ba5d7ea..a80156c 100644 --- a/apworld/__init__.py +++ b/apworld/__init__.py | |||
| @@ -157,6 +157,7 @@ class Lingo2World(World): | |||
| 157 | "shuffle_doors", | 157 | "shuffle_doors", |
| 158 | "shuffle_gallery_paintings", | 158 | "shuffle_gallery_paintings", |
| 159 | "shuffle_letters", | 159 | "shuffle_letters", |
| 160 | "shuffle_music", | ||
| 160 | "shuffle_symbols", | 161 | "shuffle_symbols", |
| 161 | "shuffle_worldports", | 162 | "shuffle_worldports", |
| 162 | "strict_cyan_ending", | 163 | "strict_cyan_ending", |
| @@ -167,6 +168,7 @@ class Lingo2World(World): | |||
| 167 | slot_data: dict[str, object] = { | 168 | slot_data: dict[str, object] = { |
| 168 | **self.options.as_dict(*slot_options), | 169 | **self.options.as_dict(*slot_options), |
| 169 | "rte": [self.static_logic.objects.maps[map_id].name for map_id in self.player_logic.rte_mapping], | 170 | "rte": [self.static_logic.objects.maps[map_id].name for map_id in self.player_logic.rte_mapping], |
| 171 | "seed": self.random.randint(0, 1000000), | ||
| 170 | "version": self.static_logic.get_data_version(), | 172 | "version": self.static_logic.get_data_version(), |
| 171 | } | 173 | } |
| 172 | 174 | ||
| diff --git a/apworld/client/manager.gd b/apworld/client/manager.gd index 00f03ea..e259708 100644 --- a/apworld/client/manager.gd +++ b/apworld/client/manager.gd | |||
| @@ -76,6 +76,7 @@ var endings_requirement = 0 | |||
| 76 | var fast_travel_access = 0 | 76 | var fast_travel_access = 0 |
| 77 | var keyholder_sanity = false | 77 | var keyholder_sanity = false |
| 78 | var masteries_requirement = 0 | 78 | var masteries_requirement = 0 |
| 79 | var music_mapping = {} | ||
| 79 | var port_pairings = {} | 80 | var port_pairings = {} |
| 80 | var rte_mapping = [] | 81 | var rte_mapping = [] |
| 81 | var shuffle_control_center_colors = false | 82 | var shuffle_control_center_colors = false |
| @@ -84,6 +85,7 @@ var shuffle_gallery_paintings = false | |||
| 84 | var shuffle_letters = kSHUFFLE_LETTERS_VANILLA | 85 | var shuffle_letters = kSHUFFLE_LETTERS_VANILLA |
| 85 | var shuffle_symbols = false | 86 | var shuffle_symbols = false |
| 86 | var shuffle_worldports = false | 87 | var shuffle_worldports = false |
| 88 | var slot_rng = null | ||
| 87 | var strict_cyan_ending = false | 89 | var strict_cyan_ending = false |
| 88 | var strict_purple_ending = false | 90 | var strict_purple_ending = false |
| 89 | var victory_condition = -1 | 91 | var victory_condition = -1 |
| @@ -514,6 +516,15 @@ func _client_connected(slot_data): | |||
| 514 | if slot_data.has("rte"): | 516 | if slot_data.has("rte"): |
| 515 | rte_mapping = slot_data.get("rte") | 517 | rte_mapping = slot_data.get("rte") |
| 516 | 518 | ||
| 519 | slot_rng = RandomNumberGenerator.new() | ||
| 520 | slot_rng.seed = int(slot_data.get("seed", 0)) | ||
| 521 | |||
| 522 | music_mapping.clear() | ||
| 523 | if bool(slot_data.get("shuffle_music", false)): | ||
| 524 | for map_name in global.reserved_scenes: | ||
| 525 | var track_index = slot_rng.randi_range(0, musicPlayer.all_tracks.size() - 1) | ||
| 526 | music_mapping[map_name] = musicPlayer.all_tracks.keys()[track_index] | ||
| 527 | |||
| 517 | # Set up item locks. | 528 | # Set up item locks. |
| 518 | _item_locks = {} | 529 | _item_locks = {} |
| 519 | 530 | ||
| 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 |
| diff --git a/apworld/options.py b/apworld/options.py index 6fe6d8d..fb159e1 100644 --- a/apworld/options.py +++ b/apworld/options.py | |||
| @@ -256,6 +256,13 @@ class TrapPercentage(Range): | |||
| 256 | default = 0 | 256 | default = 0 |
| 257 | 257 | ||
| 258 | 258 | ||
| 259 | class ShuffleMusic(Toggle): | ||
| 260 | """ | ||
| 261 | If enabled, every map will be assigned a random music track. | ||
| 262 | """ | ||
| 263 | display_name = "Shuffle Music" | ||
| 264 | |||
| 265 | |||
| 259 | @dataclass | 266 | @dataclass |
| 260 | class Lingo2Options(PerGameCommonOptions): | 267 | class Lingo2Options(PerGameCommonOptions): |
| 261 | shuffle_doors: ShuffleDoors | 268 | shuffle_doors: ShuffleDoors |
| @@ -279,3 +286,4 @@ class Lingo2Options(PerGameCommonOptions): | |||
| 279 | endings_requirement: EndingsRequirement | 286 | endings_requirement: EndingsRequirement |
| 280 | masteries_requirement: MasteriesRequirement | 287 | masteries_requirement: MasteriesRequirement |
| 281 | trap_percentage: TrapPercentage | 288 | trap_percentage: TrapPercentage |
| 289 | shuffle_music: ShuffleMusic | ||
