Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SM: 0.4.1 Fixes and Additional Objective Options #1859

Merged
merged 233 commits into from
Jun 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
233 commits
Select commit Hold shift + click to select a range
ae5fa5b
first working (most of the time) progression generation for SM using …
lordlou Jul 23, 2021
52fb517
first working single-world randomized SM rom patches
lordlou Jul 24, 2021
4af5199
- SM now displays message when getting an item outside for someone el…
lordlou Jul 28, 2021
067bf83
First working MultiWorld SM
lordlou Jul 30, 2021
dfaf1bf
some missing things:
lordlou Aug 1, 2021
7a14a66
replaced CollectionState inheritance from SMBoolManager with a compos…
lordlou Aug 1, 2021
e51ba5b
- reenabled balancing
lordlou Aug 1, 2021
472ff36
post rebase fixes
lordlou Aug 1, 2021
b275706
updated SmClient.py
lordlou Aug 2, 2021
be0b190
+ added VariaRandomizer LICENSE
lordlou Aug 7, 2021
c327f21
+ added sm_randomizer_rom project (which builds sm.ips)
lordlou Aug 7, 2021
6389df8
Moved VariaRandomizer and sm_randomizer_rom projects inside worlds/sm…
lordlou Aug 8, 2021
f227519
properly revert change made to CollectionState and more cleaning
lordlou Aug 8, 2021
4b95263
Fixed multiworld support patch not working with VariaRandomizer's
lordlou Aug 8, 2021
9752260
missing file commit
lordlou Aug 8, 2021
f35a93c
Fixed syntax error in unused code to satisfy Linter
lordlou Aug 9, 2021
a2f3321
Revert "Fixed multiworld support patch not working with VariaRandomiz…
lordlou Aug 10, 2021
f038100
many fixes and improovement
lordlou Aug 14, 2021
e37b465
first working (most of the time) progression generation for SM using …
lordlou Jul 23, 2021
db17501
first working single-world randomized SM rom patches
lordlou Jul 24, 2021
9e92900
- SM now displays message when getting an item outside for someone el…
lordlou Jul 28, 2021
7c521be
First working MultiWorld SM
lordlou Jul 30, 2021
7e26c8b
some missing things:
lordlou Aug 1, 2021
c39f972
replaced CollectionState inheritance from SMBoolManager with a compos…
lordlou Aug 1, 2021
1cb8829
- reenabled balancing
lordlou Aug 1, 2021
695c9c3
post rebase fixes
lordlou Aug 1, 2021
605fbe3
updated SmClient.py
lordlou Aug 2, 2021
8010ccd
+ added VariaRandomizer LICENSE
lordlou Aug 7, 2021
6b5331d
+ added sm_randomizer_rom project (which builds sm.ips)
lordlou Aug 7, 2021
aec748e
Moved VariaRandomizer and sm_randomizer_rom projects inside worlds/sm…
lordlou Aug 8, 2021
f86d140
properly revert change made to CollectionState and more cleaning
lordlou Aug 8, 2021
ca732df
Fixed multiworld support patch not working with VariaRandomizer's
lordlou Aug 8, 2021
262e03f
missing file commit
lordlou Aug 8, 2021
df57f4d
Fixed syntax error in unused code to satisfy Linter
lordlou Aug 9, 2021
2eea867
Revert "Fixed multiworld support patch not working with VariaRandomiz…
lordlou Aug 10, 2021
9bef993
many fixes and improovement
lordlou Aug 14, 2021
a3eec29
Fixed multiworld support patch not working with VariaRandomizer's
lordlou Aug 21, 2021
a6474d9
+ added missing files from variaRandomizer project
lordlou Aug 22, 2021
91b52e1
+ added missing variaRandomizer files (custom sprites)
lordlou Aug 24, 2021
7b54dcd
Some fixes for player and server name display
lordlou Aug 24, 2021
057cc72
Fixed Goal completion not triggering in smClient
lordlou Aug 26, 2021
74faec7
integrated VariaRandomizer's options into AP (WIP)
lordlou Aug 31, 2021
2f985f3
- fixed itemsounds.ips crash by always including nofanfare.ips into m…
lordlou Sep 1, 2021
6f91194
skillset are now instanced per player instead of being a singleton class
lordlou Sep 2, 2021
44f9d86
RomPatches are now instanced per player instead of being a singleton …
lordlou Sep 2, 2021
3010fa9
DoorManager is now instanced per player instead of being a singleton …
lordlou Sep 3, 2021
8df3a62
- fixed the last bugs that prevented generation of >1 SM world
lordlou Sep 3, 2021
82bf9e5
fixed crash when no skillset preset is specified in randoPreset (defa…
lordlou Sep 3, 2021
d6f65bd
maxDifficulty support and itemsounds removal
lordlou Sep 4, 2021
f0dbb8b
Merge branch 'variaOptionsIntegration'
lordlou Sep 4, 2021
e1c30c4
Fixed bad merge
lordlou Sep 4, 2021
2413617
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Sep 4, 2021
8972874
Post merge adaptation
lordlou Sep 4, 2021
4a67aee
fixed player name length fix that got lost with the merge
lordlou Sep 5, 2021
afb5904
fixed generation with other game type than SM
lordlou Sep 5, 2021
c4bcdac
added default randoPreset json for SM in playerSettings.yaml
lordlou Sep 5, 2021
f3846b8
fixed broken SM client following merge
lordlou Sep 5, 2021
4729355
beautified json skillset presets
lordlou Sep 7, 2021
8f02b71
Fixed ArchipelagoSmClient not building
lordlou Sep 7, 2021
fc9d390
Fixed conflict between mutliworld patch and beam_doors_plms patch
lordlou Sep 7, 2021
8941af9
SM generation now outputs APBP
lordlou Sep 7, 2021
36dc99d
added missing file and fixed multithreading issue
lordlou Sep 8, 2021
47f55ba
temporarily set data_version = 0
lordlou Sep 8, 2021
9575a56
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Sep 11, 2021
d8f549d
more work
lordlou Sep 16, 2021
767e671
commited missing asm files
lordlou Sep 17, 2021
0b8b15b
Nothing item are now handled game-side. the game will now skip displa…
lordlou Sep 18, 2021
3b951bb
fixed No Energy Item missing its ID
lordlou Sep 19, 2021
876dc39
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Sep 20, 2021
bdf671f
merge post fixes
lordlou Sep 20, 2021
6c289d8
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Sep 23, 2021
57b139b
fixed start item Grapple, XRay and Reserve HUD, as well as graphic be…
lordlou Sep 23, 2021
46e1e86
fixed freeze in blue brinstar caused by Varia's custom PLM not being …
lordlou Sep 24, 2021
efe8d0a
fixed start item x-ray HUD display
lordlou Sep 25, 2021
d88a8c7
Fixed start items being sent by the server (is all handled in ROM)
lordlou Sep 26, 2021
1de52c5
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Sep 26, 2021
c1efffc
fixed settings that could be applied to any SM players
lordlou Sep 27, 2021
28047cb
fixed auth to server only using player name (now does as ALTTP to aut…
lordlou Sep 29, 2021
d579814
- fixed End Credits broken text
lordlou Oct 1, 2021
33ac23e
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Oct 1, 2021
a6bccbf
added non SM item name display
lordlou Oct 2, 2021
e1d018a
added all supported SM options in playerSettings.yaml
lordlou Oct 4, 2021
1482bae
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Oct 4, 2021
6461a82
fixed locations needing a list of parent regions (now generate a regi…
lordlou Oct 8, 2021
cd8077c
minor setting fixes and tweaks
lordlou Oct 8, 2021
d42ab88
added option start_inventory_removes_from_pool
lordlou Oct 9, 2021
1f1b4d7
Hopefully fixed ROR2 that could not send any items
lordlou Oct 10, 2021
a141ab1
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Oct 10, 2021
eaa8e67
- fixed missing required change to ROR2
lordlou Oct 10, 2021
efc849e
fixed 0 hp when respawning without having ever saved (start items wer…
lordlou Oct 12, 2021
65c1366
fixed typo with doors_colors_rando
lordlou Oct 12, 2021
db799c9
fixed checksum
lordlou Oct 13, 2021
f33acac
added custom sprites for off-world items (progression or not)
lordlou Oct 19, 2021
cf756cc
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Oct 19, 2021
b75755d
- added missing change following upstream merge
lordlou Oct 19, 2021
c151f19
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Oct 22, 2021
8734231
added morph placement options: early means local and sphere 1
lordlou Oct 22, 2021
63979db
fixed failing unit tests
lordlou Oct 22, 2021
5fdb9ea
- fixed broken custom_preset options
lordlou Oct 24, 2021
6c2a453
- big cleanup to remove unnecessary or unsupported features
lordlou Oct 24, 2021
71cc1a8
- more cleanup
lordlou Oct 24, 2021
e36e0c0
- moved sm_randomizer_rom and all always applied patches into an exte…
lordlou Oct 24, 2021
8058ded
- added comment to refer to project for generating basepatch.ips (htt…
lordlou Oct 24, 2021
aad65ef
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Oct 24, 2021
3f5795c
fixed g4_skip patch that can be not applied if hud is enabled
lordlou Oct 25, 2021
ca3470e
- fixed off world sprite that can have broken graphics (restricted to…
lordlou Oct 25, 2021
272fe40
- updated basepatch to reflect g4_skip removal
lordlou Oct 25, 2021
4df71d6
- tourian grey doors at baby metroid are now always flashing (allowin…
lordlou Oct 29, 2021
be0c005
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Oct 29, 2021
332030e
fixed wrong path if using built as exe
lordlou Oct 29, 2021
efc89d3
- cleaned exposed maxDifficulty options
lordlou Oct 29, 2021
a1cf495
Merged LttPClient and SMClient into SNIClient
lordlou Oct 31, 2021
4308443
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Oct 31, 2021
2baf457
added varia_custom Preset Option that fetch a preset (read from a new…
lordlou Nov 1, 2021
8bf976f
small doc precision
lordlou Nov 4, 2021
ec9024b
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Nov 4, 2021
182947f
- added death_link support
lordlou Nov 5, 2021
186dca1
- removed now useless presets
lordlou Nov 6, 2021
090cfab
- fixed bad internal mapping with maxDiff
lordlou Nov 6, 2021
2ba3b9c
- added support for lowercase custom preset sections (knows, settings…
lordlou Nov 8, 2021
1cc271c
- fixed death loop when dying with Door rando, bomb or speed booster …
lordlou Nov 9, 2021
9146966
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Nov 9, 2021
d2f5eaf
-added docstring for generated yaml
lordlou Nov 9, 2021
63ee5fe
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Nov 12, 2021
fb5ba87
fixed bad merge
lordlou Nov 12, 2021
83130d5
fixed broken infinity max difficulty
lordlou Nov 12, 2021
534f285
commented debug prints
lordlou Nov 12, 2021
2bf555e
adjusted credits to mark progression speed and difficulty as Non Avai…
lordlou Nov 13, 2021
23b9ea7
added support for more than 255 players (will print Archipelago for h…
lordlou Nov 13, 2021
2755836
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Nov 13, 2021
dc027fc
fixed missing cleanup
lordlou Nov 13, 2021
b99145a
added support for 65535 different player names in ROM
lordlou Nov 14, 2021
265f49c
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Nov 14, 2021
bc5ce7e
fixed generations failing when only bosses are unreachable
lordlou Nov 24, 2021
90ef9e2
- replaced setting maxDiff to infinity with a bool only affecting bos…
lordlou Nov 26, 2021
808a1b7
fixed failling generations when using 'fun' settings
lordlou Nov 27, 2021
e43626d
fixed debug logger
lordlou Nov 27, 2021
2d12a89
removed unsupported "suits_restriction" option
lordlou Nov 27, 2021
63fb461
fixed generations failing when only bosses are unreachable (using a l…
lordlou Nov 30, 2021
0874506
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Dec 2, 2021
cda843f
Merge branch 'fix/onlyBossLeft'
lordlou Dec 2, 2021
cdea398
- fixed deathlink emptying reserves
lordlou Dec 2, 2021
8ac1405
- merged death_link and death_link_survive options
lordlou Dec 2, 2021
54ed17e
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Jan 4, 2022
958a016
fixed death_link
lordlou Jan 5, 2022
74f153d
added a fallback default starting location instead of failing generat…
lordlou Jan 5, 2022
f1d5a29
added Nothing and NoEnergy as hint blacklist
lordlou Jan 5, 2022
98f11c2
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Jan 17, 2022
1589660
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Jan 21, 2022
7ffd3dd
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Jan 22, 2022
cc47e63
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Jan 23, 2022
2c2afb4
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Jan 23, 2022
792a8cf
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Feb 5, 2022
bea27db
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Feb 6, 2022
d4b7ded
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Feb 6, 2022
0a40a95
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Feb 8, 2022
c7dd84b
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Feb 12, 2022
31d6952
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Feb 13, 2022
029b4f6
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Feb 16, 2022
09a4ad0
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Feb 19, 2022
92bd79c
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Feb 21, 2022
6396de3
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Feb 26, 2022
c8487a0
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Mar 2, 2022
218c374
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Mar 4, 2022
1f33a83
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Mar 13, 2022
284aae7
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Mar 13, 2022
59f6390
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Mar 17, 2022
3fd3075
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Mar 19, 2022
bfd0e9e
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Mar 24, 2022
4865509
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Mar 26, 2022
4209035
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Apr 2, 2022
7a83bdc
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Apr 2, 2022
c3723bc
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Apr 22, 2022
4b307f3
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou May 14, 2022
0c18c4d
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou May 16, 2022
c4f7cb5
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou May 19, 2022
3609d7a
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou May 25, 2022
785f67d
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou May 30, 2022
a955588
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Jun 18, 2022
86475cc
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Jun 25, 2022
e563908
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Jul 7, 2022
f8d006c
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Jul 16, 2022
c21a741
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Jul 17, 2022
5ae0467
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Jul 22, 2022
7cd64df
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Jul 29, 2022
d0f3d18
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Jul 30, 2022
406dd8d
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Aug 7, 2022
9a8dec2
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Aug 9, 2022
3759939
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Aug 12, 2022
6c9ffa3
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Aug 18, 2022
6ae4624
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Aug 20, 2022
d008de2
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Aug 27, 2022
a81035f
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Aug 30, 2022
ae47002
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Sep 3, 2022
c52769f
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Sep 6, 2022
20f4b9b
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Oct 8, 2022
a645fe4
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Oct 10, 2022
baacaf9
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Oct 18, 2022
84847db
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Oct 24, 2022
b70a311
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Nov 25, 2022
6fa9572
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Nov 30, 2022
b854c75
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Jan 21, 2023
50e4a4a
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Jan 28, 2023
cb1948d
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Feb 1, 2023
205e268
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Feb 24, 2023
6779da5
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Mar 3, 2023
ce32da2
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Mar 24, 2023
9b16991
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Apr 3, 2023
d4b4db8
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Apr 8, 2023
992ca2f
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Apr 8, 2023
050d14a
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Apr 10, 2023
b47a629
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Apr 15, 2023
d7fc291
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Apr 18, 2023
836b1e4
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Apr 20, 2023
8a647a7
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Apr 22, 2023
3da86c4
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Apr 27, 2023
f0412e7
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou Apr 27, 2023
31f99ee
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou May 7, 2023
a85a351
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou May 9, 2023
df40e3d
Merge branch 'main' of https://github.com/ArchipelagoMW/Archipelago
lordlou May 30, 2023
f1873c7
fixed broken Item links
lordlou May 30, 2023
a7b0c16
fixed failing generation that could happen with Disabled Tourian
lordlou Jun 4, 2023
973f530
added missing force disable of EscapeRando if an escape solution cant…
lordlou Jun 4, 2023
51a9e9a
fixed broken animal surprise patches
lordlou Jun 10, 2023
c2edd82
prevent receiving items when in the first room of Ceres (message box …
lordlou Jun 10, 2023
0afa465
fixed generating with "activate chozo robots" Objective
lordlou Jun 10, 2023
6b395ff
added soft reset that saves to initial starting location
lordlou Jun 16, 2023
712830e
replaced "save and reset" with "save and fast reload" (using same Sta…
lordlou Jun 16, 2023
befa1d7
added documentation about Save and Reload
lordlou Jun 16, 2023
862503b
fixed frequent failing generation on WebHost (KeyError: 'Kraid')
lordlou Jun 16, 2023
d5c4556
added "objectiveRandom", "nbObjective", objectiveList and adapted Obj…
lordlou Jun 17, 2023
da36b61
fixed broken non-AP items
lordlou Jun 29, 2023
9903810
fixed generation failing on Webhost with string as a OptionSet (repla…
lordlou Jun 29, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 50 additions & 8 deletions worlds/sm/Options.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import typing
from Options import Choice, Range, OptionDict, OptionList, Option, Toggle, DefaultOnToggle
from Options import Choice, Range, OptionDict, OptionList, OptionSet, Option, Toggle, DefaultOnToggle
from .variaRandomizer.utils.objectives import _goals

class StartItemsRemovesFromPool(Toggle):
Expand Down Expand Up @@ -136,7 +136,7 @@ class AreaLayout(Toggle):

class DoorsColorsRando(Toggle):
"""Randomize the color of Red/Green/Yellow doors. Add four new type of doors which require Ice/Wave/Spazer/Plasma
beams to open them. When enabled, will force those beams as local items."""
beams to open them."""
display_name = "Doors Colors Rando"

class AllowGreyDoors(Toggle):
Expand Down Expand Up @@ -215,7 +215,11 @@ class Hud(Toggle):
display_name = "Hud"

class Animals(Toggle):
"""Replace saving the animals in the escape sequence by a random surprise."""
"""
Replace saving the animals in the escape sequence by a random surprise.
Note: This setting is not available when Escape Randomization is enabled, as it is replaced by Animals Challenges
(see Escape Randomization help for more information).
"""
display_name = "Animals"

class NoMusic(Toggle):
Expand Down Expand Up @@ -286,17 +290,52 @@ class Tourian(Choice):
option_Disabled = 2
default = 0

class Objective(OptionList):
class CustomObjective(Toggle):
"""
Use randomized custom objectives. You can choose which objectives are available for the randomizer to choose from. If enabled, the randomizer
will choose "Custom objective count" objectives from "Custom objective list". Otherwise, only objective is used. Default is disabled.
"""
display_name = "Custom objectives"

class CustomObjectiveCount(Range):
"""
Choose which objectives are required to sink the Golden Four statue and to open access to Tourian.
You can choose from 0 to 5 objectives.
By default you need to complete 4 objectives from the list to access Tourian. You can choose between 1 and 5. This setting is ignored if
""Custom objectives"" is set to false.
"""
display_name = "Custom objective count"
range_start = 1
range_end = 5
default = 4

class CustomObjectiveList(OptionSet):
"""
If ""Custom objectives"" is enabled, "Custom Objective count" will be used to pick an amount of objective from the list.
This setting is ignored if ""Custom objectives"" is set to false.
Note: If you leave the list empty no objective is required to access Tourian, ie. it's open.
Note: See the Tourian parameter to enable fast Tourian or trigger the escape when all objectives are completed.
Note: Current percentage of collected items is displayed in the inventory pause menu.
Note: Collect 100% items is excluded by default when randomizing the objectives list as it requires you to complete all the objectives.
Note: Collect 100% items is excluded by default as it requires you to complete all the objectives.
Note: In AP, Items% and areas objectives are counted toward location checks, not items collected or received, except for "collect all upgrades"

Format as a comma-separated list of objective names: ["kill three G4", "collect 75% items"] or ["random"] to specify the whole list except
"collect 100% items" and "nothing". The default is ["random"]. A full list of supported objectives can be found at:
https://github.com/ArchipelagoMW/Archipelago/blob/main/worlds/sm/variaRandomizer/utils/objectives.py
"""
display_name = "Custom objective list"
default = ["random"]
valid_keys = frozenset([name for name in _goals.keys()] + ["random"])
#valid_keys_casefold = True

Format as a comma-separated list of objective names: ["kill three G4", "collect 75% items"].
class Objective(OptionSet):
"""
If ""Custom objectives"" is disabled, choose which objectives are required to sink the Golden Four statue and to open access to Tourian.
You can choose from 0 to 5 objectives. Up to the first 5 objectives from the list will be selected.
Note: If you leave the list empty no objective is required to access Tourian, ie. it's open.
Note: See the Tourian parameter to enable fast Tourian or trigger the escape when all objectives are completed.
Note: Current percentage of collected items is displayed in the inventory pause menu.
Note: In AP, Items% and areas objectives are counted toward location checks, not items collected or received, except for "collect all upgrades"

Format as a comma-separated list of objective names: ["kill three G4", "collect 75% items"]. The default is ["kill all G4"].
A full list of supported objectives can be found at:
https://github.com/ArchipelagoMW/Archipelago/blob/main/worlds/sm/variaRandomizer/utils/objectives.py
"""
Expand Down Expand Up @@ -386,6 +425,9 @@ class RelaxedRoundRobinCF(Toggle):
"custom_preset": CustomPreset,
"varia_custom_preset": VariaCustomPreset,
"tourian": Tourian,
"custom_objective": CustomObjective,
"custom_objective_list": CustomObjectiveList,
"custom_objective_count": CustomObjectiveCount,
"objective": Objective,
"relaxed_round_robin_cf": RelaxedRoundRobinCF,
}
112 changes: 45 additions & 67 deletions worlds/sm/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ def init_mixin(self, parent: MultiWorld):
# for unit tests where MultiWorld is instantiated before worlds
if hasattr(parent, "state"):
self.smbm = {player: SMBoolManager(player, parent.state.smbm[player].maxDiff,
parent.state.smbm[player].onlyBossLeft, parent.state.smbm[player].lastAP) for player in
parent.state.smbm[player].onlyBossLeft) for player in
parent.get_game_players("Super Metroid")}
for player, group in parent.groups.items():
if (group["game"] == "Super Metroid"):
Expand Down Expand Up @@ -99,13 +99,15 @@ class SMWorld(World):
required_client_version = (0, 2, 6)

itemManager: ItemManager
spheres = None

Logic.factory('vanilla')

def __init__(self, world: MultiWorld, player: int):
self.rom_name_available_event = threading.Event()
self.locations = {}
self.need_comeback_check = True
if SMWorld.spheres != None:
SMWorld.spheres = None
super().__init__(world, player)

@classmethod
Expand All @@ -118,7 +120,7 @@ def generate_early(self):
Logic.factory('vanilla')

self.variaRando = VariaRandomizer(self.multiworld, get_base_rom_path(), self.player)
self.multiworld.state.smbm[self.player] = SMBoolManager(self.player, self.variaRando.maxDifficulty, lastAP = self.variaRando.args.startLocation)
self.multiworld.state.smbm[self.player] = SMBoolManager(self.player, self.variaRando.maxDifficulty)

# keeps Nothing items local so no player will ever pickup Nothing
# doing so reduces contribution of this world to the Multiworld the more Nothing there is though
Expand Down Expand Up @@ -177,12 +179,7 @@ def create_items(self):
item.Type,
None if itemClass == 'Boss' else self.item_name_to_id[item.Name],
player=self.player)

beamItems = ['Spazer', 'Ice', 'Wave' ,'Plasma']
if self.multiworld.doors_colors_rando[self.player].value != 0:
if item.Type in beamItems:
self.multiworld.local_items[self.player].value.add(item.Name)


if itemClass == 'Boss':
self.locked_items[item.Name] = smitem
elif item.Category == 'Nothing':
Expand Down Expand Up @@ -217,19 +214,13 @@ def set_entrance_rule(entrance, player, func):

self.multiworld.completion_condition[self.player] = lambda state: state.has('Mother Brain', self.player)

ammoItems = ['Missile', 'Super', 'PowerBomb']
for key, value in locationsDict.items():
location = self.multiworld.get_location(key, self.player)
set_available_rule(location, self.player, value.Available)
if value.AccessFrom is not None:
add_accessFrom_rule(location, self.player, value.AccessFrom)
if value.PostAvailable is not None:
add_postAvailable_rule(location, self.player, value.PostAvailable)

if self.multiworld.doors_colors_rando[self.player].value != 0:
add_item_rule(location, lambda item: item.game != self.game or item.type not in ammoItems or
(item.type in ammoItems and \
(not item.advancement or (item.advancement and item.player == self.player))))

for accessPoint in Logic.accessPoints:
if not accessPoint.Escape:
Expand Down Expand Up @@ -304,11 +295,6 @@ def create_regions(self):

def collect(self, state: CollectionState, item: Item) -> bool:
state.smbm[self.player].addItem(item.type)
if item.location != None and item.location.game == self.game:
for entrance in self.multiworld.get_region(item.location.parent_region.name, item.location.player).entrances:
if (entrance.parent_region.can_reach(state)):
state.smbm[item.location.player].lastAP = entrance.parent_region.name
break
return super(SMWorld, self).collect(state, item)

def remove(self, state: CollectionState, item: Item) -> bool:
Expand Down Expand Up @@ -359,42 +345,57 @@ def pre_fill(self):
loc.address = loc.item.code = None

def post_fill(self):
# Having a sorted itemLocs from collection order is required for escapeTrigger when Tourian is Disabled.
# We cant use stage_post_fill for this as its called after worlds' post_fill.
# get_spheres could be cached in multiworld?
# Another possible solution would be to have a globally accessible list of items in the order in which the get placed in push_item
# and use the inversed starting from the first progression item.
if (SMWorld.spheres == None):
SMWorld.spheres = [itemLoc for sphere in self.multiworld.get_spheres() for itemLoc in sorted(sphere, key=lambda location: location.name)]

self.itemLocs = [
ItemLocation(ItemManager.Items[itemLoc.item.type
ItemLocation(copy.copy(ItemManager.Items[itemLoc.item.type
if isinstance(itemLoc.item, SMItem) and itemLoc.item.type in ItemManager.Items else
'ArchipelagoItem'],
locationsDict[itemLoc.name], itemLoc.item.player, True)
'ArchipelagoItem']),
copy.copy(locationsDict[itemLoc.name]), itemLoc.item.player, True)
for itemLoc in self.multiworld.get_locations(self.player)
]
self.progItemLocs = [
ItemLocation(ItemManager.Items[itemLoc.item.type
if isinstance(itemLoc.item, SMItem) and itemLoc.item.type in ItemManager.Items else
'ArchipelagoItem'],
locationsDict[itemLoc.name], itemLoc.item.player, True)
for itemLoc in self.multiworld.get_locations(self.player) if itemLoc.item.advancement
]
for itemLoc in self.itemLocs:
if itemLoc.Item.Class == "Boss":
itemLoc.Item.Class = "Minor"
for itemLoc in self.progItemLocs:
if itemLoc.Item.Class == "Boss":
itemLoc.Item.Class = "Minor"

localItemLocs = [il for il in self.itemLocs if il.player == self.player]
localprogItemLocs = [il for il in self.progItemLocs if il.player == self.player]
escapeTrigger = None
if self.variaRando.randoExec.randoSettings.restrictions["EscapeTrigger"]:
#used to simulate received items
first_local_collected_loc = next(itemLoc for itemLoc in SMWorld.spheres if itemLoc.player == self.player)

playerItemsItemLocs = [
ItemLocation(copy.copy(ItemManager.Items[
itemLoc.item.type if isinstance(itemLoc.item, SMItem) and itemLoc.item.type in ItemManager.Items else
'ArchipelagoItem']),
copy.copy(locationsDict[itemLoc.name] if itemLoc.game == self.game else
locationsDict[first_local_collected_loc.name]),
itemLoc.item.player,
True)
for itemLoc in SMWorld.spheres if itemLoc.item.player == self.player
]
for itemLoc in playerItemsItemLocs:
if itemLoc.Item.Class == "Boss":
itemLoc.Item.Class = "Minor"

playerProgItemsItemLocs = [itemLoc for itemLoc in playerItemsItemLocs if itemLoc.item.advancement]

escapeTrigger = (playerItemsItemLocs, playerProgItemsItemLocs, 'Full')

escapeTrigger = (localItemLocs, localprogItemLocs, 'Full') if self.variaRando.randoExec.randoSettings.restrictions["EscapeTrigger"] else None
escapeOk = self.variaRando.randoExec.graphBuilder.escapeGraph(self.variaRando.container, self.variaRando.randoExec.areaGraph, self.variaRando.randoExec.randoSettings.maxDiff, escapeTrigger)
assert escapeOk, "Could not find a solution for escape"

if (not escapeOk):
logger.warning(f"Escape Rando forced to 'Off' for player {self.multiworld.get_player_name(self.player)} because could not find a solution for escape")

# if we couldn't find an area layout then the escape graph is not created either
# and getDoorConnections will crash if random escape is activated.
self.variaRando.doors = GraphUtils.getDoorConnections(self.variaRando.randoExec.areaGraph,
self.variaRando.args.area, self.variaRando.args.bosses,
self.variaRando.args.escapeRando)
self.variaRando.args.escapeRando if escapeOk else False)

self.variaRando.randoExec.postProcessItemLocs(self.itemLocs, self.variaRando.args.hideItems)

self.need_comeback_check = False

@classmethod
def stage_post_fill(cls, world):
new_state = CollectionState(world)
Expand Down Expand Up @@ -872,29 +873,6 @@ class SMLocation(Location):
def __init__(self, player: int, name: str, address=None, parent=None):
super(SMLocation, self).__init__(player, name, address, parent)

def can_reach(self, state: CollectionState) -> bool:
# self.access_rule computes faster on average, so placing it first for faster abort
assert self.parent_region, "Can't reach location without region"
return super(SMLocation, self).can_reach(state) and \
(not state.multiworld.worlds[self.player].need_comeback_check or \
self.can_comeback(state, self.item))

def can_comeback(self, state: CollectionState, item):
randoExec = state.multiworld.worlds[self.player].variaRando.randoExec
randoService = randoExec.setup.services

comebackCheck = ComebackCheckType.JustComeback
n = 2 if GraphUtils.isStandardStart(randoExec.graphSettings.startAP) else 3
# is early game
if (len([loc for loc in state.locations_checked if loc.player == self.player]) <= n or randoExec.graphSettings.startAP == state.smbm[self.player].lastAP):
comebackCheck = ComebackCheckType.NoCheck
container = ItemLocContainer(state.smbm[self.player], [], [])
return randoService.fullComebackCheck( container,
state.smbm[self.player].lastAP,
ItemManager.Items[item.type] if item is not None and item.player == self.player else None,
locationsDict[self.name],
comebackCheck)

class SMItem(Item):
game = "Super Metroid"
type: str
Expand Down
Binary file modified worlds/sm/data/SMBasepatch_prebuilt/multiworld-basepatch.ips
Binary file not shown.
Loading