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

The Witness: Automatic Postgame & Disabled Panels Calculation #2698

Merged
merged 113 commits into from
Jun 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
113 commits
Select commit Hold shift + click to select a range
873b132
Refactor postgame code to be more readable
NewSoupVi Nov 25, 2023
960dad3
Change all references to options to strings
NewSoupVi Nov 25, 2023
e28ff3b
oops
NewSoupVi Nov 25, 2023
62409dc
Fix some outdated code related to yaml-disabled EPs
NewSoupVi Nov 25, 2023
088a1ef
Small fixes to short/longbox stuff (thanks Medic)
NewSoupVi Nov 25, 2023
19c1a61
comment
NewSoupVi Nov 25, 2023
8242f4f
fix duplicate
NewSoupVi Nov 25, 2023
d5a8269
Removed triplicate lmfao
NewSoupVi Nov 25, 2023
0b13118
Better comment
NewSoupVi Nov 25, 2023
08e3e12
added another 'unfun' postgame consideration
NewSoupVi Nov 25, 2023
aa5169b
comment
NewSoupVi Nov 25, 2023
d789ea3
more option strings
NewSoupVi Nov 26, 2023
d0b3d78
oops
NewSoupVi Nov 26, 2023
4e31372
Remove an unnecessary comparison
NewSoupVi Dec 1, 2023
578ed78
another string missed
NewSoupVi Dec 1, 2023
d458820
Merge remote-tracking branch 'upstream/main' into option_names
NewSoupVi Dec 7, 2023
c86e5bf
New classification changes (Credit: Exempt-Medic)
NewSoupVi Dec 29, 2023
d8b4005
Don't need to pass world
NewSoupVi Dec 29, 2023
72a8ef8
Comments
NewSoupVi Dec 29, 2023
5f47508
Replace it with another magic system because why not at this point :D…
NewSoupVi Dec 29, 2023
5a15c04
oops
NewSoupVi Dec 29, 2023
c368cb7
Oops
NewSoupVi Dec 29, 2023
1b77410
Another was missed
NewSoupVi Dec 31, 2023
fe1db12
Merge remote-tracking branch 'upstream/main' into option_names
NewSoupVi Dec 31, 2023
d913917
Merge remote-tracking branch 'upstream/main' into option_names
NewSoupVi Dec 31, 2023
7e6cdd4
Make events conditions. Disable_Non_Randomized will no longer just 'h…
NewSoupVi Jan 1, 2024
1030bfa
What the fuck? Has this just always been broken?
NewSoupVi Jan 1, 2024
a1e1948
Merge branch 'item_classifications' into event_revamp_and_item_classi…
NewSoupVi Jan 1, 2024
ae6a5a1
Don't have boolean function with 'not' in the name
NewSoupVi Jan 1, 2024
8c466e2
Another useful classification
NewSoupVi Jan 2, 2024
a116d00
slight code refactor
NewSoupVi Jan 2, 2024
cb5df8f
Funny haha booleans
NewSoupVi Jan 2, 2024
17e8753
This would create a really bad merge error
NewSoupVi Jan 4, 2024
10b1be6
Merge branch 'event_revamp_and_item_classifications' into automatic_p…
NewSoupVi Jan 10, 2024
e854261
I can't believe this actually kind of works
NewSoupVi Jan 10, 2024
962a091
And here's the punchline. + some bugfixes
NewSoupVi Jan 10, 2024
118443c
Comment dat code
NewSoupVi Jan 10, 2024
a1961d8
Comments galore
NewSoupVi Jan 10, 2024
5089f82
LMAO OOPS
NewSoupVi Jan 10, 2024
235a041
so nice I did it twice
NewSoupVi Jan 10, 2024
c8e93f8
debug x2
NewSoupVi Jan 10, 2024
50e39fc
Careful
NewSoupVi Jan 10, 2024
718ef0b
Add more comments
NewSoupVi Jan 10, 2024
a63c01a
That comment is a bit unnecessary now
NewSoupVi Jan 10, 2024
d6e1a4d
Fix overriding region connections
NewSoupVi Jan 10, 2024
df033a4
Correct a comment
NewSoupVi Jan 11, 2024
5a0d781
Correct again
NewSoupVi Jan 11, 2024
34da43e
Rename variable
NewSoupVi Jan 11, 2024
52e8c48
Idk I guess this is in this branch now
NewSoupVi Jan 11, 2024
2051232
More tweaking of postgame & comments
NewSoupVi Jan 14, 2024
fb6c22c
This is commit just exists to fix that grammar error
NewSoupVi Jan 14, 2024
5486b61
Merge remote-tracking branch 'upstream/main' into automatic_postgame
NewSoupVi Jan 16, 2024
4bd974a
I think I can just fucking delete this now???
NewSoupVi Jan 27, 2024
47cb24d
Forgot to reset something here
NewSoupVi Jan 27, 2024
e0aa27b
Delete dead codepath
NewSoupVi Feb 7, 2024
21f2682
Merge remote-tracking branch 'upstream/main' into automatic_postgame
NewSoupVi Feb 14, 2024
bb4c7d1
Obelisk Keys were getting yote erroneously
NewSoupVi Feb 22, 2024
d93f52c
More comments
NewSoupVi Feb 22, 2024
d1af8a9
Merge remote-tracking branch 'upstream/main' into automatic_postgame
NewSoupVi Feb 25, 2024
221ddb8
Fix duplicate connections
NewSoupVi Feb 25, 2024
6bacae9
Oopsington III
NewSoupVi Feb 25, 2024
5f490eb
Merge remote-tracking branch 'upstream/main' into automatic_postgame
NewSoupVi Feb 29, 2024
a9823f1
Merge remote-tracking branch 'upstream/main' into automatic_postgame
NewSoupVi Mar 10, 2024
c54995a
performance improvements & cleanup
NewSoupVi Mar 10, 2024
1005680
More rules cleanup and performance improvements
NewSoupVi Mar 10, 2024
08b87ac
Oh cool I can do this huh
NewSoupVi Mar 10, 2024
f12592c
Okay but this is even more swag tho
NewSoupVi Mar 10, 2024
5103b24
Lazy eval
NewSoupVi Mar 10, 2024
380c083
remove some implicit checks
NewSoupVi Mar 10, 2024
7293e69
Is this too magical yet
NewSoupVi Mar 10, 2024
eb7bfa1
more guard magic
NewSoupVi Mar 10, 2024
16a9013
Maaaaaaaagiccccccccc
NewSoupVi Mar 10, 2024
5d4e4e6
Laaaaaaaaaaaaaaaazzzzzzyyyyyyyyyyy
NewSoupVi Mar 10, 2024
a1cec8b
Make it docstring
NewSoupVi Mar 10, 2024
11fb1d7
Newline bc I like that better
NewSoupVi Mar 10, 2024
453a260
this is a little spooky lol
NewSoupVi Mar 10, 2024
0200418
lol
NewSoupVi Mar 10, 2024
853680d
Wait
NewSoupVi Mar 10, 2024
d04fa5e
spoO
NewSoupVi Mar 11, 2024
db3fb39
Better variable name and comment
NewSoupVi Mar 11, 2024
1611a7b
Improved comment again
NewSoupVi Mar 11, 2024
d5ced56
better API
NewSoupVi Mar 22, 2024
9adcde9
Merge branch 'main' into automatic_postgame
NewSoupVi Mar 29, 2024
e8eb00a
Merge remote-tracking branch 'upstream/main' into automatic_postgame
NewSoupVi Apr 11, 2024
abcc939
oops I deleted a deepcopy
NewSoupVi Apr 11, 2024
4e3b127
lol help
NewSoupVi Apr 11, 2024
8dccb66
Help???
NewSoupVi Apr 11, 2024
95bedf4
player_regionsns lmao
NewSoupVi Apr 26, 2024
e53f027
Add some comments
NewSoupVi Apr 26, 2024
e083f43
Make doors disabled properly again. I hope this works
NewSoupVi Apr 26, 2024
ebdf527
Don't disable lasers
NewSoupVi Apr 26, 2024
7529ca1
Omega oops
NewSoupVi Apr 26, 2024
5e1eb70
Make Floor 2 Exit not exist
NewSoupVi Apr 26, 2024
9691ec7
Make a fix that's warps compatible
NewSoupVi Apr 26, 2024
d01c769
I think this was an oversight, I tested a seed and it seems to have t…
NewSoupVi Apr 27, 2024
2723bf0
This is definitely less Violet than before
NewSoupVi Apr 27, 2024
096a9d5
Does this feel more violet lol
NewSoupVi Apr 27, 2024
23adcc1
Exception if a laser gets disabled, cleanup
NewSoupVi Apr 27, 2024
5e2bb47
Ruff
NewSoupVi Apr 27, 2024
9474573
>:(
NewSoupVi Apr 27, 2024
33e5e80
consistent utils import
NewSoupVi Apr 27, 2024
b0b9311
Merge branch 'main' into automatic_postgame
NewSoupVi May 4, 2024
2bda30b
Make autopostgame more reviewable (hopefully)
NewSoupVi May 19, 2024
b84ee77
more reviewability
NewSoupVi May 19, 2024
6e58581
WitnessRule
NewSoupVi May 19, 2024
3ab5546
replace another instance of it
NewSoupVi May 19, 2024
65f7331
lint
NewSoupVi May 19, 2024
7ae4de9
style
NewSoupVi May 19, 2024
92f469e
comment
NewSoupVi May 19, 2024
52e1eed
found the bug
NewSoupVi May 19, 2024
a37e6f8
Move comment
NewSoupVi May 19, 2024
7e12757
Get rid of cache and ugly allow_victory
NewSoupVi May 21, 2024
226efd8
comments and lint
NewSoupVi May 28, 2024
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
4 changes: 2 additions & 2 deletions worlds/witness/data/WitnessLogic.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1028,15 +1028,15 @@ Mountain Floor 1 Bridge (Mountain Floor 1) - Mountain Floor 1 At Door - TrueOneW
Mountain Floor 1 At Door (Mountain Floor 1) - Mountain Floor 2 - 0x09E54:
Door - 0x09E54 (Exit) - 0x09EAF & 0x09F6E & 0x09E6B & 0x09E7B

Mountain Floor 2 (Mountain Floor 2) - Mountain Floor 2 Light Bridge Room Near - 0x09FFB - Mountain Floor 2 Beyond Bridge - 0x09E86 - Mountain Floor 2 At Door - 0x09ED8 & 0x09E86 - Mountain Pink Bridge EP - TrueOneWay:
Mountain Floor 2 (Mountain Floor 2) - Mountain Floor 2 Light Bridge Room Near - 0x09FFB - Mountain Floor 2 Beyond Bridge - 0x09E86 - Mountain Floor 2 Above The Abyss - True - Mountain Pink Bridge EP - TrueOneWay:
158426 - 0x09FD3 (Near Row 1) - True - Stars & Colored Squares & Stars + Same Colored Symbol
158427 - 0x09FD4 (Near Row 2) - 0x09FD3 - Stars & Colored Squares & Stars + Same Colored Symbol
158428 - 0x09FD6 (Near Row 3) - 0x09FD4 - Stars & Colored Squares & Stars + Same Colored Symbol
158429 - 0x09FD7 (Near Row 4) - 0x09FD6 - Stars & Colored Squares & Stars + Same Colored Symbol & Shapers
158430 - 0x09FD8 (Near Row 5) - 0x09FD7 - Colored Squares & Symmetry & Colored Dots
Door - 0x09FFB (Staircase Near) - 0x09FD8

Mountain Floor 2 At Door (Mountain Floor 2) - Mountain Floor 2 Elevator Room - 0x09EDD:
Mountain Floor 2 Above The Abyss (Mountain Floor 2) - Mountain Floor 2 Elevator Room - 0x09EDD & 0x09ED8 & 0x09E86:
Door - 0x09EDD (Elevator Room Entry) - 0x09ED8 & 0x09E86

Mountain Floor 2 Light Bridge Room Near (Mountain Floor 2):
Expand Down
4 changes: 2 additions & 2 deletions worlds/witness/data/WitnessLogicExpert.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1028,15 +1028,15 @@ Mountain Floor 1 Bridge (Mountain Floor 1) - Mountain Floor 1 At Door - TrueOneW
Mountain Floor 1 At Door (Mountain Floor 1) - Mountain Floor 2 - 0x09E54:
Door - 0x09E54 (Exit) - 0x09EAF & 0x09F6E & 0x09E6B & 0x09E7B

Mountain Floor 2 (Mountain Floor 2) - Mountain Floor 2 Light Bridge Room Near - 0x09FFB - Mountain Floor 2 Beyond Bridge - 0x09E86 - Mountain Floor 2 At Door - 0x09ED8 & 0x09E86 - Mountain Pink Bridge EP - TrueOneWay:
Mountain Floor 2 (Mountain Floor 2) - Mountain Floor 2 Light Bridge Room Near - 0x09FFB - Mountain Floor 2 Beyond Bridge - 0x09E86 - Mountain Floor 2 Above The Abyss - True - Mountain Pink Bridge EP - TrueOneWay:
158426 - 0x09FD3 (Near Row 1) - True - Stars & Colored Squares & Stars + Same Colored Symbol
158427 - 0x09FD4 (Near Row 2) - 0x09FD3 - Stars & Triangles & Stars + Same Colored Symbol
158428 - 0x09FD6 (Near Row 3) - 0x09FD4 - Stars & Shapers & Negative Shapers & Stars + Same Colored Symbol
158429 - 0x09FD7 (Near Row 4) - 0x09FD6 - Stars
158430 - 0x09FD8 (Near Row 5) - 0x09FD7 - Stars & Stars + Same Colored Symbol & Rotated Shapers & Eraser
Door - 0x09FFB (Staircase Near) - 0x09FD8

Mountain Floor 2 At Door (Mountain Floor 2) - Mountain Floor 2 Elevator Room - 0x09EDD:
Mountain Floor 2 Above The Abyss (Mountain Floor 2) - Mountain Floor 2 Elevator Room - 0x09EDD & 0x09ED8 & 0x09E86:
Door - 0x09EDD (Elevator Room Entry) - 0x09ED8 & 0x09E86

Mountain Floor 2 Light Bridge Room Near (Mountain Floor 2):
Expand Down
4 changes: 2 additions & 2 deletions worlds/witness/data/WitnessLogicVanilla.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1028,15 +1028,15 @@ Mountain Floor 1 Bridge (Mountain Floor 1) - Mountain Floor 1 At Door - TrueOneW
Mountain Floor 1 At Door (Mountain Floor 1) - Mountain Floor 2 - 0x09E54:
Door - 0x09E54 (Exit) - 0x09EAF & 0x09F6E & 0x09E6B & 0x09E7B

Mountain Floor 2 (Mountain Floor 2) - Mountain Floor 2 Light Bridge Room Near - 0x09FFB - Mountain Floor 2 Beyond Bridge - 0x09E86 - Mountain Floor 2 At Door - 0x09ED8 & 0x09E86 - Mountain Pink Bridge EP - TrueOneWay:
Mountain Floor 2 (Mountain Floor 2) - Mountain Floor 2 Light Bridge Room Near - 0x09FFB - Mountain Floor 2 Beyond Bridge - 0x09E86 - Mountain Floor 2 Above The Abyss - True - Mountain Pink Bridge EP - TrueOneWay:
158426 - 0x09FD3 (Near Row 1) - True - Colored Squares
158427 - 0x09FD4 (Near Row 2) - 0x09FD3 - Colored Squares & Dots
158428 - 0x09FD6 (Near Row 3) - 0x09FD4 - Stars & Colored Squares & Stars + Same Colored Symbol
158429 - 0x09FD7 (Near Row 4) - 0x09FD6 - Stars & Colored Squares & Stars + Same Colored Symbol & Shapers
158430 - 0x09FD8 (Near Row 5) - 0x09FD7 - Colored Squares
Door - 0x09FFB (Staircase Near) - 0x09FD8

Mountain Floor 2 At Door (Mountain Floor 2) - Mountain Floor 2 Elevator Room - 0x09EDD:
Mountain Floor 2 Above The Abyss (Mountain Floor 2) - Mountain Floor 2 Elevator Room - 0x09EDD & 0x09ED8 & 0x09E86:
Door - 0x09EDD (Elevator Room Entry) - 0x09ED8 & 0x09E86

Mountain Floor 2 Light Bridge Room Near (Mountain Floor 2):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,17 +134,3 @@ Disabled Locations:
0x17E67 (Bunker UV Room 2)
0x09DE0 (Bunker Laser)
0x0A079 (Bunker Elevator Control)

0x034A7 (Monastery Left Shutter EP)
0x034AD (Monastery Middle Shutter EP)
0x034AF (Monastery Right Shutter EP)
0x339B6 (Theater Eclipse EP)
0x33A29 (Theater Window EP)
0x33A2A (Theater Door EP)
0x33B06 (Theater Church EP)
0x3352F (Tutorial Gate EP)
0x33600 (Tutorial Patio Flowers EP)
0x035F5 (Bunker Tinted Door EP)
0x000D3 (Bunker Green Room Flowers EP)
0x33A20 (Theater Flowers EP)
0x03BE2 (Monastery Garden Left EP)
23 changes: 0 additions & 23 deletions worlds/witness/data/settings/Exclusions/Vaults.txt
Original file line number Diff line number Diff line change
@@ -1,31 +1,8 @@
Disabled Locations:
0x033D4 (Outside Tutorial Vault)
0x03481 (Outside Tutorial Vault Box)
0x033D0 (Outside Tutorial Vault Door)
0x0CC7B (Desert Vault)
0x0339E (Desert Vault Box)
0x03444 (Desert Vault Door)
0x00AFB (Shipwreck Vault)
0x03535 (Shipwreck Vault Box)
0x17BB4 (Shipwreck Vault Door)
0x15ADD (Jungle Vault)
0x03702 (Jungle Vault Box)
0x15287 (Jungle Vault Door)
0x002A6 (Mountainside Vault)
0x03542 (Mountainside Vault Box)
0x00085 (Mountainside Vault Door)
0x2FAF6 (Tunnels Vault Box)
0x00815 (Theater Video Input)
0x03553 (Theater Tutorial Video)
0x03552 (Theater Desert Video)
0x0354E (Theater Jungle Video)
0x03549 (Theater Challenge Video)
0x0354F (Theater Shipwreck Video)
0x03545 (Theater Mountain Video)
0x03505 (Tutorial Gate Close)
0x339B6 (Theater clipse EP)
0x33A29 (Theater Window EP)
0x33A2A (Theater Door EP)
0x33B06 (Theater Church EP)
0x33A20 (Theater Flowers EP)
0x3352F (Tutorial Gate EP)
4 changes: 0 additions & 4 deletions worlds/witness/data/settings/Postgame/Beyond_Challenge.txt

This file was deleted.

This file was deleted.

This file was deleted.

22 changes: 0 additions & 22 deletions worlds/witness/data/settings/Postgame/Challenge_Vault_Box.txt

This file was deleted.

27 changes: 0 additions & 27 deletions worlds/witness/data/settings/Postgame/Mountain_Lower.txt

This file was deleted.

41 changes: 0 additions & 41 deletions worlds/witness/data/settings/Postgame/Mountain_Upper.txt

This file was deleted.

30 changes: 0 additions & 30 deletions worlds/witness/data/settings/Postgame/Path_To_Challenge.txt

This file was deleted.

51 changes: 45 additions & 6 deletions worlds/witness/data/static_logic.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from collections import defaultdict
from functools import lru_cache
from typing import Dict, List
from typing import Dict, List, Set, Tuple

from .item_definition_classes import (
CATEGORY_NAME_MAPPINGS,
Expand All @@ -10,11 +11,13 @@
WeightedItemDefinition,
)
from .utils import (
WitnessRule,
define_new_region,
get_items,
get_sigma_expert_logic,
get_sigma_normal_logic,
get_vanilla_logic,
logical_or_witness_rules,
parse_lambda,
)

Expand All @@ -41,7 +44,8 @@ def read_logic_file(self, lines) -> None:
current_region = new_region_and_connections[0]
region_name = current_region["name"]
self.ALL_REGIONS_BY_NAME[region_name] = current_region
self.STATIC_CONNECTIONS_BY_REGION_NAME[region_name] = new_region_and_connections[1]
for connection in new_region_and_connections[1]:
self.CONNECTIONS_WITH_DUPLICATES[region_name][connection[0]].add(connection[1])
current_area["regions"].append(region_name)
continue

Expand Down Expand Up @@ -80,13 +84,15 @@ def read_logic_file(self, lines) -> None:
self.ENTITIES_BY_NAME[self.ENTITIES_BY_HEX[entity_hex]["checkName"]] = self.ENTITIES_BY_HEX[entity_hex]

self.STATIC_DEPENDENT_REQUIREMENTS_BY_HEX[entity_hex] = {
"panels": parse_lambda(required_panel_lambda)
"entities": parse_lambda(required_panel_lambda)
}

# Lasers and Doors exist in a region, but don't have a regional *requirement*
# If a laser is activated, you don't need to physically walk up to it for it to count
# As such, logically, they behave more as if they were part of the "Entry" region
self.ALL_REGIONS_BY_NAME["Entry"]["panels"].append(entity_hex)
self.ALL_REGIONS_BY_NAME["Entry"]["entities"].append(entity_hex)
# However, it will also be important to keep track of their physical location for postgame purposes.
current_region["physical_entities"].append(entity_hex)
continue

required_item_lambda = line_split.pop(0)
Expand Down Expand Up @@ -117,7 +123,7 @@ def read_logic_file(self, lines) -> None:
required_items = frozenset(required_items)

requirement = {
"panels": required_panels,
"entities": required_panels,
"items": required_items
}

Expand Down Expand Up @@ -145,7 +151,37 @@ def read_logic_file(self, lines) -> None:
self.ENTITIES_BY_NAME[self.ENTITIES_BY_HEX[entity_hex]["checkName"]] = self.ENTITIES_BY_HEX[entity_hex]
self.STATIC_DEPENDENT_REQUIREMENTS_BY_HEX[entity_hex] = requirement

current_region["panels"].append(entity_hex)
current_region["entities"].append(entity_hex)
current_region["physical_entities"].append(entity_hex)

def reverse_connection(self, source_region: str, connection: Tuple[str, Set[WitnessRule]]):
target = connection[0]
traversal_options = connection[1]

# Reverse this connection with all its possibilities, except the ones marked as "OneWay".
for requirement in traversal_options:
remaining_options = set()
for option in requirement:
if not any(req == "TrueOneWay" for req in option):
remaining_options.add(option)

if remaining_options:
self.CONNECTIONS_WITH_DUPLICATES[target][source_region].add(frozenset(remaining_options))

def reverse_connections(self):
# Iterate all connections
for region_name, connections in list(self.CONNECTIONS_WITH_DUPLICATES.items()):
for connection in connections.items():
self.reverse_connection(region_name, connection)

def combine_connections(self):
# All regions need to be present, and this dict is copied later - Thus, defaultdict is not the correct choice.
self.STATIC_CONNECTIONS_BY_REGION_NAME = {region_name: set() for region_name in self.ALL_REGIONS_BY_NAME}

for source, connections in self.CONNECTIONS_WITH_DUPLICATES.items():
for target, requirement in connections.items():
combined_req = logical_or_witness_rules(requirement)
self.STATIC_CONNECTIONS_BY_REGION_NAME[source].add((target, combined_req))

def __init__(self, lines=None) -> None:
if lines is None:
Expand All @@ -154,6 +190,7 @@ def __init__(self, lines=None) -> None:
# All regions with a list of panels in them and the connections to other regions, before logic adjustments
self.ALL_REGIONS_BY_NAME = dict()
self.ALL_AREAS_BY_NAME = dict()
self.CONNECTIONS_WITH_DUPLICATES = defaultdict(lambda: defaultdict(lambda: set()))
self.STATIC_CONNECTIONS_BY_REGION_NAME = dict()

self.ENTITIES_BY_HEX = dict()
Expand All @@ -167,6 +204,8 @@ def __init__(self, lines=None) -> None:
self.ENTITY_ID_TO_NAME = dict()

self.read_logic_file(lines)
self.reverse_connections()
self.combine_connections()


# Item data parsed from WitnessItems.txt
Expand Down
Loading
Loading