Fork of Archipelago Multi-Game Randomizer and Server that runs on https://ap.hollymcfarland.com
Go to file
Aaron Wagener d20d09e682
The Messenger: content update (#2823)
* 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

* Messenger: Limited Movement option first draft

* The Messenger: add automated setup through the launcher

* drop tomllib

* don't uselessly import launcher

* The Messenger: fix missing goal requirement for power seal hunt

* make hard mode goal harder

* make fire seal a bit more lenient

* have limited movement force minimal accessibility

* add an early meditation option

* clean up precollected notes tests a bit

* add linux support

* add steam deck support

* await monokickstart

* minor styling cleanup

* more minor styling cleanup

* Initial implementation of Generic ER

* Move ERType to Entrance.Type, fix typing imports

* updates based on testing (read: flailing)

* Updates from feedback

* Various bug fixes in ERCollectionState

* Use deque instead of queue.Queue

* Allow partial entrances in collection state earlier, doc improvements

* Prevent early loops in region graph, improve reusability of ER stage code

* Typos, grammar, PEP8, and style "fixes"

* use RuntimeError instead of bare Exceptions

* return tuples from connect since it's slightly faster for our purposes

* move the shuffle to the beginning of find_pairing

* do er_state placements within pairing lookups to remove code duplication

* requested adjustments

* Add some temporary performance logging

* Use CollectionState to track available exits and placed regions

* remove seal shuffle option

* some cleanup stuff

* portal rando progress

* pre-emptive region creation

* seals need to be in the datapackage

* put mega shards in old order

* fix typos and make it actually work

* fix more missed connections and add portal events

* fix all the portal rando code

* finish initial logic implementation

* remove/comment out debug stuff

* does not actually support plando yet

* typos and fix a crash when 3 available portals was selected

* finish initial logic for all connections and remove/rename as necessary

* fix typos and add some more leniency

* move item classification determination to its own method rather than split between two spots

* super complicated solution for handling installing the alpha builds

* fix logic bugs and add a test

* implement logic to shuffle the cutscene portals even though it's probably not possible

* just use the one list

* fix some issues with the mod checking/downloading

* Core: have webhost slot name links go through the launcher so that components can use them

* add uri support to the launcher component function

* generate output file under specific conditions

* cleanup connections.py

* set topology_present to true when portals are shuffled

* add requirement for ghost pit loc since it's pretty hard without movement

* bring hard logic back

* misc cleanup

* fix asset grabbing of latest version

* implement ER

* just use the entrances for the spoiler instead of manipulating the cache

* remove test defaults

* remove excessive comprehension

* cleanup and cater data for the client

* add elemental skylands to the shuffle pools

* initial attempts at hint text

* use network items for offline seeds

* change around the offline seed data again

* move er after portal shuffle and ensure a minimal sphere 1

* Add a method to automatically disconnect entrances in a coupled-compliant way

 Update docs and cleanup todos

* Make find_placeable_exits deterministic by sorting blocked_connections set

* add more ER transitions

* fix spoiler output of portal warps

* add path to hint_data

* rename entrance to tot to be a bit clearer

* cleanup imports and update description for hard logic

* cleanup for PR to main

* missed a spot

* cleanup monokickstart

* add location_name_groups

* update docs for new setup

* client can reconnect on its own now, no need for a button.

* fix mod download link grabbing the wrong assets

* cleanup mod pulling a bit and display version it's trying to update to

* plando support

* comment out broken steam deck support

* supports plando

* satisfy flake for currently unused file

* fix the items accessibility test

* review comments

* add searing crags portal to starting portals when disabled like option says

* address sliver comments

* rip out currently unused transition shuffle

* add aerobatics warrior requirement to fire seal

---------

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: Sean Dempsey <dempsey.sean@outlook.com>
Co-authored-by: qwint <qwint.42@gmail.com>
2024-03-11 23:23:41 +01:00
.github CI: Avoid race condition in labeler workflow (#2910) 2024-03-07 08:24:08 +01:00
.run PyCharm: ship a working unittest run config (#2694) 2024-01-12 00:49:14 +01:00
WebHostLib WebHost: provide None password to URI so it doesn't get stripped (#2777) 2024-02-05 18:11:02 -05:00
data FF1: Fix resending items on disconnect/connect (#2817) 2024-03-11 09:51:51 +01:00
docs Celeste 64: Implement New Game (#2798) 2024-03-05 17:55:56 -06:00
test Tests: add test for 2-player-multiworlds (#2386) 2024-03-11 23:22:30 +01:00
typings/kivy Zillion: apworld-compatible package data (#2860) 2024-03-03 16:23:02 +01:00
worlds The Messenger: content update (#2823) 2024-03-11 23:23:41 +01:00
worlds_disabled Docs: Added Disabled World information to README.md (#2705) 2024-01-13 21:10:16 +01:00
.coveragerc Tests: create sane cov defaults (#2728) 2024-01-16 17:10:19 +01:00
.gitignore Git: Added file type .smc to gitignore (#2476) 2023-11-22 08:15:35 -06:00
AdventureClient.py Adventure: Fix KeyError on Retrieved (#2560) 2023-12-16 22:22:51 +01:00
BaseClasses.py Core: create the per world random object in the world constructor (#2083) 2024-03-10 18:47:45 +01: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 Clients: add /item_groups and /location_groups (#2822) 2024-03-10 14:46:44 +01: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 Fill: Improve clarity of remaining_fill messages (#2894) 2024-03-07 08:48:55 +01:00
Generate.py Generate: Trim slot names again after 16 character limitation slice. (#2906) 2024-03-05 15:59:34 -06:00
KH2Client.py KH2: Version 2 (#2009) 2023-11-25 08:46:00 -06:00
LICENSE update Copyright 2022-02-17 19:03:11 -08:00
Launcher.py Launcher: make launcher scrollable (#2881) 2024-03-03 06:32:58 +01:00
LinksAwakeningClient.py LADX: Added some resilience to non-ASCII player names (#2642) 2024-02-13 22:46:18 +01: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: Small Bug Fixes (#2282) 2023-11-24 11:14:05 -06:00
Main.py Core: Purge the evil (`world: MultiWorld`) (#2749) 2024-02-05 00:38:00 +01:00
MinecraftClient.py Core: Add settings API ("auto settings") for host.yaml (#1871) 2023-07-05 22:39:35 +02:00
ModuleUpdate.py Setup: don't install webhost dependencies (#2717) 2024-01-14 03:09:03 +01:00
MultiServer.py MultiServer: Improve command response to help troubleshooting (#2833) 2024-03-11 09:55:22 +01:00
NetUtils.py Speedups: fix file date check when frozen (#2211) 2023-09-22 23:05:04 +02:00
OoTAdjuster.py Core: Purge the evil (`world: MultiWorld`) (#2749) 2024-02-05 00:38:00 +01:00
OoTClient.py Core: Add settings API ("auto settings") for host.yaml (#1871) 2023-07-05 22:39:35 +02:00
Options.py Fix usage of `__new__` for `SpecialRange` compatibility fallback (#2513) 2024-03-05 09:46:09 -06:00
Patch.py Core: APPatch interface (#2808) 2024-02-15 00:23:05 +01:00
README.md Celeste 64: Implement New Game (#2798) 2024-03-05 17:55:56 -06:00
SNIClient.py SNIClient, ALttP: expose death_text to SNI client, add message to alttp (#1793) 2023-10-31 11:11:18 +01:00
Starcraft2Client.py SC2 WoL - Mod, Item and Location update (#2113) 2023-09-15 02:22:10 +02:00
UndertaleClient.py Docs, Undertale: Added Suggestions Missed in #2285 (#2435) 2023-11-07 14:41:13 -06:00
Utils.py Core: Allow common collections in OptionSet and OptionList constructors (#2874) 2024-03-03 22:30:51 +01:00
WargrooveClient.py Wargroove: Fixed WargrooveClient retaining victory and location information and minor doc fix (#2464) 2023-11-16 04:35:20 -06:00
WebHost.py Core, WebHost: lazy-load worlds in unpickler, WebHost and WebHostLib (#2156) 2023-09-20 16:05:56 +02:00
Zelda1Client.py TLOZ: Use the proper location name lookup (#2529) 2023-11-29 00:19:42 -06:00
ZillionClient.py Zillion: move client to worlds/zillion (#2649) 2024-01-01 13:42:41 -06:00
_speedups.pyx Speedups: no cinit, no pickling (#2851) 2024-02-21 08:53:54 +01:00
_speedups.pyxbld MultiServer: speed up location commands (#1926) 2023-07-04 19:12:43 +02:00
inno_setup.iss Kirby's Dream Land 3: Implement New Game (#2119) 2024-03-05 09:59:55 -06:00
kvui.py Launcher: make launcher scrollable (#2881) 2024-03-03 06:32:58 +01:00
meta.yaml meta.yaml: update progression balancing (#1283) 2022-12-05 22:26:44 +01:00
playerSettings.yaml LTTP: Update playerSettings.yaml to require AP version 0.4.4 (#2737) 2024-01-31 08:01:55 +01:00
pytest.ini pytest: run tests on non-windows with new names (#2349) 2023-10-24 10:59:15 +02:00
requirements.txt Core: Allow common collections in OptionSet and OptionList constructors (#2874) 2024-03-03 22:30:51 +01:00
settings.py Core: set consistent server defaults (#2566) 2024-01-14 21:24:34 +01:00
setup.py DLC Quest: AP World Status fix (#2908) 2024-03-10 08:13:52 +01: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
  • Lingo
  • Pokémon Emerald
  • DOOM II
  • Shivers
  • Heretic
  • Landstalker: The Treasures of King Nole
  • Final Fantasy Mystic Quest
  • TUNIC
  • Kirby's Dream Land 3
  • Celeste 64

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.