From 3f6ca7b84aef0824b19919b701ff62494226789e Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Fri, 12 Apr 2024 00:32:10 -0400 Subject: [PATCH] ArchipIDLE 2024 (#3079) * Update item pool to include 25 jokes and videos as progression items, as well as a progression GeroCities profile * Fix a bug in Items.py causing item names to be appended inappropriately * Remove unnecessary import * Change item pool to have 50 jokes and 20 motivational videos * Adjust item pool to have 40 of both jokes and videos * Fix imports to allow compressing for distribution as a .apworld --- worlds/archipidle/Items.py | 7 ++++-- worlds/archipidle/Rules.py | 30 ++++++++--------------- worlds/archipidle/__init__.py | 45 +++++++++++++++++++++++++---------- 3 files changed, 48 insertions(+), 34 deletions(-) diff --git a/worlds/archipidle/Items.py b/worlds/archipidle/Items.py index 2b5e6e9a81d0..94665631b711 100644 --- a/worlds/archipidle/Items.py +++ b/worlds/archipidle/Items.py @@ -1,4 +1,7 @@ item_table = ( + 'An Old GeoCities Profile', + 'Very Funny Joke', + 'Motivational Video', 'Staples Easy Button', 'One Million Dollars', 'Replica Master Sword', @@ -13,7 +16,7 @@ '2012 Magic the Gathering Core Set Starter Box', 'Poke\'mon Booster Pack', 'USB Speakers', - 'Plastic Spork', + 'Eco-Friendly Spork', 'Cheeseburger', 'Brand New Car', 'Hunting Knife', @@ -22,7 +25,7 @@ 'One-Up Mushroom', 'Nokia N-GAGE', '2-Liter of Sprite', - 'Free trial of the critically acclaimed MMORPG Final Fantasy XIV, including the entirety of A Realm Reborn and the award winning Heavensward expansion up to level 60 with no restrictions on playtime!', + 'Free trial of the critically acclaimed MMORPG Final Fantasy XIV, including the entirety of A Realm Reborn and the award winning Heavensward and Stormblood expansions up to level 70 with no restrictions on playtime!', 'Can of Compressed Air', 'Striped Kitten', 'USB Power Adapter', diff --git a/worlds/archipidle/Rules.py b/worlds/archipidle/Rules.py index 3bf4bad475e1..2cc6220c6927 100644 --- a/worlds/archipidle/Rules.py +++ b/worlds/archipidle/Rules.py @@ -1,6 +1,5 @@ from BaseClasses import MultiWorld -from ..AutoWorld import LogicMixin -from ..generic.Rules import set_rule +from worlds.AutoWorld import LogicMixin class ArchipIDLELogic(LogicMixin): @@ -10,29 +9,20 @@ def _archipidle_location_is_accessible(self, player_id, items_required): def set_rules(world: MultiWorld, player: int): for i in range(16, 31): - set_rule( - world.get_location(f"IDLE item number {i}", player), - lambda state: state._archipidle_location_is_accessible(player, 4) - ) + world.get_location(f"IDLE item number {i}", player).access_rule = lambda \ + state: state._archipidle_location_is_accessible(player, 4) for i in range(31, 51): - set_rule( - world.get_location(f"IDLE item number {i}", player), - lambda state: state._archipidle_location_is_accessible(player, 10) - ) + world.get_location(f"IDLE item number {i}", player).access_rule = lambda \ + state: state._archipidle_location_is_accessible(player, 10) for i in range(51, 101): - set_rule( - world.get_location(f"IDLE item number {i}", player), - lambda state: state._archipidle_location_is_accessible(player, 20) - ) + world.get_location(f"IDLE item number {i}", player).access_rule = lambda \ + state: state._archipidle_location_is_accessible(player, 20) for i in range(101, 201): - set_rule( - world.get_location(f"IDLE item number {i}", player), - lambda state: state._archipidle_location_is_accessible(player, 40) - ) + world.get_location(f"IDLE item number {i}", player).access_rule = lambda \ + state: state._archipidle_location_is_accessible(player, 40) world.completion_condition[player] =\ - lambda state:\ - state.can_reach(world.get_location("IDLE item number 200", player), "Location", player) + lambda state: state.can_reach(world.get_location("IDLE item number 200", player), "Location", player) diff --git a/worlds/archipidle/__init__.py b/worlds/archipidle/__init__.py index 2d182f31dc20..f4345444efb9 100644 --- a/worlds/archipidle/__init__.py +++ b/worlds/archipidle/__init__.py @@ -1,8 +1,8 @@ from BaseClasses import Item, MultiWorld, Region, Location, Entrance, Tutorial, ItemClassification +from worlds.AutoWorld import World, WebWorld +from datetime import datetime from .Items import item_table from .Rules import set_rules -from ..AutoWorld import World, WebWorld -from datetime import datetime class ArchipIDLEWebWorld(WebWorld): @@ -29,11 +29,10 @@ class ArchipIDLEWebWorld(WebWorld): class ArchipIDLEWorld(World): """ - An idle game which sends a check every thirty seconds, up to two hundred checks. + An idle game which sends a check every thirty to sixty seconds, up to two hundred checks. """ game = "ArchipIDLE" topology_present = False - data_version = 5 hidden = (datetime.now().month != 4) # ArchipIDLE is only visible during April web = ArchipIDLEWebWorld() @@ -56,18 +55,40 @@ def create_item(self, name: str) -> Item: return Item(name, ItemClassification.progression, self.item_name_to_id[name], self.player) def create_items(self): - item_table_copy = list(item_table) - self.multiworld.random.shuffle(item_table_copy) + item_pool = [ + ArchipIDLEItem( + item_table[0], + ItemClassification.progression, + self.item_name_to_id[item_table[0]], + self.player + ) + ] - item_pool = [] - for i in range(200): - item = ArchipIDLEItem( + for i in range(40): + item_pool.append(ArchipIDLEItem( + item_table[1], + ItemClassification.progression, + self.item_name_to_id[item_table[1]], + self.player + )) + + for i in range(40): + item_pool.append(ArchipIDLEItem( + item_table[2], + ItemClassification.filler, + self.item_name_to_id[item_table[2]], + self.player + )) + + item_table_copy = list(item_table[3:]) + self.random.shuffle(item_table_copy) + for i in range(119): + item_pool.append(ArchipIDLEItem( item_table_copy[i], - ItemClassification.progression if i < 40 else ItemClassification.filler, + ItemClassification.progression if i < 9 else ItemClassification.filler, self.item_name_to_id[item_table_copy[i]], self.player - ) - item_pool.append(item) + )) self.multiworld.itempool += item_pool