Added world for ArchipIDLE

This commit is contained in:
Chris Wilson 2022-03-13 04:04:12 -04:00
parent 97b1ae5ee9
commit 14ac139d03
3 changed files with 233 additions and 0 deletions

127
worlds/archipidle/Items.py Normal file
View File

@ -0,0 +1,127 @@
item_table = (
'Staples Easy Button',
'One Million Dollars',
'Replica Master Sword',
'VHS Copy of Jurassic Park',
'32GB USB Drive',
'Pocket Protector',
'Leftover Parts from IKEA Furniture',
'Half-Empty Ink Cartridge for a Printer',
'Watch Battery',
'Towel',
'Scarf',
'2012 Magic the Gathering Core Set Starter Box',
'Pokemon Booster Pack',
'USB Speakers',
'Plastic Spork',
'Cheeseburger',
'Brand New Car',
'Hunting Knife',
'Zippo Lighter',
'Red Shirt',
'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 Heavenasward expansion up to level 60 for free with no restrictions on playtime!',
'Can of Compressed Air',
'Striped Kitten',
'USB Power Adapter',
'Fortune Cookie',
'Nintendo Power Glove',
'The Lampshade of No Real Significance',
'Kneepads of Allure',
'Get-Out-Of-Jail-Free Card',
'Box Set of Stargate SG-1 Season 4',
'The Missing Left Sock',
'Poster Tube',
'Electronic Picture Frame',
'Bottle of Shampoo',
'Your Mission, Should You Choose To Accept It',
'Fanny Pack',
'Robocop T-Shirt',
'Suspiciously Small Monocle',
'Table Saw',
'Cookies and Cream Milkshake',
'Deflated Accordion',
'Grandma\'s Homemade Pie',
'Invisible Lego on the Floor',
'Pitfall Trap',
'Flathead Screwdriver',
'Leftover Pizza',
'Voodoo Doll that Looks Like You',
'Pink Shoelaces',
'Half a Bottle of Scotch',
'Reminder Not to Forget Aginah',
'Medicine Ball',
'Yoga Mat',
'Chocolate Orange',
'Old Concert Tickets',
'The Pick of Destiny',
'McGuffin',
'Just a Regular McMuffin',
'34 Tacos',
'Duct Tape',
'Copy of Untitled Goose Game',
'Partially Used Bed Bath & Beyond Gift Card',
'Mostly Popped Bubble Wrap',
'Expired Driver\'s License',
'The Look, You Know the One',
'Transformers Lunch Box',
'MP3 Player',
'Dry Sharpie',
'Chalkboard Eraser',
'Overhead Projector',
'Physical Copy of the Japanese 1.0 Link to the Past',
'Collectable Action Figure',
'Box Set of The Lord of the Rings Books',
'Lite-Bright',
'Stories from the Good-Old-Days',
'Un-Reproducable Bug Reports',
'Autographed Copy of Shaq-Fu',
'Game-Winning Baseball',
'Portable Battery Bank',
'Blockbuster Membership Card',
'Offensive Bumper Sticker',
'Last Sunday\'s Crossword Puzzle',
'Rubik\'s Cube',
'Your First Grey Hair',
'Embarrassing Childhood Photo',
'Abandoned Sphere One Check',
'The Internet',
'Late-Night Cartoons',
'The Correct Usage of a Semicolon',
'Microsoft Windows 95 Resource Kit',
'Car-Phone',
'Walkman Radio',
'Relevant XKCD Comic',
'Razor Scooter',
'Set of Beyblades',
'Box of Pogs',
'Beanie-Baby Collection',
'Laser Tag Gun',
'Radio Controlled Car',
'Boogie Board',
'Air Jordans',
'Rubber Duckie',
'The Last Cookie in the Cookie Jar',
'Tin-Foil Hat',
'Button-Up Shirt',
'Designer Brand Bag',
'Trapper Keeper',
'Fake Moustache',
'Colored Pencils',
'Pair of 3D Glasses',
'Pair of Movie Tickets',
'Refrigerator Magnets',
'NASCAR Dinner Plates',
'The Final Boss',
'Unskippable Cutscenes',
'24 Rolls of Toilet Paper',
'Canned Soup',
'Warm Blanket',
'3D Printer',
'Jetpack',
'Hoverboard',
'Joycons with No Drift',
'Double Rainbow',
)

View File

@ -0,0 +1,33 @@
from BaseClasses import MultiWorld
from ..AutoWorld import LogicMixin
from ..generic.Rules import set_rule
class ArchipIDLELogic(LogicMixin):
def _archipidle_location_is_accessible(self, player_id, items_required):
items_received = 0
for item in self.prog_items:
if item[1] == player_id:
items_received += 1
return items_received >= items_required
def set_rules(world: MultiWorld, player: int):
for i in range(1, 11):
set_rule(
world.get_location(f"Location {i}", player),
lambda state: state._archipidle_location_is_accessible(player, 0)
)
for i in range(11, 31):
set_rule(
world.get_location(f"Location {i}", player),
lambda state: state._archipidle_location_is_accessible(player, 4)
)
for i in range(31, 51):
set_rule(
world.get_location(f"Location {i}", player),
lambda state: state._archipidle_location_is_accessible(player, 20)
)

View File

@ -0,0 +1,73 @@
from BaseClasses import Item, MultiWorld, Region, Location, Entrance
from .Items import item_table
from .Rules import set_rules
from ..AutoWorld import World
class ArchipIDLEWorld(World):
game = "ArchipIDLE"
topology_present = False
data_version = 1
item_name_to_id = {}
start_id = 9000
for item in item_table:
item_name_to_id[item] = start_id
start_id += 1
location_name_to_id = {}
start_id = 9000
for i in range(1, 51):
location_name_to_id[f"Location {i}"] = start_id
start_id += 1
def generate_basic(self):
item_table_copy = list(item_table)
self.world.random.shuffle(item_table_copy)
item_pool = []
for i in range(50):
item = Item(item_table[i], True, self.item_name_to_id[item_table[i]], self.player)
item.game = 'ArchipIDLE'
item_pool.append(item)
self.world.itempool = item_pool
def set_rules(self):
set_rules(self.world, self.player)
def create_item(self, name: str) -> Item:
item_data = item_table[name]
return Item(name, item_data.progression, item_data.code, self.player)
def create_regions(self):
self.world.regions += [
create_region(self.world, self.player, 'Menu', None, ['Entrance to IDLE Zone']),
create_region(self.world, self.player, 'IDLE Zone', self.location_name_to_id)
]
# link up our region with the entrance we just made
self.world.get_entrance('Entrance to IDLE Zone', self.player)\
.connect(self.world.get_region('IDLE Zone', self.player))
def create_region(world: MultiWorld, player: int, name: str, locations=None, exits=None):
region = Region(name, None, name, player)
region.world = world
if locations:
for location_name in locations.keys():
location = ArchipIDLELocation(player, location_name, locations[location_name], region)
region.locations.append(location)
if exits:
for _exit in exits:
region.exits.append(Entrance(player, _exit, region))
return region
class ArchipIDLELocation(Location):
game: str = "ArchipIDLE"
def __init__(self, player: int, name: str, address=None, parent=None):
super(ArchipIDLELocation, self).__init__(player, name, address, parent)