From 1eefe23f1101e4d1c795b599f44ca2b4b9d04531 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Wed, 15 Jan 2025 15:13:29 -0500 Subject: [PATCH] Lingo: Add speed boost mode (#3989) * Add speed boost mode * Update generated.dat * Modify the actual trap weights option when speed boost mode is on * EOF newline * Update generated.dat --- worlds/lingo/__init__.py | 12 +++++++++--- worlds/lingo/data/generated.dat | Bin 149485 -> 149504 bytes worlds/lingo/data/ids.yaml | 1 + worlds/lingo/items.py | 1 + worlds/lingo/options.py | 10 ++++++++++ worlds/lingo/test/TestOptions.py | 9 ++++++++- worlds/lingo/utils/assign_ids.rb | 3 +++ 7 files changed, 32 insertions(+), 4 deletions(-) diff --git a/worlds/lingo/__init__.py b/worlds/lingo/__init__.py index 2a61a71f..141fca07 100644 --- a/worlds/lingo/__init__.py +++ b/worlds/lingo/__init__.py @@ -128,6 +128,9 @@ class LingoWorld(World): pool.append(self.create_item("Puzzle Skip")) if traps: + if self.options.speed_boost_mode: + self.options.trap_weights.value["Slowness Trap"] = 0 + total_weight = sum(self.options.trap_weights.values()) if total_weight == 0: @@ -171,7 +174,7 @@ class LingoWorld(World): "death_link", "victory_condition", "shuffle_colors", "shuffle_doors", "shuffle_paintings", "shuffle_panels", "enable_pilgrimage", "sunwarp_access", "mastery_achievements", "level_2_requirement", "location_checks", "early_color_hallways", "pilgrimage_allows_roof_access", "pilgrimage_allows_paintings", "shuffle_sunwarps", - "group_doors" + "group_doors", "speed_boost_mode" ] slot_data = { @@ -188,5 +191,8 @@ class LingoWorld(World): return slot_data def get_filler_item_name(self) -> str: - filler_list = [":)", "The Feeling of Being Lost", "Wanderlust", "Empty White Hallways"] - return self.random.choice(filler_list) + if self.options.speed_boost_mode: + return "Speed Boost" + else: + filler_list = [":)", "The Feeling of Being Lost", "Wanderlust", "Empty White Hallways"] + return self.random.choice(filler_list) diff --git a/worlds/lingo/data/generated.dat b/worlds/lingo/data/generated.dat index 8b159d4ae4ac7c565e2372b1cc43d7a349b2ca7c..646ce3b5d7430dad51aa01a3a3f0e73b62106884 100644 GIT binary patch delta 2672 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 diff --git a/worlds/lingo/data/ids.yaml b/worlds/lingo/data/ids.yaml index 13b77145..0a43592d 100644 --- a/worlds/lingo/data/ids.yaml +++ b/worlds/lingo/data/ids.yaml @@ -17,6 +17,7 @@ special_items: Iceland Trap: 444411 Atbash Trap: 444412 Puzzle Skip: 444413 + Speed Boost: 444680 panels: Starting Room: HI: 444400 diff --git a/worlds/lingo/items.py b/worlds/lingo/items.py index 78b288e7..7e75cc76 100644 --- a/worlds/lingo/items.py +++ b/worlds/lingo/items.py @@ -85,6 +85,7 @@ def load_item_data(): "The Feeling of Being Lost": ItemClassification.filler, "Wanderlust": ItemClassification.filler, "Empty White Hallways": ItemClassification.filler, + "Speed Boost": ItemClassification.filler, **{trap_name: ItemClassification.trap for trap_name in TRAP_ITEMS}, "Puzzle Skip": ItemClassification.useful, } diff --git a/worlds/lingo/options.py b/worlds/lingo/options.py index 2d6e9967..f9d04f68 100644 --- a/worlds/lingo/options.py +++ b/worlds/lingo/options.py @@ -232,6 +232,14 @@ class TrapWeights(OptionDict): default = {trap_name: 1 for trap_name in TRAP_ITEMS} +class SpeedBoostMode(Toggle): + """ + If on, the player's default speed is halved, as if affected by a Slowness Trap. Speed Boosts are added to + the item pool, which temporarily return the player to normal speed. Slowness Traps are removed from the pool. + """ + display_name = "Speed Boost Mode" + + class PuzzleSkipPercentage(Range): """Replaces junk items with puzzle skips, at the specified rate.""" display_name = "Puzzle Skip Percentage" @@ -260,6 +268,7 @@ lingo_option_groups = [ Level2Requirement, TrapPercentage, TrapWeights, + SpeedBoostMode, PuzzleSkipPercentage, ]) ] @@ -287,6 +296,7 @@ class LingoOptions(PerGameCommonOptions): shuffle_postgame: ShufflePostgame trap_percentage: TrapPercentage trap_weights: TrapWeights + speed_boost_mode: SpeedBoostMode puzzle_skip_percentage: PuzzleSkipPercentage death_link: DeathLink start_inventory_from_pool: StartInventoryPool diff --git a/worlds/lingo/test/TestOptions.py b/worlds/lingo/test/TestOptions.py index bd8ed81d..224dbe0f 100644 --- a/worlds/lingo/test/TestOptions.py +++ b/worlds/lingo/test/TestOptions.py @@ -59,4 +59,11 @@ class TestShuffleSunwarpsAccess(LingoTestBase): "victory_condition": "pilgrimage", "shuffle_sunwarps": "true", "sunwarp_access": "individual" - } \ No newline at end of file + } + + +class TestSpeedBoostMode(LingoTestBase): + options = { + "location_checks": "insanity", + "speed_boost_mode": "true", + } diff --git a/worlds/lingo/utils/assign_ids.rb b/worlds/lingo/utils/assign_ids.rb index f7de3d03..bcb8018e 100644 --- a/worlds/lingo/utils/assign_ids.rb +++ b/worlds/lingo/utils/assign_ids.rb @@ -216,3 +216,6 @@ config.each do |room_name, room_data| end File.write(outputpath, old_generated.to_yaml) + +puts "Next item ID: #{next_item_id}" +puts "Next location ID: #{next_location_id}"