gitextract_3ogk531m/ ├── .clang-format ├── .github/ │ ├── PULL_REQUEST_TEMPLATES/ │ │ ├── pull_request_template.md │ │ └── release_template.md │ └── workflows/ │ ├── macosx-ci.yml │ ├── ubuntu-24.04.yml │ ├── windows-server-2019.yml │ └── windows-server-2022.yml ├── .gitignore ├── .mailmap ├── CMakeLists.txt ├── Makefile ├── README.md ├── assets/ │ ├── .gitignore │ ├── CMakeLists.txt │ ├── logo/ │ │ └── CMakeLists.txt │ ├── qml/ │ │ ├── .gitignore │ │ ├── Actions.qml │ │ ├── ActionsGrid.qml │ │ ├── BindsHelp.qml │ │ ├── ButtonExtruded.qml │ │ ├── ButtonExtrudedStyle.qml │ │ ├── ButtonFlat.qml │ │ ├── ButtonFlatStyle.qml │ │ ├── CheckBoxFlat.qml │ │ ├── CheckBoxFlatStyle.qml │ │ ├── CreateGameWhenReady.qml │ │ ├── GeneratorControl.qml │ │ ├── GeneratorParametersConfiguration.qml │ │ ├── IngameHud.qml │ │ ├── Paper.qml │ │ ├── TextFieldFlat.qml │ │ ├── TextFieldFlatStyle.qml │ │ ├── TypePicker.qml │ │ └── main.qml │ ├── shaders/ │ │ ├── CMakeLists.txt │ │ ├── alphamask.frag.glsl │ │ ├── alphamask.vert.glsl │ │ ├── equalsEpsilon.glsl │ │ ├── final.frag.glsl │ │ ├── final.vert.glsl │ │ ├── hud_drag_select.frag.glsl │ │ ├── hud_drag_select.vert.glsl │ │ ├── identity.vert.glsl │ │ ├── maptexture.frag.glsl │ │ ├── maptexture.vert.glsl │ │ ├── skybox.frag.glsl │ │ ├── skybox.vert.glsl │ │ ├── teamcolors.frag.glsl │ │ ├── terrain.frag.glsl │ │ ├── terrain.vert.glsl │ │ ├── texturefont.frag.glsl │ │ ├── texturefont.vert.glsl │ │ ├── world2d.frag.glsl │ │ ├── world2d.vert.glsl │ │ └── world3d.vert.glsl │ ├── test/ │ │ ├── CMakeLists.txt │ │ ├── nyan/ │ │ │ ├── CMakeLists.txt │ │ │ └── pong.nyan │ │ ├── qml/ │ │ │ ├── CMakeLists.txt │ │ │ └── main.qml │ │ ├── shaders/ │ │ │ ├── CMakeLists.txt │ │ │ ├── demo_0_display.frag.glsl │ │ │ ├── demo_0_display.vert.glsl │ │ │ ├── demo_1_display.frag.glsl │ │ │ ├── demo_1_display.vert.glsl │ │ │ ├── demo_1_obj.frag.glsl │ │ │ ├── demo_1_obj.vert.glsl │ │ │ ├── demo_2_display.frag.glsl │ │ │ ├── demo_2_display.vert.glsl │ │ │ ├── demo_2_obj.frag.glsl │ │ │ ├── demo_2_obj.vert.glsl │ │ │ ├── demo_4_display.frag.glsl │ │ │ ├── demo_4_display.vert.glsl │ │ │ ├── demo_4_obj.frag.glsl │ │ │ ├── demo_4_obj.vert.glsl │ │ │ ├── demo_5_obj.frag.glsl │ │ │ ├── demo_5_obj.vert.glsl │ │ │ ├── demo_6_2d.frag.glsl │ │ │ ├── demo_6_2d.vert.glsl │ │ │ ├── demo_6_2d_frame.frag.glsl │ │ │ ├── demo_6_2d_frame.vert.glsl │ │ │ ├── demo_6_2d_frustum_frame.vert.glsl │ │ │ ├── demo_6_3d.frag.glsl │ │ │ ├── demo_6_3d.vert.glsl │ │ │ ├── demo_6_display.frag.glsl │ │ │ ├── demo_6_display.vert.glsl │ │ │ ├── demo_7_shader_command.frag.glsl │ │ │ ├── demo_7_shader_command.vert.glsl │ │ │ ├── demo_7_snippets/ │ │ │ │ ├── alpha.snippet │ │ │ │ └── color.snippet │ │ │ └── pathfinding/ │ │ │ ├── CMakeLists.txt │ │ │ ├── demo_0_cost_field.frag.glsl │ │ │ ├── demo_0_cost_field.vert.glsl │ │ │ ├── demo_0_display.frag.glsl │ │ │ ├── demo_0_display.vert.glsl │ │ │ ├── demo_0_flow_field.frag.glsl │ │ │ ├── demo_0_flow_field.vert.glsl │ │ │ ├── demo_0_grid.frag.glsl │ │ │ ├── demo_0_grid.vert.glsl │ │ │ ├── demo_0_integration_field.frag.glsl │ │ │ ├── demo_0_integration_field.vert.glsl │ │ │ ├── demo_0_obj.frag.glsl │ │ │ ├── demo_0_obj.vert.glsl │ │ │ ├── demo_0_vector.frag.glsl │ │ │ ├── demo_0_vector.vert.glsl │ │ │ ├── demo_1_display.frag.glsl │ │ │ ├── demo_1_display.vert.glsl │ │ │ ├── demo_1_grid.frag.glsl │ │ │ ├── demo_1_grid.vert.glsl │ │ │ ├── demo_1_obj.frag.glsl │ │ │ └── demo_1_obj.vert.glsl │ │ └── textures/ │ │ ├── CMakeLists.txt │ │ ├── test_animation.sprite │ │ ├── test_gaben.sprite │ │ ├── test_gaben.texture │ │ ├── test_missing.sprite │ │ ├── test_missing.texture │ │ ├── test_tank.sprite │ │ ├── test_tank.texture │ │ ├── test_tank_mirrored.sprite │ │ ├── test_terrain.terrain │ │ ├── test_terrain.texture │ │ ├── test_terrain2.terrain │ │ ├── test_terrain2.texture │ │ └── test_texture.texture │ └── textures/ │ ├── CMakeLists.txt │ └── torn_paper_edge.docx ├── buildsystem/ │ ├── CheckCompilerFeatures.cmake │ ├── CheckInSourceBuild.cmake │ ├── CheckRuntimeDependencies.cmake │ ├── DependencyFetch.cmake │ ├── DetectProjectVersion.cmake │ ├── HandleCXXOptions.cmake │ ├── HandlePythonOptions.cmake │ ├── __init__.py │ ├── check_py_file_list.py │ ├── codecompliance/ │ │ ├── __init__.py │ │ ├── __main__.py │ │ ├── authors.py │ │ ├── clangtidy.py │ │ ├── cppstyle.py │ │ ├── cython.py │ │ ├── headerguards.py │ │ ├── legal.py │ │ ├── modes.py │ │ ├── pylint.py │ │ ├── pystyle.py │ │ ├── textfiles.py │ │ └── util.py │ ├── codegen.cmake │ ├── compilepy.py │ ├── cpp.cmake │ ├── cythonize.py │ ├── doxygen.cmake │ ├── doxygen_custom.css │ ├── inplacemodules.py │ ├── modules/ │ │ ├── DownloadCache.cmake │ │ ├── FindCython.cmake │ │ ├── FindEpoxy.cmake │ │ ├── FindGCCBacktrace.cmake │ │ ├── FindGPerfTools.cmake │ │ ├── FindHarfBuzz.cmake │ │ ├── FindInotify.cmake │ │ ├── FindOgg.cmake │ │ ├── FindOpusfile.cmake │ │ ├── FindPython.cmake │ │ └── FindPython_test.cpp │ ├── options.cmake │ ├── pxdgen.py │ ├── python.cmake │ ├── scripts/ │ │ ├── EmbedFont.cmake │ │ ├── EmbedPython.cmake │ │ ├── EmbedWinDependencies.cmake │ │ └── copy_modules.py │ ├── templates/ │ │ ├── Doxyfile.in │ │ ├── ExternalFetch.cmake.in │ │ ├── ForwardVariables.cmake.in │ │ ├── openage.bat.in │ │ └── qt.conf │ └── util.cmake ├── cfg/ │ ├── .gitignore │ ├── CMakeLists.txt │ ├── converter/ │ │ └── games/ │ │ ├── aoc/ │ │ │ └── version_hashes.toml │ │ ├── aoc_demo/ │ │ │ └── version_hashes.toml │ │ ├── aok/ │ │ │ └── version_hashes.toml │ │ ├── de1/ │ │ │ └── version_hashes.toml │ │ ├── de2/ │ │ │ └── version_hashes.toml │ │ ├── game_editions.toml │ │ ├── game_expansions.toml │ │ ├── hd/ │ │ │ └── version_hashes.toml │ │ ├── hd_ak/ │ │ │ └── version_hashes.toml │ │ ├── hd_fgt/ │ │ │ └── version_hashes.toml │ │ ├── hd_raj/ │ │ │ └── version_hashes.toml │ │ ├── ror/ │ │ │ └── version_hashes.toml │ │ ├── swgb/ │ │ │ └── version_hashes.toml │ │ └── swgb_cc/ │ │ └── version_hashes.toml │ └── keybinds.oac ├── changelog.md ├── configure ├── copying.md ├── dist/ │ ├── CMakeLists.txt │ ├── README.md │ └── openage.desktop ├── doc/ │ ├── README.md │ ├── assets.md │ ├── build_instructions/ │ │ ├── arch_linux.md │ │ ├── debian.md │ │ ├── docker.md │ │ ├── fedora.md │ │ ├── freebsd.md │ │ ├── gentoo.md │ │ ├── macos.md │ │ ├── nix.md │ │ ├── opensuse.md │ │ ├── ubuntu.md │ │ └── windows_msvc.md │ ├── building.md │ ├── buildsystem.md │ ├── changelogs/ │ │ ├── engine/ │ │ │ ├── v0.0.0.md │ │ │ ├── v0.1.0.md │ │ │ ├── v0.2.0.md │ │ │ ├── v0.2.1.md │ │ │ ├── v0.2.2.md │ │ │ ├── v0.2.3.md │ │ │ ├── v0.3.0-alpha.md │ │ │ ├── v0.3.0.md │ │ │ ├── v0.4.0.md │ │ │ ├── v0.4.1.md │ │ │ ├── v0.5.0.md │ │ │ ├── v0.5.1.md │ │ │ ├── v0.5.2.md │ │ │ ├── v0.5.3.md │ │ │ └── v0.6.0.md │ │ └── nyan_api/ │ │ ├── v0.1.0.md │ │ ├── v0.2.0.md │ │ ├── v0.3.0.md │ │ ├── v0.4.0.md │ │ ├── v0.4.1.md │ │ ├── v0.5.0.md │ │ └── v0.6.0.md │ ├── code/ │ │ ├── README.md │ │ ├── architecture.md │ │ ├── converter/ │ │ │ ├── README.md │ │ │ ├── architecture_overview.md │ │ │ └── workflow.md │ │ ├── coordinate-systems.md │ │ ├── curves.md │ │ ├── event_system.md │ │ ├── exceptions.md │ │ ├── game_simulation/ │ │ │ ├── README.md │ │ │ ├── activity.md │ │ │ ├── components.md │ │ │ ├── game_entity.md │ │ │ └── systems.md │ │ ├── gui.md │ │ ├── images/ │ │ │ ├── component_classes.uxf │ │ │ ├── continuous_curve.ggb │ │ │ ├── curves_classes.uxf │ │ │ ├── discrete_curve.ggb │ │ │ ├── engine_architecture.uxf │ │ │ ├── event_classes.uxf │ │ │ ├── game_entity_classes.uxf │ │ │ ├── pathfinder_architecture.uxf │ │ │ ├── segmented_curve.ggb │ │ │ ├── simulation.uxf │ │ │ ├── system_classes.uxf │ │ │ └── time_classes.uxf │ │ ├── input/ │ │ │ └── README.md │ │ ├── logger.md │ │ ├── optimization.md │ │ ├── pathfinding/ │ │ │ ├── README.md │ │ │ └── field_types.md │ │ ├── pyinterface.md │ │ ├── renderer/ │ │ │ ├── README.md │ │ │ ├── demos.md │ │ │ ├── level1.md │ │ │ └── level2.md │ │ ├── testing.md │ │ └── time.md │ ├── contributing.md │ ├── convert/ │ │ ├── README.md │ │ ├── convert_single_file.md │ │ ├── debugger.md │ │ ├── interactive.md │ │ └── nyan.md │ ├── debug.md │ ├── development.md │ ├── ide/ │ │ ├── README.md │ │ ├── configs/ │ │ │ └── vscode/ │ │ │ └── tasks.json │ │ ├── emacs.md │ │ ├── qt_creator.md │ │ └── vscode.md │ ├── ideas/ │ │ ├── ai.md │ │ ├── editor/ │ │ │ ├── README.md │ │ │ ├── campaigns.md │ │ │ ├── economy.md │ │ │ ├── multiplayer.md │ │ │ ├── scripting.md │ │ │ ├── tech.md │ │ │ ├── terrain-ui.txt │ │ │ ├── terrain.md │ │ │ └── units.md │ │ ├── fr_technical_overview.md │ │ ├── gameplay.md │ │ ├── interface.md │ │ └── technical.md │ ├── media/ │ │ ├── aoc-slp-list.md │ │ ├── blendomatic.md │ │ ├── drs-files.md │ │ ├── evolution-openage-gource.md │ │ ├── filtermaps-dat.md │ │ ├── lzx_compression_info.md │ │ ├── openage/ │ │ │ ├── blendmask_format_spec.md │ │ │ ├── blendtable_format_spec.md │ │ │ ├── file_referencing.md │ │ │ ├── modpack_definition_file.md │ │ │ ├── modpacks.md │ │ │ ├── palette_format_spec.md │ │ │ ├── sprite_format_spec.md │ │ │ ├── terrain_format_spec.md │ │ │ └── texture_format_spec.md │ │ ├── original-metadata.md │ │ ├── patterns/ │ │ │ ├── sld.hexpat │ │ │ ├── slp.hexpat │ │ │ └── slp_v4.hexpat │ │ ├── sld-files.md │ │ ├── slp-files.md │ │ ├── smp-files.md │ │ ├── smx-files.md │ │ ├── sound.md │ │ ├── stemplet-dat.md │ │ └── terrain.md │ ├── media_convert.md │ ├── nyan/ │ │ ├── README.md │ │ ├── aoe2_nyan_tree.uxf │ │ ├── api_reference/ │ │ │ ├── reference_ability.md │ │ │ ├── reference_effect.md │ │ │ ├── reference_modifier.md │ │ │ ├── reference_resistance.md │ │ │ ├── reference_root.md │ │ │ └── reference_util.md │ │ └── openage-lib.md │ ├── project_structure.md │ ├── releasing.md │ ├── reverse_engineering/ │ │ ├── aoc_structures_00_09_26_0809 │ │ ├── civilizations.md │ │ ├── game_mechanics/ │ │ │ ├── accuracy.md │ │ │ ├── attacking_alarm.md │ │ │ ├── build_speed.md │ │ │ ├── building_placement.md │ │ │ ├── damage.md │ │ │ ├── formations.md │ │ │ ├── garrison.md │ │ │ ├── market.md │ │ │ ├── monk_conversion.md │ │ │ ├── pathfinding.md │ │ │ ├── ram_speed.md │ │ │ ├── rates.md │ │ │ ├── repair.md │ │ │ ├── research.md │ │ │ ├── selection.md │ │ │ ├── swgb/ │ │ │ │ ├── power.md │ │ │ │ ├── shields.md │ │ │ │ ├── stealth.md │ │ │ │ └── user-interface.md │ │ │ ├── switching_villager_tasks.md │ │ │ ├── town_bell.md │ │ │ ├── waypoints.md │ │ │ └── wolves.md │ │ ├── networking/ │ │ │ ├── 01-general.md │ │ │ ├── 02-header.md │ │ │ ├── 03-sync.md │ │ │ ├── 04-lobby.md │ │ │ ├── 05-chat_protocol.md │ │ │ ├── 06-chat_message_spoofing.md │ │ │ ├── 07-primary_action.md │ │ │ ├── 08-movement.md │ │ │ ├── 09-formation.md │ │ │ ├── 10-unit_creation.md │ │ │ ├── 11-buildings.md │ │ │ ├── 12-market.md │ │ │ ├── 13-other.md │ │ │ ├── 14-ai.md │ │ │ ├── 15-c-structs.md │ │ │ └── technology_ids.md │ │ ├── scoring.md │ │ └── unit_stats/ │ │ ├── unit_stats.md │ │ ├── unit_stats_afr.csv │ │ ├── unit_stats_aoc.csv │ │ ├── unit_stats_aoe.csv │ │ ├── unit_stats_aoe.txt │ │ ├── unit_stats_aok.csv │ │ └── unit_stats_fe.csv │ ├── running.md │ └── troubleshooting.md ├── etc/ │ ├── gdb_pretty/ │ │ ├── __init__.py │ │ └── printers.py │ ├── lsan.supp │ ├── openage.gdbinit │ ├── pylintrc │ └── valgrind-python.supp ├── flake.nix ├── kevinfile ├── legal/ │ ├── BSD-3-clause │ ├── GPLv3 │ └── LGPLv2.0 ├── libopenage/ │ ├── .gitignore │ ├── CMakeLists.txt │ ├── assets/ │ │ ├── CMakeLists.txt │ │ ├── mod_manager.cpp │ │ ├── mod_manager.h │ │ ├── modpack.cpp │ │ └── modpack.h │ ├── audio/ │ │ ├── CMakeLists.txt │ │ ├── audio_manager.cpp │ │ ├── audio_manager.h │ │ ├── category.cpp │ │ ├── category.h │ │ ├── dynamic_loader.cpp │ │ ├── dynamic_loader.h │ │ ├── dynamic_resource.cpp │ │ ├── dynamic_resource.h │ │ ├── error.cpp │ │ ├── error.h │ │ ├── format.cpp │ │ ├── format.h │ │ ├── hash_functions.h │ │ ├── in_memory_loader.cpp │ │ ├── in_memory_loader.h │ │ ├── in_memory_resource.cpp │ │ ├── in_memory_resource.h │ │ ├── loader_policy.cpp │ │ ├── loader_policy.h │ │ ├── opus_dynamic_loader.cpp │ │ ├── opus_dynamic_loader.h │ │ ├── opus_in_memory_loader.cpp │ │ ├── opus_in_memory_loader.h │ │ ├── opus_loading.cpp │ │ ├── opus_loading.h │ │ ├── resource.cpp │ │ ├── resource.h │ │ ├── resource_def.cpp │ │ ├── resource_def.h │ │ ├── sound.cpp │ │ ├── sound.h │ │ └── types.h │ ├── config.cpp.in │ ├── config.h.in │ ├── console/ │ │ ├── CMakeLists.txt │ │ ├── buf.cpp │ │ ├── buf.h │ │ ├── console.cpp │ │ ├── console.h │ │ ├── draw.cpp │ │ ├── draw.h │ │ └── tests.cpp │ ├── coord/ │ │ ├── CMakeLists.txt │ │ ├── chunk.cpp │ │ ├── chunk.h │ │ ├── coord.cpp.template │ │ ├── coord.h.template │ │ ├── coord_test.cpp │ │ ├── declarations.cpp │ │ ├── declarations.h │ │ ├── phys.cpp │ │ ├── phys.h │ │ ├── pixel.cpp │ │ ├── pixel.h │ │ ├── scene.cpp │ │ ├── scene.h │ │ ├── term.cpp │ │ ├── term.h │ │ ├── tile.cpp │ │ └── tile.h │ ├── curve/ │ │ ├── CMakeLists.txt │ │ ├── base_curve.cpp │ │ ├── base_curve.h │ │ ├── container/ │ │ │ ├── CMakeLists.txt │ │ │ ├── array.cpp │ │ │ ├── array.h │ │ │ ├── element_wrapper.cpp │ │ │ ├── element_wrapper.h │ │ │ ├── iterator.cpp │ │ │ ├── iterator.h │ │ │ ├── map.cpp │ │ │ ├── map.h │ │ │ ├── map_filter_iterator.cpp │ │ │ ├── map_filter_iterator.h │ │ │ ├── queue.cpp │ │ │ ├── queue.h │ │ │ ├── queue_filter_iterator.cpp │ │ │ └── queue_filter_iterator.h │ │ ├── continuous.cpp │ │ ├── continuous.h │ │ ├── discrete.cpp │ │ ├── discrete.h │ │ ├── discrete_mod.cpp │ │ ├── discrete_mod.h │ │ ├── interpolated.cpp │ │ ├── interpolated.h │ │ ├── keyframe.cpp │ │ ├── keyframe.h │ │ ├── keyframe_container.cpp │ │ ├── keyframe_container.h │ │ ├── segmented.cpp │ │ ├── segmented.h │ │ └── tests/ │ │ ├── CMakeLists.txt │ │ ├── container.cpp │ │ └── curve_types.cpp │ ├── cvar/ │ │ ├── CMakeLists.txt │ │ ├── cvar.cpp │ │ └── cvar.h │ ├── datastructure/ │ │ ├── CMakeLists.txt │ │ ├── concurrent_queue.h │ │ ├── constexpr_map.h │ │ ├── pairing_heap.h │ │ ├── tests.cpp │ │ └── tests.h │ ├── engine/ │ │ ├── CMakeLists.txt │ │ ├── engine.cpp │ │ └── engine.h │ ├── error/ │ │ ├── CMakeLists.txt │ │ ├── backtrace.cpp │ │ ├── backtrace.h │ │ ├── demo.cpp │ │ ├── error.cpp │ │ ├── error.h │ │ ├── handlers.cpp │ │ ├── handlers.h │ │ ├── stackanalyzer.cpp │ │ └── stackanalyzer.h │ ├── event/ │ │ ├── CMakeLists.txt │ │ ├── demo/ │ │ │ ├── CMakeLists.txt │ │ │ ├── aicontroller.cpp │ │ │ ├── aicontroller.h │ │ │ ├── gamestate.cpp │ │ │ ├── gamestate.h │ │ │ ├── gui.cpp │ │ │ ├── gui.h │ │ │ ├── main.cpp │ │ │ ├── main.h │ │ │ ├── physics.cpp │ │ │ └── physics.h │ │ ├── event.cpp │ │ ├── event.h │ │ ├── event_loop.cpp │ │ ├── event_loop.h │ │ ├── evententity.cpp │ │ ├── evententity.h │ │ ├── eventhandler.cpp │ │ ├── eventhandler.h │ │ ├── eventqueue.cpp │ │ ├── eventqueue.h │ │ ├── eventstore.cpp │ │ ├── eventstore.h │ │ ├── state.cpp │ │ ├── state.h │ │ └── tests.cpp │ ├── gamestate/ │ │ ├── CMakeLists.txt │ │ ├── activity/ │ │ │ ├── CMakeLists.txt │ │ │ ├── activity.cpp │ │ │ ├── activity.h │ │ │ ├── condition/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── command_in_queue.cpp │ │ │ │ ├── command_in_queue.h │ │ │ │ ├── next_command.cpp │ │ │ │ └── next_command.h │ │ │ ├── end_node.cpp │ │ │ ├── end_node.h │ │ │ ├── event/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── command_in_queue.cpp │ │ │ │ ├── command_in_queue.h │ │ │ │ ├── wait.cpp │ │ │ │ └── wait.h │ │ │ ├── node.cpp │ │ │ ├── node.h │ │ │ ├── start_node.cpp │ │ │ ├── start_node.h │ │ │ ├── task_node.cpp │ │ │ ├── task_node.h │ │ │ ├── task_system_node.cpp │ │ │ ├── task_system_node.h │ │ │ ├── tests.cpp │ │ │ ├── types.cpp │ │ │ ├── types.h │ │ │ ├── xor_event_gate.cpp │ │ │ ├── xor_event_gate.h │ │ │ ├── xor_gate.cpp │ │ │ └── xor_gate.h │ │ ├── api/ │ │ │ ├── CMakeLists.txt │ │ │ ├── ability.cpp │ │ │ ├── ability.h │ │ │ ├── activity.cpp │ │ │ ├── activity.h │ │ │ ├── animation.cpp │ │ │ ├── animation.h │ │ │ ├── definitions.cpp │ │ │ ├── definitions.h │ │ │ ├── patch.cpp │ │ │ ├── patch.h │ │ │ ├── player_setup.cpp │ │ │ ├── player_setup.h │ │ │ ├── property.cpp │ │ │ ├── property.h │ │ │ ├── sound.cpp │ │ │ ├── sound.h │ │ │ ├── terrain.cpp │ │ │ ├── terrain.h │ │ │ ├── types.cpp │ │ │ ├── types.h │ │ │ ├── util.cpp │ │ │ └── util.h │ │ ├── component/ │ │ │ ├── CMakeLists.txt │ │ │ ├── api/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── idle.cpp │ │ │ │ ├── idle.h │ │ │ │ ├── live.cpp │ │ │ │ ├── live.h │ │ │ │ ├── move.cpp │ │ │ │ ├── move.h │ │ │ │ ├── selectable.cpp │ │ │ │ ├── selectable.h │ │ │ │ ├── turn.cpp │ │ │ │ └── turn.h │ │ │ ├── api_component.cpp │ │ │ ├── api_component.h │ │ │ ├── base_component.cpp │ │ │ ├── base_component.h │ │ │ ├── internal/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── activity.cpp │ │ │ │ ├── activity.h │ │ │ │ ├── command_queue.cpp │ │ │ │ ├── command_queue.h │ │ │ │ ├── commands/ │ │ │ │ │ ├── CMakeLists.txt │ │ │ │ │ ├── base_command.cpp │ │ │ │ │ ├── base_command.h │ │ │ │ │ ├── custom.cpp │ │ │ │ │ ├── custom.h │ │ │ │ │ ├── idle.cpp │ │ │ │ │ ├── idle.h │ │ │ │ │ ├── move.cpp │ │ │ │ │ ├── move.h │ │ │ │ │ ├── types.cpp │ │ │ │ │ └── types.h │ │ │ │ ├── ownership.cpp │ │ │ │ ├── ownership.h │ │ │ │ ├── position.cpp │ │ │ │ └── position.h │ │ │ ├── internal_component.cpp │ │ │ ├── internal_component.h │ │ │ ├── types.cpp │ │ │ └── types.h │ │ ├── definitions.cpp │ │ ├── definitions.h │ │ ├── demo/ │ │ │ ├── CMakeLists.txt │ │ │ ├── demo_0.cpp │ │ │ ├── demo_0.h │ │ │ ├── tests.cpp │ │ │ └── tests.h │ │ ├── entity_factory.cpp │ │ ├── entity_factory.h │ │ ├── event/ │ │ │ ├── CMakeLists.txt │ │ │ ├── drag_select.cpp │ │ │ ├── drag_select.h │ │ │ ├── process_command.cpp │ │ │ ├── process_command.h │ │ │ ├── send_command.cpp │ │ │ ├── send_command.h │ │ │ ├── spawn_entity.cpp │ │ │ ├── spawn_entity.h │ │ │ ├── wait.cpp │ │ │ └── wait.h │ │ ├── game.cpp │ │ ├── game.h │ │ ├── game_entity.cpp │ │ ├── game_entity.h │ │ ├── game_state.cpp │ │ ├── game_state.h │ │ ├── manager.cpp │ │ ├── manager.h │ │ ├── map.cpp │ │ ├── map.h │ │ ├── player.cpp │ │ ├── player.h │ │ ├── simulation.cpp │ │ ├── simulation.h │ │ ├── system/ │ │ │ ├── CMakeLists.txt │ │ │ ├── activity.cpp │ │ │ ├── activity.h │ │ │ ├── idle.cpp │ │ │ ├── idle.h │ │ │ ├── move.cpp │ │ │ ├── move.h │ │ │ ├── types.cpp │ │ │ └── types.h │ │ ├── terrain.cpp │ │ ├── terrain.h │ │ ├── terrain_chunk.cpp │ │ ├── terrain_chunk.h │ │ ├── terrain_factory.cpp │ │ ├── terrain_factory.h │ │ ├── terrain_tile.cpp │ │ ├── terrain_tile.h │ │ ├── types.cpp │ │ ├── types.h │ │ ├── universe.cpp │ │ ├── universe.h │ │ ├── world.cpp │ │ └── world.h │ ├── input/ │ │ ├── CMakeLists.txt │ │ ├── action.cpp │ │ ├── action.h │ │ ├── controller/ │ │ │ ├── CMakeLists.txt │ │ │ ├── camera/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── binding.cpp │ │ │ │ ├── binding.h │ │ │ │ ├── binding_context.cpp │ │ │ │ ├── binding_context.h │ │ │ │ ├── controller.cpp │ │ │ │ └── controller.h │ │ │ ├── game/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── binding.cpp │ │ │ │ ├── binding.h │ │ │ │ ├── binding_context.cpp │ │ │ │ ├── binding_context.h │ │ │ │ ├── controller.cpp │ │ │ │ └── controller.h │ │ │ └── hud/ │ │ │ ├── CMakeLists.txt │ │ │ ├── binding.cpp │ │ │ ├── binding.h │ │ │ ├── binding_context.cpp │ │ │ ├── binding_context.h │ │ │ ├── controller.cpp │ │ │ └── controller.h │ │ ├── event.cpp │ │ ├── event.h │ │ ├── input_context.cpp │ │ ├── input_context.h │ │ ├── input_manager.cpp │ │ ├── input_manager.h │ │ ├── tests.cpp │ │ ├── text_to_event.cpp │ │ └── text_to_event.h │ ├── job/ │ │ ├── CMakeLists.txt │ │ ├── abortable_job_state.h │ │ ├── job.h │ │ ├── job_aborted_exception.h │ │ ├── job_group.cpp │ │ ├── job_group.h │ │ ├── job_manager.cpp │ │ ├── job_manager.h │ │ ├── job_state.h │ │ ├── job_state_base.h │ │ ├── tests.cpp │ │ ├── typed_job_state_base.h │ │ ├── types.h │ │ ├── worker.cpp │ │ └── worker.h │ ├── log/ │ │ ├── CMakeLists.txt │ │ ├── file_logsink.cpp │ │ ├── file_logsink.h │ │ ├── level.cpp │ │ ├── level.h │ │ ├── log.cpp │ │ ├── log.h │ │ ├── logsink.cpp │ │ ├── logsink.h │ │ ├── logsource.cpp │ │ ├── logsource.h │ │ ├── message.cpp │ │ ├── message.h │ │ ├── named_logsource.cpp │ │ ├── named_logsource.h │ │ ├── stdout_logsink.cpp │ │ ├── stdout_logsink.h │ │ └── test.cpp │ ├── main/ │ │ ├── CMakeLists.txt │ │ ├── demo/ │ │ │ ├── CMakeLists.txt │ │ │ ├── interactive/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── interactive.cpp │ │ │ │ └── interactive.h │ │ │ ├── pong/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── aicontroller.cpp │ │ │ │ ├── aicontroller.h │ │ │ │ ├── gamestate.cpp │ │ │ │ ├── gamestate.h │ │ │ │ ├── gui.cpp │ │ │ │ ├── gui.h │ │ │ │ ├── physics.cpp │ │ │ │ ├── physics.h │ │ │ │ ├── pong.cpp │ │ │ │ └── pong.h │ │ │ └── presenter/ │ │ │ ├── CMakeLists.txt │ │ │ ├── presenter.cpp │ │ │ └── presenter.h │ │ ├── tests.cpp │ │ └── tests.h │ ├── main.cpp │ ├── main.h │ ├── options.cpp │ ├── options.h │ ├── pathfinding/ │ │ ├── CMakeLists.txt │ │ ├── cost_field.cpp │ │ ├── cost_field.h │ │ ├── definitions.cpp │ │ ├── definitions.h │ │ ├── demo/ │ │ │ ├── CMakeLists.txt │ │ │ ├── demo_0.cpp │ │ │ ├── demo_0.h │ │ │ ├── demo_1.cpp │ │ │ ├── demo_1.h │ │ │ ├── tests.cpp │ │ │ └── tests.h │ │ ├── field_cache.cpp │ │ ├── field_cache.h │ │ ├── flow_field.cpp │ │ ├── flow_field.h │ │ ├── grid.cpp │ │ ├── grid.h │ │ ├── integration_field.cpp │ │ ├── integration_field.h │ │ ├── integrator.cpp │ │ ├── integrator.h │ │ ├── legacy/ │ │ │ ├── CMakeLists.txt │ │ │ ├── a_star.cpp │ │ │ ├── a_star.h │ │ │ ├── heuristics.cpp │ │ │ ├── heuristics.h │ │ │ ├── path.cpp │ │ │ ├── path.h │ │ │ ├── path_utils.h │ │ │ └── tests.cpp │ │ ├── path.cpp │ │ ├── path.h │ │ ├── pathfinder.cpp │ │ ├── pathfinder.h │ │ ├── portal.cpp │ │ ├── portal.h │ │ ├── sector.cpp │ │ ├── sector.h │ │ ├── tests.cpp │ │ ├── types.cpp │ │ └── types.h │ ├── presenter/ │ │ ├── CMakeLists.txt │ │ ├── presenter.cpp │ │ └── presenter.h │ ├── pyinterface/ │ │ ├── CMakeLists.txt │ │ ├── defs.cpp │ │ ├── defs.h │ │ ├── exctranslate.cpp │ │ ├── exctranslate.h │ │ ├── exctranslate_tests.cpp │ │ ├── exctranslate_tests.h │ │ ├── functional.cpp │ │ ├── functional.h │ │ ├── hacks.cpp │ │ ├── hacks.h │ │ ├── pyexception.cpp │ │ ├── pyexception.h │ │ ├── pyobject.cpp │ │ ├── pyobject.h │ │ ├── pyobject_tests.cpp │ │ ├── pyobject_tests.h │ │ ├── setup.cpp │ │ └── setup.h │ ├── renderer/ │ │ ├── CMakeLists.txt │ │ ├── camera/ │ │ │ ├── CMakeLists.txt │ │ │ ├── boundaries.cpp │ │ │ ├── boundaries.h │ │ │ ├── camera.cpp │ │ │ ├── camera.h │ │ │ ├── definitions.cpp │ │ │ ├── definitions.h │ │ │ ├── frustum_2d.cpp │ │ │ ├── frustum_2d.h │ │ │ ├── frustum_3d.cpp │ │ │ └── frustum_3d.h │ │ ├── color.cpp │ │ ├── color.h │ │ ├── definitions.cpp │ │ ├── definitions.h │ │ ├── demo/ │ │ │ ├── CMakeLists.txt │ │ │ ├── demo_0.cpp │ │ │ ├── demo_0.h │ │ │ ├── demo_1.cpp │ │ │ ├── demo_1.h │ │ │ ├── demo_2.cpp │ │ │ ├── demo_2.h │ │ │ ├── demo_3.cpp │ │ │ ├── demo_3.h │ │ │ ├── demo_4.cpp │ │ │ ├── demo_4.h │ │ │ ├── demo_5.cpp │ │ │ ├── demo_5.h │ │ │ ├── demo_6.cpp │ │ │ ├── demo_6.h │ │ │ ├── demo_7.cpp │ │ │ ├── demo_7.h │ │ │ ├── stresstest_0.cpp │ │ │ ├── stresstest_0.h │ │ │ ├── stresstest_1.cpp │ │ │ ├── stresstest_1.h │ │ │ ├── tests.cpp │ │ │ ├── tests.h │ │ │ ├── util.cpp │ │ │ └── util.h │ │ ├── font/ │ │ │ ├── CMakeLists.txt │ │ │ ├── font.cpp │ │ │ ├── font.h │ │ │ ├── font_manager.cpp │ │ │ ├── font_manager.h │ │ │ ├── glyph_atlas.cpp │ │ │ ├── glyph_atlas.h │ │ │ └── tests.cpp │ │ ├── geometry.cpp │ │ ├── geometry.h │ │ ├── gui/ │ │ │ ├── CMakeLists.txt │ │ │ ├── gui.cpp │ │ │ ├── gui.h │ │ │ ├── guisys/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── link/ │ │ │ │ │ ├── gui_item.cpp │ │ │ │ │ ├── gui_item.h │ │ │ │ │ ├── gui_item_link.h │ │ │ │ │ ├── gui_item_list_model.h │ │ │ │ │ ├── gui_list_model.cpp │ │ │ │ │ ├── gui_list_model.h │ │ │ │ │ ├── gui_property_map_impl.cpp │ │ │ │ │ ├── gui_property_map_impl.h │ │ │ │ │ ├── gui_singleton_item.cpp │ │ │ │ │ ├── gui_singleton_item.h │ │ │ │ │ └── qtgui_checked_static_cast.h │ │ │ │ ├── private/ │ │ │ │ │ ├── gui_application_impl.cpp │ │ │ │ │ ├── gui_application_impl.h │ │ │ │ │ ├── gui_ctx_setup.cpp │ │ │ │ │ ├── gui_ctx_setup.h │ │ │ │ │ ├── gui_engine_impl.cpp │ │ │ │ │ ├── gui_engine_impl.h │ │ │ │ │ ├── gui_input_impl.cpp │ │ │ │ │ ├── gui_input_impl.h │ │ │ │ │ ├── gui_renderer_impl.cpp │ │ │ │ │ ├── gui_renderer_impl.h │ │ │ │ │ ├── gui_rendering_setup_routines.cpp │ │ │ │ │ ├── gui_rendering_setup_routines.h │ │ │ │ │ ├── gui_subtree_impl.cpp │ │ │ │ │ ├── gui_subtree_impl.h │ │ │ │ │ ├── livereload/ │ │ │ │ │ │ ├── deferred_initial_constant_property_values.cpp │ │ │ │ │ │ ├── deferred_initial_constant_property_values.h │ │ │ │ │ │ ├── gui_live_reloader.cpp │ │ │ │ │ │ ├── gui_live_reloader.h │ │ │ │ │ │ ├── recursive_directory_watcher.cpp │ │ │ │ │ │ ├── recursive_directory_watcher.h │ │ │ │ │ │ ├── recursive_directory_watcher_worker.cpp │ │ │ │ │ │ └── recursive_directory_watcher_worker.h │ │ │ │ │ ├── opengl_debug_logger.cpp │ │ │ │ │ └── opengl_debug_logger.h │ │ │ │ └── public/ │ │ │ │ ├── gui_application.cpp │ │ │ │ ├── gui_application.h │ │ │ │ ├── gui_engine.cpp │ │ │ │ ├── gui_engine.h │ │ │ │ ├── gui_input.cpp │ │ │ │ ├── gui_input.h │ │ │ │ ├── gui_renderer.cpp │ │ │ │ ├── gui_renderer.h │ │ │ │ ├── gui_subtree.cpp │ │ │ │ └── gui_subtree.h │ │ │ └── integration/ │ │ │ ├── CMakeLists.txt │ │ │ ├── private/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── gui_filled_texture_handles.cpp │ │ │ │ ├── gui_filled_texture_handles.h │ │ │ │ ├── gui_log.cpp │ │ │ │ ├── gui_log.h │ │ │ │ ├── gui_make_standalone_subtexture.cpp │ │ │ │ ├── gui_make_standalone_subtexture.h │ │ │ │ ├── gui_standalone_subtexture.cpp │ │ │ │ ├── gui_standalone_subtexture.h │ │ │ │ ├── gui_texture.cpp │ │ │ │ ├── gui_texture.h │ │ │ │ ├── gui_texture_handle.cpp │ │ │ │ └── gui_texture_handle.h │ │ │ └── public/ │ │ │ ├── CMakeLists.txt │ │ │ ├── gui_application_with_logger.cpp │ │ │ └── gui_application_with_logger.h │ │ ├── opengl/ │ │ │ ├── CMakeLists.txt │ │ │ ├── buffer.cpp │ │ │ ├── buffer.h │ │ │ ├── context.cpp │ │ │ ├── context.h │ │ │ ├── debug.cpp │ │ │ ├── debug.h │ │ │ ├── error.cpp │ │ │ ├── error.h │ │ │ ├── framebuffer.cpp │ │ │ ├── framebuffer.h │ │ │ ├── geometry.cpp │ │ │ ├── geometry.h │ │ │ ├── lookup.h │ │ │ ├── render_pass.cpp │ │ │ ├── render_pass.h │ │ │ ├── render_target.cpp │ │ │ ├── render_target.h │ │ │ ├── renderer.cpp │ │ │ ├── renderer.h │ │ │ ├── shader.cpp │ │ │ ├── shader.h │ │ │ ├── shader_data.cpp │ │ │ ├── shader_data.h │ │ │ ├── shader_program.cpp │ │ │ ├── shader_program.h │ │ │ ├── simple_object.cpp │ │ │ ├── simple_object.h │ │ │ ├── texture.cpp │ │ │ ├── texture.h │ │ │ ├── texture_array.cpp │ │ │ ├── texture_array.h │ │ │ ├── uniform_buffer.cpp │ │ │ ├── uniform_buffer.h │ │ │ ├── uniform_input.cpp │ │ │ ├── uniform_input.h │ │ │ ├── util.cpp │ │ │ ├── util.h │ │ │ ├── vertex_array.cpp │ │ │ ├── vertex_array.h │ │ │ ├── window.cpp │ │ │ └── window.h │ │ ├── render_factory.cpp │ │ ├── render_factory.h │ │ ├── render_pass.cpp │ │ ├── render_pass.h │ │ ├── render_target.cpp │ │ ├── render_target.h │ │ ├── renderable.cpp │ │ ├── renderable.h │ │ ├── renderer.cpp │ │ ├── renderer.h │ │ ├── resources/ │ │ │ ├── CMakeLists.txt │ │ │ ├── animation/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── angle_info.cpp │ │ │ │ ├── angle_info.h │ │ │ │ ├── animation_info.cpp │ │ │ │ ├── animation_info.h │ │ │ │ ├── frame_info.cpp │ │ │ │ ├── frame_info.h │ │ │ │ ├── layer_info.cpp │ │ │ │ └── layer_info.h │ │ │ ├── assets/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── asset_manager.cpp │ │ │ │ ├── asset_manager.h │ │ │ │ ├── cache.cpp │ │ │ │ ├── cache.h │ │ │ │ ├── texture_manager.cpp │ │ │ │ └── texture_manager.h │ │ │ ├── buffer_info.cpp │ │ │ ├── buffer_info.h │ │ │ ├── frame_timing.cpp │ │ │ ├── frame_timing.h │ │ │ ├── mesh_data.cpp │ │ │ ├── mesh_data.h │ │ │ ├── palette_info.cpp │ │ │ ├── palette_info.h │ │ │ ├── parser/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── common.cpp │ │ │ │ ├── common.h │ │ │ │ ├── parse_blendmask.cpp │ │ │ │ ├── parse_blendmask.h │ │ │ │ ├── parse_blendtable.cpp │ │ │ │ ├── parse_blendtable.h │ │ │ │ ├── parse_palette.cpp │ │ │ │ ├── parse_palette.h │ │ │ │ ├── parse_sprite.cpp │ │ │ │ ├── parse_sprite.h │ │ │ │ ├── parse_terrain.cpp │ │ │ │ ├── parse_terrain.h │ │ │ │ ├── parse_texture.cpp │ │ │ │ └── parse_texture.h │ │ │ ├── shader_source.cpp │ │ │ ├── shader_source.h │ │ │ ├── shader_template.cpp │ │ │ ├── shader_template.h │ │ │ ├── terrain/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── blendpattern_info.cpp │ │ │ │ ├── blendpattern_info.h │ │ │ │ ├── blendtable_info.cpp │ │ │ │ ├── blendtable_info.h │ │ │ │ ├── frame_info.cpp │ │ │ │ ├── frame_info.h │ │ │ │ ├── layer_info.cpp │ │ │ │ ├── layer_info.h │ │ │ │ ├── terrain_info.cpp │ │ │ │ └── terrain_info.h │ │ │ ├── texture_data.cpp │ │ │ ├── texture_data.h │ │ │ ├── texture_info.cpp │ │ │ ├── texture_info.h │ │ │ ├── texture_subinfo.cpp │ │ │ └── texture_subinfo.h │ │ ├── shader_program.cpp │ │ ├── shader_program.h │ │ ├── stages/ │ │ │ ├── CMakeLists.txt │ │ │ ├── camera/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── manager.cpp │ │ │ │ └── manager.h │ │ │ ├── hud/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── object.cpp │ │ │ │ ├── object.h │ │ │ │ ├── render_entity.cpp │ │ │ │ ├── render_entity.h │ │ │ │ ├── render_stage.cpp │ │ │ │ └── render_stage.h │ │ │ ├── render_entity.cpp │ │ │ ├── render_entity.h │ │ │ ├── screen/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── render_stage.cpp │ │ │ │ ├── render_stage.h │ │ │ │ ├── screenshot.cpp │ │ │ │ └── screenshot.h │ │ │ ├── skybox/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── render_stage.cpp │ │ │ │ └── render_stage.h │ │ │ ├── terrain/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── chunk.cpp │ │ │ │ ├── chunk.h │ │ │ │ ├── mesh.cpp │ │ │ │ ├── mesh.h │ │ │ │ ├── model.cpp │ │ │ │ ├── model.h │ │ │ │ ├── render_entity.cpp │ │ │ │ ├── render_entity.h │ │ │ │ ├── render_stage.cpp │ │ │ │ └── render_stage.h │ │ │ └── world/ │ │ │ ├── CMakeLists.txt │ │ │ ├── object.cpp │ │ │ ├── object.h │ │ │ ├── render_entity.cpp │ │ │ ├── render_entity.h │ │ │ ├── render_stage.cpp │ │ │ └── render_stage.h │ │ ├── texture.cpp │ │ ├── texture.h │ │ ├── texture_array.cpp │ │ ├── texture_array.h │ │ ├── types.cpp │ │ ├── types.h │ │ ├── uniform_buffer.cpp │ │ ├── uniform_buffer.h │ │ ├── uniform_input.cpp │ │ ├── uniform_input.h │ │ ├── util.cpp │ │ ├── util.h │ │ ├── vulkan/ │ │ │ ├── CMakeLists.txt │ │ │ ├── README.md │ │ │ ├── graphics_device.cpp │ │ │ ├── graphics_device.h │ │ │ ├── loader.cpp │ │ │ ├── loader.h │ │ │ ├── render_target.h │ │ │ ├── renderer.cpp │ │ │ ├── renderer.h │ │ │ ├── shader_program.h │ │ │ ├── util.h │ │ │ ├── windowvk.cpp │ │ │ └── windowvk.h │ │ ├── window.cpp │ │ ├── window.h │ │ ├── window_event_handler.cpp │ │ └── window_event_handler.h │ ├── rng/ │ │ ├── CMakeLists.txt │ │ ├── global_rng.cpp │ │ ├── global_rng.h │ │ ├── rng.cpp │ │ ├── rng.h │ │ └── rng_tests.cpp │ ├── testing/ │ │ ├── CMakeLists.txt │ │ ├── benchmark_test.cpp │ │ ├── testing.cpp │ │ ├── testing.h │ │ ├── testlist.cpp.template │ │ └── testlist.h │ ├── time/ │ │ ├── CMakeLists.txt │ │ ├── clock.cpp │ │ ├── clock.h │ │ ├── time.cpp │ │ ├── time.h │ │ ├── time_loop.cpp │ │ └── time_loop.h │ ├── util/ │ │ ├── CMakeLists.txt │ │ ├── algorithm.h │ │ ├── color.cpp │ │ ├── color.h │ │ ├── compiler.cpp │ │ ├── compiler.h │ │ ├── compress/ │ │ │ ├── CMakeLists.txt │ │ │ ├── bitstream.h │ │ │ ├── lzxd.cpp │ │ │ └── lzxd.h │ │ ├── consteval.h │ │ ├── constinit_vector.cpp │ │ ├── constinit_vector.h │ │ ├── enum.cpp │ │ ├── enum.h │ │ ├── enum_test.cpp │ │ ├── enum_test.h │ │ ├── externalprofiler.cpp │ │ ├── externalprofiler.h │ │ ├── externalsstream.cpp │ │ ├── externalsstream.h │ │ ├── fds.cpp │ │ ├── fds.h │ │ ├── file.cpp │ │ ├── file.h │ │ ├── filelike/ │ │ │ ├── CMakeLists.txt │ │ │ ├── filelike.cpp │ │ │ ├── filelike.h │ │ │ ├── native.cpp │ │ │ ├── native.h │ │ │ ├── python.cpp │ │ │ └── python.h │ │ ├── fixed_point.cpp │ │ ├── fixed_point.h │ │ ├── fixed_point_test.cpp │ │ ├── fps.cpp │ │ ├── fps.h │ │ ├── fslike/ │ │ │ ├── CMakeLists.txt │ │ │ ├── directory.cpp │ │ │ ├── directory.h │ │ │ ├── fslike.cpp │ │ │ ├── fslike.h │ │ │ ├── native.cpp │ │ │ ├── native.h │ │ │ ├── python.cpp │ │ │ └── python.h │ │ ├── hash.cpp │ │ ├── hash.h │ │ ├── hash_test.cpp │ │ ├── init.cpp │ │ ├── init.h │ │ ├── language.cpp │ │ ├── language.h │ │ ├── macro/ │ │ │ ├── concat.h │ │ │ └── loop.h │ │ ├── math.h │ │ ├── math_constants.h │ │ ├── matrix.cpp │ │ ├── matrix.h │ │ ├── matrix_test.cpp │ │ ├── misc.cpp │ │ ├── misc.h │ │ ├── misc_test.cpp │ │ ├── os.cpp │ │ ├── os.h │ │ ├── path.cpp │ │ ├── path.h │ │ ├── pty.h │ │ ├── quaternion.cpp │ │ ├── quaternion.h │ │ ├── quaternion_test.cpp │ │ ├── repr.cpp │ │ ├── repr.h │ │ ├── signal.h │ │ ├── stringformatter.cpp │ │ ├── stringformatter.h │ │ ├── strings.cpp │ │ ├── strings.h │ │ ├── subprocess.cpp │ │ ├── subprocess.h │ │ ├── thread_id.cpp │ │ ├── thread_id.h │ │ ├── timer.cpp │ │ ├── timer.h │ │ ├── timing.cpp │ │ ├── timing.h │ │ ├── unicode.cpp │ │ ├── unicode.h │ │ ├── variable.h │ │ ├── vector.cpp │ │ ├── vector.h │ │ └── vector_test.cpp │ ├── version.cpp.in │ ├── version.h.in │ └── versions/ │ ├── CMakeLists.txt │ ├── compiletime.cpp.in │ ├── compiletime.h.in │ ├── versions.cpp │ └── versions.h ├── nix/ │ ├── nyan.nix │ └── openage.nix ├── openage/ │ ├── .gitignore │ ├── CMakeLists.txt │ ├── __init__.py │ ├── __main__.py │ ├── assets.py │ ├── cabextract/ │ │ ├── CMakeLists.txt │ │ ├── __init__.py │ │ ├── cab.py │ │ ├── cabchecksum.pyx │ │ ├── gen_test_arc.sh │ │ ├── lzxd.pyx │ │ ├── lzxdstream.py │ │ └── test.py │ ├── codegen/ │ │ ├── CMakeLists.txt │ │ ├── __init__.py │ │ ├── codegen.py │ │ ├── coord.py │ │ ├── cpp_testlist.py │ │ ├── listing.py │ │ └── main.py │ ├── config.py.in │ ├── convert/ │ │ ├── CMakeLists.txt │ │ ├── __init__.py │ │ ├── entity_object/ │ │ │ ├── CMakeLists.txt │ │ │ ├── __init__.py │ │ │ ├── conversion/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __init__.py │ │ │ │ ├── aoc/ │ │ │ │ │ ├── CMakeLists.txt │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── genie_civ.py │ │ │ │ │ ├── genie_connection.py │ │ │ │ │ ├── genie_effect.py │ │ │ │ │ ├── genie_graphic.py │ │ │ │ │ ├── genie_object_container.py │ │ │ │ │ ├── genie_sound.py │ │ │ │ │ ├── genie_tech.py │ │ │ │ │ ├── genie_terrain.py │ │ │ │ │ └── genie_unit.py │ │ │ │ ├── combined_sound.py │ │ │ │ ├── combined_sprite.py │ │ │ │ ├── combined_terrain.py │ │ │ │ ├── converter_object.py │ │ │ │ ├── modpack.py │ │ │ │ ├── ror/ │ │ │ │ │ ├── CMakeLists.txt │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── genie_sound.py │ │ │ │ │ ├── genie_tech.py │ │ │ │ │ └── genie_unit.py │ │ │ │ ├── stringresource.py │ │ │ │ └── swgbcc/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __init__.py │ │ │ │ ├── genie_tech.py │ │ │ │ └── genie_unit.py │ │ │ └── export/ │ │ │ ├── CMakeLists.txt │ │ │ ├── __init__.py │ │ │ ├── data_definition.py │ │ │ ├── formats/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __init__.py │ │ │ │ ├── blmask_metadata.py │ │ │ │ ├── bltable_metadata.py │ │ │ │ ├── media_cache.py │ │ │ │ ├── modpack_info.py │ │ │ │ ├── modpack_manifest.py │ │ │ │ ├── nyan_file.py │ │ │ │ ├── palette_metadata.py │ │ │ │ ├── sprite_metadata.py │ │ │ │ ├── terrain_metadata.py │ │ │ │ └── texture_metadata.py │ │ │ ├── media_export_request.py │ │ │ ├── metadata_export.py │ │ │ └── texture.py │ │ ├── main.py │ │ ├── processor/ │ │ │ ├── CMakeLists.txt │ │ │ ├── __init__.py │ │ │ ├── conversion/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __init__.py │ │ │ │ ├── aoc/ │ │ │ │ │ ├── CMakeLists.txt │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── ability_subprocessor.py │ │ │ │ │ ├── auxiliary_subprocessor.py │ │ │ │ │ ├── civ_subprocessor.py │ │ │ │ │ ├── effect_subprocessor.py │ │ │ │ │ ├── media_subprocessor.py │ │ │ │ │ ├── modifier_subprocessor.py │ │ │ │ │ ├── modpack_subprocessor.py │ │ │ │ │ ├── nyan_subprocessor.py │ │ │ │ │ ├── pregen_processor.py │ │ │ │ │ ├── processor.py │ │ │ │ │ ├── tech_subprocessor.py │ │ │ │ │ ├── upgrade_ability_subprocessor.py │ │ │ │ │ ├── upgrade_attribute_subprocessor.py │ │ │ │ │ ├── upgrade_effect_subprocessor.py │ │ │ │ │ └── upgrade_resource_subprocessor.py │ │ │ │ ├── aoc_demo/ │ │ │ │ │ ├── CMakeLists.txt │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── modpack_subprocessor.py │ │ │ │ │ └── processor.py │ │ │ │ ├── de1/ │ │ │ │ │ ├── CMakeLists.txt │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── media_subprocessor.py │ │ │ │ │ ├── modpack_subprocessor.py │ │ │ │ │ └── processor.py │ │ │ │ ├── de2/ │ │ │ │ │ ├── CMakeLists.txt │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── ability_subprocessor.py │ │ │ │ │ ├── civ_subprocessor.py │ │ │ │ │ ├── media_subprocessor.py │ │ │ │ │ ├── modpack_subprocessor.py │ │ │ │ │ ├── nyan_subprocessor.py │ │ │ │ │ ├── processor.py │ │ │ │ │ ├── tech_subprocessor.py │ │ │ │ │ ├── upgrade_attribute_subprocessor.py │ │ │ │ │ └── upgrade_resource_subprocessor.py │ │ │ │ ├── hd/ │ │ │ │ │ ├── CMakeLists.txt │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── media_subprocessor.py │ │ │ │ │ ├── modpack_subprocessor.py │ │ │ │ │ └── processor.py │ │ │ │ ├── ror/ │ │ │ │ │ ├── CMakeLists.txt │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── ability_subprocessor.py │ │ │ │ │ ├── auxiliary_subprocessor.py │ │ │ │ │ ├── civ_subprocessor.py │ │ │ │ │ ├── media_subprocessor.py │ │ │ │ │ ├── modpack_subprocessor.py │ │ │ │ │ ├── nyan_subprocessor.py │ │ │ │ │ ├── pregen_subprocessor.py │ │ │ │ │ ├── processor.py │ │ │ │ │ ├── tech_subprocessor.py │ │ │ │ │ ├── upgrade_ability_subprocessor.py │ │ │ │ │ ├── upgrade_attribute_subprocessor.py │ │ │ │ │ └── upgrade_resource_subprocessor.py │ │ │ │ └── swgbcc/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __init__.py │ │ │ │ ├── ability_subprocessor.py │ │ │ │ ├── auxiliary_subprocessor.py │ │ │ │ ├── civ_subprocessor.py │ │ │ │ ├── modpack_subprocessor.py │ │ │ │ ├── nyan_subprocessor.py │ │ │ │ ├── pregen_subprocessor.py │ │ │ │ ├── processor.py │ │ │ │ ├── tech_subprocessor.py │ │ │ │ ├── upgrade_attribute_subprocessor.py │ │ │ │ └── upgrade_resource_subprocessor.py │ │ │ └── export/ │ │ │ ├── CMakeLists.txt │ │ │ ├── __init__.pxd │ │ │ ├── __init__.py │ │ │ ├── data_exporter.py │ │ │ ├── generate_manifest_hashes.py │ │ │ ├── media_exporter.py │ │ │ ├── modpack_exporter.py │ │ │ ├── terrain_merge.pyx │ │ │ └── texture_merge.pyx │ │ ├── service/ │ │ │ ├── CMakeLists.txt │ │ │ ├── __init__.py │ │ │ ├── conversion/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __init__.py │ │ │ │ └── internal_name_lookups.py │ │ │ ├── debug_info.py │ │ │ ├── export/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __init__.py │ │ │ │ ├── interface/ │ │ │ │ │ ├── CMakeLists.txt │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── cutter.py │ │ │ │ │ ├── rename.py │ │ │ │ │ └── visgrep.pyx │ │ │ │ ├── load_media_cache.py │ │ │ │ ├── opus/ │ │ │ │ │ ├── CMakeLists.txt │ │ │ │ │ ├── __init__.pxd │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── bytearray.pxd │ │ │ │ │ ├── demo.py │ │ │ │ │ ├── ogg.pxd │ │ │ │ │ ├── opus.pxd │ │ │ │ │ └── opusenc.pyx │ │ │ │ └── png/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __init__.pxd │ │ │ │ ├── __init__.py │ │ │ │ ├── binpack.pxd │ │ │ │ ├── binpack.pyx │ │ │ │ ├── libpng.pxd │ │ │ │ ├── png_create.pyx │ │ │ │ └── png_tmp_file.pxd │ │ │ ├── init/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __init__.py │ │ │ │ ├── api_export_required.py │ │ │ │ ├── changelog.py │ │ │ │ ├── modpack_search.py │ │ │ │ ├── mount_asset_dirs.py │ │ │ │ └── version_detect.py │ │ │ └── read/ │ │ │ ├── CMakeLists.txt │ │ │ ├── __init__.py │ │ │ ├── gamedata.py │ │ │ ├── nyan_api_loader.py │ │ │ ├── palette.py │ │ │ ├── register_media.py │ │ │ └── string_resource.py │ │ ├── tool/ │ │ │ ├── CMakeLists.txt │ │ │ ├── __init__.py │ │ │ ├── api_export.py │ │ │ ├── driver.py │ │ │ ├── interactive.py │ │ │ ├── singlefile.py │ │ │ └── subtool/ │ │ │ ├── CMakeLists.txt │ │ │ ├── __init__.py │ │ │ ├── acquire_sourcedir.py │ │ │ └── version_select.py │ │ └── value_object/ │ │ ├── CMakeLists.txt │ │ ├── __init__.py │ │ ├── conversion/ │ │ │ ├── CMakeLists.txt │ │ │ ├── __init__.py │ │ │ ├── aoc/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __init__.py │ │ │ │ └── internal_nyan_names.py │ │ │ ├── de1/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __init__.py │ │ │ │ └── internal_nyan_names.py │ │ │ ├── de2/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __init__.py │ │ │ │ └── internal_nyan_names.py │ │ │ ├── forward_ref.py │ │ │ ├── hd/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __init__.py │ │ │ │ ├── ak/ │ │ │ │ │ ├── CMakeLists.txt │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── internal_nyan_names.py │ │ │ │ ├── fgt/ │ │ │ │ │ ├── CMakeLists.txt │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── internal_nyan_names.py │ │ │ │ └── raj/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __init__.py │ │ │ │ └── internal_nyan_names.py │ │ │ ├── ror/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __init__.py │ │ │ │ └── internal_nyan_names.py │ │ │ └── swgb/ │ │ │ ├── CMakeLists.txt │ │ │ ├── __init__.py │ │ │ └── internal_nyan_names.py │ │ ├── init/ │ │ │ ├── CMakeLists.txt │ │ │ ├── __init__.py │ │ │ ├── game_file_version.py │ │ │ └── game_version.py │ │ └── read/ │ │ ├── CMakeLists.txt │ │ ├── __init__.py │ │ ├── dynamic_loader.py │ │ ├── genie_structure.py │ │ ├── media/ │ │ │ ├── CMakeLists.txt │ │ │ ├── __init__.pxd │ │ │ ├── __init__.py │ │ │ ├── blendomatic.py │ │ │ ├── colortable.py │ │ │ ├── datfile/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __init__.py │ │ │ │ ├── civ.py │ │ │ │ ├── empiresdat.py │ │ │ │ ├── graphic.py │ │ │ │ ├── lookup_dicts.py │ │ │ │ ├── maps.py │ │ │ │ ├── playercolor.py │ │ │ │ ├── research.py │ │ │ │ ├── sound.py │ │ │ │ ├── tech.py │ │ │ │ ├── terrain.py │ │ │ │ └── unit.py │ │ │ ├── drs.py │ │ │ ├── hardcoded/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── __init__.py │ │ │ │ ├── interface.py │ │ │ │ ├── termcolors.py │ │ │ │ ├── terrain_tile_size.py │ │ │ │ └── texture.py │ │ │ ├── langcodes.py │ │ │ ├── pefile.py │ │ │ ├── peresource.py │ │ │ ├── sld.pyx │ │ │ ├── slp.pyx │ │ │ ├── smp.pyx │ │ │ └── smx.pyx │ │ ├── media_types.py │ │ ├── member_access.py │ │ ├── read_members.py │ │ └── value_members.py │ ├── cppinterface/ │ │ ├── CMakeLists.txt │ │ ├── __init__.py │ │ ├── exctranslate.pyx │ │ ├── exctranslate_tests.pyx │ │ ├── pyobject.pyx │ │ ├── setup.py │ │ ├── setup_checker.pyx │ │ └── typedefs.pxd │ ├── cvar/ │ │ ├── CMakeLists.txt │ │ ├── __init__.py │ │ ├── config_file.py │ │ ├── cvar.pyx │ │ └── location.py │ ├── cython_check.pyx │ ├── default_dirs.py │ ├── devmode.py │ ├── event/ │ │ ├── CMakeLists.txt │ │ ├── __init__.py │ │ └── demo.pyx │ ├── game/ │ │ ├── CMakeLists.txt │ │ ├── __init__.py │ │ ├── main.py │ │ └── main_cpp.pyx │ ├── gamestate/ │ │ ├── CMakeLists.txt │ │ ├── __init__.py │ │ └── tests.pyx │ ├── log/ │ │ ├── CMakeLists.txt │ │ ├── __init__.py │ │ ├── log_cpp.pyx │ │ └── tests.py │ ├── main/ │ │ ├── CMakeLists.txt │ │ ├── __init__.py │ │ ├── main.py │ │ ├── main_cpp.pyx │ │ └── tests.pyx │ ├── nyan/ │ │ ├── CMakeLists.txt │ │ ├── __init__.py │ │ ├── import_tree.py │ │ └── nyan_structs.py │ ├── pathfinding/ │ │ ├── CMakeLists.txt │ │ ├── __init__.py │ │ └── tests.pyx │ ├── renderer/ │ │ ├── CMakeLists.txt │ │ ├── __init__.py │ │ ├── renderer_cpp.pyx │ │ └── tests.pyx │ ├── testing/ │ │ ├── CMakeLists.txt │ │ ├── __init__.py │ │ ├── benchmark.py │ │ ├── cpp_testing.pyx │ │ ├── doctest.py │ │ ├── list_processor.py │ │ ├── main.py │ │ ├── misc_cpp.pyx │ │ ├── testing.py │ │ └── testlist.py │ ├── util/ │ │ ├── CMakeLists.txt │ │ ├── __init__.py │ │ ├── bytequeue.py │ │ ├── context.py │ │ ├── decorators.py │ │ ├── dll.py │ │ ├── filelike/ │ │ │ ├── CMakeLists.txt │ │ │ ├── __init__.py │ │ │ ├── abstract.py │ │ │ ├── cpp.pyx │ │ │ ├── fifo.py │ │ │ ├── readonly.py │ │ │ └── stream.py │ │ ├── files.py │ │ ├── fslike/ │ │ │ ├── CMakeLists.txt │ │ │ ├── __init__.py │ │ │ ├── abstract.py │ │ │ ├── cpp.pxd │ │ │ ├── cpp.pyx │ │ │ ├── directory.py │ │ │ ├── filecollection.py │ │ │ ├── path.py │ │ │ ├── test.py │ │ │ ├── union.py │ │ │ └── wrapper.py │ │ ├── fsprinting.py │ │ ├── hash.py │ │ ├── iterators.py │ │ ├── math.py │ │ ├── observer.py │ │ ├── ordered_set.py │ │ ├── profiler.py │ │ ├── strings.py │ │ ├── struct.py │ │ ├── system.py │ │ ├── threading.py │ │ └── version.py │ └── versions/ │ ├── CMakeLists.txt │ ├── __init__.py │ └── versions.pyx ├── openage_version ├── packaging/ │ ├── CMakeLists.txt │ ├── CPackOptions.cmake │ └── docker/ │ └── devenv/ │ └── Dockerfile.ubuntu.2404 ├── run.py.in └── shell.nix