Files
Grinch-AP/worlds/witness/generate_data_file.py
NewSoupVi 08b3b3ecf5 The Witness: The Secret Feature (#4370)
* Secret Feature

* Fixes

* Fixes and unit tests

* renaming some variables

* Fix the thing

* unit test for elevator egg

* Docstring

* reword

* Fix duplicate locations I think?

* Remove debug thing

* Add the tests back lol

* Make it so that you can exclude an egg to disable it

* Improve hint text for easter eggs

* Update worlds/witness/options.py

Co-authored-by: Scipio Wright <scipiowright@gmail.com>

* Update worlds/witness/player_logic.py

Co-authored-by: Scipio Wright <scipiowright@gmail.com>

* Update worlds/witness/options.py

Co-authored-by: Scipio Wright <scipiowright@gmail.com>

* Update worlds/witness/player_logic.py

Co-authored-by: Scipio Wright <scipiowright@gmail.com>

* Update worlds/witness/rules.py

Co-authored-by: Scipio Wright <scipiowright@gmail.com>

* Update test_easter_egg_shuffle.py

* This was actually not necessary, since this is the Egg requirements, nothing to do with location names

* Move one of them

* Improve logic

* Lol

* Moar

* Adjust unit tests

* option docstring adjustment

* Recommend door shuffle

* Don't overlap IDs

* Option description idk

* Change the way the difficulties work to reward playing higher modes

* Fix merge

* add some stuff to generate_data_file (this file is not imported during gen, don't review it :D)

* oop

* space

* This can be earlier than I thought, apparently.

* buffer

* Comment

* Make sure the option is VERY visible

* Some mypy stuff

* apparently ruff wants this

* .

* durinig

* Update options.py

* Explain the additional effects of each difficulty

* Fix logic of flood room secret

* Add Southern Peninsula Area

* oop

---------

Co-authored-by: Scipio Wright <scipiowright@gmail.com>
2025-03-08 01:44:06 +01:00

55 lines
1.8 KiB
Python

from collections import defaultdict
from data import static_logic as static_witness_logic
if __name__ == "__main__":
with open("data/APWitnessData.h", "w") as datafile:
datafile.write("""# pragma once
# include <map>
# include <set>
# include <string>
""")
area_to_location_ids = defaultdict(list)
area_to_entity_ids = defaultdict(list)
for entity_id, entity_object in static_witness_logic.ENTITIES_BY_HEX.items():
location_id = entity_object["id"]
area = entity_object["area"]["name"]
area_to_entity_ids[area].append(entity_id)
if location_id is None:
continue
area_to_location_ids[area].append(str(location_id))
datafile.write("inline std::map<std::string, std::set<int64_t>> areaNameToLocationIDs = {\n")
datafile.write(
"\n".join(
'\t{"' + area + '", { ' + ", ".join(location_ids) + " }},"
for area, location_ids in area_to_location_ids.items()
)
)
datafile.write("\n};\n\n")
datafile.write("inline std::map<std::string, std::set<int64_t>> areaNameToEntityIDs = {\n")
datafile.write(
"\n".join(
'\t{"' + area + '", { ' + ", ".join(entity_ids) + " }},"
for area, entity_ids in area_to_entity_ids.items()
)
)
datafile.write("\n};\n\n")
datafile.write("inline std::map<int, std::string> entityToName = {")
datafile.write(
"\n".join(
"\t{ " + entity_hex + ', "' + entity_object["checkName"] + '" },'
for entity_hex, entity_object in static_witness_logic.ENTITIES_BY_HEX.items()
)
)
datafile.write("\n};\n\n")