SFTtech / openage

Free (as in freedom) open source clone of the Age of Empires II engine 🚀
http://openage.dev
Other
12.79k stars 1.13k forks source link

KeyError during AoE2DE asset conversion on macOS M2 #1701

Closed ZzzhHe closed 1 day ago

ZzzhHe commented 1 month ago

Hi! I'm encountering an issue while trying to run openage with Age of Empires 2: Definitive Edition. After successfully building the project, I initiated the game launch, but the conversion process fails with a KeyError related to the effect_apply_type during metadata conversion.

I downloaded AoE2DE through the SteamCMD command app_update 813780 validate according to the documentation.

Operating system: macOS 14 System architecture: ARM64 (Apple Silicon M2) C++ Compiler: AppleClang 16.0.0 Python Version: Python 3.11.5

❯ ./run main
INFO [py] launching openage v0.5.3-460-ga3df3071
INFO [py] compiled by AppleClang 16.0.0.16000026
INFO [py] running in DEVMODE
INFO [py] openage nyan API modpack is up to date
  Do you want to convert assets? [Y/n]
> Y

openage requires a local game installation for conversion
but no local installation could be found automatically.
  Do you want to download the AoC trial version? [Y/n]
> N
Could not find any installation directory automatically.
Please enter an AOE2 install path manually.
> /Users/Programming/Steam/AoE2
converting from '/Users/Programming/Steam/AoE2'
INFO [py] Looking for compatible games to convert...
INFO [py] Compatible game edition detected:
INFO [py]  * Age of Empires 2: Definitive Edition
INFO [py] converting metadata
Traceback (most recent call last):
  File "run.py", line 20, in init run
    main()
  File "/Users/Programming/GitRepo/openage/.bin/usr-bin-clang++-release-Oauto-sanitize-none/openage/__main__.py", line 168, in main
    return args.entrypoint(args, cli.error)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/Programming/GitRepo/openage/.bin/usr-bin-clang++-release-Oauto-sanitize-none/openage/main/main.py", line 84, in main
    convert_assets(asset_path, args)
  File "/Users/Programming/GitRepo/openage/.bin/usr-bin-clang++-release-Oauto-sanitize-none/openage/convert/main.py", line 121, in convert_assets
    convert(args)
  File "/Users/Programming/GitRepo/openage/.bin/usr-bin-clang++-release-Oauto-sanitize-none/openage/convert/tool/driver.py", line 35, in convert
    convert_metadata(args)
  File "/Users/Programming/GitRepo/openage/.bin/usr-bin-clang++-release-Oauto-sanitize-none/openage/convert/tool/driver.py", line 72, in convert_metadata
    gamespec = get_gamespec(args.srcdir, args.game_version, not args.flag("no_pickle_cache"))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/Programming/GitRepo/openage/.bin/usr-bin-clang++-release-Oauto-sanitize-none/openage/convert/service/read/gamedata.py", line 47, in get_gamespec
    gamespec = load_gamespec(empiresdat_file,
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/Programming/GitRepo/openage/.bin/usr-bin-clang++-release-Oauto-sanitize-none/openage/convert/service/read/gamedata.py", line 102, in load_gamespec
    _, gamespec = wrapper.read(file_data, 0, game_version, dynamic_load=dynamic_load)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/Programming/GitRepo/openage/.bin/usr-bin-clang++-release-Oauto-sanitize-none/openage/convert/value_object/read/genie_structure.py", line 133, in read
    offset, gen_members = self._read_multisubtye(
                          ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/Programming/GitRepo/openage/.bin/usr-bin-clang++-release-Oauto-sanitize-none/openage/convert/value_object/read/genie_structure.py", line 309, in _read_multisubtye
    offset, gen_members = new_data.read(raw, offset, game_version, new_data_class)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/Programming/GitRepo/openage/.bin/usr-bin-clang++-release-Oauto-sanitize-none/openage/convert/value_object/read/genie_structure.py", line 133, in read
    offset, gen_members = self._read_multisubtye(
                          ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/Programming/GitRepo/openage/.bin/usr-bin-clang++-release-Oauto-sanitize-none/openage/convert/value_object/read/genie_structure.py", line 309, in _read_multisubtye
    offset, gen_members = new_data.read(raw, offset, game_version, new_data_class)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/Programming/GitRepo/openage/.bin/usr-bin-clang++-release-Oauto-sanitize-none/openage/convert/value_object/read/genie_structure.py", line 133, in read
    offset, gen_members = self._read_multisubtye(
                          ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/Programming/GitRepo/openage/.bin/usr-bin-clang++-release-Oauto-sanitize-none/openage/convert/value_object/read/genie_structure.py", line 309, in _read_multisubtye
    offset, gen_members = new_data.read(raw, offset, game_version, new_data_class)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/Programming/GitRepo/openage/.bin/usr-bin-clang++-release-Oauto-sanitize-none/openage/convert/value_object/read/genie_structure.py", line 140, in read
    offset, gen_members, stop_reading_members = self._read_primitive(
                                                ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/Programming/GitRepo/openage/.bin/usr-bin-clang++-release-Oauto-sanitize-none/openage/convert/value_object/read/genie_structure.py", line 513, in _read_primitive
    lookup_result = var_type.entry_hook(result)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/Programming/GitRepo/openage/.bin/usr-bin-clang++-release-Oauto-sanitize-none/openage/convert/value_object/read/read_members.py", line 314, in entry_hook
    raise KeyError("failed to find %s%s in lookup dict %s!" %
KeyError: 'failed to find -55 = -0x37 in lookup dict effect_apply_type!'
heinezen commented 1 month ago

I think this might be caused by an update of DE2. I'll investigate...