* makes grub hunt goal option that calculates the total available grubs (including item link replacements) and requires all of them to be gathered for goal completion
* update slot data name for grub count
* add option to set number needed for grub hub
* updates to grub hunt goal based on review
* copy/paste fix
* account for 'any' goal and fix overriding non-grub goals
* making sure godhome is in logic for any and removing redundancy on completion condition
* fix typing
* i hate typing
* move to stage_pre_fill
* modify "any" goal so all goals are in logic under minimal settings
* rewrite grub counting to create lookups for grubs and groups that can be reused
* use generator instead of list comprehension
* fix whitespace merging wrong
* minor code cleanup
* Fixing logic bugs
* Require energy attack in the cathedral and energy form in the body
* King Jelly can be beaten easily with only the Dual Form
* I think that I have a problem with my left and right...
* There is a monster that is blocking the path, soo need attack to pass
* The Li cage is not accessible without the Sunken city boss
* Removing useless space.
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Two more minors logic modification
* Adapting tests to af9b6cd
* Reformat the Region file
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
The access rules for "<Environment name> Chest n", "<Environment name>
Shrine n" etc. locations recursively called state.can_reach() for the
n-1 location name, with the n=1 location being the only location to have
the actual access rule set.
This patch removes the recursion, instead setting the actual access rule
directly on each location, increasing the performance of checking
accessibility of n>1 locations.
Risk of Rain 2 was already quite fast to generate despite the recursion
in the access rules, but with this patch, generating a multiworld with
200 copies of the template RoR2 yaml (and progression balancing
disabled through a meta.yaml) goes from about 18s to about 6s for me.
From generating the same seed before and after this patch, the same
result is produced.
* Sort entrances in spoiler log
* Rearrange portal list to closer match the vanilla game order, for better spoiler and because I already did this mod-side
* Add break (thanks vi)
* MMBN3: Press program now has proper color index when received remotely
* Initial commit of OSRS untangled from MMBN3 branch
* Fixes some broken region connections
* Removes some locations
* Rearranges locations to fill in slots left by removed locations
* Adds starting area rando
* Moves Oak and Willow trees to resource regions
* Fixes various PEP8 violations
* Refactor of regions
* Fixes variable capture issue with region rules
* Partial completion of brutal grind logic
* Finishes can_reach_skill function
* Adds skill requirements to location rules, fixes regions rules
* Adds documentation for OSRS
* Removes match statement
* Updates Data Version to test mode to prevent item name caching
* Fixes starting spawn logic for east varrock
* Fixes river lum crossing logic to not assume you can phase across water
* Prevents equipping items when you haven't unlocked them
* Changes canoe logic to not require huge levels
* Skeletoning out some data I'll need for variable task system
* Adds csvs and parser for logic
* Adds Items parsing
* Fixes the spawning logic to not default to Chunksanity when you didn't pick it
* Begins adding generation rules for data-driven logic
* Moves region handling and location creating to different methods
* Adds logic limits to Options
* Begun the location generation has
* Randomly generates tasks for each skill until populated
* Mopping up improper names, adding custom logic, and fixes location rolling
* Drastically cleans up the location rolling loop
* Modifies generation to properly use local variables and pass unit tests
* Game is now generating, but rules don't seem to work
* Lambda capture, my old nemesis. We meet again
* Fixes issue with Corsair Cove item requirement causing logic loop
* Okay one more fix, another variable capture
* On second thought lets not have skull sceptre tasks. 'Tis a silly place
* Removes QP from item pool (they're events not items)
* Removes Stronghold floor tasks, no varbit to track them
* Loads CSV with pkutil so it can be used in apworld
* Fixes logic of skill tasks and adds QP requirements to long grinds
* Fixes pathing in pkgutil call
* Better handling for empty task categories, no longer throws errors
* Fixes order for progressive tasks, removes un-checkable spider task
* Fixes logic issues related to stew and the Blurite caves
* Fixes issues generating causing tests to sporadically fail
* Adds missing task that caused off-by-one error
* Updates to new Options API
* Updates generation to function properly with the Universal Tracker (Thanks Faris)
* Replaces runtime CSV parsing with pre-made python files generated from CSVs
* Switches to self.random and uses random.choice instead of doing it manually
* Fixes to typing, variable names, iterators, and continue conditions
* Replaces Name classes with Enums
* Fixes parse error on region special rules
* Skill requirements check now returns an accessrule instead of being one that checks options
* Updates documentation and setup guide
* Adjusts maximum numbers for combat and general tasks
* Fixes region names so dictionary lookup works for chunksanity
* Update worlds/osrs/docs/en_Old School Runescape.md
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Update worlds/osrs/docs/en_Old School Runescape.md
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Updates readme.md and codeowners doc
* Removes erroneous East Varrock -> Al Kharid connection
* Changes to canoe logic to account for woodcutting level options
* Fixes embarassing typo on 'Edgeville'
* Moves Logic CSVs to separate repository, addresses suggested changes on PR
* Fixes logic error in east/west lumbridge regions. Fixes incorrect List typing in main
* Removes task types with weight 0 from the list of rollable tasks
* Missed another place that the task type had to be removed if 0 weight
* Prevents adding an empty task weight if levels are too restrictive for tasks to be added
* Removes giant blank space in error message
* Adds player name to error for not having enough available tasks
---------
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Options: Always verify keys for VerifyKeys options
* fix PlandoTexts
* use OptionError and give a slightly better error message for which option it is
* add the player name to the error
* don't create an unnecessary list
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Adds an option to have pot pieces placed local/non-local/anywhere
Shivers nearly always finishes last in multiworld games due to the fact you need all 20 pot pieces to win and the pot pieces open very few location checks. This option allows the pieces to be placed locally. This should allow Shivers to be finished earlier.
* New option: Choose how many ixupi captures are needed for goal completion
New option: Choose how many ixupi captures are needed for goal completion
* Fixes rule logic for location 'puzzle solved three floor elevator'
Fixes rule logic for location 'puzzle solved three floor elevator'. Missing a parenthesis caused only the key requirement to be checked for the blue maze region.
* Merge branch 'main' of https://github.com/GodlFire/Shivers
* Revert "Merge branch 'main' of https://github.com/GodlFire/Shivers"
This reverts commit bb08c3f0c2.
* Fixes issue with office elevator rule logic.
* Bug fix, missing logic requirement for location 'Final Riddle: Guillotine Dropped'
Bug fix, missing logic requirement for location 'Final Riddle: Guillotine Dropped'
* Moves plaque location to front for better tracker referencing.
* Tiki should be Shaman.
* Hanging should be Gallows.
* Merrick spelling.
* Clarity change.
* Changes new option to use new option API
Changes new option to use new option API
* Added sub regions for Ixupi
-Added sub regions for Ixupi and moved ixupi capture checks into the sub region.
-Added missing wax capture possible spot in Shaman room
* Adds option for ixupi captures to be priority locations
Adds option for ixupi captures to be priority locations
* Consistency
Consistency
* Changes ixupi captures priority to default on toggle
Changes ixupi captures priority to default on toggle
* Docs update
-Updated link to randomizer
-Update some text to reflect the latest functionality
-Replaced 'setting' with 'option'
* New features/bug fixes
-Adds an option to have completed pots in the item pool
-Moved subterranean world information plaque to maze staircase
* Cleanup
Cleanup
* Fixed name for moved location
When moving a location and renaming it I forgot to fix the name in a second spot.
* Squashed commit of the following:
commit 630a3bdfb9
Merge: 8477d3c85e579200
Author: GodlFire <46984098+GodlFire@users.noreply.github.com>
Date: Mon Apr 1 19:08:48 2024 -0600
Merge pull request #10 from ArchipelagoMW/main
Merge main into branch
commit 5e5792009c
Author: Alchav <59858495+Alchav@users.noreply.github.com>
Date: Mon Apr 1 12:08:21 2024 -0500
LttP: delete playerSettings.yaml (#3062)
commit 9aeeeb077a
Author: CaitSith2 <d_good@caitsith2.com>
Date: Mon Apr 1 06:07:56 2024 -0700
ALttP: Re-mark light/dark world regions after applying plando connections (#2964)
commit 35458380e6
Author: Bryce Wilson <gyroscope15@gmail.com>
Date: Mon Apr 1 07:07:11 2024 -0600
Pokemon Emerald: Fix wonder trade race condition (#2983)
commit 4ac1866689
Author: Alchav <59858495+Alchav@users.noreply.github.com>
Date: Mon Apr 1 08:06:31 2024 -0500
ALTTP: Skull Woods Inverted fix (#2980)
commit 4aa03da66e
Author: Fabian Dill <Berserker66@users.noreply.github.com>
Date: Mon Apr 1 15:06:02 2024 +0200
Factorio: fix attempting to create savegame with not filename safe characters (#2842)
commit 24a03bc8b6
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Mon Apr 1 08:02:26 2024 -0500
KDL3: fix shuffled animals not actually being random (#3060)
commit f813a7005f
Author: Aaron Wagener <mmmcheese158@gmail.com>
Date: Sun Mar 31 11:11:10 2024 -0500
The Messenger: update docs formatting and fix outdated info (#3033)
* The Messenger: update docs formatting and fix outdated info
* address review feedback
* 120 chars
commit 2a0b7e0def
Author: LiquidCat64 <74896918+LiquidCat64@users.noreply.github.com>
Date: Sun Mar 31 09:55:55 2024 -0600
CV64: A couple of very small docs corrections. (#3057)
commit 03d47e460e
Author: Ixrec <ericrhitchcock@gmail.com>
Date: Sun Mar 31 16:55:08 2024 +0100
A Short Hike: Clarify installation instructions (#3058)
* Clarify installation instructions
* don't mention 'config' folder since it isn't created until the game starts
commit e546c0f7ff
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Sun Mar 31 10:50:31 2024 -0500
Yoshi's Island: add patch suffix (#3061)
commit 2ec93ba82a
Author: Bryce Wilson <gyroscope15@gmail.com>
Date: Sun Mar 31 09:48:59 2024 -0600
Pokemon Emerald: Fix inconsistent location name (#3065)
commit 4e3d396394
Author: Aaron Wagener <mmmcheese158@gmail.com>
Date: Sun Mar 31 10:47:11 2024 -0500
The Messenger: Fix precollected notes not being removed from the itempool (#3066)
* The Messenger: fix precollected notes not being properly removed from pool
* The Messenger: bump required client version
commit 72c53513f8
Author: Fabian Dill <Berserker66@users.noreply.github.com>
Date: Sun Mar 31 03:57:59 2024 +0200
WebHost: fix /check creating broken yaml files if files don't end with a newline (#3063)
commit b7ac6a4cbd
Author: Aaron Wagener <mmmcheese158@gmail.com>
Date: Fri Mar 29 20:14:53 2024 -0500
The Messenger: Fix various portal shuffle issues (#2976)
* put constants in a bit more sensical order
* fix accidental incorrect scoping
* fix plando rules not being respected
* add docstrings for the plando functions
* fix the portal output pools being overwritten
* use shuffle and pop instead of removing by content so plando can go to the same area twice
* move portal pool rebuilding outside mapping creation
* remove plando_connection cleansing since it isn't shared with transition shuffle
commit 5f0112e783
Author: Zach Parks <zach@alliware.com>
Date: Fri Mar 29 19:13:51 2024 -0500
Tracker: Add starting inventory to trackers and received items table. (#3051)
commit bb481256de
Author: Aaron Wagener <mmmcheese158@gmail.com>
Date: Thu Mar 28 21:48:40 2024 -0500
Core: Make fill failure error more human parseable (#3023)
commit 301d9de975
Author: Aaron Wagener <mmmcheese158@gmail.com>
Date: Thu Mar 28 19:31:59 2024 -0500
Docs: adding games rework (#2892)
* Docs: complete adding games.md rework
* remove all the now unused images
* review changes
* address medic's review
* address more comments
commit 9dc708978b
Author: Trevor L <80716066+TRPG0@users.noreply.github.com>
Date: Thu Mar 28 18:26:58 2024 -0600
Hylics 2: Fix invalid multiworld data, use `self.random` instead of `self.multiworld.random` (#3001)
* Hylics 2: Fixes
* Rewrite loop
commit 4391d1f4c1
Author: Bryce Wilson <gyroscope15@gmail.com>
Date: Thu Mar 28 18:05:39 2024 -0600
Pokemon Emerald: Fix opponents learning non-randomized TMs (#3025)
commit 5d9d4ed9f1
Author: black-sliver <59490463+black-sliver@users.noreply.github.com>
Date: Fri Mar 29 01:01:31 2024 +0100
SoE: update to pyevermizer v0.48.0 (#3050)
commit c97215e0e7
Author: Scipio Wright <scipiowright@gmail.com>
Date: Thu Mar 28 17:23:37 2024 -0400
TUNIC: Minor refactor of the vanilla_portals function (#3009)
* Remove unused, change an if to an elif
* Remove unused import
commit eb66886a90
Author: Alchav <59858495+Alchav@users.noreply.github.com>
Date: Thu Mar 28 16:23:01 2024 -0500
SC2: Don't Filter Excluded Victory Locations (#3018)
commit de860623d1
Author: Fabian Dill <Berserker66@users.noreply.github.com>
Date: Thu Mar 28 22:21:56 2024 +0100
Core: differentiate between unknown worlds and broken worlds in error message (#2903)
commit 74b2bf5161
Author: Bryce Wilson <gyroscope15@gmail.com>
Date: Thu Mar 28 15:20:55 2024 -0600
Pokemon Emerald: Exclude norman trainer location during norman goal (#3038)
commit 74ac66b032
Author: BadMagic100 <dempsey.sean@outlook.com>
Date: Thu Mar 28 08:49:19 2024 -0700
Hollow Knight: 0.4.5 doc revamp and default options tweaks (#2982)
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
commit 80d7ac4164
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Thu Mar 28 09:41:32 2024 -0500
KDL3: RC1 Fixes and Enhancement (#3022)
* fix cloudy park 4 rule, zero deathlink message
* remove redundant door_shuffle bool
when generic ER gets in, this whole function gets rewritten. So just clean it a little now.
* properly fix deathlink messages, fix fill error
* update docs
commit 77311719fa
Author: Ziktofel <ziktofel@gmail.com>
Date: Thu Mar 28 15:38:34 2024 +0100
SC2: Fix HERC upgrades (#3044)
commit cfc1541be9
Author: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Date: Thu Mar 28 15:19:32 2024 +0100
Docs: Mention the "last received item index" paradigm in the network protocol docs (#2989)
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
commit 4d954afd9b
Author: Scipio Wright <scipiowright@gmail.com>
Date: Thu Mar 28 10:11:20 2024 -0400
TUNIC: Add link to AP plando guide to connection plando section of game page (#2993)
commit 17748a4bf1
Author: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
Date: Thu Mar 28 10:00:10 2024 -0400
Launcher, Docs: Update UI and Set-Up Guide to Reference Options (#2950)
commit 9182fe563f
Author: Entropynines <163603868+Entropynines@users.noreply.github.com>
Date: Thu Mar 28 06:56:35 2024 -0700
README: Remove outdated information about launchers (#2966)
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
commit bcf223081f
Author: t3hf1gm3nt <59876300+t3hf1gm3nt@users.noreply.github.com>
Date: Thu Mar 28 09:54:56 2024 -0400
TLOZ: Fix markdown issue with game info page (#2985)
commit fa93488f3f
Author: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Date: Thu Mar 28 09:46:00 2024 -0400
Docs: Consistent naming for "connection plando" (#2994)
commit db15dd4bde
Author: chandler05 <66492208+chandler05@users.noreply.github.com>
Date: Thu Mar 28 08:45:19 2024 -0500
A Short Hike: Fix incorrect info in docs (#3016)
commit 01cdb0d761
Author: PoryGone <98504756+PoryGone@users.noreply.github.com>
Date: Thu Mar 28 09:44:23 2024 -0400
SMW: Update World Doc for v2.0 Features (#3034)
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
commit d0ac2b744e
Author: panicbit <panicbit@users.noreply.github.com>
Date: Thu Mar 28 10:11:26 2024 +0100
LADX: fix local and non-local instrument placement (#2987)
* LADX: fix local and non-local instrument placement
* change confusing variable name
commit 14f5f0127e
Author: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
Date: Thu Mar 28 04:42:35 2024 -0400
Stardew Valley: Fix potential soft lock with vanilla tools and entrance randomizer + Performance improvement for vanilla tool/skills (#3002)
* fix vanilla tool fishing rod requiring metal bars
fix vanilla skill requiring previous level (it's always the same rule or more restrictive)
* add test to ensure fishing rod need fish shop
* fishing rod should be indexed from 0 like a mentally sane person would do.
* fishing rod 0 isn't real, but it definitely can hurt you.
* reeeeeeeee
commit cf133dde72
Author: Bryce Wilson <gyroscope15@gmail.com>
Date: Thu Mar 28 02:32:27 2024 -0600
Pokemon Emerald: Fix typo (#3020)
commit ca18121811
Author: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
Date: Thu Mar 28 04:27:49 2024 -0400
Stardew Valley: Fix generation fail with SVE and entrance rando when Wizard Tower is in place of Sprite Spring (#2970)
commit 1d4512590e
Author: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Date: Wed Mar 27 21:09:09 2024 +0100
requirements.txt: _ instead of - to make PyCharm happy (#3043)
commit f7b415dab0
Author: agilbert1412 <alexgilbert@yahoo.com>
Date: Tue Mar 26 19:40:58 2024 +0300
Stardew valley: Game version documentation (#2990)
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
commit 702f006c84
Author: LiquidCat64 <74896918+LiquidCat64@users.noreply.github.com>
Date: Tue Mar 26 07:31:36 2024 -0600
CV64: Change all mentions of "settings" to "options" and fix a broken link (#3015)
commit 98ce8f8844
Author: Yussur Mustafa Oraji <N00byKing@hotmail.de>
Date: Tue Mar 26 14:29:25 2024 +0100
sm64ex: New Options API and WebHost fix (#2979)
commit ea47b90367
Author: Scipio Wright <scipiowright@gmail.com>
Date: Tue Mar 26 09:25:41 2024 -0400
TUNIC: You can grapple down here without the ladder, neat (#3019)
commit bf3856866c
Author: agilbert1412 <alexgilbert@yahoo.com>
Date: Sun Mar 24 23:53:49 2024 +0300
Stardew Valley: presets with some of the new available values for existing settings to make them more accurate (#3014)
commit c0368ae0d4
Author: Phaneros <31861583+MatthewMarinets@users.noreply.github.com>
Date: Sun Mar 24 13:53:20 2024 -0700
SC2: Fixed missing upgrade from custom tracker (#3013)
commit 36c83073ad
Author: Salzkorn <salzkitty@gmail.com>
Date: Sun Mar 24 21:52:41 2024 +0100
SC2 Tracker: Fix grouped items pointing at wrong item IDs (#2992)
commit 2b24539ea5
Author: Ziktofel <ziktofel@gmail.com>
Date: Sun Mar 24 21:52:16 2024 +0100
SC2 Tracker: Use level tinting to let the player know which level he has of Replenishable Magazine (#2986)
commit 7e904a1c78
Author: Ziktofel <ziktofel@gmail.com>
Date: Sun Mar 24 21:51:46 2024 +0100
SC2: Fix Kerrigan presence resolving when deciding which races should be used (#2978)
commit bdd498db23
Author: Alchav <59858495+Alchav@users.noreply.github.com>
Date: Fri Mar 22 15:36:27 2024 -0500
ALTTP: Fix#2290's crashes (#2973)
commit 355223b8f0
Author: PinkSwitch <52474902+PinkSwitch@users.noreply.github.com>
Date: Fri Mar 22 15:35:00 2024 -0500
Yoshi's Island: Implement New Game (#2141)
Co-authored-by: Silvris <58583688+Silvris@users.noreply.github.com>
Co-authored-by: Alchav <59858495+Alchav@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
commit aaa3472d5d
Author: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Date: Fri Mar 22 21:30:51 2024 +0100
The Witness: Fix seed bleed issue (#3008)
commit 96d93c1ae3
Author: chandler05 <66492208+chandler05@users.noreply.github.com>
Date: Fri Mar 22 15:30:23 2024 -0500
A Short Hike: Add option to customize filler coin count (#3004)
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
commit ca549df20a
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Fri Mar 22 15:29:24 2024 -0500
CommonClient: fix hint tab overlapping (#2957)
Co-authored-by: Remy Jette <remy@remyjette.com>
commit 44988d430d
Author: Star Rauchenberger <fefferburbia@gmail.com>
Date: Fri Mar 22 15:28:41 2024 -0500
Lingo: Add trap weights option (#2837)
commit 11b32f17ab
Author: Danaël V <104455676+ReverM@users.noreply.github.com>
Date: Fri Mar 22 12:46:14 2024 -0400
Docs: replacing "setting" to "option" in world docs (#2622)
* Update contributing.md
* Update contributing.md
* Update contributing.md
* Update contributing.md
* Update contributing.md
* Update contributing.md
Added non-AP World specific information
* Update contributing.md
Fixed broken link
* Some minor touchups
* Update Contributing.md
Draft for version with picture
* Update contributing.md
Small word change
* Minor updates for conciseness, mostly
* Changed all instances of settings to options in info and setup guides
I combed through all world docs and swapped "setting" to "option" when this was refering to yaml options.
I also changed a leftover "setting" in option.py
* Update contributing.md
* Update contributing.md
* Update setup_en.md
Woops I forgot one
* Update Options.py
Reverted changes regarding options.py
* Update worlds/noita/docs/en_Noita.md
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/sc2wol/docs/en_Starcraft 2 Wings of Liberty.md
revert change waiting for that page to be updated
* Update worlds/witness/docs/setup_en.md
* Update worlds/witness/docs/en_The Witness.md
* Update worlds/soe/docs/multiworld_en.md
Fixed Typo
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update worlds/witness/docs/en_The Witness.md
* Update worlds/adventure/docs/en_Adventure.md
* Update worlds/witness/docs/setup_en.md
* Updated Stardew valley to hopefully get rid of the merge conflicts
* Didn't work :dismay:
* Delete worlds/sc2wol/docs/setup_en.md
I think this will fix the merge issue
* Now it should work
* Woops
---------
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
commit 218cd45844
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Fri Mar 22 03:02:38 2024 -0500
APProcedurePatch: fix RLE/COPY incorrect sizing (#3006)
* change class variables to instance variables
* Update worlds/Files.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update worlds/Files.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* move required_extensions to tuple
* fix missing tuple ellipsis
* fix classvar mixup
* rename tokens to _tokens. use hasattr
* type hint cleanup
* Update Files.py
* check using isinstance instead
* Update Files.py
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
commit 4196bde597
Author: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Date: Thu Mar 21 16:38:36 2024 -0400
Docs: Fixing special_range_names example (#3005)
commit 40f843f54d
Author: Star Rauchenberger <fefferburbia@gmail.com>
Date: Thu Mar 21 11:00:53 2024 -0500
Lingo: Minor game data fixes (#3003)
commit da333fbb0c
Author: GodlFire <46984098+GodlFire@users.noreply.github.com>
Date: Thu Mar 21 09:52:16 2024 -0600
Shivers: Adds missing logic rule for skull dial door location (#2997)
commit 43084da23c
Author: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Date: Thu Mar 21 16:51:29 2024 +0100
The Witness: Fix newlines in Witness option tooltips (#2971)
commit 14816743fc
Author: Scipio Wright <scipiowright@gmail.com>
Date: Thu Mar 21 11:50:07 2024 -0400
TUNIC: Shuffle Ladders option (#2919)
commit 30a0aa2c85
Author: Star Rauchenberger <fefferburbia@gmail.com>
Date: Thu Mar 21 10:46:53 2024 -0500
Lingo: Add item/location groups (#2789)
commit f4b7c28a33
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Wed Mar 20 17:45:32 2024 -0500
APProcedurePatch: hotfix changing class variables to instance variables (#2996)
* change class variables to instance variables
* Update worlds/Files.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update worlds/Files.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* move required_extensions to tuple
* fix missing tuple ellipsis
* fix classvar mixup
* rename tokens to _tokens. use hasattr
* type hint cleanup
* Update Files.py
* check using isinstance instead
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
commit 12864f7b24
Author: chandler05 <66492208+chandler05@users.noreply.github.com>
Date: Wed Mar 20 22:44:09 2024 +0100
A Short Hike: Implement New Game (#2577)
commit db02e9d2aa
Author: LiquidCat64 <74896918+LiquidCat64@users.noreply.github.com>
Date: Wed Mar 20 15:03:25 2024 -0600
Castlevania 64: Implement New Game (#2472)
commit 32315776ac
Author: Jérémie Bolduc <16137441+Jouramie@users.noreply.github.com>
Date: Wed Mar 20 16:57:45 2024 -0400
Stardew Valley: Fix extended family legendary fishes being locations with fishsanity set to exclude legendary (#2967)
commit e9620bea77
Author: Magnemania <89949176+Magnemania@users.noreply.github.com>
Date: Wed Mar 20 16:56:00 2024 -0400
SM64: Goal Logic and Hint Bugfixes (#2886)
commit 183ca35bba
Author: qwint <qwint.42@gmail.com>
Date: Wed Mar 20 08:39:37 2024 -0500
CommonClient: Port Casting Bug (#2975)
commit fcaaa197a1
Author: TheLX5 <luisyuregi@gmail.com>
Date: Wed Mar 20 05:56:19 2024 -0700
SMW: Fixes for Bowser being defeatable on Egg Hunt and CI2 DC room access (#2981)
commit 8f7b63a787
Author: TheLX5 <luisyuregi@gmail.com>
Date: Wed Mar 20 05:56:04 2024 -0700
SMW: Blocksanity logic fixes (#2988)
commit 6f64bb9869
Author: Scipio Wright <scipiowright@gmail.com>
Date: Wed Mar 20 08:46:31 2024 -0400
Noita: Remove newline from option description so it doesn't look bad on webhost (#2969)
commit d0a9d0e2d1
Author: Bryce Wilson <gyroscope15@gmail.com>
Date: Wed Mar 20 06:43:13 2024 -0600
Pokemon Emerald: Bump required client version (#2963)
commit 94650a02de
Author: Silvris <58583688+Silvris@users.noreply.github.com>
Date: Tue Mar 19 17:08:29 2024 -0500
Core: implement APProcedurePatch and APTokenMixin (#2536)
* initial work on procedure patch
* more flexibility
load default procedure for version 5 patches
add args for procedure
add default extension for tokens and bsdiff
allow specifying additional required extensions for generation
* pushing current changes to go fix tloz bug
* move tokens into a separate inheritable class
* forgot the commit to remove token from ProcedurePatch
* further cleaning from bad commit
* start on docstrings
* further work on docstrings and typing
* improve docstrings
* fix incorrect docstring
* cleanup
* clean defaults and docstring
* define interface that has only the bare minimum required
for `Patch.create_rom_file`
* change to dictionary.get
* remove unnecessary if statement
* update to explicitly check for procedure, restore compatible version and manual override
* Update Files.py
* remove struct uses
* ensure returning bytes, add token type checking
* Apply suggestions from code review
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* pep8
---------
Co-authored-by: beauxq <beauxq@yahoo.com>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Changes pot_completed_list to a instance variable instead of global.
Changes pot_completed_list to a instance variable instead of global. The global variable was unintentional and was causing missmatch in pre_fill which would cause generation error.
* Removing deprecated options getter
* Adds back fix from main branch
Adds back fix from main branch
* Removing messenger changes that somehow got on my branch?
Removing messenger changes that somehow got on my branch?
* Removing messenger changes that are somehow on the Shivers branch
Removing messenger changes that are somehow on the Shivers branch
* Still trying to remove Messenger changes on Shivers branch
Still trying to remove Messenger changes on Shivers branch
* Review comments addressed. Early lobby access set as default.
Review comments addressed. Early lobby access set as default.
* Review comments addressed
Review comments addressed
* Review comments addressed. Option for priority locations removed.
Option to have ixupi captures a priority has been removed and can be added again if Priority Fill is changed. See Issues #3467.
* Minor Change
Minor Change
* Fixed ID 10 T Error
Fixed ID 10 T Error
* Front door option added to slot data
Front door option added to slot data
* Add missing .value on slot data
Add missing .value on slot data
* Small change to slot data
Small change to slot data
* Small change to slot data
Why didn't this change get pushed github...
* Forgot list
Forgot list
---------
Co-authored-by: Kory Dondzila <korydondzila@gmail.com>
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* rename locations accessibility to "full" and make old locations accessibility debug only
* fix a bug in oot
* reorder lttp tests to not override its overrides
* changed the wrong word in the dict
* :forehead:
* update the manual lttp yaml
* use __debug__
* update pokemon and messenger
* fix conflicts from 993
* fix stardew presets
* add that locations may be inaccessible to description
* use reST format and make the items description one line so that it renders correctly on webhost
* forgot i renamed that
* add aliases for back compat
* some cleanup
* fix imports
* fix test failure
* only check "items" players when the item is progression
* Revert "only check "items" players when the item is progression"
This reverts commit ecbf986145.
* remove some unnecessary diffs
* CV64: Add ItemsAccessibility
* put items description at the bottom of the docstring since that's it's visual order
* :
* rename accessibility reference in pokemon rb dexsanity
* make the rendered tooltips look nicer
* Core: move item linking out of main
* add a test that item link option correctly validates
* remove unused fluff
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
If a NamedRange has a `special_range_names` entry outside the
`range_start` and `range_end`, the HTML5 range input will clamp the
submitted value to the closest value in the range.
These means that, for example, Pokemon RB's "HM Compatibility" option's
"Vanilla (-1)" option would instead get posted as "0" rather than "-1".
This change updates NamedRange to behave like TextChoice, where the
select element has a `name` attribute matching the option, and there is
an additional element to be able to provide an option other than the
select element's choices.
This uses a different suffix of `-range` rather than `-custom` that
TextChoice uses. The reason is we need some way to decide whether to use
the custom value or the select value, and that method needs to work
without JavaScript. For TextChoice this is easy, if the custom field is
empty use the select element. For NamedRange this is more difficult as
the browser will always submit *something*. My choice was to only use
the value from the range if the select box is set to "custom". Since
this only happens with JS as "custom' is hidden, I made the range hidden
under no-JS. If it's preferred, I could make the select box hidden
instead. Let me know.
This PR also makes the `js-required` class set `display: none` with
`!important` as otherwise the class wouldn't work on any rule that
had `display: flex` with more specificity than a single class.
* updates HK to consistently use world.random, use world.options, don't use world = self.multiworld, and remove some things from the logicMixin
* Update HK to new options dataclass
* Move completion condition helpers to Rules.py
* updates from review
These areas are technically connected through The Observant, but the connection between The Observant and The Incomparable is marked as a warp because of the warp hallways leading up to The Observant's achievement panel. Creating separate entrances for The Incomparable is a simple workaround, and allows use of that connection during a pilgrimage.
* save the seed in slot data to reuse it in UT
* add logging when seed is missing
* add UT test and fix bundle test
* self review
* run UT test on allsanity+mod so it's more meaningfull
* Created panels mode door shuffle
* Added some panel door item names
* Remove RUNT TURN panel door
Not really useful.
* Fix logic with First SIX related stuff
* Add group_doors to slot data
* Fix LEVEL 2 behavior with panels mode
* Fixed unit tests
* Fixed duplicate IDs from merge
* Just regenerated new IDs
* Fixed duplication of color and door group items
* Removed unnecessary unit test option
* Fix The Seeker being achievable without entrance door
* Fix The Observant being achievable without locked panels
* Added some more panel doors
* Added Progressive Suits Area
* Lingo: Fix Basement access with THE MASTER
* Added indirect conditions for MASTER-blocked entrances
* Fixed Incomparable achievement access
* Fix STAIRS panel logic
* Fix merge error with good items
* Is this clearer?
* DREAD and TURN LEARN
* Allow a weird edge case for reduced locations
Panels mode door shuffle + grouped doors + color shuffle + pilgrimage enabled is exactly the right number of items for reduced locations. Removing color shuffle also allows for disabling pilgrimage, adding sunwarp locking, or both, with a couple of locations left over.
* Prevent small sphere one on panels mode
* Added shuffle_doors aliases for old options
* Fixed a unit test
* Updated datafile
* Tweaked requirements for reduced locations
* Added player name to OptionError messages
* Update generated.dat
* Docs: Add Swedish Guide for Pokemon Emerald
Swedish Translation
* v2
some proof reading & clarification changes
* v3
* v4
* v5
typo
* v6
* Update worlds/pokemon_emerald/docs/setup_sv.md
Co-authored-by: Bryce Wilson <gyroscope15@gmail.com>
* Update worlds/pokemon_emerald/docs/setup_sv.md
Co-authored-by: Bryce Wilson <gyroscope15@gmail.com>
* v7
Tried to reduce the length of lines, this should still convey the same message/meaning
* typo
* v8
Removed Leading/Trailing Spaces
* typo v2
* Added a couple of full stops.
* lowercase typos
* Update setup_sv.md
* Apply suggestions from code review
Co-authored-by: Bryce Wilson <gyroscope15@gmail.com>
---------
Co-authored-by: Bryce Wilson <gyroscope15@gmail.com>
Co-authored-by: bittersweetrin <chandraherbozo@gmail.com>
* Fix logic bug on daggerfish
* Make new region for pond.
* Fix SVE logic for crops
* Fix Distant Lands Cropsanity
* Fix failing tests.
* Reverting removing these for now.
* Fix bugs, add combat requirement
* convert str into tuple directly
* add ginger island to mod tests
* Move a lot of mod item logic to content pack
* Gut the rules from DL while we're at it.
* Import nuke
* Fix alecto
* Move back some rules for now.
* Move archaeology rules
* Add some comments why its done.
* Clean up archaeology and fix sve
* Moved dulse to water item class
* Remove digging like worms for now
* fix
* Add missing shipsanity location
* Move background names around or something idk
* Revert ArchaeologyTrash for now
---------
Co-authored-by: Jouramie <jouramie@hotmail.com>
* settings: clean up imports
* settings: try to use atomic rename
* settings: flush, sync and validate new yaml
before replacing the old one
* settings: add test for Settings.save
* adding one faq :)
* adding another faq that links to the relevant file
* add lined line breaks between questions and lower the heading size of the question so sub-divisions can be added later
* missed some newlines
* updating best practice filler method
* add note about get_filler_item_name()
* updates to wording from review
* add section to CODEOWNERS for maintainers of this doc
* use underscores to reference the file easier in CODEOWNERS
* update link to be direct and filter to function name
* makes the kivy connect button do the same username forgetting that /connect does to fix an issue where losing connection would make you unable to connect to a different server
* extract duplicate code
* per request, adds handling on any disconnect to forget the saved password as to not leak it to other servers
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Lingo: Add option to prevent shuffling postgame
* Allow roof access on door shuffle
* Fix broken unit test
* Simplified THE END edge case
* Revert unnecessary change
* Review comments
* Fix mastery unit test
* Update generated.dat
* Added player's name to error message
* [TLOZ]: Fix determinism / Add Location Name Groups / Remove Level 9 Junk Fill
Axing the final uses of world.multiworld.random that were missed before, hopefully fixing the determinism issue brought up in Issue #3664 (at least on TLOZ's end, leaving SMZ3 alone). Also adding location name groups finally, as well as axing the Level 9 Junk Fill because with the new location name groups players can choose to exclude Level 9 with exclude locations instead.
* location name groups
* add take any item and sword cave location name groups
* use sets like you're supposed to, silly
* update the addresses hopefully
* todo
* update address for steam and epic
* oops
* leftover hard address
* made auto tracking say which version of the game
* not needed anymore since they were updated
* FFMQ Efficiency improvement and use new options methods
* Hard check for 0x01 game status
* Fixes
* Why were Mac's Ship entrance hints excluded?
* Two remaining per_slot_randoms purged
* reformat generate_early
* Utils.parse_yaml
* Lingo: Add pilgrimage logic through Starting Room
* Added unit test
* Reverse order of two doors in unit test
* Remove print statements from TestPilgrimage
* Update generated.dat
* - Extracted walnut logic to a Mixin so it can be used in content pack requirements
* - Add 100 walnut requirements to the Queen of Sauce Cookbook
* - Woops a file wasn't added to previous commits
* - Make the queen of sauce cookbook a ginger island only thing, due to the walnut requirement
* - Moved the book in the correct content pack
* - Removed an empty class that I'm not sure where it came from
* makes the kivy connect button do the same username forgetting that /connect does to fix an issue where losing connection would make you unable to connect to a different server
* extract duplicate code
* make sure number of month is actually a int
* improve rule explain like in pr
* remove redundant if in can_complete_bundle
* assert number is int so cache is not bloated
* escape markup in uncolored text
* Fix comment to allign with style guide
Fixes the comment so it follows the style guide, along with making it
better explain the code.
* Make more concise
* Update UndertaleClient.py Fixed output location of the patched game
Fixed the error that when the client is opened outside of the archipelago folder, the patched folder would be created in there which on windows ends up trying to create it in the system32 folder
Bug Report: https://discord.com/channels/731205301247803413/1148330675452264499/1237412436382973962
* Undertale: removed unnecessary wrapping in UndertaleClient.py
I did not know os.path.join was unnecessary in this case the more you know.
* Tests, WebHost: move out setUp and fix typing in api_generate
Also fixes a typo
and changes client to be per-test rather than a ClassVar
* Tests, WebHost: add tests for display_log endpoint
* Tests, WebHost: add tests for host_room endpoint
* Tests, WebHost: enable Flask DEBUG mode for tests
This provides the actual error if a test raised an exception on the server.
* Tests, WebHost: use user_path for logs
This is what custom_server does now.
* Tests, WebHost: avoid triggering security scans
Focus of the Update: Compatibility with Stardew Valley 1.6 Released on March 19th 2024
This includes randomization for pretty much all of the new content, including but not limited to
- Raccoon Bundles
- Booksanity
- Skill Masteries
- New Recipes, Craftables, Fish, Maps, Farm Type, Festivals and Quests
This also includes a significant reorganisation of the code into "Content Packs", to allow for easier modularity of various game mechanics between the settings and the supported mods. This improves maintainability quite a bit.
In addition to that, a few **very** requested new features have been introduced, although they weren't the focus of this update
- Walnutsanity
- Player Buffs
- More customizability in settings, such as shorter special orders, ER without farmhouse
- New Remixed Bundles
* Add hidden early symbol item option, make some unit tests
* Add early symbol item false to the arrows test
* I guess it's not an issue
* more tests
* assertEqual
* cleanup
* add minimum symbols test for all 3 modes
* Formatting
* Add more minimal beatability tests
* one more for the road
* I HATE THIS AAAAAAAAAAAHHHHHHHHHHH WHY DID WE GO WITH OPTIONS
* loiaqeäsdhgalikSDGHjasDÖKHGASKLDÖGHJASKLJGHJSAÖkfaöslifjasöfASGJÖASDLFGJ'sklgösLGIKsdhJLGÖsdfjälghklDASFJghjladshfgjasdfälkjghasdöLfghasd-kjgjASDLÖGHAESKDLJGJÖsdaLGJHsadöKGjFDSLAkgjölSÄDghbASDFKGjasdLJGhjLÖSDGHLJASKDkgjldafjghjÖLADSFghäasdökgjäsadjlgkjsadkLHGsaDÖLGSADGÖLwSdlgkJLwDSFÄLHBJsaöfdkHweaFGIoeWjvlkdösmVJÄlsafdJKhvjdsJHFGLsdaövhWDsköLV-ksdFJHGVöSEKD
* fix imports (within apworld needs to be relative)
* Update worlds/witness/options.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Sure
* good suggestion
* subtest
* Add some EP shuffle unit tests, also an explicit event-checking unit test
* add more tests yay
* oops
* mypy
* Update worlds/witness/options.py
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Collapse into one test :(
* More efficiency
* line length
* More collapsing
* Cleanup and docstrings
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Clean these functions up, get the hell out of here 5 parameter function
* Clean up a bunch of rules that no longer need to be multi-lined since the functions are shorter
* Clean up some range functions
* Update to use world instead of player like Vi recommended
* Fix merge conflict
* Fix after merge
* Change 'The Body main area' by 'The Body center area' for consistency
* Renaming some locations for consistency
* Adding a line for standard
* Replacing Cathedral by Mithalas Cathedral and addin Blind goal option
* Client option renaming for consistency
* Fix death link not working
* Removing death link from the option to put it client side
* Changing Left to Right
* Make witness apworld mostly pass mypy
* Fix all remaining mypy errors except the core ones
* I'm a goofy stupid poopoo head
* Two more fixes
* ruff after merge
* Mypy for new stuff
* Oops
* Stricter ruff rules (that I already comply with :3)
* Deprecated ruff thing
* wait no i lied
* lol super nevermind
* I can actually be slightly more specific
* lint
* add Range= to log, making responses a lot smaller for massive rooms
* switch xhr to fetch
* post the form using fetch if possible
* also refresh log faster while waiting for command echo / response
* do not follow redirect, saving a request
* do not post empty body
* smooth-scroll the log view
* paste the log into the div when loading the HTML (up to 1MB, rest will be `fetch`ed)
* fix duplicate charset in display_log response
* Add note about bushes to logic section of readme
* Fix missing logic on bridge switch chest in upper zig
* Revise upper zig rule change to account for ER
* Add imo all needed options to fill_slot_data that are worth tracking in the poptracker pack. This is aimed at providing information for the oot poptracker-pack for autofilling of settings within this pack.
* cap line length at 120 and reorganize list
---------
Co-authored-by: StripesOO7 <54711792+StripeesOO7@users.noreply.github.com>
* Updated the options definitions to the new api
* Fixed the wrong base class being used for UndertaleOptions
* Undertale: Added get_filler_item_name to Undertale, changed multiworld.per_slot_randoms to self.random, removed some unused imports in options.py, and fixed rules.py still using state.multiworld instead of world.options, and simplified the set_completion_rules function in rules.py
* Undertale: Fixed it trying to add strings to the finished item pool
* fixed 1000g item not being in the key items pool for Undertale
* Removed ".copy()" for the junk_weights, reformatted the requested lines to have less new lines, and changed "itempool += [self.create_filler()]" to "itempool.append(self.create_filler())"
* Change setup_en.md to use Latest releases page
Really simple change to point users to the Latest release page instead of the Releases page. Saw a user accidentally download 0.3.6 because it was the last item on the page (they're accustomed to scrolling down to the bottom of the page in GitHub for the Assets section), and this change prevents that outright.
* Update setup_en.md
Rewrite text and link to restore semantic compatibility.
for doom 2, some of the armor and health weights were nudged down
to compensate for the addition of the megasphere
for heretic, the torch was just added without changing anything else,
as I felt doing so would negatively impact the distribution of
artifacts (and personally I already feel there's too few in a game)
Added require_pokedex, blind_trainers, and area_1_to_1 mapping, which would be helpful to the poptracker packs to accurately reflect the checks available to players.
* Render option documentation as reStructuredText in the WebView
This means that options can use the standard Python documentation
format, while producing much nicer-looking documentation in the
WebView with things like emphasis, lists, and so on.
* Opt existing worlds out of rich option docs
This avoids breaking the rendering of existing option docs which were
written with the old plain text rendering in mind, while also allowing
new options to default to the rich text rendering instead.
* Use reStructuredText formatting for Lingo Options docstrings
* Disable raw and file insertion RST directives
* Update doc comments per code review
* Make rich text docs opt-in
* Put rich_text_options_doc on WebWorld
* Document rich text API
* Code review
* Update docs/options api.md
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Update Options.py
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
---------
Co-authored-by: Chris Wilson <chris@legendserver.info>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Player Options: Fix Named Range displays
* Also add validation to the NamedRange class itself
* Don't break Stardew
* Comment
* Do replace first so title works correctly
* Bring change to Weighted Options as well
* WebHost: Fix "Add" button for Progression Balancing causing a weird redirect
This "add" button is part of a form, which causes it to submit the form, because the default type for a button is "submit".
This PR changes the type of the button to "button", which causes it to not submit the form and just execute its normal effect.
(An alternative would be `event.preventDefault()` but that seems less clean to me, but also I'm not a HTML/JS dev)
* There's also multiple.
* CI: build: fail fast if setup.py fails on windows
* CI: build: fail for missing uploads, rework compression
Upload-artifact allows setting compression level now.
The change speeds up both upload and extraction.
* CI: match build gz in release
* CI: build: verify worlds all load
* CI: build: generate a game
* Generate: move worlds loaded exception to allow settings to init from worlds
* CI: build: build setup before running tests
* Speedups: remove dependency on c++
* Speedups: intset: handle malloc failing
* Speedups: intset: fix corner case for int64 on 32bit systems
original idea was to only use bucket->val if int<pointer,
but we always have a union now anyway
* Speedups: add size comment to player_set bucket configuration
* test: more tests for LocationStore.find_item
* test: require _speedups in CI
This kind of tests that the build succeeds.
* test: even more tests for LocationStore.find_item
* Speedups: intset uniform comment style
* Speedups: intset: avoid memory leak when realloc fails
* Speedups: intset: make `gcc -pedantic -std=c99 -fanalyzer` without warnings
Unnamed unions are not in C99, this got fixed.
The overhead of setting count=0 is minimal or optimized-out and silences -fanalizer (see comment).
* Speedups: don't leak memory in case of exception
* Speedups: intset: validate alloc and free
This won't happen in our cython, but it's still a good addition.
* CI: add test framework for C/C++ code
* CI: ctest: fix cwd
* Speedups: intset: ignore msvc warning
* Tests: intset: revert attempt at no-asan
We solve this with env vars in ctest now, and this fails for msvc.
* Test: cpp: docs: fix typo
* Test: cpp: docs: fix another typo
* Test: intset: proper bucket count for Negative test
INTxx_MIN % 1 would not produce a negative number, so the test was flawed.
Previously, this crashed because `typing.NamedTuple` fields such as
`group.name` aren't assignable. Now it will only fail for group names
that are actually incorrectly cased, and will fail with a better error
message.
* Tests: Add checksum validation to the postgen datapackage test
* add a special case for the test world datapackage rather than hidden
* add the test world to the datapackage instead of special casing around it
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* client: Added command history access with up/down and command echo in common client
* client: Changed command echo colour to orange
* client: removed star import from typing
* client: updated code style to match style guideline
* client: adjusted ordering of calling parent constructor in command prompt input constructor
* client: Fixed issues identified by beauxq in PR; fixed some typing issues
* client: PR comments; replaced command history list with deque
* Core: hot reload components from installed apworld
* address PR reviews
`Launcher` widget members default to `None` so they can be defined in `build`
`Launcher._refresh_components` is not wrapped
loaded world goes into `world_sources` so we can check if it's already loaded.
(`WorldSource` can be ordered now without trying to compare `None` and `float`)
(don't load empty directories so we don't detect them as worlds)
* clarify that the installation is successful
* Test: add hosting simulation test
* WebHost: add weak typing to get_app()
* MultiServer: add typing to auto_saver_thread
* MultiServer: don't cancel task, properly end it
* customserver: stop auto-save thread from saving after shutdown
and make sure it stops, another potential memory leak
* MultiServer, customserver: make datapackage small again
* customserver: collect/finish room tasks
Hopefully fixes the memory leak we are seeing
* CI: test hosting
* Test: hosting: verify autohoster saves on Ctrl+C
* customserver: save when stopping via Ctrl+C
* A Short Hike: New options and stuff
* Add to slot data for poptracker
* Address concerns
* Address concerns
* Fix indentations
* Update option description
* Address all issues
* Group "or"s
* Core: add unit tests for the numeric options
* document using a collection and the hashing quirk
* add another example for the footgun
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
There was a bug that made lots of flashing terrain if a game over happened in certain places.
(And this could be dangerous for people sensitive to flashing lights.)
There was also a bug with a bad sound effect after a game over.
* Ensure that included/starter songs only include those within enabled dlcs.
* Allow filtering traps by trap instead of by category.
* Add in the currently available limited time dlcs to the dlc list.
* Add the option group to the webhost and cleanup some errors.
* Fix trap list.
* Update tests. Add new ones to test correctness of new features.
* Remove the old Just As Planned option
* Make traps order alphabetically. Also adjust the title for traps.
* Adjust new lines to better fit the website.
* Style fixes.
* Test adjustments and a fix due to test no longer having just as planned dlc.
* Undo spacing changes as it breaks yaml generation.
* Fix indenting in webhost.
* Add the old options in as removed. Also clean up unused import.
* Remove references to the old allow_just_as_planned_dlc_songs option in Muse Dash tests.
* Add newline to end of file.
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* duh
* Fuck it
* Major fixes
* a
* b
* Even more fixes
* New option - NoFreeRoamFinale
* a
* Hat Logic Fix
* Just to be safe
* multiworld.random to world.random
* KeyError fix
* Update .gitignore
* Update __init__.py
* Zoinks Scoob
* ffs
* Ruh Roh Raggy, more r-r-r-random bugs!
* 0.9b - cleanup + expanded logic difficulty
* Update Rules.py
* Update Regions.py
* AttributeError fix
* 0.10b - New Options
* 1.0 Preparations
* Docs
* Docs 2
* Fixes
* Update __init__.py
* Fixes
* variable capture my beloathed
* Fixes
* a
* 10 Seconds logic fix
* 1.1
* 1.2
* a
* New client
* More client changes
* 1.3
* Final touch-ups for 1.3
* 1.3.1
* 1.3.3
* Zero Jumps gen error fix
* more fixes
* Formatting improvements
* typo
* Update __init__.py
* Revert "Update __init__.py"
This reverts commit e178a7c0a6.
* init
* Update to new options API
* Missed some
* Snatcher Coins fix
* Missed some more
* some slight touch ups
* rewind
* a
* fix things
* Revert "Merge branch 'main' of https://github.com/CookieCat45/Archipelago-ahit"
This reverts commit a2360fe197, reversing
changes made to b8948bc495.
* Update .gitignore
* 1.3.6
* Final touch-ups
* Fix client and leftover old options api
* Delete setup-ahitclient.py
* Update .gitignore
* old python version fix
* proper warnings for invalid act plandos
* Update worlds/ahit/docs/en_A Hat in Time.md
Co-authored-by: Danaël V. <104455676+ReverM@users.noreply.github.com>
* Update worlds/ahit/docs/setup_en.md
Co-authored-by: Danaël V. <104455676+ReverM@users.noreply.github.com>
* 120 char per line
* "settings" to "options"
* Update DeathWishRules.py
* Update worlds/ahit/docs/en_A Hat in Time.md
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* No more loading the data package
* cleanup + act plando fixes
* almost forgot
* Update Rules.py
* a
* Update worlds/ahit/Options.py
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
* Options stuff
* oop
* no unnecessary type hints
* warn about depot download length in setup guide
* Update worlds/ahit/Options.py
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
* typo
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
* Update worlds/ahit/Rules.py
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
* review stuff
* More stuff from review
* comment
* 1.5 Update
* link fix?
* link fix 2
* Update setup_en.md
* Update setup_en.md
* Update setup_en.md
* Evil
* Good fucking lord
* Review stuff again + Logic fixes
* More review stuff
* Even more review stuff - we're almost done
* DW review stuff
* Finish up review stuff
* remove leftover stuff
* a
* assert item
* add A Hat in Time to readme/codeowners files
* Fix range options not being corrected properly
* 120 chars per line in docs
* Update worlds/ahit/Regions.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Update worlds/ahit/DeathWishLocations.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Remove some unnecessary option.class.value
* Remove data_version and more option.class.value
* Update worlds/ahit/Items.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Remove the rest of option.class.value
* Update worlds/ahit/DeathWishLocations.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* review stuff
* Replace connect_regions with Region.connect
* review stuff
* Remove unnecessary Optional from LocData
* Remove HatType.NONE
* Update worlds/ahit/test/TestActs.py
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* fix so default tests actually don't run
* Improve performance for death wish rules
* rename test file
* change test imports
* 1000 is probably unnecessary
* a
* change state.count to state.has
* stuff
* starting inventory hats fix
* shouldn't have done this lol
* make ship shape task goal equal to number of tasksanity checks if set to 0
* a
* change act shuffle starting acts + logic updates
* dumb
* option groups + lambda capture cringe + typo
* a
* b
* missing option in groups
* c
* Fix Your Contract Has Expired being placed on first level when it shouldn't
* formatting
* major logic bug fix for death wish
---------
Co-authored-by: Danaël V. <104455676+ReverM@users.noreply.github.com>
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
Co-authored-by: Ixrec <ericrhitchcock@gmail.com>
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
* Fix improper css for word-break on player-options page
* Add default handling to weighted-options types
* Remove random-low/mid/high from Toggle, Choice, and TextChoice,
* Port key sorting for OptionList and OptionSet from player-options to weighted-options
* Ensure Choice and TextChoice values are set properly
* Remove debug line 🤦♂️
* Pokemon RB: Add an item group for each HM
HMs are suffixed with the name of the move, e.g. "HM02 Fly". If TM
move are randomized, they do not have the move name, e.g. "TM02".
If someone hints for an HM using the just the number, the fuzzy matching
sees "TM02" as closer than "HM02 Fly", and in fact sees it as close
enough to not ask the user to confirm, leading them to waste hint points
on non-progression item that they didn't intend.
Emerald already does this for this reason, adding the same for RB.
* Add the new groups for HMs in the item_table instead
* Refactor postgame code to be more readable
* Change all references to options to strings
* oops
* Fix some outdated code related to yaml-disabled EPs
* Small fixes to short/longbox stuff (thanks Medic)
* comment
* fix duplicate
* Removed triplicate lmfao
* Better comment
* added another 'unfun' postgame consideration
* comment
* more option strings
* oops
* Remove an unnecessary comparison
* another string missed
* New classification changes (Credit: Exempt-Medic)
* Don't need to pass world
* Comments
* Replace it with another magic system because why not at this point :DDDDDD
* oops
* Oops
* Another was missed
* Make events conditions. Disable_Non_Randomized will no longer just 'have all events'
* What the fuck? Has this just always been broken?
* Don't have boolean function with 'not' in the name
* Another useful classification
* slight code refactor
* Funny haha booleans
* This would create a really bad merge error
* I can't believe this actually kind of works
* And here's the punchline. + some bugfixes
* Comment dat code
* Comments galore
* LMAO OOPS
* so nice I did it twice
* debug x2
* Careful
* Add more comments
* That comment is a bit unnecessary now
* Fix overriding region connections
* Correct a comment
* Correct again
* Rename variable
* Idk I guess this is in this branch now
* More tweaking of postgame & comments
* This is commit just exists to fix that grammar error
* I think I can just fucking delete this now???
* Forgot to reset something here
* Delete dead codepath
* Obelisk Keys were getting yote erroneously
* More comments
* Fix duplicate connections
* Oopsington III
* performance improvements & cleanup
* More rules cleanup and performance improvements
* Oh cool I can do this huh
* Okay but this is even more swag tho
* Lazy eval
* remove some implicit checks
* Is this too magical yet
* more guard magic
* Maaaaaaaagiccccccccc
* Laaaaaaaaaaaaaaaazzzzzzyyyyyyyyyyy
* Make it docstring
* Newline bc I like that better
* this is a little spooky lol
* lol
* Wait
* spoO
* Better variable name and comment
* Improved comment again
* better API
* oops I deleted a deepcopy
* lol help
* Help???
* player_regionsns lmao
* Add some comments
* Make doors disabled properly again. I hope this works
* Don't disable lasers
* Omega oops
* Make Floor 2 Exit not exist
* Make a fix that's warps compatible
* I think this was an oversight, I tested a seed and it seems to have the same result
* This is definitely less Violet than before
* Does this feel more violet lol
* Exception if a laser gets disabled, cleanup
* Ruff
* >:(
* consistent utils import
* Make autopostgame more reviewable (hopefully)
* more reviewability
* WitnessRule
* replace another instance of it
* lint
* style
* comment
* found the bug
* Move comment
* Get rid of cache and ugly allow_victory
* comments and lint
* Started to create the french doc
* First version of sc2 setup in french finish, created the file for the introduction of the game in french
* French-fy upgrade in setup, continue translation of game description
* Finish writing FR game page, added a link to it on the english game page. Re-read and corrected both the game page and setup page.
* Corrected a sentence in the SC2 English setup guide.
* Applied 120 carac limits for french part, applied modification for consistency.
* Added reference to website yaml checker, applied several wording correction/suggestions
* Modified link to AP page to be in relative (fr/en), uniformed SC2 and random writing (fr), applied some suggestons in writing quality(fr), added a mention to the datapackage (fr/en), enhanced prog balancing recommendation (fr)
* Correction of some grammar issues
* Removed name correction for english part since done in other PR; added mention to hotkey and language restriction
* Applied suggestions of peer review
* Applied mofications proposed by reviewer about the external website
---------
Co-authored-by: neocerber <neorcerber@gmail.com>
* allow option groups to specify whether they should be hidden or not
* allow worlds to override whether game options starts collapsed
* remove Game Options assert so the visibility of that group can be changed
* if "Game Options" or "Item & Location Options" groups are specified, fix casing
* don't allow item & location options to have duplicates of the auto added options
* use a generator instead of a comprehension
* use consistent naming
* move item_and_loc_options out of the meta class and into the Options module
* don't allow empty world specified option groups
* reuse option_group generation code instead of rewriting it
* delete the default group if it's empty
* indent
* Core: Utils.py typing
`get_fuzzy_results` typing
There are places that this is called with a `word_list` that is not a `Sequence`, and it is valid (e.g., `set` or `dict`).
To decide the right type, we look at how `word_list` is used:
- the parameter to `len` - requires `__len__`
- the 2nd parameter to `map` - requires `__iter__`
Then we look at https://docs.python.org/3/library/collections.abc.html#collections-abstract-base-classes and ask what is the simplest type that includes both `__len__` and `__iter__`: `Collection`
(Python 3.8 requires using the alias in `typing`, instead of `collections.abc`)
* a bit more typing and cleaning
* fine, take away my fun for something that no one is ever going to see anyway...
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* - Fix link in Stardew Setup Guide
* - Create option groups for Stardew Valley
* - Cleaned up the imports
* - Fixed double quotes and trailing comma
* - Improve order in the multipliers category
* Fixed shop changes
* Update option description
* Apply suggestions from Vi's review (thank you)
* Fix for plando connections on a full scene
* Plando connections should work better now for complicated paths
* Even more good plando connections yes
* Starting to move the info over
* Fixing up formatting a bit
* Remove unneeded item info
* Put in updated_reachable_regions, to replace add_dependent_regions
* Updated to match ladder shuffle
* More stuff I guess
* It functions!
* It mostly works with plando now, some slight issues still
* Fixed minor logic bug
* Fixed world leakage
* Change exception message
* Make exception message better for troubleshooting failed connections
* Merged with main
* technically a logic fix but it would never matter cause no start shuffle
* Add a couple more alias item groups cause yeah
* Rename beneath the vault front -> beneath the vault main
* Flip lantern access rule to the region
* Add missing connection to traversal reqs
* Move start_inventory_from_pool to the top so that it's next to start_inventory
* Reword the fixed shop description slightly
* Refactor per ixrec's comments
* Greatly reduced an overcomplicated block because Vi is cool and smart and also cool
* Rewrite traversal reqs thing per Vi's comments
when switching to multiple rooms per process, we ended up modifying the static server data
because that's how _load works and the data is now shared between multiple rooms.
* Remove outdated header change for ROM verification
* Update Connections to be compatible with python ver. 3.8
* Update inno_setup.iss
* Update inno_setup.iss
* Implement support for option groups. WebHost options pages still need to be updated.
* Remove debug output
* In-progress conversion of player-options to Jinja rendering
* Support "Randomize" button without JS, transpile SCSS to CSS, include map file for later editors
* Un-alphabetize options, add default group name for item/location Option classes, implement more option types
* Re-flow UI generation to avoid printing rows with unsupported or invalid option types, add support for TextChoice options
* Support all remaining option types
* Rendering improvements and CSS fixes for prettiness
* Wrap options in a form, update button styles, fix labels, disable inputs where the default is random, nuke the JS
* Minor CSS tweaks, as recommended by the designer
* Hide JS-required elements in noscript tag. Add JS reactivity to range, named-range, and randomize buttons.
* Fix labels, add JS handling for TextChoice
* Make option groups collapsable
* PEP8 current option_groups progress (#2604)
* Make the python more PEP8 and remove unneeded imports
* remove LocationSet from `Item & Location Options` group
* It's ugly, but YAML generation is working
* Stop generating JSON files for player-options pages
* Do not include ItemDict entries whose values are zero
* Properly format yaml output
* Save options when form is submitted, load options on page load
* Fix options being omitted from the page if a group has an even number of options
* Implement generate-game, escape option descriptions
* Fix "randomize" checkboxes not properly setting YAML options to "random"
* Add a separator between item/location groups and items/locations in their respective lists
* Implement option presets
* Fix docs to detail what actually ended up happening
* implement option groups on webworld to allow dev sorting (#2616)
* Force extremely long item/location/option names with no spaces to text-wrap
* Fix "randomize" button being too wide in single-column display, change page header to include game name
* Update preset select to read "custom" when updating form inputs. Show error message if the user doesn't input a name
* Un-break weighted-options, add option group names to weighted options
* Nuke weighted-options. Set up framework to rebuild it in Jinja.
* Generate styles with scss, remove styles which will be replaced, add placeholders for worlds
* Support Toggle, DefaultOnToggle, and Choice options in weighted-options
* Implement expand/collapse without JS for worlds and option groups
* Properly style set options
* Implement Range and NamedRange. Also, CSS is hard.
* Add support for remaining option types. JS and backend still forthcoming.
* Add JS functionality for collapsing game divs, populating span values on range updates. Add <noscript> tag to warn users with JS disabled.
* Support showing/hiding game divs based on range value for game
* Add support for adding/deleting range rows
* Save settings to localStorage on form submission
* Save deleted options on form submission
* Break weighted-options into a per-game page.
- Break weighted-options into a per-game page
- Add "advanced options" links to supported games page
- Use details/summary tags on supported games, player-options, and weighted-options
- Fix bug preventing previously deleted rows from being removed on page load if JS is enabled
- Move route handling for options pages to options.py
- Remove world handling from weighted-options
* Implement loading previous settings from localStorage on page load if JS is enabled
* Weighted options can now generate YAML files and single-player games
* options pages now respect option visibility settings for simple and complex pages
* Remove `/weighted-settings` redirect, fix weighted-options link on player-options page
* Fix instance of AutoWorld not having access to proper `random`
* Catch instances of frozenset along with set
* Restore word-wrap in tooltips
* Fix word wrap in player-options labels
* Add `dedent` filter to help with formatting tooltips in player-options
* Do not change the ordering of keys when printing yaml files
* Move necessary import out of conditional statement
* Expand only the first option group by default on both options pages
* Respect option visibility when generating yaml template files
* Swap to double quotes
* Replace instances of `/weighted-settings` with `/weighted-options`, swap out incomplete links
* Strip newlines and spaces after applying dedent filter
* Fix documentation for option groups
* Update site map
* Update various docs
* Sort OptionSet lists alphabetically
* Minor style tweak
* Fix extremely long text overflowing tooltips
* Convert player-options to use CSS grid instead of tables
* Do not display link to weighted-options page on supported games if the options page is an external link
* Update worlds/AutoWorld.py
Bugfix by @alwaysintreble
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Fix NamedRange options not being properly set if a preset it loaded
* Move option-presets route into options.py
* Include preset name in YAML if not "default" and not "custom"
* Removed macros for PlandoBosses and DefaultOnToggle, as they were handled by their parent classes
* Fix not disabling custom inputs when the randomize button is clicked
* Only sort OptionList and OptionSet valid_keys if they are unordered
* Quick style fixes for player-settings to give `select` elements `text-overflow: ellipsis` and increase base size of left-column
* Prevent showing a horizontal scroll bar on player-options if the browser width was beneath a certain threshold
* Fix a bug in weighted-options which prevented inputting a negative value for new range inputs
---------
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* some worlds: some typing in `LocalRom`
### `read_bytes`
It's not safe to return `bytearray` when we think it's `bytes`
```python
a = rom.read_bytes(8, 3)
hash(a) # This won't crash, right?
```
### `write_bytes`
`Iterable[SupportsIndex]` is what's required for `bytearray.__setitem__(slice, values)`
We need to add `__len__` for the `len(values)` in this function.
* remove `object` inheritance
* Initial implementation of Yu-Gi-Oh! WC 2006
* Added Opponents and banlists
* Initial implementation of Yu-Gi-Oh! WC 2006
* Added Opponents and banlists
* Added Campaign Logic
* Added Bonuses Logic
* Added challenge logic
* fixed yugioh client
* ygo06 rom cleanup and include lua
* ygo06 patch cleanup
* ygo06 move client to world folder
* lots of small changes
* bug fixes
* implemented filler item for yugioh06
* BizHawkClient: Add client and connector
* BizHawkClient: Add launcher component and inno_setup lines
* BizHawkClient: Misc stability updates and small improvements
Bad commit organization a consequence of working with two different branches and not keeping the commits separated
* BizHawkClient: Add docstrings
* BizHawkClient: Pull in changes from other branch
* BizHawkClient: Fix no handler message not displaying after changed ROMs
* BizHawkClient: Remove extra print statement from lua
* BizHawkClient: Change version command to use raw strings
* BizHawkClient: Change script version to single integer
* YGO06: added logic for "all expect type forbidden" limited duels
* YGO06: Structure Deck choice now affects logic. Fixed a bug with tier 5 campaign opponents. Added logic for TD16 Union.
* BizHawkClient: Add newline to version for lua script
* BizHawkClient: Call send_connect from BizHawkClient's watcher loop
* BizHawkClient: Add handling for failed request getting script version
* BizHawkClient: Have base64.lua check lua version explicitly for bit operations
On 2.9, it would detect LuaJIT and flood the console with deprecation warnings
* BizHawkClient: Update connector script for slightly better errors and address Gambatte frame sync issue
* BizHawkClient: Remove accidentally added print statements
* BizHawkClient: Fix connector server not closing correctly
* BizHawkClient: Move some connector code around, some linting
* BizHawkClient: Small cleanup in lua
* BizHawkClient: Lua linting
* BizHawkClient: Remove outdated sentences in docstrings
* YGO06: Logic additions and bug fixes
* BizHawkClient: Correctly null check patch file arg
* BizHawkClient: Initialize logging
* BizHawkClient: Move code to worlds/_bizhawk
Also splits out BizHawk communication functions to their own file for use outside this client
* BizHawkClient: Add license to connector lua, add types to docs
* BizHawkClient: Add module docstrings
* YGO06: Logic additions
* BizHawkClient: Allow clients to define multiple systems
* BizHawkClient: Better logging and handling of interruptions to connection to script
* YGO06: Logic additions
* YGO06: Added text to options
* YGO06: Ported to bizhawk client
* YGO06: fix goal not being detected
* YGO06: fix access item rule for tier 5 column 1 and 2
* YGO06: docu and bug fixes
* YGO06: change name
* YGO06: some fixes
* YGO06: fix starting opponent and booster not applying
* YGO06: added option to reduce the amount of challenges and remove the no ban list from pool.
* YGO06: added rom being asked for on first use
* YGO06: fix rules for challenges
* YGO06: create proper rules for TD04 Ritual Summon
* YGO06: mark most banlists as usefull instead of progression
* YGO06: reduce the required core boosters across the board
* YGO06: fix client not loading if another game already loaded the bizhawk client
* YGO06: fix client not finding the bizhawk client.
* YGO06: fix TD08 Draw not giving out an item
* YGO06: small text changes
* YGO06: update to version 0.4.4
* YGO06: logic mixin clean-up
* YGO06: added option for campaign opponents as goal
* Pokemon Emerald add encounter table randomization
* Pokemon Emerald: Item ball randomization working
* Pokemon Emerald: Clean up code a little
* Pokemon Emerald: Partial rework of region/location creation
* Pokemon Emerald: Dedupe items and add more readable names
* Refactor region creation to manually defined regions
* Split region json
* Use new data.json with flattened constants and add HM locations
* YGO06: bug fixes
* YGO06: bug fix
* YGO06: changes default options to be more beginner friendly
* YGO06: attempt at universal tracker support. Settings are stored in slot data now.
* YGO06: fix for older python versions
* YGO06: fix slot data
* YGO06: added diiferent opponents to the campaign
* YGO06: fix small bug with opponent icons
* YGO06: fix unwanted changes
* YGO06: repair merge with main
* YGO06: map out all of the opponents
* YGO06: added opponent shuffle
* YGO06: added logic to opponent shuffle
* YGO06: added option to use ocg art
* YGO06: bug_fixes
* YGO06: removed todos, since they are not needed anymore
* YGO06: added draft mode
* YGO06: added logic to draft mode
* YGO06: Added Money multiplier when you lose
* YGO06: Fixed Unit Test errors
* YGO06: Added Random deck option
* YGO06: Bug fix with registering client
* YGO06: client clean-up
* YGO06: fixed card misspellings
* YGO06: removed unused imports and other small changes
* YGO06: small changes
* YGO06: fix generation error when the combination of starting with "No Banlist" and not adding "No Banlist" to the pool is selected
* YGO06: fix ocg art path overwriting Huge Revolution bugfix
* YGO06: added comments and other minor changes
* YGO06: fixed byte length in client for money
* YGO06: fixes for webhost and options
* YGO06: use the proper random function
* YGO06: change settings to options
* YGO06: move to procedure patch
* YGO06: fix imports
* YGO06: fix download link for patch not showing
* YGO06: remove unnecessary Optional
* YGO06: fix universal tracker stuff
* YGO06: add typings
* YGO06: small cleanup
* yugioh06: small change to setup
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* YGO06: remove logic mixin
* YGO06: fix create item and implement create filler and get filler item name
* YGO06: remove double lambdas
* YGO06: use pkgutil.get_data instaed pf zipFile
* YGO06: fix starting items being duplicated
* YGO06: lots of small changes
* YGO06: moved functions to match execution order
* YGO06: run ruff
* YGO06: run ruff format
* YGO06: fix ruff errors
* YGO06: undo ruff format for rules
* YGO06: move import to prevent circular dependency
* YGO06: remove unused class
* YGO06: optimizing rules
* YGO06: some optimization and small bug fix
---------
Co-authored-by: Zunawe <gyroscope15@gmail.com>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Docs: remove obsolete yaml generation info
This line was added when we didn't have the "Generate Template Options" button in the launcher.
* add information about `Launcher.py`
* Hylics 2: Remove Random Start option and replace it with Start Location option
* remove choice
* Readd random start to slot data
* newlines
* Add random_start as a Removed option
* Update advanced yaml guide wording
* Update options api as well
* Update exclude locations description slightly to use more current verbiage
* Update priority locations in options api.md to note what happens if it runs out
* Remove auto-added bullet points
* Slightly mess with wording to make it more succinct
* throw an error for unknown options
* move the error to the end of trigger resolution and make trigger names valid
* add bad hardcoded stuff for LTTP
* use itertools.chain instead of a ChainMap
* remove accidental unused import
* make the check after both trigger resolutions so no valid keys are missed, and only check relevant game.
* log a warning instead of crashing
* delete options from the weights once it gets registered for cleaner erroring
* grammar hard
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Add has_list and count_list and improve (?) count_group
* MESSENGER STOP
* Add docstrings to has_list and count_list
* Add docstrings for has_group and count_group as well
* oops
* Rename to has_from
* docstrings improvement again
* Docstring
* Pokemon Emerald: Add event ticket locations to client data store flags
* Pokemon Emerald: Add regi doors event flag
* Pokemon Emerald: Add more tracker flags
* Cleanup and new option support
* Handle new locations
* Support higher Strawberry counts
* Don't add start inventory items to the pool
* Support Move Shuffle functionality and items
* Hard and Move Shuffle Logic
* Fix Options
* Update CHANGELOG.md
* Add standard moves logic for signs 3 and 4
* Fix Option Tooltip
* Add tracker link to setup guide
* Fix unit test
* Fix option tooltips
* Missing Space
* Move option checking out of rule function
* Delete just_gen500.bat
* Core: allow for single player state sweeping
* Fill: have distribute items use single_player fill when it can
* oop
* pass locations to sweep_for_events instead of the player
* finally found the diff that was breaking swap
* LTTP fills everyone's dungeons at once, not just a single player's
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Fixed Logic in Rules.py
As of easy logic of this goal is
set_rule(world.multiworld.get_location("GO! GO! MARIO!!: Stars", player), lambda state: logic.has_midring(state) or (state.has("Tulip", player) and logic.cansee_clouds(state)))
normal logic shouldn't need any collectable.
* Corrected Logic Rules.py
* Update entrance rando description to discuss seed groups
* Starting off, setting up some names
* It lives
* Some preliminary plando connection handling, probably has errors
* Add missed comma
* if -> elif
* I think this is working properly to handle plando connections
* Update comments
* Fix up shop -> shop portal stuff
* Add back comma that got removed for no reason in the ladder PR
* Remove unnecessary if else
* add back the actually necessary if but not the else
* okay they were both necessary
* Update entrance rando description
* blasphemy
Co-authored-by: Silent <110704408+silent-destroyer@users.noreply.github.com>
* Rename other instances of tunc -> tunic
* Update per Vi's review (thank you)
* Fix a not that shouldn't have been
* Rearrange, update per Vi's comments (thank you)
* Fix indent
* Add a .value
* Add .values
* Fix bad comparison
* Add a not that was supposed to be there
* Replace another isinstance
* Revise option description
* Fix per Kaito's comment
Co-authored-by: Kaito Sinclaire <ks@rosenthalcastle.org>
---------
Co-authored-by: Silent <110704408+silent-destroyer@users.noreply.github.com>
Co-authored-by: Kaito Sinclaire <ks@rosenthalcastle.org>
* Verify the default values of `Option`s.
Since `Option.verify()` can handle normalization of option names, this allows options to define defaults which rely on that normalization. For example, it allows a world to exclude certain locations by default.
This also makes it easier to catch errors if a world author accidentally sets an invalid default.
* Update Generate.py
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
---------
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
* Add location groups for each region
* Capitalize existing location groups
* Capitalize new boss location group names
* Update comment with capitalization
* Capitalize location_type in reigons.py
* Replaced the outdated Tracker Pack with a new one that is also pinned in the Discord channel
* Same change but for Spanish
* Update setup_en.md
* catching the bottom link as well
* See English Setupguide
* huzzah, location groups
* scope creep pog
* Apply suggestion to the other spot it is applicable at too
* apply berserker's suggestion
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
* Remove extra location group for shops
* Fire rod for magic wand
* Capitalize itme name groups
* Update docs to capitalize item name groups, remove the little section on aliases
since the aliases bit is really more for someone misremembering the name than anything else, like "fire rod" is because you played a lot of LttP, or Orb instead of Magic Orb is clear.
* Fix rule with item group name
* Capitalization is cool
* Fix merge mistake
* Add Flask group, remove Potions group
* Update docs to detail how to find item and location groups
* Revise per Vi's comment
* Fix test
* fuzzy matching please stop
* Remove test change that was meant for a different branch
---------
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
* Add better "verbs" on joining msg, and improve leaving msgs
* Add 'HintGame' tag, for projects like BKSudoku/APSudoku/HintMachine
* data in one place instead of 3
* Clean up 'ignore_game' loop to use any() instead
---------
Co-authored-by: beauxq <beauxq@yahoo.com>
* Options: Add an OptionError to specify bad options caused the failure
* inherit from ValueError instead of RuntimeError since this error should be thrown via bad input
---------
Co-authored-by: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com>
Properly name the Book to Book of Magic in Rules.py so you can actually possibly be expected to use Magical Rod plus Book of Magic to get through dark rooms. No wonder we tend to see candles so early oops.
Also adding a rule that you need candles for access to Level 8 so you aren't required to time a Rod+Book shot against a moblin to burn the bush. Might make this a logic trick or something later.
* Add a `robots.txt` file to prevent crawlers from scraping the site
* Added `ASSET_RIGHTS` entry to config.yaml to control whether `/robots.txt` is served or not
* Always import robots.py, determine config in route function
* Finish writing a comment
* Remove unnecessary redundant import and config
* ALTTP: Massive game tracker update.
* Adds dropdowns separated by region for each location and its checked status.
* Adds Bombs for bombless start seeds.
* Adds Triforce Pieces to track.
* Update icon image URLs to match in-game closer.
* Fix issue with grouped progressive items.
* Couple missed points.
* Another edge case with details being refreshed.
* Remove old commented out CSS
* Consolidate a table and move an erroneous location in wrong region.
* ALTTP: Updates and refactors to multi-tracker and player tracker.
* Removed some missed commented out code.
* Add triforce to prepare inventory logic.
* An option was added to enable or disable the pilgrimage, and it defaults to disabled. When disabled, the client will prevent you from performing a pilgrimage (i.e. the yellow border will not appear when you enter the 1 sunwarp). The sun painting is added to the item pool when pilgrimage is disabled, as otherwise there is no way into the Pilgrim Antechamber. Inversely, the sun painting is no longer in the item pool when pilgrimage is enabled (even if door shuffle is on), requiring you to perform a pilgrimage to get to that room.
* The canonical pilgrimage has been deprecated. Instead, there is logic for determining whether a pilgrimage is possible.
* Two options were added that allow the player to decide whether paintings and/or Crossroads - Roof Access are permitted during the pilgrimage. Both default to disabled. These options apply both to logical expectations in the generator, and are also enforced by the game client.
* An option was added to control how sunwarps are accessed. The default is for them to always be accessible, like in the base game. It is also possible to disable them entirely (which is not possible when pilgrimage is enabled), or lock them behind items similar to door shuffle. It can either be one item that unlocks all sunwarps at the same time, six progressive items that unlock the sunwarps from 1 to 6, or six individual items that unlock the sunwarps in any order. This option is independent from door shuffle.
* An option was added that shuffles sunwarps. This acts similarly to painting shuffle. The 12 sunwarps are re-ordered and re-paired. Sunwarps that were previously entrances or exits do not need to stay entrances or exits. Performing a pilgrimage requires proceeding through the sunwarps in the new order, rather than the original one.
* Pilgrimage was added as a win condition. It requires you to solve the blue PILGRIM panel in the Pilgrim Antechamber.
* CI: strict mypy check in github actions
mypy_files.txt is a list of files that will fail the CI if mypy finds errors in them
* don't need these
* `Any` should be a way to silence the type checker
* restrict return Any
* CI: pyright in github actions
* fix mistake in translating from mypy
* missed another change from mypy to pyright
* pin pyright version
* add more paths that should trigger check
* use Python instead of bash
* type error for testing CI
* Revert "type error for testing CI"
This reverts commit 99f65f3dad.
* oops
* don't need to redirect output
A world's player_logic is accessible from the LingoWorld object, so it's not necessary to also pass the LingoPlayerLogic object through every function that uses both.
* 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
* Replace all usages of player settings
* Fixed line break error
* Attempt to fix line break again
* Finally figure out what Pycharm did to this file
* Pycharm search failed me
* Remove duplicate s
* Update ArchipIdle
* Revert random newline changes from Pycharm
* Remove player settings from fstrings and rename --samesettings to --sameoptions
* Finally get PyCharm to not auto-format my commits, randomly inserting the newlines
* Removing player-settings
* Missed one
* Remove final line break error
Co-authored-by: Exempt-Medic <60412657+exempt-medic@users.noreply.github.com>
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: Exempt-Medic <ExemptMedic@Gmail.com>
* put constants in a bit more sensical order
* fix accidental incorrect scoping
* fix plando rules not being respected
* add docstrings for the plando functions
* fix the portal output pools being overwritten
* use shuffle and pop instead of removing by content so plando can go to the same area twice
* move portal pool rebuilding outside mapping creation
* remove plando_connection cleansing since it isn't shared with transition shuffle
* fix cloudy park 4 rule, zero deathlink message
* remove redundant door_shuffle bool
when generic ER gets in, this whole function gets rewritten. So just clean it a little now.
* properly fix deathlink messages, fix fill error
* update docs
* fix vanilla tool fishing rod requiring metal bars
fix vanilla skill requiring previous level (it's always the same rule or more restrictive)
* add test to ensure fishing rod need fish shop
* fishing rod should be indexed from 0 like a mentally sane person would do.
* fishing rod 0 isn't real, but it definitely can hurt you.
* reeeeeeeee
* Update contributing.md
* Update contributing.md
* Update contributing.md
* Update contributing.md
* Update contributing.md
* Update contributing.md
Added non-AP World specific information
* Update contributing.md
Fixed broken link
* Some minor touchups
* Update Contributing.md
Draft for version with picture
* Update contributing.md
Small word change
* Minor updates for conciseness, mostly
* Changed all instances of settings to options in info and setup guides
I combed through all world docs and swapped "setting" to "option" when this was refering to yaml options.
I also changed a leftover "setting" in option.py
* Update contributing.md
* Update contributing.md
* Update setup_en.md
Woops I forgot one
* Update Options.py
Reverted changes regarding options.py
* Update worlds/noita/docs/en_Noita.md
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Update worlds/sc2wol/docs/en_Starcraft 2 Wings of Liberty.md
revert change waiting for that page to be updated
* Update worlds/witness/docs/setup_en.md
* Update worlds/witness/docs/en_The Witness.md
* Update worlds/soe/docs/multiworld_en.md
Fixed Typo
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update worlds/witness/docs/en_The Witness.md
* Update worlds/adventure/docs/en_Adventure.md
* Update worlds/witness/docs/setup_en.md
* Updated Stardew valley to hopefully get rid of the merge conflicts
* Didn't work :dismay:
* Delete worlds/sc2wol/docs/setup_en.md
I think this will fix the merge issue
* Now it should work
* Woops
---------
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* initial work on procedure patch
* more flexibility
load default procedure for version 5 patches
add args for procedure
add default extension for tokens and bsdiff
allow specifying additional required extensions for generation
* pushing current changes to go fix tloz bug
* move tokens into a separate inheritable class
* forgot the commit to remove token from ProcedurePatch
* further cleaning from bad commit
* start on docstrings
* further work on docstrings and typing
* improve docstrings
* fix incorrect docstring
* cleanup
* clean defaults and docstring
* define interface that has only the bare minimum required
for `Patch.create_rom_file`
* change to dictionary.get
* remove unnecessary if statement
* update to explicitly check for procedure, restore compatible version and manual override
* Update Files.py
* remove struct uses
* ensure returning bytes, add token type checking
* Apply suggestions from code review
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* pep8
---------
Co-authored-by: beauxq <beauxq@yahoo.com>
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
Adds Archipelago support for Zork Grand Inquisitor, the 1997 point-and-click PC adventure game.
The client (based on `CommonClient`), on top of its regular Archipelago duties, fully handles the randomization of the game and the monitoring / modification of the game state. No game modding needed at all; the player is ready to play an Archipelago seed if they can play the vanilla game through ScummVM.
The "reverse engineering" (there's likely a better term for this...) of the game is my own original work and I included an MIT license at the root of my world directory.
A PopTracker pack was also created to help people learn the game: https://github.com/SerpentAI/ZorkGrandInquisitorAPTracker
Major Content update for Stardew Valley, including the following features
- Major performance improvements all across the Stardew Valley apworld, including a significant reduction in the test time
- Randomized Farm Type
- Bundles rework (Remixed Bundles and Missing Bundle!)
- New Settings:
* Shipsanity - Shipping individual items
* Monstersanity - Slaying monsters
* Cooksanity - Cooking individual recipes
* Chefsanity - Learning individual recipes
* Craftsanity - Crafting individual items
- New Goals:
* Protector of the Valley - Complete every monster slayer goal
* Full Shipment - Ship every item
* Craftmaster - Craft every item
* Gourmet Chef - Cook every recipe
* Legend - Earn 10 000 000g
* Mystery of the Stardrops - Find every stardrop (Maguffin Hunt)
* Allsanity - Complete every check in your slot
- Building Shuffle: Cheaper options
- Tool Shuffle: Cheaper options
- Money rework
- New traps
- New isolated checks and items, including the farm cave, the movie theater, etc
- Mod Support: SVE [Albrekka]
- Mod Support: Distant Lands [Albrekka]
- Mod Support: Hat Mouse Lacey [Albrekka]
- Mod Support: Boarding House [Albrekka]
Co-authored-by: Witchybun <elnendil@gmail.com>
Co-authored-by: Witchybun <96719127+Witchybun@users.noreply.github.com>
Co-authored-by: Jouramie <jouramie@hotmail.com>
Co-authored-by: Alchav <59858495+Alchav@users.noreply.github.com>
* Core: add layer for patches that don't use `Patch.py`
* bump container version
* APAutoPatchInterface name
* mystic quest change
* OoT and Adventure changes
* missed name in docstring
* container version compatibility
* Moves plaque location to front for better tracker referencing.
* Tiki should be Shaman.
* Hanging should be Gallows.
* Merrick spelling.
* Clarity change.
* proof of concept
* add dict support, block top/game level merge
* prevent key error when option being merged is new
* update triggers guide
* Add documentation about add/remove/replace
* move to trailing name instead of proper tag
* update docs
* confirm types
* Update Utils.py
* Update Generate.py
* pep8
* move to + syntax
* forgot to support sets
* specify received type of type error
* Update Generate.py
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
* Apply suggestion from review
* add test for update weights
* move test to new test case
* Apply suggestions from code review
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
---------
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Core: typing for `Option.default` and a few other `Option` class variables
This is a replacement for https://github.com/ArchipelagoMW/Archipelago/pull/2173
You can read discussion there for issues we found for why we can't have more specific typing on `default`
instead of setting a default in `Option` (where we don't know the type), we check in the metaclass to make sure they have a default.
* NumericOption doesn't need the type annotation that brings out the mypy bug
* SoE default ClassVar
Changelog:
Features:
- New optional Location Checks
- 3-Up Moons
- Hidden 1-Ups
- Bonus Blocks
- Blocksanity
- All blocks that contain coins or items are included, with the exception of:
- Blocks in Top Secret Area & Front Door/Bowser Castle
- Blocks that are unreachable without glitches/unreasonable movement
- New Items
- Special Zone Clear
- New Filler Items
- 1 Coin
- 5 Coins
- 10 Coins
- 50 Coins
- New Trap Items
- Reverse Trap
- Thwimp Trap
- SFX Shuffle
- Palette Shuffle Overhaul
- New Curated Palette can now be used for the Overworld and Level Palette Shuffle options
- Foreground and Background Shuffle options have been merged into a single setting
- Max possible Yoshi Egg value is 255
- UI in-game is updated to handle 3-digits
- New `Display Received Item Popups` option: `progression_minus_yoshi_eggs`
Quality of Life:
- In-Game Indicators are now displayed on the map screen for location checks and received items
- In-level sprites are displayed upon receiving certain items
- The Camera Scroll unlocking is now only enabled on levels where it needs to be
- SMW can now handle receiving more than 255 items
- Significant World Code cleanup
- New Options API
- Removal of `world: MultiWorld` across the world
- The PopTracker pack now has tabs for every level/sublevel, and can automatically swap tabs while playing if connected to the server
Bug Fixes:
- Several logic tweaks/fixes
"Major credit to @TheLX5 for being the driving force for almost all of this update. We've been collaborating on design and polish of the features for the last few months, but all of the heavy lifting was all @TheLX5."
* Added snes9x-nwa as recommended emulator to the setup guides
* Removed snes9x-nwa from the setup guides of DKC3 and SMW
* Update worlds/alttp/docs/multiworld_en.md
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Removed duplicate text
Minor grammar and spelling fixes
* Unified required software for SM, SMZ3 and SoE with ALTTP
* Added instructions for usage of BSNES-Plus for ALTTP, SM and SMZ3
---------
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* fix, maybe
* typegard for iterable of any
* wow I'm so tired I just changed the method name without changing what it actually does...
* also exclude bytes in is_iterable_but_str
* apply pr comments
* Update Utils.py
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* Revert "also exclude bytes in is_iterable_but_str"
This reverts commit cf087d2ee2.
---------
Co-authored-by: Doug Hoskisson <beauxq@users.noreply.github.com>
* 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>
* Tests: add test for all games multiworld and test for two player multiworld per game
* make assertSteps behave like call_all
* review improvements
* fix stage calling and loc copying in accessibility
* add docstrings
* lttp is on the options api now
* skip the all games multiworld for now. likely needs to be modified to test specific worlds
* move skip to the class
* Core: create the per world random object in the world constructor
* remove the check that multiworld exists
* add a deprecation warning to per_slot_randoms
* move random import and fix conflicts
* assert worlds don't exist before setting the multiworld seed
* fix the dlcq and sdv tests
* actually use the seed
* Corrected logic error.
Per discussion here: https://discord.com/channels/731205301247803413/1148330200891932742/1192138309120577646
At the moment, the logic expects Treasure Bumper 2 to require 1 bumper, Treasure Bumper 3 to require 2, etc., and for Treasure Bumper 1 to be in Sphere 1. This is incorrect, each Bumper check should require 1 Bumper item of it's type.
This corrects that. I've verified I was able to generate with it by editing my apworld locally, but I'm also not a programmer and don't know anything about tests. However, I'd think this is a simple change.
* Correct logic in Bumper Sticker unit tests
Off By One errors were rampant in the Bumper Stickers unit test logic. This should correct those errors.
* Correct use of "range" function
The function setting the access rules for Treasure and Booster Bumpers was stopping one short of being applied to all the related locations. This has been corrected.
* Restoring and clarifying designer's original level access intent
The original creator of the AP version of Bumper Stickers intentionally set the Treasure Bumper requirements to logically reach each level 1 higher than the actual game requires, and logic tests were built based on this. This design decision has now been restored.
* Revert "Restoring and clarifying designer's original level access intent"
This reverts commit 5186c5fcc3.
* Correct test logic for level 5
While 33 Treasure Bumpers are generated, only 32 are needed to reach level 5. This push corrects the unit test for the level 5 checks.
* Rename generically-named variables
Change variables from generic names (x, y, n) to more meaningful names, for ease of readability.
---------
Co-authored-by: The T <thet113@gmail.com>
- Perhaps most critically, adds the ability for the door shuffle code to catch door shuffle exceptions and try again. Will try up to 10 times. Should mean Door Shuffle does not need to be disallowed in the big async🤞
- Door Shuffle code has been made drastically faster by searching for the first dead end instead of sorting the whole list of entrances by whether they are dead ends.
- Renames Full to Interiors, and adds a new Full door shuffle that shuffles interior-to-interior doors separately from exterior-to-interior doors.
- Adds a new Decoupled door shuffle.
- Warp Tile Shuffle now has 3 separate options, Vanilla, Shuffle, and Mixed. Shuffle shuffles the warp tiles among themselves, Mixed mixes them into the Door Shuffle pool.
- Safari Zone connections are now shuffled on Full, Insanity, and Decoupled.
- On Simple Door Shuffle, the Town Map is updated to show the new dungeon locations. The Town Map has been updated to show the locations of dungeons that previously were not shown unless you opened the map within them, and the Sea Cottage has been removed from it.
- Adds Auto Level Scaling that chooses the level scaling mode based on the Door Shuffle choice.
- Fixes issues with Flash and Fly move interventions (where it ensures an available Pokémon that can learn it is reachable depending on settings).
- Fixes a possible generation crash with type chart randomization.
- Should fix an issue where `stage_fill_hook` was able to remove the wrong item from the item pool resulting in a duplicated item reference existing.
- Adds a stage_post_fill function which searches for Pokémon in order of spheres, setting all but the first advancement Pokémon event found to `useful` so that spoiler playthrough calculation skips them. In a solo game gen test, this cut gen time from 15 seconds to 10 seconds with same seed number. Difference is likely to be much more massive in larger multiworlds.
Was pointed out that using `state.locations.checked` is not the best solution, even if it's for a completion condition and the Ganon event location would always have the Triforce of Power event item. So let's just check for the Triforce of Power instead. Thank you Zunawe for pointing it out and Silvris for providing the proper rule to use.
* If the user tried to run `/bank` with no arguments to see the current
value while disconnected, previously it threw an exception `KeyError:
'EnergyLinkNone'`. Now it informs the user that they must be connected
and in-game, like `/bank deposit` and `/bank withdraw` do.
I'm also open to adding another `if` branch to make `/bank` only check
for `ctx.server` instead of combining it with the other bank commands,
to allow connecting to check the bank before the game save is loaded.
If that's preferred let me know.
* If the user tried to run `/bank` or `/bank deposit` when the EnergyLink
hadn't been used yet, they would get a `TypeError` exception. Trying
`/bank withdraw` would give no output and would crash the lua
connector script. Now it treats a `None` EnergyLink as `0` and works
properly.
* allow common collection in set and list option constructors
* allow any iterable of strings
* add return None
---------
Co-authored-by: beauxq <beauxq@yahoo.com>
Turns out you can't kill Gleeok with bombs or a candle as I happened to find out in a community async. While I'll be fine, a rare combination of settings could put all 4 possible weapons (the three levels of sword and the Magical Rod) to kill Gleeoks behind killing Gleeoks. This fix should prevent that from happening.
Note: Even though there are technically 5 weapons that can kill Gleeok in the pool because at the moment we have an extra copy of the base Sword, I want to future-proof this incase we make changes to the item pool later.
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
Despite earlier efforts, there were still rare fill errors when door shuffle and color shuffle were on and early color hallways was off, because sphere 1 was too small. This turns "Starting Room - HI" back into a location, which should give the algorithm more room.
The "forced good item" pool has been reconsidered. The problem with the specific item that caused the recent failure (Welcome Back - Shortcut to Starting Room) is that it only provided one location when color shuffle was on, which is a net of zero considering that the GOOD LUCK check was forced. It will no longer show up as a good item unless color shuffle is off. On an opposite vein, Rhyme Room Doors will now show up even if color shuffle is on, because it gives color hallways access by itself.
A good item will only be forced onto GOOD LUCK now if there is more than one player.
* Trap weights
* Slightly change the way the option works
* Wording one more time
* Non optional to bring in line with Ixrec's implementation
* Be clear that it's not an absolute amount, but a weight
* E x c l a m a t i o n p o i n t
* Update worlds/witness/items.py
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Wait I can just do this now lol
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
* Core: typing: return type of `fill_slot_data` to `Mapping`
type checker be like:
"Wait a minute! If you give this mutable dict to those sussy sketchbags, they might mutate it and invalidate your more specific typing!"
Note that this doesn't mean the return value needs to be immutable. It just means the caller won't mutate it (which matches current `Main.py` implementation).
I've seen some talk of introducing ownership to the type system.
https://discuss.python.org/t/we-may-need-better-specification-for-existing-and-future-refinement-types-in-the-type-system/43955/5
Then maybe I could say: "Do whatever you want with it, because I'm giving up ownership."
But that doesn't exist in the type system currently.
* in docs too
* docs talk less about type and more about json
* keep `dict` to be safe with .net client and json
This new type of "area hint" will instead give you general information about one of the named geographical areas in your world.
Example:
```
There are 4 progression items in the "Quarry" region.
Of them, 2 are for other players.
Also, one of them is a laser for this world.
```
This also renames some of the locations in the game to better fit into an "area", such as the "River Obelisk" being renamed to the "Mountainside Obelisk".
---------
Co-authored-by: Exempt-Medic <60412657+Exempt-Medic@users.noreply.github.com>
Co-authored-by: Scipio Wright <scipiowright@gmail.com>
* Add nmg boss scav kill
* Add boss quick kills
* Fix name of orb
* Remove getting into zig with ice grapple
* Remove connection from quarry to zig
* Add a few missing dependent regions
* Separate the atoll statue and portal pad so that it doesn't assume you can get from one to the other without prayer
* Clarify which kinds of options actually support "random"
The current phrasing of this sentence made me expect "random" to work even on my OptionsDict option. After asking `#archipelago-dev` and checking the `Options.py` code, it's become clear that many option types don't (and can't) support "random". This is my best guess at a more correct wording.
* add a sentence about from_text overrides based on black-silver's suggestion
* Speedups: remove unnecessary cinit
This was meant for (memory) safety, but cython docs clearly state that this
is done automatically. The code generated for cinit with args is what
triggers a 'possible null deref' in clang's static analyzer, so by removing
cinit, we can now use static analysis.
* Speedups: disable pickling ...
... of LocationStore and internal classes.
This reduces code size and avoids accidentally pickling them.
## What is this fixing or adding?
Adds Bombless Start option, along with proper bomb logic. This involves updating `can_kill_most_things` to include checking how many bombs can be held. Many places where the ability to kill enemies was assumed, now have logic. This fixes some possible existing logic issues, for example: Mini Moldorm cave checks currently are always in logic despite the fact that on expert enemy health it would require 12 bombs to kill each mini moldorm.
Overhauls options, pulling them out of core and in particular making large changes to how the shop options work.
Co-authored-by: espeon65536 <81029175+espeon65536@users.noreply.github.com>
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
Co-authored-by: Bondo <38083232+BadmoonzZ@users.noreply.github.com>
Co-authored-by: espeon65536 <espeon65536@gmail.com>
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
Adds better support for the Universal Tracker (see its channel in the future game design section).
This does absolutely nothing regarding standard gen, just adds some checks for an attribute that only exists when UT is being used.
The Colorful did not actually properly split into individual doors when progressive colorful was off. This change refactors the code that handles special cases with progressive items to make things clearer (which is important because I will be introducing another one).
* Tests: assign the World to WorldTestBase and add a player field (because I like typing self.player far more than random 1's all over the place)
* more accurate docstring for world and multiworld
* use self.player within the class
## What is this fixing or adding?
- Roof MASTERY panels are now technically in individual regions with more descriptive names, so they can be displayed better on the tracker.
- Orange Tower Seventh Floor - Mastery has been renamed to simply Mastery.
- The Optimistic is its own region now.
- The misnamed CEILING in Room Room has been fixed.
- The misnamed CHEESE in Challenge Room has been fixed.
- The misnamed SOUND in Outside the Bold has been fixed.
- "The Bearer - Shortcut to The Bold" is now "The Bearer - Entrance".
- HUB ROOM - NEAR, FAR and the Warts Straw and Leaf Feel Areas have now been semantically combined into the "Symmetry Room". They are still logically three separate regions.
- The FACTS chain in Challenge Room has been reindexed, and the full chain panel is now indicated as such.
- The Room Room floors have been reindexed.
- Panels in The Observant are now named by their questions, not answers.
- Added a (1) subscript to several panels in Orange Tower Fourth Floor, Outside The Initiated, and The Seeker.
The validate_config.rb script has also been updated to check that all items and locations have an ID.
This change should not impact generation logic at all. It is just changing item and location names.
With BaseClasses running `worlds.__init__.py` and worlds importing
`from BaseClasses`, this is likely to result in some extra code being run
because of partial recursive imports. This now lazily loads `worlds` when
needed, at which point `sys.modules` should be properly populated.
The final stage of Progressive Art Gallery opens up the four-way intersection between the Art Gallery, Orange Tower Fifth Floor, The Bearer, and Outside The Initiated. This is a very useful door, and it would be cool to be able to open it without having to get five progressive items. The original reason this was included in the progression was because getting into the back of Art Gallery early would cause sequence breaks. At this point, the way the client handles the Art Gallery has changed enough that it does not matter if the player can go through this door before getting all progressive art galleries.
Two things have been happening.
**Incorrect Events**
Spoiler logs containing events that just straight up have an incorrect name and shouldn't be there. E.g. "Symmetry Island Yellow 3 solved - Monastery Laser Activation" when playing Laser Shuffle where this event should not exist, because Laser Activations are governed by the Laser items.
Now to be clear - There are no logic issues with it. The event will be in the spoiler log, but it won't actually be used in the way that its name suggests.
Basically, every panel in the game has exactly one event name. If the panel is referenced by another panel, it will reference the event instead. So, the Symmetry Laser Panel location will reference Symmetry Island Yellow 3, and an event is created for Symmetry Island Yellow 3. The only problem is the **name**: The canonical name for the event is related to "Symmetry Island Yellow 3" is "Monastery Laser Activation", because that's another thing that panel does sometimes.
From now on, event names are tied to both the panel referencing and the panel being referenced. Only once the referincing panel actually references the dependent panel (during the dependency reduction process in generate_early), is the event actually created.
This also removes some spoiler log clutter where unused events were just in the location list.
**Item classifications**
When playing shuffle_doors, there are a lot of doors in the game that are logically useless depending on settings. When that happens, they should get downgraded from progression to useful. The previous system for this was jank and terrible. Now there is a better system for it, and many items have been added to it. :)
* Added some resilience to non-ASCII player names or items
* Also the client, not even sure if switching to ascii is useful here
* Split a long line in two
* Initial content-based labeling
* Improve labeling rules around docs and /worlds/generic
* Improve labeling rules around docs and webhost
* Formatting
* Update matching for webhost
* back to square 1 on is:docu
* Try a better glob for docs
* Formatting
* Manage PR state labels
* Correct syntax for conditions
* Correct syntax for conditions
* add trigger on reopening
* add trigger on closing
* keep labels in sync as pr updates
* Change edit event to sync
* Restrict only to PRs to main
* address review comments
* apply only to PRs into main
* Refactor postgame code to be more readable
* Change all references to options to strings
* oops
* Fix some outdated code related to yaml-disabled EPs
* Small fixes to short/longbox stuff (thanks Medic)
* comment
* fix duplicate
* Removed triplicate lmfao
* Better comment
* added another 'unfun' postgame consideration
* comment
* more option strings
* oops
* Remove an unnecessary comparison
* another string missed
* Another was missed
* This would create a really bad merge error
* Tests: test that item/location name groups are not empty
* Tests: better name for test_groups TestCase
---------
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
In pyevermizer, it's called Atlas Medallion, not Amulet, leading to an
empty group and to code not considering them as an alchemy ingredient
when swapping out for a trap or an energy core fragment.
Also adds a test.
Reworking the options to make it work with the new options API.
Also reworked stuff in several spots to use world: NoitaWorld instead of multiworld: MultiWorld
The value of 10 does not really fit some of our world patterns and values
up to 15 may be acceptable. Looking at some worlds, 14 seems to be
achievable without too much work and reduces the noise in test output,
making it more usable.
The Colorful currently, in logic, does not expect you to solve the achievement panel until all of the doors are opened. This is not enforced by the client in complex door shuffle. It is also not typical of how achievements in Lingo usually work, and it ended up this way because of the fact that The Colorful is, uniquely, not a countdown panel. This change modifies logic so that solving each panel within The Colorful is required in order to access the achievement, rather than opening all of the doors. This will be accompanied by a change to the client that will turn the achievement panel into a countdown.
Bizhawk's "hard reset" option fills RAM with 0x55s. This causes game completion to be erroneously flagged, and likely many erroneous location checks with it. This fix checks for 0x55 and will not proceed to process anything if present.
* SoE: fix typing for tests
* SoE: explicitly export pyevermizer
To support loading the module from source (rather than module) we import
pyevermizer from `__init__.py` in other files. This has been an implicit export
and `mypy --strict` disables implicit exports, so we export it explicitly now.
* SoE: fix style in patch.py
* SoE: remove unused imports
* SoE: fix format mistakes
* SoE: cleaner typing in SoEOptions.flags
as suggested by beauxq
* Tests: add a test for worlds to only modify the itempool in `create_items`
* extend test multiworld setup instead of a new function
* cleanup the test a bit
* put more strict wording in `create_items` docstring
* list of shame
* Don't call `set_rules` before testing
* remove ChecksFinder from the list of shame
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
Co-authored-by: Fabian Dill <Berserker66@users.noreply.github.com>
* Update en_Tunic.md
* Change emphasis a bit
* Move the "haven't played before" section up
* settings -> options
* Update worlds/tunic/docs/en_Tunic.md
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* Update setup as well with settings -> options and some recent changes to the in-game settings
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
* SoE: new file naming
also fixes test base deprecation
* SoE: use options_dataclass
* SoE: moar typing
* SoE: no more multiworld.random
* SoE: replace LogicMixin by SoEPlayerLogic object
* SoE: add test that rocket parts always exist
* SoE: Even moar typing
* SoE: can haz apworld now
* SoE: pep up test naming
* SoE: use self.options for trap chances
* SoE: remove unused import with outdated comment
* SoE: move flag and trap extraction to dataclass
as suggested by beauxq
* SoE: test trap option parsing and item generation
Office elevator logic was written as
can reach Underground Tunnels OR can reach Office AND have Key for Office Elevator
Meaning that key for office elevator was not required if Underground Tunnels could be reached when it should be.
Changed to
(can reach Underground Tunnels OR can reach Office) AND have Key for Office Elevator
- Adds all the songs from the Touhou Mugakudan -Ⅲ- update.
- Increases the upper limit of additional songs to 508 due to there being 512 songs now.
- Finally fixes umpopoff. As it was the only song that had less than 3 difficulties but also didn't have proper difficulty values
Makes the client make sure the player has the correct amount of stat increase instead of letting the goa mod (apcompanion) do it
abilities: checks the slot where abilities could dupe unless that slot is being used for an actual abiliity given to the player
Fixes rule logic for location 'puzzle solved three floor elevator'. Missing a parenthesis caused only the key requirement to be checked for the blue maze region.
* Noita: Add note about allowable slot names
* Update character list
* Update init to raise an exception if a yaml has bad characters
* Slightly adjust exception message
It was brought up that if you attempt to non_local any of the starting weapons, there is still a chance for it to get chosen as your starting weapon if you are on a StartingPosition value lower than very_dangerous. This fix will attempt to build the starting weapons list accounting for non_local items, but if all possible weapons have been set to non_local, force one of them to be your starting weapon anyway since the player is still expecting a starting weapon in their world if they have chosen one of the lower StartingPosition values.
* Pokemon Emerald: Change "settings" to "options" in docs
* Pokemon Emerald: Fix two more usages of "setting" instead of "option"
* Pokemon Emerald: Minor rephrase in docs
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
---------
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
There was a bug in non-expanded item pool where due to the base patch changes to accommodate more items in dungeons, some items were transformed into glitch items that removed bombs (this also happened in expanded item pool, but the item placement would overwrite the results of this bug so it didn't appear as frequently). Being a Zelda game, losing bombs is bad. This PR fixes the base patch process to avoid this bug, by properly carrying the value of a variable through a procedure.
Only attempt to place badges in badge locations if they are empty. Return unplaced badges to the item pool if fewer than 8 locations are being filled.
This should fix errors that occur when items are placed into badge locations via plando, or whatever other worlds may do.
The static class with the "disable forced good item" field is gone. Now, certain tests that want to check for specific access progression can run a method that removes the forced good item and adds it back to the pool. Tests that don't care about this will collect the forced good item like normal. This should prevent the intermittent fill failures on complex doors unit tests, since the forced good item should provide enough locations to fill in.
The most serious issue this PR addresses is that entrances that use doors without items (a small subset of doors when door shuffle is on, but *every* door when door shuffle is off, which is the default) underestimate the requirements needed to use that entrance. The logic would calculate the panels needed to open the door, but would neglect to keep track of the rooms those panels were in, meaning that doors would be considered openable if you had the colors needed to solve a panel that's in a room you have no access to.
Another issue is that, previously, logic would always consider the "ANOTHER TRY" panel accessible for the purposes of the LEVEL 2 panel hunt. This could result in seeds where the player is expected to have exactly the correct number of solves to reach LEVEL 2, but in reality is short by one because ANOTHER TRY itself is not revealed until the panel hunt is complete. This change marks ANOTHER TRY as non-counting, because even though it is technically a counting panel in-game, it can never contribute to the LEVEL 2 panel hunt. This issue could also apply to THE MASTER, since it is the only other counting panel with special access rules, although it is much less likely. This change adds special handling for counting THE MASTER. These issues were possible to manifest whenever the LEVEL 2 panel hunt was enabled, which it is by default.
Smaller logic issues also fixed in this PR:
* The Orange Tower Basement MASTERY panel was marked as requiring the mastery doors to be opened, when it was actually possible to get it without them by using a painting to get into the room.
* The Pilgrim Room painting item was incorrectly being marked as a filler item, despite it being progression.
* There has been another update to the game that adds connections between areas that were previously not connected. These changes were additive, which is why they are not critical.
* The panel stacks in the rhyme room now require both colours on each panel.
Fixes an issue where the Silph Co 6F hostage check becomes unavailable if Giovanni has been defeated on 11F. This is due to the NPC having separate scripts depending on whether Giovanni was defeated. The code for the check has been moved to before the branch.
Changes the finished_game to new variable so now it only checks the game's memory and if it has sent the finished flag before
Fixed ag2 not requiring 1 of each black magic
Fix hitlist if you exclude summon level 7 and have summon levels option turned off
As discovered by this bug report https://discord.com/channels/731205301247803413/1182522267687731220 it's currently possible to accidentally have the starting weapon of a player overwritten by a triforce fragment if TriforceLocations is set to dungeons and StartingPosition is set to dangerous. This fix makes sure to remove the location of a placed starting weapon if said location is in a dungeon from the pool of possible locations that triforce fragments can be placed in this circumstance.
Two items on Route 120 are on the other side of a pond but were considered accessible in logic without Surf.
Creates a new separate region for these two items and adds a rule for being able to Surf to get to this region. Also adds the items to the existing surf test.
Basically, the function for "checking entrances both ways" only checked one way. This resulted in unreachable locations.
This affects Expert seeds with (non-remote doors and specific types of EP Shuffle), as well as seeds with non-remote doors + specific types of disabled panels + specific types of EP Shuffle.
Also includes two changes that makes spoiler logs nicer (not creating unnecessary events).
Currently when a room shuts down while clients are connected it instantly spins back up. This fixes that behaviour categorically.
I still don't know why or when this problem started, but it's certainly wreaking havok on prod.
`colorama` has type stubs when it didn't before
`ZillionDeltaPatch.hash` annotated type could be `None` but md5s doesn't allow `None`
type of `CollectionState.prog_items` changed
`WorldTestBase` moved
all of the following are related to this issue:
https://github.com/python/typing/discussions/1486
CommonContext for `command_processor` (is invalid without specifying immutable - but I don't need it anyway)
ZillionWorld options and settings (is invalid without specifying immutable - but I do need it)
Refactors region code to remove references to course index.
There were bugs somewhere, but I dont know where tbh.
This fixes them but leaves logic otherwise intact, and much cleaner to look at as there's one list less to take care of.
Additionally, this fixes stopping the clock from Big Boos Haunt.
Door entities think they can be solved without any other panels needing to be solved.
Usually, this is true, because they no longer need to be "powered on" by a previous panel.
However, there are some entities that need another entity to be powered/solved for a different reason.
In this case, Symmetry Island Lower Left set opens the latches that block your ability to solve the panel. The panel itself actually starts on. Playing doors: panels does not change this, unlike usually where dependencies like this get removed by playing that mode.
In the long term, I want to somehow be able to "mark" dependencies as "environmental" or "power based" so I can distinguish them properly.
Since the coop update, the Ancient key (which is always the reward for defeating the boss) would disappear when leaving the cave, making it impossible to open the locked door behind the Ancient Cave entrance counter. While this is basically cosmetic and has no adverse effects on the multiworld (as the door does not lead to any multiworld locations and is only accessible after defeating the final boss anyway), players may still want to enter this room as part of a ritual to celebrate their victory.
Why does this happen? The game keeps track of two different inventories, one for outside and another one for the cave dive. When entering or leaving the cave, important things such as blue chest items and Iris treasures are automatically copied to the other inventory. However, it turns out that the Ancient key doesn't participate in this mechanism. Instead, the script that runs when exiting the cave checks whether event flag 0xC3 is set, and if it is on, it calls a script action that adds the key item to the outside inventory. (Whether or not the player actually had the key item in their in-cave inventory is not checked at all; only the flag matters.)
In the unmodified game, that flag is set by the cutscene script that awards the key. It actually sets two event flags, 0xC3 and 0xD1. The latter is used by the game when trying to display the boss in the cafe basement and is used by AP as the indicator that the boss goal was completed. With the coop update, the event script method that created the key was intercepted and modified to send out a location check instead. That location always has the Ancient key as a fixed item placement; the benefit of handling it as a remote item is that in this way the key essentially serves as a signal that transmits the information of the boss' defeat to all clients cooping on the slot. When receiving the key, however, the custom ASM did only set flag 0xD1. As part of the bugfix, it is now changed to set flag 0xC3 as well.
But that alone is still not enough to make it work. The subroutine that is called by the game to create the key when exiting the cave with flag 0xC3 is the same subroutine that gets called in the cutscene that originally tried to award the key. But that's the one that has been rewritten to send the location check instead. So instead of creating the key when leaving the cave, it would just send the same location check again, effectively doing nothing. Therefore, the other part of the bugfix is to only intercept this subroutine if the player is currently on the Ancient Cave Final Floor (where the cutscene takes place), thus making it possible to recreate the key item when exiting.
* - Added logic rules for reaching, then completing, the field office in order to be allowed to spend significant amounts of walnuts
* - Revert moving a method for some reason
* update DS3 setup guide to preserve downpatching instructions
we want to preserve this on the AP site as the future of the speedsouls wiki is unknown and may disappear at any time.
* Update worlds/dark_souls_3/docs/setup_en.md
Co-authored-by: Danaël V. <104455676+ReverM@users.noreply.github.com>
* Update setup_en.md
---------
Co-authored-by: Danaël V. <104455676+ReverM@users.noreply.github.com>
When using localhost on mac, both ipv4 and ipv6 are tried and raise separate errors
which are combined by asyncio and difficult/inelegant to handle.
Python 3.12 adds the argument all_errors, which would make this easier.
FFMQR by @wildham0
Uses an API created by wildham for Map Shuffle, Crest Shuffle and Battlefield Reward Shuffle, using a similar method of obtaining data from an external website to Super Metroid's Varia Preset option.
Generates a .apmq file which the user must bring to the FFMQR website https://www.ffmqrando.net/Archipelago to patch their rom. It is not an actual patch file but contains item placement and options data for the FFMQR website to generate a patched rom with for AP.
Some of the AP options may seem unusual, using Choice instead of Range where it may seem more appropriate, but these are options that are passed to FFMQR and I can only be as flexible as it is.
@wildham0 deserves the bulk of the credit for not only creating FFMQR in the first place but all the ASM work on the rom needed to make this possible, work on FFMQR to allow patching with the .apmq files, and creating the API that meant I did not have to recreate his map shuffle from scratch.
Almost all of the events have been eradicated, which significantly improves both generation speed and playthrough calculation.
Previously, checking for access to a location involved checking for access to each panel in the location, as well as recursively checking for access to any panels required by those panels. This potentially performed the same check multiple times. The access requirements for locations are now calculated and flattened in generate_early, so that the access function can directly check for the required rooms, doors, and colors.
These flattened access requirements are also used for Entrance checking, and register_indirect_condition is used to make sure that can_reach(Region) is safe to use.
The Mastery and Level 2 rules now just run a bunch of access rules and count the number of them that succeed, instead of relying on event items.
Finally: the Level 2 panel hunt is now enabled even when Level 2 is not the victory condition, as I feel that generation is fast enough now for that to be acceptable.
- Removes the Pokémon Client, adding support for Red and Blue to the Bizhawk Client.
- Adds `/bank` commands that mirror SDV's, allowing transferring money into and out of the EnergyLink storage.
- Adds a fix to the base patch so that the progressive card key counter will not increment beyond 10, which would lead to receiving glitch items. This value is checked against and verified that it is not > 10 as part of crash detection by the client, to prevent erroneous location checks when the game crashes, so this is relevant to the new client (although shouldn't happen unless you're using !getitem, or putting progressive card keys as item link replacement items)
More speed optimizations for The Messenger. Moves Figurines into their own region, so their complicated access rule only needs to be calculated once when doing a sweep. Removes a redundant loop for shop locations by just directly assigning the access rule in the class instead of retroactively. Reduces slot_data to only information that can't be derived, and removes some additional extraneous data. Removes some unused sets and lists. Removes a redundant event location, and increments the required_client_version to prevent clients that don't expect the new slot_data. Drops data version since it's going away soon anyways, to remove conflicts.
This allows multiple client/connector pairs to run at the same time. It also includes a few other miscellaneous small changes that accumulated as I went. They can be split if desired
- Whatever the `client_socket:send` line (~440) was doing with that missing operator, it's no longer doing. Don't ask me how it was working before. Lua is witchcraft.
- Removed the `settimeout(2)` which causes the infamous emulator freeze (and replaced it with a `settimeout(0)` when the server socket is created). It appears to be unnecessary to set a timeout for discovering a client. Maybe at some point in time it was useful to keep the success rate for connecting high, but it seems to not be a problem if the timeout is 0 instead.
- Also updated the Emerald setup to remove mention of the freezing.
- Connector script now picks the first port that's not in use in a range of 5 ports.
- To summarize why I was previously under the impression that multiple running scripts would not detect when a port was in use:
1. Calling `socket.bind` in the existing script will first create an ipv6 socket.
2. A second concurrent script trying to bind to the same port would I think fail to create an ipv6 socket but then succeed in creating an ipv4 socket on the same port.
3. That second socket could never communicate with a client; extra clients would just bounce off the first script.
4. The third concurrent script will then fail on both and actually give an `address already in use` error.
- I'm not _really_ sure what's going on there. But forcing one or the other by calling `socket.tcp4()` or `socket.tcp6()` means that only one script will believe it has the port while any others will give `address already in use` as you'd expect.
- As a side note, our `socket.lua` is much wonkier than I had previously thought. I understand some parts were added for LADX and when BizHawk 2.9 came out, but as far back as the file's history in this repo, it has provided a strange, modified interface as compared to the file it was originally derived from, to no benefit as far as I can tell.
- The connector script closes `server` once it finds a client and opens a new one if the connection drops. I'm not sure this ultimately has an effect, but it seems more proper.
- If the connector script's main function returns because of some error or refusal to proceed, the script no longer tries to resume the coroutine it was part of, which would flood the log with irrelevant errors.
- Creating `SyncError`s in `guarded_read` and `guarded_write` would raise its own error because the wrong variable was being used in its message.
- A call to `_bizhawk.connect` can take a while as the client tries the possible ports. There's a modification that will wait on either the `connect` or the exit event. And if the exit event fires while still looking for a connector script, this cancels the `connect` so the window can close.
- Related: It takes 2-3 seconds for a call to `asyncio.open_connection` to come back with any sort of response on my machine, which can be significant now that we're trying multiple ports in sequence. I guess it could fire off 5 tasks at once. Might cause some weirdness if there exist multiple scripts and multiple clients looking for each other at the same time.
- Also related: The first time a client attempts to connect to a script, they accept each other and start communicating as expected. The second client to try that port seems to believe it connects and will then time out on the first message. And then all subsequent attempts to connect to that port by any client will be refused (as expected) until the script shuts down or restarts. I haven't been able to explain this behavior. It adds more time to a client's search for a script, but doesn't ultimately cause problems.
Changelog:
Features:
- New goal
- Chaos Chao
- Raise a Chaos Chao to win!
- New optional Location Checks
- Chao Animal Parts
- Each body part from each type of animal is a location
- Chao Stats
- 0-99 levels of each of the 7 Chao stats can be locations
- The frequency of Chao Stat locations can be set (every level, every 2nd level, etc)
- Kindergartensanity
- Classroom lessons are locations
- Either all lessons or any one of each category can be set as locations
- Shopsanity
- A specified number of locations can be placed in the Chao Black Market
- These locations are unlocked by acquiring `Chao Coin`s
- Ring costs for these items can be adjusted
- Chao Karate can now be set to one location per fight, instead of one per tournament
- Items
- If any Chao locations are active, the following will be in the item pool:
- Chao Eggs
- Garden Seeds
- Garden Fruit
- Chao Hats
- Chaos Drives
- The starting eggs in the garden can be a random color
- Chao World entrances can be shuffled
- Chao are given default names
- New Traps
- Reverse Trap
Quality of Life:
- Chao Save Data is now separate per-slot in addition to per-seed
- This allows a single player to have multiple slots in the same seed, each having separate Chao progress
- Chao Race/Karate progress is now displayed on Stage Select (when hovering over Chao World)
- All Chao can now enter the Hero and Dark races
- Chao Karate difficulty can be set separately from Chao Race difficulty
- Chao Aging can be sped up at will, up to 15×
- New mod `config` option to fine-tune Chao Stat multiplication
- Note: This does not mix well with the Mod Manager "`Chao Stat Multiplier`" code
- Pong Traps can now activate in Chao World
- Maximum range for possible number of Emblems is now 1000
- General APWorld cleanup and optimization
- Option access has moved to the new options system
- An item group now exists for trap items
Bug Fixes:
- Dry Lagoon now has all 11 Animals
- Eternal Engine - 2 (Standard and Hard Logic) now requires only `Tails - Booster`
- Lost Colony - 2 (Hard Logic) now requires no upgrades
- Lost Colony - Animal 9 (Hard Logic) now requires either `Eggman - Jet Engine` or `Eggman - Large Cannon`
Modifies various access rules in the lufia2ac world with the aim of making them evaluate quicker.
Instead of having to determine the reachability of another location, they now only have to count items in state, which is faster.
(Also made it reuse the identical lambda for multiple locations, which might save a smidgen of memory.)
orjson has a .py entry point that imports `from .orjson` (from the DLL), which does not work on 3.8 if the DLL is not in the same folder as the .py. The changed import system in 3.9+ seems to allow this. Excluding it from libraries.zip will put both files into the same folder.
* Fill: add test for swap error with item rules
https://discord.com/channels/731205301247803413/731214280439103580/1167195750082560121
* Fill: fix swap error found in CI
Swap now assumes the unplaced items can be placed before the to-be-swapped item.
Unsure if that is safe or unsafe.
* Test: clarify docstring and comments in fill swap test
* Test: clarify comments in fill swap test more
When managing an async, it can be useful to sort the tracker by Last
Activity to see who has potentially abandoned their slots. Today, if a
slot hasn't been started (last activity is None) then it is sorted as
if last activity is -1, that it is it has had more recent activity than
any other slot.
This change makes it so slots that haven't started are treated as if
they have last activity MAX_VALUE time ago. This way they get sorted
with slots that haven't been touched in a long time which should make
intuitive sense as the "last activity" is effectively inf time ago.
In a lot of cases, Factorio would write data to file first, then attach that file into zip. It now directly attaches the data to the zip and encapsulation was used to allow earlier GC in places (rendered templates especially).
* Lingo: Fix painting shuffle logic issue in The Wise
* Lingo: More generic painting cycle prevention
* Lingo: okay how about now
* Lingo: Consider Owl Hallway blocked painting areas in vanilla doors
* Lingo: so honestly I should've seen this one coming
* Lingo: Refined req_blocked for vanilla doors
* Lingo: Orange Tower Basement is also owl-blocked
* Lingo: Rewrite randomize_paintings to eliminate rerolls
Now, mapping is done in two phases, rather than assigning everything at once and then rerolling if the mapping is non-viable.
* Factor out a common function for building lists
* Expose name groups through the weighted-settings UI
* Fix weighted-settings page
The request for the JSON file that provides the setting data was missed during the rename in #2037, so prior to this the weighted settings page wasn't rendering at all.
The request for the JSON file that provides the setting data was missed during the rename in #2037, so prior to this the weighted settings page wasn't rendering at all.
* Add Unique Locals Commands to ChecksFinder
* Add Unique Locals Commands to MMBN3 Game Page
* Add Unique Locals Commands to Ocarina of Time Game Page
* Add Unique Locals Commands to Undertale Game Page
* Add Unique Locals Commands to Wargroove Game Page
* Add Unique Locals Commands to The Legend of Zelda Game Page
* Add Unique Locals Commands to Zillion Game Page
* Amend Unique Locals Commands on Final Fantasy 1 Game Page
* Add Unique Locals Commands to Pokemon R/B Game Page
* Grammar fix for FF1
* Corrected sections names to match
* Added commands to Starcraft 2 Wings of Liberty game page
Co-authored-by: Bicoloursnake <60069210+bicoloursnake@users.noreply.github.com>
---------
Co-authored-by: Bicoloursnake <60069210+bicoloursnake@users.noreply.github.com>
* WebHost: Round percentage of checks, fix possible 500 error
* Round using str.format in the template
How the percentage of checks done should be displayed is a display
concern, so it makes sense to just always do it in the template. That
way, along with using .format() instead of .round, means we always get
exactly the same presentation regardless of whether it ends in .00
(which would not round to two decimal places), is an int (which
`round(2)` wouldn't touch at all), etc.
* Round percent_total_checks_done in lttp multitracker
* Fix non-LttP games showing as 0% done in LttP MultiTracker
- Entrance randomizer no longer grows with multiworld
- Improved ER success rate again by prioritizing Temple of Time even more
- Prefill is faster, has slightly reduced failure rate when map/compass are in dungeon but previous items in any_dungeon (which consumed all available locations), no longer removes items from the main itempool; itemlinked prefill items removed to accomodate improvements
- Now triggers only one recache after `generate_basic` instead of one per oot world
- Avoids recaches during `create_regions`
- All ER temp entrances have unique names (so the entrance cache does not break)
this allows skipping multiple simplifications of the same object, e.g. item_rules
also update the logic simplification tests to be a proper unittest.TestCase
* Update faq_en.md
Reorganizing information and adding links to some of the various guides and website pages. Even just adding the Getting Started, Supported Games, and Server Commands links seems like a hefty upgrade. We have good resources, we should make them obvious.
I think more can probably be done here, but I already shuffled this around a lot.
* Reorganize information again, elaborate single player
Sneaki's suggestion makes way more sense organizationally. Added more detail to the single player section to more clearly explain the easiest method.
* Usage of multi-world
Consistency
Co-authored-by: kindasneaki <ryandj67@hotmail.com>
* More multi-world
More consistency
Co-authored-by: kindasneaki <ryandj67@hotmail.com>
* Revert to multiworld
Makes more sense and is colloquially the preferred terminology.
* Rework "leaving early"
Changed the "What if a player needs to leave early" section into, "Does everyone need to be connected at the same time?"
This allows the FAQ to explain briefly what a sync multiworld and an async multiworld is. This is probably good material for the Glossary, but it comes up so much in the Discord that we probably need to explain it here as briefly as possible. This paragraph lends itself to the question of what to do if a player must leave early anyway.
* Grammatical, tensing, and voice updates for consistency with other pages I originally authored.
---------
Co-authored-by: kindasneaki <ryandj67@hotmail.com>
Co-authored-by: Chris Wilson <chris@legendserver.info>
* add missing groups
* remove set comprehensions
* fix boss essence
* reorganized them
* combine boss essence on creation instead of update
* rename to match option names
* Add missing groups
* add PoP totem
* Stardew Valley: Test: unify mods
* Stardew Valley: Test: don't use SVTestBase where setUp is unused
* Stardew Valley: Test: remove duplicate backpack test
* Stardew Valley: Test: remove 2,3,4 heart tests
assume the math is correct with just 2 points on the curve
* Stardew Valley: Test: reduce duplicate test/gen runs
* Stardew Valley: Test: Change 'long' tests to not use TestBase
TestBase' setUp is not being used in the changed TestCases
* Stardew Valley: Test: Use subtests and inheritance for backpacks
* Stardew Valley: Test: add flag to skip some of the extensive tests by default
* Stardew Valley: speed up rules creation by 4%
No class should ever inherit from And, Or, False_ or True_ and isinstance is not free.
Sadly there is no cheap way to forbid inheritance, but it was tested using metaclass.
* Stardew Valley: save calls to type()
Local variable is a bit faster than fetching type again
* Stardew Valley: save calls to True_() and False_(), also use 'in' operator
* Stardew Valley: optimize And and Or simplification
* Stardew Valley: optimize logic constructors
* begin reworking adding games.md
* make it presentable
* some doc cleanup
* style cleanup
* rework the "more on that later" section of SDV
* remove now unused images
* make the doc links consistent
* typo
Co-authored-by: el-u <109771707+el-u@users.noreply.github.com>
---------
Co-authored-by: el-u <109771707+el-u@users.noreply.github.com>
* bumpstik: treasure/booster location rules
* bumpstik: oop missed a bit
* bumpstik: apply access rule to Hazards check
* bumpstik: move completion cond. to set_rules
* bumpstik: tests?
I have literally never written these before so 🤷
* bumpstik: oops
* bumpstik: how about this?
* bumpstik: fix some logic
* bumpstik: this almost works but not quite
* bumpstik: accurate region boundaries for BBs
since we're using rules now
* bumpstik: holy heck it works now
* SoE: create regions cleanup and speedup
keep local reference instead of hitting multiworld cache
also technically fixes a bug where all locations are in 'menu', not 'ingame'
* SoE: somplify region connection
* WebHost: unify references to options
* it was just an extra s the whole time...
* grammar
* redirect from old pages
* redirect stuff correctly
* use url_for
* use " for modified strings
* remove redirect cache
* player_settings
* update site map
Sweep only current player's locations so that more players does not slow it down.
Fix a slight possibility of Full door shuffle crash by only sorting for outdoor dead ends only when connecting from a non-dead end.
- Added location name groups, so you can make your entire Water Temple priority to annoy everyone else
- Significant improvement to ER generation success rate (~80% to >99%)
- Changed `adult_trade_start` option to a choice option instead of a list (this shouldn't actually break any YAMLs though, due to the lesser-known property of lists parsing as a uniformly-weighted choice)
- Major improvements to the option tooltips where needed. (Possibly too much text now)
- Changed default hint distribution to `async` to help people's generation times. The tooltip explains that it removes WOTH hints so people hopefully don't get tripped up.
- Makes stick and nut capacity upgrades useful items
- Added shop prices and required trials to spoiler log
- Added Cojiro to adult trade item group, because it had been forgotten previously
- Fixed size-modified chests not being moved properly due to trap appearance changing the size
- Fixed Thieves Hideout keyring not being allowed in start inventory
- Fixed hint generation not accurately flagging barren locations on certain dungeon item shuffle settings
- Fixed bug where you could plando arbitrarily-named items into the world, breaking everything
This PR adds a new, optional aspect to the Ancient Cave experience:
During their run, players can have the opportunity to purchase some additional items or spells to improve their party. If enabled, a shop will appear everytime a certain (configurable) number of floors in the dungeon has been completed. The shop inventories are generated randomly (taking into account player preference as well as a system to ensure that more expensive items can only become available deeper into the run).
For customization, 3 new options are introduced:
- `shop_interval`: Determines by how many floors the shops are separated (or keeps them turned off entirely)
- `shop_inventory`: Determines what's possible to be for sale. (Players can specify weights for general categories of things such as "weapon" or "spell" or even adjust the probabilities of individual items)
- `gold_modifier`: Determines how much gold is dropped by enemies. This is the player's only source of income and thus controls how much money they will have available to spend in shops
* WebHost: minor css changes to make Supported Games page usable without js
* Update JS to use querySelectorAll, remove most id attributes from elements, use relative element selectors
* Hide content when clearing search bar
* Remove `console.log`, remove TODO
---------
Co-authored-by: Chris Wilson <chris@legendserver.info>
* Refactor weighted-settings.js
This moves most of the infrastructure into two classes:
* WeightedSettings covers the settings page as a whole. It tracks the
user's current settings in local storage as well as the game data
from the server so they don't need to be manually passed around from
function to function.
* GameSettings covers the settings for a single game, and provides a
view of the current settings and the game data just for that game.
* Fix item count updating
"Added a bunch of tests to make sure I don't break anything during refactoring
Huge cleanup in the Regions file, extract methods, remove code duplicate, fix typos, fix variable naming conventions, etc.
Small cleanup in other places, minor stuff just what was needed for Regions"
- Fix generation failing with certain gesture shuffle options
- Fixed passing ItemDict to multidata instead of item code
- Don't allow CHARGE UP to be placed at Foglast: TV
- APWorld support by removing LogicMixin from Rules.py
🤞
* 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>
* Tests: Add a test for fill to WorldTestBase
* test items and minimal accessibility, only bailing out when no reachable locations exist.
* put egg shard max/goal at sane values
114 locations - 35 always-present progression items - 25 excluded locations from settings <= 74 egg shards
past me can't do arithmetic
* f
* i'm bad at git
* make fill import local to prevent circular imports
---------
Co-authored-by: espeon65536 <espeon65536@gmail.com>
* added setup_es.md
setup_en 100% translated (with a bit of adaptation to spanish linguistics)
* Update __init__.py
add reference to the spanish tutorial
* Update setup_es.md
removed temporary "wip translation" header
* Update setup_es.md
formatting cleanup
* Update setup_es.md
translated "alias for" on lines 73 and 74, which I just forgot to
* Update setup_es.md
fixed a bunch of punctuation/grammar and fixed bold format in Configuring Bizhawk section
* Update worlds/pokemon_rb/docs/setup_es.md
updated bold format as per nicholassaylor's suggestion
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
---------
Co-authored-by: Nicholas Saylor <79181893+nicholassaylor@users.noreply.github.com>
* Update commands_en.md
Commands re-ordered and put into categories
Some commands were better documented / explained more clearly
Other formatting changes
* Status command moved to General category and elaboration on getitem command
* "Multi-world" -> "Multiworld"
* Moved game-specific local commands to game pages
Adds a generic client that can communicate with BizHawk. Similar to SNIClient, but for arbitrary systems and doesn't have an intermediary application like SNI.
* Launcher: Allow opening patches for clients without an exe
* Launcher: Restore behavior for not showing patch suffixes for clients that aren't installed
* core: typing for MultiWorld.get_regions
* core: utility method for visualizing worlds as PlantUML
* core: utility method for visualizing worlds as PlantUML: update docs
* Tests: add a name removal method, and have assertAccessDependency use and dispose its own state
* Update test/TestBase.py
---------
Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com>
raiseException(f"dungeon_items key in A Link to the Past was removed, but is present in these weights as {get_choice_legacy('dungeon_items',weights,False)}.")
Archipelago provides a generic framework for developing multiworld capability for game randomizers. In all cases, presently, Archipelago is also the randomizer itself.
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
@@ -25,7 +27,7 @@ Currently, the following games are supported:
* Hollow Knight
* The Witness
* Sonic Adventure 2: Battle
* Starcraft 2: Wings of Liberty
* Starcraft 2
* Donkey Kong Country 3
* Dark Souls 3
* Super Mario World
@@ -51,6 +53,26 @@ Currently, the following games are supported:
* 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
* Zork Grand Inquisitor
* Castlevania 64
* A Short Hike
* Yoshi's Island
* Mario & Luigi: Superstar Saga
* Bomb Rush Cyberfunk
* Aquaria
* Yu-Gi-Oh! Ultimate Masters: World Championship Tournament 2006
* A Hat in Time
* Old School Runescape
For setup and instructions check out our [tutorials page](https://archipelago.gg/tutorial/).
Downloads can be found at [Releases](https://github.com/ArchipelagoMW/Archipelago/releases), including compiled
@@ -58,36 +80,57 @@ 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:
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:
* [Zarby89's](https://github.com/Ijwu/Enemizer/commits?author=Zarby89) and [sosuke3's](https://github.com/Ijwu/Enemizer/commits?author=sosuke3) contributions to Enemizer, which make the vast majority of Enemizer contributions.
and [sosuke3's](https://github.com/Ijwu/Enemizer/commits?author=sosuke3) contributions to Enemizer, which make up the
vast majority of Enemizer contributions.
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.
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.
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](https://github.com/ArchipelagoMW/Archipelago/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](docs/running%20from%20source.md).
For most people, all you need to do is head over to
the [releases page](https://github.com/ArchipelagoMW/Archipelago/releases), then download and run the appropriate
installer, or AppImage for Linux-based systems.
If you are a developer or are running on a platform with no compiled releases available, please see our doc on
[running Archipelago from source](docs/running%20from%20source.md).
## Related Repositories
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.
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.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.