Fork of Archipelago Multi-Game Randomizer and Server that runs on https://ap.hollymcfarland.com
Go to file
Aaron Wagener 7193182294
Core: move option results to the World class instead of MultiWorld (#993)
🤞 

* map option objects to a `World.options` dict

* convert RoR2 to options dict system for testing

* add temp behavior for lttp with notes

* copy/paste bad

* convert `set_default_common_options` to a namespace property

* reorganize test call order

* have fill_restrictive use the new options system

* update world api

* update soe tests

* fix world api

* core: auto initialize a dataclass on the World class with the option results

* core: auto initialize a dataclass on the World class with the option results: small tying improvement

* add `as_dict` method to the options dataclass

* fix namespace issues with tests

* have current option updates use `.value` instead of changing the option

* update ror2 to use the new options system again

* revert the junk pool dict since it's cased differently

* fix begin_with_loop typo

* write new and old options to spoiler

* change factorio option behavior back

* fix comparisons

* move common and per_game_common options to new system

* core: automatically create missing options_dataclass from legacy option_definitions

* remove spoiler special casing and add back the Factorio option changing but in new system

* give ArchipIDLE the default options_dataclass so its options get generated and spoilered properly

* reimplement `inspect.get_annotations`

* move option info generation for webhost to new system

* need to include Common and PerGame common since __annotations__ doesn't include super

* use get_type_hints for the options dictionary

* typing.get_type_hints returns the bases too.

* forgot to sweep through generate

* sweep through all the tests

* swap to a metaclass property

* move remaining usages from get_type_hints to metaclass property

* move remaining usages from __annotations__ to metaclass property

* move remaining usages from legacy dictionaries to metaclass property

* remove legacy dictionaries

* cache the metaclass property

* clarify inheritance in world api

* move the messenger to new options system

* add an assert for my dumb

* update the doc

* rename o to options

* missed a spot

* update new messenger options

* comment spacing

Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>

* fix tests

* fix missing import

* make the documentation definition more accurate

* use options system for loc creation

* type cast MessengerWorld

* fix typo and use quotes for cast

* LTTP: set random seed in tests

* ArchipIdle: remove change here as it's default on AutoWorld

* Stardew: Need to set state because `set_default_common_options` used to

* The Messenger: update shop rando and helpers to new system; optimize imports

* Add a kwarg to `as_dict` to do the casing for you

* RoR2: use new kwarg for less code

* RoR2: revert some accidental reverts

* The Messenger: remove an unnecessary variable

* remove TypeVar that isn't used

* CommonOptions not abstract

* Docs: fix mistake in options api.md

Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>

* create options for item link worlds

* revert accidental doc removals

* Item Links: set default options on group

* change Zillion to new options dataclass

* remove unused parameter to function

* use TypeGuard for Literal narrowing

* move dlc quest to new api

* move overcooked 2 to new api

* fixed some missed code in oc2

* - Tried to be compliant with 993 (WIP?)

* - I think it all works now

* - Removed last trace of me touching core

* typo

* It now passes all tests!

* Improve options, fix all issues I hope

* - Fixed init options

* dlcquest: fix bad imports

* missed a file

* - Reduce code duplication

* add as_dict documentation

* - Use .items(), get option name more directly, fix slot data content

* - Remove generic options from the slot data

* improve slot data documentation

* remove `CommonOptions.get_value` (#21)

* better slot data description

Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>

---------

Co-authored-by: el-u <109771707+el-u@users.noreply.github.com>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
Co-authored-by: Doug Hoskisson <beauxq@yahoo.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
Co-authored-by: Alex Gilbert <alexgilbert@yahoo.com>
2023-10-10 22:30:20 +02:00
.github CI: run tests multi-threaded (#2251) 2023-10-02 08:47:28 +02:00
WebHostLib Core: move option results to the World class instead of MultiWorld (#993) 2023-10-10 22:30:20 +02:00
data BizHawkClient: Add BizHawkClient (#1978) 2023-10-03 02:44:19 +02:00
docs Core: move option results to the World class instead of MultiWorld (#993) 2023-10-10 22:30:20 +02:00
test Core: move option results to the World class instead of MultiWorld (#993) 2023-10-10 22:30:20 +02:00
typings/kivy Zillion: map tracker in client (#1136) 2022-10-27 02:30:22 -07:00
worlds Core: move option results to the World class instead of MultiWorld (#993) 2023-10-10 22:30:20 +02:00
worlds_disabled OriBF: Move Ori and the Blind Forest to `worlds_disabled`. (#1906) 2023-06-29 13:36:48 -05:00
.gitignore Core: more gitignore (#2249) 2023-10-02 20:17:34 +02:00
AdventureClient.py CI: add a workflow to show flake8/mypy violations in modified files of a PR (#1513) 2023-05-20 14:40:51 +02:00
BaseClasses.py Core: move option results to the World class instead of MultiWorld (#993) 2023-10-10 22:30:20 +02:00
BizHawkClient.py BizHawkClient: Add BizHawkClient (#1978) 2023-10-03 02:44:19 +02:00
ChecksFinderClient.py ChecksFinder: Linux support via wine (#795) 2022-07-19 07:44:04 +02:00
CommonClient.py CommonClient: fix json prints not being logged in UI mode (#2253) 2023-10-08 13:26:14 +02:00
FF1Client.py Docs: Revise all docs mentioning Lua in EmuHawk (which are in English), and other misc. corrections (#1782) 2023-06-26 08:53:44 +02:00
FactorioClient.py Factorio: Client in folder, TextClient: always available (#1829) 2023-06-25 02:31:25 +02:00
Fill.py Core: move option results to the World class instead of MultiWorld (#993) 2023-10-10 22:30:20 +02:00
Generate.py Core: move option results to the World class instead of MultiWorld (#993) 2023-10-10 22:30:20 +02:00
KH2Client.py KH2: AntipointReset (#1815) 2023-05-18 15:28:35 +02:00
LICENSE update Copyright 2022-02-17 19:03:11 -08:00
Launcher.py Launcher: Allow opening patches for clients without an exe (#2176) 2023-10-02 20:52:00 +02:00
LinksAwakeningClient.py LADX: Fix getting old items over and over again in Bizhawk (#2011) 2023-07-27 16:08:14 +02:00
LttPAdjuster.py LttP: Adjuster no longer breaks when sprite path doesn't exist. 2023-10-07 15:57:05 +02:00
MMBN3Client.py MMBN3: Fixes hint spam when receiving a hint (#2087) 2023-08-11 11:01:24 +02:00
Main.py Core: move option results to the World class instead of MultiWorld (#993) 2023-10-10 22:30:20 +02:00
MinecraftClient.py Core: Add settings API ("auto settings") for host.yaml (#1871) 2023-07-05 22:39:35 +02:00
ModuleUpdate.py Core: skip ModuleUpdate in subprocess 2023-05-18 15:29:17 +02:00
MultiServer.py MultiServer: exit console task when console thread dies (#2068) 2023-08-04 10:01:51 +02:00
NetUtils.py Speedups: fix file date check when frozen (#2211) 2023-09-22 23:05:04 +02:00
OoTAdjuster.py Main: add __all__ and change wrong imports (#1824) 2023-05-20 19:21:39 +02:00
OoTClient.py Core: Add settings API ("auto settings") for host.yaml (#1871) 2023-07-05 22:39:35 +02:00
Options.py Core: move option results to the World class instead of MultiWorld (#993) 2023-10-10 22:30:20 +02:00
Patch.py Core: SNI Client Refactor (#1083) 2022-10-25 19:54:43 +02:00
PokemonClient.py Pokémon Red and Blue: Progressive Card Key and auto hint bug fixes (#2076) 2023-08-02 19:51:53 +02:00
README.md Terraria: Implement New Game (#1405) 2023-07-18 21:37:26 -05:00
SNIClient.py SNIClient: fix /snes command if tree (#791) 2023-09-10 07:19:40 +02:00
Starcraft2Client.py SC2 WoL - Mod, Item and Location update (#2113) 2023-09-15 02:22:10 +02:00
UndertaleClient.py Undertale: Various Fixes (#2146) 2023-09-20 10:18:53 +02:00
Utils.py Utils: support messagebox on windows without dependencies (#2224) 2023-10-08 22:14:28 +02:00
WargrooveClient.py Wargroove: Fixed Wargroove Client not removing communication files (#1492) 2023-03-03 18:24:09 +01:00
WebHost.py Core, WebHost: lazy-load worlds in unpickler, WebHost and WebHostLib (#2156) 2023-09-20 16:05:56 +02:00
Zelda1Client.py Docs: Revise all docs mentioning Lua in EmuHawk (which are in English), and other misc. corrections (#1782) 2023-06-26 08:53:44 +02:00
ZillionClient.py Zillion: Python 3.11 compatibility fix (#2105) 2023-08-16 09:00:10 -05:00
_speedups.pyx Speedups: ignore warning C4551 for pyximport+MSVC (#2054) 2023-07-30 10:33:00 +02:00
_speedups.pyxbld MultiServer: speed up location commands (#1926) 2023-07-04 19:12:43 +02:00
inno_setup.iss BizHawkClient: Add BizHawkClient (#1978) 2023-10-03 02:44:19 +02:00
kvui.py kvui: silently fail to disable DPI awareness on Windows (#2246) 2023-10-02 20:06:29 +02:00
meta.yaml meta.yaml: update progression balancing (#1283) 2022-12-05 22:26:44 +01:00
playerSettings.yaml LTTP: Key Drop Shuffle (#282) 2023-09-27 05:24:10 +02:00
pytest.ini use pytest for github unittests 2020-04-29 18:44:03 +02:00
requirements.txt Core: update jellyfish 2023-09-22 21:39:29 +02:00
settings.py settings: add default=None to Group.get (#2178) 2023-09-15 09:18:14 +02:00
setup.py Setup: also delete old disabled worlds (#2267) 2023-10-07 16:44:21 +02:00

README.md

Archipelago Discord Shield | Install

Archipelago provides a generic framework for developing multiworld capability for game randomizers. In all cases, presently, Archipelago is also the randomizer itself.

Currently, the following games are supported:

  • The Legend of Zelda: A Link to the Past
  • Factorio
  • Minecraft
  • Subnautica
  • Slay the Spire
  • Risk of Rain 2
  • The Legend of Zelda: Ocarina of Time
  • Timespinner
  • Super Metroid
  • Secret of Evermore
  • Final Fantasy
  • Rogue Legacy
  • VVVVVV
  • Raft
  • Super Mario 64
  • Meritous
  • Super Metroid/Link to the Past combo randomizer (SMZ3)
  • ChecksFinder
  • ArchipIDLE
  • Hollow Knight
  • The Witness
  • Sonic Adventure 2: Battle
  • Starcraft 2: Wings of Liberty
  • Donkey Kong Country 3
  • Dark Souls 3
  • Super Mario World
  • Pokémon Red and Blue
  • Hylics 2
  • Overcooked! 2
  • Zillion
  • Lufia II Ancient Cave
  • Blasphemous
  • Wargroove
  • Stardew Valley
  • The Legend of Zelda
  • The Messenger
  • Kingdom Hearts 2
  • The Legend of Zelda: Link's Awakening DX
  • Clique
  • Adventure
  • DLC Quest
  • Noita
  • Undertale
  • Bumper Stickers
  • Mega Man Battle Network 3: Blue Version
  • Muse Dash
  • DOOM 1993
  • Terraria

For setup and instructions check out our tutorials page. Downloads can be found at Releases, including compiled windows binaries.

History

Archipelago is built upon a strong legacy of brilliant hobbyists. We want to honor that legacy by showing it here. The repositories which Archipelago is built upon, inspired by, or otherwise owes its gratitude to are:

We recognize that there is a strong community of incredibly smart people that have come before us and helped pave the path. Just because one person's name may be in a repository title does not mean that only one person made that project happen. We can't hope to perfectly cover every single contribution that lead up to Archipelago but we hope to honor them fairly.

Path to the Archipelago

Archipelago was directly forked from bonta0's multiworld_31 branch of ALttPEntranceRandomizer (this project has a long legacy of its own, please check it out linked above) on January 12, 2020. The repository was then named to MultiWorld-Utilities to better encompass its intended function. As Archipelago matured, then known as "Berserker's MultiWorld" by some, we found it necessary to transform our repository into a root level repository (as opposed to a 'forked repo') and change the name (which came later) to better reflect our project.

Running Archipelago

For most people all you need to do is head over to the releases page then download and run the appropriate installer. The installers function on Windows only.

If you are running Archipelago from a non-Windows system then the likely scenario is that you are comfortable running source code directly. Please see our doc on running Archipelago from source.

This project makes use of multiple other projects. We wouldn't be here without these other repositories and the contributions of their developers, past and present.

Contributing

For contribution guidelines, please see our Contributing doc.

FAQ

For Frequently asked questions, please see the website's FAQ Page.

Code of Conduct

Please refer to our code of conduct.