diff options
author | Star Rauchenberger <fefferburbia@gmail.com> | 2025-08-27 18:53:50 -0400 |
---|---|---|
committer | Star Rauchenberger <fefferburbia@gmail.com> | 2025-08-27 18:53:50 -0400 |
commit | 18e64c9102f526b04c44623aa39c9b3cb6dee1ff (patch) | |
tree | 39b856ae472a1b9033a9122e63be28bddd55bea2 /apworld/rules.py | |
parent | 4ae885f392261b939e6f21b47d545f609c6e1965 (diff) | |
download | lingo2-archipelago-18e64c9102f526b04c44623aa39c9b3cb6dee1ff.tar.gz lingo2-archipelago-18e64c9102f526b04c44623aa39c9b3cb6dee1ff.tar.bz2 lingo2-archipelago-18e64c9102f526b04c44623aa39c9b3cb6dee1ff.zip |
Letter requirements in apworld
Also fixed or logic so everything actually works now.
Diffstat (limited to 'apworld/rules.py')
-rw-r--r-- | apworld/rules.py | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/apworld/rules.py b/apworld/rules.py index 05689e9..4a84acf 100644 --- a/apworld/rules.py +++ b/apworld/rules.py | |||
@@ -15,10 +15,15 @@ def lingo2_can_satisfy_requirements(state: CollectionState, reqs: AccessRequirem | |||
15 | if not all(state.can_reach_region(region_name, world.player) for region_name in reqs.rooms): | 15 | if not all(state.can_reach_region(region_name, world.player) for region_name in reqs.rooms): |
16 | return False | 16 | return False |
17 | 17 | ||
18 | # TODO: symbols, letters | 18 | # TODO: symbols |
19 | 19 | ||
20 | for disjunction in reqs.or_logic: | 20 | for letter_key, letter_level in reqs.letters.items(): |
21 | if not any(lingo2_can_satisfy_requirements(state, sub_reqs, world) for sub_reqs in disjunction): | 21 | if not state.has(letter_key, world.player, letter_level): |
22 | return False | ||
23 | |||
24 | if len(reqs.or_logic) > 0: | ||
25 | if not all(any(lingo2_can_satisfy_requirements(state, sub_reqs, world) for sub_reqs in subjunction) | ||
26 | for subjunction in reqs.or_logic): | ||
22 | return False | 27 | return False |
23 | 28 | ||
24 | return True | 29 | return True |