Commit Graph

178 Commits

Author SHA1 Message Date
espeon65536 f6d857b5b5
Core: make progression balancing deterministic (#295) 2022-05-11 04:12:26 +02:00
Fabian Dill 491e6c8730
HK: don't progression balance "Currency"-like progression items (#419)
* HK: don't progression balance "Currency"-like progression items

* only skip prog balancing on charms that don't unlock checks by themselves

Co-authored-by: Kono Tyran <HAklowner@gmail.com>
2022-04-05 18:41:15 -04:00
Doug Hoskisson 2b138ac940
some typing and cleaning, mostly in Fill.py (#349)
* some typing and cleaning, mostly in Fill.py

* address missing Option types

* resolve a few TODOs discussed in pull request
2022-03-27 19:47:47 -04:00
Fabian Dill cb024b00d9
Fill: don't crash before debug output in case of unfilled locations (#342) 2022-03-24 12:47:20 -04:00
espeon65536 2d25369d06 Core: fix division by zero in case of spectator slot 2022-03-20 16:08:22 +01:00
Fabian Dill 32a58b1adb Progression Balancing: fix ItemLinks and Spectator interactions 2022-03-14 20:10:49 +01:00
espeon65536 15e0763ed5
Update progression balancing algorithm (#300)
* New progression balancing algo: computes based on percentage of locations available rather than absolute number of locations
2022-03-12 22:05:03 +01:00
Fabian Dill 5dbccfcbbd ItemLinks: fix all_state not collecting event locations 2022-02-22 09:49:01 +01:00
Fabian Dill c525c80b49 ItemLinks: move item links to events, mess up their logic in doing so and lock them behind plando option "item_links" until they're fixed. 2022-02-17 06:07:20 +01:00
Fabian Dill 53340ab22c Core: remove legacy "dynamic_regions", as all regions are now dynamic 2022-02-15 06:29:57 +01:00
Fabian Dill dc4b064c73 Options: change displayname to display_name 2022-02-02 16:29:29 +01:00
Brad Humphrey 2361f8f9d3 Use logic when placing non-excluded items 2022-02-01 16:35:18 +01:00
Brad Humphrey 3cecab25c7 Add unplaced_items into the fill sweep 2022-01-31 19:17:06 +01:00
Brad Humphrey 814851ba60 Don't require every item to fill 2022-01-31 19:17:06 +01:00
Fabian Dill 25dd89ed17 MultiServer: delete unused function 2022-01-28 09:29:29 +01:00
Brad Humphrey dd61d0d395
Don't swap items that reduce access (#247) 2022-01-28 05:40:08 +01:00
Brad Humphrey 65a92746d1 Sort before distribute to preserve seed integrity 2022-01-28 05:39:34 +01:00
Brad Humphrey 64ce90d5ca Don't add more locations to the priority fill pool 2022-01-24 06:48:59 +01:00
Fabian Dill 415526d23e Fill: remove warning loggers that confused people 2022-01-24 04:50:49 +01:00
Fabian Dill 7a7e3544cf Fill: log per-player item and location counts in case of mismatch. 2022-01-24 00:18:00 +01:00
Alchav 219bcb3521
Item Plando updates (#226)
* Item Plando updates

Add True option for item count to place the number of that item that is in the item pool.
Prioritize plando blocks by location count minus item count, so that the least flexible blocks are handled first to increase likelihood of success.
True and False for Force option are coming in as bools instead of strings, so that had to be accounted for.
Several other bug fixes.
2022-01-22 21:03:13 +01:00
Fabian Dill 66c15c8639 fix MultiTracker 2022-01-22 05:19:33 +01:00
Brad Humphrey 00ccecac9c Allow fill_hook to remove things from the pool 2022-01-22 04:40:24 +01:00
Fabian Dill 06ec72a064 Fill: fix for crash when locations are prefilled 2022-01-21 05:04:02 +01:00
Alchav dc6f1c4dd2
Item Plando overhaul (#205) 2022-01-20 19:34:17 +01:00
Brad Humphrey ec95ce8329
Allow locations to be prioritized for progress item placement (#189) 2022-01-20 04:19:07 +01:00
Fabian Dill d13b7988b7 Core: undo change that made Python 3.9 required 2021-12-31 15:08:30 +01:00
Brad Humphrey 18d262c1ae Add test for minimal accessibility 2021-12-30 16:55:08 +01:00
Brad Humphrey e5fedb90a6 Process swaped items last 2021-12-30 16:55:08 +01:00
Brad Humphrey dc82b384c5 Add comment about swap count 2021-12-30 16:55:08 +01:00
Brad Humphrey 2f56e40fb7 Include player information in swapped item count 2021-12-30 16:55:08 +01:00
Brad Humphrey d719eb356f Don't allow items to swap infinitly 2021-12-30 16:55:08 +01:00
Brad Humphrey 6a34fe5184 Add fallback item swap for unreachable items 2021-12-30 16:55:08 +01:00
lordlou 77ec8d4141
Added Super Metroid support (#46)
Varia Randomizer based implementation
LttPClient -> SNIClient
2021-11-12 14:00:11 +01:00
Fabian Dill a82bf1bb32 Options: raise Exception if per-game options are in root
Options: implement progression balancing and accessibility on new system
Options: implement the notion of "common" and "per_game_common" options in various systems
Options: centralize item and location name checking
Spoiler: prettier print some lists, sets and dicts
WebHost: add common options into /templates
2021-09-17 00:17:54 +02:00
Fabian Dill 74c30ce09a Fill: remove/delay some LttP imports 2021-09-02 03:45:37 +02:00
Fabian Dill fd6e009c4b Fill: fix placing non_local + non advancement items 2021-08-30 22:20:44 +02:00
Fabian Dill 30ac7baa2c FactorioClient: Batch-Send RCON commands when receiving catch-up locations and multiple items. 2021-08-24 09:52:12 +02:00
Fabian Dill a532ceeb0a AutoWorld: Should no longer need to overwrite collect, collect_item should be used instead
AutoWorld: Now correctly automatically applies State.remove if collect_item is also correct
LttP: Make keys advancement items

This feels like it improved generation chance. Might not be the case.
2021-08-10 09:47:28 +02:00
Fabian Dill 9ec0680ce5 LttP: move game specific fill to new AutoWorld fill_hook 2021-08-10 09:03:44 +02:00
Fabian Dill 299036ecca LttP: move some LttP specific things more towards locations where they belong. 2021-08-10 08:00:53 +02:00
Fabian Dill ba3bb201cd Multiple: Followed a rabbit hole of moving LttP Rom generation to AutoWorld
Generator: Re-allow names with spaces (and see what breaks)
Generator: Removed teams (Note that teams are intended to move from a generation step feature to a server runtime feature, allowing dynamic creation of an already generated MW)
LttP: All Rom Options are now on the new system
LttP: palette option "random" is now called "good"
LttP: Roms are now created as part of the general output file creation step
LttP: disable Music is now Music, removing potential double negatives
LttP & Factorio: Progressive option random is now grouped_random
LttP: Enemy damage option random is now Enemy damage: chaos
2021-08-09 09:15:41 +02:00
Fabian Dill af30d8b7cd ensure Hyrule Castle Small Key locality in standard + small key shuffle 2021-07-24 01:42:00 +02:00
espeon65536 64c80c32f0 update exclusion procedure for clarity 2021-07-23 18:18:32 +00:00
espeon65536 12eba33dbf separate fill step for nonadvancement nonexcluded items 2021-07-23 18:18:32 +00:00
espeon65536 0eee1f2d01 add separate can_exclude property, so non-progression items can be marked non-excluded 2021-07-23 18:18:32 +00:00
Fabian Dill 2fc4006dfa RIP: MultiMystery and Mystery, now there's just Generate
Other changes:
host.yaml Multi Mystery options were moved and changed
generate_output now has an output_directory argument
MultiWorld.get_game_players(<game>) now replaces <game>_player_ids
Python venv should now work properly
2021-07-21 18:08:15 +02:00
Fabian Dill 304f63aedf Merge branch 'espeon' into Archipelago_Main
# Conflicts:
#	playerSettings.yaml
2021-06-21 02:49:06 +02:00
espeon65536 deff356910 Added HMG check to all checks for OWG and NL 2021-06-14 22:10:26 -05:00
Fabian Dill 59a56c803a Log which player's plando has caused a placement failure 2021-06-14 23:42:13 +02:00
Fabian Dill cea2f81b86 remove IRH special rule now that it's a 1/1 triforce piece hunt 2021-06-13 07:57:34 +02:00
espeon65536 d425e5eb6a disable GT junk fill in hybrid 2021-06-12 13:11:14 -05:00
Fabian Dill f2a1858b59 Implement (most) Hollow Knight Options 2021-03-21 00:47:17 +01:00
Fabian Dill bbe51c4cc7 Speed up restrictive_fill a bit.
This also changes behaviour slightly; it used to fill beatable only players' items first, now it shuffles it all together. It is not documented why this was done, so hopefully this doesn't undo something intentional.
2021-03-18 17:27:31 +01:00
Fabian Dill 567954a17f Merge branch 'main' into breaking_changes
# Conflicts:
#	BaseClasses.py
2021-03-06 05:27:16 +01:00
Fabian Dill f130829c0c Massively speed up progression balancing for very large multiworlds
Several times faster was observed in testing. 10+ hours to less than 2 in the last sample.
2021-03-04 08:10:30 +01:00
Fabian Dill bda86a65f7 Add Grimmkin Flames logic 2021-02-27 16:27:35 +01:00
Fabian Dill 499f67c586 HK Logic 2021-02-24 06:02:51 +01:00
Fabian Dill dcce53f8c8 Merge branch 'main' into breaking_changes
# Conflicts:
#	Adjuster.py
#	Gui.py
#	MultiClient.py
#	setup.py
#	worlds/alttp/AdjusterMain.py
#	worlds/alttp/Main.py
2021-02-21 20:15:07 +01:00
Fabian Dill c55cf28229 allow ER coop 2021-02-20 02:30:55 +01:00
Fabian Dill 122e360ec8 Merge branch 'main' into breaking_changes
# Conflicts:
#	MultiClient.py
#	Utils.py
#	worlds/alttp/ItemPool.py
#	worlds/alttp/Main.py
#	worlds/alttp/Shops.py
2021-02-19 13:45:50 +01:00
Fabian Dill 96d544ac84 Speed up Progression Balancing, mostly by using generators and pre-sorts where the opportunity exists
In some cases multi-thousand element lists were created in-memory with near identical contents, per player, then discarded and reassembled.
Was testing against a case with 3 GB of additional memory use (50 players) which appeared to get stuck, but really was just very slow. This example case is fixed with these changes.
Additionally, progression balancing is now run after ShopSlotFill, so it is now "aware" of the changed progression shops can produce.
As well, special handling for keys was removed, as not all games will have the notion of keys.
2021-02-05 08:07:12 +01:00
Fabian Dill a646594f08 Merge branch 'main' into breaking_changes
# Conflicts:
#	BaseClasses.py
#	Fill.py
#	MultiClient.py
#	MultiServer.py
#	Utils.py
#	test/dungeons/TestDungeon.py
#	test/inverted/TestInverted.py
#	test/inverted_minor_glitches/TestInvertedMinor.py
#	test/inverted_owg/TestInvertedOWG.py
#	test/minor_glitches/TestMinor.py
#	test/owg/TestVanillaOWG.py
#	test/vanilla/TestVanilla.py
#	worlds/alttp/ItemPool.py
#	worlds/alttp/Main.py
#	worlds/alttp/Rom.py
2021-01-30 23:29:32 +01:00
Fabian Dill 2352445146 Remove all uses of "item.priority" as the remaining fill algorithms don't need it anymore. 2021-01-30 09:57:25 +01:00
CaitSith2 eb1c4313a8 Fix root cause of items not being placed into locations 2021-01-26 13:11:43 -08:00
CaitSith2 c88d9b4339 Additional fixes for Ice Rod Hunt 2021-01-26 07:06:57 -08:00
Fabian Dill 670b8b4b11 Merge branch 'main' into breaking_changes
# Conflicts:
#	MultiClient.py
#	WebUI.py
2021-01-21 05:36:16 +01:00
Fabian Dill f4281f81f5 Merge branch 'main' into multishop 2021-01-17 22:08:43 +01:00
Fabian Dill a87a79eb00 remove some duplicate code 2021-01-17 22:08:28 +01:00
Fabian Dill 7333a15f1f handle merge conflicts after plando update 2021-01-17 06:54:38 +01:00
CaitSith2 082a7b7e41 Merge branch 'main' into multishop 2021-01-13 10:40:52 -08:00
CaitSith2 7bb115de72 Fix bug with placements always being empty.
It will never be not empty, because every placement that succeeds gets its event set to true, and the conditional expects locations already placed within the fill to also not be events.
2021-01-13 10:40:23 -08:00
Fabian Dill 058436e47f shop cleanup and correctly backreference swapped items' locations
Also fixes a false reference in progression balancing from 2019 (swapped Location.item.location was not updated)
2021-01-11 13:35:48 +01:00
Fabian Dill 36123308a6 Refine Shop Item Candidate picking 2021-01-10 15:50:18 +01:00
Fabian Dill e36c6e97c1 Merge remote-tracking branch 'pepper/multishop-all' into multishop
# Conflicts:
#	EntranceRandomizer.py
#	Rom.py
#	WebHostLib/static/static/playerSettings.json
#	data/basepatch.bmbp
2021-01-09 16:03:59 +01:00
CaitSith2 eea4cb5815 Make sure yamls that specify key drop plando locations don't fail. 2021-01-08 06:37:23 -08:00
Fabian Dill 37cf2e1ac4 speed up local item fill, by sorting by world once instead of up to twice per player 2021-01-07 12:43:11 +01:00
CaitSith2 113efa8f02 Fix bugs that prevent seed rolling from continuing if too many plando items are placed. 2021-01-06 11:13:22 -08:00
CaitSith2 8ef78cc32a Add options to allow silent failed plando placements. 2021-01-05 09:56:39 -08:00
CaitSith2 a6d53aafb0 Add option to hard require plando item placement. 2021-01-04 13:50:42 -08:00
Fabian Dill bd86a07115 make random world targeting smarter, in only considering possible unfilled locations 2021-01-04 15:14:20 +01:00
Fabian Dill f3b6be2b20 Item Plando Support 2021-01-02 12:49:43 +01:00
pepperpow c66e97faf6 Merge branch 'shop-fill' into multishop-all 2020-12-23 11:29:20 -06:00
pepperpow 83304fd314 Rotate rupees out of shop and equalize prices 2020-12-23 11:28:42 -06:00
pepperpow 4f58459742 Shop Generation options
(reduced from previous PR)
2020-11-23 19:38:57 -06:00
Fabian Dill fd020ead7f Fix FillError message assembly crashing the error 2020-11-22 22:53:02 +01:00
Fabian Dill 3271460c68 No need to set locality rules in single player and no need to reverse a list that was just shuffled 2020-08-25 18:05:16 +02:00
Fabian Dill d86eb69b4c Remove old fill algorithms that I have no intention to optimize or support in the future 2020-08-25 17:44:03 +02:00
Fabian Dill b5048d99b9 optimize sweep_for_events, some has_ functions and some minor things 2020-08-22 19:19:29 +02:00
Fabian Dill 685ff49711 make "universal" small key shuffle a thing and split it out of retro
also make retro usable independently from the other world modes in mystery
2020-08-20 20:13:00 +02:00
Fabian Dill 52cf99c5c8 skip gtower fill if target fill count is 0
Also rename gftower to gtower. I don't know what the f could stand for. Girlfriend tower?
2020-08-17 03:55:46 +02:00
Fabian Dill b3bb1f187d GT Trash Fill adjustments:
- skipped in no_logic; already was skipped in OWG
- instead of randint[0, 15] and randint[15, 50] (if any kind of triforce hunt) trash items, it is now randint[0, GT_crystals*2] and randint[GT_crystals*2, GT_crystals*4] if you're on local or singleplayer triforce hunt; in general this means that the trash prefill is lessened and is especially low if your GT can be entered early.
2020-08-17 03:51:55 +02:00
Fabian Dill df6ee1a08b Fill Algorithm optimisations (somewhat minor, but easy pickings) 2020-08-14 00:34:41 +02:00
Fabian Dill 86025745ac reimplement easy item pool
Some changes were made. The design chosen is to keep the changes to the same range of changes that hard and expert apply (so no change in lamp count, for example), while trying to keep easy as similar as it was.
2020-08-01 06:22:59 +02:00
Fabian Dill 7a29445c07 Should probably not spoil which players have progression balancing in a logging.info level, for mystery rolling 2020-07-30 20:17:04 +02:00
Fabian Dill 93ecf5988b implement secrets.SystemRandom() for --race 2020-07-14 07:01:51 +02:00
Fabian Dill 57fe16ab60 remove special rules for pinball room 2020-07-09 16:16:31 +02:00
CaitSith2 545bb8023c
Add ganon triforce hunt (#117)
* Add ganon triforce hunt

* Add self to license

* Correction of help message for Local Ganon Triforce Hunt.

* if 'triforcehunt in world.goal[player]:
2020-06-26 16:18:53 +02:00
Fabian Dill d3d68fcba2 Rename Escape Dungeon to Hyrule Castle by vote on discord 2020-06-24 16:22:49 +02:00
Fabian Dill 2a649a749c fix crash when quick filling locally locked trash items 2020-06-04 03:30:59 +02:00