gitextract_h4wrmfpe/ ├── .devcontainer/ │ ├── Dockerfile │ ├── devcontainer.json │ └── fluxbox/ │ ├── apps │ └── menu ├── .editorconfig ├── .gdbinit ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ └── feature_request.yml │ ├── dependabot.yml │ └── workflows/ │ ├── 3ds.yml │ ├── Android.yml │ ├── Linux_aarch64.yml │ ├── Linux_x86.yml │ ├── Linux_x86_64.yml │ ├── Linux_x86_64_SDL1.yml │ ├── Linux_x86_64_SDL3_test.yml │ ├── Linux_x86_64_test.yml │ ├── PS4.yml │ ├── PS5.yml │ ├── Windows9x_MinGW.yml │ ├── Windows_MSVC_x64.yml │ ├── Windows_MinGW_x64.yml │ ├── Windows_MinGW_x86.yml │ ├── Windows_XP_32bit.yml │ ├── amiga-m68k.yml │ ├── cache-cleanup.yml │ ├── clang-format-check.yml │ ├── clang-tidy-check.yml │ ├── iOS.yml │ ├── macOS_arm64.yml │ ├── macOS_x86_64.yml │ ├── miyoo_mini_release.yml │ ├── opendingux_release.yml │ ├── retrofw_release.yml │ ├── s390x_qemu_big_endian_tests.yml │ ├── src_dist_release.yml │ ├── switch.yml │ ├── translations.yml │ ├── vita.yml │ ├── xbox_nxdk.yml │ └── xbox_one.yml ├── .gitignore ├── .lldbinit ├── 3rdParty/ │ ├── Lua/ │ │ └── CMakeLists.txt │ ├── PKWare/ │ │ ├── CMakeLists.txt │ │ ├── Makefile │ │ ├── PKWare.vcxproj │ │ ├── PKWare.vcxproj.filters │ │ ├── Pkware.dsp │ │ ├── explode.cpp │ │ ├── implode.cpp │ │ └── pkware.h │ ├── PicoSHA2/ │ │ └── picosha2.h │ ├── SDL2/ │ │ ├── CMake/ │ │ │ └── FindSDL2.cmake │ │ └── CMakeLists.txt │ ├── SDL3/ │ │ └── CMakeLists.txt │ ├── SDL3_image/ │ │ └── CMakeLists.txt │ ├── SDL3_mixer/ │ │ └── CMakeLists.txt │ ├── SDL_audiolib/ │ │ └── CMakeLists.txt │ ├── SDL_image/ │ │ ├── CMakeLists.txt │ │ └── IMG.c │ ├── SheenBidi/ │ │ └── CMakeLists.txt │ ├── asio/ │ │ ├── CMakeLists.txt │ │ ├── asio_handle_exception.cpp │ │ └── asio_handle_exception.hpp │ ├── benchmark/ │ │ └── CMakeLists.txt │ ├── bzip2/ │ │ ├── CMakeLists.txt │ │ └── bz_internal_error.c │ ├── discord/ │ │ ├── .editorconfig │ │ ├── CMakeLists.txt │ │ └── fixes.patch │ ├── find_steam_game/ │ │ └── CMakeLists.txt │ ├── googletest/ │ │ └── CMakeLists.txt │ ├── libfmt/ │ │ └── CMakeLists.txt │ ├── libmpq/ │ │ ├── CMakeLists.txt │ │ └── config.h │ ├── libpng/ │ │ └── CMakeLists.txt │ ├── libsmackerdec/ │ │ └── CMakeLists.txt │ ├── libsodium/ │ │ └── CMakeLists.txt │ ├── libzt/ │ │ └── CMakeLists.txt │ ├── magic_enum/ │ │ └── CMakeLists.txt │ ├── sol2/ │ │ ├── CMakeLists.txt │ │ └── sol_config/ │ │ └── sol/ │ │ ├── config.hpp │ │ └── debug.hpp │ ├── tl/ │ │ ├── CMakeLists.txt │ │ ├── expected.hpp │ │ └── function_ref.hpp │ ├── tolk/ │ │ └── CMakeLists.txt │ ├── unordered_dense/ │ │ ├── 0001-Disable-PMR-support-for-mingw-std-threads-compat.patch │ │ └── CMakeLists.txt │ └── zlib/ │ ├── CMake/ │ │ └── FindZLIB.cmake │ └── CMakeLists.txt ├── Brewfile ├── CMake/ │ ├── Assets.cmake │ ├── Definitions.cmake │ ├── Dependencies.cmake │ ├── Mods.cmake │ ├── MoldLinker.cmake │ ├── Platforms.cmake │ ├── Tests.cmake │ ├── VcPkgManifestFeatures.cmake │ ├── finders/ │ │ ├── FindGperftools.cmake │ │ ├── FindSDL2_image.cmake │ │ ├── FindSDL_audiolib.cmake │ │ ├── FindSpeechd.cmake │ │ ├── Findsimpleini.cmake │ │ └── Findsodium.cmake │ ├── functions/ │ │ ├── FetchContent_ExcludeFromAll_backport.cmake │ │ ├── copy_files.cmake │ │ ├── dependency_options.cmake │ │ ├── devilutionx_library.cmake │ │ ├── emscripten_system_library.cmake │ │ ├── genex.cmake │ │ ├── git.cmake │ │ ├── object_libraries.cmake │ │ ├── set_relative_file_macro.cmake │ │ └── trim_retired_files.cmake │ └── platforms/ │ ├── .editorconfig │ ├── aarch64-linux-gnu-clang-static-libc++.toolchain.cmake │ ├── aarch64-linux-gnu.toolchain.cmake │ ├── amiga.cmake │ ├── android.cmake │ ├── cpigamesh.cmake │ ├── ctr/ │ │ ├── Tools3DS.cmake │ │ ├── asio_defs.cmake │ │ ├── bin2s_header.h.in │ │ └── modules/ │ │ ├── FindCITRO3D.cmake │ │ ├── FindCTRULIB.cmake │ │ ├── FindPNG.cmake │ │ ├── FindZLIB.cmake │ │ ├── LibFindMacros.cmake │ │ └── try_add_imported_target.cmake │ ├── debian-cross-pkg-config.sh │ ├── djcpp.toolchain.cmake │ ├── dos.cmake │ ├── emscripten.cmake │ ├── gkd350h.cmake │ ├── haiku.cmake │ ├── ios.cmake │ ├── ios.toolchain.cmake │ ├── lepus.cmake │ ├── linux_i386.toolchain.cmake │ ├── macos_tiger.cmake │ ├── macports/ │ │ └── finders/ │ │ └── FindMacportsLegacySupport.cmake │ ├── mingw/ │ │ └── zt_defs.cmake │ ├── mingw9x/ │ │ └── include/ │ │ └── windef.h │ ├── mingw9x.toolchain.cmake │ ├── mingwcc.toolchain.cmake │ ├── mingwcc64.toolchain.cmake │ ├── miyoo_mini.cmake │ ├── n3ds.cmake │ ├── ps4.cmake │ ├── retrofw.cmake │ ├── rg350.cmake │ ├── rg99.cmake │ ├── switch/ │ │ └── asio_defs.cmake │ ├── switch.cmake │ ├── threads-stub/ │ │ └── FindThreads.cmake │ ├── uwp_lib.cmake │ ├── vita.cmake │ ├── windows.cmake │ ├── windows9x.cmake │ ├── windowsXP.cmake │ ├── xbox_nxdk/ │ │ └── finders/ │ │ ├── FindPNG.cmake │ │ ├── FindSDL2.cmake │ │ └── FindZLIB.cmake │ └── xbox_nxdk.cmake ├── CMakeLists.txt ├── CMakeSettings.json ├── CODE_OF_CONDUCT.md ├── LICENSE.md ├── Packaging/ │ ├── OpenDingux/ │ │ ├── .editorconfig │ │ ├── .gitignore │ │ ├── README.md │ │ ├── build-all.sh │ │ ├── build.sh │ │ ├── devilutionx-from-disk.sh │ │ ├── devilutionx-umount-opk-and-run.sh │ │ ├── gkd350h-manual.txt │ │ ├── gkd350h.desktop │ │ ├── lepus-manual.txt │ │ ├── lepus.desktop │ │ ├── package-opk.sh │ │ ├── profile-generate.sh │ │ ├── retrofw-manual.txt │ │ ├── retrofw.desktop │ │ ├── rg350-manual.txt │ │ ├── rg350.desktop │ │ ├── rg99-manual.txt │ │ ├── rg99-pgo.md │ │ ├── rg99.desktop │ │ └── targets.sh │ ├── amiga/ │ │ ├── Dockerfile │ │ ├── devilutionx.info │ │ └── prep.sh │ ├── apple/ │ │ ├── AppIcon.icns │ │ ├── AppIcon_128.icns │ │ ├── Info.plist │ │ ├── LaunchScreen.storyboard │ │ └── png2icns_tiger/ │ │ ├── .gitignore │ │ ├── CMakeLists.txt │ │ ├── png2icns_tiger.c │ │ └── run.sh │ ├── cpi-gamesh/ │ │ ├── __init__.py │ │ ├── build.sh │ │ └── readme.md │ ├── ctr/ │ │ └── template.rsf │ ├── emscripten/ │ │ └── index.html │ ├── haiku/ │ │ └── devilutionX.rdef.in │ ├── miyoo_mini/ │ │ ├── build.sh │ │ ├── setup_toolchain.sh │ │ ├── skeleton_MiniUI/ │ │ │ └── Diablo/ │ │ │ ├── Diablo.m3u │ │ │ ├── launch.sh │ │ │ └── readme.txt │ │ ├── skeleton_OnionOS/ │ │ │ ├── Roms/ │ │ │ │ └── PORTS/ │ │ │ │ ├── Games/ │ │ │ │ │ └── Diablo (devilutionX)/ │ │ │ │ │ └── _required_files.txt │ │ │ │ └── Shortcuts/ │ │ │ │ └── Action/ │ │ │ │ └── Diablo (DevilutionX).notfound │ │ │ └── readme.txt │ │ └── toolchainfile.cmake │ ├── nix/ │ │ ├── AppImage.sh │ │ ├── AppRun │ │ ├── LinuxReleasePackaging.sh │ │ ├── README.txt │ │ ├── debian-cross-aarch64-prep.sh │ │ ├── debian-cross-i386-prep.sh │ │ ├── debian-host-prep.sh │ │ ├── devilutionx-hellfire.desktop │ │ ├── devilutionx.6 │ │ ├── devilutionx.desktop │ │ └── devilutionx.metainfo.xml │ ├── pi/ │ │ └── README.txt │ ├── ps4/ │ │ ├── README.md │ │ └── build.sh │ ├── ps5/ │ │ ├── README.md │ │ ├── build.sh │ │ └── homebrew.js │ ├── resources/ │ │ ├── LICENSE.CC-BY.txt │ │ ├── LICENSE.OFL.txt │ │ ├── LICENSE.zlib.txt │ │ └── README-SDL.txt │ ├── switch/ │ │ ├── README.txt │ │ └── packages.txt │ ├── vita/ │ │ ├── README.txt │ │ └── sce_sys/ │ │ └── livearea/ │ │ └── contents/ │ │ └── template.xml │ ├── windows/ │ │ ├── CMakePresets.json │ │ ├── README.txt │ │ ├── devilutionx.exe.manifest │ │ ├── devilutionx.rc │ │ ├── dos-prep.sh │ │ ├── mingw-prep.sh │ │ └── mingw9x-prep.sh │ ├── xbox-one/ │ │ └── build.bat │ └── xbox_nxdk/ │ └── xbe_logo.pgm ├── README.md ├── Source/ │ ├── .clang-format │ ├── .clang-tidy │ ├── CMakeLists.txt │ ├── DiabloUI/ │ │ ├── button.cpp │ │ ├── button.h │ │ ├── credits.cpp │ │ ├── credits_lines.cpp │ │ ├── credits_lines.h │ │ ├── diabloui.cpp │ │ ├── diabloui.h │ │ ├── dialogs.cpp │ │ ├── dialogs.h │ │ ├── hero/ │ │ │ ├── selhero.cpp │ │ │ └── selhero.h │ │ ├── mainmenu.cpp │ │ ├── multi/ │ │ │ ├── selconn.cpp │ │ │ ├── selgame.cpp │ │ │ └── selgame.h │ │ ├── progress.cpp │ │ ├── scrollbar.cpp │ │ ├── scrollbar.h │ │ ├── selok.cpp │ │ ├── selok.h │ │ ├── selstart.cpp │ │ ├── selstart.h │ │ ├── selyesno.cpp │ │ ├── selyesno.h │ │ ├── settingsmenu.cpp │ │ ├── settingsmenu.h │ │ ├── support_lines.cpp │ │ ├── support_lines.h │ │ ├── text_input.cpp │ │ ├── text_input.hpp │ │ ├── title.cpp │ │ ├── ui_flags.hpp │ │ └── ui_item.h │ ├── appfat.cpp │ ├── appfat.h │ ├── automap.cpp │ ├── automap.h │ ├── capture.cpp │ ├── capture.h │ ├── codec.cpp │ ├── codec.h │ ├── control/ │ │ ├── control.hpp │ │ ├── control_chat.cpp │ │ ├── control_chat.hpp │ │ ├── control_chat_commands.cpp │ │ ├── control_chat_commands.hpp │ │ ├── control_flasks.cpp │ │ ├── control_flasks.hpp │ │ ├── control_gold.cpp │ │ ├── control_infobox.cpp │ │ ├── control_panel.cpp │ │ └── control_panel.hpp │ ├── controls/ │ │ ├── README.md │ │ ├── axis_direction.cpp │ │ ├── axis_direction.h │ │ ├── control_mode.cpp │ │ ├── control_mode.hpp │ │ ├── controller.cpp │ │ ├── controller.h │ │ ├── controller_buttons.cpp │ │ ├── controller_buttons.h │ │ ├── controller_motion.cpp │ │ ├── controller_motion.h │ │ ├── devices/ │ │ │ ├── game_controller.cpp │ │ │ ├── game_controller.h │ │ │ ├── joystick.cpp │ │ │ ├── joystick.h │ │ │ ├── kbcontroller.cpp │ │ │ └── kbcontroller.h │ │ ├── game_controls.cpp │ │ ├── game_controls.h │ │ ├── input.h │ │ ├── keymapper.cpp │ │ ├── keymapper.hpp │ │ ├── menu_controls.cpp │ │ ├── menu_controls.h │ │ ├── modifier_hints.cpp │ │ ├── modifier_hints.h │ │ ├── padmapper.cpp │ │ ├── padmapper.hpp │ │ ├── plrctrls.cpp │ │ ├── plrctrls.h │ │ ├── remap_keyboard.h │ │ └── touch/ │ │ ├── event_handlers.cpp │ │ ├── event_handlers.h │ │ ├── gamepad.cpp │ │ ├── gamepad.h │ │ ├── renderers.cpp │ │ └── renderers.h │ ├── cpp.hint │ ├── crawl.cpp │ ├── crawl.hpp │ ├── cursor.cpp │ ├── cursor.h │ ├── data/ │ │ ├── file.cpp │ │ ├── file.hpp │ │ ├── iterators.hpp │ │ ├── parser.cpp │ │ ├── parser.hpp │ │ ├── record_reader.cpp │ │ ├── record_reader.hpp │ │ ├── value_reader.cpp │ │ └── value_reader.hpp │ ├── dead.cpp │ ├── dead.h │ ├── debug.cpp │ ├── debug.h │ ├── diablo.cpp │ ├── diablo.h │ ├── diablo_msg.cpp │ ├── diablo_msg.hpp │ ├── discord/ │ │ ├── discord.cpp │ │ └── discord.h │ ├── doom.cpp │ ├── doom.h │ ├── dvlnet/ │ │ ├── abstract_net.cpp │ │ ├── abstract_net.h │ │ ├── base.cpp │ │ ├── base.h │ │ ├── base_protocol.h │ │ ├── cdwrap.cpp │ │ ├── cdwrap.h │ │ ├── frame_queue.cpp │ │ ├── frame_queue.h │ │ ├── leaveinfo.hpp │ │ ├── loopback.cpp │ │ ├── loopback.h │ │ ├── packet.cpp │ │ ├── packet.h │ │ ├── protocol_zt.cpp │ │ ├── protocol_zt.h │ │ ├── tcp_client.cpp │ │ ├── tcp_client.h │ │ ├── tcp_server.cpp │ │ ├── tcp_server.h │ │ ├── zerotier_lwip.cpp │ │ ├── zerotier_lwip.h │ │ ├── zerotier_native.cpp │ │ └── zerotier_native.h │ ├── effects.cpp │ ├── effects.h │ ├── effects_stubs.cpp │ ├── encrypt.cpp │ ├── encrypt.h │ ├── engine/ │ │ ├── actor_position.cpp │ │ ├── actor_position.hpp │ │ ├── animationinfo.cpp │ │ ├── animationinfo.h │ │ ├── assets.cpp │ │ ├── assets.hpp │ │ ├── backbuffer_state.cpp │ │ ├── backbuffer_state.hpp │ │ ├── circle.hpp │ │ ├── clx_sprite.hpp │ │ ├── demomode.cpp │ │ ├── demomode.h │ │ ├── direction.cpp │ │ ├── direction.hpp │ │ ├── displacement.hpp │ │ ├── dx.cpp │ │ ├── dx.h │ │ ├── events.cpp │ │ ├── events.hpp │ │ ├── lighting_defs.hpp │ │ ├── load_cel.cpp │ │ ├── load_cel.hpp │ │ ├── load_cl2.cpp │ │ ├── load_cl2.hpp │ │ ├── load_clx.cpp │ │ ├── load_clx.hpp │ │ ├── load_file.hpp │ │ ├── load_pcx.cpp │ │ ├── load_pcx.hpp │ │ ├── palette.cpp │ │ ├── palette.h │ │ ├── path.cpp │ │ ├── path.h │ │ ├── point.hpp │ │ ├── points_in_rectangle_range.hpp │ │ ├── random.cpp │ │ ├── random.hpp │ │ ├── rectangle.hpp │ │ ├── render/ │ │ │ ├── automap_render.cpp │ │ │ ├── automap_render.hpp │ │ │ ├── blit_impl.hpp │ │ │ ├── clx_render.cpp │ │ │ ├── clx_render.hpp │ │ │ ├── dun_render.cpp │ │ │ ├── dun_render.hpp │ │ │ ├── light_render.cpp │ │ │ ├── light_render.hpp │ │ │ ├── primitive_render.cpp │ │ │ ├── primitive_render.hpp │ │ │ ├── scrollrt.cpp │ │ │ ├── scrollrt.h │ │ │ ├── text_render.cpp │ │ │ └── text_render.hpp │ │ ├── size.hpp │ │ ├── sound.cpp │ │ ├── sound.h │ │ ├── sound_defs.hpp │ │ ├── sound_position.cpp │ │ ├── sound_position.hpp │ │ ├── sound_stubs.cpp │ │ ├── surface.cpp │ │ ├── surface.hpp │ │ ├── ticks.cpp │ │ ├── ticks.hpp │ │ ├── trn.cpp │ │ ├── trn.hpp │ │ └── world_tile.hpp │ ├── game_mode.cpp │ ├── game_mode.hpp │ ├── gamemenu.cpp │ ├── gamemenu.h │ ├── gmenu.cpp │ ├── gmenu.h │ ├── headless_mode.cpp │ ├── headless_mode.hpp │ ├── help.cpp │ ├── help.h │ ├── hwcursor.cpp │ ├── hwcursor.hpp │ ├── init.cpp │ ├── init.hpp │ ├── interfac.cpp │ ├── interfac.h │ ├── inv.cpp │ ├── inv.h │ ├── inv_iterators.hpp │ ├── items/ │ │ ├── validation.cpp │ │ └── validation.h │ ├── items.cpp │ ├── items.h │ ├── levels/ │ │ ├── crypt.cpp │ │ ├── crypt.h │ │ ├── drlg_l1.cpp │ │ ├── drlg_l1.h │ │ ├── drlg_l2.cpp │ │ ├── drlg_l2.h │ │ ├── drlg_l3.cpp │ │ ├── drlg_l3.h │ │ ├── drlg_l4.cpp │ │ ├── drlg_l4.h │ │ ├── dun_tile.hpp │ │ ├── gendung.cpp │ │ ├── gendung.h │ │ ├── gendung_defs.hpp │ │ ├── reencode_dun_cels.cpp │ │ ├── reencode_dun_cels.hpp │ │ ├── setmaps.cpp │ │ ├── setmaps.h │ │ ├── themes.cpp │ │ ├── themes.h │ │ ├── tile_properties.cpp │ │ ├── tile_properties.hpp │ │ ├── town.cpp │ │ ├── town.h │ │ ├── trigs.cpp │ │ └── trigs.h │ ├── lighting.cpp │ ├── lighting.h │ ├── loadsave.cpp │ ├── loadsave.h │ ├── lua/ │ │ ├── autocomplete.cpp │ │ ├── autocomplete.hpp │ │ ├── lua_event.cpp │ │ ├── lua_event.hpp │ │ ├── lua_global.cpp │ │ ├── lua_global.hpp │ │ ├── metadoc.hpp │ │ ├── modules/ │ │ │ ├── audio.cpp │ │ │ ├── audio.hpp │ │ │ ├── dev/ │ │ │ │ ├── display.cpp │ │ │ │ ├── display.hpp │ │ │ │ ├── items.cpp │ │ │ │ ├── items.hpp │ │ │ │ ├── level/ │ │ │ │ │ ├── map.cpp │ │ │ │ │ ├── map.hpp │ │ │ │ │ ├── warp.cpp │ │ │ │ │ └── warp.hpp │ │ │ │ ├── level.cpp │ │ │ │ ├── level.hpp │ │ │ │ ├── monsters.cpp │ │ │ │ ├── monsters.hpp │ │ │ │ ├── player/ │ │ │ │ │ ├── gold.cpp │ │ │ │ │ ├── gold.hpp │ │ │ │ │ ├── spells.cpp │ │ │ │ │ ├── spells.hpp │ │ │ │ │ ├── stats.cpp │ │ │ │ │ └── stats.hpp │ │ │ │ ├── player.cpp │ │ │ │ ├── player.hpp │ │ │ │ ├── quests.cpp │ │ │ │ ├── quests.hpp │ │ │ │ ├── search.cpp │ │ │ │ ├── search.hpp │ │ │ │ ├── towners.cpp │ │ │ │ └── towners.hpp │ │ │ ├── dev.cpp │ │ │ ├── dev.hpp │ │ │ ├── floatingnumbers.cpp │ │ │ ├── floatingnumbers.hpp │ │ │ ├── hellfire.cpp │ │ │ ├── hellfire.hpp │ │ │ ├── i18n.cpp │ │ │ ├── i18n.hpp │ │ │ ├── items.cpp │ │ │ ├── items.hpp │ │ │ ├── log.cpp │ │ │ ├── log.hpp │ │ │ ├── monsters.cpp │ │ │ ├── monsters.hpp │ │ │ ├── player.cpp │ │ │ ├── player.hpp │ │ │ ├── render.cpp │ │ │ ├── render.hpp │ │ │ ├── system.cpp │ │ │ ├── system.hpp │ │ │ ├── towners.cpp │ │ │ └── towners.hpp │ │ ├── repl.cpp │ │ └── repl.hpp │ ├── main.cpp │ ├── menu.cpp │ ├── menu.h │ ├── minitext.cpp │ ├── minitext.h │ ├── missiles.cpp │ ├── missiles.h │ ├── monster.cpp │ ├── monster.h │ ├── monsters/ │ │ ├── validation.cpp │ │ └── validation.hpp │ ├── movie.cpp │ ├── movie.h │ ├── mpq/ │ │ ├── mpq_common.cpp │ │ ├── mpq_common.hpp │ │ ├── mpq_reader.cpp │ │ ├── mpq_reader.hpp │ │ ├── mpq_sdl_rwops.cpp │ │ ├── mpq_sdl_rwops.hpp │ │ ├── mpq_writer.cpp │ │ └── mpq_writer.hpp │ ├── msg.cpp │ ├── msg.h │ ├── multi.cpp │ ├── multi.h │ ├── nthread.cpp │ ├── nthread.h │ ├── objects.cpp │ ├── objects.h │ ├── options.cpp │ ├── options.h │ ├── pack.cpp │ ├── pack.h │ ├── panels/ │ │ ├── charpanel.cpp │ │ ├── charpanel.hpp │ │ ├── console.cpp │ │ ├── console.hpp │ │ ├── info_box.cpp │ │ ├── info_box.hpp │ │ ├── mainpanel.cpp │ │ ├── mainpanel.hpp │ │ ├── partypanel.cpp │ │ ├── partypanel.hpp │ │ ├── spell_book.cpp │ │ ├── spell_book.hpp │ │ ├── spell_icons.cpp │ │ ├── spell_icons.hpp │ │ ├── spell_list.cpp │ │ ├── spell_list.hpp │ │ └── ui_panels.hpp │ ├── pfile.cpp │ ├── pfile.h │ ├── platform/ │ │ ├── android/ │ │ │ ├── CMakeLists.txt │ │ │ └── android.cpp │ │ ├── ctr/ │ │ │ ├── CMakeLists.txt │ │ │ ├── asio/ │ │ │ │ ├── include/ │ │ │ │ │ ├── errno.h │ │ │ │ │ ├── net/ │ │ │ │ │ │ └── if.h │ │ │ │ │ ├── netdb.h │ │ │ │ │ ├── netinet/ │ │ │ │ │ │ └── in.h │ │ │ │ │ └── sys/ │ │ │ │ │ ├── ioctl.h │ │ │ │ │ ├── poll.h │ │ │ │ │ ├── socket.h │ │ │ │ │ ├── uio.h │ │ │ │ │ └── un.h │ │ │ │ ├── net/ │ │ │ │ │ └── if.c │ │ │ │ └── sys/ │ │ │ │ ├── socket.c │ │ │ │ └── uio.c │ │ │ ├── cfgu_service.hpp │ │ │ ├── display.cpp │ │ │ ├── display.hpp │ │ │ ├── keyboard.cpp │ │ │ ├── keyboard.h │ │ │ ├── locale.cpp │ │ │ ├── locale.hpp │ │ │ ├── messagebox.cpp │ │ │ ├── random.cpp │ │ │ ├── random.hpp │ │ │ ├── sockets.cpp │ │ │ ├── sockets.hpp │ │ │ ├── system.cpp │ │ │ └── system.h │ │ ├── ios/ │ │ │ ├── ios_paths.h │ │ │ └── ios_paths.m │ │ ├── locale.cpp │ │ ├── locale.hpp │ │ ├── macos_sdl1/ │ │ │ └── SDL_filesystem.m │ │ ├── switch/ │ │ │ ├── CMakeLists.txt │ │ │ ├── asio/ │ │ │ │ ├── include/ │ │ │ │ │ ├── errno.h │ │ │ │ │ ├── net/ │ │ │ │ │ │ └── if.h │ │ │ │ │ ├── netinet/ │ │ │ │ │ │ └── in.h │ │ │ │ │ └── sys/ │ │ │ │ │ ├── uio.h │ │ │ │ │ └── un.h │ │ │ │ ├── net/ │ │ │ │ │ └── if.c │ │ │ │ ├── pause.c │ │ │ │ └── sys/ │ │ │ │ └── signal.c │ │ │ ├── docking.cpp │ │ │ ├── docking.h │ │ │ ├── keyboard.cpp │ │ │ ├── keyboard.h │ │ │ ├── network.cpp │ │ │ ├── network.h │ │ │ ├── random.cpp │ │ │ ├── random.hpp │ │ │ ├── romfs.cpp │ │ │ └── romfs.hpp │ │ └── vita/ │ │ ├── CMakeLists.txt │ │ ├── keyboard.cpp │ │ ├── keyboard.h │ │ ├── network.cpp │ │ ├── network.h │ │ ├── random.cpp │ │ ├── random.hpp │ │ ├── touch.cpp │ │ └── touch.h │ ├── player.cpp │ ├── player.h │ ├── plrmsg.cpp │ ├── plrmsg.h │ ├── portal.cpp │ ├── portal.h │ ├── portals/ │ │ ├── validation.cpp │ │ └── validation.hpp │ ├── qol/ │ │ ├── autopickup.cpp │ │ ├── autopickup.h │ │ ├── chatlog.cpp │ │ ├── chatlog.h │ │ ├── floatingnumbers.cpp │ │ ├── floatingnumbers.h │ │ ├── itemlabels.cpp │ │ ├── itemlabels.h │ │ ├── monhealthbar.cpp │ │ ├── monhealthbar.h │ │ ├── stash.cpp │ │ ├── stash.h │ │ ├── xpbar.cpp │ │ └── xpbar.h │ ├── quests/ │ │ ├── validation.cpp │ │ └── validation.hpp │ ├── quests.cpp │ ├── quests.h │ ├── quick_messages.cpp │ ├── quick_messages.hpp │ ├── restrict.cpp │ ├── restrict.h │ ├── sha.cpp │ ├── sha.h │ ├── sound_effect_enums.h │ ├── spells.cpp │ ├── spells.h │ ├── stores.cpp │ ├── stores.h │ ├── storm/ │ │ ├── storm_net.cpp │ │ ├── storm_net.hpp │ │ ├── storm_svid.cpp │ │ └── storm_svid.h │ ├── sync.cpp │ ├── sync.h │ ├── tables/ │ │ ├── itemdat.cpp │ │ ├── itemdat.h │ │ ├── misdat.cpp │ │ ├── misdat.h │ │ ├── monstdat.cpp │ │ ├── monstdat.h │ │ ├── objdat.cpp │ │ ├── objdat.h │ │ ├── playerdat.cpp │ │ ├── playerdat.hpp │ │ ├── spelldat.cpp │ │ ├── spelldat.h │ │ ├── textdat.cpp │ │ ├── textdat.h │ │ ├── townerdat.cpp │ │ └── townerdat.hpp │ ├── tmsg.cpp │ ├── tmsg.h │ ├── towners.cpp │ ├── towners.h │ ├── track.cpp │ ├── track.h │ ├── translation_dummy.cpp │ ├── utils/ │ │ ├── algorithm/ │ │ │ └── container.hpp │ │ ├── attributes.h │ │ ├── aulib.hpp │ │ ├── bitset2d.hpp │ │ ├── cel_to_clx.cpp │ │ ├── cel_to_clx.hpp │ │ ├── cl2_to_clx.cpp │ │ ├── cl2_to_clx.hpp │ │ ├── clx_decode.hpp │ │ ├── clx_encode.hpp │ │ ├── console.cpp │ │ ├── console.h │ │ ├── display.cpp │ │ ├── display.h │ │ ├── endian_read.hpp │ │ ├── endian_stream.hpp │ │ ├── endian_swap.hpp │ │ ├── endian_write.hpp │ │ ├── enum_traits.h │ │ ├── file_name_generator.hpp │ │ ├── file_util.cpp │ │ ├── file_util.h │ │ ├── format_int.cpp │ │ ├── format_int.hpp │ │ ├── hp_mana_units.hpp │ │ ├── ini.cpp │ │ ├── ini.hpp │ │ ├── intrusive_optional.hpp │ │ ├── is_of.hpp │ │ ├── language.cpp │ │ ├── language.h │ │ ├── log.hpp │ │ ├── logged_fstream.cpp │ │ ├── logged_fstream.hpp │ │ ├── math.h │ │ ├── palette_blending.cpp │ │ ├── palette_blending.hpp │ │ ├── palette_kd_tree.cpp │ │ ├── palette_kd_tree.hpp │ │ ├── parse_int.cpp │ │ ├── parse_int.hpp │ │ ├── paths.cpp │ │ ├── paths.h │ │ ├── pcx.hpp │ │ ├── pcx_to_clx.cpp │ │ ├── pcx_to_clx.hpp │ │ ├── png.h │ │ ├── pointer_value_union.hpp │ │ ├── push_aulib_decoder.cpp │ │ ├── push_aulib_decoder.h │ │ ├── screen_reader.cpp │ │ ├── screen_reader.hpp │ │ ├── sdl2_backports.h │ │ ├── sdl2_to_1_2_backports.cpp │ │ ├── sdl2_to_1_2_backports.h │ │ ├── sdl_bilinear_scale.cpp │ │ ├── sdl_bilinear_scale.hpp │ │ ├── sdl_compat.h │ │ ├── sdl_geometry.h │ │ ├── sdl_mutex.h │ │ ├── sdl_ptrs.h │ │ ├── sdl_thread.cpp │ │ ├── sdl_thread.h │ │ ├── sdl_wrap.h │ │ ├── soundsample.cpp │ │ ├── soundsample.h │ │ ├── static_vector.hpp │ │ ├── status_macros.hpp │ │ ├── stdcompat/ │ │ │ ├── filesystem.hpp │ │ │ └── shared_ptr_array.hpp │ │ ├── str_case.cpp │ │ ├── str_case.hpp │ │ ├── str_cat.cpp │ │ ├── str_cat.hpp │ │ ├── str_split.hpp │ │ ├── string_or_view.hpp │ │ ├── string_view_hash.hpp │ │ ├── stubs.h │ │ ├── surface_to_clx.cpp │ │ ├── surface_to_clx.hpp │ │ ├── surface_to_pcx.cpp │ │ ├── surface_to_pcx.hpp │ │ ├── surface_to_png.cpp │ │ ├── surface_to_png.hpp │ │ ├── timer.cpp │ │ ├── timer.hpp │ │ ├── ui_fwd.h │ │ ├── utf8.cpp │ │ └── utf8.hpp │ ├── vision.cpp │ └── vision.hpp ├── Translations/ │ ├── be.po │ ├── bg.po │ ├── cs.po │ ├── da.po │ ├── de.po │ ├── devilutionx.pot │ ├── el.po │ ├── es.po │ ├── et.po │ ├── fi.po │ ├── fr.po │ ├── glossary.md │ ├── hr.po │ ├── hu.po │ ├── it.po │ ├── ja.po │ ├── ko.po │ ├── pl.po │ ├── pt_BR.po │ ├── ro.po │ ├── ru.po │ ├── sv.po │ ├── tr.po │ ├── uk.po │ ├── zh_CN.po │ └── zh_TW.po ├── VERSION ├── android-project/ │ ├── .gitignore │ ├── app/ │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── org/ │ │ │ ├── diasurgical/ │ │ │ │ └── devilutionx/ │ │ │ │ ├── DataActivity.java │ │ │ │ ├── DevilutionXSDLActivity.java │ │ │ │ ├── ExternalFilesManager.java │ │ │ │ └── ImportActivity.java │ │ │ └── libsdl/ │ │ │ └── app/ │ │ │ ├── HIDDevice.java │ │ │ ├── HIDDeviceBLESteamController.java │ │ │ ├── HIDDeviceManager.java │ │ │ ├── HIDDeviceUSB.java │ │ │ ├── SDL.java │ │ │ ├── SDLActivity.java │ │ │ ├── SDLAudioManager.java │ │ │ ├── SDLControllerManager.java │ │ │ └── SDLSurface.java │ │ └── res/ │ │ ├── drawable/ │ │ │ └── gamepad.xml │ │ ├── layout/ │ │ │ └── activity_data.xml │ │ ├── mipmap-anydpi-v26/ │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ ├── values/ │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── themes.xml │ │ ├── values-be/ │ │ │ └── strings.xml │ │ ├── values-bg/ │ │ │ └── strings.xml │ │ ├── values-cs/ │ │ │ └── strings.xml │ │ ├── values-da/ │ │ │ └── strings.xml │ │ ├── values-de/ │ │ │ └── strings.xml │ │ ├── values-es/ │ │ │ └── strings.xml │ │ ├── values-fi/ │ │ │ └── strings.xml │ │ ├── values-fr/ │ │ │ └── strings.xml │ │ ├── values-hr/ │ │ │ └── strings.xml │ │ ├── values-hu/ │ │ │ └── strings.xml │ │ ├── values-it/ │ │ │ └── strings.xml │ │ ├── values-ko-rKR/ │ │ │ └── strings.xml │ │ ├── values-pl/ │ │ │ └── strings.xml │ │ ├── values-pt-rBR/ │ │ │ └── strings.xml │ │ ├── values-ro-rRO/ │ │ │ └── strings.xml │ │ ├── values-ru/ │ │ │ └── strings.xml │ │ ├── values-sv/ │ │ │ └── strings.xml │ │ ├── values-tr/ │ │ │ └── strings.xml │ │ ├── values-uk/ │ │ │ └── strings.xml │ │ ├── values-zh-rCN/ │ │ │ └── strings.xml │ │ ├── values-zh-rTW/ │ │ │ └── strings.xml │ │ └── xml/ │ │ ├── backup_descriptor.xml │ │ ├── backup_rules.xml │ │ └── shortcuts.xml │ ├── build.gradle │ ├── gradle/ │ │ └── wrapper/ │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradle.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle ├── assets/ │ ├── ASSETS_VERSION │ ├── arena/ │ │ ├── church.dun │ │ ├── circle_of_death.dun │ │ └── hell.dun │ ├── data/ │ │ ├── boxleftend.clx │ │ ├── boxmiddle.clx │ │ ├── boxrightend.clx │ │ ├── charbg.clx │ │ ├── dirtybuc.clx │ │ ├── dirtybucp.clx │ │ ├── health.clx │ │ ├── healthbox.clx │ │ ├── hintbox.clx │ │ ├── hintboxbackground.clx │ │ ├── hinticons.clx │ │ ├── inv/ │ │ │ └── objcurs-widths.txt │ │ ├── monstertags.clx │ │ ├── panel8buc.clx │ │ ├── panel8bucp.clx │ │ ├── resistance.clx │ │ ├── stash.clx │ │ ├── stashnavbtns.clx │ │ ├── talkbutton.clx │ │ └── xpbar.clx │ ├── fonts/ │ │ ├── 12-00.clx │ │ ├── 12-01.clx │ │ ├── 12-02.clx │ │ ├── 12-03.clx │ │ ├── 12-04.clx │ │ ├── 12-05.clx │ │ ├── 12-1f1.clx │ │ ├── 12-1f3.clx │ │ ├── 12-1f4.clx │ │ ├── 12-1f5.clx │ │ ├── 12-1f6.clx │ │ ├── 12-1f9.clx │ │ ├── 12-20.clx │ │ ├── 12-26.clx │ │ ├── 12-e0.clx │ │ ├── 22-00.clx │ │ ├── 22-01.clx │ │ ├── 22-02.clx │ │ ├── 22-03.clx │ │ ├── 22-04.clx │ │ ├── 22-05.clx │ │ ├── 22-20.clx │ │ ├── 24-00.clx │ │ ├── 24-01.clx │ │ ├── 24-02.clx │ │ ├── 24-03.clx │ │ ├── 24-04.clx │ │ ├── 24-05.clx │ │ ├── 24-1f1.clx │ │ ├── 24-1f3.clx │ │ ├── 24-1f4.clx │ │ ├── 24-1f5.clx │ │ ├── 24-1f6.clx │ │ ├── 24-1f9.clx │ │ ├── 24-20.clx │ │ ├── 24-26.clx │ │ ├── 24-e0.clx │ │ ├── 30-00.clx │ │ ├── 30-01.clx │ │ ├── 30-02.clx │ │ ├── 30-03.clx │ │ ├── 30-04.clx │ │ ├── 30-05.clx │ │ ├── 30-20.clx │ │ ├── 30-e0.clx │ │ ├── 42-00.clx │ │ ├── 42-01.clx │ │ ├── 42-02.clx │ │ ├── 42-03.clx │ │ ├── 42-04.clx │ │ ├── 42-05.clx │ │ ├── 42-20.clx │ │ ├── 46-00.clx │ │ ├── 46-01.clx │ │ ├── 46-02.clx │ │ ├── 46-03.clx │ │ ├── 46-04.clx │ │ ├── 46-05.clx │ │ ├── 46-20.clx │ │ ├── black.trn │ │ ├── blue.trn │ │ ├── buttonface.trn │ │ ├── buttonpushed.trn │ │ ├── gamedialogred.trn │ │ ├── gamedialogwhite.trn │ │ ├── gamedialogyellow.trn │ │ ├── goldui.trn │ │ ├── golduis.trn │ │ ├── grayui.trn │ │ ├── grayuis.trn │ │ ├── orange.trn │ │ ├── red.trn │ │ ├── tr/ │ │ │ ├── 12-00.clx │ │ │ ├── 24-00.clx │ │ │ ├── 30-00.clx │ │ │ ├── 42-00.clx │ │ │ └── 46-00.clx │ │ ├── white.trn │ │ ├── whitegold.trn │ │ └── yellow.trn │ ├── gendata/ │ │ ├── cut2w.clx │ │ ├── cut3w.clx │ │ ├── cut4w.clx │ │ ├── cutgatew.clx │ │ ├── cutl1dw.clx │ │ ├── cutportlw.clx │ │ ├── cutportrw.clx │ │ ├── cutstartw.clx │ │ ├── cutttw.clx │ │ └── pause.trn │ ├── levels/ │ │ ├── l1data/ │ │ │ └── sklkngt.dun │ │ ├── l2data/ │ │ │ └── bonechat.dun │ │ └── towndata/ │ │ ├── automap.amp │ │ └── automap.dun │ ├── lua/ │ │ ├── devilutionx/ │ │ │ └── events.lua │ │ ├── inspect.lua │ │ ├── mods/ │ │ │ ├── Floating Numbers - Damage/ │ │ │ │ └── init.lua │ │ │ ├── Floating Numbers - XP/ │ │ │ │ └── init.lua │ │ │ ├── adria_refills_mana/ │ │ │ │ └── init.lua │ │ │ └── clock/ │ │ │ └── init.lua │ │ └── repl_prelude.lua │ ├── lua_internal/ │ │ └── get_lua_function_signature.lua │ ├── plrgfx/ │ │ └── warrior/ │ │ └── whu/ │ │ ├── whufm.trn │ │ ├── whulm.trn │ │ └── whuqm.trn │ ├── txtdata/ │ │ ├── Experience.tsv │ │ ├── Readme.md │ │ ├── classes/ │ │ │ ├── README.md │ │ │ ├── barbarian/ │ │ │ │ ├── animations.tsv │ │ │ │ ├── attributes.tsv │ │ │ │ ├── sounds.tsv │ │ │ │ ├── sprites.tsv │ │ │ │ └── starting_loadout.tsv │ │ │ ├── bard/ │ │ │ │ ├── animations.tsv │ │ │ │ ├── attributes.tsv │ │ │ │ ├── sounds.tsv │ │ │ │ ├── sprites.tsv │ │ │ │ └── starting_loadout.tsv │ │ │ ├── classdat.tsv │ │ │ ├── monk/ │ │ │ │ ├── animations.tsv │ │ │ │ ├── attributes.tsv │ │ │ │ ├── sounds.tsv │ │ │ │ ├── sprites.tsv │ │ │ │ └── starting_loadout.tsv │ │ │ ├── rogue/ │ │ │ │ ├── animations.tsv │ │ │ │ ├── attributes.tsv │ │ │ │ ├── sounds.tsv │ │ │ │ ├── sprites.tsv │ │ │ │ └── starting_loadout.tsv │ │ │ ├── sorcerer/ │ │ │ │ ├── animations.tsv │ │ │ │ ├── attributes.tsv │ │ │ │ ├── sounds.tsv │ │ │ │ ├── sprites.tsv │ │ │ │ └── starting_loadout.tsv │ │ │ └── warrior/ │ │ │ ├── animations.tsv │ │ │ ├── attributes.tsv │ │ │ ├── sounds.tsv │ │ │ ├── sprites.tsv │ │ │ └── starting_loadout.tsv │ │ ├── items/ │ │ │ ├── item_prefixes.tsv │ │ │ ├── item_suffixes.tsv │ │ │ ├── itemdat.tsv │ │ │ └── unique_itemdat.tsv │ │ ├── missiles/ │ │ │ ├── misdat.tsv │ │ │ └── missile_sprites.tsv │ │ ├── monsters/ │ │ │ ├── monstdat.tsv │ │ │ └── unique_monstdat.tsv │ │ ├── objects/ │ │ │ └── objdat.tsv │ │ ├── quests/ │ │ │ └── questdat.tsv │ │ ├── sound/ │ │ │ ├── effects-unused.tsv │ │ │ └── effects.tsv │ │ ├── spells/ │ │ │ └── spelldat.tsv │ │ ├── text/ │ │ │ ├── textdat-unused.tsv │ │ │ └── textdat.tsv │ │ └── towners/ │ │ ├── quest_dialog.tsv │ │ └── towners.tsv │ └── ui_art/ │ ├── creditsw.clx │ ├── diablo.pal │ ├── dvl_but_sml.clx │ ├── dvl_lrpopup.clx │ ├── hellfire.pal │ └── mainmenuw.clx ├── codecov.yml ├── docs/ │ ├── BACKGROUND.md │ ├── CHANGELOG.md │ ├── CONTRIBUTING.md │ ├── TODO.md │ ├── benchmarking.md │ ├── building.md │ ├── debug.md │ ├── github-codespaces.md │ ├── installing.md │ ├── manual/ │ │ └── platforms/ │ │ ├── 3ds.md │ │ ├── gkd350h.md │ │ ├── retrofw.md │ │ ├── rg350.md │ │ ├── rg99.md │ │ ├── switch.md │ │ ├── vita.md │ │ ├── xbox-one.md │ │ └── xbox.md │ ├── privacy.md │ └── profiling-linux.md ├── doxygen.config ├── mods/ │ └── Hellfire/ │ ├── data/ │ │ └── inv/ │ │ └── objcurs2-widths.txt │ ├── lua/ │ │ └── mods/ │ │ └── Hellfire/ │ │ └── init.lua │ ├── nlevels/ │ │ ├── cutl5w.clx │ │ ├── cutl6w.clx │ │ └── l5data/ │ │ ├── cornerstone.dun │ │ └── uberroom.dun │ ├── txtdata/ │ │ ├── classes/ │ │ │ ├── classdat.tsv │ │ │ └── sorcerer/ │ │ │ └── starting_loadout.tsv │ │ ├── items/ │ │ │ ├── item_prefixes.tsv │ │ │ ├── item_suffixes.tsv │ │ │ └── unique_itemdat.tsv │ │ ├── missiles/ │ │ │ ├── misdat.tsv │ │ │ └── missile_sprites.tsv │ │ ├── monsters/ │ │ │ └── monstdat.tsv │ │ ├── sound/ │ │ │ ├── effects-unused.tsv │ │ │ └── effects.tsv │ │ ├── spells/ │ │ │ └── spelldat.tsv │ │ └── towners/ │ │ ├── quest_dialog.tsv │ │ └── towners.tsv │ └── ui_art/ │ ├── diablo.pal │ ├── hf_titlew.clx │ ├── mainmenuw.clx │ └── supportw.clx ├── test/ │ ├── .clang-format │ ├── Fixtures.cmake │ ├── animationinfo_test.cpp │ ├── app_fatal_for_testing.cpp │ ├── appfat_test.cpp │ ├── automap_test.cpp │ ├── clx_render_benchmark.cpp │ ├── codec_test.cpp │ ├── crawl_benchmark.cpp │ ├── crawl_test.cpp │ ├── cursor_test.cpp │ ├── data_file_test.cpp │ ├── dead_test.cpp │ ├── diablo_test.cpp │ ├── drlg_common_test.cpp │ ├── drlg_l1_test.cpp │ ├── drlg_l2_test.cpp │ ├── drlg_l3_test.cpp │ ├── drlg_l4_test.cpp │ ├── drlg_test.hpp │ ├── dun_render_benchmark.cpp │ ├── effects_test.cpp │ ├── file_util_test.cpp │ ├── fixtures/ │ │ ├── diablo/ │ │ │ ├── 1-2588.dun │ │ │ ├── 1-743271966.dun │ │ │ ├── 10-1630062353.dun │ │ │ ├── 10-879635115.dun │ │ │ ├── 11-384626536.dun │ │ │ ├── 12-2104541047.dun │ │ │ ├── 13-428074402.dun │ │ │ ├── 13-594689775.dun │ │ │ ├── 14-717625719.dun │ │ │ ├── 14-815743776.dun │ │ │ ├── 15-1256511996.dun │ │ │ ├── 15-1583642716-changed.dun │ │ │ ├── 15-1583642716.dun │ │ │ ├── 16-741281013.dun │ │ │ ├── 2-1383137027.dun │ │ │ ├── 3-844660068.dun │ │ │ ├── 4-609325643.dun │ │ │ ├── 4-902156014.dun │ │ │ ├── 5-1677631846.dun │ │ │ ├── 5-68685319.dun │ │ │ ├── 6-1824554527.dun │ │ │ ├── 6-2033265779.dun │ │ │ ├── 6-2034738122.dun │ │ │ ├── 7-1607627156.dun │ │ │ ├── 7-680552750.dun │ │ │ ├── 8-1999936419.dun │ │ │ └── 9-262005438.dun │ │ ├── hellfire/ │ │ │ ├── 1-401921334.dun │ │ │ ├── 1-536340718.dun │ │ │ ├── 17-19770182.dun │ │ │ ├── 18-1522546307.dun │ │ │ ├── 19-125121312.dun │ │ │ ├── 2-1180526547.dun │ │ │ ├── 2-128964898.dun │ │ │ ├── 20-1511478689.dun │ │ │ ├── 21-2122696790.dun │ │ │ ├── 22-1191662129.dun │ │ │ ├── 23-97055268.dun │ │ │ ├── 24-1324803725.dun │ │ │ ├── 3-1369955278.dun │ │ │ ├── 3-1512491184.dun │ │ │ ├── 3-1799396623.dun │ │ │ ├── 4-1190318991.dun │ │ │ └── 4-1924296259.dun │ │ ├── levels/ │ │ │ ├── l1data/ │ │ │ │ ├── banner1.dun │ │ │ │ ├── banner2.dun │ │ │ │ ├── rnd6.dun │ │ │ │ └── skngdo.dun │ │ │ ├── l2data/ │ │ │ │ ├── blind1.dun │ │ │ │ ├── blood1.dun │ │ │ │ ├── blood2.dun │ │ │ │ ├── bonestr1.dun │ │ │ │ └── bonestr2.dun │ │ │ ├── l3data/ │ │ │ │ └── anvil.dun │ │ │ └── l4data/ │ │ │ ├── diab1.dun │ │ │ ├── diab2a.dun │ │ │ ├── diab2b.dun │ │ │ ├── diab3a.dun │ │ │ ├── diab3b.dun │ │ │ ├── diab4a.dun │ │ │ ├── diab4b.dun │ │ │ ├── vile1.dun │ │ │ ├── warlord.dun │ │ │ └── warlord2.dun │ │ ├── light_render_benchmark/ │ │ │ └── dLight.dmp │ │ ├── memory_map/ │ │ │ ├── additionalMissiles.txt │ │ │ ├── game.txt │ │ │ ├── hero.txt │ │ │ ├── item.txt │ │ │ ├── itemPack.txt │ │ │ ├── level.txt │ │ │ ├── levelSeed.txt │ │ │ ├── lightning.txt │ │ │ ├── missile.txt │ │ │ ├── monster.txt │ │ │ ├── object.txt │ │ │ ├── player.txt │ │ │ ├── portal.txt │ │ │ └── quest.txt │ │ ├── timedemo/ │ │ │ └── WarriorLevel1to2/ │ │ │ ├── demo_0.dmo │ │ │ ├── demo_0_reference_spawn_0.sv │ │ │ └── spawn_0.sv │ │ └── txtdata/ │ │ ├── cr.tsv │ │ ├── crlf.tsv │ │ ├── empty.tsv │ │ ├── empty_with_utf8_bom.tsv │ │ ├── lf.tsv │ │ ├── lf_no_trail.tsv │ │ ├── sample.tsv │ │ └── utf8_bom.tsv │ ├── format_int_test.cpp │ ├── ini_test.cpp │ ├── inv_test.cpp │ ├── items_test.cpp │ ├── language_for_testing.cpp │ ├── light_render_benchmark.cpp │ ├── main.cpp │ ├── math_test.cpp │ ├── missiles_test.cpp │ ├── multi_logging_test.cpp │ ├── pack_test.cpp │ ├── palette_blending_benchmark.cpp │ ├── palette_blending_test.cpp │ ├── parse_int_test.cpp │ ├── path_benchmark.cpp │ ├── path_test.cpp │ ├── player_test.cpp │ ├── player_test.h │ ├── quests_test.cpp │ ├── random_test.cpp │ ├── rectangle_test.cpp │ ├── scrollrt_test.cpp │ ├── static_vector_test.cpp │ ├── stores_test.cpp │ ├── str_cat_test.cpp │ ├── text_render_integration_test.cpp │ ├── tile_properties_test.cpp │ ├── timedemo_test.cpp │ ├── townerdat_test.cpp │ ├── utf8_test.cpp │ ├── vendor_test.cpp │ ├── vision_test.cpp │ └── writehero_test.cpp ├── tools/ │ ├── Dockerfile.s390x │ ├── build_and_install_smpq.ps1 │ ├── build_and_install_smpq.sh │ ├── build_and_run_benchmark.py │ ├── build_pgo.sh │ ├── extract_translation_data.py │ ├── gdb/ │ │ ├── README.md │ │ └── devilution_gdb/ │ │ ├── __init__.py │ │ └── pretty_printers/ │ │ └── utils/ │ │ └── static_vector_pp.py │ ├── linux_reduced_cpu_variance_run.sh │ ├── lldb/ │ │ ├── README.md │ │ └── devilution_lldb/ │ │ ├── __init__.py │ │ └── pretty_printers/ │ │ └── utils/ │ │ └── static_vector_pp.py │ ├── make_src_dist.py │ ├── measure_timedemo_performance.py │ ├── run_big_endian_tests.sh │ ├── segmenter/ │ │ ├── README.md │ │ ├── requirements.txt │ │ ├── segment_all.py │ │ ├── segment_ja.py │ │ ├── segment_zh.py │ │ └── segmenter_lib.py │ ├── update_bundled_assets.sh │ ├── update_sdl_android_project.sh │ ├── update_translations_pot.py │ └── validate_translations.py ├── uwp-project/ │ ├── Package.appxmanifest │ ├── Package.appxmanifest.template │ ├── devilutionX_TemporaryKey.pfx │ ├── devilutionx.sln │ ├── devilutionx.vcxproj │ └── src/ │ └── SDL_winrt_main_NonXAML.cpp └── vcpkg.json