about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--apworld/__init__.py2
-rw-r--r--apworld/client/manager.gd11
-rw-r--r--apworld/client/player.gd11
-rw-r--r--apworld/options.py8
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
76var fast_travel_access = 0 76var fast_travel_access = 0
77var keyholder_sanity = false 77var keyholder_sanity = false
78var masteries_requirement = 0 78var masteries_requirement = 0
79var music_mapping = {}
79var port_pairings = {} 80var port_pairings = {}
80var rte_mapping = [] 81var rte_mapping = []
81var shuffle_control_center_colors = false 82var shuffle_control_center_colors = false
@@ -84,6 +85,7 @@ var shuffle_gallery_paintings = false
84var shuffle_letters = kSHUFFLE_LETTERS_VANILLA 85var shuffle_letters = kSHUFFLE_LETTERS_VANILLA
85var shuffle_symbols = false 86var shuffle_symbols = false
86var shuffle_worldports = false 87var shuffle_worldports = false
88var slot_rng = null
87var strict_cyan_ending = false 89var strict_cyan_ending = false
88var strict_purple_ending = false 90var strict_purple_ending = false
89var victory_condition = -1 91var 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
259class 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
260class Lingo2Options(PerGameCommonOptions): 267class 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