SFTtech / openage

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

"error: ‘Dict’ is not a member of ‘nyan’" during build #1549

Closed Saxtr0 closed 11 months ago

Saxtr0 commented 11 months ago

Hello, i'm trying to build OpenAge on Manjaro. I followed the instructions about pre-requisite and procedure.

During the execution of make, i get this error:

/tmp/openage/libopenage/gamestate/api/ability.cpp: In static member function ‘static bool openage::gamestate::api::APIAbility::check_property(const nyan::Object&, const openage::gamestate::api::ability_property_t&)’:
/tmp/openage/libopenage/gamestate/api/ability.cpp:24:31: error: ‘Dict’ is not a member of ‘nyan’
   24 |         std::shared_ptr<nyan::Dict> properties = ability.get<nyan::Dict>("Ability.properties");
      |                               ^~~~
/tmp/openage/libopenage/gamestate/api/ability.cpp:24:35: error: template argument 1 is invalid
   24 |         std::shared_ptr<nyan::Dict> properties = ability.get<nyan::Dict>("Ability.properties");
      |                                   ^
/tmp/openage/libopenage/gamestate/api/ability.cpp:24:68: error: ‘Dict’ is not a member of ‘nyan’
   24 |         std::shared_ptr<nyan::Dict> properties = ability.get<nyan::Dict>("Ability.properties");
      |                                                                    ^~~~
/tmp/openage/libopenage/gamestate/api/ability.cpp:24:73: error: no matching function for call to ‘nyan::Object::get<<expression error> >(const char [19]) const’
   24 |         std::shared_ptr<nyan::Dict> properties = ability.get<nyan::Dict>("Ability.properties");
      |                                                  ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/nyan/nyan.h:20,
                 from /tmp/openage/libopenage/gamestate/api/ability.h:5,
                 from /tmp/openage/libopenage/gamestate/api/ability.cpp:3:
/usr/include/nyan/object.h:109:28: note: candidate: ‘template<class T>  requires  ValueLike<T> std::shared_ptr<_Tp> nyan::Object::get(const nyan::memberid_t&, nyan::order_t) const’
  109 |         std::shared_ptr<T> get(const memberid_t &member, order_t t=LATEST_T) const;
      |                            ^~~
/usr/include/nyan/object.h:109:28: note:   template argument deduction/substitution failed:
/tmp/openage/libopenage/gamestate/api/ability.cpp:24:73: error: template argument 1 is invalid
   24 |         std::shared_ptr<nyan::Dict> properties = ability.get<nyan::Dict>("Ability.properties");
      |                                                  ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
/tmp/openage/libopenage/gamestate/api/ability.cpp:27:23: error: base operand of ‘->’ is not a pointer
   27 |         if (properties->contains(property_type)) {
      |                       ^~
/tmp/openage/libopenage/gamestate/api/ability.cpp: In static member function ‘static const nyan::Object openage::gamestate::api::APIAbility::get_property(const nyan::Object&, const openage::gamestate::api::ability_property_t&)’:
/tmp/openage/libopenage/gamestate/api/ability.cpp:36:31: error: ‘Dict’ is not a member of ‘nyan’
   36 |         std::shared_ptr<nyan::Dict> properties = ability.get<nyan::Dict>("Ability.properties");
      |                               ^~~~
/tmp/openage/libopenage/gamestate/api/ability.cpp:36:35: error: template argument 1 is invalid
   36 |         std::shared_ptr<nyan::Dict> properties = ability.get<nyan::Dict>("Ability.properties");
      |                                   ^
/tmp/openage/libopenage/gamestate/api/ability.cpp:36:68: error: ‘Dict’ is not a member of ‘nyan’
   36 |         std::shared_ptr<nyan::Dict> properties = ability.get<nyan::Dict>("Ability.properties");
      |                                                                    ^~~~
/tmp/openage/libopenage/gamestate/api/ability.cpp:36:73: error: no matching function for call to ‘nyan::Object::get<<expression error> >(const char [19]) const’
   36 |         std::shared_ptr<nyan::Dict> properties = ability.get<nyan::Dict>("Ability.properties");
      |                                                  ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
/usr/include/nyan/object.h:109:28: note: candidate: ‘template<class T>  requires  ValueLike<T> std::shared_ptr<_Tp> nyan::Object::get(const nyan::memberid_t&, nyan::order_t) const’
  109 |         std::shared_ptr<T> get(const memberid_t &member, order_t t=LATEST_T) const;
      |                            ^~~
/usr/include/nyan/object.h:109:28: note:   template argument deduction/substitution failed:
/tmp/openage/libopenage/gamestate/api/ability.cpp:36:73: error: template argument 1 is invalid
   36 |         std::shared_ptr<nyan::Dict> properties = ability.get<nyan::Dict>("Ability.properties");
      |                                                  ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
/tmp/openage/libopenage/gamestate/api/ability.cpp:41:27: error: base operand of ‘->’ is not a pointer
   41 |                 properties->get().at(property_type).get_ptr());
      |                           ^~
make[3]: *** [libopenage/CMakeFiles/libopenage.dir/build.make:1700: libopenage/CMakeFiles/libopenage.dir/gamestate/api/ability.cpp.o] Error 1
make[2]: *** [CMakeFiles/Makefile2:3663: libopenage/CMakeFiles/libopenage.dir/all] Error 2
make[1]: *** [Makefile:166: all] Error 2
make: *** [Makefile:36: build] Error 2

Is there any way to fix it?

Regards

heinezen commented 11 months ago

Where did you get nyan from? Did you build it from source or did you use the configure --download-nyan method?

Your nyan version needs to be 0.3.0 (latest version).

Saxtr0 commented 11 months ago

Hello @heinezen , i tried with an AUR package, and also using "--download-nyan". The error is the very same (also building OpenAge via AUR package). I alway get "error: ‘Dict’ is not a member of ‘nyan’", maybe it is case sensitive? (the nyan member is named "dict", in the documentation).

Thank you for asking

EDIT:

$ ./configure --download-nyan
./configure is a convenience script:
it creates the build directory,  symlinks it,
and invokes cmake for an out-of-source build.

Nobody is stopping you from skipping ./configure and our Makefile,
and using CMake directly (e.g. when packaging, or using an IDE).
For your convenience, ./configure even prints the direct CMake invocation!

         build_type | Debug
       cxx_compiler | g++
          cxx_flags | 
   exe_linker_flags | 
     install_prefix | /usr/local
module_linker_flags | 
shared_linker_flags | 

config options:

          backtrace | if_available
gperftools-profiler | if_available
gperftools-tcmalloc | False
            inotify | if_available
            ncurses | if_available
             opengl | if_available
             vulkan | if_available

bindir:
/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/

invocation:
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS='' -DCMAKE_EXE_LINKER_FLAGS='' -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_MODULE_LINKER_FLAGS='' -DCMAKE_SHARED_LINKER_FLAGS='' -DDOWNLOAD_NYAN=YES -DCXX_OPTIMIZATION_LEVEL=auto -DCXX_SANITIZE_FATAL=False -DCXX_SANITIZE_MODE=none -DWANT_BACKTRACE=if_available -DWANT_GPERFTOOLS_PROFILER=if_available -DWANT_GPERFTOOLS_TCMALLOC=False -DWANT_INOTIFY=if_available -DWANT_NCURSES=if_available -DWANT_OPENGL=if_available -DWANT_VULKAN=if_available /tmp/openage

(now running cmake:)

 ___  ______ _______ _______ ___
|  _)/ _____|_______|_______|_  |
| | ( (____  _____      _     | |    ___  ____  _____ ____  _____  ____ _____
| |  \____ \|  ___)    | |    | |   / _ \|  _ \| ___ |  _ \(____ |/ _  | ___ |
| |_ _____) ) |        | |   _| |  | |_| | |_| | ____| | | / ___ ( (_| | ____|
|___|______/|_|        |_|  (___|   \___/|  __/|_____)_| |_\_____|\___ |_____)
                                         |_|                     (_____|

Welcome to the SFT technologies computer-aided openage build system!

You have chosen, or been chosen, to attempt the daring task of building openage.
If you have installed all the dependencies that are conveniently listed in
[doc/building.md], this _might_ just work!

If it doesn't, consider reporting the issue, or ask for help:
  * GitHub: https://github.com/SFTtech/openage
  * Matrix: #sfttech:matrix.org

-- Set PROJECT_VERSION from git.
-- Could NOT find GCCBacktrace (missing: GCCBacktrace_LIBRARIES GCCBacktrace_INCLUDE_DIRS) 
-- optional dependency is unavailable: backtrace

cython module
        run                                                 [embedded interpreter] [noinstall]
        openage.cython_check
        openage.cabextract.lzxd
        openage.cabextract.cabchecksum                      [standalone]
        openage.convert.processor.export.terrain_merge
        openage.convert.processor.export.texture_merge
        openage.convert.service.export.interface.visgrep
        openage.convert.service.export.opus.opusenc
        openage.convert.service.export.png.binpack
        openage.convert.service.export.png.png_create
        openage.convert.value_object.read.media.sld
        openage.convert.value_object.read.media.slp
        openage.convert.value_object.read.media.smp
        openage.convert.value_object.read.media.smx
        openage.cppinterface.exctranslate
        openage.cppinterface.exctranslate_tests
        openage.cppinterface.pyobject
        openage.cppinterface.setup_checker
        openage.cvar.cvar
        openage.event.demo
        openage.game.main_cpp
        openage.log.log_cpp
        openage.main.main_cpp
        openage.main.tests
        openage.renderer.renderer_cpp
        openage.renderer.tests
        openage.testing.cpp_testing
        openage.testing.misc_cpp
        openage.util.filelike.cpp
        openage.util.fslike.cpp
        openage.versions.versions

enabled options:
        gperftools-profiler
        inotify
        ncurses
        opengl
        vulkan

disabled options:
        backtrace
        gperftools-tcmalloc

openage 0.4.1.1447

   version string | v0.4.1-1447-g28b4b5ac
         compiler | GNU 13.2.1
           python | 3.11.5
       build type | Debug
         cxxflags |  -fdiagnostics-color=auto  -Wall -Wextra -pedantic -Wsuggest-override
 build type flags | -g -Og
        build dir | /tmp/openage/.bin/g++-debug-Oauto-sanitize-none
   install prefix | /usr/local
py install prefix | /usr/local/lib/python3.11/site-packages

-- Configuring done (0.8s)
-- Generating done (0.1s)
-- Build files have been written to: /tmp/openage/.bin/g++-debug-Oauto-sanitize-none

This is the configure output

Saxtr0 commented 11 months ago

I discovered what the issue is. The nyan i had in AUR, was not right (lower than 0.3). The --download-nyan do not works as expected To build OpenAge i had to manually build nyan before openage.

Ok, i have now binaries and libraries, what i am missing are the converted contents, and here i think i will give up.

The convert script, do not work as expected:

[utente@titano openage]$ bin/run
INFO [py] launching openage v0.4.1-1447-g28b4b5ac
INFO [py] compiled by GNU 13.2.1
INFO [py] running in DEVMODE
  Do you want to convert assets? [Y/n]
> 
  Should we call wine to determine an AOE installation? [Y/n]
> n

Please select an Age of Empires installation directory.
Insert the index of one of the proposals, or any path:
(0) ~/.steam/steam/steamapps/common/Age2HD
> 0
converting from '/home/utente/.local/share/Steam/steamapps/common/Age2HD'
INFO [py] Looking for compatible games to convert...
INFO [py] Compatible game edition detected:
INFO [py]  * Age of Empires 2: HD Edition
INFO [py] converting metadata
INFO [py] [0] palette
INFO [py] [1] empires.dat
INFO [py] using cached wrapper: /tmp/HDEDITION_empires2_x1_p1.dat.pickle
INFO [py] Starting conversion...
INFO [py] Extracting Genie data...
INFO [py] Creating API-like objects...
INFO [py] Linking API-like objects...
INFO [py] Generating auxiliary objects...
INFO [py] Creating nyan objects...
INFO [py] Creating requests for media export...
INFO [py] Starting export...
INFO [py] Dumping info file...
INFO [py] Dumping data files...
INFO [py] Exporting media files...
INFO [py] -- Exporting graphics files...
INFO [py] -- Exporting terrain files...
INFO [py] -- Exporting sound files...
INFO [py] Dumping metadata files...
Traceback (most recent call last):
  File "run.py", line 20, in init run
    main()
  File "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/__main__.py", line 171, in main
    return args.entrypoint(args, cli.error)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/game/main.py", line 81, in main
    used_asset_path = convert_assets(
                      ^^^^^^^^^^^^^^^
  File "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/convert/main.py", line 115, in convert_assets
    for current_item in convert(args):
  File "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/convert/tool/driver.py", line 38, in convert
    yield from convert_metadata(args)
  File "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/convert/tool/driver.py", line 99, in convert_metadata
    ModpackExporter.export(modpack, args)
  File "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/convert/processor/export/modpack_exporter.py", line 65, in export
    DataExporter.export(modpack.get_metadata_files(), modpack_dir)
  File "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/convert/processor/export/data_exporter.py", line 35, in export
    output_content = data_file.dump()
                     ^^^^^^^^^^^^^^^^
  File "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/convert/entity_object/export/metadata_export.py", line 161, in dump
    texture_file.set_size(self.size[0], self.size[1])
                          ~~~~~~~~~^^^
TypeError: 'NoneType' object is not subscriptable
[utente@titano openage]$ bin/run
INFO [py] launching openage v0.4.1-1447-g28b4b5ac
INFO [py] compiled by GNU 13.2.1
INFO [py] running in DEVMODE
  Do you want to convert assets? [Y/n]
> Y
  Should we call wine to determine an AOE installation? [Y/n]
> n

Please select an Age of Empires installation directory.
Insert the index of one of the proposals, or any path:
(0) ~/.steam/steam/steamapps/common/Age2HD
> ~/.steam/steam/steamapps/common/AoE2DE
converting from '/home/utente/.local/share/Steam/steamapps/common/AoE2DE'
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
INFO [py] [0] palette
INFO [py] [1] empires.dat
Traceback (most recent call last):
  File "run.py", line 20, in init run
    main()
  File "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/__main__.py", line 171, in main
    return args.entrypoint(args, cli.error)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/game/main.py", line 81, in main
    used_asset_path = convert_assets(
                      ^^^^^^^^^^^^^^^
  File "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/convert/main.py", line 115, in convert_assets
    for current_item in convert(args):
  File "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/convert/tool/driver.py", line 38, in convert
    yield from convert_metadata(args)
  File "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/convert/tool/driver.py", line 75, in convert_metadata
    gamespec = get_gamespec(args.srcdir, args.game_version, not args.flag("no_pickle_cache"))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/convert/service/read/gamedata.py", line 47, in get_gamespec
    gamespec = load_gamespec(empiresdat_file,
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/openage/.bin/g++-debug-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 "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/convert/value_object/read/genie_structure.py", line 133, in read
    offset, gen_members = self._read_multisubtye(
                          ^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/openage/.bin/g++-debug-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 "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/convert/value_object/read/genie_structure.py", line 133, in read
    offset, gen_members = self._read_multisubtye(
                          ^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/openage/.bin/g++-debug-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 "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/convert/value_object/read/genie_structure.py", line 133, in read
    offset, gen_members = self._read_multisubtye(
                          ^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/openage/.bin/g++-debug-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 "/tmp/openage/.bin/g++-debug-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 "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/convert/value_object/read/genie_structure.py", line 513, in _read_primitive
    lookup_result = var_type.entry_hook(result)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/openage/.bin/g++-debug-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 18 = 0x12 in lookup dict effect_apply_type!'

Regards

EDIT: Out of the box, not even The Conquerors is converted successfully

Please select an Age of Empires installation directory.
Insert the index of one of the proposals, or any path:
(0) $WINEPREFIX/drive_c/Program Files/Microsoft Games/Age of Empires II/
(1) ~/.steam/steam/steamapps/common/Age2HD
> 0
converting from '/home/utente/win32/drive_c/Program Files/Microsoft Games/Age of Empires II'
INFO [py] Looking for compatible games to convert...
INFO [py] Compatible game edition detected:
INFO [py]  * Age of Empires 2: The Conqueror's
INFO [py] converting metadata
INFO [py] [0] palette
INFO [py] [1] empires.dat
INFO [py] using cached wrapper: /tmp/AOC_empires2_x1_p1.dat.pickle
INFO [py] Starting conversion...
INFO [py] Extracting Genie data...
INFO [py] Creating API-like objects...
INFO [py] Linking API-like objects...
INFO [py] Generating auxiliary objects...
INFO [py] Creating nyan objects...
INFO [py] Creating requests for media export...
INFO [py] Starting export...
INFO [py] Dumping info file...
INFO [py] Dumping data files...
INFO [py] Exporting media files...
INFO [py] -- Exporting graphics files...
INFO [py] -- Exporting terrain files...
INFO [py] -- Exporting sound files...
INFO [py] Dumping metadata files...
INFO [py] [2] player color palette
INFO [py] [3] terminal color palette
INFO [py] [4] game specification files
INFO [py] asset conversion complete; asset version: 7
INFO loading configuration files...
INFO [py] loading config file [Union(Directory(/tmp/openage/cfg).root @ (b'cfg',), Directory(/tmp/openage/assets).root @ (b'assets',))]:cfg/keybinds.oac...
INFO launching engine with root directoryPath(Union(Directory(/tmp/openage/cfg).root @ (b'cfg',), Directory(/tmp/openage/assets).root @ (b'assets',)):)
INFO loading configuration files...
INFO [py] loading config file [Union(Directory(/tmp/openage/cfg).root @ (b'cfg',), Directory(/tmp/openage/assets).root @ (b'assets',))]:cfg/keybinds.oac...
INFO Found modpack: aoe2_base
INFO Found modpack: hd_base
INFO Created game simulation
Traceback (most recent call last):
  File "run.py", line 20, in init run
    main()
  File "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/__main__.py", line 171, in main
    return args.entrypoint(args, cli.error)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/openage/.bin/g++-debug-Oauto-sanitize-none/openage/game/main.py", line 104, in main
    return run_game(args, root)
           ^^^^^^^^^^^^^^^^^^^^
  File "openage/game/main_cpp.pyx", line 37, in openage.game.main_cpp.run_game
    result = run_game_cpp(args_cpp)
  File "", line 0, in 
  File "", line 0, in openage::run_game(openage::main_arguments const&)+0xab
  File "", line 0, in openage::engine::Engine::Engine(openage::engine::Engine::mode, openage::util::Path const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)+0x1de
  File "", line 0, in openage::gamestate::GameSimulation::set_modpacks(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)+0xb0
  File "", line 0, in openage::assets::ModManager::activate_modpacks(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)+0x2f
  File "", line 0, in openage::assets::ModManager::set_load_order(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)+0xdb
  File "", line 0, in openage::error::Error::Error(openage::log::message const&, bool, bool)+0xba
  File "libopenage/assets/mod_manager.cpp", line 41, in void openage::assets::ModManager::set_load_order(const std::vector<std::__cxx11::basic_string<char> >&)
    throw Error{MSG(err) << "Requested modpack '" << modpack_id << "' not available."};
openage.cppinterface.exctranslate.CPPException: Requested modpack 'engine' not available.
heinezen commented 11 months ago

@ScaMar openage will prefer the nyan system package over the --download-nyan option if it's installed. I guess we should introduce a version check so the problem becomes more noticeable in the future.

heinezen commented 11 months ago

And looks like The Conqueror's did convert successfully, but you are missing the engine modpack (which contains the engine's internal API bindings). You have to export this modpack manually using

python -m openage convert-export-api /absolute/path/to/a/folder

and copy the resulting engine folder into the project's assets/converted folder (next to aoe2_base). Sorry that it's so complicated at the moment, but it's going to get fixed in https://github.com/SFTtech/openage/pull/1529 soon.

Saxtr0 commented 11 months ago

@heinezen , thank you for your patience and for your explanations. engine exported and demo was run.

TheJJ commented 11 months ago

nice, then i'll go ahead and close this. feel free to ask remaining questions :)