Archipelago/worlds/archipidle/__init__.py

129 lines
4.0 KiB
Python
Raw Normal View History

from BaseClasses import Item, MultiWorld, Region, Location, Entrance, Tutorial, ItemClassification
from worlds.AutoWorld import World, WebWorld
from datetime import datetime
2022-03-13 08:04:12 +00:00
from .Items import item_table
from .Rules import set_rules
Website Style Upgrade (#353) * [WebHost] Update WebHost to include modular themes system, remove unused and outdated assets * Landing Page Updates * Markdown updates, colors coming later * Remove testing theme from FF1 * Color updates for markdown styles * Updates to generated pages, so many updates * [WebHost] Update WebHost to include modular themes system, remove unused and outdated assets * Landing Page Updates * Markdown updates, colors coming later * Remove testing theme from FF1 * Color updates for markdown styles * Updates to generated pages, so many updates * Seed download page improvements * Add styles to weighted-settings page * Minor adjustments to styles * Revert base theme to grass * Add more items to ArchipIDLE * [WebHost] Update WebHost to include modular themes system, remove unused and outdated assets * Landing Page Updates * Markdown updates, colors coming later * Remove testing theme from FF1 * Color updates for markdown styles * Updates to generated pages, so many updates * Seed download page improvements * [WebHost] Update WebHost to include modular themes system, remove unused and outdated assets * Landing Page Updates * Markdown updates, colors coming later * Remove testing theme from FF1 * Color updates for markdown styles * Updates to generated pages, so many updates * Add styles to weighted-settings page * Minor adjustments to styles * Revert base theme to grass * Add more items to ArchipIDLE * Improve Archipidle item name * [WebHost] Update background images, waiting on jungle.png, added partyTime theme * [WebHost] Fix tab ordering on landing page, remove islands on screen scale, fix tutorial page width scaling * [WebHost] Final touches to WebHost * Improve get_world_theme function, add partyTime theme to ArchipIDLE WebWorld * Remove sending_visible from AutoWorld * AP Ocarina of Time Client (#352) * Core: update jinja (#351) * some typing and cleaning, mostly in Fill.py (#349) * some typing and cleaning, mostly in Fill.py * address missing Option types * resolve a few TODOs discussed in pull request * SM: Optimize a bit (#350) * SM: Optimize a bit * SM: init bosses only once * New World Order (#355) * Core: update jinja * SM: Optimize a bit * AutoWorld: import worlds in alphabetical order, to be predictable rather than arbitrary Co-authored-by: Hussein Farran <hmfarran@gmail.com> * Remove references to Z5Client in English OoT setup guide * Prevent markdown code blocks from overflowing their container Co-authored-by: espeon65536 <81029175+espeon65536@users.noreply.github.com> Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com> Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> Co-authored-by: Hussein Farran <hmfarran@gmail.com>
2022-03-29 00:12:17 +00:00
class ArchipIDLEWebWorld(WebWorld):
theme = 'partyTime'
tutorials = [
Tutorial(
tutorial_name='Setup Guide',
description='A guide to playing Archipidle',
language='English',
file_name='guide_en.md',
link='guide/en',
authors=['Farrak Kilhn']
),
Tutorial(
tutorial_name='Guide d installation',
description='Un guide pour jouer à Archipidle',
language='Français',
file_name='guide_fr.md',
link='guide/fr',
authors=['TheLynk']
)
]
2022-03-13 08:04:12 +00:00
class ArchipIDLEWorld(World):
"""
An idle game which sends a check every thirty to sixty seconds, up to two hundred checks.
"""
2022-03-13 08:04:12 +00:00
game = "ArchipIDLE"
topology_present = False
hidden = (datetime.now().month != 4) # ArchipIDLE is only visible during April
Website Style Upgrade (#353) * [WebHost] Update WebHost to include modular themes system, remove unused and outdated assets * Landing Page Updates * Markdown updates, colors coming later * Remove testing theme from FF1 * Color updates for markdown styles * Updates to generated pages, so many updates * [WebHost] Update WebHost to include modular themes system, remove unused and outdated assets * Landing Page Updates * Markdown updates, colors coming later * Remove testing theme from FF1 * Color updates for markdown styles * Updates to generated pages, so many updates * Seed download page improvements * Add styles to weighted-settings page * Minor adjustments to styles * Revert base theme to grass * Add more items to ArchipIDLE * [WebHost] Update WebHost to include modular themes system, remove unused and outdated assets * Landing Page Updates * Markdown updates, colors coming later * Remove testing theme from FF1 * Color updates for markdown styles * Updates to generated pages, so many updates * Seed download page improvements * [WebHost] Update WebHost to include modular themes system, remove unused and outdated assets * Landing Page Updates * Markdown updates, colors coming later * Remove testing theme from FF1 * Color updates for markdown styles * Updates to generated pages, so many updates * Add styles to weighted-settings page * Minor adjustments to styles * Revert base theme to grass * Add more items to ArchipIDLE * Improve Archipidle item name * [WebHost] Update background images, waiting on jungle.png, added partyTime theme * [WebHost] Fix tab ordering on landing page, remove islands on screen scale, fix tutorial page width scaling * [WebHost] Final touches to WebHost * Improve get_world_theme function, add partyTime theme to ArchipIDLE WebWorld * Remove sending_visible from AutoWorld * AP Ocarina of Time Client (#352) * Core: update jinja (#351) * some typing and cleaning, mostly in Fill.py (#349) * some typing and cleaning, mostly in Fill.py * address missing Option types * resolve a few TODOs discussed in pull request * SM: Optimize a bit (#350) * SM: Optimize a bit * SM: init bosses only once * New World Order (#355) * Core: update jinja * SM: Optimize a bit * AutoWorld: import worlds in alphabetical order, to be predictable rather than arbitrary Co-authored-by: Hussein Farran <hmfarran@gmail.com> * Remove references to Z5Client in English OoT setup guide * Prevent markdown code blocks from overflowing their container Co-authored-by: espeon65536 <81029175+espeon65536@users.noreply.github.com> Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com> Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com> Co-authored-by: Hussein Farran <hmfarran@gmail.com>
2022-03-29 00:12:17 +00:00
web = ArchipIDLEWebWorld()
2022-03-13 08:04:12 +00:00
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, 201):
location_name_to_id[f"IDLE item number {i}"] = start_id
2022-03-13 08:04:12 +00:00
start_id += 1
def set_rules(self):
set_rules(self.multiworld, self.player)
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_pool = [
ArchipIDLEItem(
item_table[0],
ItemClassification.progression,
self.item_name_to_id[item_table[0]],
self.player
)
]
2022-03-13 08:04:12 +00:00
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 < 9 else ItemClassification.filler,
self.item_name_to_id[item_table_copy[i]],
self.player
))
2022-03-13 08:04:12 +00:00
self.multiworld.itempool += item_pool
2022-03-13 08:04:12 +00:00
def create_regions(self):
self.multiworld.regions += [
create_region(self.multiworld, self.player, 'Menu', None, ['Entrance to IDLE Zone']),
create_region(self.multiworld, self.player, 'IDLE Zone', self.location_name_to_id)
2022-03-13 08:04:12 +00:00
]
# link up our region with the entrance we just made
self.multiworld.get_entrance('Entrance to IDLE Zone', self.player)\
.connect(self.multiworld.get_region('IDLE Zone', self.player))
2022-03-13 08:04:12 +00:00
def get_filler_item_name(self) -> str:
return self.multiworld.random.choice(item_table)
2022-03-13 08:04:12 +00:00
2022-03-13 08:04:12 +00:00
def create_region(world: MultiWorld, player: int, name: str, locations=None, exits=None):
region = Region(name, player, world)
2022-03-13 08:04:12 +00:00
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
2022-08-05 22:49:54 +00:00
class ArchipIDLEItem(Item):
game = "ArchipIDLE"
2022-03-13 08:04:12 +00:00
class ArchipIDLELocation(Location):
game: str = "ArchipIDLE"