Copy disabled (too large)
Download .txt
Showing preview only (11,715K chars total). Download the full file to get everything.
Repository: Wohlstand/TheXTech
Branch: main
Commit: f98b95e99525
Files: 899
Total size: 10.9 MB
Directory structure:
gitextract_aj92w71a/
├── .appveyor.yml
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report.yml
│ │ └── compile-fail-report.yml
│ ├── ci-helper/
│ │ ├── .gitignore
│ │ ├── create-dmg.sh
│ │ ├── pack-game-macos.sh
│ │ ├── pack-game.sh
│ │ ├── support/
│ │ │ ├── dmg-license.py
│ │ │ ├── dmg-license3.py
│ │ │ └── template.applescript
│ │ ├── translate_patcher.py
│ │ ├── translate_sync_assets.sh
│ │ ├── translate_sync_to_stable.sh
│ │ └── translate_update.sh
│ └── workflows/
│ ├── 16m-ci.yml
│ ├── 3ds-ci.yml
│ ├── android-ci.yml
│ ├── android-fdroid-ci.yml
│ ├── blocksds-ci.yml
│ ├── emscripten.yml
│ ├── flatpak.yml
│ ├── homebrew-assets-ci.yml
│ ├── macos-ci.yml
│ ├── portmaster-ci.yml
│ ├── regression-testing-ci.yaml
│ ├── switch-ci.yml
│ ├── sync-langs.yml
│ ├── ubuntu-deb-ci.yml
│ ├── ubuntu-tar-ci.yml
│ ├── vita-ci.yml
│ ├── wii-ci.yml
│ ├── wiiu-ci.yml
│ └── windows-ci.yml
├── .gitignore
├── .gitmodules
├── CMakeLists.txt
├── CONTRIBUTING.md
├── LICENSE
├── PORTING.md
├── README.ESP.md
├── README.RUS.md
├── README.md
├── android-project/
│ ├── .gitignore
│ ├── build.gradle
│ ├── build_init.sh
│ ├── gradle/
│ │ └── wrapper/
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── settings.gradle
│ └── thextech/
│ ├── build.gradle
│ ├── icon/
│ │ ├── debug/
│ │ │ ├── mipmap-anydpi-v26/
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ └── values/
│ │ │ └── ic_launcher_background.xml
│ │ ├── devel/
│ │ │ ├── mipmap-anydpi-v26/
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ └── values/
│ │ │ └── ic_launcher_background.xml
│ │ └── main/
│ │ ├── mipmap-anydpi-v26/
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ └── values/
│ │ └── ic_launcher_background.xml
│ ├── proguard-rules.pro
│ └── src/
│ └── main/
│ ├── AndroidManifest.xml
│ ├── assets/
│ │ └── buttons/
│ │ └── Credits.txt
│ ├── generate_patternPath.sh
│ ├── java/
│ │ ├── javautil/
│ │ │ ├── FileUtils.java
│ │ │ └── README.md
│ │ ├── org/
│ │ │ └── libsdl/
│ │ │ └── app/
│ │ │ ├── HIDDevice.java
│ │ │ ├── HIDDeviceBLESteamController.java
│ │ │ ├── HIDDeviceManager.java
│ │ │ ├── HIDDeviceUSB.java
│ │ │ ├── SDL.java
│ │ │ ├── SDLActivity.java
│ │ │ ├── SDLAudioManager.java
│ │ │ ├── SDLControllerManager.java
│ │ │ └── SDLSurface.java
│ │ └── ru/
│ │ └── wohlsoft/
│ │ └── thextech/
│ │ ├── GameSettings.java
│ │ ├── IniFile.java
│ │ ├── Launcher.java
│ │ ├── OpenFileDialog.java
│ │ ├── UIUpdater.java
│ │ └── thextechActivity.java
│ └── res/
│ ├── layout/
│ │ ├── activity_launcher.xml
│ │ └── settings_activity.xml
│ ├── values/
│ │ ├── arrays.xml
│ │ ├── colors.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ ├── values-bg/
│ │ ├── arrays.xml
│ │ └── strings.xml
│ ├── values-de/
│ │ ├── arrays.xml
│ │ └── strings.xml
│ ├── values-es-rES/
│ │ ├── arrays.xml
│ │ └── strings.xml
│ ├── values-fr/
│ │ ├── arrays.xml
│ │ └── strings.xml
│ ├── values-hu/
│ │ ├── arrays.xml
│ │ └── strings.xml
│ ├── values-it/
│ │ ├── arrays.xml
│ │ └── strings.xml
│ ├── values-ja/
│ │ ├── arrays.xml
│ │ └── strings.xml
│ ├── values-ko/
│ │ ├── arrays.xml
│ │ └── strings.xml
│ ├── values-nb-rNO/
│ │ ├── arrays.xml
│ │ └── strings.xml
│ ├── values-pl/
│ │ ├── arrays.xml
│ │ └── strings.xml
│ ├── values-pt/
│ │ ├── arrays.xml
│ │ └── strings.xml
│ ├── values-pt-rBR/
│ │ ├── arrays.xml
│ │ └── strings.xml
│ ├── values-ru-rRU/
│ │ ├── arrays.xml
│ │ └── strings.xml
│ ├── values-ta/
│ │ ├── arrays.xml
│ │ └── strings.xml
│ ├── values-tr/
│ │ ├── arrays.xml
│ │ └── strings.xml
│ ├── values-uk/
│ │ ├── arrays.xml
│ │ └── strings.xml
│ ├── values-zh-rCN/
│ │ ├── arrays.xml
│ │ └── strings.xml
│ ├── values-zh-rTW/
│ │ ├── arrays.xml
│ │ └── strings.xml
│ └── xml/
│ └── root_preferences.xml
├── changelog.txt
├── cmake/
│ ├── TargetArch.cmake
│ ├── build_props.cmake
│ ├── ci_linux_gcc_toolchain_arm64.cmake
│ ├── ci_linux_gcc_toolchain_armhf.cmake
│ ├── ci_linux_gcc_toolchain_x32.cmake
│ ├── ci_windows_mingw_toolchain_x32.cmake
│ ├── ci_windows_mingw_toolchain_x64.cmake
│ ├── ci_windows_msvc_toolchain_arm64.cmake
│ ├── deploy.cmake
│ ├── git_info.cmake
│ ├── git_version.cmake
│ ├── git_version_update.cmake
│ ├── icon.desktop.in
│ ├── library_FreeImage.cmake
│ ├── library_FreeType.cmake
│ ├── library_HarfBuzz.cmake
│ ├── library_SDLMixerX.cmake
│ ├── library_discord_rpc.cmake
│ ├── library_glew.cmake
│ ├── library_luabind.cmake
│ ├── library_luajit.cmake
│ ├── library_syslibs.cmake
│ ├── library_zlib.cmake
│ ├── ndk-stl-config.cmake
│ ├── overlays-16m.ld
│ ├── package_switch.cmake
│ ├── package_vita.cmake
│ └── vita_buildprops.cmake
├── debian/
│ ├── changelog
│ ├── control
│ ├── copyright
│ └── rules
├── docs/
│ ├── README_3DS.md
│ ├── README_DSI.md
│ ├── README_SWITCH.md
│ ├── README_VITA.ESP.md
│ ├── README_VITA.RUS.md
│ ├── README_VITA.md
│ ├── README_WII.md
│ ├── README_WIIU.md
│ └── editor.ini
├── fastlane/
│ └── metadata/
│ └── android/
│ ├── en-GB/
│ │ ├── changelogs/
│ │ │ ├── 1030700.txt
│ │ │ └── 1030701.txt
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ └── title.txt
│ └── ru/
│ ├── full_description.txt
│ └── short_description.txt
├── lib/
│ ├── Allocator/
│ │ ├── Allocator.h
│ │ ├── LICENSE
│ │ ├── LinearAllocator.cpp
│ │ ├── LinearAllocator.h
│ │ ├── PoolAllocator.cpp
│ │ ├── PoolAllocator.h
│ │ ├── README.md
│ │ ├── StackLinkedList.h
│ │ ├── StackLinkedListImpl.h
│ │ ├── Utils.h
│ │ ├── linear-allocator.cmake
│ │ └── pool-allocator.cmake
│ ├── AppPath/
│ │ ├── app_path.cmake
│ │ ├── app_path.h
│ │ └── private/
│ │ ├── app_path.cpp
│ │ ├── app_path_16m.cpp
│ │ ├── app_path_3ds.cpp
│ │ ├── app_path_android.cpp
│ │ ├── app_path_emscripten.cpp
│ │ ├── app_path_macos.cpp
│ │ ├── app_path_macos_dirs.h
│ │ ├── app_path_macos_dirs.m
│ │ ├── app_path_old.cpp
│ │ ├── app_path_private.h
│ │ ├── app_path_skeleton.cpp
│ │ ├── app_path_switch.cpp
│ │ ├── app_path_unix.cpp
│ │ ├── app_path_vita.cpp
│ │ ├── app_path_wii.cpp
│ │ ├── app_path_wiiu.cpp
│ │ └── app_path_win32.cpp
│ ├── Archives/
│ │ ├── archives.h
│ │ ├── archives_dir.cpp
│ │ ├── archives_mount.cpp
│ │ ├── archives_priv.h
│ │ └── archives_rwops.cpp
│ ├── CrashHandler/
│ │ ├── StackWalker/
│ │ │ ├── StackWalker.cmake
│ │ │ ├── StackWalker.cpp
│ │ │ └── StackWalker.h
│ │ ├── backtrace.h.in
│ │ ├── crash_handler.cpp
│ │ └── crash_handler.h
│ ├── FixPointCS/
│ │ ├── Fixed64.h
│ │ └── FixedUtil.h
│ ├── Graphics/
│ │ ├── PGEString.h
│ │ ├── bitmask2rgba.c
│ │ ├── bitmask2rgba.cmake
│ │ ├── bitmask2rgba.h
│ │ ├── graphics_funcs.cpp
│ │ ├── graphics_funcs.h
│ │ ├── image_size.cpp
│ │ ├── image_size.h
│ │ ├── size.cpp
│ │ ├── size.h
│ │ └── xt_qoi.cpp
│ ├── Integrator/
│ │ ├── int_discorcrpc.cpp
│ │ ├── int_discorcrpc.h
│ │ ├── integrator.cpp
│ │ └── integrator.h
│ ├── InterProcess/
│ │ ├── editor_pipe.cpp
│ │ ├── editor_pipe.h
│ │ ├── intproc.cpp
│ │ └── intproc.h
│ ├── Logger/
│ │ ├── logger.cmake
│ │ ├── logger.h
│ │ ├── logger_level.h
│ │ └── private/
│ │ ├── logger.cpp
│ │ ├── logger_android.cpp
│ │ ├── logger_desktop.cpp
│ │ ├── logger_dummy.cpp
│ │ ├── logger_emscripten.cpp
│ │ ├── logger_min.cpp
│ │ ├── logger_private.h
│ │ ├── logger_sets.h
│ │ ├── logger_vita.cpp
│ │ └── logger_wiiu.cpp
│ ├── Utf8Main/
│ │ ├── utf8main.cmake
│ │ ├── utf8main.h
│ │ └── utf8main_win32.cpp
│ ├── Utils/
│ │ ├── Utils.cmake
│ │ ├── UtilsSDL.cmake
│ │ ├── dir_list_ci.cpp
│ │ ├── dir_list_ci.h
│ │ ├── elapsed_timer.cpp
│ │ ├── elapsed_timer.h
│ │ ├── files.cpp
│ │ ├── files.h
│ │ ├── files_ini.h
│ │ ├── openUrl.cmake
│ │ ├── open_url.cpp
│ │ ├── open_url.h
│ │ ├── strings.cpp
│ │ ├── strings.h
│ │ └── vptrlist.h
│ ├── fixed_point.cpp
│ ├── fixed_point.h
│ ├── floating_point.cpp
│ ├── floating_point.h
│ ├── fmt/
│ │ ├── CMakeLists.txt
│ │ ├── CONTRIBUTING.rst
│ │ ├── LICENSE.rst
│ │ ├── README.rst
│ │ ├── README.txt
│ │ ├── fmt.cmake
│ │ ├── fmt_container.h
│ │ ├── fmt_format.cpp
│ │ ├── fmt_format.h
│ │ ├── fmt_ostream.cpp
│ │ ├── fmt_ostream.h
│ │ ├── fmt_posix.cpp
│ │ ├── fmt_posix.h
│ │ ├── fmt_printf.cpp
│ │ ├── fmt_printf.h
│ │ ├── fmt_qformat.h
│ │ ├── fmt_string.h
│ │ ├── fmt_time.h
│ │ ├── orig/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── container.h
│ │ │ ├── format.cc
│ │ │ ├── format.h
│ │ │ ├── ostream.cc
│ │ │ ├── ostream.h
│ │ │ ├── posix.cc
│ │ │ ├── posix.h
│ │ │ ├── printf.cc
│ │ │ ├── printf.h
│ │ │ ├── string.h
│ │ │ └── time.h
│ │ └── update.sh
│ ├── fmt_format_ne.h
│ ├── fmt_impl.cpp
│ ├── fmt_time_ne.h
│ ├── forced_int.h
│ ├── gif.h
│ ├── gif_writer.h
│ ├── json/
│ │ ├── LICENSE.MIT
│ │ ├── README.md
│ │ ├── json.hpp
│ │ └── json_rwops_input.hpp
│ ├── md5/
│ │ ├── LICENSE
│ │ ├── README
│ │ ├── md5.cmake
│ │ ├── md5.cpp
│ │ ├── md5.h
│ │ ├── md5_loc.h
│ │ ├── md5tools.cpp
│ │ └── md5tools.hpp
│ ├── numeric_types.h
│ ├── pcg/
│ │ ├── LICENSE.txt
│ │ ├── README.md
│ │ ├── pcg_extras.hpp
│ │ ├── pcg_random.hpp
│ │ └── pcg_uint128.hpp
│ ├── pge_cpu_arch.h
│ ├── pge_delay.h
│ ├── pge_tonearest.h
│ ├── pge_video_rec/
│ │ ├── pge-video-rec.cmake
│ │ ├── pge_record_gif.cpp
│ │ ├── pge_record_vp8.cpp
│ │ ├── pge_video_rec.h
│ │ └── pge_video_sink.cpp
│ ├── sdl_proxy/
│ │ ├── 16m/
│ │ │ └── std_16m.cpp
│ │ ├── 3ds/
│ │ │ ├── 3ds-audio-lib.cpp
│ │ │ ├── 3ds-audio-lib.h
│ │ │ ├── mixer_3ds.cpp
│ │ │ └── std_3ds.cpp
│ │ ├── _trash/
│ │ │ ├── mixer_mixerx.cpp
│ │ │ ├── sdl_assert.h
│ │ │ ├── sdl_atomic.h
│ │ │ ├── sdl_head.h
│ │ │ ├── sdl_stdinc.h
│ │ │ └── sdl_timer.h
│ │ ├── base/
│ │ │ └── std_base.cpp
│ │ ├── mixer.h
│ │ ├── null/
│ │ │ ├── mixer_null.cpp
│ │ │ ├── sdl_null.h
│ │ │ └── std_null.cpp
│ │ ├── sdl_assert.h
│ │ ├── sdl_atomic.h
│ │ ├── sdl_audio.h
│ │ ├── sdl_common.h
│ │ ├── sdl_filesystem.h
│ │ ├── sdl_head.h
│ │ ├── sdl_proxy.cmake
│ │ ├── sdl_stdinc.h
│ │ ├── sdl_timer.h
│ │ ├── sdl_types.h
│ │ └── wii/
│ │ └── std_wii.cpp
│ ├── sdl_proxy_rwops/
│ │ ├── CMakeLists.txt
│ │ ├── include/
│ │ │ └── SDL2/
│ │ │ ├── SDL_rwops.h
│ │ │ └── _priv_rwops_funcs.h
│ │ ├── sdl_proxy_rwops.c
│ │ └── sdl_proxy_rwops_file.c
│ ├── sorting/
│ │ ├── pdqsort.h
│ │ └── tinysort.h
│ ├── tclap/
│ │ ├── Arg.h
│ │ ├── ArgContainer.h
│ │ ├── ArgException.h
│ │ ├── ArgGroup.h
│ │ ├── ArgTraits.h
│ │ ├── CmdLine.h
│ │ ├── CmdLineInterface.h
│ │ ├── CmdLineOutput.h
│ │ ├── Constraint.h
│ │ ├── DeferDelete.h
│ │ ├── DocBookOutput.h
│ │ ├── HelpVisitor.h
│ │ ├── IgnoreRestVisitor.h
│ │ ├── MultiArg.h
│ │ ├── MultiSwitchArg.h
│ │ ├── OptionalUnlabeledTracker.h
│ │ ├── README
│ │ ├── StandardTraits.h
│ │ ├── StdOutput.h
│ │ ├── SwitchArg.h
│ │ ├── UnlabeledMultiArg.h
│ │ ├── UnlabeledValueArg.h
│ │ ├── ValueArg.h
│ │ ├── ValuesConstraint.h
│ │ ├── VersionVisitor.h
│ │ ├── Visitor.h
│ │ ├── sstream.h
│ │ └── tclap.cmake
│ ├── util.cpp
│ └── util.h
├── pge_version.h
├── repo.sh
├── resources/
│ ├── PkgInfo
│ ├── _concepts/
│ │ ├── tv-banner-label.xcf
│ │ └── tv-banner.xcf
│ ├── _dev_scripts/
│ │ ├── snd_id_2_enum.sh
│ │ ├── snd_id_sed.sh
│ │ └── xserver.py
│ ├── emscripten/
│ │ ├── manifest.json.in
│ │ ├── shell_minimal.html
│ │ └── sw.js.in
│ ├── file_icons/
│ │ ├── file_lvl.icns
│ │ ├── file_lvlx.icns
│ │ ├── file_wld.icns
│ │ └── file_wldx.icns
│ ├── flatpak/
│ │ ├── appdata.xml.in
│ │ └── build.yml
│ ├── haiku/
│ │ ├── PackageInfo.in
│ │ ├── icon.hvif
│ │ └── icon.rdef
│ ├── icon/
│ │ ├── make_icns.sh
│ │ └── make_icns_linux.sh
│ ├── icon_dev_android/
│ │ └── thextech_512.xcf
│ ├── languages/
│ │ ├── assets_bg.json
│ │ ├── assets_de.json
│ │ ├── assets_en.json
│ │ ├── assets_es.json
│ │ ├── assets_fr.json
│ │ ├── assets_hu.json
│ │ ├── assets_it.json
│ │ ├── assets_ja.json
│ │ ├── assets_ko.json
│ │ ├── assets_nb-no.json
│ │ ├── assets_pl.json
│ │ ├── assets_pt-br.json
│ │ ├── assets_pt.json
│ │ ├── assets_ru.json
│ │ ├── assets_ta.json
│ │ ├── assets_tr.json
│ │ ├── assets_uk.json
│ │ ├── assets_zh-cn.json
│ │ ├── assets_zh-tw.json
│ │ ├── thextech_bg.json
│ │ ├── thextech_de.json
│ │ ├── thextech_en.json
│ │ ├── thextech_es.json
│ │ ├── thextech_fr.json
│ │ ├── thextech_hu.json
│ │ ├── thextech_it.json
│ │ ├── thextech_ja.json
│ │ ├── thextech_ko.json
│ │ ├── thextech_nb-no.json
│ │ ├── thextech_pl.json
│ │ ├── thextech_pt-br.json
│ │ ├── thextech_pt.json
│ │ ├── thextech_ru.json
│ │ ├── thextech_ta.json
│ │ ├── thextech_tr.json
│ │ ├── thextech_uk.json
│ │ ├── thextech_zh-cn.json
│ │ └── thextech_zh-tw.json
│ ├── switch/
│ │ ├── Important.txt
│ │ └── thextech-logo.xcf
│ ├── thextech.icns
│ ├── thextech.plist.in
│ ├── thextech.plist.tiger.in
│ ├── thextech.rc
│ ├── tiger/
│ │ ├── TheXTechRun.in
│ │ └── thextech.icns
│ ├── vita/
│ │ ├── frag.cgf
│ │ ├── sce_sys/
│ │ │ └── livearea/
│ │ │ └── contents/
│ │ │ └── template.xml.in
│ │ └── vert.cgv
│ ├── wii/
│ │ ├── icon.xcf
│ │ └── meta.xml.in
│ └── wiiu/
│ ├── icon.xcf
│ └── meta.xml.in
├── script/
│ ├── CMakeLists.txt
│ ├── include/
│ │ └── xtech_lua_main.h
│ └── src/
│ └── xtech_lua_main.cpp
├── src/
│ ├── blk_id.h
│ ├── blocks.cpp
│ ├── blocks.h
│ ├── capabilities.cpp
│ ├── capabilities.h
│ ├── change_res.cpp
│ ├── change_res.h
│ ├── cmd_line_setup.h
│ ├── collision.cpp
│ ├── collision.h
│ ├── compat.cpp
│ ├── compat.h
│ ├── config/
│ │ ├── config_base.cpp
│ │ ├── config_base.hpp
│ │ ├── config_hooks.cpp
│ │ ├── config_hooks.h
│ │ ├── config_impl.hpp
│ │ ├── config_legacy_compat.cpp
│ │ └── config_main.cpp
│ ├── config.h
│ ├── control/
│ │ ├── con_control.h
│ │ ├── controls.cpp
│ │ ├── controls_methods.h
│ │ ├── controls_strings.h
│ │ ├── duplicate.cpp
│ │ ├── duplicate.h
│ │ ├── input_16m.cpp
│ │ ├── input_16m.h
│ │ ├── input_3ds.cpp
│ │ ├── input_3ds.h
│ │ ├── input_wii.cpp
│ │ ├── input_wii.h
│ │ ├── input_wii_gc.cpp
│ │ ├── input_wii_gc.h
│ │ ├── joystick.cpp
│ │ ├── joystick.h
│ │ ├── keyboard.cpp
│ │ ├── keyboard.h
│ │ ├── touchscreen.cpp
│ │ ├── touchscreen.h
│ │ └── touchscreen.txt
│ ├── control_types.h
│ ├── controls.h
│ ├── custom.cpp
│ ├── custom.h
│ ├── draw_planes.h
│ ├── editor/
│ │ ├── editor.cpp
│ │ ├── editor_custom.cpp
│ │ ├── editor_custom.h
│ │ ├── editor_strings.cpp
│ │ ├── editor_strings.h
│ │ ├── magic_block.cpp
│ │ ├── magic_block.h
│ │ ├── new_editor.cpp
│ │ ├── new_editor.h
│ │ ├── write_common.cpp
│ │ ├── write_common.h
│ │ ├── write_level.cpp
│ │ ├── write_level.h
│ │ ├── write_world.cpp
│ │ └── write_world.h
│ ├── editor.h
│ ├── eff_id.h
│ ├── effect.cpp
│ ├── effect.h
│ ├── fontman/
│ │ ├── crop_info.h
│ │ ├── font_engine_base.h
│ │ ├── font_manager.cpp
│ │ ├── font_manager.h
│ │ ├── font_manager_private.cpp
│ │ ├── font_manager_private.h
│ │ ├── hardcoded_font.cpp
│ │ ├── hardcoded_font.h
│ │ ├── legacy_font.cpp
│ │ ├── legacy_font.h
│ │ ├── raster_font.cpp
│ │ ├── raster_font.h
│ │ ├── ttf_font.cpp
│ │ ├── ttf_font.h
│ │ └── utf8_helpers.cpp
│ ├── frame_timer.cpp
│ ├── frame_timer.h
│ ├── frm_main.cpp
│ ├── frm_main.h
│ ├── game_main.cpp
│ ├── game_main.h
│ ├── gfx.cpp
│ ├── gfx.h
│ ├── global_constants.h
│ ├── global_dirs.cpp
│ ├── global_dirs.h
│ ├── global_strings.cpp
│ ├── global_strings.h
│ ├── globals.cpp
│ ├── globals.h
│ ├── graphics/
│ │ ├── gfx_background.cpp
│ │ ├── gfx_camera.cpp
│ │ ├── gfx_camera.h
│ │ ├── gfx_credits.cpp
│ │ ├── gfx_draw_player.cpp
│ │ ├── gfx_editor.cpp
│ │ ├── gfx_enter_screen.cpp
│ │ ├── gfx_frame.cpp
│ │ ├── gfx_frame.h
│ │ ├── gfx_hud.cpp
│ │ ├── gfx_keyhole.cpp
│ │ ├── gfx_keyhole.h
│ │ ├── gfx_marquee.cpp
│ │ ├── gfx_marquee.h
│ │ ├── gfx_message.cpp
│ │ ├── gfx_print.cpp
│ │ ├── gfx_screen.cpp
│ │ ├── gfx_special_frames.cpp
│ │ ├── gfx_special_frames.h
│ │ ├── gfx_update.cpp
│ │ ├── gfx_update.h
│ │ ├── gfx_update2.cpp
│ │ ├── gfx_world.cpp
│ │ └── gfx_world.h
│ ├── graphics.cpp
│ ├── graphics.h
│ ├── layers.cpp
│ ├── layers.h
│ ├── load_gfx.cpp
│ ├── load_gfx.h
│ ├── location.h
│ ├── logic/
│ │ ├── object_graph.cpp
│ │ └── object_graph.h
│ ├── main/
│ │ ├── asset_pack.cpp
│ │ ├── asset_pack.h
│ │ ├── block_table.cpp
│ │ ├── block_table.h
│ │ ├── block_table.hpp
│ │ ├── cheat_code.cpp
│ │ ├── cheat_code.h
│ │ ├── client.cpp
│ │ ├── client.h
│ │ ├── client_methods.cpp
│ │ ├── client_methods.h
│ │ ├── game_globals.h
│ │ ├── game_info.cpp
│ │ ├── game_info.h
│ │ ├── game_loop.cpp
│ │ ├── game_loop_interrupt.h
│ │ ├── game_save.cpp
│ │ ├── game_strings.cpp
│ │ ├── game_strings.h
│ │ ├── gameplay_timer.cpp
│ │ ├── gameplay_timer.h
│ │ ├── hints.cpp
│ │ ├── hints.h
│ │ ├── level_file.cpp
│ │ ├── level_file.h
│ │ ├── level_medals.cpp
│ │ ├── level_medals.h
│ │ ├── level_save_info.cpp
│ │ ├── level_save_info.h
│ │ ├── main_config.cpp
│ │ ├── menu_controls.cpp
│ │ ├── menu_controls.h
│ │ ├── menu_loop.cpp
│ │ ├── menu_main.cpp
│ │ ├── menu_main.h
│ │ ├── outro_loop.cpp
│ │ ├── outro_loop.h
│ │ ├── player_frames.cpp
│ │ ├── record.cpp
│ │ ├── record.h
│ │ ├── screen_asset_pack.cpp
│ │ ├── screen_asset_pack.h
│ │ ├── screen_connect.cpp
│ │ ├── screen_connect.h
│ │ ├── screen_content.cpp
│ │ ├── screen_content.h
│ │ ├── screen_options.cpp
│ │ ├── screen_options.h
│ │ ├── screen_pause.cpp
│ │ ├── screen_pause.h
│ │ ├── screen_progress.cpp
│ │ ├── screen_progress.h
│ │ ├── screen_prompt.cpp
│ │ ├── screen_prompt.h
│ │ ├── screen_quickreconnect.cpp
│ │ ├── screen_quickreconnect.h
│ │ ├── screen_textentry.cpp
│ │ ├── screen_textentry.h
│ │ ├── setup_physics.cpp
│ │ ├── setup_vars.cpp
│ │ ├── speedrunner.cpp
│ │ ├── speedrunner.h
│ │ ├── translate/
│ │ │ ├── tr_level.h
│ │ │ ├── tr_script.h
│ │ │ ├── tr_title.h
│ │ │ └── tr_world.h
│ │ ├── translate.cpp
│ │ ├── translate.h
│ │ ├── translate_episode.cpp
│ │ ├── translate_episode.h
│ │ ├── trees.cpp
│ │ ├── trees.h
│ │ ├── world_file.cpp
│ │ ├── world_file.h
│ │ ├── world_globals.h
│ │ └── world_loop.cpp
│ ├── main.cpp
│ ├── message.cpp
│ ├── message.h
│ ├── npc/
│ │ ├── npc_activation.cpp
│ │ ├── npc_activation.h
│ │ ├── npc_bonus.cpp
│ │ ├── npc_cockpit_bits.h
│ │ ├── npc_frames.cpp
│ │ ├── npc_hit.cpp
│ │ ├── npc_kill.cpp
│ │ ├── npc_queues.cpp
│ │ ├── npc_queues.h
│ │ ├── npc_update/
│ │ │ ├── npc_block_logic.cpp
│ │ │ ├── npc_collide.cpp
│ │ │ ├── npc_effects.cpp
│ │ │ ├── npc_generator.cpp
│ │ │ ├── npc_movement_logic.cpp
│ │ │ ├── npc_special_maybe_held.cpp
│ │ │ ├── npc_update_priv.h
│ │ │ └── npc_walking_logic.cpp
│ │ ├── npc_update.cpp
│ │ ├── safe_set.hpp
│ │ ├── section_overlap.cpp
│ │ └── section_overlap.h
│ ├── npc.cpp
│ ├── npc.h
│ ├── npc_constant_traits.h
│ ├── npc_effect.h
│ ├── npc_id.h
│ ├── npc_special_data.h
│ ├── npc_traits.h
│ ├── phys_env.cpp
│ ├── phys_env.h
│ ├── phys_id.h
│ ├── pinched_info.h
│ ├── player/
│ │ ├── player_action_logic.cpp
│ │ ├── player_block_logic.cpp
│ │ ├── player_char5_logic.cpp
│ │ ├── player_death_logic.cpp
│ │ ├── player_effect.h
│ │ ├── player_fairy_logic.cpp
│ │ ├── player_movement_logic.cpp
│ │ ├── player_npc_logic.cpp
│ │ ├── player_pinched_logic.cpp
│ │ ├── player_screen_logic.cpp
│ │ ├── player_update.cpp
│ │ ├── player_update_priv.h
│ │ ├── player_vehicle_logic.cpp
│ │ ├── player_vine_logic.cpp
│ │ └── player_warp_logic.cpp
│ ├── player.cpp
│ ├── player.h
│ ├── pseudo_vb.h
│ ├── rand.cpp
│ ├── rand.h
│ ├── range_arr.hpp
│ ├── ref_type.h
│ ├── saved_layers.cpp
│ ├── saved_layers.h
│ ├── screen.cpp
│ ├── screen.h
│ ├── screen_fader.cpp
│ ├── screen_fader.h
│ ├── script/
│ │ ├── luau/
│ │ │ ├── test.cpp
│ │ │ └── test.h
│ │ ├── luna/
│ │ │ ├── autocode.cpp
│ │ │ ├── autocode.h
│ │ │ ├── autocode_manager.cpp
│ │ │ ├── autocode_manager.h
│ │ │ ├── csprite.cpp
│ │ │ ├── csprite.h
│ │ │ ├── hitbox.cpp
│ │ │ ├── hitbox.h
│ │ │ ├── levels/
│ │ │ │ ├── Docopoper-AbstractAssault.cpp
│ │ │ │ ├── Docopoper-AbstractAssault.h
│ │ │ │ ├── Docopoper-Calleoca.cpp
│ │ │ │ ├── Docopoper-Calleoca.h
│ │ │ │ ├── Docopoper-TheFloorisLava.cpp
│ │ │ │ ├── Docopoper-TheFloorisLava.h
│ │ │ │ ├── KilArmoryCode.cpp
│ │ │ │ ├── KilArmoryCode.h
│ │ │ │ ├── README.txt
│ │ │ │ ├── SAJewers-QraestoliaCaverns.cpp
│ │ │ │ ├── SAJewers-QraestoliaCaverns.h
│ │ │ │ ├── SAJewers-Snowboardin.cpp
│ │ │ │ ├── SAJewers-Snowboardin.h
│ │ │ │ ├── Talkhaus-Science_Final_Battle.cpp
│ │ │ │ └── Talkhaus-Science_Final_Battle.h
│ │ │ ├── luna.cpp
│ │ │ ├── luna.h
│ │ │ ├── lunablock.cpp
│ │ │ ├── lunablock.h
│ │ │ ├── lunacounter.cpp
│ │ │ ├── lunacounter.h
│ │ │ ├── lunacounter_record.cpp
│ │ │ ├── lunacounter_record.h
│ │ │ ├── lunacounter_util.h
│ │ │ ├── lunadefs.h
│ │ │ ├── lunaglobals.cpp
│ │ │ ├── lunaimgbox.cpp
│ │ │ ├── lunaimgbox.h
│ │ │ ├── lunainput.cpp
│ │ │ ├── lunainput.h
│ │ │ ├── lunalayer.cpp
│ │ │ ├── lunalayer.h
│ │ │ ├── lunalevel.cpp
│ │ │ ├── lunalevel.h
│ │ │ ├── lunalevels.cpp
│ │ │ ├── lunalevels.h
│ │ │ ├── lunamisc.cpp
│ │ │ ├── lunamisc.h
│ │ │ ├── lunanpc.cpp
│ │ │ ├── lunanpc.h
│ │ │ ├── lunaplayer.cpp
│ │ │ ├── lunaplayer.h
│ │ │ ├── lunarender.cpp
│ │ │ ├── lunarender.h
│ │ │ ├── lunaspriteman.cpp
│ │ │ ├── lunaspriteman.h
│ │ │ ├── lunavarbank.cpp
│ │ │ ├── lunavarbank.h
│ │ │ ├── mememu.cpp
│ │ │ ├── mememu.h
│ │ │ ├── renderop.h
│ │ │ ├── renderop_bitmap.cpp
│ │ │ ├── renderop_bitmap.h
│ │ │ ├── renderop_effect.cpp
│ │ │ ├── renderop_effect.h
│ │ │ ├── renderop_rect.cpp
│ │ │ ├── renderop_rect.h
│ │ │ ├── renderop_string.cpp
│ │ │ ├── renderop_string.h
│ │ │ ├── sprite_component.cpp
│ │ │ ├── sprite_component.h
│ │ │ ├── sprite_funcs.cpp
│ │ │ └── sprite_funcs.h
│ │ ├── msg_macros.cpp
│ │ ├── msg_macros.h
│ │ ├── msg_preprocessor.cpp
│ │ └── msg_preprocessor.h
│ ├── sorting.cpp
│ ├── sorting.h
│ ├── sound/
│ │ ├── fx/
│ │ │ ├── fx_common.hpp
│ │ │ ├── fx_format.h
│ │ │ ├── reverb.cpp
│ │ │ ├── reverb.h
│ │ │ ├── spc_echo.cpp
│ │ │ └── spc_echo.h
│ │ ├── snd-src/
│ │ │ ├── message.mid
│ │ │ └── sm-glass.mid
│ │ ├── sound_msgsnd.cpp
│ │ └── sound_msgsnd.h
│ ├── sound.cpp
│ ├── sound.h
│ ├── sound_spatial.cpp
│ ├── sound_thread.cpp
│ ├── sound_thread.h
│ ├── std_picture.cpp
│ ├── std_picture.h
│ ├── video.h
│ └── xt_color.h
├── test/
│ ├── CI-tests.py
│ ├── CMakeLists.txt
│ ├── common/
│ │ ├── catch_amalgamated.cpp
│ │ └── catch_amalgamated.hpp
│ ├── levels/
│ │ ├── Beech kick 1.lvl
│ │ ├── Beech kick 2.lvl
│ │ ├── Conveyor hell.lvl
│ │ ├── Exits test.lvl
│ │ ├── Fall test.lvl
│ │ ├── Fence climb Move.lvl
│ │ ├── Fence climb.lvl
│ │ ├── Player clip - min.lvl
│ │ ├── Player clip.lvl
│ │ ├── Player through block.lvl
│ │ ├── Pockey test.lvl
│ │ ├── Raft ride.lvl
│ │ ├── Shelf surf.lvl
│ │ ├── Shell on spring.lvl
│ │ ├── Skull raft 2.lvl
│ │ ├── Slope test.lvl
│ │ ├── Veggies shoot.lvl
│ │ ├── compat.ini
│ │ └── doors test.lvl
│ ├── test_msg_macro/
│ │ ├── CMakeLists.txt
│ │ └── test_msg_macro.cpp
│ └── worlds/
│ └── speedrun-unit-test/
│ ├── unit-test.lvlx
│ └── unit-test.wldx
├── utils/
│ ├── convertkit/
│ │ ├── GIFs2PNG/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── _resources/
│ │ │ │ ├── cat_gif2png/
│ │ │ │ │ └── make_icns.sh
│ │ │ │ ├── cat_gif2png.icns
│ │ │ │ ├── gifs2png.qrc
│ │ │ │ └── gifs2png.rc
│ │ │ ├── common_features/
│ │ │ │ ├── config_manager.cpp
│ │ │ │ └── config_manager.h
│ │ │ ├── gifs2png.cpp
│ │ │ ├── version.cmake
│ │ │ └── version.h
│ │ ├── assets-convert-homebrew.py
│ │ ├── audio_convert_16m.py
│ │ ├── convert_plr.py
│ │ ├── dist/
│ │ │ ├── gameinfo.ini
│ │ │ ├── gfx-convert-lin.sh
│ │ │ ├── gfx-convert-win.cmd
│ │ │ ├── music.ini
│ │ │ ├── sounds.ini
│ │ │ └── thextech.ini
│ │ ├── exe2ui/
│ │ │ ├── exe2ui.c
│ │ │ └── exe2ui_build.sh
│ │ ├── gfx-convert-16m.py
│ │ ├── gfx-convert-3ds.py
│ │ └── gfx-convert-wii.py
│ ├── submodule-update.sh
│ └── update-copyright.sh
├── version.cmake
└── version.h
================================================
FILE CONTENTS
================================================
================================================
FILE: .appveyor.yml
================================================
version: build-{build}
environment:
global:
PLATFORMTOOLSET: "v140"
CMAKEPREFIXPATH: "."
SEVENZIP: "C:\\Program Files\\7-Zip\\7z.exe"
WGET_BIN: "C:\\msys64\\usr\\bin\\wget.exe"
APPVEYOR_BUILD_WORKER_IMAGE: "Visual Studio 2015"
matrix:
- BUILD_TYPE: MinSizeRel
COMPILER: MinGW-w32
COMPILER_FAMILY: MinGW
GENERATOR: "MinGW Makefiles"
PLATFORM: Win32
CMAKEPREFIXPATH: "C:/Qt/Tools/mingw730_32"
TOOLCHAIN_BIN: "C:\\Qt\\Tools\\mingw730_32\\bin"
- BUILD_TYPE: MinSizeRel
COMPILER: MinGW-w64
COMPILER_FAMILY: MinGW
GENERATOR: "MinGW Makefiles"
PLATFORM: x64
CMAKEPREFIXPATH: "C:/Qt/Tools/mingw730_64"
TOOLCHAIN_BIN: "C:\\Qt\\Tools\\mingw730_64\\bin"
build_script:
- git submodule init
- git submodule update
- md b
- cd b
- if NOT [%TOOLCHAIN_BIN%]==[] set PATH=%TOOLCHAIN_BIN%;%PATH:C:\Program Files\Git\usr\bin;=%
- cmake -G "%GENERATOR%" -DCPACK_PACKAGE_FILE_NAME=thextech-%APPVEYOR_REPO_BRANCH%-%COMPILER%-%BUILD_TYPE%-%PLATFORM% -DCMAKE_BUILD_TYPE=%BUILD_TYPE% -DCMAKE_PREFIX_PATH=%CMAKEPREFIXPATH% ..
- cmake --build . --config %BUILD_TYPE% -- -j 2
- cpack ..
- appveyor PushArtifact "thextech-%APPVEYOR_REPO_BRANCH%-%COMPILER%-%BUILD_TYPE%-%PLATFORM%.7z"
deploy:
- provider: Environment
name: WohlnetFTP
#on_finish:
# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
================================================
FILE: .gitattributes
================================================
changelog.txt text eol=crlf
LICENSE text eol=crlf
README.md text eol=crlf
*.lvl text eol=crlf
*.wld text eol=crlf
*.lvlx text eol=lf
*.wldx text eol=lf
================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.yml
================================================
name: Bug Report
description: Create a report of the issue ocurred with the game during its use
labels: ["NEW-BUG"]
projects: ["TheXTech/1"]
body:
- type: textarea
id: description
attributes:
label: Describe the issue
description: A clear and concise description of what the bug.
validations:
required: true
- type: dropdown
id: bug_type
attributes:
label: A type of bug
description: |
How you would classify this bug by yourself?
* **Native bug** - The own bug of TheXTech itself that was never happen in the original SMBX.
* **Vanilla bug** - The bug of original SMBX that got being inherited by TheXTech during its initial creation.
* **Compatibility bug** - The deviation of behaviour from the original even with the strict compatibility mode (run the game with `--compat-level smbx13` command-line argument).
**Note:** The development team can classify this issue in a different way depending on the result of the analysis.
options:
- [Not specified]
- Native bug
- Vanilla bug
- Compatibility bug
validations:
required: true
- type: dropdown
id: frequency
attributes:
label: Does this issue happens always or randomly?
description: Is it possible to reproduce this issue easily, or it happens very rare?
options:
- Always happens
- Happens randomly, often
- Happens randomly, rare
- Happens very rare
validations:
required: true
- type: input
id: version
attributes:
label: Version
description: What version of TheXtech you are using? You can see it in the title of the window.
validations:
required: true
- type: input
id: version_hash
attributes:
label: Version Hash
description: If you run a **DEVEL** version, please also tell the hash tag (like `#1A2BC3E`) that can be found in the window title or in the main menu at the right-bottom of the screen.
validations:
required: false
- type: dropdown
id: os
attributes:
label: Platform
description: What the platform where you run the game?
options:
- [Not specified]
- Linux
- Windows
- macOS
- Android
- Haiku
- xBSD
- Web-browser (Emscripten)
- 3DS
- Wii
- Wii U
- Switch
- PS Vita
- Other (tell in the bug description)
validations:
required: true
- type: dropdown
id: cpu
attributes:
label: Processor architecture
description: |
Which architecture your processor where you ran the game have?
* If you run the **Windows**, you can easily check your architecture (x86 32-bit, 64-bit, or "64-bit processor ARM"), you can open the properties of the "This computer" / "My computer".
* On **Linux** / **xBSD**, you can open the terminal and run the `uname -m` command to get the exact processor architecture.
* On **macOS**, just can open the "About this Mac" to see the architecture in the description. If you see in description such as 32-bit "Power PC" (PPC G3, PPC G4) or PPC G5 which is 64-bit Power PC, **Intel Core Solo, Core Duo (not 2 Duo!)** which are 32-bit i386, **Intel Core 2 Duo, Quad-Core, i3/i5/i7** which are 64-bit x86_64, and the **Apple M1/M2/M3/etc.** which is an ARM64).
* On **Android** you might want to use program such as AIDA64 where you can open the "CPU" list, and find the "Instructions set" paragraph where you can see exact processor architecture that your device runs.
**Note:** Some platforms do have one single architecture only, for example:
* **PSP** has the MIPS32.
* **3DS** and **Vita** has the ARM32/ARMv7.
* **Wii** and **Wii U** has the PPC32.
* **Switch** has the ARM64/AARCH64.
options:
- [Not specified / I don't know]
- x86_64 / x64 (64-bit x86)
- i386 / x86_32 (32-bit x86)
- ARM64 / AARCH64 (64-bit ARM)
- ARM32 / ARMv7 (32-bit ARM)
- PPC64LE (64-bit Power PC with Little-Endian)
- PPC64 (64-bit Power PC with Big-Endian)
- PPC32 (32-bit Power PC with Big-Endian)
- MIPS64 (32-bit MIPS)
- MIPS32 (64-bit MIPS)
- RISC-V
- WebAssembly (Emscripten)
- Other (tell in the bug description)
validations:
required: false
- type: textarea
id: log_file
attributes:
label: Log file (if presented)
description: |
Please upload the log file that have the `TheXTech_log_YYYY_MM_DD_HH_mm_ss.txt` name which can be found in the `logs` sub-directory in the game's user directory.
validations:
required: false
- type: textarea
id: example_case
attributes:
label: Example Case
description: |
Post a link to the level where the issue occurs:
*levelname.lvl* from `[Episode name](https://link.to.episode/)`
Even better: If you make a dedicated test level and attach it to your GitHub Post (pack it as `.zip` first, and then drag it and drop into this text area).
validations:
required: false
- type: textarea
id: recording
attributes:
label: Recording
description: Embed or add a link to a Recording here. If it's an in-game issue, you can use TheXTech's built-in GIF Recorder (Press F11 or F10 on macOS). If it's a crash, use a Screen Capture program such as OBS or vokoscreen.
validations:
required: false
- type: textarea
id: vanilla_recording
attributes:
label: Vanilla Recording
description: Not required, but if you can run SMBX 1.3 (or [use our Research Version](https://github.com/Wohlstand/smbx-experiments/releases) that will work better on Linux under Wine and has the built-in GIF recorder using the F11 key), it would be appreciated if you made a recording of whether the bug occurs here as well.
validations:
required: false
- type: textarea
id: misc_info
attributes:
label: Additional context
description: Add any other context that could be useful for solving the problem here. If your problem is tied to your Operating System, add it at the beginning of the Title ("[Windows] Windows Issue").
validations:
required: false
================================================
FILE: .github/ISSUE_TEMPLATE/compile-fail-report.yml
================================================
name: Build/Compilation failure report
description: Create a report of the problems to compile the game from the source code
labels: ["NEW-BUG"]
projects: ["TheXTech/1"]
body:
- type: textarea
id: description
attributes:
label: Describe the issue
description: A clear and concise description of what the bug.
validations:
required: true
- type: input
id: version
attributes:
label: Version
description: What version of TheXtech you are using? Do you trying to build the stable version or the latest state of the GIT?
validations:
required: true
- type: input
id: version_hash
attributes:
label: Version Hash
description: If you build the game from the source source code clonned from the GIT, retrieve the hash of the commit where your current state is.
validations:
required: false
- type: dropdown
id: os_host
attributes:
label: Build platform
description: What the platform where you build the game?
options:
- [Not specified]
- Linux
- Windows
- macOS
- Android
- Haiku
- xBSD
- Other (tell in the bug description)
validations:
required: true
- type: dropdown
id: os_target
attributes:
label: Target platform
description: For which platform you trying to build the game?
options:
- [Not specified]
- Linux
- Windows
- macOS
- Android
- Haiku
- xBSD
- Web-browser (Emscripten)
- 3DS
- Wii
- Wii U
- Switch
- PS Vita
- Other (tell in the bug description)
validations:
required: true
- type: dropdown
id: cpu
attributes:
label: Target processor architecture
description: Which target architecture for which you attempted to build the game?
options:
- [Not specified]
- x86_64 / x64 (64-bit x86)
- i386 / x86_32 (32-bit x86)
- ARM64 / AARCH64 (64-bit ARM)
- ARM32 / ARMv7 (32-bit ARM)
- PPC64LE (64-bit Power PC with Little-Endian)
- PPC64 (64-bit Power PC with Big-Endian)
- PPC32 (32-bit Power PC with Big-Endian)
- MIPS64 (32-bit MIPS)
- MIPS32 (64-bit MIPS)
- RISC-V
- Other (tell in the bug description)
validations:
required: true
- type: dropdown
id: compiler
attributes:
label: Compiler name
description: What the compiler you used to build the game?
options:
- [Not specified]
- GCC
- Clang
- MSVC
- Intel-CC
- ARM-CC
- Other (tell in the bug description)
validations:
required: true
- type: textarea
id: build_log
attributes:
label: Build log
description: |
Please save your full build output log into a text file and upload it here.
validations:
required: false
- type: textarea
id: build_commands
attributes:
label: What commands you typed in the terminal or what you did in your IDE?
description: |
Explain step-by-step what you did before you got an error.
validations:
required: false
- type: textarea
id: misc_info
attributes:
label: Additional context
description: Add any other context that could be useful for solving the problem here. If your problem is tied to your Operating System, add it at the beginning of the Title ("[Windows] Windows Issue").
validations:
required: false
================================================
FILE: .github/ci-helper/.gitignore
================================================
.idea/
================================================
FILE: .github/ci-helper/create-dmg.sh
================================================
#!/bin/bash
# Create a read-only disk image of the conkmtents of a folder
set -e
function pure_version() {
echo '1.0.1.0'
}
function version() {
echo "create-dmg $(pure_version)"
}
function usage() {
version
echo "Creates a fancy DMG file."
echo "Usage: $(basename $0) options... image.dmg source_folder"
echo "All contents of source_folder will be copied into the disk image."
echo "Options:"
echo " --volname name"
echo " set volume name (displayed in the Finder sidebar and window title)"
echo " --volicon icon.icns"
echo " set volume icon"
echo " --background pic.png"
echo " set folder background image (provide png, gif, jpg)"
echo " --window-pos x y"
echo " set position the folder window"
echo " --window-size width height"
echo " set size of the folder window"
echo " --icon-size icon_size"
echo " set window icons size (up to 128)"
echo " --icon file_name x y"
echo " set position of the file's icon"
echo " --hide-extension file_name"
echo " hide the extension of file"
echo " --custom-icon file_name custom_icon_or_sample_file x y"
echo " set position and custom icon"
echo " --app-drop-link x y"
echo " make a drop link to Applications, at location x,y"
echo " --eula eula_file"
echo " attach a license file to the dmg"
echo " --no-internet-enable"
echo " disable automatic mount©"
echo " --subfolder"
echo " put all content of source folder into sub-folder"
echo " --version show tool version number"
echo " -h, --help display this help"
exit 0
}
WINX=10
WINY=60
WINW=500
WINH=350
ICON_SIZE=128
while test "${1:0:1}" = "-"; do
case $1 in
--volname)
VOLUME_NAME="$2"
shift
shift
;;
--volicon)
VOLUME_ICON_FILE="$2"
shift
shift
;;
--background)
BACKGROUND_FILE="$2"
BACKGROUND_FILE_NAME="$(basename $BACKGROUND_FILE)"
BACKGROUND_CLAUSE="set background picture of opts to file \".background:$BACKGROUND_FILE_NAME\""
shift
shift
;;
--icon-size)
ICON_SIZE="$2"
shift
shift
;;
--window-pos)
WINX=$2
WINY=$3
shift
shift
shift
;;
--window-size)
WINW=$2
WINH=$3
shift
shift
shift
;;
--icon)
POSITION_CLAUSE="${POSITION_CLAUSE}set position of item \"$2\" to {$3, $4}
"
shift
shift
shift
shift
;;
--hide-extension)
HIDING_CLAUSE="${HIDING_CLAUSE}set the extension hidden of item \"$2\" to true"
shift
shift
;;
--custom-icon)
shift
shift
shift
shift
shift
;;
-h | --help)
usage
;;
--version)
version
exit 0
;;
--pure-version)
pure_version
exit 0
;;
--app-drop-link)
APPLICATION_LINK=$2
APPLICATION_CLAUSE="set position of item \"Applications\" to {$2, $3}
"
shift
shift
shift
;;
--eula)
EULA_RSRC=$2
shift
shift
;;
--no-internet-enable)
NOINTERNET=1
shift
;;
--subfolder)
DOSUBFOLDER=1
shift
;;
-*)
echo "Unknown option $1. Run with --help for help."
exit 1
;;
esac
done
test -z "$2" && {
echo "Not enough arguments. Invoke with --help for help."
exit 1
}
DMG_PATH="$1"
DMG_DIRNAME="$(dirname "$DMG_PATH")"
DMG_DIR="$(
cd $DMG_DIRNAME >/dev/null
pwd
)"
DMG_NAME="$(basename "$DMG_PATH")"
DMG_TEMP_NAME="$DMG_DIR/rw.${DMG_NAME}"
SRC_FOLDER="$(
cd "$2" >/dev/null
pwd
)"
test -z "$VOLUME_NAME" && VOLUME_NAME="$(basename "$DMG_PATH" .dmg)"
AUX_PATH="$(dirname $0)/support"
test -d "$AUX_PATH" || {
echo "Cannot find support directory: $AUX_PATH"
exit 1
}
if [[ $DOSUBFOLDER == 1 ]]; then
SRC_FOLDER_TEMP="${SRC_FOLDER}_tmp/"
SRC_FOLDER_SF="${SRC_FOLDER}_tmp/${SRC_FOLDER##*/}"
echo "Generating subfolder $SRC_FOLDER_SF..."
mkdir -p "$SRC_FOLDER_SF"
cp -a "$SRC_FOLDER" "$SRC_FOLDER_SF"
SRC_FOLDER="$SRC_FOLDER_SF"
fi
if [ -f "$SRC_FOLDER/.DS_Store" ]; then
echo "Deleting any .DS_Store in source folder"
rm "$SRC_FOLDER/.DS_Store"
fi
# Create the image
echo "Creating disk image..."
test -f "${DMG_TEMP_NAME}" && rm -f "${DMG_TEMP_NAME}"
ACTUAL_SIZE=$(du -sm "$SRC_FOLDER" | sed -e 's/ .*//g')
DISK_IMAGE_SIZE=$(expr $ACTUAL_SIZE + 20)
hdiutil create -srcfolder "$SRC_FOLDER" -volname "${VOLUME_NAME}" -fs HFS+ -fsargs "-c c=64,a=16,e=16" -format UDRW -size ${DISK_IMAGE_SIZE}m "${DMG_TEMP_NAME}"
# mount it
echo "Mounting disk image..."
MOUNT_DIR="/Volumes/${VOLUME_NAME}"
# try unmount dmg if it was mounted previously (e.g. developer mounted dmg, installed app and forgot to unmount it)
echo "Unmounting disk image..."
DEV_NAME=$(hdiutil info | egrep '^/dev/' | sed 1q | awk '{print $1}')
test -d "${MOUNT_DIR}" && hdiutil detach "${DEV_NAME}"
echo "Mount directory: $MOUNT_DIR"
DEV_NAME=$(hdiutil attach -readwrite -noverify -noautoopen "${DMG_TEMP_NAME}" | egrep '^/dev/' | sed 1q | awk '{print $1}')
echo "Device name: $DEV_NAME"
if ! test -z "$BACKGROUND_FILE"; then
echo "Copying background file..."
test -d "$MOUNT_DIR/.background" || mkdir "$MOUNT_DIR/.background"
cp "$BACKGROUND_FILE" "$MOUNT_DIR/.background/$BACKGROUND_FILE_NAME"
fi
if ! test -z "$APPLICATION_LINK"; then
echo "making link to Applications dir"
echo $MOUNT_DIR
ln -s /Applications "$MOUNT_DIR/Applications"
fi
if ! test -z "$VOLUME_ICON_FILE"; then
echo "Copying volume icon file '$VOLUME_ICON_FILE'..."
cp "$VOLUME_ICON_FILE" "$MOUNT_DIR/.VolumeIcon.icns"
SetFile -c icnC "$MOUNT_DIR/.VolumeIcon.icns"
fi
# run applescript
APPLESCRIPT=$(mktemp -t createdmg.XXXXXXX)
cat "$AUX_PATH/template.applescript" | sed -e "s/WINX/$WINX/g" -e "s/WINY/$WINY/g" -e "s/WINW/$WINW/g" -e "s/WINH/$WINH/g" -e "s/BACKGROUND_CLAUSE/$BACKGROUND_CLAUSE/g" -e "s/ICON_SIZE/$ICON_SIZE/g" | perl -pe "s/POSITION_CLAUSE/$POSITION_CLAUSE/g" | perl -pe "s/APPLICATION_CLAUSE/$APPLICATION_CLAUSE/g" | perl -pe "s/HIDING_CLAUSE/$HIDING_CLAUSE/" >"$APPLESCRIPT"
echo "Running Applescript: /usr/bin/osascript \"${APPLESCRIPT}\" \"${VOLUME_NAME}\""
"/usr/bin/osascript" "${APPLESCRIPT}" "${VOLUME_NAME}" || true
echo "Done running the applescript..."
sleep 4
rm "$APPLESCRIPT"
# make sure it's not world writeable
echo "Fixing permissions..."
chmod -Rf go-w "${MOUNT_DIR}" &>/dev/null || true
echo "Done fixing permissions."
# make the top window open itself on mount:
echo "Blessing started"
bless --folder "${MOUNT_DIR}" --openfolder "${MOUNT_DIR}"
echo "Blessing finished"
if ! test -z "$VOLUME_ICON_FILE"; then
# tell the volume that it has a special file attribute
SetFile -a C "$MOUNT_DIR"
fi
# unmount
echo "Unmounting disk image..."
hdiutil detach "${DEV_NAME}"
# compress image
echo "Compressing disk image..."
hdiutil convert "${DMG_TEMP_NAME}" -format UDBZ -o "${DMG_DIR}/${DMG_NAME}"
rm -f "${DMG_TEMP_NAME}"
# adding EULA resources
if [ ! -z "${EULA_RSRC}" -a "${EULA_RSRC}" != "-null-" ]; then
echo "adding EULA resources"
"${AUX_PATH}/dmg-license3.py" "${DMG_DIR}/${DMG_NAME}" "${EULA_RSRC}"
fi
if [ ! -z "${NOINTERNET}" -a "${NOINTERNET}" == 1 ]; then
echo "not setting 'internet-enable' on the dmg"
else
hdiutil internet-enable -yes "${DMG_DIR}/${DMG_NAME}"
fi
# Removing temporary folder
if [[ $DOSUBFOLDER == 1 ]]; then
rm -Rf ${SRC_FOLDER_TEMP}
fi
echo "Disk image done"
exit 0
================================================
FILE: .github/ci-helper/pack-game-macos.sh
================================================
#!/bin/bash
# $1 assets; $2 icon $3 bundle name
ASSETS_NAME=$1
ICON_FILE=$2
BUNDLE_NAME=$3
ARCHIVE_NAME=$4
if [[ "${ASSETS_NAME}" != "none" ]]; then
echo "Preparing the application..."
cp -R TheXTech.app "tmpapp"
cp -R $ASSETS_NAME/* "tmpapp/Contents/Resources/assets/"
find tmpapp -name ".DS_Store" -delete
plutil -replace CFBundleName -string "$BUNDLE_NAME" "tmpapp/Contents/Info.plist"
plutil -replace CFBundleIconFile -string "$ICON_FILE" "tmpapp/Contents/Info.plist"
mv tmpapp "$BUNDLE_NAME.app"
fi
mkdir dmg-root
cp LICENSE "dmg-root/License.TheXTech.txt"
cp README.md "dmg-root/ReadMe.txt"
cp README.RUS.md "dmg-root/ReadMe.RUS.txt"
cp README.ESP.md "dmg-root/ReadMe.ESP.txt"
echo "== mv \"$BUNDLE_NAME.app\" dmg-root/"
mv "$BUNDLE_NAME.app" dmg-root/
if [[ "${ASSETS_NAME}" == "none" ]]; then
echo "Creating ZIP..."
cd dmg-root
zip -9 -r ../${ARCHIVE_NAME} *
cd ..
else
echo "Creating DMG..."
./.github/ci-helper/create-dmg.sh \
--volname "$BUNDLE_NAME" \
--window-size 800 600 \
--app-drop-link 450 320 \
--no-internet-enable \
"$ARCHIVE_NAME" \
"dmg-root/"
fi
echo "Cleaning up..."
rm -Rf dmg-root
printf "\n----------------------------------------------------------------\n\n"
================================================
FILE: .github/ci-helper/pack-game.sh
================================================
#!/bin/bash
RUNNER_OS=$1
SUBDIR_NAME=$2
EXECUTABLE_NAME=$3
ARCHIVE_NAME="$4"
ASSETS_NAME=$5
cd build
mkdir -p "package/${SUBDIR_NAME}"
cp ../changelog.txt "package/${SUBDIR_NAME}/"
cp ../LICENSE "package/${SUBDIR_NAME}/License.TheXTech.txt"
cp ../README.md "package/${SUBDIR_NAME}/ReadMe.txt"
cp ../README.RUS.md "package/${SUBDIR_NAME}/ReadMe.RUS.txt"
cp ../README.ESP.md "package/${SUBDIR_NAME}/ReadMe.ESP.txt"
if [[ "${RUNNER_OS}" == "Windows" ]]; then
cp output/bin/thextech.exe "package/${SUBDIR_NAME}/${EXECUTABLE_NAME}.exe"
cp output/bin/*.dll "package/${SUBDIR_NAME}/"
elif [[ "${RUNNER_OS}" == "Linux" ]]; then
cp output/bin/thextech "package/${SUBDIR_NAME}/${EXECUTABLE_NAME}"
fi
if [[ "${ASSETS_NAME}" != "none" ]]; then
cp -r ../${ASSETS_NAME}/* "package/${SUBDIR_NAME}/"
fi
cd package
if [[ "${RUNNER_OS}" == "Windows" ]]; then
7z a "${ARCHIVE_NAME}.7z" "${SUBDIR_NAME}"
else
tar -cvzf "${ARCHIVE_NAME}.tar.gz" "${SUBDIR_NAME}"
fi
rm -Rf "${SUBDIR_NAME}"
cd ../..
================================================
FILE: .github/ci-helper/support/dmg-license.py
================================================
#! /usr/bin/env python
"""
This script adds a license file to a DMG. Requires Xcode and a plain ascii text
license file.
Obviously only runs on a Mac.
Copyright (C) 2011 Jared Hobbs
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
"""
import os
import sys
import tempfile
import optparse
class Path(str):
def __enter__(self):
return self
def __exit__(self, in_type, value, traceback):
os.unlink(self)
def mktemp(dir=None, suffix=''):
(fd, filename) = tempfile.mkstemp(dir=dir, suffix=suffix)
os.close(fd)
return Path(filename)
def main(in_options, in_args):
dmg_file, license_file = in_args
with mktemp('.') as tmpFile:
with open(tmpFile, 'w') as f:
f.write("""data 'LPic' (5000) {
$"0002 0011 0003 0001 0000 0000 0002 0000"
$"0000 000E 0006 0001 0005 0007 0000 0007"
$"0008 0000 0047 0009 0000 0034 000A 0001"
$"0035 000B 0001 0020 000C 0000 0011 000D"
$"0000 005B 0004 0000 0033 000F 0001 000C"
$"0010 0000 000B 000E 0000"
};\n\n""")
with open(license_file, 'r') as l:
f.write('data \'TEXT\' (5002, "English") {\n')
for line in l:
if len(line) < 1000:
f.write(' "' + line.strip().replace('"', '\\"') +
'\\n"\n')
else:
for liner in line.split('.'):
f.write(' "' +
liner.strip().replace('"', '\\"') +
'. \\n"\n')
f.write('};\n\n')
f.write("""resource 'STR#' (5002, "English") {
{
"English",
"Agree",
"Disagree",
"Print",
"Save...",
"IMPORTANT - By clicking on the \\"Agree\\" button, you agree "
"to be bound by the terms of the License Agreement.",
"Software License Agreement",
"This text cannot be saved. This disk may be full or locked, or the "
"file may be locked.",
"Unable to print. Make sure you have selected a printer."
}
};""")
os.system('/usr/bin/hdiutil unflatten -quiet "%s"' % dmg_file)
os.system('%s "%s/"*.r %s -a -o "%s"' %
(in_options.rez, in_options.flat_carbon, tmpFile, dmg_file))
os.system('/usr/bin/hdiutil flatten -quiet "%s"' % dmg_file)
if in_options.compression is not None:
os.system('cp %s %s.temp.dmg' % (dmg_file, dmg_file))
os.remove(dmg_file)
if in_options.compression == "bz2":
os.system('hdiutil convert %s.temp.dmg -format UDBZ -o %s' %
(dmg_file, dmg_file))
elif in_options.compression == "gz":
os.system('hdiutil convert %s.temp.dmg -format ' % dmg_file +
'UDZO -imagekey zlib-devel=9 -o %s' % dmg_file)
os.remove('%s.temp.dmg' % dmg_file)
print "Successfully added license to '%s'" % dmg_file
if __name__ == '__main__':
parser = optparse.OptionParser()
parser.set_usage("""%prog <dmgFile> <licenseFile> [OPTIONS]
This program adds a software license agreement to a DMG file.
It requires Xcode and a plain ascii text <licenseFile>.
See --help for more details.""")
parser.add_option(
'--rez',
'-r',
action='store',
default='/Applications/Xcode.app/Contents/Developer/Tools/Rez',
help='The path to the Rez tool. Defaults to %default'
)
parser.add_option(
'--flat-carbon',
'-f',
action='store',
default='/Applications/Xcode.app/Contents/Developer/Platforms'
'/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk'
'/Developer/Headers/FlatCarbon',
help='The path to the FlatCarbon headers. Defaults to %default'
)
parser.add_option(
'--compression',
'-c',
action='store',
choices=['bz2', 'gz'],
default=None,
help='Optionally compress dmg using specified compression type. '
'Choices are bz2 and gz.'
)
options, args = parser.parse_args()
cond = len(args) != 2 or not os.path.exists(options.rez) \
or not os.path.exists(options.flat_carbon)
if cond:
parser.print_usage()
sys.exit(1)
main(options, args)
================================================
FILE: .github/ci-helper/support/dmg-license3.py
================================================
#! /usr/bin/env python3
"""
This script adds a license file to a DMG. Requires Xcode and a plain ascii text
license file.
Obviously only runs on a Mac.
Copyright (C) 2011 Jared Hobbs
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
"""
import os
import sys
import tempfile
import optparse
class Path(str):
def __enter__(self):
return self
def __exit__(self, in_type, value, traceback):
os.unlink(self)
def mktemp(dirname=None, suffix=''):
(fd, filename) = tempfile.mkstemp(dir=dirname, suffix=suffix)
os.close(fd)
return Path(filename)
def main(in_options, in_args):
dmg_file, license_file = in_args
with mktemp('.') as tmpFile:
with open(tmpFile, 'w') as f:
f.write("""data 'LPic' (5000) {
$"0002 0011 0003 0001 0000 0000 0002 0000"
$"0000 000E 0006 0001 0005 0007 0000 0007"
$"0008 0000 0047 0009 0000 0034 000A 0001"
$"0035 000B 0001 0020 000C 0000 0011 000D"
$"0000 005B 0004 0000 0033 000F 0001 000C"
$"0010 0000 000B 000E 0000"
};\n\n""")
with open(license_file, 'r') as l:
f.write('data \'TEXT\' (5002, "English") {\n')
for line in l:
if len(line) < 1000:
f.write(' "' + line.strip().replace('"', '\\"') +
'\\n"\n')
else:
for liner in line.split('.'):
f.write(' "' +
liner.strip().replace('"', '\\"') +
'. \\n"\n')
f.write('};\n\n')
f.write("""resource 'STR#' (5002, "English") {
{
"English",
"Agree",
"Disagree",
"Print",
"Save...",
"IMPORTANT - By clicking on the \\"Agree\\" button, you agree "
"to be bound by the terms of the License Agreement.",
"Software License Agreement",
"This text cannot be saved. This disk may be full or locked, or the "
"file may be locked.",
"Unable to print. Make sure you have selected a printer."
}
};""")
os.system('/usr/bin/hdiutil unflatten -quiet "%s"' % dmg_file)
os.system('%s "%s/"*.r %s -a -o "%s"' %
(in_options.rez, in_options.flat_carbon, tmpFile, dmg_file))
os.system('/usr/bin/hdiutil flatten -quiet "%s"' % dmg_file)
if in_options.compression is not None:
os.system('cp %s %s.temp.dmg' % (dmg_file, dmg_file))
os.remove(dmg_file)
if in_options.compression == "bz2":
os.system('hdiutil convert %s.temp.dmg -format UDBZ -o %s' %
(dmg_file, dmg_file))
elif in_options.compression == "gz":
os.system('hdiutil convert %s.temp.dmg -format ' % dmg_file +
'UDZO -imagekey zlib-devel=9 -o %s' % dmg_file)
os.remove('%s.temp.dmg' % dmg_file)
print("Successfully added license to '%s'" % dmg_file)
if __name__ == '__main__':
parser = optparse.OptionParser()
parser.set_usage("""%prog <dmgFile> <licenseFile> [OPTIONS]
This program adds a software license agreement to a DMG file.
It requires Xcode and a plain ascii text <licenseFile>.
See --help for more details.""")
parser.add_option(
'--rez',
'-r',
action='store',
default='/Applications/Xcode.app/Contents/Developer/Tools/Rez',
help='The path to the Rez tool. Defaults to %default'
)
parser.add_option(
'--flat-carbon',
'-f',
action='store',
default='/Applications/Xcode.app/Contents/Developer/Platforms'
'/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk'
'/Developer/Headers/FlatCarbon',
help='The path to the FlatCarbon headers. Defaults to %default'
)
parser.add_option(
'--compression',
'-c',
action='store',
choices=['bz2', 'gz'],
default=None,
help='Optionally compress dmg using specified compression type. '
'Choices are bz2 and gz.'
)
options, args = parser.parse_args()
cond = len(args) != 2 or not os.path.exists(options.rez) \
or not os.path.exists(options.flat_carbon)
if cond:
parser.print_usage()
sys.exit(1)
main(options, args)
================================================
FILE: .github/ci-helper/support/template.applescript
================================================
on run (volumeName)
tell application "Finder"
tell disk (volumeName as string)
open
set theXOrigin to WINX
set theYOrigin to WINY
set theWidth to WINW
set theHeight to WINH
set theBottomRightX to (theXOrigin + theWidth)
set theBottomRightY to (theYOrigin + theHeight)
set dsStore to "\"" & "/Volumes/" & volumeName & "/" & ".DS_STORE\""
tell container window
set current view to icon view
set toolbar visible to false
set statusbar visible to false
set the bounds to {theXOrigin, theYOrigin, theBottomRightX, theBottomRightY}
set statusbar visible to false
end tell
set opts to the icon view options of container window
tell opts
set icon size to ICON_SIZE
set arrangement to not arranged
end tell
BACKGROUND_CLAUSE
-- Positioning
POSITION_CLAUSE
-- Hiding
HIDING_CLAUSE
-- Application Link Clause
APPLICATION_CLAUSE
close
open
update without registering applications
-- Force saving of the size
delay 1
tell container window
set statusbar visible to false
set the bounds to {theXOrigin, theYOrigin, theBottomRightX - 10, theBottomRightY - 10}
end tell
update without registering applications
end tell
delay 1
tell disk (volumeName as string)
tell container window
set statusbar visible to false
set the bounds to {theXOrigin, theYOrigin, theBottomRightX, theBottomRightY}
end tell
update without registering applications
end tell
--give the finder some time to write the .DS_Store file
delay 3
set waitTime to 0
set ejectMe to false
repeat while ejectMe is false
delay 1
set waitTime to waitTime + 1
if (do shell script "[ -f " & dsStore & " ]; echo $?") = "0" then set ejectMe to true
end repeat
log "waited " & waitTime & " seconds for .DS_STORE to be created."
end tell
end run
================================================
FILE: .github/ci-helper/translate_patcher.py
================================================
#!/usr/bin/python3
import json
import sys
import optparse
def merge_jsons(my_dict, output):
for k, v in my_dict.items():
if isinstance(v, dict):
if k not in output:
output[k] = dict()
merge_jsons(v, output[k])
continue
output[k] = v
def main(in_args):
in_file = in_args[0]
patch_file = in_args[1]
out_file = in_args[2]
with open(in_file, encoding='utf-8') as first_file:
json_out = json.load(first_file)
with open(patch_file, encoding='utf-8') as second_file:
json_in = json.load(second_file)
print("-- Patching translation file: %s\n"
"-- By the patch file: %s\n"
"-- Writing result into the %s" % (in_file, patch_file, out_file))
merge_jsons(json_in, json_out)
with open(out_file, 'w', encoding='utf-8') as f:
json.dump(json_out, f, ensure_ascii=False, indent=4)
print("Completed!")
if __name__ == '__main__':
parser = optparse.OptionParser()
parser.set_usage("""%prog <in file to patch> <patch file> <output file>.
See --help for more details.""")
options, args = parser.parse_args()
cond = len(args) != 3
if cond:
parser.print_usage()
sys.exit(1)
main(args)
================================================
FILE: .github/ci-helper/translate_sync_assets.sh
================================================
#!/bin/bash
OLD=$PWD
GIT_ROOT=$PWD/build-git
WORKDIR="$PWD/.github/ci-helper"
mkdir -p build-git
function update_repo()
{
q=$1
branch=$2
if [[ "$branch" != "" ]]; then
branch_command="-b $branch"
branch_display="[Branch $branch] "
fi
echo "============================================================="
echo "================ $q $branch_display================"
echo "============================================================="
cd "${GIT_ROOT}"
git clone "$q" --depth 1 $branch_command repo
cd "${WORKDIR}"
bash translate_update.sh "${GIT_ROOT}/repo"
cd "${GIT_ROOT}/repo"
if [[ ! -z $(git status -s) ]]; then
echo "-- Found updated languages, commiting..."
git add --all
git commit --author="${GIT_AUTHOR}" -m "Synchronized translations"
git push
else
echo "-- No updates found, skipping..."
fi
cd ..
rm -Rf repo
printf "=============================================================\n\n\n"
}
# FIXME: Replace this hardcoded list with a server-side one to don't re-commit this list
# every time
for q in \
"git@gitea.wohlsoft.ru:Games-for-TheXTech/thextech-smbx.git" \
"git@gitea.wohlsoft.ru:Games-for-TheXTech/thextech-adventures-of-demo.git" \
"git@gitea.wohlsoft.ru:Games-for-TheXTech/thextech-convert-kit.git" \
"git@gitea.wohlsoft.ru:Games-for-TheXTech/thextech-a2xt-analog-funk.git" \
"git@gitea.wohlsoft.ru:Games-for-TheXTech/thextech-a2xt-prelude-to-the-stupid.git" \
"git@gitea.wohlsoft.ru:Games-for-TheXTech/thextech-lowser-s-conquest-beta.git" \
"git@gitea.wohlsoft.ru:Games-for-TheXTech/thextech-sarasaland-adventure-v1-2.git" \
"git@gitea.wohlsoft.ru:Games-for-TheXTech/thextech-sarasaland-adventure-2.git" \
"git@gitea.wohlsoft.ru:Games-for-TheXTech/thextech-sarasaland-adventure-v4-0.git" \
"git@gitea.wohlsoft.ru:Games-for-TheXTech/thextech-smbx-nes.git" \
"git@gitea.wohlsoft.ru:Games-for-TheXTech/thextech-smbx-nostalgic.git" \
"git@gitea.wohlsoft.ru:Games-for-TheXTech/thextech-super-talking-time-bros-1n2-v1-5.git" \
;
do
update_repo "$q"
done
# Nostalgic Paradise needs another branch
update_repo git@gitea.wohlsoft.ru:Games-for-TheXTech/nostalgic-paradise.git development
cd "${OLD}"
================================================
FILE: .github/ci-helper/translate_sync_to_stable.sh
================================================
#!/bin/bash
OLD=$PWD
GIT_ROOT=$PWD/build-git
WORKDIR="$PWD/.github/ci-helper"
STABLE_BRANCH=stable-1.3.7.x
if [[ -z "$GITHUB_TOKEN" ]]; then
echo 'Missing input "github_token: $GITHUB_TOKEN".';
exit 1;
fi
git clone https://github.com/TheXTech/TheXTech.git --depth 1 -b ${STABLE_BRANCH} build-git
# General engine translations
cp -av resources/languages/* build-git/resources/languages/
# Android launcher translations
cd android-project/thextech/src/main/res
for q in values values-*; do
if [[ -f "$q/strings.xml" ]]; then
cp -v "$q/strings.xml" "${GIT_ROOT}/android-project/thextech/src/main/res/${q}/strings.xml"
fi
if [[ -f "$q/arrays.xml" ]]; then
cp -v "$q/arrays.xml" "${GIT_ROOT}/android-project/thextech/src/main/res/${q}/arrays.xml"
fi
done
cd "$OLD"
# Commit all changes that was done
cd build-git
if [[ ! -z $(git status -s) ]]; then
echo "-- Found updated languages, commiting..."
git add --all
git commit --author="${GIT_AUTHOR}" -m "Synchronized translations with mainstream branch"
remote_repo="https://${GITHUB_ACTOR}:${GITHUB_TOKEN}@github.com/TheXTech/TheXTech.git"
git push "${remote_repo}" ${STABLE_BRANCH}
else
echo "-- No updates found, skipping..."
fi
cd ..
rm -Rf build-git
cd "${OLD}"
exit 0
================================================
FILE: .github/ci-helper/translate_update.sh
================================================
#!/bin/bash
OLD_DIR=~+
ASSETS_ROOT=$1
LANGS_IN="$PWD/../../resources/languages"
LANGS_PATCH=$1/languages/patches
LANGS_OUT=$1/languages
# Update only existing files at the target (Don't copy new files, they should be placed manually to add them for the autosync)
cd "${LANGS_OUT}"
function update_tr_file()
{
q="$1"
if [[ ! -f "${LANGS_PATCH}/$q" ]]; then
# If no patch file exists, just copy
printf "==== COPY: %s ====\n" $q
cp -v "${LANGS_IN}/$q" "${LANGS_OUT}/$q"
else
# Otherwise, apply the patch
printf "==== PATCH: %s ====\n" $q
echo python3 "${OLD_DIR}/translate_patcher.py" "${LANGS_IN}/$q" "${LANGS_PATCH}/$q" "${LANGS_OUT}/$q"
python3 "${OLD_DIR}/translate_patcher.py" "${LANGS_IN}/$q" "${LANGS_PATCH}/$q" "${LANGS_OUT}/$q"
fi
printf "\n"
}
echo "---------------------------------------------"
for q in thextech_*.json; do
update_tr_file "$q"
done
for q in assets_*.json; do
update_tr_file "$q"
done
echo "---------------------------------------------"
cd "$OLD_DIR"
================================================
FILE: .github/workflows/16m-ci.yml
================================================
name: DSi CI
on:
push:
branches:
- main
- versus-ci-homebrew
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: "${{ matrix.config.name }} | ${{ matrix.config.build_type }}"
runs-on: ubuntu-latest
container: ghcr.io/thextech/wohlnet-ci-ubuntu2404-dkp-vita:latest
env:
DEVKITPRO: /opt/devkitpro
DEVKITARM: /opt/devkitpro/devkitARM
strategy:
fail-fast: false
matrix:
config:
- {
name: "DSi build",
extra_options: "-DCMAKE_TOOLCHAIN_FILE=$DEVKITPRO/cmake/NDS.cmake -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON",
deps_cmdline: "echo 'DevkitPro SDK is already pre-installed'",
generator: "Ninja",
build_type: "RelWithDebInfo",
executable_name: "thextech",
subdir_name: "thextech-dsi",
upload_directory: "www/dsi/"
}
steps:
- name: Check for the upload support
id: upload-check
shell: bash
run: |
if [[ "${{ secrets.builds_login }}" != '' && \
"${{ secrets.builds_password }}" != '' && \
"${{ secrets.builds_host }}" != '' ]]; then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
- name: Install Dependencies
shell: bash
run: |
if [[ ! -z "${{ matrix.config.deps_cmdline }}" ]]; then
eval ${{ matrix.config.deps_cmdline }}
fi
cmake --version
- uses: TheXTech/checkout@v0.1
- uses: TheXTech/branch-name@v0.1
- name: Pull submodules
shell: bash
run: |
git submodule update --init --recursive
- name: Configure
shell: bash
run: |
cmake -B build -G "${{ matrix.config.generator }}" -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} ${{ matrix.config.extra_options }} .
- name: Build
shell: bash
run: |
cmake --build build --target all -j4
- name: Check codesize and RAM usage
if: success() && runner.os == 'Linux'
shell: bash
run: |
size build/output/bin/thextech.elf
- name: Create Package
if: success()
shell: bash
run: |
cd build
mkdir package
mkdir "package/${{ matrix.config.subdir_name }}"
cp ../changelog.txt "package/${{ matrix.config.subdir_name }}/"
cp ../LICENSE "package/${{ matrix.config.subdir_name }}/License.TheXTech.txt"
cat ../docs/README_DSI.md ../README.md >> "package/${{ matrix.config.subdir_name }}/README.md"
cp thextech.nds "package/${{ matrix.config.subdir_name }}/"
cd package
zip -9 -r "thextech-calico-${BRANCH_NAME}.zip" "${{ matrix.config.subdir_name }}"
rm -Rf "${{ matrix.config.subdir_name }}"
cd ../..
- name: Upload artifact
if: success()
uses: actions/upload-artifact@v4
continue-on-error: true
with:
path: build/package/*.zip
name: ${{ matrix.config.name }} ${{ matrix.config.build_type }}
- name: Deploy to builds.wohlsoft.ru
if: success() && github.event_name != 'pull_request' && steps.upload-check.outputs.available == 'true'
continue-on-error: true
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
UPLOAD_LIST="set ssl:verify-certificate no;"
for q in ./build/package/*.zip; do
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} $q;"
done
lftp -e "${UPLOAD_LIST} exit" -u ${{ secrets.builds_login }},${{ secrets.builds_password }} ${{ secrets.builds_host }}
- name: List Build Directory
if: always()
shell: bash
run: |
git status
ls -lR build
================================================
FILE: .github/workflows/3ds-ci.yml
================================================
name: 3DS CI
on:
push:
branches:
- main
- stable*
- versus-ci-homebrew
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: "${{ matrix.config.name }} | ${{ matrix.config.build_type }}"
runs-on: ubuntu-latest
container: ghcr.io/thextech/wohlnet-ci-ubuntu2404-dkp-vita:latest
env:
DEVKITPRO: /opt/devkitpro
DEVKITARM: /opt/devkitpro/devkitARM
strategy:
fail-fast: false
matrix:
config:
- {
name: "3DS build",
extra_options: "-DCMAKE_TOOLCHAIN_FILE=$DEVKITPRO/cmake/3DS.cmake -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON",
deps_cmdline: "echo 'DevkitPro SDK is already pre-installed'",
generator: "Ninja",
build_type: "Release",
executable_name: "thextech",
subdir_name: "thextech-3ds",
upload_directory: "www/3ds/"
}
steps:
- name: Check for the upload support
id: upload-check
shell: bash
run: |
if [[ "${{ secrets.builds_login }}" != '' && \
"${{ secrets.builds_password }}" != '' && \
"${{ secrets.builds_host }}" != '' ]]; then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
- name: Install Dependencies
shell: bash
run: |
if [[ ! -z "${{ matrix.config.deps_cmdline }}" ]]; then
eval ${{ matrix.config.deps_cmdline }}
fi
cmake --version
- uses: TheXTech/checkout@v0.1
- uses: TheXTech/branch-name@v0.1
- name: Pull submodules
shell: bash
run: |
git submodule update --init --recursive
- name: Configure
shell: bash
run: |
cmake -B build -G "${{ matrix.config.generator }}" -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} ${{ matrix.config.extra_options }} .
- name: Build
shell: bash
run: |
cmake --build build --target all -j4
- name: Check codesize and RAM usage
if: success() && runner.os == 'Linux'
shell: bash
run: |
size build/output/bin/thextech.elf
- name: Create Package
if: success()
shell: bash
run: |
cd build
mkdir package
mkdir "package/${{ matrix.config.subdir_name }}"
cp ../changelog.txt "package/${{ matrix.config.subdir_name }}/"
cp ../LICENSE "package/${{ matrix.config.subdir_name }}/License.TheXTech.txt"
cat ../docs/README_3DS.md ../README.md >> "package/${{ matrix.config.subdir_name }}/README.md"
cp thextech.3dsx "package/${{ matrix.config.subdir_name }}/"
cd package
zip -9 -r "thextech-3ds-${BRANCH_NAME}.zip" "${{ matrix.config.subdir_name }}"
rm -Rf "${{ matrix.config.subdir_name }}"
cd ../..
- name: Upload artifact
if: success()
uses: actions/upload-artifact@v4
continue-on-error: true
with:
path: build/package/*.zip
name: ${{ matrix.config.name }} ${{ matrix.config.build_type }}
- name: Deploy to builds.wohlsoft.ru
if: success() && github.event_name != 'pull_request' && steps.upload-check.outputs.available == 'true'
continue-on-error: true
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
UPLOAD_LIST="set ssl:verify-certificate no;"
for q in ./build/package/*.zip; do
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} $q;"
done
lftp -e "${UPLOAD_LIST} exit" -u ${{ secrets.builds_login }},${{ secrets.builds_password }} ${{ secrets.builds_host }}
- name: List Build Directory
if: always()
shell: bash
run: |
git status
ls -lR build
================================================
FILE: .github/workflows/android-ci.yml
================================================
name: Android CI
on:
push:
branches:
- main
- stable*
- versus-ci-android
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
defaults:
run:
working-directory: android-project
jobs:
build:
runs-on: ubuntu-latest
name: Build release-apk
steps:
- uses: TheXTech/checkout@v0.1
- uses: TheXTech/branch-name@v0.1
- name: Pull submodules
shell: bash
run: |
git submodule update --init --recursive
- name: Check for the upload support
id: upload-check
shell: bash
run: |
if [[ "${{ secrets.builds_login }}" != '' && \
"${{ secrets.builds_password }}" != '' && \
"${{ secrets.builds_host }}" != '' ]]; then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
- name: Check for the upload support
id: signing-check
shell: bash
run: |
if [[ "${{ secrets.ANDROID_KEYSTORE }}" != '' && \
"${{ secrets.RELEASE_STORE_PASSWORD }}" != '' && \
"${{ secrets.RELEASE_KEY_PASSWORD }}" != '' && \
"${{ secrets.RELEASE_KEY_ALIAS }}" != '' ]];
then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
- name: Install Dependencies
shell: bash
run: |
sudo apt-get update -qq
sudo apt-get install -qq lftp
- name: Set up JDK 21
uses: actions/setup-java@v3.11.0
with:
java-version: 21
distribution: 'temurin'
- uses: nttld/setup-ndk@v1
with:
ndk-version: r23c
# IMPORTANT NOTE: The SDK r23b is REQUIRED to support Android 4.1, 4.2, and 4.3, and to support non-Neon hardware
- name: Setup Android SDK
uses: android-actions/setup-android@v2
# Without NDK not compile and not normal error message. NDK is required
#- name: Install NDK
# run: echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install "ndk;23.2.8568313" --sdk_root=${ANDROID_SDK_ROOT}
# Some times is have problems with permissions for ./gradle file. Then uncommit it code
# - name: Make gradlew executable
# run: chmod +x ./gradlew
- name: Output version code
run: echo VERSION_CODE=${{ github.run_number }} > ./version.properties
- name: Import the signing
if: ${{ steps.signing-check.outputs.available == 'true' }}
run: echo "${{ secrets.ANDROID_KEYSTORE }}" | base64 -d > release-key.jks
- name: Build with Gradle
if: ${{ steps.signing-check.outputs.available == 'true' }}
run: ./gradlew assembleApkReleaseci
env:
RELEASE_STORE_PASSWORD: ${{ secrets.RELEASE_STORE_PASSWORD }}
RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }}
RELEASE_KEY_ALIAS: ${{ secrets.RELEASE_KEY_ALIAS }}
PIN_ALIAS: ${{ secrets.PIN_ALIAS }}
DB_PASS_ALIAS: ${{ secrets.DB_PASS_ALIAS }}
- name: Build with Gradle (unsigned)
if: ${{ steps.signing-check.outputs.available != 'true' }}
run: ./gradlew assembleApkRelease
env:
RELEASE_STORE_PASSWORD: ${{ secrets.RELEASE_STORE_PASSWORD }}
RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }}
RELEASE_KEY_ALIAS: ${{ secrets.RELEASE_KEY_ALIAS }}
PIN_ALIAS: ${{ secrets.PIN_ALIAS }}
DB_PASS_ALIAS: ${{ secrets.DB_PASS_ALIAS }}
- name: Rename APK
if: ${{ steps.signing-check.outputs.available == 'true' }}
shell: bash
run: |
mv thextech/build/outputs/apk/apk/releaseci/thextech-apk-releaseci.apk thextech-android-${BRANCH_NAME}.apk
- name: Rename APK (unsigned)
if: ${{ steps.signing-check.outputs.available != 'true' }}
shell: bash
run: |
mv thextech/build/outputs/apk/apk/release/thextech-apk-release-unsigned.apk thextech-android-${BRANCH_NAME}-unsigned.apk
- name: Upload APK
if: success() && ${{ steps.signing-check.outputs.available == 'true' }}
uses: actions/upload-artifact@v4
with:
name: thextech-android-${BRANCH_NAME}
path: android-project/thextech-android-*.apk
- name: Upload APK (unsigned)
if: success() && ${{ steps.signing-check.outputs.available != 'true' }}
uses: actions/upload-artifact@v4
continue-on-error: true
with:
name: thextech-android-${BRANCH_NAME}-unsigned
path: android-project/thextech-android-*.apk
- name: Deploy to builds.wohlsoft.ru
if: success() && github.event_name != 'pull_request' && steps.upload-check.outputs.available == 'true'
continue-on-error: true
shell: bash
run: |
UPLOAD_LIST="set ssl:verify-certificate no;"
if [[ "${{ steps.signing-check.outputs.available }}" == 'true' ]]; then
UPLOAD_LIST="${UPLOAD_LIST} put -O "www/android/" ./thextech-android-${BRANCH_NAME}.apk;"
else
UPLOAD_LIST="${UPLOAD_LIST} put -O "www/android/" ./thextech-android-${BRANCH_NAME}-unsigned.apk;"
fi
lftp -e "${UPLOAD_LIST} exit" -u ${{ secrets.builds_login }},${{ secrets.builds_password }} ${{ secrets.builds_host }}
- name: List Build Directory
if: always()
shell: bash
run: |
git status
ls -lR .
================================================
FILE: .github/workflows/android-fdroid-ci.yml
================================================
name: Android (F-Droid) CI
on:
workflow_dispatch:
push:
branches:
- release-1.3.7-fdroid
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
defaults:
run:
working-directory: android-project
jobs:
build:
runs-on: ubuntu-latest
name: Build release-apk
steps:
- uses: TheXTech/checkout@v0.1
- uses: TheXTech/branch-name@v0.1
- name: Pull submodules
shell: bash
run: |
git submodule update --init --recursive
- name: Check for the upload support
id: upload-check
shell: bash
run: |
if [[ "${{ secrets.builds_login }}" != '' && \
"${{ secrets.builds_password }}" != '' && \
"${{ secrets.builds_host }}" != '' ]]; then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
- name: Check for the upload support
id: signing-check
shell: bash
run: |
if [[ "${{ secrets.ANDROID_KEYSTORE }}" != '' && \
"${{ secrets.RELEASE_STORE_PASSWORD }}" != '' && \
"${{ secrets.RELEASE_KEY_PASSWORD }}" != '' && \
"${{ secrets.RELEASE_KEY_ALIAS }}" != '' ]];
then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
- name: Extracting version name
id: extract-version
shell: bash
run: |
ver_name=`perl -ne 'm/THEXTECH_ANDROID_VERSION_NAME\s+"([\d\w.\-]+)"/ && print "$1"' ../version.cmake`
echo "Version name in version.cmake: ${ver_name}"
echo "ver_name=${ver_name}" >> $GITHUB_OUTPUT;
- name: Install Dependencies
shell: bash
run: |
sudo apt-get update -qq
sudo apt-get install -qq lftp apksigner
- name: Set up JDK 21
uses: actions/setup-java@v3.11.0
with:
java-version: 21
distribution: 'temurin'
- uses: nttld/setup-ndk@v1
with:
ndk-version: r23c
# IMPORTANT NOTE: The SDK r23b is REQUIRED to support Android 4.1, 4.2, and 4.3, and to support non-Neon hardware
- name: Setup Android SDK
uses: android-actions/setup-android@v2
# Without NDK not compile and not normal error message. NDK is required
#- name: Install NDK
# run: echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install "ndk;23.2.8568313" --sdk_root=${ANDROID_SDK_ROOT}
# Some times is have problems with permissions for ./gradle file. Then uncommit it code
# - name: Make gradlew executable
# run: chmod +x ./gradlew
- name: Output version code
run: echo VERSION_CODE=${{ github.run_number }} > ./version.properties
- name: Import the signing
if: ${{ steps.signing-check.outputs.available == 'true' }}
run: echo "${{ secrets.ANDROID_KEYSTORE }}" | base64 -d > release-key.jks
- name: Build unsigned with Gradle
run: ./gradlew assembleFdroidRelease
- name: Sign and rename APK
if: ${{ steps.signing-check.outputs.available == 'true' }}
shell: bash
run: |
apksigner sign --ks 'release-key.jks' \
--ks-pass env:RELEASE_STORE_PASSWORD \
--ks-key-alias ${{ secrets.RELEASE_KEY_ALIAS }} \
--min-sdk-version 16 \
--v1-signing-enabled \
--v2-signing-enabled \
--out thextech-android-fdroid-${{ steps.extract-version.outputs.ver_name }}.apk \
thextech/build/outputs/apk/fdroid/release/thextech-fdroid-release-unsigned.apk
env:
RELEASE_STORE_PASSWORD: ${{ secrets.RELEASE_STORE_PASSWORD }}
RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }}
RELEASE_KEY_ALIAS: ${{ secrets.RELEASE_KEY_ALIAS }}
PIN_ALIAS: ${{ secrets.PIN_ALIAS }}
DB_PASS_ALIAS: ${{ secrets.DB_PASS_ALIAS }}
- name: Rename APK (unsigned)
if: ${{ steps.signing-check.outputs.available != 'true' }}
shell: bash
run: |
mv thextech/build/outputs/apk/fdroid/release/thextech-fdroid-release-unsigned.apk thextech-android-fdroid-${{ steps.extract-version.outputs.ver_name }}-unsigned.apk
- name: Upload APK
if: success() && ${{ steps.signing-check.outputs.available == 'true' }}
uses: actions/upload-artifact@v4
with:
name: thextech-android-${{ steps.extract-version.outputs.ver_name }}
path: android-project/thextech-android-*.apk
- name: Upload APK (unsigned)
if: success() && ${{ steps.signing-check.outputs.available != 'true' }}
uses: actions/upload-artifact@v4
continue-on-error: true
with:
name: thextech-android-${{ steps.extract-version.outputs.ver_name }}-unsigned
path: android-project/thextech-android-*.apk
- name: Deploy to builds.wohlsoft.ru
if: success() && github.event_name != 'pull_request' && steps.upload-check.outputs.available == 'true'
continue-on-error: true
shell: bash
run: |
UPLOAD_LIST="set ssl:verify-certificate no;"
if [[ "${{ steps.signing-check.outputs.available }}" == 'true' ]]; then
UPLOAD_LIST="${UPLOAD_LIST} put -O "www/android/fdroid/" ./thextech-android-fdroid-${{ steps.extract-version.outputs.ver_name }}.apk;"
else
UPLOAD_LIST="${UPLOAD_LIST} put -O "www/android/fdroid/" ./thextech-android-fdroid-${{ steps.extract-version.outputs.ver_name }}-unsigned.apk;"
fi
lftp -e "${UPLOAD_LIST} exit" -u ${{ secrets.builds_login }},${{ secrets.builds_password }} ${{ secrets.builds_host }}
- name: List Build Directory
if: always()
shell: bash
run: |
git status
ls -lR .
================================================
FILE: .github/workflows/blocksds-ci.yml
================================================
name: DSi BlocksDS CI
on:
push:
branches:
- main
- versus-ci-homebrew
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: "${{ matrix.config.name }} | ${{ matrix.config.build_type }}"
runs-on: ubuntu-latest
container: ghcr.io/thextech/wohlnet-ci-ubuntu2404-blocksds:latest
env:
WONDERFUL_TOOLCHAIN: /opt/wonderful
BLOCKSDS: /opt/wonderful/thirdparty/blocksds/core
BLOCKSDSEXT: /opt/wonderful/thirdparty/blocksds/external
strategy:
fail-fast: false
matrix:
config:
- {
name: "DSi BlocksDS build",
extra_options: "-DCMAKE_TOOLCHAIN_FILE=$BLOCKSDS/cmake/BlocksDSi.cmake -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON",
extra_path: "/opt/wonderful/bin",
deps_cmdline: "echo 'BlocksDS SDK is already pre-installed'",
generator: "Ninja",
build_type: "RelWithDebInfo",
executable_name: "thextech",
subdir_name: "thextech-dsi",
upload_directory: "www/dsi/"
}
steps:
- name: Check for the upload support
id: upload-check
shell: bash
run: |
if [[ "${{ secrets.builds_login }}" != '' && \
"${{ secrets.builds_password }}" != '' && \
"${{ secrets.builds_host }}" != '' ]]; then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
- name: Install Dependencies
shell: bash
run: |
if [[ ! -z "${{ matrix.config.deps_cmdline }}" ]]; then
eval ${{ matrix.config.deps_cmdline }}
fi
cmake --version
- uses: TheXTech/checkout@v0.1
- uses: TheXTech/branch-name@v0.1
- name: Pull submodules
shell: bash
run: |
git submodule update --init --recursive
- name: Configure
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
cmake -B build -G "${{ matrix.config.generator }}" -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} ${{ matrix.config.extra_options }} .
- name: Build
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
cmake --build build --target all -j4
- name: Check codesize and RAM usage
if: success() && runner.os == 'Linux'
shell: bash
run: |
size build/output/bin/thextech.elf
- name: Create Package
if: success()
shell: bash
run: |
cd build
mkdir package
mkdir "package/${{ matrix.config.subdir_name }}"
cp ../changelog.txt "package/${{ matrix.config.subdir_name }}/"
cp ../LICENSE "package/${{ matrix.config.subdir_name }}/License.TheXTech.txt"
cat ../docs/README_DSI.md ../README.md >> "package/${{ matrix.config.subdir_name }}/README.md"
cp thextech.nds "package/${{ matrix.config.subdir_name }}/"
cd package
zip -9 -r "thextech-blocksds-${BRANCH_NAME}.zip" "${{ matrix.config.subdir_name }}"
rm -Rf "${{ matrix.config.subdir_name }}"
cd ../..
- name: Upload artifact
if: success()
uses: actions/upload-artifact@v4
continue-on-error: true
with:
path: build/package/*.zip
name: ${{ matrix.config.name }} ${{ matrix.config.build_type }}
- name: Deploy to builds.wohlsoft.ru
if: success() && github.event_name != 'pull_request' && steps.upload-check.outputs.available == 'true'
continue-on-error: true
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
UPLOAD_LIST="set ssl:verify-certificate no;"
for q in ./build/package/*.zip; do
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} $q;"
done
lftp -e "${UPLOAD_LIST} exit" -u ${{ secrets.builds_login }},${{ secrets.builds_password }} ${{ secrets.builds_host }}
- name: List Build Directory
if: always()
shell: bash
run: |
git status
ls -lR build
================================================
FILE: .github/workflows/emscripten.yml
================================================
name: Emscripten CI
on:
push:
branches:
- main
- stable*
- versus-ci-emscripten
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: "${{ matrix.config.name }} | ${{ matrix.config.build_type }}"
runs-on: ${{ matrix.config.os }}
strategy:
fail-fast: false
matrix:
config:
# ======================================= Adventures of Demo =======================================
# The side game about Demo and siblings from the A2XT universe by raocow and his fan community.
- {
name: "Adventures of Demo",
os: ubuntu-24.04,
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=advdemo \
-DTHEXTECH_GAME_NAME_TITLE=\"Adventures of Demo - Web Edition\" \
-DTHEXTECH_CREDITS_URL=\"wohlsoft.ru\" \
-DTHEXTECH_CREDITS_TITLE=\"Adventures of Demo\" \
-DTHEXTECH_MANIFEST_NAME=\"AoD on TheXTech ${THEXTECH_VERSION_STRING}\" \
-DTHEXTECH_MANIFEST_ID=\"wohlsoft-aod-thextech\" \
-DTHEXTECH_MANIFEST_DESC=\"Play AoD on TheXTech ${THEXTECH_VERSION_STRING}\" \
-DTHEXTECH_DEPLOY_URL=\"https://wohlsoft.ru/projects/TheXTech/aod-on-web-debug/\"",
deps_cmdline: "sudo apt-get update -qq \
&& sudo apt-get install -qq cmake ninja-build cmake ninja-build lftp",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name: "advdemo",
assets_url: "https://wohlsoft.ru/projects/TheXTech/_downloads/thextech-adventure-of-demo-assets-full.7z",
subdir_name: "thextech-adventures-of-demo",
package_filename_game: "adventures-of-demo",
upload_directory: "www/webassembly/",
deploy_directory: "www/webassembly/debug-deploy/aod-on-web-debug"
}
# ======================================= Super Mario Bros. X - a fan-game =======================================
# Was made in 2009 by Andrew Spinks "Redigit", and supported up to 2011 by it's original author.
- {
name: "Super Mario Bros. X",
os: ubuntu-24.04,
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=smbx \
-DTHEXTECH_GAME_NAME_TITLE=\"Super Mario Bros. X - Web Edition\" \
-DTHEXTECH_CREDITS_URL=\"www.SuperMarioBrosX.org\" \
-DTHEXTECH_CREDITS_TITLE=\"Super Mario Bros. X\" \
-DTHEXTECH_MANIFEST_NAME=\"SMBX on TheXTech ${THEXTECH_VERSION_STRING}\" \
-DTHEXTECH_MANIFEST_ID=\"wohlsoft-smbx-thextech\" \
-DTHEXTECH_MANIFEST_DESC=\"Play SMBX on TheXTech ${THEXTECH_VERSION_STRING}\" \
-DTHEXTECH_DEPLOY_URL=\"https://wohlsoft.ru/projects/TheXTech/smbx-on-web-debug/\"",
deps_cmdline: "sudo apt-get update -qq \
&& sudo apt-get install -qq cmake ninja-build cmake ninja-build lftp",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name: "smbx",
assets_url: "https://wohlsoft.ru/projects/TheXTech/_downloads/thextech-smbx13-assets-full.7z",
subdir_name: "thextech-super-mario-bros-x",
package_filename_game: "super-mario-bros-x",
upload_directory: "www/webassembly/",
deploy_directory: "www/webassembly/debug-deploy/smbx-on-web-debug"
}
steps:
- name: Check for the upload support
id: upload-check
shell: bash
run: |
if [[ "${{ secrets.builds_login }}" != '' && \
"${{ secrets.builds_password }}" != '' && \
"${{ secrets.builds_host }}" != '' ]]; then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
- name: Install Dependencies
shell: bash
run: |
if [[ ! -z "${{ matrix.config.deps_cmdline }}" ]]; then
eval ${{ matrix.config.deps_cmdline }}
fi
cmake --version
- uses: TheXTech/checkout@v0.1
- uses: TheXTech/branch-name@v0.1
- name: Pull submodules
shell: bash
run: |
# Pull submodules
git submodule update --init --recursive
- name: Install emscripten
run: |
cd ..
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
./emsdk install latest
./emsdk activate latest
- name: Download assets
shell: bash
run: wget -d -nv -t 5 -O assets.7z "${{ matrix.config.assets_url }}"
- name: Unpack assets
shell: bash
run: |
mkdir -p assets
cd assets
7z x ../assets.7z
cd ..
rm assets.7z
- name: Apply update to translations
shell: bash
run: |
ASSETS_ROOT="$PWD/assets"
cd .github/ci-helper
bash translate_update.sh "${ASSETS_ROOT}"
cd ../..
- name: Configure
shell: bash
run: |
source ../emsdk/emsdk_env.sh
emcmake cmake -B build -G "${{ matrix.config.generator }}" \
-DPGE_PRELOAD_ENVIRONMENT="`pwd`/assets" \
-DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} ${{ matrix.config.extra_options }} .
- name: Build
shell: bash
run: |
source ../emsdk/emsdk_env.sh
emmake cmake --build build --target all
- name: Create Package
if: success()
shell: bash
run: |
cd build
mkdir package
mkdir "package/${{ matrix.config.subdir_name }}"
cp ../changelog.txt "package/${{ matrix.config.subdir_name }}/"
cp ../LICENSE "package/${{ matrix.config.subdir_name }}/License.TheXTech.txt"
cp ../README.md "package/${{ matrix.config.subdir_name }}/"
cp ../README.RUS.md "package/${{ matrix.config.subdir_name }}/"
cp ../README.ESP.md "package/${{ matrix.config.subdir_name }}/"
cp output/bin/* "package/${{ matrix.config.subdir_name }}/"
cd package
tar -cvzf "thextech-${{ matrix.config.package_filename_game }}-webassembly-${BRANCH_NAME}.tar.gz" "${{ matrix.config.subdir_name }}"
rm -Rf "${{ matrix.config.subdir_name }}"
cd ../..
- name: Upload artifact
if: success()
uses: actions/upload-artifact@v4
continue-on-error: true
with:
path: build/package/*.tar.gz
name: ${{ matrix.config.name }} ${{ matrix.config.build_type }}
- name: Deploy to builds.wohlsoft.ru
if: success() && github.event_name != 'pull_request' && steps.upload-check.outputs.available == 'true'
continue-on-error: true
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
UPLOAD_LIST="set ssl:verify-certificate no;"
for q in ./build/package/*.tar.gz; do
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} $q;"
done
UPLOAD_LIST="${UPLOAD_LIST} rm -rf ${{ matrix.config.deploy_directory }}-next;"
UPLOAD_LIST="${UPLOAD_LIST} mkdir ${{ matrix.config.deploy_directory }}-next;"
for q in ./build/output/bin/*; do
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.deploy_directory }}-next/ $q;"
done
UPLOAD_LIST="${UPLOAD_LIST} rm -rf ${{ matrix.config.deploy_directory }}-prev;"
UPLOAD_LIST="${UPLOAD_LIST} mv ${{ matrix.config.deploy_directory }} ${{ matrix.config.deploy_directory }}-prev;"
UPLOAD_LIST="${UPLOAD_LIST} mv ${{ matrix.config.deploy_directory }}-next ${{ matrix.config.deploy_directory }};"
UPLOAD_LIST="${UPLOAD_LIST} rm -rf ${{ matrix.config.deploy_directory }}-prev;"
lftp -e "${UPLOAD_LIST} exit" -u ${{ secrets.builds_login }},${{ secrets.builds_password }} ${{ secrets.builds_host }}
- name: List Build Directory
if: always()
shell: bash
run: |
git status
ls -lR build
================================================
FILE: .github/workflows/flatpak.yml
================================================
name: Flatpak CI
on:
push:
branches:
- main
- stable*
- versus-ci
- versus-ci-flatpak
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: Flatpak for ${{ matrix.arch.name }}
runs-on: ${{ matrix.arch.runs_on }}
container:
image: ${{ matrix.arch.image }}
options: --privileged
strategy:
fail-fast: true
matrix:
arch:
- {
name: "x86-64",
id: "x86_64",
# sdk_ver: "22.08",
runs_on: "ubuntu-latest",
image: "ghcr.io/thextech/wohlnet-ci-ubuntu2204:latest"
}
- {
name: "arm64",
id: "aarch64",
# sdk_ver: "22.08",
runs_on: "ubuntu-24.04-arm",
image: "ghcr.io/thextech/wohlnet-ci-ubuntu2204-arm64:latest"
}
steps:
- name: Check for the upload support
id: upload-check
shell: bash
run: |
if [[ "${{ secrets.builds_login }}" != '' && \
"${{ secrets.builds_password }}" != '' && \
"${{ secrets.builds_host }}" != '' ]]; then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
# - name: Install Ubuntu Dependencies
# shell: bash
# run: |
# apt update --fix-missing -y
# apt upgrade -y
#
# apt install -y flatpak flatpak-builder p7zip-full git lftp
#
# - name: Install flatpak Dependencies
# shell: bash
# run: |
# flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
# flatpak install -y flathub org.freedesktop.Platform/${{ matrix.arch.id }}/${{ matrix.arch.sdk_ver }} org.freedesktop.Sdk/${{ matrix.arch.id }}/${{ matrix.arch.sdk_ver }}
- uses: TheXTech/branch-name@v0.1
- uses: TheXTech/checkout@v0.1
- name: Pull submodules
shell: bash
run: |
git config --global --add safe.directory '*'
git submodule update --init --recursive
- name: Create flatpak manifest YML
id: make-yml
shell: bash
run: |
export REPO_PATH="$(pwd)"
export REPO_PATH_SED="$(pwd | sed 's_/_\\/_g')"
export BRANCH_NAME_SED="$(echo $BRANCH_NAME | sed 's_/_\\/_g')"
cd ..
cat $REPO_PATH/resources/flatpak/build.yml \
| sed "s/- type: git/- type: dir/" \
| sed "s/url: https:.*/path: $REPO_PATH_SED/" \
| sed "s/OVERRIDE_GIT_BRANCH=/OVERRIDE_GIT_BRANCH=$BRANCH_NAME_SED/" \
| tee ci-build.yml
- name: Build flatpak
shell: bash
run: |
cd ..
flatpak-builder --arch=${{ matrix.arch.id }} --force-clean --repo=temp_repo temp_build ci-build.yml
- name: Create bundle
shell: bash
run: |
mkdir -p package
# ru.wohlsoft.TheXTech is the package id, and dev is the branch
flatpak build-bundle --arch=${{ matrix.arch.id }} ../temp_repo package/thextech-${{ matrix.arch.name }}.flatpak ru.wohlsoft.TheXTech dev
- name: Upload artifact
if: success()
uses: actions/upload-artifact@v4
continue-on-error: true
with:
path: package/thextech-${{ matrix.arch.name }}.flatpak
name: TheXTech (${{ matrix.arch.name }})
- name: Deploy to builds.wohlsoft.ru
if: success() && github.event_name != 'pull_request' && steps.upload-check.outputs.available == 'true'
continue-on-error: true
shell: bash
run: |
cd package
mv "thextech-${{ matrix.arch.name }}.flatpak" "thextech-${BRANCH_NAME}-${{ matrix.arch.name }}.flatpak"
UPLOAD_LIST="set ssl:verify-certificate no;"
UPLOAD_LIST="${UPLOAD_LIST} put -O www/flatpak thextech-${BRANCH_NAME}-${{ matrix.arch.name }}.flatpak;"
lftp -e "${UPLOAD_LIST} exit" -u ${{ secrets.builds_login }},${{ secrets.builds_password }} ${{ secrets.builds_host }}
================================================
FILE: .github/workflows/homebrew-assets-ci.yml
================================================
name: Homebrew Assets CI
on:
push:
branches:
- main
- stable*
paths:
- .github/workflows/homebrew-assets-ci.yml
- utils/convertkit/assets-convert-homebrew.py
pull_request:
branches:
- main
paths:
- .github/workflows/homebrew-assets-ci.yml
- utils/convertkit/assets-convert-homebrew.py
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: ${{ matrix.source.name }} for ${{ matrix.target.name }}
runs-on: ubuntu-latest
container: ${{ matrix.target.docker_image }}
env:
DEVKITPRO: /opt/devkitpro
strategy:
fail-fast: true
matrix:
target:
- {
name: "3DS",
id: "3ds",
docker_image: "devkitpro/devkitarm",
upload_directory: "www/3ds/"
}
- {
name: "Wii",
id: "wii",
docker_image: "devkitpro/devkitppc",
upload_directory: "www/wii/"
}
source:
# ======================================= Adventures of Demo =======================================
# The side game about Demo and siblings from the A2XT universe by raocow and his fan community.
- {
name: "Adventures of Demo",
id: "aod",
assets_url: "https://wohlsoft.ru/projects/TheXTech/_downloads/thextech-adventure-of-demo-assets-full.7z",
}
# ======================================= Super Mario Bros. X - a fan-game =======================================
# Was made in 2009 by Andrew Spinks "Redigit", and supported up to 2011 by it's original author.
- {
name: "Super Mario Bros. X",
id: "smbx13",
assets_url: "https://wohlsoft.ru/projects/TheXTech/_downloads/thextech-smbx13-assets-full.7z",
}
steps:
- name: Check for the upload support
id: upload-check
shell: bash
run: |
if [[ "${{ secrets.builds_login }}" != '' && \
"${{ secrets.builds_password }}" != '' && \
"${{ secrets.builds_host }}" != '' ]]; then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
- name: Resolve artifact filename
id: res
shell: bash
run: |
echo "filename=assets-${{ matrix.source.id }}-${{ matrix.target.id }}.zip" >> $GITHUB_OUTPUT;
echo "The target will be named: [assets-${{ matrix.source.id }}-${{ matrix.target.id }}.${{ matrix.target.package_ext }}]"
- name: Install Debian Dependencies
shell: bash
run: |
apt update
apt install -y build-essential cmake \
imagemagick ffmpeg \
python3 \
p7zip-full \
zip \
lftp
- uses: TheXTech/branch-name@v0.1
- name: Build and install spc2it Dependency
shell: bash
continue-on-error: true
run: |
git clone https://github.com/ds-sloth/spc2it ../spc2it
cd ../spc2it
mkdir build
cd build
cmake ..
make
cp spc2it /usr/bin/spc2it
- uses: TheXTech/checkout@v0.1
- name: Download assets
shell: bash
run: wget -d -nv -t 5 -O assets-source.7z "${{ matrix.source.assets_url }}"
- name: Unpack assets
shell: bash
run: |
mkdir -p assets/source
cd assets/source
7z x ../../assets-source.7z
cd ../..
rm assets-source.7z
mkdir -p package
- name: Apply update to translations
shell: bash
run: |
ASSETS_ROOT="$PWD/assets/source"
cd .github/ci-helper
bash translate_update.sh "${ASSETS_ROOT}"
cd ../..
- name: Convert assets
shell: bash
run: |
cd assets
python3 ../utils/convertkit/assets-convert-homebrew.py -t ${{ matrix.target.id }} source target
- name: Package for 3DS
if: matrix.target.id == '3ds'
shell: bash
run: |
mkromfs3ds assets/target package/${{ steps.res.outputs.filename }}.romfs
cd package
zip -9 "${{ steps.res.outputs.filename }}" "${{ steps.res.outputs.filename }}.romfs"
cd ..
- name: Package for Wii
if: matrix.target.id == 'wii'
shell: bash
run: |
cd assets/target
zip -9 -r "../../package/${{ steps.res.outputs.filename }}" .
cd ../..
- name: Upload artifact
if: success()
uses: actions/upload-artifact@v4
continue-on-error: true
with:
path: package/${{ steps.res.outputs.filename }}
name: ${{ matrix.source.name }} Assets (${{ matrix.target.name }})
- name: Deploy to builds.wohlsoft.ru
if: success() && github.event_name != 'pull_request' && steps.upload-check.outputs.available == 'true'
continue-on-error: true
shell: bash
run: |
cd package
UPLOAD_LIST="set ssl:verify-certificate no;"
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.target.upload_directory }} ${{ steps.res.outputs.filename }};"
lftp -e "${UPLOAD_LIST} exit" -u ${{ secrets.builds_login }},${{ secrets.builds_password }} ${{ secrets.builds_host }}
- name: List Build Directory
if: always()
shell: bash
run: |
cd assets/target
pwd
ls -lR
================================================
FILE: .github/workflows/macos-ci.yml
================================================
name: macOS CI
on:
push:
branches:
- main
- stable*
- versus-ci-macos
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: "${{ matrix.config.name }} | ${{ matrix.config.build_type }}"
runs-on: ${{ matrix.config.os }}
strategy:
fail-fast: false
matrix:
config:
- {
name: "macOS Universal",
os: macos-15-intel,
extra_options: "-DTHEXTECH_PRELOAD_ENVIRONMENT_MANUALLY=ON -DTHEXTECH_EXECUTABLE_NAME=\"thextech\"",
deps_cmdline: "brew install ninja wget p7zip lftp",
generator: "Ninja",
build_type: "MinSizeRel",
upload_directory: "www/macosx/"
}
steps:
- name: Check for the upload support
id: upload-check
shell: bash
run: |
if [[ "${{ secrets.builds_login }}" != '' && \
"${{ secrets.builds_password }}" != '' && \
"${{ secrets.builds_host }}" != '' ]]; then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
- name: Install Dependencies
shell: bash
run: |
if [[ ! -z "${{ matrix.config.deps_cmdline }}" ]]; then
eval ${{ matrix.config.deps_cmdline }}
fi
- name: CI Server's network meta-info
shell: bash
run: |
echo "CI server IP address:"
wget -q -O - ipinfo.io/ip
printf "\n"
wget -d ipinfo.io/ip -O/dev/null 2>&1 |grep ^User-Agent
- uses: TheXTech/checkout@v0.1
- uses: TheXTech/branch-name@v0.1
- name: Pull submodules
shell: bash
run: |
git submodule update --init --recursive
- name: Download SMBX assets
shell: bash
run: wget -d -nv -t 5 -O smbx13.7z "https://wohlsoft.ru/projects/TheXTech/_downloads/thextech-smbx13-assets-full.7z"
- name: Download AoD assets
shell: bash
run: wget -d -nv -t 5 -O aod.7z "https://wohlsoft.ru/projects/TheXTech/_downloads/thextech-adventure-of-demo-assets-full.7z"
- name: Unpack all assets
shell: bash
run: |
mkdir -p smbx13
cd smbx13
7z x ../smbx13.7z
cd ..
rm smbx13.7z
mkdir -p aod
cd aod
7z x ../aod.7z
cd ..
rm aod.7z
- name: Apply update to translations
shell: bash
run: |
ASSETS_ROOT1="$PWD/smbx13"
ASSETS_ROOT2="$PWD/aod"
cd .github/ci-helper
bash translate_update.sh "${ASSETS_ROOT1}"
bash translate_update.sh "${ASSETS_ROOT2}"
cd ../..
- name: Configure (x86_64)
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
echo "PATH environment: ${PATH}"
fi
if [[ "${{ secrets.DISCORD_APP_ID }}" != '' ]]; then
LOCAL_EXTRA_SETUP="-DTHEXTECH_ENABLE_DISCORD_RPC=ON -DTHEXTECH_DISCORD_APPID=\"${{ secrets.DISCORD_APP_ID }}\""
fi
cmake -B build-x64 -G "${{ matrix.config.generator }}" \
-DCMAKE_OSX_DEPLOYMENT_TARGET="10.9" \
-DCMAKE_OSX_ARCHITECTURES="x86_64" \
-DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} \
${{ matrix.config.extra_options }} \
${LOCAL_EXTRA_SETUP} .
- name: Build (x86_64)
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
export MAKEFLAGS=--keep-going
cmake --build build-x64 --config ${{ matrix.config.build_type }} --parallel 3
- name: Configure (arm64)
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
echo "PATH environment: ${PATH}"
fi
if [[ "${{ secrets.DISCORD_APP_ID }}" != '' ]]; then
LOCAL_EXTRA_SETUP="-DTHEXTECH_ENABLE_DISCORD_RPC=ON -DTHEXTECH_DISCORD_APPID=\"${{ secrets.DISCORD_APP_ID }}\""
fi
cmake -B build-arm -G "${{ matrix.config.generator }}" \
-DCMAKE_OSX_DEPLOYMENT_TARGET="11.0" \
-DCMAKE_OSX_ARCHITECTURES="arm64" \
-DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} \
${{ matrix.config.extra_options }} \
${LOCAL_EXTRA_SETUP} .
- name: Build (arm64)
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
export MAKEFLAGS=--keep-going
cmake --build build-arm --config ${{ matrix.config.build_type }} --parallel 3
- name: Merging executible
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
cp -R build-arm/output/bin/TheXTech.app TheXTech.app
rm TheXTech.app/Contents/MacOS/TheXTech
lipo -create -output TheXTech.app/Contents/MacOS/TheXTech build-x64/output/bin/TheXTech.app/Contents/MacOS/TheXTech build-arm/output/bin/TheXTech.app/Contents/MacOS/TheXTech
mkdir TheXTech.app/Contents/Resources/assets
- name: Executable info
shell: bash
run: |
file TheXTech.app/Contents/MacOS/TheXTech
otool -L TheXTech.app/Contents/MacOS/TheXTech
- name: Create Package
if: success()
shell: bash
run: |
bash .github/ci-helper/pack-game-macos.sh \
aod \
"assets/graphics/ui/icon/advdemo.icns" \
"Adventures of Demo" \
"thextech-adventures-of-demo-macos-uni-${BRANCH_NAME}.dmg"
bash .github/ci-helper/pack-game-macos.sh \
smbx13 \
"assets/graphics/ui/icon/smbx.icns" \
"Super Mario Bros. X" \
"thextech-super-mario-bros-x-macos-uni-${BRANCH_NAME}.dmg"
bash .github/ci-helper/pack-game-macos.sh \
none \
"thextech.icns" \
"TheXTech" \
"thextech-macos-uni-${BRANCH_NAME}.zip"
- name: Upload DMG artifact
if: success()
uses: actions/upload-artifact@v4
continue-on-error: true
with:
path: ./*.dmg
name: ${{ matrix.config.name }} ${{ matrix.config.build_type }} DMG
- name: Upload ZIP artifact
if: success()
uses: actions/upload-artifact@v4
continue-on-error: true
with:
path: ./*.zip
name: ${{ matrix.config.name }} ${{ matrix.config.build_type }} ZIP
- name: Deploy to builds.wohlsoft.ru
if: success() && github.event_name != 'pull_request' && steps.upload-check.outputs.available == 'true'
continue-on-error: true
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
UPLOAD_LIST="set ssl:verify-certificate no;"
if ls *.dmg 1> /dev/null 2>&1; then
for q in *.dmg; do
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} $q;"
done
fi
if ls *.zip 1> /dev/null 2>&1; then
for q in *.zip; do
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} $q;"
done
fi
lftp -e "${UPLOAD_LIST} exit" -u ${{ secrets.builds_login }},${{ secrets.builds_password }} ${{ secrets.builds_host }}
- name: Clean-up
if: always()
shell: bash
run: |
rm -Rf TheXTech.app
rm -Rf aod
rm -Rf smbx13
- name: List Build Directory
if: always()
shell: bash
run: |
git status
ls -lR build-x64
ls -lR build-arm
================================================
FILE: .github/workflows/portmaster-ci.yml
================================================
name: PortMaster CI
on:
push:
branches:
- main
- stable*
- versus-ci
- versus-ci-portmaster
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: "${{ matrix.config.name }} | ${{ matrix.config.build_type }}"
runs-on: ${{ matrix.config.os }}
container: ${{ matrix.config.container }}
strategy:
fail-fast: false
matrix:
config:
- {
name: "PortMaster Ubuntu 20.04 aarch64",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu2004-arm64-cross:latest",
extra_options: "-DPORTMASTER=ON -DCMAKE_TOOLCHAIN_FILE=`pwd`/cmake/ci_linux_gcc_toolchain_arm64.cmake",
deps_cmdline: "echo 'Ubuntu 20 arm64, cross from x86_64, everything pre-installed'",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "portmaster",
upload_directory: "www/portmaster/"
}
steps:
- name: Check for the upload support
id: upload-check
shell: bash
run: |
if [[ "${{ secrets.builds_login }}" != '' && \
"${{ secrets.builds_password }}" != '' && \
"${{ secrets.builds_host }}" != '' ]]; then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
- name: Install Dependencies
shell: bash
run: |
if [[ ! -z "${{ matrix.config.deps_cmdline }}" ]]; then
eval ${{ matrix.config.deps_cmdline }}
fi
cmake --version
- uses: TheXTech/checkout@v0.1
- uses: TheXTech/branch-name@v0.1
- name: Pull submodules
shell: bash
run: |
git submodule update --init --recursive
- name: Configure
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
echo "PATH environment: ${PATH}"
fi
if [[ "${{ secrets.DISCORD_APP_ID }}" != '' ]]; then
LOCAL_EXTRA_SETUP="-DTHEXTECH_ENABLE_DISCORD_RPC=ON -DTHEXTECH_DISCORD_APPID=\"${{ secrets.DISCORD_APP_ID }}\""
fi
cmake -B build -G "${{ matrix.config.generator }}" -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} ${{ matrix.config.extra_options }} ${LOCAL_EXTRA_SETUP} .
- name: Build
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
export MAKEFLAGS=--keep-going
cmake --build build --config ${{ matrix.config.build_type }} --parallel 4
- name: List dependent libraries
if: success() && runner.os == 'Linux'
shell: bash
run: |
file build/output/bin/thextech
# ldd build/output/bin/thextech # Not for cross compile!
- name: Create Package
if: success()
id: create_package
shell: bash
run: |
bash .github/ci-helper/pack-game.sh \
"${{ runner.os }}" \
"thextech-bin" \
"thextech${{ matrix.config.executable_name_suffix }}" \
"thextech-bin-${{ matrix.config.package_filename_suffix }}-${BRANCH_NAME}" \
"none"
- name: Upload artifact
if: success()
uses: actions/upload-artifact@v4
continue-on-error: true
with:
path: build/package/*.tar.gz
name: TheXTech PortMaster ${{ matrix.config.build_type }}
- name: Deploy to builds.wohlsoft.ru
if: steps.create_package.outcome == 'success' && github.event_name != 'pull_request' && steps.upload-check.outputs.available == 'true'
continue-on-error: true
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
UPLOAD_LIST="set ssl:verify-certificate no;"
if [[ "${{ runner.os }}" == 'Windows' ]]; then
for q in ./build/package/*.7z; do
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} $q;"
done
elif [[ "${{ runner.os }}" == 'Linux' ]]; then
for q in ./build/package/*.tar.gz; do
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} $q;"
done
fi
lftp -e "${UPLOAD_LIST} exit" -u ${{ secrets.builds_login }},${{ secrets.builds_password }} ${{ secrets.builds_host }}
- name: List Build Directory
if: always()
shell: bash
run: |
git status
ls -lR build
================================================
FILE: .github/workflows/regression-testing-ci.yaml
================================================
name: Regression Test CI
on:
push:
branches:
- main
- stable*
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: "${{ matrix.config.name }} | ${{ matrix.config.build_type }}"
runs-on: ${{ matrix.config.os }}
container: ${{ matrix.config.container }}
strategy:
fail-fast: false
matrix:
config:
- {
name: "Ubuntu 24.04 x86_64 (no-SDL)",
os: ubuntu-24.04,
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \
-DUSE_STATIC_LIBC=ON \
-DUSE_SYSTEM_LIBS=OFF \
-DTHEXTECH_CLI_BUILD=ON \
-DTHEXTECH_NO_SDL_BUILD=ON",
deps_cmdline: "sudo apt-get update -qq \
&& sudo apt-get install -qq cmake ninja-build lftp \
build-essential",
executable_name: "thextech",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-24-04-amd64",
upload_directory: ""
}
- {
name: "Ubuntu 24.04 x86_64 (no-SDL, legacy floats)",
os: ubuntu-24.04,
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \
-DUSE_STATIC_LIBC=ON \
-DUSE_SYSTEM_LIBS=OFF \
-DTHEXTECH_CLI_BUILD=ON \
-DTHEXTECH_NO_SDL_BUILD=ON \
-DTHEXTECH_FIXED_POINT=OFF",
deps_cmdline: "sudo apt-get update -qq \
&& sudo apt-get install -qq cmake ninja-build lftp \
build-essential",
executable_name: "thextech",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-24-04-amd64-legacy-floats",
upload_directory: ""
}
steps:
- name: Check for the upload support
id: upload-check
shell: bash
run: |
if [[ "${{ secrets.builds_login }}" != '' && \
"${{ secrets.builds_password }}" != '' && \
"${{ secrets.builds_host }}" != '' ]]; then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
- name: Install Dependencies
shell: bash
run: |
if [[ ! -z "${{ matrix.config.deps_cmdline }}" ]]; then
eval ${{ matrix.config.deps_cmdline }}
fi
cmake --version
- uses: TheXTech/checkout@v0.1
- uses: TheXTech/branch-name@v0.1
- name: Pull submodules
shell: bash
run: |
git submodule update --init --recursive
# - name: Download SMBX assets
# shell: bash
# run: wget -d -nv -t 5 -O smbx13.7z "https://wohlsoft.ru/projects/TheXTech/_downloads/thextech-smbx13-assets-full.7z"
#
# - name: Download AoD assets
# shell: bash
# run: wget -d -nv -t 5 -O aod.7z "https://wohlsoft.ru/projects/TheXTech/_downloads/thextech-adventure-of-demo-assets-full.7z"
#
# - name: Unpack all assets
# shell: bash
# run: |
# mkdir -p smbx13
# cd smbx13
# 7z x ../smbx13.7z
# cd ..
# rm smbx13.7z
# mkdir -p aod
# cd aod
# 7z x ../aod.7z
# cd ..
# rm aod.7z
#
# - name: Apply update to translations
# shell: bash
# run: |
# ASSETS_ROOT1="$PWD/smbx13"
# ASSETS_ROOT2="$PWD/aod"
# cd .github/ci-helper
# bash translate_update.sh "${ASSETS_ROOT1}"
# bash translate_update.sh "${ASSETS_ROOT2}"
# cd ../..
- name: Configure
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
echo "PATH environment: ${PATH}"
fi
cmake -B build -G "${{ matrix.config.generator }}" -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} ${{ matrix.config.extra_options }} ${LOCAL_EXTRA_SETUP} .
- name: Build
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
export MAKEFLAGS=--keep-going
cmake --build build --config ${{ matrix.config.build_type }} --parallel 3
- name: List dependent libraries
if: success() && runner.os == 'Linux'
shell: bash
run: |
file build/output/bin/thextech
ldd build/output/bin/thextech
- name: Check codesize and RAM usage
if: success() && runner.os == 'Linux'
shell: bash
run: |
size build/output/bin/thextech
# TODO: some performance and regression testing on a suite. Wait for wip-archives merge so that it is easy to use a test-suite.
# - name: Create Package
# if: success()
# id: create_package
# shell: bash
# run: |
# bash .github/ci-helper/pack-game.sh \
# "${{ runner.os }}" \
# "thextech-bin" \
# "thextech${{ matrix.config.executable_name_suffix }}" \
# "thextech-bin-${{ matrix.config.package_filename_suffix }}-${BRANCH_NAME}" \
# "none"
# - name: Upload artifact
# if: success() && runner.os == 'Linux' && config.upload_directory != ''
# uses: actions/upload-artifact@v3
# continue-on-error: true
# with:
# path: build/package/*.tar.gz
# name: TheXTech ${{ matrix.config.name }} ${{ matrix.config.build_type }}
# - name: Upload artifact
# if: success() && runner.os == 'Windows'
# uses: actions/upload-artifact@v3
# continue-on-error: true
# with:
# path: build/package/*.7z
# name: ${{ matrix.config.name }} ${{ matrix.config.build_type }}
# - name: Deploy to builds.wohlsoft.ru
# if: steps.create_package.outcome == 'success' && github.event_name != 'pull_request' && steps.upload-check.outputs.available == 'true' && config.upload_directory != ''
# continue-on-error: true
# shell: bash
# run: |
# if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
# export PATH=${{ matrix.config.extra_path }}:${PATH}
# fi
# UPLOAD_LIST="set ssl:verify-certificate no;"
# if [[ "${{ runner.os }}" == 'Windows' ]]; then
# for q in ./build/package/*.7z; do
# UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} $q;"
# done
# elif [[ "${{ runner.os }}" == 'Linux' ]]; then
# for q in ./build/package/*.tar.gz; do
# UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} $q;"
# done
# fi
# lftp -e "${UPLOAD_LIST} exit" -u ${{ secrets.builds_login }},${{ secrets.builds_password }} ${{ secrets.builds_host }}
- name: List Build Directory
if: always()
shell: bash
run: |
git status
ls -lR build
================================================
FILE: .github/workflows/switch-ci.yml
================================================
name: Switch CI
on:
push:
branches:
- main
- stable*
- versus-ci-homebrew
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: "${{ matrix.config.name }} | ${{ matrix.config.build_type }}"
runs-on: ubuntu-latest
container: ghcr.io/thextech/wohlnet-ci-ubuntu2404-dkp-vita:latest
env:
DEVKITPRO: /opt/devkitpro
DEVKITA64: /opt/devkitpro/devkitA64
strategy:
fail-fast: false
matrix:
config:
- {
name: "Switch build",
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DCMAKE_TOOLCHAIN_FILE=$DEVKITPRO/cmake/Switch.cmake \
-DCMAKE_INSTALL_PREFIX=$DEVKITPRO/portlibs/switch",
# -DCMAKE_PREFIX_PATH=/opt/devkitpro/portlibs/switch-local
deps_cmdline: "echo 'DevkitPro SDK is already pre-installed'",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name: "thextech",
assets_url: "https://wohlsoft.ru/projects/TheXTech/_downloads/thextech-adventure-of-demo-assets-full.7z",
subdir_name: "thextech-switch",
upload_directory: "www/switch/"
}
steps:
- name: Check for the upload support
id: upload-check
shell: bash
run: |
if [[ "${{ secrets.builds_login }}" != '' && \
"${{ secrets.builds_password }}" != '' && \
"${{ secrets.builds_host }}" != '' ]]; then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
- name: Install Dependencies
shell: bash
run: |
if [[ ! -z "${{ matrix.config.deps_cmdline }}" ]]; then
eval ${{ matrix.config.deps_cmdline }}
fi
cmake --version
- uses: TheXTech/checkout@v0.1
- uses: TheXTech/branch-name@v0.1
- name: Pull submodules
shell: bash
run: |
git submodule update --init --recursive
# - name: Install Devkit Pro
# run: |
# cd ..
# sudo chmod 755 /opt
# if [[ ! -f /usr/local/share/keyring/devkitpro-pub.gpg ]]; then
# sudo mkdir -p /usr/local/share/keyring/
# sudo wget -O /usr/local/share/keyring/devkitpro-pub.gpg https://apt.devkitpro.org/devkitpro-pub.gpg
# fi
#
# if [[ ! -f /etc/apt/sources.list.d/devkitpro.list ]]; then
# echo "deb [signed-by=/usr/local/share/keyring/devkitpro-pub.gpg] https://apt.devkitpro.org stable main" | sudo tee -a /etc/apt/sources.list.d/devkitpro.list
# fi
#
# sudo apt-get update -qq
# sudo apt-get install -qq devkitpro-pacman
#
# sudo dkp-pacman --noconfirm -Sy
# sudo dkp-pacman --noconfirm -Syu
# sudo dkp-pacman --noconfirm -Sy switch-dev switch-libpng switch-libjpeg-turbo switch-zlib switch-tools switch-cmake switch-mesa switch-libdrm_nouveau switch-glm switch-glad
# - name: Install modified SDL2
# run: |
# cd ..
# git clone https://github.com/Wohlstand/SDL.git -b switch-sdl2-2.0.14-dev --depth 1 SDL2
# cd SDL2
# mkdir build
# cd build
# cmake -G Ninja -DCMAKE_TOOLCHAIN_FILE=$DEVKITPRO/cmake/Switch.cmake -DCMAKE_PREFIX_PATH=/opt/devkitpro/portlibs/switch-local -DCMAKE_PREFIX_PATH=/opt/devkitpro/portlibs/switch-local ..
# cmake --build . --target all -j4
# sudo cmake --build . --target install
- name: Configure
shell: bash
run: |
cmake -B build -G "${{ matrix.config.generator }}" -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} ${{ matrix.config.extra_options }} .
- name: Build
shell: bash
run: |
cmake --build build --target all -j4
- name: Create Package
if: success()
shell: bash
run: |
cd build
mkdir package
mkdir "package/${{ matrix.config.subdir_name }}"
cp ../changelog.txt "package/${{ matrix.config.subdir_name }}/"
cp ../LICENSE "package/${{ matrix.config.subdir_name }}/License.TheXTech.txt"
cat ../docs/README_SWITCH.md ../README.md >> "package/${{ matrix.config.subdir_name }}/README.md"
cp output/bin/thextech.nro "package/${{ matrix.config.subdir_name }}/"
cd package
zip -9 -r "thextech-switch-${BRANCH_NAME}.zip" "${{ matrix.config.subdir_name }}"
rm -Rf "${{ matrix.config.subdir_name }}"
cd ../..
- name: Upload artifact
if: success()
uses: actions/upload-artifact@v4
continue-on-error: true
with:
path: build/package/*.zip
name: ${{ matrix.config.name }} ${{ matrix.config.build_type }}
- name: Deploy to builds.wohlsoft.ru
if: success() && github.event_name != 'pull_request' && steps.upload-check.outputs.available == 'true'
continue-on-error: true
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
UPLOAD_LIST="set ssl:verify-certificate no;"
for q in ./build/package/*.zip; do
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} $q;"
done
lftp -e "${UPLOAD_LIST} exit" -u ${{ secrets.builds_login }},${{ secrets.builds_password }} ${{ secrets.builds_host }}
- name: List Build Directory
if: always()
shell: bash
run: |
git status
ls -lR build
================================================
FILE: .github/workflows/sync-langs.yml
================================================
name: Languages sync CI
on:
push:
branches:
- main
- versus-ci-langsync
paths:
- .github/workflows/sync-langs.yml
- .github/ci-helper/translate_sync_assets.sh
- .github/ci-helper/translate_update.sh
- .github/ci-helper/translate_patcher.py
- resources/languages/**.json
- android-project/thextech/src/main/res/values/strings.xml
- android-project/thextech/src/main/res/values/arrays.xml
- android-project/thextech/src/main/res/values-**/strings.xml
- android-project/thextech/src/main/res/values-**/arrays.xml
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: Syncing languages
runs-on: ubuntu-latest
permissions:
contents: write
packages: read
container: ghcr.io/thextech/wohlnet-ci-ubuntu2404:latest
strategy:
fail-fast: true
steps:
- uses: TheXTech/branch-name@v0.1
- uses: TheXTech/checkout@v0.1
- name: Adding Gitea SSH key
shell: bash
env:
SSH_KEY: ${{secrets.GITEA_SYNCBOT_SSH_KEY}}
run: |
mkdir ~/.ssh
chmod 700 ~/.ssh
eval `ssh-agent -s`
ssh-add - <<< "${SSH_KEY}"
ls -la ~/.ssh/
ssh -o StrictHostKeyChecking=no -T git@gitea.wohlsoft.ru
echo "SSH_AUTH_SOCK=${SSH_AUTH_SOCK}" >> $GITHUB_ENV
git config --global user.email "ci@example.ru"
git config --global user.name "Language Sync Bot"
- name: Copy updated translations to stable branch
shell: bash
env:
GIT_AUTHOR: "github-actions[bot] <github-actions[bot]@users.noreply.github.com>"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_ACTOR: ${{ secrets.GITHUB_ACTOR }}
run: |
bash .github/ci-helper/translate_sync_to_stable.sh
- name: Apply update to all the translations
shell: bash
env:
GIT_AUTHOR: ${{secrets.GITEA_SYNCBOT_AUTHOR}}
run: |
bash .github/ci-helper/translate_sync_assets.sh
================================================
FILE: .github/workflows/ubuntu-deb-ci.yml
================================================
name: Ubuntu DEB CI
on:
push:
branches:
- main
- stable*
- versus-ci
- versus-ci-ubuntu
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: "${{ matrix.config.name }} | ${{ matrix.config.build_type }}"
runs-on: ${{ matrix.config.os }}
container: ${{ matrix.config.container }}
strategy:
fail-fast: false
matrix:
config:
- {
name: "DEB Ubuntu 14.04 x86_64",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu1404-64bit:latest",
cross: false,
extra_options: "-DPGE_SHARED_SDLMIXER=OFF -DUSE_SYSTEM_SDL2=OFF -DUSE_FREEIMAGE_SYSTEM_LIBS=ON \
-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=MinSizeRel \
-DTHEXTECH_BUILD_GL_ES_LEGACY=OFF \
-DTHEXTECH_PACKAGE_NAME=\"thextech-bin\" \
-DTHEXTECH_INSTALLER_PACKAGE_NAME=\"thextech-bin\" \
-DTHEXTECH_USE_ANGLE_TRANSLATOR=OFF \
-DCMAKE_C_COMPILER=gcc-8 \
-DCMAKE_CXX_COMPILER=g++-8 \
-DCPACK_GENERATOR=DEB \
-DCPACK_DEBIAN_PACKAGE_HOMEPAGE=\"https://wohlsoft.ru\" \
-DCPACK_DEBIAN_PACKAGE_RELEASE=${GITHUB_RUN_NUMBER} \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE=amd64 \
-DCPACK_DEBIAN_PACKAGE_DEPENDS=\"libc6 (>= 2.19), libpng12-0 (>= 1.2.50), libjpeg-turbo8 (>= 1.3.0) | libturbojpeg0 (>= 1.3.0), libasound2 (>= 1.0.27), libpulse0\" \
-DCPACK_DEBIAN_PACKAGE_DESCRIPTION=\"TheXTech - the modern C++ port and successor of the SMBX engine\"",
deps_cmdline: "echo 'Ubuntu 14 x86_64, everything pre-installed'",
executable_name: "thextech",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-14-04-amd64",
upload_directory: "www/ubuntu-14-04/"
}
- {
name: "DEB Ubuntu 14.04 32bit",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu1404-32bit:latest",
cross: false,
extra_options: "-DPGE_SHARED_SDLMIXER=OFF \
-DUSE_STATIC_LIBC=ON \
-DUSE_SYSTEM_LIBS=OFF \
-DUSE_SHARED_FREEIMAGE=OFF \
-DUSE_SYSTEM_SDL2=OFF \
-DUSE_FREEIMAGE_SYSTEM_LIBS=OFF \
-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=MinSizeRel \
-DTHEXTECH_BUILD_GL_ES_LEGACY=OFF \
-DTHEXTECH_PACKAGE_NAME=\"thextech-bin\" \
-DTHEXTECH_INSTALLER_PACKAGE_NAME=\"thextech-bin\" \
-DTHEXTECH_USE_ANGLE_TRANSLATOR=OFF \
-DCMAKE_C_COMPILER=/usr/bin/i686-linux-gnu-gcc-8 \
-DCMAKE_CXX_COMPILER=/usr/bin/i686-linux-gnu-g++-8 \
-DCPACK_GENERATOR=DEB \
-DCPACK_DEBIAN_PACKAGE_HOMEPAGE=\"https://wohlsoft.ru\" \
-DCPACK_DEBIAN_PACKAGE_RELEASE=${GITHUB_RUN_NUMBER} \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE=i386 \
-DCPACK_DEBIAN_PACKAGE_DEPENDS=\"libc6 (>= 2.19), libpng12-0 (>= 1.2.50), libjpeg-turbo8 (>= 1.3.0) | libturbojpeg0 (>= 1.3.0), libasound2 (>= 1.0.27), libpulse0\" \
-DCPACK_DEBIAN_PACKAGE_DESCRIPTION=\"TheXTech - the modern C++ port and successor of the SMBX engine\"",
deps_cmdline: "echo 'Ubuntu 14 x86_32, everything pre-installed'; ln -sf /usr/bin/i686-linux-gnu-gcc-8 /usr/bin/gcc; ln -sf /usr/bin/i686-linux-gnu-g++-8 /usr/bin/g++;",
executable_name: "thextech",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-14-04-i386",
upload_directory: "www/ubuntu-14-04/"
}
- {
name: "DEB Ubuntu 16.04 x86_64",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu1604-64bit:latest",
cross: false,
extra_options: "-DPGE_SHARED_SDLMIXER=OFF -DUSE_SYSTEM_SDL2=OFF -DUSE_FREEIMAGE_SYSTEM_LIBS=ON \
-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=MinSizeRel \
-DTHEXTECH_BUILD_GL_ES_LEGACY=OFF \
-DTHEXTECH_PACKAGE_NAME=\"thextech-bin\" \
-DTHEXTECH_INSTALLER_PACKAGE_NAME=\"thextech-bin\" \
-DCPACK_GENERATOR=DEB \
-DCPACK_DEBIAN_PACKAGE_HOMEPAGE=\"https://wohlsoft.ru\" \
-DCPACK_DEBIAN_PACKAGE_RELEASE=${GITHUB_RUN_NUMBER} \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE=amd64 \
-DCPACK_DEBIAN_PACKAGE_DEPENDS=\"libc6 (>= 2.23), libpng12-0 (>= 1.2.54), libjpeg-turbo8 (>= 1.4.2) | libturbojpeg0 (>= 1.4.2), libasound2 (>= 1.1.0), libpulse0\" \
-DCPACK_DEBIAN_PACKAGE_DESCRIPTION=\"TheXTech - the modern C++ port and successor of the SMBX engine\"",
deps_cmdline: "echo 'Ubuntu 16 x86_64, everything pre-installed'",
executable_name: "thextech",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-16-04-amd64",
upload_directory: "www/ubuntu-16-04/"
}
- {
name: "DEB Ubuntu 16.04 32bit",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu1604-32bit:latest",
cross: false,
extra_options: "-DPGE_SHARED_SDLMIXER=OFF \
-DUSE_STATIC_LIBC=ON \
-DUSE_SYSTEM_LIBS=OFF \
-DUSE_SHARED_FREEIMAGE=OFF \
-DUSE_SYSTEM_SDL2=OFF \
-DUSE_FREEIMAGE_SYSTEM_LIBS=OFF \
-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=MinSizeRel \
-DTHEXTECH_BUILD_GL_ES_LEGACY=OFF \
-DTHEXTECH_PACKAGE_NAME=\"thextech-bin\" \
-DTHEXTECH_INSTALLER_PACKAGE_NAME=\"thextech-bin\" \
-DCPACK_GENERATOR=DEB \
-DCPACK_DEBIAN_PACKAGE_HOMEPAGE=\"https://wohlsoft.ru\" \
-DCPACK_DEBIAN_PACKAGE_RELEASE=${GITHUB_RUN_NUMBER} \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE=i386 \
-DCPACK_DEBIAN_PACKAGE_DEPENDS=\"libc6 (>= 2.23), libpng12-0 (>= 1.2.54), libjpeg-turbo8 (>= 1.4.2) | libturbojpeg0 (>= 1.4.2), libasound2 (>= 1.1.0), libpulse0\" \
-DCPACK_DEBIAN_PACKAGE_DESCRIPTION=\"TheXTech - the modern C++ port and successor of the SMBX engine\" \
-DCMAKE_TOOLCHAIN_FILE=`pwd`/cmake/ci_linux_gcc_toolchain_x32.cmake",
deps_cmdline: "echo 'Ubuntu 16 x86_32, everything pre-installed'",
executable_name: "thextech",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-16-04-i386",
upload_directory: "www/ubuntu-16-04/"
}
- {
name: "DEB Ubuntu 16.04 armhf",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu1604-armhf-cross:latest",
cross: true,
extra_options: "-DPGE_SHARED_SDLMIXER=OFF \
-DUSE_STATIC_LIBC=ON \
-DUSE_SYSTEM_LIBS=OFF \
-DUSE_SHARED_FREEIMAGE=OFF \
-DUSE_SYSTEM_SDL2=OFF \
-DUSE_FREEIMAGE_SYSTEM_LIBS=OFF \
-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=MinSizeRel \
-DTHEXTECH_BUILD_GL_ES_LEGACY=OFF \
-DTHEXTECH_PACKAGE_NAME=\"thextech-bin\" \
-DTHEXTECH_INSTALLER_PACKAGE_NAME=\"thextech-bin\" \
-DCPACK_GENERATOR=DEB \
-DCPACK_DEBIAN_PACKAGE_HOMEPAGE=\"https://wohlsoft.ru\" \
-DCPACK_DEBIAN_PACKAGE_RELEASE=${GITHUB_RUN_NUMBER} \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE=armhf \
-DCPACK_DEBIAN_PACKAGE_DEPENDS=\"libc6 (>= 2.23), libpng12-0 (>= 1.2.54), libjpeg-turbo8 (>= 1.4.2) | libturbojpeg0 (>= 1.4.2), libasound2 (>= 1.1.0), libpulse0\" \
-DCPACK_DEBIAN_PACKAGE_DESCRIPTION=\"TheXTech - the modern C++ port and successor of the SMBX engine\" \
-DCMAKE_TOOLCHAIN_FILE=`pwd`/cmake/ci_linux_gcc_toolchain_armhf.cmake",
deps_cmdline: "echo 'Ubuntu 16 armhf, cross from x86_64, everything pre-installed'",
executable_name: "thextech",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-16-04-armhf",
upload_directory: "www/ubuntu-16-04/"
}
- {
name: "DEB Ubuntu 18.04 x86_64",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu1804:latest",
cross: false,
extra_options: "-DPGE_SHARED_SDLMIXER=OFF -DUSE_SYSTEM_SDL2=ON -DUSE_FREEIMAGE_SYSTEM_LIBS=ON \
-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=MinSizeRel \
-DTHEXTECH_BUILD_GL_ES_LEGACY=OFF \
-DTHEXTECH_PACKAGE_NAME=\"thextech-bin\" \
-DTHEXTECH_INSTALLER_PACKAGE_NAME=\"thextech-bin\" \
-DCPACK_GENERATOR=DEB \
-DCPACK_DEBIAN_PACKAGE_HOMEPAGE=\"https://wohlsoft.ru\" \
-DCPACK_DEBIAN_PACKAGE_RELEASE=${GITHUB_RUN_NUMBER} \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE=amd64 \
-DCPACK_DEBIAN_PACKAGE_DEPENDS=\"libc6 (>= 2.27), libsdl2-2.0-0 (>= 2.0.8), libpng16-16 (>= 1.6.34), libjpeg-turbo8 (>= 1.5.2) | libturbojpeg0 (>= 1.5.2), libasound2 (>= 1.1.3), libpulse0\" \
-DCPACK_DEBIAN_PACKAGE_DESCRIPTION=\"TheXTech - the modern C++ port and successor of the SMBX engine\"",
deps_cmdline: "echo 'Ubuntu 18 x86_32, everything pre-installed'",
executable_name: "thextech",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-18-04-amd64",
upload_directory: "www/ubuntu-18-04/"
}
- {
name: "DEB Ubuntu 20.04 x86_64",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu2004:latest",
cross: false,
extra_options: "-DPGE_SHARED_SDLMIXER=OFF -DUSE_SYSTEM_SDL2=ON -DUSE_FREEIMAGE_SYSTEM_LIBS=ON \
-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=MinSizeRel \
-DTHEXTECH_PACKAGE_NAME=\"thextech-bin\" \
-DTHEXTECH_INSTALLER_PACKAGE_NAME=\"thextech-bin\" \
-DCPACK_GENERATOR=DEB \
-DCPACK_DEBIAN_PACKAGE_HOMEPAGE=\"https://wohlsoft.ru\" \
-DCPACK_DEBIAN_PACKAGE_RELEASE=${GITHUB_RUN_NUMBER} \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE=amd64 \
-DCPACK_DEBIAN_PACKAGE_DEPENDS=\"libc6 (>= 2.31), libsdl2-2.0-0 (>= 2.0.10), libpng16-16 (>= 1.6.37), libjpeg-turbo8 (>= 2.0.3) | libturbojpeg0 (>= 2.0.3), libasound2 (>= 1.2.2), libpulse0\" \
-DCPACK_DEBIAN_PACKAGE_DESCRIPTION=\"TheXTech - the modern C++ port and successor of the SMBX engine\"",
deps_cmdline: "echo 'Ubuntu 20 x86_32, everything pre-installed'",
executable_name: "thextech",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-20-04-amd64",
upload_directory: "www/ubuntu-20-04/"
}
- {
name: "DEB Ubuntu 20.04 arm64",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu2004-arm64-cross:latest",
cross: true,
extra_options: "-DPGE_SHARED_SDLMIXER=OFF -DUSE_SYSTEM_SDL2=ON -DUSE_FREEIMAGE_SYSTEM_LIBS=ON \
-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=MinSizeRel \
-DTHEXTECH_PACKAGE_NAME=\"thextech-bin\" \
-DTHEXTECH_INSTALLER_PACKAGE_NAME=\"thextech-bin\" \
-DCPACK_GENERATOR=DEB \
-DCPACK_DEBIAN_PACKAGE_HOMEPAGE=\"https://wohlsoft.ru\" \
-DCPACK_DEBIAN_PACKAGE_RELEASE=${GITHUB_RUN_NUMBER} \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE=arm64 \
-DCPACK_DEBIAN_PACKAGE_DEPENDS=\"libc6 (>= 2.31), libsdl2-2.0-0 (>= 2.0.10), libpng16-16 (>= 1.6.37), libjpeg-turbo8 (>= 2.0.3) | libturbojpeg0 (>= 2.0.3), libasound2 (>= 1.2.2), libpulse0\" \
-DCPACK_DEBIAN_PACKAGE_DESCRIPTION=\"TheXTech - the modern C++ port and successor of the SMBX engine\" \
-DCMAKE_TOOLCHAIN_FILE=`pwd`/cmake/ci_linux_gcc_toolchain_arm64.cmake",
deps_cmdline: "echo 'Ubuntu 20 arm64, cross from x86_64, everything pre-installed'",
executable_name: "thextech",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-20-04-aarch64",
upload_directory: "www/ubuntu-20-04/"
}
- {
name: "DEB Ubuntu 20.04 armhf",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu2004-armhf-cross:latest",
cross: true,
extra_options: "-DPGE_SHARED_SDLMIXER=OFF -DUSE_SYSTEM_SDL2=ON -DUSE_FREEIMAGE_SYSTEM_LIBS=ON \
-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=MinSizeRel \
-DTHEXTECH_PACKAGE_NAME=\"thextech-bin\" \
-DTHEXTECH_INSTALLER_PACKAGE_NAME=\"thextech-bin\" \
-DCPACK_GENERATOR=DEB \
-DCPACK_DEBIAN_PACKAGE_HOMEPAGE=\"https://wohlsoft.ru\" \
-DCPACK_DEBIAN_PACKAGE_RELEASE=${GITHUB_RUN_NUMBER} \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE=armhf \
-DCPACK_DEBIAN_PACKAGE_DEPENDS=\"libc6 (>= 2.31), libsdl2-2.0-0 (>= 2.0.10), libpng16-16 (>= 1.6.37), libjpeg-turbo8 (>= 2.0.3) | libturbojpeg0 (>= 2.0.3), libasound2 (>= 1.2.2), libpulse0\" \
-DCPACK_DEBIAN_PACKAGE_DESCRIPTION=\"TheXTech - the modern C++ port and successor of the SMBX engine\" \
-DCMAKE_TOOLCHAIN_FILE=`pwd`/cmake/ci_linux_gcc_toolchain_armhf.cmake",
deps_cmdline: "echo 'Ubuntu 20 armhf, cross from x86_64, everything pre-installed'",
executable_name: "thextech",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-20-04-armhf",
upload_directory: "www/ubuntu-20-04/"
}
- {
name: "DEB Ubuntu 22.04 x86_64",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu2204:latest",
cross: false,
extra_options: "-DPGE_SHARED_SDLMIXER=OFF -DUSE_SYSTEM_SDL2=ON -DUSE_FREEIMAGE_SYSTEM_LIBS=ON \
-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=MinSizeRel \
-DTHEXTECH_PACKAGE_NAME=\"thextech-bin\" \
-DTHEXTECH_INSTALLER_PACKAGE_NAME=\"thextech-bin\" \
-DCPACK_GENERATOR=DEB \
-DCPACK_DEBIAN_PACKAGE_HOMEPAGE=\"https://wohlsoft.ru\" \
-DCPACK_DEBIAN_PACKAGE_RELEASE=${GITHUB_RUN_NUMBER} \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE=amd64 \
-DCPACK_DEBIAN_PACKAGE_DEPENDS=\"libc6 (>= 2.35), libsdl2-2.0-0 (>= 2.0.20), libpng16-16 (>= 1.6.37), libjpeg-turbo8 (>= 2.1.2) | libturbojpeg0 (>= 2.1.2), libasound2 (>= 1.2.6), libpulse0\" \
-DCPACK_DEBIAN_PACKAGE_DESCRIPTION=\"TheXTech - the modern C++ port and successor of the SMBX engine\"",
deps_cmdline: "echo 'Ubuntu 22 x86_32, everything pre-installed'",
executable_name: "thextech",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-22-04-amd64",
upload_directory: "www/ubuntu-22-04/"
}
- {
name: "DEB Ubuntu 22.04 aarch64",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu2204-arm64-cross:latest",
cross: true,
extra_options: "-DPGE_SHARED_SDLMIXER=OFF -DUSE_SYSTEM_SDL2=ON -DUSE_FREEIMAGE_SYSTEM_LIBS=ON \
-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=MinSizeRel \
-DTHEXTECH_PACKAGE_NAME=\"thextech-bin\" \
-DTHEXTECH_INSTALLER_PACKAGE_NAME=\"thextech-bin\" \
-DCPACK_GENERATOR=DEB \
-DCPACK_DEBIAN_PACKAGE_HOMEPAGE=\"https://wohlsoft.ru\" \
-DCPACK_DEBIAN_PACKAGE_RELEASE=${GITHUB_RUN_NUMBER} \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE=arm64 \
-DCPACK_DEBIAN_PACKAGE_DEPENDS=\"libc6 (>= 2.35), libsdl2-2.0-0 (>= 2.0.20), libpng16-16 (>= 1.6.37), libjpeg-turbo8 (>= 2.1.2) | libturbojpeg0 (>= 2.1.2), libasound2 (>= 1.2.6), libpulse0\" \
-DCPACK_DEBIAN_PACKAGE_DESCRIPTION=\"TheXTech - the modern C++ port and successor of the SMBX engine\" \
-DCMAKE_TOOLCHAIN_FILE=`pwd`/cmake/ci_linux_gcc_toolchain_arm64.cmake",
deps_cmdline: "echo 'Ubuntu 22 arm64, cross from x86_64, everything pre-installed'",
executable_name: "thextech",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-22-04-aarch64",
upload_directory: "www/ubuntu-22-04/"
}
- {
name: "DEB Ubuntu 24.04 x86_64",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu2404:latest",
cross: false,
extra_options: "-DPGE_SHARED_SDLMIXER=OFF -DUSE_SYSTEM_SDL2=ON -DUSE_FREEIMAGE_SYSTEM_LIBS=ON \
-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=MinSizeRel \
-DTHEXTECH_PACKAGE_NAME=\"thextech-bin\" \
-DTHEXTECH_INSTALLER_PACKAGE_NAME=\"thextech-bin\" \
-DCPACK_GENERATOR=DEB \
-DCPACK_DEBIAN_PACKAGE_HOMEPAGE=\"https://wohlsoft.ru\" \
-DCPACK_DEBIAN_PACKAGE_RELEASE=${GITHUB_RUN_NUMBER} \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE=amd64 \
-DCPACK_DEBIAN_PACKAGE_DEPENDS=\"libc6 (>= 2.38), libsdl2-2.0-0 (>= 2.30.0), libpng16-16 (>= 1.6.43), libjpeg-turbo8 (>= 2.1.5), libasound2 (>= 1.2.10), libpulse0\" \
-DCPACK_DEBIAN_PACKAGE_DESCRIPTION=\"TheXTech - the modern C++ port and successor of the SMBX engine\"",
deps_cmdline: "echo 'Ubuntu 24 x86_64, everything pre-installed'",
executable_name: "thextech",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-24-04-amd64",
upload_directory: "www/ubuntu-24-04/"
}
- {
name: "DEB Debian 13 (Trixie) x86_64",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-debian13:latest",
cross: false,
extra_options: "-DPGE_SHARED_SDLMIXER=OFF -DUSE_SYSTEM_SDL2=ON -DUSE_FREEIMAGE_SYSTEM_LIBS=ON \
-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=MinSizeRel \
-DTHEXTECH_PACKAGE_NAME=\"thextech-bin\" \
-DTHEXTECH_INSTALLER_PACKAGE_NAME=\"thextech-bin\" \
-DCPACK_GENERATOR=DEB \
-DCPACK_DEBIAN_PACKAGE_HOMEPAGE=\"https://wohlsoft.ru\" \
-DCPACK_DEBIAN_PACKAGE_RELEASE=${GITHUB_RUN_NUMBER} \
-DCPACK_DEBIAN_PACKAGE_ARCHITECTURE=amd64 \
-DCPACK_DEBIAN_PACKAGE_DEPENDS=\"libc6 (>= 2.38), libsdl2-2.0-0 (>= 2.30.0), libpng16-16 (>= 1.6.43), libturbojpeg0 (>= 2.1.5), libasound2 (>= 1.2.10), libpulse0\" \
-DCPACK_DEBIAN_PACKAGE_DESCRIPTION=\"TheXTech - the modern C++ port and successor of the SMBX engine\"",
deps_cmdline: "echo 'Debian 13 Trixie x86_64, everything pre-installed'",
executable_name: "thextech",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "debian-13-trixie-amd64",
upload_directory: "www/debian-13/"
}
steps:
- name: Host info
shell: bash
run: |
uname -a
cat /proc/cpuinfo
- name: Check for the upload support
id: upload-check
shell: bash
run: |
if [[ "${{ secrets.builds_login }}" != '' && \
"${{ secrets.builds_password }}" != '' && \
"${{ secrets.builds_host }}" != '' ]]; then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
- name: Install Dependencies
shell: bash
run: |
if [[ ! -z "${{ matrix.config.deps_cmdline }}" ]]; then
eval ${{ matrix.config.deps_cmdline }}
fi
cmake --version
- uses: TheXTech/checkout@v0.1
- uses: TheXTech/branch-name@v0.1
- name: Pull submodules
shell: bash
run: |
git submodule update --init --recursive
- name: Configure
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
echo "PATH environment: ${PATH}"
fi
if [[ "${{ secrets.DISCORD_APP_ID }}" != '' ]]; then
LOCAL_EXTRA_SETUP="-DTHEXTECH_ENABLE_DISCORD_RPC=ON -DTHEXTECH_DISCORD_APPID=\"${{ secrets.DISCORD_APP_ID }}\""
fi
cmake -B build -G "${{ matrix.config.generator }}" -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} ${{ matrix.config.extra_options }} ${LOCAL_EXTRA_SETUP} .
- name: Build
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
export MAKEFLAGS=--keep-going
cmake --build build --config ${{ matrix.config.build_type }} --parallel 3
- name: List dependent libraries
if: success() && runner.os == 'Linux'
shell: bash
run: |
file build/output/bin/${{ matrix.config.executable_name }}
if [[ "${{ matrix.config.cross}}" != true ]]; then
ldd build/output/bin/${{ matrix.config.executable_name }}
fi
- name: Create DEB packages
shell: bash
id: create_package
if: success()
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
cd build
cpack .
mv *.deb thextech-bin-${{ matrix.config.package_filename_suffix }}-${BRANCH_NAME}.deb
cd ..
- name: Upload artifact
if: success()
uses: actions/upload-artifact@v4
continue-on-error: true
with:
path: build/*.deb
name: TheXTech ${{ matrix.config.name }} ${{ matrix.config.build_type }}
- name: Deploy to builds.wohlsoft.ru
if: steps.create_package.outcome == 'success' && github.event_name != 'pull_request' && steps.upload-check.outputs.available == 'true'
continue-on-error: true
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
UPLOAD_LIST="set ssl:verify-certificate no;"
for q in ./build/*.deb; do
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} $q;"
done
lftp -e "${UPLOAD_LIST} exit" -u ${{ secrets.builds_login }},${{ secrets.builds_password }} ${{ secrets.builds_host }}
- name: List Build Directory
if: always()
shell: bash
run: |
git status
ls -lR build
================================================
FILE: .github/workflows/ubuntu-tar-ci.yml
================================================
name: Ubuntu TAR CI
on:
push:
branches:
- main
- stable*
- versus-ci
- versus-ci-ubuntu
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: "${{ matrix.config.name }} | ${{ matrix.config.build_type }}"
runs-on: ${{ matrix.config.os }}
container: ${{ matrix.config.container }}
strategy:
fail-fast: false
matrix:
config:
- {
name: "TAR Ubuntu 14.04 x86_64",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu1404-64bit:latest",
cross: false,
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DUSE_STATIC_LIBC=ON \
-DUSE_SYSTEM_LIBS=OFF \
-DUSE_SYSTEM_SDL2=OFF \
-DUSE_SHARED_FREEIMAGE=OFF \
-DPGE_SHARED_SDLMIXER=OFF \
-DTHEXTECH_BUILD_GL_ES_LEGACY=OFF \
-DTHEXTECH_USE_ANGLE_TRANSLATOR=OFF \
-DCMAKE_C_COMPILER=gcc-8 \
-DCMAKE_CXX_COMPILER=g++-8",
deps_cmdline: "echo 'Ubuntu 14 x86_64, everything pre-installed'",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-14-04-amd64",
upload_directory: "www/ubuntu-14-04/"
}
- {
name: "TAR Ubuntu 14.04 x86_64 (legacy floats)",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu1404-64bit:latest",
cross: false,
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DUSE_STATIC_LIBC=ON \
-DUSE_SYSTEM_LIBS=OFF \
-DUSE_SYSTEM_SDL2=OFF \
-DUSE_SHARED_FREEIMAGE=OFF \
-DPGE_SHARED_SDLMIXER=OFF \
-DTHEXTECH_BUILD_GL_ES_LEGACY=OFF \
-DTHEXTECH_USE_ANGLE_TRANSLATOR=OFF \
-DTHEXTECH_FIXED_POINT=OFF \
-DCMAKE_C_COMPILER=gcc-8 \
-DCMAKE_CXX_COMPILER=g++-8",
deps_cmdline: "echo 'Ubuntu 14 x86_64, everything pre-installed'",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-14-04-amd64-legacy-floats",
upload_directory: "www/ubuntu-14-04/"
}
- {
name: "TAR Ubuntu 14.04 32bit",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu1404-32bit:latest",
cross: false,
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DUSE_STATIC_LIBC=ON \
-DUSE_SYSTEM_LIBS=OFF \
-DUSE_SYSTEM_SDL2=OFF \
-DUSE_SHARED_FREEIMAGE=OFF \
-DPGE_SHARED_SDLMIXER=OFF \
-DTHEXTECH_BUILD_GL_ES_LEGACY=OFF \
-DTHEXTECH_USE_ANGLE_TRANSLATOR=OFF \
-DCMAKE_C_COMPILER=/usr/bin/i686-linux-gnu-gcc-8 \
-DCMAKE_CXX_COMPILER=/usr/bin/i686-linux-gnu-g++-8",
deps_cmdline: "echo 'Ubuntu 14 x86_32, everything pre-installed'; ln -sf /usr/bin/i686-linux-gnu-gcc-8 /usr/bin/gcc; ln -sf /usr/bin/i686-linux-gnu-g++-8 /usr/bin/g++;",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-14-04-i386",
upload_directory: "www/ubuntu-14-04/"
}
- {
name: "TAR Ubuntu 16.04 x86_64",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu1604-64bit:latest",
cross: false,
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DUSE_STATIC_LIBC=ON \
-DUSE_SYSTEM_LIBS=OFF \
-DUSE_SYSTEM_SDL2=OFF \
-DUSE_SHARED_FREEIMAGE=OFF \
-DPGE_SHARED_SDLMIXER=OFF \
-DTHEXTECH_BUILD_GL_ES_LEGACY=OFF",
deps_cmdline: "echo 'Ubuntu 16 x86_64, everything pre-installed'",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-16-04-amd64",
upload_directory: "www/ubuntu-16-04/"
}
- {
name: "TAR Ubuntu 16.04 x86_64 (legacy floats)",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu1604-64bit:latest",
cross: false,
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DUSE_STATIC_LIBC=ON \
-DUSE_SYSTEM_LIBS=OFF \
-DUSE_SYSTEM_SDL2=OFF \
-DUSE_SHARED_FREEIMAGE=OFF \
-DPGE_SHARED_SDLMIXER=OFF \
-DTHEXTECH_BUILD_GL_ES_LEGACY=OFF \
-DTHEXTECH_FIXED_POINT=OFF",
deps_cmdline: "echo 'Ubuntu 16 x86_64, everything pre-installed'",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-16-04-amd64-legacy-floats",
upload_directory: "www/ubuntu-16-04/"
}
- {
name: "TAR Ubuntu 16.04 32bit",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu1604-32bit:latest",
cross: false,
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DUSE_STATIC_LIBC=ON \
-DUSE_SYSTEM_LIBS=OFF \
-DUSE_SYSTEM_SDL2=OFF \
-DUSE_SHARED_FREEIMAGE=OFF \
-DPGE_SHARED_SDLMIXER=OFF \
-DTHEXTECH_BUILD_GL_ES_LEGACY=OFF \
-DCMAKE_TOOLCHAIN_FILE=`pwd`/cmake/ci_linux_gcc_toolchain_x32.cmake",
deps_cmdline: "echo 'Ubuntu 16 x86_32, everything pre-installed'",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-16-04-i386",
upload_directory: "www/ubuntu-16-04/"
}
- {
name: "TAR Ubuntu 16.04 armhf",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu1604-armhf-cross:latest",
cross: true,
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DUSE_STATIC_LIBC=ON \
-DUSE_SYSTEM_LIBS=OFF \
-DUSE_SYSTEM_SDL2=OFF \
-DUSE_SHARED_FREEIMAGE=OFF \
-DPGE_SHARED_SDLMIXER=OFF \
-DCMAKE_TOOLCHAIN_FILE=`pwd`/cmake/ci_linux_gcc_toolchain_armhf.cmake",
deps_cmdline: "echo 'Ubuntu 16 armhf, cross from x86_64, everything pre-installed'",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-16-04-armhf",
upload_directory: "www/ubuntu-16-04/"
}
- {
name: "TAR Ubuntu 18.04 x86_64",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu1804:latest",
cross: false,
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DUSE_STATIC_LIBC=ON \
-DUSE_SYSTEM_LIBS=OFF \
-DUSE_SYSTEM_SDL2=OFF \
-DUSE_SHARED_FREEIMAGE=OFF \
-DPGE_SHARED_SDLMIXER=OFF \
-DTHEXTECH_BUILD_GL_ES_LEGACY=OFF",
deps_cmdline: "echo 'Ubuntu 18 x86_32, everything pre-installed'",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-18-04-amd64",
upload_directory: "www/ubuntu-18-04/"
}
- {
name: "TAR Ubuntu 20.04 x86_64",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu2004:latest",
cross: false,
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DUSE_STATIC_LIBC=ON \
-DUSE_SYSTEM_LIBS=OFF \
-DUSE_SYSTEM_SDL2=OFF \
-DUSE_SHARED_FREEIMAGE=OFF \
-DPGE_SHARED_SDLMIXER=OFF",
deps_cmdline: "echo 'Ubuntu 20 x86_32, everything pre-installed'",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-20-04-amd64",
upload_directory: "www/ubuntu-20-04/"
}
- {
name: "TAR Ubuntu 20.04 aarch64",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu2004-arm64-cross:latest",
cross: true,
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DUSE_STATIC_LIBC=ON \
-DUSE_SYSTEM_LIBS=OFF \
-DUSE_SYSTEM_SDL2=OFF \
-DUSE_SHARED_FREEIMAGE=OFF \
-DPGE_SHARED_SDLMIXER=OFF \
-DCMAKE_TOOLCHAIN_FILE=`pwd`/cmake/ci_linux_gcc_toolchain_arm64.cmake",
deps_cmdline: "echo 'Ubuntu 20 arm64, cross from x86_64, everything pre-installed'",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-20-04-aarch64",
upload_directory: "www/ubuntu-20-04/"
}
- {
name: "TAR Ubuntu 20.04 armhf",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu2004-armhf-cross:latest",
cross: true,
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DUSE_STATIC_LIBC=ON \
-DUSE_SYSTEM_LIBS=OFF \
-DUSE_SYSTEM_SDL2=OFF \
-DUSE_SHARED_FREEIMAGE=OFF \
-DPGE_SHARED_SDLMIXER=OFF \
-DCMAKE_TOOLCHAIN_FILE=`pwd`/cmake/ci_linux_gcc_toolchain_armhf.cmake",
deps_cmdline: "echo 'Ubuntu 20 armhf, cross from x86_64, everything pre-installed'",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-20-04-armhf",
upload_directory: "www/ubuntu-20-04/"
}
- {
name: "TAR Ubuntu 22.04 x86_64",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu2204:latest",
cross: false,
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DUSE_STATIC_LIBC=ON \
-DUSE_SYSTEM_LIBS=OFF \
-DUSE_SYSTEM_SDL2=OFF \
-DUSE_SHARED_FREEIMAGE=OFF \
-DPGE_SHARED_SDLMIXER=OFF",
deps_cmdline: "echo 'Ubuntu 22 x86_32, everything pre-installed'",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-22-04-amd64",
upload_directory: "www/ubuntu-22-04/"
}
- {
name: "TAR Ubuntu 22.04 aarch64",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu2204-arm64-cross:latest",
cross: true,
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DUSE_STATIC_LIBC=ON \
-DUSE_SYSTEM_LIBS=OFF \
-DUSE_SYSTEM_SDL2=OFF \
-DUSE_SHARED_FREEIMAGE=OFF \
-DPGE_SHARED_SDLMIXER=OFF \
-DCMAKE_TOOLCHAIN_FILE=`pwd`/cmake/ci_linux_gcc_toolchain_arm64.cmake",
deps_cmdline: "echo 'Ubuntu 22 arm64, cross from x86_64, everything pre-installed'",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-22-04-aarch64",
upload_directory: "www/ubuntu-22-04/"
}
- {
name: "TAR Ubuntu 24.04 x86_64",
os: ubuntu-latest,
container: "ghcr.io/thextech/wohlnet-ci-ubuntu2404:latest",
cross: false,
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DUSE_STATIC_LIBC=ON \
-DUSE_SYSTEM_LIBS=OFF \
-DUSE_SYSTEM_SDL2=OFF \
-DUSE_SHARED_FREEIMAGE=OFF \
-DPGE_SHARED_SDLMIXER=OFF",
deps_cmdline: "echo 'Ubuntu 24 x86_32, everything pre-installed'",
executable_name: "thextech",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name_suffix: "",
package_filename_suffix: "ubuntu-24-04-amd64",
upload_directory: "www/ubuntu-24-04/"
}
steps:
- name: Host info
shell: bash
run: |
uname -a
cat /proc/cpuinfo
- name: Check for the upload support
id: upload-check
shell: bash
run: |
if [[ "${{ secrets.builds_login }}" != '' && \
"${{ secrets.builds_password }}" != '' && \
"${{ secrets.builds_host }}" != '' ]]; then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
- name: Install Dependencies
shell: bash
run: |
if [[ ! -z "${{ matrix.config.deps_cmdline }}" ]]; then
eval ${{ matrix.config.deps_cmdline }}
fi
cmake --version
- uses: TheXTech/checkout@v0.1
- uses: TheXTech/branch-name@v0.1
- name: Pull submodules
shell: bash
run: |
git submodule update --init --recursive
- name: Download SMBX assets
shell: bash
run: wget -d -nv -t 5 -O smbx13.7z "https://wohlsoft.ru/projects/TheXTech/_downloads/thextech-smbx13-assets-full.7z"
- name: Download AoD assets
shell: bash
run: wget -d -nv -t 5 -O aod.7z "https://wohlsoft.ru/projects/TheXTech/_downloads/thextech-adventure-of-demo-assets-full.7z"
- name: Unpack all assets
shell: bash
run: |
mkdir -p smbx13
cd smbx13
7z x ../smbx13.7z
cd ..
rm smbx13.7z
mkdir -p aod
cd aod
7z x ../aod.7z
cd ..
rm aod.7z
- name: Apply update to translations
shell: bash
run: |
ASSETS_ROOT1="$PWD/smbx13"
ASSETS_ROOT2="$PWD/aod"
cd .github/ci-helper
bash translate_update.sh "${ASSETS_ROOT1}"
bash translate_update.sh "${ASSETS_ROOT2}"
cd ../..
- name: Configure
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
echo "PATH environment: ${PATH}"
fi
if [[ "${{ secrets.DISCORD_APP_ID }}" != '' ]]; then
LOCAL_EXTRA_SETUP="-DTHEXTECH_ENABLE_DISCORD_RPC=ON -DTHEXTECH_DISCORD_APPID=\"${{ secrets.DISCORD_APP_ID }}\""
fi
cmake -B build -G "${{ matrix.config.generator }}" -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} ${{ matrix.config.extra_options }} ${LOCAL_EXTRA_SETUP} .
- name: Build
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
export MAKEFLAGS=--keep-going
cmake --build build --config ${{ matrix.config.build_type }} --parallel 3
- name: List dependent libraries
if: success() && runner.os == 'Linux'
shell: bash
run: |
file build/output/bin/thextech
if [[ "${{ matrix.config.cross}}" != true ]]; then
ldd build/output/bin/thextech
fi
- name: Create Package
if: success()
id: create_package
shell: bash
# ======================================= Adventures of Demo =======================================
# The side game about Demo and siblings from the A2XT universe by raocow and his fan community.
# ======================================= Super Mario Bros. X - a fan-game =======================================
# Was made in 2009 by Andrew Spinks "Redigit", and supported up to 2011 by it's original author.
run: |
bash .github/ci-helper/pack-game.sh \
"${{ runner.os }}" \
"thextech-adventures-of-demo" \
"advdemo${{ matrix.config.executable_name_suffix }}" \
"thextech-adventures-of-demo-${{ matrix.config.package_filename_suffix }}-${BRANCH_NAME}" \
"aod"
bash .github/ci-helper/pack-game.sh \
"${{ runner.os }}" \
"thextech-super-mario-bros-x" \
"smbx${{ matrix.config.executable_name_suffix }}" \
"thextech-super-mario-bros-x-${{ matrix.config.package_filename_suffix }}-${BRANCH_NAME}" \
"smbx13"
bash .github/ci-helper/pack-game.sh \
"${{ runner.os }}" \
"thextech-bin" \
"thextech${{ matrix.config.executable_name_suffix }}" \
"thextech-bin-${{ matrix.config.package_filename_suffix }}-${BRANCH_NAME}" \
"none"
- name: Upload artifact
if: success()
uses: actions/upload-artifact@v4
continue-on-error: true
with:
path: build/package/*.tar.gz
name: TheXTech ${{ matrix.config.name }} ${{ matrix.config.build_type }}
- name: Deploy to builds.wohlsoft.ru
if: steps.create_package.outcome == 'success' && github.event_name != 'pull_request' && steps.upload-check.outputs.available == 'true'
continue-on-error: true
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
UPLOAD_LIST="set ssl:verify-certificate no;"
if [[ "${{ runner.os }}" == 'Windows' ]]; then
for q in ./build/package/*.7z; do
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} $q;"
done
elif [[ "${{ runner.os }}" == 'Linux' ]]; then
for q in ./build/package/*.tar.gz; do
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} $q;"
done
fi
lftp -e "${UPLOAD_LIST} exit" -u ${{ secrets.builds_login }},${{ secrets.builds_password }} ${{ secrets.builds_host }}
- name: List Build Directory
if: always()
shell: bash
run: |
git status
ls -lR build
================================================
FILE: .github/workflows/vita-ci.yml
================================================
name: Vita CI
on:
push:
branches:
- main
- stable*
- versus-ci-homebrew
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: "${{ matrix.config.name }} | ${{ matrix.config.build_type }}"
runs-on: ubuntu-latest
container: ghcr.io/thextech/wohlnet-ci-ubuntu2404-dkp-vita:latest
env:
VITASDK: /usr/local/vitasdk
strategy:
fail-fast: true
matrix:
config:
- {
name: "Vita build",
extra_options: "-DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake",
deps_cmdline: "echo 'Vita SDK is already pre-installed'",
generator: "Unix Makefiles",
build_type: "MinSizeRel",
executable_name: "thextech",
assets_url: "https://wohlsoft.ru/projects/TheXTech/_downloads/thextech-adventure-of-demo-assets-full.7z",
subdir_name: "thextech-vita",
upload_directory: "www/vita/"
}
steps:
- name: Check for the upload support
id: upload-check
shell: bash
run: |
if [[ "${{ secrets.builds_login }}" != '' && \
"${{ secrets.builds_password }}" != '' && \
"${{ secrets.builds_host }}" != '' ]]; then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
- name: Install Dependencies
shell: bash
run: |
if [[ ! -z "${{ matrix.config.deps_cmdline }}" ]]; then
eval ${{ matrix.config.deps_cmdline }}
fi
cmake --version
- uses: TheXTech/checkout@v0.1
- uses: TheXTech/branch-name@v0.1
- name: Pull submodules
shell: bash
run: |
git submodule update --init --recursive
# NOTE: 2023-08-11 now using container including Vita SDK
# - name: Install Vita SDK
# run: |
# cd ..
# export VITASDK=/usr/local/vitasdk
# export PATH=$VITASDK/bin:$PATH
# git clone https://github.com/vitasdk/vdpm
# cd vdpm
# ./bootstrap-vitasdk.sh
# ./install-all.sh || echo A library from vitasdk failed to install.
# NOTE: 2/13/2022 Current Vita version does not use cglm or vitaGL renderer. All is handled by SDL2 at the moment.
# - name: Install cglm
# run: |
# cd ..
# export PATH=$VITASDK/bin:$PATH
# git clone https://github.com/recp/cglm.git
# cd cglm
# sed -i "s|-Werror||g" CMakeLists.txt
# cmake -B build-vita -G Ninja -DCMAKE_INSTALL_PREFIX=$VITASDK/arm-vita-eabi -DCGLM_STATIC=ON -DCGLM_SHARED=OFF -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=/usr/local/vitasdk/share/vita.toolchain.cmake .
# cmake --build build-vita --target all
# cmake --build build-vita --target install
# - name: Install Latest vitaGL
# run: |
# cd ..
# export PATH=$VITASDK/bin:$PATH
# git clone https://github.com/Rinnegatamante/vitaGL.git
# cd vitaGL
# NO_DEBUG=1 NO_TEX_COMBINER=1 make
# make install
# no longer distributing packed Vita builds
# - name: Download assets
# uses: carlosperate/download-file-action@v2
# with:
# file-url: "${{ matrix.config.assets_url }}"
# file-name: assets.7z
#
# - name: Unpack assets
# shell: bash
# run: |
# mkdir -p assets
# cd assets
# 7z x ../assets.7z
# cd ..
# rm assets.7z
- name: Configure
shell: bash
run: |
export PATH=$VITASDK/bin:$PATH
cmake -B build -G "${{ matrix.config.generator }}" -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} ${{ matrix.config.extra_options }} .
- name: Build
shell: bash
run: |
export PATH=$VITASDK/bin:$PATH
cmake --build build --target all -j4
- name: Create Package
if: success()
id: create_package
shell: bash
run: |
cd build
mkdir package
mkdir "package/${{ matrix.config.subdir_name }}"
cp ../changelog.txt "package/${{ matrix.config.subdir_name }}/"
cp ../LICENSE "package/${{ matrix.config.subdir_name }}/License.TheXTech.txt"
cat ../docs/README_VITA.md ../README.md >> "package/${{ matrix.config.subdir_name }}/README.md"
cat ../docs/README_VITA.RUS.md ../README.RUS.md >> "package/${{ matrix.config.subdir_name }}/README.RUS.md"
cat ../docs/README_VITA.ESP.md ../README.ESP.md >> "package/${{ matrix.config.subdir_name }}/README.ESP.md"
cp thextech.vpk "package/${{ matrix.config.subdir_name }}/"
cd package
zip -9 -r "thextech-vita-${BRANCH_NAME}.zip" "${{ matrix.config.subdir_name }}"
rm -Rf "${{ matrix.config.subdir_name }}"
cd ../..
- name: Upload artifact
if: success()
uses: actions/upload-artifact@v4
continue-on-error: true
with:
path: build/package/*.zip
name: ${{ matrix.config.name }} ${{ matrix.config.build_type }}
- name: Deploy to builds.wohlsoft.ru
if: steps.create_package.outcome == 'success' && github.event_name != 'pull_request' && steps.upload-check.outputs.available == 'true'
continue-on-error: true
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
UPLOAD_LIST="set ssl:verify-certificate no;"
for q in ./build/package/*.zip; do
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} $q;"
done
if [ "${BRANCH_NAME}" = "main" ]; then
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} build/thextech.vpk -o thextech-vitadb-nightly.vpk;"
fi
lftp -e "${UPLOAD_LIST} exit" -u ${{ secrets.builds_login }},${{ secrets.builds_password }} ${{ secrets.builds_host }}
- name: List Build Directory
if: always()
shell: bash
run: |
git status
ls -lR build
================================================
FILE: .github/workflows/wii-ci.yml
================================================
name: Wii CI
on:
push:
branches:
- main
- stable*
- versus-ci-homebrew
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: "${{ matrix.config.name }} | ${{ matrix.config.build_type }}"
runs-on: ubuntu-latest
container: ghcr.io/thextech/wohlnet-ci-ubuntu2404-dkp-vita:latest
env:
DEVKITPRO: /opt/devkitpro
DEVKITPPC: /opt/devkitpro/devkitPPC
strategy:
fail-fast: false
matrix:
config:
- {
name: "Wii build",
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DCMAKE_TOOLCHAIN_FILE=$DEVKITPRO/cmake/Wii.cmake \
-DCMAKE_PREFIX_PATH=/opt/devkitpro/portlibs/wii-local \
-DCMAKE_INSTALL_PREFIX=$DEVKITPRO/portlibs/wii \
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON",
deps_cmdline: "echo 'DevkitPro SDK is already pre-installed'",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name: "thextech",
subdir_name: "thextech-wii",
upload_directory: "www/wii/"
}
steps:
- name: Check for the upload support
id: upload-check
shell: bash
run: |
if [[ "${{ secrets.builds_login }}" != '' && \
"${{ secrets.builds_password }}" != '' && \
"${{ secrets.builds_host }}" != '' ]]; then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
- name: Install Dependencies
shell: bash
run: |
if [[ ! -z "${{ matrix.config.deps_cmdline }}" ]]; then
eval ${{ matrix.config.deps_cmdline }}
fi
cmake --version
- uses: TheXTech/checkout@v0.1
- uses: TheXTech/branch-name@v0.1
- name: Pull submodules
shell: bash
run: |
git submodule update --init --recursive
- name: Install modified SDL2
run: |
cd ..
git clone https://github.com/Wohlstand/SDL.git -b wii-support --depth 1 SDL2
cd SDL2
mkdir build
cd build
cmake -G Ninja \
-DCMAKE_TOOLCHAIN_FILE=$DEVKITPRO/cmake/Wii.cmake \
-DCMAKE_PREFIX_PATH=/opt/devkitpro/portlibs/wii-local \
-DCMAKE_PREFIX_PATH=/opt/devkitpro/portlibs/wii-local \
-DSDL_ALTIVEC=OFF \
-DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} \
..
cmake --build . --target all -j4
sudo cmake --build . --target install
- name: Configure
shell: bash
run: |
cmake -B build -G "${{ matrix.config.generator }}" -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} ${{ matrix.config.extra_options }} .
- name: Build
shell: bash
run: |
cmake --build build --target all -j4
- name: Check codesize and RAM usage
if: success() && runner.os == 'Linux'
shell: bash
run: |
size build/output/bin/thextech.elf
- name: Create Package
if: success()
shell: bash
run: |
cd build
mkdir "package/${{ matrix.config.subdir_name }}"
cp ../changelog.txt "package/${{ matrix.config.subdir_name }}/"
cp ../LICENSE "package/${{ matrix.config.subdir_name }}/License.TheXTech.txt"
mv "package/meta.xml" "package/${{ matrix.config.subdir_name }}/"
mv "package/icon.png" "package/${{ matrix.config.subdir_name }}/"
mv "package/boot.dol" "package/${{ matrix.config.subdir_name }}/boot.dol"
cat ../docs/README_WII.md ../README.md >> "package/${{ matrix.config.subdir_name }}/README.md"
cd package
zip -9 -r "thextech-wii-${BRANCH_NAME}.zip" "${{ matrix.config.subdir_name }}"
rm -Rf "${{ matrix.config.subdir_name }}"
cd ../..
- name: Upload artifact
if: success()
uses: actions/upload-artifact@v4
continue-on-error: true
with:
path: build/package/*.zip
name: ${{ matrix.config.name }} ${{ matrix.config.build_type }}
- name: Deploy to builds.wohlsoft.ru
if: success() && github.event_name != 'pull_request' && steps.upload-check.outputs.available == 'true'
continue-on-error: true
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
UPLOAD_LIST="set ssl:verify-certificate no;"
for q in ./build/package/*.zip; do
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} $q;"
done
lftp -e "${UPLOAD_LIST} exit" -u ${{ secrets.builds_login }},${{ secrets.builds_password }} ${{ secrets.builds_host }}
- name: List Build Directory
if: always()
shell: bash
run: |
git status
ls -lR build
================================================
FILE: .github/workflows/wiiu-ci.yml
================================================
name: Wii U CI
on:
push:
branches:
- main
- stable*
- versus-ci-homebrew
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: "${{ matrix.config.name }} | ${{ matrix.config.build_type }}"
runs-on: ubuntu-latest
container: ghcr.io/thextech/wohlnet-ci-ubuntu2404-dkp-vita:latest
env:
DEVKITPRO: /opt/devkitpro
DEVKITPPC: /opt/devkitpro/devkitPPC
strategy:
fail-fast: false
matrix:
config:
- {
name: "Wii U build",
extra_options: "-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DCMAKE_TOOLCHAIN_FILE=$DEVKITPRO/cmake/WiiU.cmake \
-DCMAKE_PREFIX_PATH=/opt/devkitpro/portlibs/wiiu-local \
-DSDL2_DIR=/opt/devkitpro/portlibs/wiiu-local/lib/cmake/SDL2 \
-DCMAKE_INSTALL_PREFIX=$DEVKITPRO/portlibs/wiiu",
deps_cmdline: "echo 'DevkitPro SDK is already pre-installed'",
generator: "Ninja",
build_type: "MinSizeRel",
executable_name: "thextech",
assets_url: "https://wohlsoft.ru/projects/TheXTech/_downloads/thextech-adventure-of-demo-assets-full.7z",
subdir_name: "thextech-wiiu",
upload_directory: "www/wiiu/"
}
steps:
- name: Check for the upload support
id: upload-check
shell: bash
run: |
if [[ "${{ secrets.builds_login }}" != '' && \
"${{ secrets.builds_password }}" != '' && \
"${{ secrets.builds_host }}" != '' ]]; then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
- name: Install Dependencies
shell: bash
run: |
if [[ ! -z "${{ matrix.config.deps_cmdline }}" ]]; then
eval ${{ matrix.config.deps_cmdline }}
fi
cmake --version
- uses: TheXTech/checkout@v0.1
- uses: TheXTech/branch-name@v0.1
- name: Pull submodules
shell: bash
run: |
git submodule update --init --recursive
- name: Install modified SDL2
run: |
cd ..
git clone https://github.com/Wohlstand/SDL.git -b wiiu-fixes-2.28--06-2025 --depth 1 SDL2
cd SDL2
mkdir build
cd build
cmake -G Ninja \
-DCMAKE_TOOLCHAIN_FILE=$DEVKITPRO/cmake/WiiU.cmake \
-DCMAKE_INSTALL_PATH=/opt/devkitpro/portlibs/wiiu-local \
-DCMAKE_PREFIX_PATH=/opt/devkitpro/portlibs/wiiu \
-DSDL_ALTIVEC=OFF \
-DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} \
..
cmake --build . --target all -j4
sudo cmake --build . --target install
- name: Configure
shell: bash
run: |
cmake -B build -G "${{ matrix.config.generator }}" -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} ${{ matrix.config.extra_options }} .
- name: Build
shell: bash
run: |
cmake --build build --target all -j4
- name: Create Package
if: success()
shell: bash
run: |
cd build
mkdir package
mkdir "package/${{ matrix.config.subdir_name }}"
cp ../changelog.txt "package/${{ matrix.config.subdir_name }}/"
cp ../LICENSE "package/${{ matrix.config.subdir_name }}/License.TheXTech.txt"
cp meta.xml "package/${{ matrix.config.subdir_name }}/"
cp icon.png "package/${{ matrix.config.subdir_name }}/"
cp thextech.rpx "package/${{ matrix.config.subdir_name }}/thextech.rpx"
cp thextech.wuhb "package/${{ matrix.config.subdir_name }}/thextech.wuhb"
cat ../docs/README_WIIU.md ../README.md >> "package/${{ matrix.config.subdir_name }}/README.md"
cd package
zip -9 -r "thextech-wiiu-${BRANCH_NAME}.zip" "${{ matrix.config.subdir_name }}"
rm -Rf "${{ matrix.config.subdir_name }}"
cd ../..
- name: Upload artifact
if: success()
uses: actions/upload-artifact@v4
continue-on-error: true
with:
path: build/package/*.zip
name: ${{ matrix.config.name }} ${{ matrix.config.build_type }}
- name: Deploy to builds.wohlsoft.ru
if: success() && github.event_name != 'pull_request' && steps.upload-check.outputs.available == 'true'
continue-on-error: true
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
UPLOAD_LIST="set ssl:verify-certificate no;"
for q in ./build/package/*.zip; do
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} $q;"
done
lftp -e "${UPLOAD_LIST} exit" -u ${{ secrets.builds_login }},${{ secrets.builds_password }} ${{ secrets.builds_host }}
- name: List Build Directory
if: always()
shell: bash
run: |
git status
ls -lR build
================================================
FILE: .github/workflows/windows-ci.yml
================================================
name: Windows CI
on:
push:
branches:
- main
- stable*
- versus-ci
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
name: "${{ matrix.config.name }} | ${{ matrix.config.build_type }}"
runs-on: ${{ matrix.config.os }}
container: ${{ matrix.config.container }}
strategy:
fail-fast: false
matrix:
config:
- {
name: "Windows - 64-bit",
os: windows-latest,
extra_options: "-DCMAKE_PREFIX_PATH=C:/WohlMinGWw64/mingw64 \
-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DCMAKE_TOOLCHAIN_FILE=`pwd`/cmake/ci_windows_mingw_toolchain_x64.cmake",
generator: "Ninja",
build_type: "MinSizeRel",
extra_path: "/c/WohlMinGWw64/mingw64/bin",
executable_name_suffix: "-win64",
package_filename_suffix: "win64",
upload_directory: "www/win32/",
mingw_download: "https://wohlsoft.ru/docs/Software/MinGW/x86_64-12.2.0-release-posix-seh-rt_v10-rev1.7z", mingw_install_dir: "C:/WohlMinGWw64/",
ninja_download: "https://wohlsoft.ru/docs/Software/Ninja-Build/ninja-win.zip", ninja_install_dir: "C:/WohlMinGWw64/mingw64/bin",
lftp_download: "https://wohlsoft.ru/docs/Software/lftp-4.4.15.win64-openssl-1.0.1g.7z", lftp_install_dir: "C:/WohlMinGWw64/mingw64/"
}
- {
name: "Windows - 32-bit",
os: windows-latest,
extra_options: "-DCMAKE_PREFIX_PATH=C:/WohlMinGWw64/mingw32 \
-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DCMAKE_TOOLCHAIN_FILE=`pwd`/cmake/ci_windows_mingw_toolchain_x32.cmake",
generator: "Ninja",
build_type: "MinSizeRel",
extra_path: "/c/WohlMinGWw64/mingw32/bin",
executable_name_suffix: "",
package_filename_suffix: "win32",
upload_directory: "www/win32/",
mingw_download: "https://wohlsoft.ru/docs/Software/MinGW/i686-12.2.0-release-posix-dwarf-rt_v10-rev1.7z", mingw_install_dir: "C:/WohlMinGWw64/",
ninja_download: "https://wohlsoft.ru/docs/Software/Ninja-Build/ninja-win.zip", ninja_install_dir: "C:/WohlMinGWw64/mingw32/bin",
lftp_download: "https://wohlsoft.ru/docs/Software/lftp-4.4.15.win64-openssl-1.0.1g.7z", lftp_install_dir: "C:/WohlMinGWw64/mingw32/"
}
- {
name: "Windows - 32-bit (legacy floats)",
os: windows-latest,
extra_options: "-DCMAKE_PREFIX_PATH=C:/WohlMinGWw64/mingw32 \
-DTHEXTECH_EXECUTABLE_NAME=thextech \
-DCMAKE_TOOLCHAIN_FILE=`pwd`/cmake/ci_windows_mingw_toolchain_x32.cmake \
-DTHEXTECH_FIXED_POINT=OFF",
generator: "Ninja",
build_type: "MinSizeRel",
extra_path: "/c/WohlMinGWw64/mingw32/bin",
executable_name_suffix: "",
package_filename_suffix: "win32-legacy-floats",
upload_directory: "www/win32/",
mingw_download: "https://wohlsoft.ru/docs/Software/MinGW/i686-12.2.0-release-posix-dwarf-rt_v10-rev1.7z", mingw_install_dir: "C:/WohlMinGWw64/",
ninja_download: "https://wohlsoft.ru/docs/Software/Ninja-Build/ninja-win.zip", ninja_install_dir: "C:/WohlMinGWw64/mingw32/bin",
lftp_download: "https://wohlsoft.ru/docs/Software/lftp-4.4.15.win64-openssl-1.0.1g.7z", lftp_install_dir: "C:/WohlMinGWw64/mingw32/"
}
- {
name: "Windows - ARM64",
os: windows-2022,
extra_options: "-A ARM64 -DTHEXTECH_EXECUTABLE_NAME=thextech",
generator: "Visual Studio 17 2022",
build_type: "MinSizeRel",
extra_path: "/c/WohlLFTP/bin",
executable_name_suffix: "-arm64",
package_filename_suffix: "arm64",
upload_directory: "www/win-arm/",
lftp_download: "https://wohlsoft.ru/docs/Software/lftp-4.4.15.win64-openssl-1.0.1g.7z", lftp_install_dir: "C:/WohlLFTP/"
}
steps:
- name: Check for the upload support
id: upload-check
shell: bash
run: |
if [[ "${{ secrets.builds_login }}" != '' && \
"${{ secrets.builds_password }}" != '' && \
"${{ secrets.builds_host }}" != '' ]]; then
echo "available=true" >> $GITHUB_OUTPUT;
else
echo "available=false" >> $GITHUB_OUTPUT;
fi
- name: Install Dependencies
shell: bash
run: |
if [[ ! -z "${{ matrix.config.deps_cmdline }}" ]]; then
eval ${{ matrix.config.deps_cmdline }}
fi
cmake --version
- uses: TheXTech/checkout@v0.1
- uses: TheXTech/branch-name@v0.1
- name: Pull submodules
shell: bash
run: |
git submodule update --init --recursive
- name: Download MinGW
if: matrix.config.mingw_download
shell: bash
run: C:\\msys64\\usr\\bin\\wget.exe -d -nv -t 5 -O mingw.7z "${{ matrix.config.mingw_download }}"
- name: Extract MinGW
if: matrix.config.mingw_install_dir
shell: bash
run: |
7z x mingw.7z -o"${{ matrix.config.mingw_install_dir }}"
- name: Download Ninja
if: matrix.config.ninja_download
shell: bash
run: C:\\msys64\\usr\\bin\\wget.exe -d -nv -t 5 -O ninja.zip "${{ matrix.config.ninja_download }}"
- name: Extract Ninja
if: matrix.config.ninja_install_dir
shell: bash
run: |
7z x ninja.zip -o"${{ matrix.config.ninja_install_dir }}"
- name: Download LFTP
if: matrix.config.lftp_download
shell: bash
run: C:\\msys64\\usr\\bin\\wget.exe -d -nv -t 5 -O lftp.7z "${{ matrix.config.lftp_download }}"
- name: Extract LFTP
if: matrix.config.lftp_install_dir
shell: bash
run: |
7z x lftp.7z bin etc -o"${{ matrix.config.lftp_install_dir }}"
- name: Download SMBX assets
shell: bash
run: C:\\msys64\\usr\\bin\\wget.exe -d -nv -t 5 -O smbx13.7z "https://wohlsoft.ru/projects/TheXTech/_downloads/thextech-smbx13-assets-full.7z"
- name: Download AoD assets
shell: bash
run: C:\\msys64\\usr\\bin\\wget.exe -d -nv -t 5 -O aod.7z "https://wohlsoft.ru/projects/TheXTech/_downloads/thextech-adventure-of-demo-assets-full.7z"
- name: Unpack all assets
shell: bash
run: |
mkdir -p smbx13
cd smbx13
7z x ../smbx13.7z
cd ..
rm smbx13.7z
mkdir -p aod
cd aod
7z x ../aod.7z
cd ..
rm aod.7z
- name: Apply update to translations
shell: bash
run: |
ASSETS_ROOT1="$PWD/smbx13"
ASSETS_ROOT2="$PWD/aod"
cd .github/ci-helper
bash translate_update.sh "${ASSETS_ROOT1}"
bash translate_update.sh "${ASSETS_ROOT2}"
cd ../..
- name: Configure
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
echo "PATH environment: ${PATH}"
fi
if [[ "${{ secrets.DISCORD_APP_ID }}" != '' ]]; then
LOCAL_EXTRA_SETUP="-DTHEXTECH_ENABLE_DISCORD_RPC=ON -DTHEXTECH_DISCORD_APPID=\"${{ secrets.DISCORD_APP_ID }}\""
fi
cmake -B build -G "${{ matrix.config.generator }}" -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} ${{ matrix.config.extra_options }} ${LOCAL_EXTRA_SETUP} .
- name: Build
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
export MAKEFLAGS=--keep-going
cmake --build build --config ${{ matrix.config.build_type }} --parallel 3
- name: List dependent libraries
if: success() && runner.os == 'Linux'
shell: bash
run: |
file build/output/bin/thextech
ldd build/output/bin/thextech
- name: Create Package
if: success()
shell: bash
# ======================================= Adventures of Demo =======================================
# The side game about Demo and siblings from the A2XT universe by raocow and his fan community.
# ======================================= Super Mario Bros. X - a fan-game =======================================
# Was made in 2009 by Andrew Spinks "Redigit", and supported up to 2011 by it's original author.
run: |
bash .github/ci-helper/pack-game.sh \
"${{ runner.os }}" \
"thextech-adventures-of-demo" \
"advdemo${{ matrix.config.executable_name_suffix }}" \
"thextech-adventures-of-demo-${{ matrix.config.package_filename_suffix }}-${BRANCH_NAME}" \
"aod"
bash .github/ci-helper/pack-game.sh \
"${{ runner.os }}" \
"thextech-super-mario-bros-x" \
"smbx${{ matrix.config.executable_name_suffix }}" \
"thextech-super-mario-bros-x-${{ matrix.config.package_filename_suffix }}-${BRANCH_NAME}" \
"smbx13"
bash .github/ci-helper/pack-game.sh \
"${{ runner.os }}" \
"thextech-bin" \
"thextech${{ matrix.config.executable_name_suffix }}" \
"thextech-bin-${{ matrix.config.package_filename_suffix }}-${BRANCH_NAME}" \
"none"
- name: Upload artifact
if: success()
uses: actions/upload-artifact@v4
continue-on-error: true
with:
path: build/package/*.7z
name: ${{ matrix.config.name }} ${{ matrix.config.build_type }}
- name: Deploy to builds.wohlsoft.ru
if: success() && github.event_name != 'pull_request' && steps.upload-check.outputs.available == 'true'
continue-on-error: true
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
export PATH=${{ matrix.config.extra_path }}:${PATH}
fi
UPLOAD_LIST="set ssl:verify-certificate no;"
if [[ "${{ runner.os }}" == 'Windows' ]]; then
for q in ./build/package/*.7z; do
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} $q;"
done
elif [[ "${{ runner.os }}" == 'Linux' ]]; then
for q in ./build/package/*.tar.gz; do
UPLOAD_LIST="${UPLOAD_LIST} put -O ${{ matrix.config.upload_directory }} $q;"
done
fi
lftp -e "${UPLOAD_LIST} exit" -u ${{ secrets.builds_login }},${{ secrets.builds_password }} ${{ secrets.builds_host }}
- name: List Build Directory
if: always()
shell: bash
run: |
git status
ls -lR build
================================================
FILE: .gitignore
================================================
# This file is used to ignore files which are generated
# ----------------------------------------------------------------------------
*~
*.autosave
*.a
*.core
*.moc
*.o
*.obj
*.orig
*.rej
*.so
*.so.*
*_pch.h.cpp
*_resource.rc
*.qm
.#*
*.*#
core
!core/
tags
.DS_Store
.directory
*.debug
Makefile*
*.prl
*.app
moc_*.cpp
ui_*.h
qrc_*.cpp
Thumbs.db
*.res
/.qmake.cache
/.qmake.stash
# qtcreator generated files
*.pro.user*
*.txt.user*
# xemacs temporary files
*.flc
# Vim temporary files
.*.swp
# Visual Studio generated files
*.ib_pdb_index
*.idb
*.ilk
*.pdb
*.sln
*.suo
*.vcproj
*vcproj.*.*.user
*.ncb
*.sdf
*.opensdf
*.vcxproj
*vcxproj.*
build-*
build/
# MinGW generated files
*.Debug
*.Release
# Python byte code
*.pyc
# Binaries
# --------
*.dll
*.exe
# CLion and like environments
.idea/*
cmake-build-*/*
.vscode/*
.vs/*
CMakeSettings.json
# PVS-Studio related stuff
*.PVS-Studio.*
.PVS-Studio/
# Vendored assets packages shouldn't appear at the GIT history
/assets/
# clangd related stuff
.cache/
================================================
FILE: .gitmodules
================================================
[submodule "3rdparty/PGE_File_Formats"]
path = 3rdparty/PGE_File_Formats
url = https://github.com/WohlSoft/PGE-File-Library-STL.git
branch = wip-mdx
[submodule "3rdparty/LuaJIT"]
path = 3rdparty/LuaJIT
url = https://github.com/WohlSoft/LuaJIT.git
branch = v2.1
[submodule "3rdparty/luabind"]
path = 3rdparty/luabind
url = https://github.com/WohlSoft/luabind-deboostified.git
branch = master
[submodule "3rdparty/AudioCodecs"]
path = 3rdparty/AudioCodecs
url = https://github.com/WohlSoft/AudioCodecs.git
branch = master
[submodule "3rdparty/SDL-Mixer-X"]
path = 3rdparty/SDL-Mixer-X
url = https://github.com/WohlSoft/SDL-Mixer-X.git
branch = master
[submodule "3rdparty/FreeImageLite"]
path = 3rdparty/FreeImageLite
url = https://github.com/WohlSoft/libFreeImage.git
branch = master
[submodule "3rdparty/freetype"]
path = 3rdparty/freetype
url = https://github.com/TheXTech/freetype.git
branch = master
[submodule "3rdparty/thextech-discord-rpc"]
path = 3rdparty/thextech-discord-rpc
url = https://github.com/TheXTech/thextech-discord-rpc.git
branch = main
[submodule "3rdparty/glew-cmake"]
path = 3rdparty/glew-cmake
url = https://github.com/TheXTech/thextech-glew-cmake.git
branch = master
[submodule "3rdparty/DirManager"]
path = 3rdparty/DirManager
url = https://github.com/WohlSoft/DirManager.git
branch = master
[submodule "3rdparty/IniProcessor"]
path = 3rdparty/IniProcessor
url = https://github.com/WohlSoft/IniProcessing.git
branch = master
[submodule "3rdparty/FileMapper"]
path = 3rdparty/FileMapper
url = https://github.com/WohlSoft/FileMapper.git
branch = master
[submodule "3rdparty/angle-shader-translator"]
path = 3rdparty/angle-shader-translator
url = https://github.com/TheXTech/angle-shader-translator-library.git
branch = dist-no-spirv
[submodule "3rdparty/luau"]
path = 3rdparty/luau
url = https://github.com/TheXTech/luau.git
branch = master
[submodule "mbediso"]
path = 3rdparty/mbediso
url = https://github.com/ds-sloth/mbediso/
branch = main
[submodule "3rdparty/SDL_net"]
path = 3rdparty/SDL_net
url = https://github.com/TheXTech/SDL_net.git
branch = SDL2
================================================
FILE: CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.5...3.10)
if(POLICY CMP0069) # Allow CMAKE_INTERPROCEDURAL_OPTIMIZATION (lto) to be set
cmake_policy(SET CMP0069 NEW)
set(CMAKE_POLICY_DEFAULT_CMP0069 NEW)
endif()
if(POLICY CMP0079) # Allow linking subprojects against each other
cmake_policy(SET CMP0079 NEW)
set(CMAKE_POLICY_DEFAULT_CMP0079 NEW)
endif()
project(TheXTech LANGUAGES C CXX)
if(APPLE)
enable_language(OBJC)
endif()
include(CheckCCompilerFlag)
include(CheckCXXCompilerFlag)
include(ExternalProject)
include(CheckLibraryExists)
include(CheckFunctionExists)
include(GNUInstallDirs)
include(FindBacktrace)
include(TestBigEndian)
include(CheckIncludeFile)
include(cmake/git_info.cmake)
message("== Current GIT hash [${GIT_COMMIT_HASH}], branch [${GIT_BRANCH}], package [${PACKAGE_SUFFIX}] ==")
if(NOT WIN32 AND NOT NINTENDO_SWITCH AND (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX))
check_cxx_compiler_flag("-no-pie" HAS_NO_PIE)
endif()
function(pge_set_nopie _target)
set_target_properties(${_target} PROPERTIES
POSITION_INDEPENDENT_CODE False
)
if(HAS_NO_PIE AND (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX))
set_property(TARGET ${_target} APPEND_STRING PROPERTY LINK_FLAGS " -no-pie")
endif()
endfunction()
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE FALSE)
set(CMAKE_INSTALL_RPATH ".")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
if(EMSCRIPTEN)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
endif()
if(APPLE)
if(CMAKE_HOST_SYSTEM_VERSION VERSION_LESS 9)
set(XTECH_PLIST_NAME "thextech.plist.tiger.in")
set(XTECH_DEFAULT_ICNS "resources/tiger/thextech.icns")
else()
set(XTECH_PLIST_NAME "thextech.plist.in")
set(XTECH_DEFAULT_ICNS "resources/thextech.icns")
endif()
if(NOT DEFINED CMAKE_OSX_DEPLOYMENT_TARGET OR CMAKE_OSX_DEPLOYMENT_TARGET STREQUAL "")
if(CMAKE_HOST_SYSTEM_VERSION VERSION_LESS 9)
set(THEXTECH_MACOS_MIN_VERSION "10.4")
else()
set(THEXTECH_MACOS_MIN_VERSION "10.9")
endif()
else()
set(THEXTECH_MACOS_MIN_VERSION "${CMAKE_OSX_DEPLOYMENT_TARGET}")
endif()
message("-> Mac OS X minimal version: ${THEXTECH_MACOS_MIN_VERSION}")
endif()
if(ANDROID)
set(DEPENDENCIES_INSTALL_DIR ${CMAKE_BINARY_DIR}/output-deps)
set(FDROID_BUILD OFF CACHE BOOL "Is this build a part of the F-Droid workflow?")
mark_as_advanced(FDROID_BUILD)
else()
set(DEPENDENCIES_INSTALL_DIR ${CMAKE_BINARY_DIR}/output)
endif()
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output/bin)
foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
message("--> ${OUTPUTCONFIG}")
string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )
set(PGE_INSTALL_DIRECTORY "TheXTech")
include(cmake/build_props.cmake)
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
# Update if necessary
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffloat-store")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffloat-store")
endif()
if(WIN32 AND NOT EMSCRIPTEN)
set(CMAKE_SHARED_LIBRARY_PREFIX "")
endif()
if(UNIX)
check_include_file(/opt/vc/include/bcm_host.h BCMHOST_H)
endif()
string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
if(CMAKE_BUILD_TYPE_LOWER STREQUAL "debug")
add_definitions(-DDEBUG_BUILD)
if(CMAKE_COMPILER_IS_GNUCXX)
add_definitions(-D_GLIBCXX_DEBUG=1 -D_GLIBCXX_ASSERTIONS=1)
endif()
endif()
# Version
include(version.cmake)
# Default GIT version
include(cmake/git_version.cmake)
configure_file(lib/CrashHandler/backtrace.h.in
generated-include/lib/CrashHandler/backtrace.h)
include_directories(${CMAKE_CURRENT_BINARY_DIR}/generated-include)
if(NINTENDO_SWITCH)
include_directories($ENV{DEVKITPRO}/portlibs/switch/include)
endif()
#if(WIN32 OR EMSCRIPTEN OR HAIKU)
# set(USE_SYSTEM_LIBS_DEFAULT OFF)
#else()
# set(USE_SYSTEM_LIBS_DEFAULT ON)
#endif()
set(USE_SYSTEM_LIBS_DEFAULT OFF)
if(UNIX)
option(PORTMASTER "Make a special build for PortMaster" OFF)
endif()
if(HAIKU OR NINTENDO_SWITCH OR NINTENDO_WII OR NINTENDO_WIIU OR XTECH_MACOSX_TIGER OR PORTMASTER)
set(USE_SYSTEM_SDL2_DEFAULT ON) # Should be used on Haiku, own SDL2 Haiku build on CMake is broken
else()
set(USE_SYSTEM_SDL2_DEFAULT ${USE_SYSTEM_LIBS_DEFAULT})
endif()
if(NINTENDO_DS)
set(THEXTECH_ENABLE_TTF_SUPPORT_DEFAULT OFF)
else()
set(THEXTECH_ENABLE_TTF_SUPPORT_DEFAULT ON)
endif()
if((APPLE AND NOT XTECH_MACOSX_TIGER) OR WIN32 OR (CMAKE_SYSTEM_NAME STREQUAL "Linux"))
set(THEXTECH_USE_ANGLE_TRANSLATOR_DEFAULT ON)
else()
set(THEXTECH_USE_ANGLE_TRANSLATOR_DEFAULT OFF)
endif()
option(USE_SYSTEM_LIBS "Use dependent libraries like SDL2, FreeImageLite and MixerX, installed in the system" ${USE_SYSTEM_LIBS_DEFAULT})
option(USE_SYSTEM_SDL2 "Use SDL2 from a system even prefering system libraries" ${USE_SYSTEM_SDL2_DEFAULT})
option(USE_STATIC_LIBC "Link libc and libstdc++ statically" OFF)
if(NINTENDO_3DS OR NINTENDO_WII OR NINTENDO_WIIU OR NINTENDO_DS)
set(USE_STATIC_LIBC ON)
endif()
if(NINTENDO_3DS)
option(THEXTECH_CUSTOM_AUDIO_LIBRARY "Use the custom audio library instead of MixerX" OFF)
endif()
if(ANDROID OR VITA OR NINTENDO_DS OR NINTENDO_3DS OR NINTENDO_WII OR NINTENDO_WIIU OR NINTENDO_SWITCH OR PGE_MIN_PORT OR THEXTECH_NO_SDL_BUILD OR PORTMASTER)
set(THEXTECH_FORCE_FULLSCREEN ON)
else()
option(THEXTECH_FORCE_FULLSCREEN "Force the game to only use fullscreen mode" OFF)
endif()
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux" AND "${TARGET_PROCESSOR}" MATCHES "arm.*")
message("-- Desktop OpenGL build will be disabled on unsupported platform (${CMAKE_SYSTEM_NAME} on ${TARGET_PROCESSOR})")
set(THEXTECH_BUILD_GL_DESKTOP_DEFAULT OFF)
else()
set(THEXTECH_BUILD_GL_DESKTOP_DEFAULT ON)
endif()
option(THEXTECH_BUILD_GL_DESKTOP_MODERN "On SDL builds, include the OpenGL 2.0+ Core/Compatibility renderer" ${THEXTECH_BUILD_GL_DESKTOP_DEFAULT})
option(THEXTECH_BUILD_GL_ES_MODERN "On SDL builds, include the OpenGL ES 2.0+ renderer" ON)
option(THEXTECH_BUILD_GL_DESKTOP_LEGACY "On SDL builds, include the OpenGL 1.1+ renderer" ${THEXTECH_BUILD_GL_DESKTOP_DEFAULT})
option(THEXTECH_BUILD_GL_ES_LEGACY "On SDL builds, include the OpenGL ES 1.1 renderer" OFF)
option(THEXTECH_USE_ANGLE_TRANSLATOR "On modern OpenGL builds, include the ANGLE shader translator to improve shader support in OpenGL 3.0+ Core/Compatibility profiles" ${THEXTECH_USE_ANGLE_TRANSLATOR_DEFAULT})
option(RANGE_ARR_USE_HEAP "Store data of RangeArr<> template in a heap" OFF)
option(RANGE_ARR_UNSAFE_MODE "Disable all range checks at RangeArr<> template" OFF)
option(ENABLE_ANTICHEAT_TRAP "Enable anti-cheating trap for the \"redigitiscool\" cheat code" OFF)
option(ENABLE_OLD_CREDITS "Use original Redigit's credits without changes" OFF)
option(ENABLE_LOGGING "Enable debug logging written into a file (may not work on some platfors)" ON)
option(THEXTECH_ENABLE_LUA "Enable lua scripting support" OFF)
option(THEXTECH_ENABLE_LUAU "Enable luau build testing" OFF)
option(THEXTECH_ENABLE_LUNA_AUTOCODE "Enable LunaDLL Autocode scripting support" ON)
option(THEXTECH_ENABLE_SDL_NET "Enable SDL_net build testing" OFF)
option(THEXTECH_ENABLE_EDITOR "Enable runtime support for editor features" ON)
option(THEXTECH_ENABLE_TTF_SUPPORT "Enable TTF fonts support (FreeType required)" ${THEXTECH_ENABLE_TTF_SUPPORT_DEFAULT})
option(THEXTECH_CLI_BUILD "Minimal CLI build for testing and benchmarking on desktop platforms" OFF)
option(THEXTECH_NO_SDL_BUILD "Do not use SDL in the CLI build; useful as a starting point for new ports" OFF)
option(THEXTECH_ENABLE_WIP_FEATURES "Enable experimental and incomplete features (disabled by default)" OFF)
mark_as_advanced(THEXTECH_ENABLE_WIP_FEATURES)
option(THEXTECH_NO_BUILD_DATE "Disables the using of the build timestamp in order to make the build reproducible" OFF)
option(THEXTECH_ENABLE_AUDIO_FX "Enable real-time audio effects support" ON)
option(THEXTECH_FIXED_POINT "Experimental: use fixed-point arithmetic for gameplay logic" ON)
option(ENABLE_ADDRESS_SANITIZER "Enable the Address Sanitizer GCC feature" OFF)
# ============ Customization ==============
set(LIB_SRC_EXTRA)
set(THEXTECH_PACKAGE_NAME "thextech" CACHE STRING "Name of package archive file")
set(THEXTECH_EXECUTABLE_NAME "thextech" CACHE STRING "Name of executable file")
set(THEXTECH_DIRECTORY_PREFIX "TheXTech" CACHE STRING "Name used for directories on installed targets (should vary across forks, not asset packs)")
set(THEXTECH_INSTALLER_PACKAGE_NAME "${THEXTECH_EXECUTABLE_NAME}" CACHE STRING "The package name for the package manager")
if(APPLE)
set(THEXTECH_PRELOAD_ENVIRONMENT "" CACHE STRING "Path to resources root to pack")
option(THEXTECH_PRELOAD_ENVIRONMENT_MANUALLY "Make application look for assets inside the bundle, but don't actually put any assets. The 'Template' app will be produced for manual addition of assets." OFF)
set(THEXTECH_BUNDLE_NAME "TheXTech" CACHE STRING "Name of bundle folder")
set(THEXTECH_ICON_NAME "thextech.icns" CACHE STRING "Name of bundle icon file")
set(THEXTECH_CUSTOM_ICON_PATH "" CACHE STRING "Name of icon file to pack into the bundle")
if(NOT THEXTECH_CUSTOM_ICON_PATH STREQUAL "")
message("Use custom macOS icon: ${THEXTECH_CUSTOM_ICON_PATH}")
list(APPEND LIB_SRC_EXTRA
"${THEXTECH_CUSTOM_ICON_PATH}"
)
endif()
endif()
if(NOT APPLE AND NOT ANDROID AND NOT EMSCRIPTEN)
set(THEXTECH_UNIX_INSTALL TRUE)
endif()
# ============ Customization ==end=========
# ============ Platform-conf ==============
if(EMSCRIPTEN)
# config for web app deployment manifest
set(THEXTECH_MANIFEST_NAME "TheXTech Engine ${THEXTECH_VERSION_STRING}" CACHE STRING "Web app manifest name, used as title after installation")
set(THEXTECH_MANIFEST_ID "wohlsoft-thextech" CACHE STRING "Web app ID, uniquely identifies installed app")
set(THEXTECH_MANIFEST_DESC "" CACHE STRING "Web app description")
set(THEXTECH_DEPLOY_URL "http://localhost:8080/" CACHE STRING "Fully qualified HTTPS URL where application will be deployed (HTTP may only be used for local testing)")
# versioned ID
if(GIT_BRANCH STREQUAL "main")
set(GIT_BRANCH_IF_NOT_MAIN "")
else()
set(GIT_BRANCH_IF_NOT_MAIN "-${GIT_BRANCH}")
endif()
set(THEXTECH_MANIFEST_ID_V "${THEXTECH_MANIFEST_ID}${GIT_BRANCH_IF_NOT_MAIN}${THEXTECH_VERSION_REL}")
string(CONFIGURE "${THEXTECH_MANIFEST_NAME}" THEXTECH_MANIFEST_NAME_OUT)
string(CONFIGURE "${THEXTECH_MANIFEST_ID_V}" THEXTECH_MANIFEST_ID_OUT)
string(CONFIGURE "${THEXTECH_MANIFEST_DESC}" THEXTECH_MANIFEST_DESC_OUT)
endif()
if(VITA)
message("Enabling PS Vita Support and fast-math flags.")
# Fast Math flags for Vita, ensuring -DVITA is passed to the compiler.
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffast-math -mtune=cortex-a9 -mfpu=neon -DVITA")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffast-math -mtune=cortex-a9 -mfpu=neon -DVITA")
# Disable annoying warning for Parameter passing.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi")
set(THEXTECH_BUILD_GL_DESKTOP_MODERN OFF CACHE BOOL "" FORCE)
set(THEXTECH_BUILD_GL_DESKTOP_LEGACY OFF CACHE BOOL "" FORCE)
set(THEXTECH_BUILD_GL_ES_LEGACY OFF CACHE BOOL "" FORCE)
# note: to test GLESv2 on Vita, remove the below line, install VitaGL with shader support and Northfear's SDL2 fork, and enable USE_SYSTEM_SDL2
# As of August 2025, Northfear's SDL2 fork invalidly reports the OpenGL profile as Compatibility instead of ES, and VitaGL doesn't support clearing buffers, and its shader transpiler is imperfect
set(THEXTECH_BUILD_GL_ES_MODERN OFF CACHE BOOL "" FORCE)
endif()
if(NINTENDO_SWITCH)
message("Enabling Nintendo Switch Support and fast-math flags.")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8-a+crc+crypto -mtune=cortex-a57 -mtp=soft -fPIE -DNINTENDO_SWITCH -D__SWITCH__")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a+crc+crypto -mtune=cortex-a57 -mtp=soft -fPIE -DNINTENDO_SWITCH -D__SWITCH__")
endif()
if(NINTENDO_WII OR NINTENDO_3DS OR NINTENDO_DS)
set(PGE_MIN_PORT ON)
set(THEXTECH_NO_ARGV_HANDLING ON)
add_compile_definitions(PGE_MIN_PORT)
set(THEXTECH_BUILD_GL_DESKTOP_MODERN OFF CACHE BOOL "" FORCE)
set(THEXTECH_BUILD_GL_DESKTOP_LEGACY OFF CACHE BOOL "" FORCE)
set(THEXTECH_BUILD_GL_ES_MODERN OFF CACHE BOOL "" FORCE)
set(THEXTECH_BUILD_GL_ES_LEGACY OFF CACHE BOOL "" FORCE)
endif()
if(NINTENDO_WIIU)
set(THEXTECH_NO_ARGV_HANDLING ON)
set(THEXTECH_BUILD_GL_DESKTOP_MODERN OFF CACHE BOOL "" FORCE)
set(THEXTECH_BUILD_GL_DESKTOP_
gitextract_aj92w71a/ ├── .appveyor.yml ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.yml │ │ └── compile-fail-report.yml │ ├── ci-helper/ │ │ ├── .gitignore │ │ ├── create-dmg.sh │ │ ├── pack-game-macos.sh │ │ ├── pack-game.sh │ │ ├── support/ │ │ │ ├── dmg-license.py │ │ │ ├── dmg-license3.py │ │ │ └── template.applescript │ │ ├── translate_patcher.py │ │ ├── translate_sync_assets.sh │ │ ├── translate_sync_to_stable.sh │ │ └── translate_update.sh │ └── workflows/ │ ├── 16m-ci.yml │ ├── 3ds-ci.yml │ ├── android-ci.yml │ ├── android-fdroid-ci.yml │ ├── blocksds-ci.yml │ ├── emscripten.yml │ ├── flatpak.yml │ ├── homebrew-assets-ci.yml │ ├── macos-ci.yml │ ├── portmaster-ci.yml │ ├── regression-testing-ci.yaml │ ├── switch-ci.yml │ ├── sync-langs.yml │ ├── ubuntu-deb-ci.yml │ ├── ubuntu-tar-ci.yml │ ├── vita-ci.yml │ ├── wii-ci.yml │ ├── wiiu-ci.yml │ └── windows-ci.yml ├── .gitignore ├── .gitmodules ├── CMakeLists.txt ├── CONTRIBUTING.md ├── LICENSE ├── PORTING.md ├── README.ESP.md ├── README.RUS.md ├── README.md ├── android-project/ │ ├── .gitignore │ ├── build.gradle │ ├── build_init.sh │ ├── gradle/ │ │ └── wrapper/ │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradle.properties │ ├── gradlew │ ├── gradlew.bat │ ├── settings.gradle │ └── thextech/ │ ├── build.gradle │ ├── icon/ │ │ ├── debug/ │ │ │ ├── mipmap-anydpi-v26/ │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ └── values/ │ │ │ └── ic_launcher_background.xml │ │ ├── devel/ │ │ │ ├── mipmap-anydpi-v26/ │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ └── values/ │ │ │ └── ic_launcher_background.xml │ │ └── main/ │ │ ├── mipmap-anydpi-v26/ │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ └── values/ │ │ └── ic_launcher_background.xml │ ├── proguard-rules.pro │ └── src/ │ └── main/ │ ├── AndroidManifest.xml │ ├── assets/ │ │ └── buttons/ │ │ └── Credits.txt │ ├── generate_patternPath.sh │ ├── java/ │ │ ├── javautil/ │ │ │ ├── FileUtils.java │ │ │ └── README.md │ │ ├── org/ │ │ │ └── libsdl/ │ │ │ └── app/ │ │ │ ├── HIDDevice.java │ │ │ ├── HIDDeviceBLESteamController.java │ │ │ ├── HIDDeviceManager.java │ │ │ ├── HIDDeviceUSB.java │ │ │ ├── SDL.java │ │ │ ├── SDLActivity.java │ │ │ ├── SDLAudioManager.java │ │ │ ├── SDLControllerManager.java │ │ │ └── SDLSurface.java │ │ └── ru/ │ │ └── wohlsoft/ │ │ └── thextech/ │ │ ├── GameSettings.java │ │ ├── IniFile.java │ │ ├── Launcher.java │ │ ├── OpenFileDialog.java │ │ ├── UIUpdater.java │ │ └── thextechActivity.java │ └── res/ │ ├── layout/ │ │ ├── activity_launcher.xml │ │ └── settings_activity.xml │ ├── values/ │ │ ├── arrays.xml │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── styles.xml │ ├── values-bg/ │ │ ├── arrays.xml │ │ └── strings.xml │ ├── values-de/ │ │ ├── arrays.xml │ │ └── strings.xml │ ├── values-es-rES/ │ │ ├── arrays.xml │ │ └── strings.xml │ ├── values-fr/ │ │ ├── arrays.xml │ │ └── strings.xml │ ├── values-hu/ │ │ ├── arrays.xml │ │ └── strings.xml │ ├── values-it/ │ │ ├── arrays.xml │ │ └── strings.xml │ ├── values-ja/ │ │ ├── arrays.xml │ │ └── strings.xml │ ├── values-ko/ │ │ ├── arrays.xml │ │ └── strings.xml │ ├── values-nb-rNO/ │ │ ├── arrays.xml │ │ └── strings.xml │ ├── values-pl/ │ │ ├── arrays.xml │ │ └── strings.xml │ ├── values-pt/ │ │ ├── arrays.xml │ │ └── strings.xml │ ├── values-pt-rBR/ │ │ ├── arrays.xml │ │ └── strings.xml │ ├── values-ru-rRU/ │ │ ├── arrays.xml │ │ └── strings.xml │ ├── values-ta/ │ │ ├── arrays.xml │ │ └── strings.xml │ ├── values-tr/ │ │ ├── arrays.xml │ │ └── strings.xml │ ├── values-uk/ │ │ ├── arrays.xml │ │ └── strings.xml │ ├── values-zh-rCN/ │ │ ├── arrays.xml │ │ └── strings.xml │ ├── values-zh-rTW/ │ │ ├── arrays.xml │ │ └── strings.xml │ └── xml/ │ └── root_preferences.xml ├── changelog.txt ├── cmake/ │ ├── TargetArch.cmake │ ├── build_props.cmake │ ├── ci_linux_gcc_toolchain_arm64.cmake │ ├── ci_linux_gcc_toolchain_armhf.cmake │ ├── ci_linux_gcc_toolchain_x32.cmake │ ├── ci_windows_mingw_toolchain_x32.cmake │ ├── ci_windows_mingw_toolchain_x64.cmake │ ├── ci_windows_msvc_toolchain_arm64.cmake │ ├── deploy.cmake │ ├── git_info.cmake │ ├── git_version.cmake │ ├── git_version_update.cmake │ ├── icon.desktop.in │ ├── library_FreeImage.cmake │ ├── library_FreeType.cmake │ ├── library_HarfBuzz.cmake │ ├── library_SDLMixerX.cmake │ ├── library_discord_rpc.cmake │ ├── library_glew.cmake │ ├── library_luabind.cmake │ ├── library_luajit.cmake │ ├── library_syslibs.cmake │ ├── library_zlib.cmake │ ├── ndk-stl-config.cmake │ ├── overlays-16m.ld │ ├── package_switch.cmake │ ├── package_vita.cmake │ └── vita_buildprops.cmake ├── debian/ │ ├── changelog │ ├── control │ ├── copyright │ └── rules ├── docs/ │ ├── README_3DS.md │ ├── README_DSI.md │ ├── README_SWITCH.md │ ├── README_VITA.ESP.md │ ├── README_VITA.RUS.md │ ├── README_VITA.md │ ├── README_WII.md │ ├── README_WIIU.md │ └── editor.ini ├── fastlane/ │ └── metadata/ │ └── android/ │ ├── en-GB/ │ │ ├── changelogs/ │ │ │ ├── 1030700.txt │ │ │ └── 1030701.txt │ │ ├── full_description.txt │ │ ├── short_description.txt │ │ └── title.txt │ └── ru/ │ ├── full_description.txt │ └── short_description.txt ├── lib/ │ ├── Allocator/ │ │ ├── Allocator.h │ │ ├── LICENSE │ │ ├── LinearAllocator.cpp │ │ ├── LinearAllocator.h │ │ ├── PoolAllocator.cpp │ │ ├── PoolAllocator.h │ │ ├── README.md │ │ ├── StackLinkedList.h │ │ ├── StackLinkedListImpl.h │ │ ├── Utils.h │ │ ├── linear-allocator.cmake │ │ └── pool-allocator.cmake │ ├── AppPath/ │ │ ├── app_path.cmake │ │ ├── app_path.h │ │ └── private/ │ │ ├── app_path.cpp │ │ ├── app_path_16m.cpp │ │ ├── app_path_3ds.cpp │ │ ├── app_path_android.cpp │ │ ├── app_path_emscripten.cpp │ │ ├── app_path_macos.cpp │ │ ├── app_path_macos_dirs.h │ │ ├── app_path_macos_dirs.m │ │ ├── app_path_old.cpp │ │ ├── app_path_private.h │ │ ├── app_path_skeleton.cpp │ │ ├── app_path_switch.cpp │ │ ├── app_path_unix.cpp │ │ ├── app_path_vita.cpp │ │ ├── app_path_wii.cpp │ │ ├── app_path_wiiu.cpp │ │ └── app_path_win32.cpp │ ├── Archives/ │ │ ├── archives.h │ │ ├── archives_dir.cpp │ │ ├── archives_mount.cpp │ │ ├── archives_priv.h │ │ └── archives_rwops.cpp │ ├── CrashHandler/ │ │ ├── StackWalker/ │ │ │ ├── StackWalker.cmake │ │ │ ├── StackWalker.cpp │ │ │ └── StackWalker.h │ │ ├── backtrace.h.in │ │ ├── crash_handler.cpp │ │ └── crash_handler.h │ ├── FixPointCS/ │ │ ├── Fixed64.h │ │ └── FixedUtil.h │ ├── Graphics/ │ │ ├── PGEString.h │ │ ├── bitmask2rgba.c │ │ ├── bitmask2rgba.cmake │ │ ├── bitmask2rgba.h │ │ ├── graphics_funcs.cpp │ │ ├── graphics_funcs.h │ │ ├── image_size.cpp │ │ ├── image_size.h │ │ ├── size.cpp │ │ ├── size.h │ │ └── xt_qoi.cpp │ ├── Integrator/ │ │ ├── int_discorcrpc.cpp │ │ ├── int_discorcrpc.h │ │ ├── integrator.cpp │ │ └── integrator.h │ ├── InterProcess/ │ │ ├── editor_pipe.cpp │ │ ├── editor_pipe.h │ │ ├── intproc.cpp │ │ └── intproc.h │ ├── Logger/ │ │ ├── logger.cmake │ │ ├── logger.h │ │ ├── logger_level.h │ │ └── private/ │ │ ├── logger.cpp │ │ ├── logger_android.cpp │ │ ├── logger_desktop.cpp │ │ ├── logger_dummy.cpp │ │ ├── logger_emscripten.cpp │ │ ├── logger_min.cpp │ │ ├── logger_private.h │ │ ├── logger_sets.h │ │ ├── logger_vita.cpp │ │ └── logger_wiiu.cpp │ ├── Utf8Main/ │ │ ├── utf8main.cmake │ │ ├── utf8main.h │ │ └── utf8main_win32.cpp │ ├── Utils/ │ │ ├── Utils.cmake │ │ ├── UtilsSDL.cmake │ │ ├── dir_list_ci.cpp │ │ ├── dir_list_ci.h │ │ ├── elapsed_timer.cpp │ │ ├── elapsed_timer.h │ │ ├── files.cpp │ │ ├── files.h │ │ ├── files_ini.h │ │ ├── openUrl.cmake │ │ ├── open_url.cpp │ │ ├── open_url.h │ │ ├── strings.cpp │ │ ├── strings.h │ │ └── vptrlist.h │ ├── fixed_point.cpp │ ├── fixed_point.h │ ├── floating_point.cpp │ ├── floating_point.h │ ├── fmt/ │ │ ├── CMakeLists.txt │ │ ├── CONTRIBUTING.rst │ │ ├── LICENSE.rst │ │ ├── README.rst │ │ ├── README.txt │ │ ├── fmt.cmake │ │ ├── fmt_container.h │ │ ├── fmt_format.cpp │ │ ├── fmt_format.h │ │ ├── fmt_ostream.cpp │ │ ├── fmt_ostream.h │ │ ├── fmt_posix.cpp │ │ ├── fmt_posix.h │ │ ├── fmt_printf.cpp │ │ ├── fmt_printf.h │ │ ├── fmt_qformat.h │ │ ├── fmt_string.h │ │ ├── fmt_time.h │ │ ├── orig/ │ │ │ ├── CMakeLists.txt │ │ │ ├── container.h │ │ │ ├── format.cc │ │ │ ├── format.h │ │ │ ├── ostream.cc │ │ │ ├── ostream.h │ │ │ ├── posix.cc │ │ │ ├── posix.h │ │ │ ├── printf.cc │ │ │ ├── printf.h │ │ │ ├── string.h │ │ │ └── time.h │ │ └── update.sh │ ├── fmt_format_ne.h │ ├── fmt_impl.cpp │ ├── fmt_time_ne.h │ ├── forced_int.h │ ├── gif.h │ ├── gif_writer.h │ ├── json/ │ │ ├── LICENSE.MIT │ │ ├── README.md │ │ ├── json.hpp │ │ └── json_rwops_input.hpp │ ├── md5/ │ │ ├── LICENSE │ │ ├── README │ │ ├── md5.cmake │ │ ├── md5.cpp │ │ ├── md5.h │ │ ├── md5_loc.h │ │ ├── md5tools.cpp │ │ └── md5tools.hpp │ ├── numeric_types.h │ ├── pcg/ │ │ ├── LICENSE.txt │ │ ├── README.md │ │ ├── pcg_extras.hpp │ │ ├── pcg_random.hpp │ │ └── pcg_uint128.hpp │ ├── pge_cpu_arch.h │ ├── pge_delay.h │ ├── pge_tonearest.h │ ├── pge_video_rec/ │ │ ├── pge-video-rec.cmake │ │ ├── pge_record_gif.cpp │ │ ├── pge_record_vp8.cpp │ │ ├── pge_video_rec.h │ │ └── pge_video_sink.cpp │ ├── sdl_proxy/ │ │ ├── 16m/ │ │ │ └── std_16m.cpp │ │ ├── 3ds/ │ │ │ ├── 3ds-audio-lib.cpp │ │ │ ├── 3ds-audio-lib.h │ │ │ ├── mixer_3ds.cpp │ │ │ └── std_3ds.cpp │ │ ├── _trash/ │ │ │ ├── mixer_mixerx.cpp │ │ │ ├── sdl_assert.h │ │ │ ├── sdl_atomic.h │ │ │ ├── sdl_head.h │ │ │ ├── sdl_stdinc.h │ │ │ └── sdl_timer.h │ │ ├── base/ │ │ │ └── std_base.cpp │ │ ├── mixer.h │ │ ├── null/ │ │ │ ├── mixer_null.cpp │ │ │ ├── sdl_null.h │ │ │ └── std_null.cpp │ │ ├── sdl_assert.h │ │ ├── sdl_atomic.h │ │ ├── sdl_audio.h │ │ ├── sdl_common.h │ │ ├── sdl_filesystem.h │ │ ├── sdl_head.h │ │ ├── sdl_proxy.cmake │ │ ├── sdl_stdinc.h │ │ ├── sdl_timer.h │ │ ├── sdl_types.h │ │ └── wii/ │ │ └── std_wii.cpp │ ├── sdl_proxy_rwops/ │ │ ├── CMakeLists.txt │ │ ├── include/ │ │ │ └── SDL2/ │ │ │ ├── SDL_rwops.h │ │ │ └── _priv_rwops_funcs.h │ │ ├── sdl_proxy_rwops.c │ │ └── sdl_proxy_rwops_file.c │ ├── sorting/ │ │ ├── pdqsort.h │ │ └── tinysort.h │ ├── tclap/ │ │ ├── Arg.h │ │ ├── ArgContainer.h │ │ ├── ArgException.h │ │ ├── ArgGroup.h │ │ ├── ArgTraits.h │ │ ├── CmdLine.h │ │ ├── CmdLineInterface.h │ │ ├── CmdLineOutput.h │ │ ├── Constraint.h │ │ ├── DeferDelete.h │ │ ├── DocBookOutput.h │ │ ├── HelpVisitor.h │ │ ├── IgnoreRestVisitor.h │ │ ├── MultiArg.h │ │ ├── MultiSwitchArg.h │ │ ├── OptionalUnlabeledTracker.h │ │ ├── README │ │ ├── StandardTraits.h │ │ ├── StdOutput.h │ │ ├── SwitchArg.h │ │ ├── UnlabeledMultiArg.h │ │ ├── UnlabeledValueArg.h │ │ ├── ValueArg.h │ │ ├── ValuesConstraint.h │ │ ├── VersionVisitor.h │ │ ├── Visitor.h │ │ ├── sstream.h │ │ └── tclap.cmake │ ├── util.cpp │ └── util.h ├── pge_version.h ├── repo.sh ├── resources/ │ ├── PkgInfo │ ├── _concepts/ │ │ ├── tv-banner-label.xcf │ │ └── tv-banner.xcf │ ├── _dev_scripts/ │ │ ├── snd_id_2_enum.sh │ │ ├── snd_id_sed.sh │ │ └── xserver.py │ ├── emscripten/ │ │ ├── manifest.json.in │ │ ├── shell_minimal.html │ │ └── sw.js.in │ ├── file_icons/ │ │ ├── file_lvl.icns │ │ ├── file_lvlx.icns │ │ ├── file_wld.icns │ │ └── file_wldx.icns │ ├── flatpak/ │ │ ├── appdata.xml.in │ │ └── build.yml │ ├── haiku/ │ │ ├── PackageInfo.in │ │ ├── icon.hvif │ │ └── icon.rdef │ ├── icon/ │ │ ├── make_icns.sh │ │ └── make_icns_linux.sh │ ├── icon_dev_android/ │ │ └── thextech_512.xcf │ ├── languages/ │ │ ├── assets_bg.json │ │ ├── assets_de.json │ │ ├── assets_en.json │ │ ├── assets_es.json │ │ ├── assets_fr.json │ │ ├── assets_hu.json │ │ ├── assets_it.json │ │ ├── assets_ja.json │ │ ├── assets_ko.json │ │ ├── assets_nb-no.json │ │ ├── assets_pl.json │ │ ├── assets_pt-br.json │ │ ├── assets_pt.json │ │ ├── assets_ru.json │ │ ├── assets_ta.json │ │ ├── assets_tr.json │ │ ├── assets_uk.json │ │ ├── assets_zh-cn.json │ │ ├── assets_zh-tw.json │ │ ├── thextech_bg.json │ │ ├── thextech_de.json │ │ ├── thextech_en.json │ │ ├── thextech_es.json │ │ ├── thextech_fr.json │ │ ├── thextech_hu.json │ │ ├── thextech_it.json │ │ ├── thextech_ja.json │ │ ├── thextech_ko.json │ │ ├── thextech_nb-no.json │ │ ├── thextech_pl.json │ │ ├── thextech_pt-br.json │ │ ├── thextech_pt.json │ │ ├── thextech_ru.json │ │ ├── thextech_ta.json │ │ ├── thextech_tr.json │ │ ├── thextech_uk.json │ │ ├── thextech_zh-cn.json │ │ └── thextech_zh-tw.json │ ├── switch/ │ │ ├── Important.txt │ │ └── thextech-logo.xcf │ ├── thextech.icns │ ├── thextech.plist.in │ ├── thextech.plist.tiger.in │ ├── thextech.rc │ ├── tiger/ │ │ ├── TheXTechRun.in │ │ └── thextech.icns │ ├── vita/ │ │ ├── frag.cgf │ │ ├── sce_sys/ │ │ │ └── livearea/ │ │ │ └── contents/ │ │ │ └── template.xml.in │ │ └── vert.cgv │ ├── wii/ │ │ ├── icon.xcf │ │ └── meta.xml.in │ └── wiiu/ │ ├── icon.xcf │ └── meta.xml.in ├── script/ │ ├── CMakeLists.txt │ ├── include/ │ │ └── xtech_lua_main.h │ └── src/ │ └── xtech_lua_main.cpp ├── src/ │ ├── blk_id.h │ ├── blocks.cpp │ ├── blocks.h │ ├── capabilities.cpp │ ├── capabilities.h │ ├── change_res.cpp │ ├── change_res.h │ ├── cmd_line_setup.h │ ├── collision.cpp │ ├── collision.h │ ├── compat.cpp │ ├── compat.h │ ├── config/ │ │ ├── config_base.cpp │ │ ├── config_base.hpp │ │ ├── config_hooks.cpp │ │ ├── config_hooks.h │ │ ├── config_impl.hpp │ │ ├── config_legacy_compat.cpp │ │ └── config_main.cpp │ ├── config.h │ ├── control/ │ │ ├── con_control.h │ │ ├── controls.cpp │ │ ├── controls_methods.h │ │ ├── controls_strings.h │ │ ├── duplicate.cpp │ │ ├── duplicate.h │ │ ├── input_16m.cpp │ │ ├── input_16m.h │ │ ├── input_3ds.cpp │ │ ├── input_3ds.h │ │ ├── input_wii.cpp │ │ ├── input_wii.h │ │ ├── input_wii_gc.cpp │ │ ├── input_wii_gc.h │ │ ├── joystick.cpp │ │ ├── joystick.h │ │ ├── keyboard.cpp │ │ ├── keyboard.h │ │ ├── touchscreen.cpp │ │ ├── touchscreen.h │ │ └── touchscreen.txt │ ├── control_types.h │ ├── controls.h │ ├── custom.cpp │ ├── custom.h │ ├── draw_planes.h │ ├── editor/ │ │ ├── editor.cpp │ │ ├── editor_custom.cpp │ │ ├── editor_custom.h │ │ ├── editor_strings.cpp │ │ ├── editor_strings.h │ │ ├── magic_block.cpp │ │ ├── magic_block.h │ │ ├── new_editor.cpp │ │ ├── new_editor.h │ │ ├── write_common.cpp │ │ ├── write_common.h │ │ ├── write_level.cpp │ │ ├── write_level.h │ │ ├── write_world.cpp │ │ └── write_world.h │ ├── editor.h │ ├── eff_id.h │ ├── effect.cpp │ ├── effect.h │ ├── fontman/ │ │ ├── crop_info.h │ │ ├── font_engine_base.h │ │ ├── font_manager.cpp │ │ ├── font_manager.h │ │ ├── font_manager_private.cpp │ │ ├── font_manager_private.h │ │ ├── hardcoded_font.cpp │ │ ├── hardcoded_font.h │ │ ├── legacy_font.cpp │ │ ├── legacy_font.h │ │ ├── raster_font.cpp │ │ ├── raster_font.h │ │ ├── ttf_font.cpp │ │ ├── ttf_font.h │ │ └── utf8_helpers.cpp │ ├── frame_timer.cpp │ ├── frame_timer.h │ ├── frm_main.cpp │ ├── frm_main.h │ ├── game_main.cpp │ ├── game_main.h │ ├── gfx.cpp │ ├── gfx.h │ ├── global_constants.h │ ├── global_dirs.cpp │ ├── global_dirs.h │ ├── global_strings.cpp │ ├── global_strings.h │ ├── globals.cpp │ ├── globals.h │ ├── graphics/ │ │ ├── gfx_background.cpp │ │ ├── gfx_camera.cpp │ │ ├── gfx_camera.h │ │ ├── gfx_credits.cpp │ │ ├── gfx_draw_player.cpp │ │ ├── gfx_editor.cpp │ │ ├── gfx_enter_screen.cpp │ │ ├── gfx_frame.cpp │ │ ├── gfx_frame.h │ │ ├── gfx_hud.cpp │ │ ├── gfx_keyhole.cpp │ │ ├── gfx_keyhole.h │ │ ├── gfx_marquee.cpp │ │ ├── gfx_marquee.h │ │ ├── gfx_message.cpp │ │ ├── gfx_print.cpp │ │ ├── gfx_screen.cpp │ │ ├── gfx_special_frames.cpp │ │ ├── gfx_special_frames.h │ │ ├── gfx_update.cpp │ │ ├── gfx_update.h │ │ ├── gfx_update2.cpp │ │ ├── gfx_world.cpp │ │ └── gfx_world.h │ ├── graphics.cpp │ ├── graphics.h │ ├── layers.cpp │ ├── layers.h │ ├── load_gfx.cpp │ ├── load_gfx.h │ ├── location.h │ ├── logic/ │ │ ├── object_graph.cpp │ │ └── object_graph.h │ ├── main/ │ │ ├── asset_pack.cpp │ │ ├── asset_pack.h │ │ ├── block_table.cpp │ │ ├── block_table.h │ │ ├── block_table.hpp │ │ ├── cheat_code.cpp │ │ ├── cheat_code.h │ │ ├── client.cpp │ │ ├── client.h │ │ ├── client_methods.cpp │ │ ├── client_methods.h │ │ ├── game_globals.h │ │ ├── game_info.cpp │ │ ├── game_info.h │ │ ├── game_loop.cpp │ │ ├── game_loop_interrupt.h │ │ ├── game_save.cpp │ │ ├── game_strings.cpp │ │ ├── game_strings.h │ │ ├── gameplay_timer.cpp │ │ ├── gameplay_timer.h │ │ ├── hints.cpp │ │ ├── hints.h │ │ ├── level_file.cpp │ │ ├── level_file.h │ │ ├── level_medals.cpp │ │ ├── level_medals.h │ │ ├── level_save_info.cpp │ │ ├── level_save_info.h │ │ ├── main_config.cpp │ │ ├── menu_controls.cpp │ │ ├── menu_controls.h │ │ ├── menu_loop.cpp │ │ ├── menu_main.cpp │ │ ├── menu_main.h │ │ ├── outro_loop.cpp │ │ ├── outro_loop.h │ │ ├── player_frames.cpp │ │ ├── record.cpp │ │ ├── record.h │ │ ├── screen_asset_pack.cpp │ │ ├── screen_asset_pack.h │ │ ├── screen_connect.cpp │ │ ├── screen_connect.h │ │ ├── screen_content.cpp │ │ ├── screen_content.h │ │ ├── screen_options.cpp │ │ ├── screen_options.h │ │ ├── screen_pause.cpp │ │ ├── screen_pause.h │ │ ├── screen_progress.cpp │ │ ├── screen_progress.h │ │ ├── screen_prompt.cpp │ │ ├── screen_prompt.h │ │ ├── screen_quickreconnect.cpp │ │ ├── screen_quickreconnect.h │ │ ├── screen_textentry.cpp │ │ ├── screen_textentry.h │ │ ├── setup_physics.cpp │ │ ├── setup_vars.cpp │ │ ├── speedrunner.cpp │ │ ├── speedrunner.h │ │ ├── translate/ │ │ │ ├── tr_level.h │ │ │ ├── tr_script.h │ │ │ ├── tr_title.h │ │ │ └── tr_world.h │ │ ├── translate.cpp │ │ ├── translate.h │ │ ├── translate_episode.cpp │ │ ├── translate_episode.h │ │ ├── trees.cpp │ │ ├── trees.h │ │ ├── world_file.cpp │ │ ├── world_file.h │ │ ├── world_globals.h │ │ └── world_loop.cpp │ ├── main.cpp │ ├── message.cpp │ ├── message.h │ ├── npc/ │ │ ├── npc_activation.cpp │ │ ├── npc_activation.h │ │ ├── npc_bonus.cpp │ │ ├── npc_cockpit_bits.h │ │ ├── npc_frames.cpp │ │ ├── npc_hit.cpp │ │ ├── npc_kill.cpp │ │ ├── npc_queues.cpp │ │ ├── npc_queues.h │ │ ├── npc_update/ │ │ │ ├── npc_block_logic.cpp │ │ │ ├── npc_collide.cpp │ │ │ ├── npc_effects.cpp │ │ │ ├── npc_generator.cpp │ │ │ ├── npc_movement_logic.cpp │ │ │ ├── npc_special_maybe_held.cpp │ │ │ ├── npc_update_priv.h │ │ │ └── npc_walking_logic.cpp │ │ ├── npc_update.cpp │ │ ├── safe_set.hpp │ │ ├── section_overlap.cpp │ │ └── section_overlap.h │ ├── npc.cpp │ ├── npc.h │ ├── npc_constant_traits.h │ ├── npc_effect.h │ ├── npc_id.h │ ├── npc_special_data.h │ ├── npc_traits.h │ ├── phys_env.cpp │ ├── phys_env.h │ ├── phys_id.h │ ├── pinched_info.h │ ├── player/ │ │ ├── player_action_logic.cpp │ │ ├── player_block_logic.cpp │ │ ├── player_char5_logic.cpp │ │ ├── player_death_logic.cpp │ │ ├── player_effect.h │ │ ├── player_fairy_logic.cpp │ │ ├── player_movement_logic.cpp │ │ ├── player_npc_logic.cpp │ │ ├── player_pinched_logic.cpp │ │ ├── player_screen_logic.cpp │ │ ├── player_update.cpp │ │ ├── player_update_priv.h │ │ ├── player_vehicle_logic.cpp │ │ ├── player_vine_logic.cpp │ │ └── player_warp_logic.cpp │ ├── player.cpp │ ├── player.h │ ├── pseudo_vb.h │ ├── rand.cpp │ ├── rand.h │ ├── range_arr.hpp │ ├── ref_type.h │ ├── saved_layers.cpp │ ├── saved_layers.h │ ├── screen.cpp │ ├── screen.h │ ├── screen_fader.cpp │ ├── screen_fader.h │ ├── script/ │ │ ├── luau/ │ │ │ ├── test.cpp │ │ │ └── test.h │ │ ├── luna/ │ │ │ ├── autocode.cpp │ │ │ ├── autocode.h │ │ │ ├── autocode_manager.cpp │ │ │ ├── autocode_manager.h │ │ │ ├── csprite.cpp │ │ │ ├── csprite.h │ │ │ ├── hitbox.cpp │ │ │ ├── hitbox.h │ │ │ ├── levels/ │ │ │ │ ├── Docopoper-AbstractAssault.cpp │ │ │ │ ├── Docopoper-AbstractAssault.h │ │ │ │ ├── Docopoper-Calleoca.cpp │ │ │ │ ├── Docopoper-Calleoca.h │ │ │ │ ├── Docopoper-TheFloorisLava.cpp │ │ │ │ ├── Docopoper-TheFloorisLava.h │ │ │ │ ├── KilArmoryCode.cpp │ │ │ │ ├── KilArmoryCode.h │ │ │ │ ├── README.txt │ │ │ │ ├── SAJewers-QraestoliaCaverns.cpp │ │ │ │ ├── SAJewers-QraestoliaCaverns.h │ │ │ │ ├── SAJewers-Snowboardin.cpp │ │ │ │ ├── SAJewers-Snowboardin.h │ │ │ │ ├── Talkhaus-Science_Final_Battle.cpp │ │ │ │ └── Talkhaus-Science_Final_Battle.h │ │ │ ├── luna.cpp │ │ │ ├── luna.h │ │ │ ├── lunablock.cpp │ │ │ ├── lunablock.h │ │ │ ├── lunacounter.cpp │ │ │ ├── lunacounter.h │ │ │ ├── lunacounter_record.cpp │ │ │ ├── lunacounter_record.h │ │ │ ├── lunacounter_util.h │ │ │ ├── lunadefs.h │ │ │ ├── lunaglobals.cpp │ │ │ ├── lunaimgbox.cpp │ │ │ ├── lunaimgbox.h │ │ │ ├── lunainput.cpp │ │ │ ├── lunainput.h │ │ │ ├── lunalayer.cpp │ │ │ ├── lunalayer.h │ │ │ ├── lunalevel.cpp │ │ │ ├── lunalevel.h │ │ │ ├── lunalevels.cpp │ │ │ ├── lunalevels.h │ │ │ ├── lunamisc.cpp │ │ │ ├── lunamisc.h │ │ │ ├── lunanpc.cpp │ │ │ ├── lunanpc.h │ │ │ ├── lunaplayer.cpp │ │ │ ├── lunaplayer.h │ │ │ ├── lunarender.cpp │ │ │ ├── lunarender.h │ │ │ ├── lunaspriteman.cpp │ │ │ ├── lunaspriteman.h │ │ │ ├── lunavarbank.cpp │ │ │ ├── lunavarbank.h │ │ │ ├── mememu.cpp │ │ │ ├── mememu.h │ │ │ ├── renderop.h │ │ │ ├── renderop_bitmap.cpp │ │ │ ├── renderop_bitmap.h │ │ │ ├── renderop_effect.cpp │ │ │ ├── renderop_effect.h │ │ │ ├── renderop_rect.cpp │ │ │ ├── renderop_rect.h │ │ │ ├── renderop_string.cpp │ │ │ ├── renderop_string.h │ │ │ ├── sprite_component.cpp │ │ │ ├── sprite_component.h │ │ │ ├── sprite_funcs.cpp │ │ │ └── sprite_funcs.h │ │ ├── msg_macros.cpp │ │ ├── msg_macros.h │ │ ├── msg_preprocessor.cpp │ │ └── msg_preprocessor.h │ ├── sorting.cpp │ ├── sorting.h │ ├── sound/ │ │ ├── fx/ │ │ │ ├── fx_common.hpp │ │ │ ├── fx_format.h │ │ │ ├── reverb.cpp │ │ │ ├── reverb.h │ │ │ ├── spc_echo.cpp │ │ │ └── spc_echo.h │ │ ├── snd-src/ │ │ │ ├── message.mid │ │ │ └── sm-glass.mid │ │ ├── sound_msgsnd.cpp │ │ └── sound_msgsnd.h │ ├── sound.cpp │ ├── sound.h │ ├── sound_spatial.cpp │ ├── sound_thread.cpp │ ├── sound_thread.h │ ├── std_picture.cpp │ ├── std_picture.h │ ├── video.h │ └── xt_color.h ├── test/ │ ├── CI-tests.py │ ├── CMakeLists.txt │ ├── common/ │ │ ├── catch_amalgamated.cpp │ │ └── catch_amalgamated.hpp │ ├── levels/ │ │ ├── Beech kick 1.lvl │ │ ├── Beech kick 2.lvl │ │ ├── Conveyor hell.lvl │ │ ├── Exits test.lvl │ │ ├── Fall test.lvl │ │ ├── Fence climb Move.lvl │ │ ├── Fence climb.lvl │ │ ├── Player clip - min.lvl │ │ ├── Player clip.lvl │ │ ├── Player through block.lvl │ │ ├── Pockey test.lvl │ │ ├── Raft ride.lvl │ │ ├── Shelf surf.lvl │ │ ├── Shell on spring.lvl │ │ ├── Skull raft 2.lvl │ │ ├── Slope test.lvl │ │ ├── Veggies shoot.lvl │ │ ├── compat.ini │ │ └── doors test.lvl │ ├── test_msg_macro/ │ │ ├── CMakeLists.txt │ │ └── test_msg_macro.cpp │ └── worlds/ │ └── speedrun-unit-test/ │ ├── unit-test.lvlx │ └── unit-test.wldx ├── utils/ │ ├── convertkit/ │ │ ├── GIFs2PNG/ │ │ │ ├── CMakeLists.txt │ │ │ ├── _resources/ │ │ │ │ ├── cat_gif2png/ │ │ │ │ │ └── make_icns.sh │ │ │ │ ├── cat_gif2png.icns │ │ │ │ ├── gifs2png.qrc │ │ │ │ └── gifs2png.rc │ │ │ ├── common_features/ │ │ │ │ ├── config_manager.cpp │ │ │ │ └── config_manager.h │ │ │ ├── gifs2png.cpp │ │ │ ├── version.cmake │ │ │ └── version.h │ │ ├── assets-convert-homebrew.py │ │ ├── audio_convert_16m.py │ │ ├── convert_plr.py │ │ ├── dist/ │ │ │ ├── gameinfo.ini │ │ │ ├── gfx-convert-lin.sh │ │ │ ├── gfx-convert-win.cmd │ │ │ ├── music.ini │ │ │ ├── sounds.ini │ │ │ └── thextech.ini │ │ ├── exe2ui/ │ │ │ ├── exe2ui.c │ │ │ └── exe2ui_build.sh │ │ ├── gfx-convert-16m.py │ │ ├── gfx-convert-3ds.py │ │ └── gfx-convert-wii.py │ ├── submodule-update.sh │ └── update-copyright.sh ├── version.cmake └── version.h
Copy disabled (too large)
Download .txt
Showing preview only (300,555K chars total). Download the full file to get everything.
SYMBOL INDEX (6498 symbols across 503 files)
FILE: .github/ci-helper/support/dmg-license.py
class Path (line 33) | class Path(str):
method __enter__ (line 34) | def __enter__(self):
method __exit__ (line 37) | def __exit__(self, in_type, value, traceback):
function mktemp (line 41) | def mktemp(dir=None, suffix=''):
function main (line 47) | def main(in_options, in_args):
FILE: .github/ci-helper/support/dmg-license3.py
class Path (line 33) | class Path(str):
method __enter__ (line 34) | def __enter__(self):
method __exit__ (line 37) | def __exit__(self, in_type, value, traceback):
function mktemp (line 41) | def mktemp(dirname=None, suffix=''):
function main (line 47) | def main(in_options, in_args):
FILE: .github/ci-helper/translate_patcher.py
function merge_jsons (line 8) | def merge_jsons(my_dict, output):
function main (line 19) | def main(in_args):
FILE: android-project/thextech/src/main/java/javautil/FileUtils.java
class FileUtils (line 24) | public class FileUtils
method FileUtils (line 36) | public FileUtils(Context context)
method isInternalCopy (line 41) | public boolean isInternalCopy()
method getPath (line 46) | @SuppressLint("NewApi")
method fileExists (line 273) | private static boolean fileExists(String filePath)
method getPathFromExtSD (line 279) | private static String getPathFromExtSD(String[] pathData)
method getDriveFilePath (line 331) | private String getDriveFilePath(Uri uri)
method copyFileToInternalStorage (line 391) | private String copyFileToInternalStorage(Uri uri, String newDirName)
method getFilePathForWhatsApp (line 472) | private String getFilePathForWhatsApp(Uri uri)
method getDataColumn (line 477) | private String getDataColumn(Context context, Uri uri, String selectio...
method isExternalStorageDocument (line 514) | private static boolean isExternalStorageDocument(Uri uri)
method isDownloadsDocument (line 519) | private static boolean isDownloadsDocument(Uri uri)
method isMediaDocument (line 524) | private boolean isMediaDocument(Uri uri)
method isGooglePhotosUri (line 529) | private boolean isGooglePhotosUri(Uri uri)
method isWhatsAppFile (line 534) | public boolean isWhatsAppFile(Uri uri)
method isSamsungMyFilesAppFile (line 539) | public boolean isSamsungMyFilesAppFile(Uri uri)
method isGoogleDriveUri (line 544) | private boolean isGoogleDriveUri(Uri uri)
FILE: android-project/thextech/src/main/java/org/libsdl/app/HIDDevice.java
type HIDDevice (line 5) | interface HIDDevice
method getId (line 7) | public int getId();
method getVendorId (line 8) | public int getVendorId();
method getProductId (line 9) | public int getProductId();
method getSerialNumber (line 10) | public String getSerialNumber();
method getVersion (line 11) | public int getVersion();
method getManufacturerName (line 12) | public String getManufacturerName();
method getProductName (line 13) | public String getProductName();
method getDevice (line 14) | public UsbDevice getDevice();
method open (line 15) | public boolean open();
method sendFeatureReport (line 16) | public int sendFeatureReport(byte[] report);
method sendOutputReport (line 17) | public int sendOutputReport(byte[] report);
method getFeatureReport (line 18) | public boolean getFeatureReport(byte[] report);
method setFrozen (line 19) | public void setFrozen(boolean frozen);
method close (line 20) | public void close();
method shutdown (line 21) | public void shutdown();
FILE: android-project/thextech/src/main/java/org/libsdl/app/HIDDeviceBLESteamController.java
class HIDDeviceBLESteamController (line 25) | class HIDDeviceBLESteamController extends BluetoothGattCallback implemen...
class GattOperation (line 52) | static class GattOperation {
type Operation (line 53) | private enum Operation {
method GattOperation (line 65) | private GattOperation(BluetoothGatt gatt, GattOperation.Operation op...
method GattOperation (line 71) | private GattOperation(BluetoothGatt gatt, GattOperation.Operation op...
method run (line 78) | public void run() {
method finish (line 135) | public boolean finish() {
method getCharacteristic (line 139) | private BluetoothGattCharacteristic getCharacteristic(UUID uuid) {
method readCharacteristic (line 146) | static public GattOperation readCharacteristic(BluetoothGatt gatt, U...
method writeCharacteristic (line 150) | static public GattOperation writeCharacteristic(BluetoothGatt gatt, ...
method enableNotification (line 154) | static public GattOperation enableNotification(BluetoothGatt gatt, U...
method HIDDeviceBLESteamController (line 159) | public HIDDeviceBLESteamController(HIDDeviceManager manager, Bluetooth...
method getIdentifier (line 178) | public String getIdentifier() {
method getGatt (line 182) | public BluetoothGatt getGatt() {
method connectGatt (line 188) | private BluetoothGatt connectGatt(boolean managed) {
method connectGatt (line 200) | private BluetoothGatt connectGatt() {
method getConnectionState (line 204) | protected int getConnectionState() {
method reconnect (line 222) | public void reconnect() {
method checkConnectionForChromebookIssue (line 231) | protected void checkConnectionForChromebookIssue() {
method isRegistered (line 292) | private boolean isRegistered() {
method setRegistered (line 296) | private void setRegistered() {
method probeService (line 300) | private boolean probeService(HIDDeviceBLESteamController controller) {
method finishCurrentGattOperation (line 345) | private void finishCurrentGattOperation() {
method executeNextGattOperation (line 364) | private void executeNextGattOperation() {
method queueGattOperation (line 392) | private void queueGattOperation(GattOperation op) {
method enableNotification (line 399) | private void enableNotification(UUID chrUuid) {
method writeCharacteristic (line 404) | public void writeCharacteristic(UUID uuid, byte[] value) {
method readCharacteristic (line 409) | public void readCharacteristic(UUID uuid) {
method onConnectionStateChange (line 418) | public void onConnectionStateChange(BluetoothGatt g, int status, int n...
method onServicesDiscovered (line 440) | public void onServicesDiscovered(BluetoothGatt gatt, int status) {
method onCharacteristicRead (line 456) | public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattChar...
method onCharacteristicWrite (line 466) | public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCha...
method onCharacteristicChanged (line 481) | public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattC...
method onDescriptorRead (line 490) | public void onDescriptorRead(BluetoothGatt gatt, BluetoothGattDescript...
method onDescriptorWrite (line 494) | public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescrip...
method onReliableWriteCompleted (line 511) | public void onReliableWriteCompleted(BluetoothGatt gatt, int status) {
method onReadRemoteRssi (line 515) | public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) {
method onMtuChanged (line 519) | public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) {
method getId (line 527) | @Override
method getVendorId (line 532) | @Override
method getProductId (line 539) | @Override
method getSerialNumber (line 546) | @Override
method getVersion (line 552) | @Override
method getManufacturerName (line 557) | @Override
method getProductName (line 562) | @Override
method getDevice (line 567) | @Override
method open (line 572) | @Override
method sendFeatureReport (line 577) | @Override
method sendOutputReport (line 594) | @Override
method getFeatureReport (line 609) | @Override
method close (line 624) | @Override
method setFrozen (line 628) | @Override
method shutdown (line 633) | @Override
FILE: android-project/thextech/src/main/java/org/libsdl/app/HIDDeviceManager.java
class HIDDeviceManager (line 28) | public class HIDDeviceManager {
method acquire (line 35) | public static HIDDeviceManager acquire(Context context) {
method release (line 43) | public static void release(HIDDeviceManager manager) {
method onReceive (line 65) | @Override
method onReceive (line 82) | @Override
method HIDDeviceManager (line 105) | private HIDDeviceManager(final Context context) {
method getContext (line 124) | public Context getContext() {
method getDeviceIDForIdentifier (line 128) | public int getDeviceIDForIdentifier(String identifier) {
method initializeUSB (line 142) | private void initializeUSB() {
method getUSBManager (line 203) | UsbManager getUSBManager() {
method shutdownUSB (line 207) | private void shutdownUSB() {
method isHIDDeviceInterface (line 215) | private boolean isHIDDeviceInterface(UsbDevice usbDevice, UsbInterface...
method isXbox360Controller (line 225) | private boolean isXbox360Controller(UsbDevice usbDevice, UsbInterface ...
method isXboxOneController (line 272) | private boolean isXboxOneController(UsbDevice usbDevice, UsbInterface ...
method handleUsbDeviceAttached (line 306) | private void handleUsbDeviceAttached(UsbDevice usbDevice) {
method handleUsbDeviceDetached (line 310) | private void handleUsbDeviceDetached(UsbDevice usbDevice) {
method handleUsbDevicePermission (line 325) | private void handleUsbDevicePermission(UsbDevice usbDevice, boolean pe...
method connectHIDDeviceUSB (line 337) | private void connectHIDDeviceUSB(UsbDevice usbDevice) {
method initializeBluetooth (line 360) | private void initializeBluetooth() {
method shutdownBluetooth (line 423) | private void shutdownBluetooth() {
method chromebookConnectionHandler (line 434) | public void chromebookConnectionHandler() {
method connectBluetoothDevice (line 473) | public boolean connectBluetoothDevice(BluetoothDevice bluetoothDevice) {
method disconnectBluetoothDevice (line 494) | public void disconnectBluetoothDevice(BluetoothDevice bluetoothDevice) {
method isSteamController (line 508) | public boolean isSteamController(BluetoothDevice bluetoothDevice) {
method close (line 522) | private void close() {
method setFrozen (line 535) | public void setFrozen(boolean frozen) {
method getDevice (line 547) | private HIDDevice getDevice(int id) {
method initialize (line 562) | public boolean initialize(boolean usb, boolean bluetooth) {
method openDevice (line 574) | public boolean openDevice(int deviceID) {
method sendOutputReport (line 616) | public int sendOutputReport(int deviceID, byte[] report) {
method sendFeatureReport (line 633) | public int sendFeatureReport(int deviceID, byte[] report) {
method getFeatureReport (line 650) | public boolean getFeatureReport(int deviceID, byte[] report) {
method closeDevice (line 667) | public void closeDevice(int deviceID) {
method HIDDeviceRegisterCallback (line 688) | private native void HIDDeviceRegisterCallback();
method HIDDeviceReleaseCallback (line 689) | private native void HIDDeviceReleaseCallback();
method HIDDeviceConnected (line 691) | native void HIDDeviceConnected(int deviceID, String identifier, int ve...
method HIDDeviceOpenPending (line 692) | native void HIDDeviceOpenPending(int deviceID);
method HIDDeviceOpenResult (line 693) | native void HIDDeviceOpenResult(int deviceID, boolean opened);
method HIDDeviceDisconnected (line 694) | native void HIDDeviceDisconnected(int deviceID);
method HIDDeviceInputReport (line 696) | native void HIDDeviceInputReport(int deviceID, byte[] report);
method HIDDeviceFeatureReport (line 697) | native void HIDDeviceFeatureReport(int deviceID, byte[] report);
FILE: android-project/thextech/src/main/java/org/libsdl/app/HIDDeviceUSB.java
class HIDDeviceUSB (line 8) | class HIDDeviceUSB implements HIDDevice {
method HIDDeviceUSB (line 24) | public HIDDeviceUSB(HIDDeviceManager manager, UsbDevice usbDevice, int...
method getIdentifier (line 33) | public String getIdentifier() {
method getId (line 37) | @Override
method getVendorId (line 42) | @Override
method getProductId (line 47) | @Override
method getSerialNumber (line 52) | @Override
method getVersion (line 69) | @Override
method getManufacturerName (line 74) | @Override
method getProductName (line 86) | @Override
method getDevice (line 98) | @Override
method getDeviceName (line 103) | public String getDeviceName() {
method open (line 107) | @Override
method sendFeatureReport (line 155) | @Override
method sendOutputReport (line 188) | @Override
method getFeatureReport (line 197) | @Override
method close (line 242) | @Override
method shutdown (line 264) | @Override
method setFrozen (line 270) | @Override
class InputThread (line 275) | protected class InputThread extends Thread {
method run (line 276) | @Override
FILE: android-project/thextech/src/main/java/org/libsdl/app/SDL.java
class SDL (line 11) | public class SDL {
method setupJNI (line 15) | public static void setupJNI() {
method initialize (line 22) | public static void initialize() {
method setContext (line 31) | public static void setContext(Context context) {
method getContext (line 36) | public static Context getContext() {
method loadLibrary (line 40) | public static void loadLibrary(String libraryName) throws UnsatisfiedL...
method loadLibrary (line 44) | public static void loadLibrary(String libraryName, Context context) th...
FILE: android-project/thextech/src/main/java/org/libsdl/app/SDLActivity.java
class SDLActivity (line 60) | public class SDLActivity extends Activity implements View.OnSystemUiVisi...
type NativeState (line 200) | public enum NativeState {
method getMotionListener (line 225) | protected static SDLGenericMotionListener_API12 getMotionListener() {
method getMainSharedObject (line 243) | protected String getMainSharedObject() {
method getMainFunction (line 258) | protected String getMainFunction() {
method getLibraries (line 270) | protected String[] getLibraries() {
method loadLibraries (line 282) | public void loadLibraries() {
method getArguments (line 294) | protected String[] getArguments() {
method initialize (line 298) | public static void initialize() {
method createSDLSurface (line 315) | protected SDLSurface createSDLSurface(Context context) {
method onCreate (line 320) | @Override
method pauseNativeThread (line 432) | protected void pauseNativeThread() {
method resumeNativeThread (line 443) | protected void resumeNativeThread() {
method onPause (line 455) | @Override
method onResume (line 468) | @Override
method onStop (line 481) | @Override
method onStart (line 490) | @Override
method getCurrentOrientation (line 499) | public static int getCurrentOrientation() {
method onWindowFocusChanged (line 529) | @Override
method onLowMemory (line 555) | @Override
method onConfigurationChanged (line 567) | @Override
method onDestroy (line 582) | @Override
method onBackPressed (line 616) | @Override
method manualBackButton (line 636) | public static void manualBackButton() {
method pressBackButton (line 641) | public void pressBackButton() {
method superOnBackPressed (line 653) | public void superOnBackPressed() {
method dispatchKeyEvent (line 657) | @Override
method handleNativeState (line 678) | public static void handleNativeState() {
method onUnhandledMessage (line 745) | protected boolean onUnhandledMessage(int command, Object param) {
class SDLCommandHandler (line 754) | protected static class SDLCommandHandler extends Handler {
method handleMessage (line 755) | @Override
method sendCommand (line 843) | boolean sendCommand(int command, Object data) {
method nativeGetVersion (line 905) | public static native String nativeGetVersion();
method nativeSetupJNI (line 906) | public static native int nativeSetupJNI();
method nativeRunMain (line 907) | public static native int nativeRunMain(String library, String function...
method nativeLowMemory (line 908) | public static native void nativeLowMemory();
method nativeSendQuit (line 909) | public static native void nativeSendQuit();
method nativeQuit (line 910) | public static native void nativeQuit();
method nativePause (line 911) | public static native void nativePause();
method nativeResume (line 912) | public static native void nativeResume();
method nativeFocusChanged (line 913) | public static native void nativeFocusChanged(boolean hasFocus);
method onNativeDropFile (line 914) | public static native void onNativeDropFile(String filename);
method nativeSetScreenResolution (line 915) | public static native void nativeSetScreenResolution(int surfaceWidth, ...
method onNativeResize (line 916) | public static native void onNativeResize();
method onNativeKeyDown (line 917) | public static native void onNativeKeyDown(int keycode);
method onNativeKeyUp (line 918) | public static native void onNativeKeyUp(int keycode);
method onNativeSoftReturnKey (line 919) | public static native boolean onNativeSoftReturnKey();
method onNativeKeyboardFocusLost (line 920) | public static native void onNativeKeyboardFocusLost();
method onNativeMouse (line 921) | public static native void onNativeMouse(int button, int action, float ...
method onNativeTouch (line 922) | public static native void onNativeTouch(int touchDevId, int pointerFin...
method onNativeAccel (line 925) | public static native void onNativeAccel(float x, float y, float z);
method onNativeClipboardChanged (line 926) | public static native void onNativeClipboardChanged();
method onNativeSurfaceCreated (line 927) | public static native void onNativeSurfaceCreated();
method onNativeSurfaceChanged (line 928) | public static native void onNativeSurfaceChanged();
method onNativeSurfaceDestroyed (line 929) | public static native void onNativeSurfaceDestroyed();
method nativeGetHint (line 930) | public static native String nativeGetHint(String name);
method nativeGetHintBoolean (line 931) | public static native boolean nativeGetHintBoolean(String name, boolean...
method nativeSetenv (line 932) | public static native void nativeSetenv(String name, String value);
method onNativeOrientationChanged (line 933) | public static native void onNativeOrientationChanged(int orientation);
method nativeAddTouch (line 934) | public static native void nativeAddTouch(int touchId, String name);
method nativePermissionResult (line 935) | public static native void nativePermissionResult(int requestCode, bool...
method onNativeLocaleChanged (line 936) | public static native void onNativeLocaleChanged();
method setActivityTitle (line 941) | public static boolean setActivityTitle(String title) {
method setWindowStyle (line 949) | public static void setWindowStyle(boolean fullscreen) {
method setOrientation (line 959) | public static void setOrientation(int w, int h, boolean resizable, Str...
method setOrientationBis (line 969) | public void setOrientationBis(int w, int h, boolean resizable, String ...
method minimizeWindow (line 1035) | public static void minimizeWindow() {
method shouldMinimizeOnFocusLoss (line 1050) | public static boolean shouldMinimizeOnFocusLoss() {
method isScreenKeyboardShown (line 1074) | public static boolean isScreenKeyboardShown()
method supportsRelativeMouse (line 1092) | public static boolean supportsRelativeMouse()
method setRelativeMouseEnabled (line 1111) | public static boolean setRelativeMouseEnabled(boolean enabled)
method sendMessage (line 1123) | public static boolean sendMessage(int command, int param) {
method getContext (line 1133) | public static Context getContext() {
method isAndroidTV (line 1140) | public static boolean isAndroidTV() {
method getDiagonal (line 1154) | public static double getDiagonal()
method isTablet (line 1172) | public static boolean isTablet() {
method isChromebook (line 1180) | public static boolean isChromebook() {
method isDeXMode (line 1190) | public static boolean isDeXMode() {
method getDisplayDPI (line 1207) | public static DisplayMetrics getDisplayDPI() {
method getManifestEnvironmentVariables (line 1214) | public static boolean getManifestEnvironmentVariables() {
method getContentView (line 1243) | public static View getContentView() {
class ShowTextInputTask (line 1247) | static class ShowTextInputTask implements Runnable {
method ShowTextInputTask (line 1257) | public ShowTextInputTask(int x, int y, int w, int h) {
method run (line 1272) | @Override
method showTextInput (line 1299) | public static boolean showTextInput(int x, int y, int w, int h) {
method isTextInputEvent (line 1304) | public static boolean isTextInputEvent(KeyEvent event) {
method handleKeyEvent (line 1314) | public static boolean handleKeyEvent(View v, int keyCode, KeyEvent eve...
method getNativeSurface (line 1386) | public static Surface getNativeSurface() {
method initTouch (line 1398) | public static void initTouch() {
method messageboxShowMessageBox (line 1437) | public int messageboxShowMessageBox(
method messageboxCreateAndShow (line 1490) | protected void messageboxCreateAndShow(Bundle args) {
method run (line 1624) | @Override
method onSystemUiVisibilityChange (line 1639) | public void onSystemUiVisibilityChange(int visibility) {
method clipboardHasText (line 1654) | public static boolean clipboardHasText() {
method clipboardGetText (line 1661) | public static String clipboardGetText() {
method clipboardSetText (line 1668) | public static void clipboardSetText(String string) {
method createCustomCursor (line 1675) | public static int createCustomCursor(int[] colors, int width, int heig...
method destroyCustomCursor (line 1694) | public static void destroyCustomCursor(int cursorID) {
method setCustomCursor (line 1707) | public static boolean setCustomCursor(int cursorID) {
method setSystemCursor (line 1724) | public static boolean setSystemCursor(int cursorID) {
method requestPermission (line 1777) | public static void requestPermission(String permission, int requestCod...
method onRequestPermissionsResult (line 1791) | @Override
method openURL (line 1800) | public static int openURL(String url)
method showToast (line 1824) | public static int showToast(String message, int duration, int gravity,...
class SDLMain (line 1871) | class SDLMain implements Runnable {
method run (line 1872) | @Override
class DummyEdit (line 1903) | class DummyEdit extends View implements View.OnKeyListener {
method DummyEdit (line 1906) | public DummyEdit(Context context) {
method onCheckIsTextEditor (line 1913) | @Override
method onKey (line 1918) | @Override
method onKeyPreIme (line 1924) | @Override
method onCreateInputConnection (line 1940) | @Override
class SDLInputConnection (line 1953) | class SDLInputConnection extends BaseInputConnection {
method SDLInputConnection (line 1958) | public SDLInputConnection(View targetView, boolean fullEditor) {
method getEditable (line 1963) | @Override
method sendKeyEvent (line 1968) | @Override
method commitText (line 1991) | @Override
method setComposingText (line 2000) | @Override
method deleteSurroundingText (line 2009) | @Override
method updateText (line 2030) | protected void updateText() {
method nativeCommitText (line 2075) | public static native void nativeCommitText(String text, int newCursorP...
method nativeGenerateScancodeForUnichar (line 2077) | public static native void nativeGenerateScancodeForUnichar(char c);
class SDLClipboardHandler (line 2080) | class SDLClipboardHandler implements
method SDLClipboardHandler (line 2085) | SDLClipboardHandler() {
method clipboardHasText (line 2090) | public boolean clipboardHasText() {
method clipboardGetText (line 2094) | public String clipboardGetText() {
method clipboardSetText (line 2108) | public void clipboardSetText(String string) {
method onPrimaryClipChanged (line 2115) | @Override
FILE: android-project/thextech/src/main/java/org/libsdl/app/SDLAudioManager.java
class SDLAudioManager (line 16) | public class SDLAudioManager {
method initialize (line 27) | public static void initialize() {
method setContext (line 48) | public static void setContext(Context context) {
method release (line 55) | public static void release(Context context) {
method getAudioFormatString (line 61) | protected static String getAudioFormatString(int audioFormat) {
method open (line 74) | protected static int[] open(boolean isCapture, int sampleRate, int aud...
method getInputAudioDeviceInfo (line 285) | private static AudioDeviceInfo getInputAudioDeviceInfo(int deviceId) {
method getOutputAudioDeviceInfo (line 297) | private static AudioDeviceInfo getOutputAudioDeviceInfo(int deviceId) {
method registerAudioDeviceCallback (line 309) | private static void registerAudioDeviceCallback() {
method unregisterAudioDeviceCallback (line 316) | private static void unregisterAudioDeviceCallback(Context context) {
method getAudioOutputDevices (line 326) | public static int[] getAudioOutputDevices() {
method getAudioInputDevices (line 338) | public static int[] getAudioInputDevices() {
method audioOpen (line 350) | public static int[] audioOpen(int sampleRate, int audioFormat, int des...
method audioWriteFloatBuffer (line 357) | public static void audioWriteFloatBuffer(float[] buffer) {
method audioWriteShortBuffer (line 388) | public static void audioWriteShortBuffer(short[] buffer) {
method audioWriteByteBuffer (line 414) | public static void audioWriteByteBuffer(byte[] buffer) {
method captureOpen (line 440) | public static int[] captureOpen(int sampleRate, int audioFormat, int d...
method captureReadFloatBuffer (line 445) | public static int captureReadFloatBuffer(float[] buffer, boolean block...
method captureReadShortBuffer (line 454) | public static int captureReadShortBuffer(short[] buffer, boolean block...
method captureReadByteBuffer (line 463) | public static int captureReadByteBuffer(byte[] buffer, boolean blockin...
method audioClose (line 472) | public static void audioClose() {
method captureClose (line 481) | public static void captureClose() {
method audioSetThreadPriority (line 490) | public static void audioSetThreadPriority(boolean iscapture, int devic...
method nativeSetupJNI (line 508) | public static native int nativeSetupJNI();
method removeAudioDevice (line 510) | public static native void removeAudioDevice(boolean isCapture, int dev...
method addAudioDevice (line 512) | public static native void addAudioDevice(boolean isCapture, int device...
FILE: android-project/thextech/src/main/java/org/libsdl/app/SDLControllerManager.java
class SDLControllerManager (line 19) | public class SDLControllerManager
method nativeSetupJNI (line 22) | public static native int nativeSetupJNI();
method nativeAddJoystick (line 24) | public static native int nativeAddJoystick(int device_id, String name,...
method nativeRemoveJoystick (line 28) | public static native int nativeRemoveJoystick(int device_id);
method nativeAddHaptic (line 29) | public static native int nativeAddHaptic(int device_id, String name);
method nativeRemoveHaptic (line 30) | public static native int nativeRemoveHaptic(int device_id);
method onNativePadDown (line 31) | public static native int onNativePadDown(int device_id, int keycode);
method onNativePadUp (line 32) | public static native int onNativePadUp(int device_id, int keycode);
method onNativeJoy (line 33) | public static native void onNativeJoy(int device_id, int axis,
method onNativeHat (line 35) | public static native void onNativeHat(int device_id, int hat_id,
method initialize (line 43) | public static void initialize() {
method handleJoystickMotionEvent (line 62) | public static boolean handleJoystickMotionEvent(MotionEvent event) {
method pollInputDevices (line 69) | public static void pollInputDevices() {
method pollHapticDevices (line 76) | public static void pollHapticDevices() {
method hapticRun (line 83) | public static void hapticRun(int device_id, float intensity, int lengt...
method hapticStop (line 90) | public static void hapticStop(int device_id)
method isDeviceSDLJoystick (line 96) | public static boolean isDeviceSDLJoystick(int deviceId) {
class SDLJoystickHandler (line 126) | class SDLJoystickHandler {
method handleMotionEvent (line 133) | public boolean handleMotionEvent(MotionEvent event) {
method pollInputDevices (line 140) | public void pollInputDevices() {
class SDLJoystickHandler_API16 (line 145) | class SDLJoystickHandler_API16 extends SDLJoystickHandler {
class SDLJoystick (line 147) | static class SDLJoystick {
class RangeComparator (line 154) | static class RangeComparator implements Comparator<InputDevice.MotionR...
method compare (line 155) | @Override
method SDLJoystickHandler_API16 (line 203) | public SDLJoystickHandler_API16() {
method pollInputDevices (line 208) | @Override
method getJoystick (line 273) | protected SDLJoystick getJoystick(int device_id) {
method handleMotionEvent (line 282) | @Override
method getJoystickDescriptor (line 305) | public String getJoystickDescriptor(InputDevice joystickDevice) {
method getProductId (line 314) | public int getProductId(InputDevice joystickDevice) {
method getVendorId (line 317) | public int getVendorId(InputDevice joystickDevice) {
method getAxisMask (line 320) | public int getAxisMask(List<InputDevice.MotionRange> ranges) {
method getButtonMask (line 323) | public int getButtonMask(InputDevice joystickDevice) {
class SDLJoystickHandler_API19 (line 328) | class SDLJoystickHandler_API19 extends SDLJoystickHandler_API16 {
method getProductId (line 330) | @Override
method getVendorId (line 335) | @Override
method getAxisMask (line 340) | @Override
method getButtonMask (line 377) | @Override
class SDLHapticHandler_API26 (line 473) | class SDLHapticHandler_API26 extends SDLHapticHandler {
method run (line 474) | @Override
class SDLHapticHandler (line 505) | class SDLHapticHandler {
class SDLHaptic (line 507) | static class SDLHaptic {
method SDLHapticHandler (line 515) | public SDLHapticHandler() {
method run (line 519) | public void run(int device_id, float intensity, int length) {
method stop (line 526) | public void stop(int device_id) {
method pollHapticDevices (line 533) | public void pollHapticDevices() {
method getHaptic (line 612) | protected SDLHaptic getHaptic(int device_id) {
class SDLGenericMotionListener_API12 (line 622) | class SDLGenericMotionListener_API12 implements View.OnGenericMotionList...
method onGenericMotion (line 624) | @Override
method supportsRelativeMouse (line 662) | public boolean supportsRelativeMouse() {
method inRelativeMode (line 666) | public boolean inRelativeMode() {
method setRelativeMouseEnabled (line 670) | public boolean setRelativeMouseEnabled(boolean enabled) {
method reclaimRelativeMouseModeIfNeeded (line 674) | public void reclaimRelativeMouseModeIfNeeded()
method getEventX (line 679) | public float getEventX(MotionEvent event) {
method getEventY (line 683) | public float getEventY(MotionEvent event) {
class SDLGenericMotionListener_API24 (line 689) | class SDLGenericMotionListener_API24 extends SDLGenericMotionListener_AP...
method onGenericMotion (line 694) | @Override
method supportsRelativeMouse (line 714) | @Override
method inRelativeMode (line 719) | @Override
method setRelativeMouseEnabled (line 724) | @Override
method getEventX (line 730) | @Override
method getEventY (line 739) | @Override
class SDLGenericMotionListener_API26 (line 749) | class SDLGenericMotionListener_API26 extends SDLGenericMotionListener_AP...
method onGenericMotion (line 753) | @Override
method supportsRelativeMouse (line 812) | @Override
method inRelativeMode (line 817) | @Override
method setRelativeMouseEnabled (line 822) | @Override
method reclaimRelativeMouseModeIfNeeded (line 837) | @Override
method getEventX (line 845) | @Override
method getEventY (line 851) | @Override
FILE: android-project/thextech/src/main/java/org/libsdl/app/SDLSurface.java
class SDLSurface (line 30) | public class SDLSurface extends SurfaceView implements SurfaceHolder.Cal...
method SDLSurface (line 44) | public SDLSurface(Context context) {
method handlePause (line 66) | public void handlePause() {
method handleResume (line 70) | public void handleResume() {
method getNativeSurface (line 79) | public Surface getNativeSurface() {
method surfaceCreated (line 84) | @Override
method surfaceDestroyed (line 91) | @Override
method surfaceChanged (line 104) | @Override
method onKey (line 191) | @Override
method onTouch (line 197) | @Override
method enableSensor (line 302) | public void enableSensor(int sensortype, boolean enabled) {
method onAccuracyChanged (line 314) | @Override
method onSensorChanged (line 319) | @Override
method onCapturedPointerEvent (line 366) | public boolean onCapturedPointerEvent(MotionEvent event)
FILE: android-project/thextech/src/main/java/ru/wohlsoft/thextech/GameSettings.java
class GameSettings (line 27) | public class GameSettings extends AppCompatActivity
method onCreate (line 29) | @Override
class SettingsFragment (line 47) | public static class SettingsFragment extends PreferenceFragmentCompat
method onCreatePreferences (line 49) | @Override
method isDirectoryExist (line 74) | public static boolean isDirectoryExist(String dir)
method isFileExist (line 80) | public static boolean isFileExist(String f)
method verifyAssetsPath (line 86) | public static boolean verifyAssetsPath(String path)
method sortAssetsList (line 111) | public static JSONArray sortAssetsList(JSONArray inArr)
method selectAssetsPath (line 151) | public static boolean selectAssetsPath(Context ctx, final Launcher l)
FILE: android-project/thextech/src/main/java/ru/wohlsoft/thextech/IniFile.java
class IniFile (line 16) | public class IniFile
method IniFile (line 22) | public IniFile(String path)
method load (line 27) | public void load(String path)
method insertValue (line 59) | private void insertValue(String section, Matcher m)
method getString (line 100) | public String getString(String section, String key, String defaultvalue)
method getInt (line 111) | public int getInt(String section, String key, int defaultvalue)
method getFloat (line 122) | public float getFloat(String section, String key, float defaultvalue)
method getDouble (line 133) | public double getDouble(String section, String key, double defaultvalue)
FILE: android-project/thextech/src/main/java/ru/wohlsoft/thextech/Launcher.java
class Launcher (line 50) | public class Launcher extends AppCompatActivity
method run (line 67) | @Override
method onCreate (line 88) | @Override
method onResume (line 104) | @Override
method initUiSetup (line 111) | private void initUiSetup()
method handleFileIntent (line 234) | private void handleFileIntent()
method OnStartGameClick (line 282) | public void OnStartGameClick(View view)
method tryStartGame (line 294) | private void tryStartGame(Context context)
method reloadAssetsList (line 330) | public void reloadAssetsList()
method updateOverlook (line 358) | public void updateOverlook()
method checkFilePermissions (line 429) | private boolean checkFilePermissions(int requestCode)
method hasManageAppFS (line 480) | public boolean hasManageAppFS()
method onRequestPermissionsResult (line 510) | @Override
method startGame (line 536) | public void startGame()
FILE: android-project/thextech/src/main/java/ru/wohlsoft/thextech/OpenFileDialog.java
class OpenFileDialog (line 34) | public class OpenFileDialog extends AlertDialog.Builder {
type OpenDialogListener (line 49) | public interface OpenDialogListener
method OnSelectedFile (line 51) | public void OnSelectedFile(Context ctx, String fileName, String last...
method OnSelectedDirectory (line 52) | public void OnSelectedDirectory(Context ctx, String lastPath);
class FileAdapter (line 55) | private class FileAdapter extends ArrayAdapter<File> {
method FileAdapter (line 57) | public FileAdapter(Context context, List<File> files) {
method getView (line 61) | @Override
method setDrawable (line 82) | private void setDrawable(TextView view, Drawable drawable) {
method OpenFileDialog (line 94) | public OpenFileDialog(Context context) {
method show (line 130) | @Override
method setFilter (line 137) | public OpenFileDialog setFilter(final String filter) {
method setDirectoryMode (line 154) | public OpenFileDialog setDirectoryMode()
method setCurrentDirectory (line 160) | public OpenFileDialog setCurrentDirectory(String path)
method setOpenDialogListener (line 168) | public OpenFileDialog setOpenDialogListener(OpenDialogListener listene...
method setFolderIcon (line 173) | public OpenFileDialog setFolderIcon(Drawable drawable) {
method setFileIcon (line 178) | public OpenFileDialog setFileIcon(Drawable drawable) {
method setAccessDeniedMessage (line 183) | public OpenFileDialog setAccessDeniedMessage(String message) {
method getDefaultDisplay (line 188) | private static Display getDefaultDisplay(Context context) {
method getScreenSize (line 192) | private static Point getScreenSize(Context context) {
method getLinearLayoutMinHeight (line 202) | private static int getLinearLayoutMinHeight(Context context) {
method createMainLayout (line 206) | private LinearLayout createMainLayout(Context context) {
method createMenuLayout (line 213) | private LinearLayout createMenuLayout(Context context) {
method getItemHeight (line 219) | private int getItemHeight(Context context) {
method createTextView (line 227) | private TextView createTextView(Context context, int style) {
method createTitle (line 238) | private TextView createTitle(Context context) {
method createBackItem (line 242) | private TextView createBackItem(Context context) {
method createGoHomeItem (line 263) | private TextView createGoHomeItem(Context context) {
method createGoInitPathItem (line 280) | private TextView createGoInitPathItem(Context context) {
method getTextWidth (line 297) | private int getTextWidth(String text, Paint paint) {
method changeTitle (line 303) | private void changeTitle() {
method getFiles (line 321) | private List<File> getFiles(String directoryPath) {
method RebuildFiles (line 341) | private void RebuildFiles(ArrayAdapter<File> adapter) {
method createListView (line 357) | private ListView createListView(Context context) {
FILE: android-project/thextech/src/main/java/ru/wohlsoft/thextech/UIUpdater.java
class UIUpdater (line 16) | public class UIUpdater
method UIUpdater (line 30) | public UIUpdater(final Runnable uiUpdater)
method UIUpdater (line 43) | public UIUpdater(Runnable uiUpdater, int interval)
method init (line 49) | private void init(final Runnable uiUpdater)
method setInterval (line 64) | public void setInterval(int interval)
method startUpdates (line 73) | public synchronized void startUpdates()
method stopUpdates (line 82) | public synchronized void stopUpdates()
FILE: android-project/thextech/src/main/java/ru/wohlsoft/thextech/thextechActivity.java
type ControllerKeys (line 23) | enum ControllerKeys
method ControllerKeys (line 40) | ControllerKeys(final int newValue)
method getValue (line 45) | public int getValue()
class thextechActivity (line 51) | public class thextechActivity extends SDLActivity
method getLibraries (line 57) | protected String[] getLibraries()
method detectLanguage (line 67) | private void detectLanguage()
method getArguments (line 77) | protected String[] getArguments()
method onStart (line 140) | @Override
method onStop (line 161) | @Override
method onCreate (line 168) | @Override
method onDestroy (line 181) | @Override
method requestTextShow (line 189) | private void requestTextShow()
method requestText (line 234) | public void requestText()
method setScreenSize (line 255) | public static native void setScreenSize(double screenSize, double widt...
method setSdCardPath (line 256) | public static native void setSdCardPath(String path);
method setAppDataPath (line 257) | public static native void setAppDataPath(String path);
method setGameAssetsPath (line 258) | public static native void setGameAssetsPath(String path);
method textentry_setBuffer (line 260) | public static native void textentry_setBuffer(String line);
method setLanguageCodes (line 262) | public static native void setLanguageCodes(String lang, String country);
FILE: lib/Allocator/Allocator.h
function class (line 6) | class Allocator
function getUsed (line 27) | inline std::size_t getUsed()
FILE: lib/Allocator/LinearAllocator.h
function class (line 6) | class LinearAllocator : public Allocator
FILE: lib/Allocator/PoolAllocator.h
function class (line 10) | class PoolAllocator : public Allocator
FILE: lib/Allocator/StackLinkedList.h
type Node (line 10) | struct Node
FILE: lib/Allocator/Utils.h
function class (line 6) | class Utils
function CalculatePaddingWithHeader (line 17) | static std::size_t CalculatePaddingWithHeader(const std::size_t baseAddr...
FILE: lib/AppPath/app_path.h
type class (line 34) | enum class
function class (line 42) | class AppPathManager
FILE: lib/AppPath/private/app_path.cpp
function appendSlash (line 52) | static void appendSlash(std::string &path)
FILE: lib/AppPath/private/app_path_16m.cpp
function AssetsPathType (line 53) | AssetsPathType AppPathP::assetsRootType()
FILE: lib/AppPath/private/app_path_3ds.cpp
function mountRomfsFile (line 34) | static bool mountRomfsFile(const char* path, const char* mount_label)
function findUserWorlds (line 71) | static void findUserWorlds()
function AssetsPathType (line 142) | AssetsPathType AppPathP::assetsRootType()
FILE: lib/AppPath/private/app_path_android.cpp
function JNIEXPORT (line 47) | JNIEXPORT void JNICALL
function JNIEXPORT (line 61) | JNIEXPORT void JNICALL
function JNIEXPORT (line 75) | JNIEXPORT void JNICALL
function AssetsPathType (line 169) | AssetsPathType AppPathP::assetsRootType()
FILE: lib/AppPath/private/app_path_emscripten.cpp
function unlockLoadingCustomState (line 38) | void unlockLoadingCustomState()
function loadCustomState (line 43) | static void loadCustomState()
function saveCustomState (line 65) | static void saveCustomState()
function AssetsPathType (line 130) | AssetsPathType AppPathP::assetsRootType()
FILE: lib/AppPath/private/app_path_macos.cpp
function decodeHome (line 41) | static void decodeHome(std::string &path)
function AssetsPathType (line 193) | AssetsPathType AppPathP::assetsRootType()
FILE: lib/AppPath/private/app_path_old.cpp
function unlockLoadingCustomState (line 68) | void unlockLoadingCustomState()
function loadCustomState (line 73) | static void loadCustomState()
function saveCustomState (line 92) | static void saveCustomState()
function JNIEXPORT (line 141) | JNIEXPORT void JNICALL
function JNIEXPORT (line 155) | JNIEXPORT void JNICALL
function JNIEXPORT (line 169) | JNIEXPORT void JNICALL
function getPgeUserDirectory (line 206) | static std::string getPgeUserDirectory()
FILE: lib/AppPath/private/app_path_private.h
function namespace (line 28) | namespace AppPathP
FILE: lib/AppPath/private/app_path_skeleton.cpp
function AssetsPathType (line 43) | AssetsPathType AppPathP::assetsRootType()
FILE: lib/AppPath/private/app_path_switch.cpp
function AssetsPathType (line 44) | AssetsPathType AppPathP::assetsRootType()
FILE: lib/AppPath/private/app_path_unix.cpp
function s_getEnvNotNull (line 45) | static std::string s_getEnvNotNull(const char *env)
function AssetsPathType (line 126) | AssetsPathType AppPathP::assetsRootType()
FILE: lib/AppPath/private/app_path_vita.cpp
function AssetsPathType (line 45) | AssetsPathType AppPathP::assetsRootType()
FILE: lib/AppPath/private/app_path_wii.cpp
function AssetsPathType (line 53) | AssetsPathType AppPathP::assetsRootType()
FILE: lib/AppPath/private/app_path_wiiu.cpp
function AssetsPathType (line 97) | AssetsPathType AppPathP::assetsRootType()
FILE: lib/AppPath/private/app_path_win32.cpp
function s_toUtf8 (line 36) | static void s_toUtf8(std::string &ret, wchar_t *str, DWORD len)
function AssetsPathType (line 119) | AssetsPathType AppPathP::assetsRootType()
FILE: lib/Archives/archives.h
type SDL_RWops (line 29) | struct SDL_RWops
type mbediso_fs (line 30) | struct mbediso_fs
type mbediso_dir (line 31) | struct mbediso_dir
function namespace (line 33) | namespace Archives
FILE: lib/Archives/archives_dir.cpp
type Archives (line 33) | namespace Archives
function s_next_iter (line 36) | static void s_next_iter(DirIterator::DirIter& iter)
function DirEntry (line 92) | DirEntry& DirIterator::DirIter::operator*()
function DirIterator (line 108) | DirIterator list_dir(const char* name)
function PathType (line 165) | PathType exists(const char* name)
FILE: lib/Archives/archives_mount.cpp
type Archives (line 30) | namespace Archives
function s_unmount (line 42) | static void s_unmount(mbediso_fs*& target, std::string& loaded_path)
function s_mount (line 53) | static bool s_mount(mbediso_fs*& target, std::string& loaded_path, con...
function mount_assets (line 81) | bool mount_assets(const char* archive_path)
function unmount_assets (line 86) | void unmount_assets()
function mount_episode (line 96) | bool mount_episode(const char* archive_path)
function unmount_episode (line 101) | void unmount_episode()
function mount_temp (line 111) | bool mount_temp(const char* archive_path)
function unmount_temp (line 125) | void unmount_temp()
FILE: lib/Archives/archives_priv.h
function namespace (line 27) | namespace Archives
FILE: lib/Archives/archives_rwops.cpp
type Archives (line 41) | namespace Archives
function s_file_size (line 44) | static int64_t s_file_size(SDL_RWops* stream)
function s_file_seek (line 54) | static int64_t s_file_seek(SDL_RWops* stream, int64_t offset, int whence)
function s_file_read (line 64) | static size_t s_file_read(SDL_RWops* stream, void* ptr, size_t size, s...
function s_file_write (line 74) | static size_t s_file_write(SDL_RWops*, const void*, size_t, size_t)
function s_file_close_normal (line 79) | static int s_file_close_normal(SDL_RWops* stream)
function s_file_close_decref (line 91) | static int s_file_close_decref(SDL_RWops* stream)
function SDL_RWops (line 102) | SDL_RWops* open_file(const char* name)
FILE: lib/CrashHandler/StackWalker/StackWalker.cpp
function ansi2utf8 (line 94) | void ansi2utf8(char *inout, const DWORD maxLen)
type _IMAGEHLP_LINE64 (line 124) | struct _IMAGEHLP_LINE64
type _IMAGEHLP_MODULE64 (line 132) | struct _IMAGEHLP_MODULE64
type _IMAGEHLP_SYMBOL64 (line 145) | struct _IMAGEHLP_SYMBOL64
type _tagADDRESS64 (line 161) | struct _tagADDRESS64
type _KDHELP64 (line 167) | struct _KDHELP64
type _tagSTACKFRAME64 (line 179) | struct _tagSTACKFRAME64
function MyStrCpy (line 261) | static void MyStrCpy(char *szDest, size_t nMaxDestSize, const char *szSrc)
class StackWalkerInternal (line 274) | class StackWalkerInternal
method StackWalkerInternal (line 277) | StackWalkerInternal(StackWalker *parent, HANDLE hProcess)
method BOOL (line 309) | BOOL Init(LPCSTR szSymPath)
type IMAGEHLP_MODULE64_V3 (line 473) | struct IMAGEHLP_MODULE64_V3
type IMAGEHLP_MODULE64_V2 (line 502) | struct IMAGEHLP_MODULE64_V2
type tagMODULEENTRY32 (line 588) | struct tagMODULEENTRY32
method BOOL (line 605) | BOOL GetModuleListTH32(HANDLE hProcess, DWORD pid)
type _MODULEINFO (line 667) | struct _MODULEINFO
method BOOL (line 674) | BOOL GetModuleListPSAPI(HANDLE hProcess)
method DWORD (line 759) | DWORD LoadModule(HANDLE hProcess, LPCSTR img, LPCSTR mod, DWORD64 base...
method BOOL (line 850) | BOOL LoadModules(HANDLE hProcess, DWORD dwProcessId)
method BOOL (line 860) | BOOL GetModuleInfo(HANDLE hProcess, DWORD64 baseAddr, IMAGEHLP_MODULE6...
function BOOL (line 946) | BOOL StackWalker::LoadModules()
function BOOL (line 1070) | BOOL StackWalker::ShowCallstack(HANDLE hThread, const CONTEXT *context, ...
function BOOL (line 1322) | BOOL __stdcall StackWalker::myReadProcMem(
FILE: lib/CrashHandler/StackWalker/StackWalker.h
type DWORD64 (line 45) | typedef unsigned __int64 DWORD64, *PDWORD64;
type SIZE_T (line 47) | typedef unsigned __int64 SIZE_T, *PSIZE_T;
type SIZE_T (line 49) | typedef unsigned long SIZE_T, *PSIZE_T;
type BOOL (line 100) | typedef BOOL (__stdcall *PReadProcessMemoryRoutine)(
type CallstackEntryType (line 144) | enum CallstackEntryType {firstEntry, nextEntry, lastEntry}
function class (line 221) | class StackWalkerToString : public StackWalker
FILE: lib/CrashHandler/crash_handler.cpp
function isDebuggerPresent (line 96) | static int isDebuggerPresent()
function GetStackWalk (line 224) | static bool GetStackWalk(std::string &outWalk)
type AndroidStackTrace (line 265) | namespace AndroidStackTrace
type BacktraceState (line 267) | struct BacktraceState
function _Unwind_Reason_Code (line 273) | static _Unwind_Reason_Code unwindCallback(struct _Unwind_Context *cont...
function captureBacktrace (line 289) | static size_t captureBacktrace(void **buffer, size_t max)
function androidDumpBacktrace (line 297) | static void androidDumpBacktrace(std::ostringstream &os, void **buffer, ...
function getCurrentUserName (line 314) | static std::string getCurrentUserName()
function getCurrentHomePath (line 341) | static std::string getCurrentHomePath()
function replaceStr (line 374) | static void replaceStr(std::string &data, const std::string &toSearch, c...
function removePersonalData (line 385) | static void removePersonalData(std::string &log)
function ppc_backtrace (line 407) | int ppc_backtrace(void **buffer, int size)
function getStacktrace (line 457) | static std::string getStacktrace()
function LLVM_ATTRIBUTE_NORETURN (line 533) | static LLVM_ATTRIBUTE_NORETURN void abortEngine(int sig)
type siginfo_t (line 600) | struct siginfo_t
function handle_signal (line 603) | static void handle_signal(int signal, siginfo_t *siginfo, void * /*conte...
function SDL_AssertState (line 829) | static SDL_AssertState custom_sdl_handler(const SDL_AssertData *data, vo...
type sigaction (line 863) | struct sigaction
type siginfo_t (line 866) | struct siginfo_t
function handle_signalWIN32 (line 869) | static void handle_signalWIN32(int signal)
type sigaction (line 890) | struct sigaction
FILE: lib/CrashHandler/crash_handler.h
function class (line 25) | class CrashHandler
FILE: lib/FixPointCS/Fixed64.h
function namespace (line 53) | namespace Fixed64
FILE: lib/FixPointCS/FixedUtil.h
function namespace (line 53) | namespace FixedUtil
FILE: lib/Graphics/PGEString.h
type QString (line 12) | typedef QString PGEString;
type QStringList (line 13) | typedef QStringList PGEStringList;
type pge_size_t (line 18) | typedef int pge_size_t;
type std (line 22) | typedef std::string PGEString;
type std (line 23) | typedef std::vector<std::string> PGEStringList;
type pge_size_t (line 28) | typedef size_t pge_size_t;
FILE: lib/Graphics/bitmask2rgba.c
function bitmask_to_rgba (line 31) | void bitmask_to_rgba(FIBITMAP *front, FIBITMAP *mask)
function bitmask_get_mask_from_rgba (line 113) | void bitmask_get_mask_from_rgba(FIBITMAP *image, FIBITMAP **outmask)
FILE: lib/Graphics/bitmask2rgba.h
type FIBITMAP (line 31) | typedef struct FIBITMAP FIBITMAP;
FILE: lib/Graphics/graphics_funcs.cpp
function _RWopsReadProc (line 48) | static unsigned DLL_CALLCONV
function _RWopsWriteProc (line 53) | static unsigned DLL_CALLCONV
function _RWopsTellProc (line 72) | static long DLL_CALLCONV
function FIBITMAP (line 97) | FIBITMAP *GraphicsHelps::loadImage(const std::string &file, bool convert...
function FIBITMAP (line 187) | FIBITMAP *GraphicsHelps::loadImage(const Files::Data &raw, bool convertT...
function FIBITMAP (line 223) | FIBITMAP *GraphicsHelps::loadMask(const std::string &file, bool maskIsPn...
function FIBITMAP (line 241) | FIBITMAP *GraphicsHelps::loadMask(const Files::Data &raw, bool maskIsPng...
function SDL_Surface (line 324) | SDL_Surface *GraphicsHelps::fi2sdl(FIBITMAP *img)
function FIBITMAP (line 604) | FIBITMAP *GraphicsHelps::fast2xScaleDown(FIBITMAP *image)
function FIBITMAP (line 639) | FIBITMAP *GraphicsHelps::fastConvertTo32Bit(FIBITMAP *image)
function FIBITMAP (line 860) | FIBITMAP *GraphicsHelps::fastScaleDownAnd32Bit(FIBITMAP *image, bool do_...
function s_RGB24_to_RGB565 (line 989) | static uint16_t s_RGB24_to_RGB565(uint32_t RGB24)
function FIBITMAP (line 1004) | FIBITMAP *GraphicsHelps::fastConvertToRGB565AndFlip(FIBITMAP *image, boo...
type SDL_SysWMinfo (line 1075) | struct SDL_SysWMinfo
FILE: lib/Graphics/graphics_funcs.h
type PGE_Pix (line 33) | struct PGE_Pix
type SDL_Window (line 41) | typedef struct SDL_Window SDL_Window;
type SDL_Surface (line 42) | typedef struct SDL_Surface SDL_Surface;
type FreeImageIO (line 44) | struct FreeImageIO
type FIBITMAP (line 49) | struct FIBITMAP
function class (line 50) | class GraphicsHelps
FILE: lib/Graphics/image_size.cpp
function tryGIF (line 28) | static bool tryGIF(SDL_RWops* file, uint32_t *w, uint32_t *h)
function tryBMP (line 62) | static bool tryBMP(SDL_RWops* file, uint32_t *w, uint32_t *h)
function tryPNG (line 93) | static bool tryPNG(SDL_RWops* file, uint32_t *w, uint32_t *h)
function tryQOI (line 125) | static bool tryQOI(SDL_RWops* file, uint32_t *w, uint32_t *h)
function tryJPEG (line 199) | static bool tryJPEG(SDL_RWops* file, uint32_t *w, uint32_t *h)
function PGEString (line 309) | PGEString PGE_ImageInfo::getMaskName(const PGEString &imageFileName)
FILE: lib/Graphics/image_size.h
type SDL_RWops (line 26) | struct SDL_RWops
function namespace (line 31) | namespace PGE_ImageInfo
FILE: lib/Graphics/size.h
function class (line 23) | class PGE_Size
FILE: lib/Graphics/xt_qoi.cpp
function qoi_read_32 (line 85) | static unsigned int qoi_read_32(const unsigned char*& read_ptr) {
function FIBITMAP (line 93) | FIBITMAP *GraphicsHelps::loadQOI(const Files::Data &raw, bool &depthTest...
FILE: lib/Integrator/int_discorcrpc.cpp
function handleDiscordReady (line 34) | static void handleDiscordReady(const DiscordUser* connectedUser)
function handleDiscordDisconnected (line 42) | static void handleDiscordDisconnected(int errcode, const char* message)
function handleDiscordError (line 47) | static void handleDiscordError(int errcode, const char* message)
function handleDiscordJoin (line 52) | static void handleDiscordJoin(const char* secret)
function handleDiscordSpectate (line 57) | static void handleDiscordSpectate(const char* secret)
function handleDiscordJoinRequest (line 62) | static void handleDiscordJoinRequest(const DiscordUser* request)
FILE: lib/Integrator/int_discorcrpc.h
function class (line 27) | class DiscorcRPC
FILE: lib/Integrator/integrator.cpp
function clearAllPrev (line 35) | static void clearAllPrev()
FILE: lib/Integrator/integrator.h
function namespace (line 26) | namespace Integrator
FILE: lib/InterProcess/editor_pipe.h
function class (line 10) | class EditorPipe
FILE: lib/InterProcess/intproc.h
function namespace (line 30) | namespace IntProc
FILE: lib/Logger/logger.h
type PGE_LogSetup (line 41) | struct PGE_LogSetup
FILE: lib/Logger/logger_level.h
type PGE_LogLevel (line 24) | struct PGE_LogLevel
FILE: lib/Logger/private/logger.cpp
function getRunTimeString (line 53) | static std::string getRunTimeString()
function return_current_time_and_date (line 73) | static std::string return_current_time_and_date()
function cleanUpLogs (line 91) | static void cleanUpLogs(const std::string &logsPath, int maxLogs)
function LoadLogSettings (line 123) | void LoadLogSettings(bool disableStdOut, bool verboseLogs)
function CloseLog (line 173) | void CloseLog()
function getLogFilePath (line 178) | std::string getLogFilePath()
function pLogGeneric (line 187) | static inline void pLogGeneric(int level, const char *label, const char ...
function pLogDebug (line 201) | void pLogDebug(const char *format, ...)
function pLogWarning (line 209) | void pLogWarning(const char *format, ...)
function pLogCritical (line 217) | void pLogCritical(const char *format, ...)
function pLogFatal (line 225) | void pLogFatal(const char *format, ...)
function pLogInfo (line 233) | void pLogInfo(const char *format, ...)
function pLogDebug (line 241) | void pLogDebug(const std::string &line)
function pLogWarning (line 246) | void pLogWarning(const std::string &line)
function pLogCritical (line 251) | void pLogCritical(const std::string &line)
function pLogInfo (line 256) | void pLogInfo(const std::string &line)
function pLogFatal (line 261) | void pLogFatal(const std::string &line)
FILE: lib/Logger/private/logger_android.cpp
function pgeToAndroidLL (line 65) | static int pgeToAndroidLL(int level)
function LoggerPrivate_pLogConsole (line 85) | void LoggerPrivate_pLogConsole(int level, const char *label, const char ...
function LoggerPrivate_pLogFile (line 95) | void LoggerPrivate_pLogFile(int level, const char *label, const char *in...
FILE: lib/Logger/private/logger_desktop.cpp
function LoggerPrivate_pLogConsole (line 88) | void LoggerPrivate_pLogConsole(int level, const char *label, const char ...
function LoggerPrivate_pLogFile (line 102) | void LoggerPrivate_pLogFile(int level, const char *label, const char *in...
FILE: lib/Logger/private/logger_dummy.cpp
function LoggerPrivate_pLogConsole (line 30) | void LoggerPrivate_pLogConsole(int level, const char *label, const char ...
function LoggerPrivate_pLogFile (line 39) | void LoggerPrivate_pLogFile(int level, const char *label, const char *in...
FILE: lib/Logger/private/logger_emscripten.cpp
function LoggerPrivate_pLogConsole (line 45) | void LoggerPrivate_pLogConsole(int level, const char *label, const char ...
function LoggerPrivate_pLogFile (line 73) | void LoggerPrivate_pLogFile(int, const char *, const char *, const char ...
FILE: lib/Logger/private/logger_min.cpp
function LoggerPrivate_pLogConsole (line 66) | void LoggerPrivate_pLogConsole(int level, const char *label, const char ...
function LoggerPrivate_pLogFile (line 79) | void LoggerPrivate_pLogFile(int level, const char *label, const char *in...
FILE: lib/Logger/private/logger_private.h
function class (line 58) | class MutexLocker
FILE: lib/Logger/private/logger_sets.h
function class (line 31) | class LogWriter
FILE: lib/Logger/private/logger_vita.cpp
function LoggerPrivate_pLogConsole (line 63) | void LoggerPrivate_pLogConsole(int level, const char *label, const char ...
function LoggerPrivate_pLogFile (line 91) | void LoggerPrivate_pLogFile(int level, const char *label, const char *in...
FILE: lib/Logger/private/logger_wiiu.cpp
type sockaddr_in (line 51) | struct sockaddr_in
function LoggerPrivate_pLogConsole (line 112) | void LoggerPrivate_pLogConsole(int level, const char *label, const char ...
function LoggerPrivate_pLogFile (line 165) | void LoggerPrivate_pLogFile(int level, const char *label, const char *in...
FILE: lib/Utf8Main/utf8main_win32.cpp
function buildUtf8Args (line 46) | static void buildUtf8Args(std::vector<std::string> &utf8_args)
FILE: lib/Utils/dir_list_ci.cpp
function replaceSlashes (line 38) | static void replaceSlashes(std::string &str, const std::string &from)
FILE: lib/Utils/dir_list_ci.h
function class (line 12) | class DirListCI
FILE: lib/Utils/elapsed_timer.cpp
type ElapsedTimer_p (line 6) | struct ElapsedTimer_p
function ElapsedTimer (line 32) | ElapsedTimer & ElapsedTimer::operator=(const ElapsedTimer &et)
FILE: lib/Utils/elapsed_timer.h
type ElapsedTimer_p (line 6) | struct ElapsedTimer_p
function class (line 8) | class ElapsedTimer
FILE: lib/Utils/files.cpp
function Str2WStr (line 36) | static std::wstring Str2WStr(const std::string &path)
function FILE (line 163) | FILE *Files::utf8_fopen(const char *filePath, const char *modes)
function SDL_RWops (line 180) | SDL_RWops *Files::open_file(const char *filePath, const char *modes)
FILE: lib/Utils/files.h
type SDL_RWops (line 30) | struct SDL_RWops
function namespace (line 39) | namespace Files
function SDL_RWops (line 107) | inline SDL_RWops *open_file(const std::string& filePath, const char *modes)
function Data (line 111) | inline Data load_file(const std::string& filePath)
type Charsets (line 118) | enum Charsets
FILE: lib/Utils/files_ini.h
function namespace (line 28) | namespace Files
FILE: lib/Utils/open_url.cpp
function findExec (line 91) | static bool findExec(std::string &exec, const std::string &target)
function execApp (line 112) | static void execApp(const std::string &prog, const std::string &args)
FILE: lib/Utils/open_url.h
function namespace (line 29) | namespace Utils
FILE: lib/Utils/strings.cpp
function ltrim (line 61) | static inline void ltrim(std::string &s)
function rtrim (line 72) | static inline void rtrim(std::string &s)
FILE: lib/Utils/strings.h
function namespace (line 30) | namespace Strings
FILE: lib/Utils/vptrlist.h
type typename (line 52) | typedef typename vecPTR::iterator S_iterator;
type typename (line 53) | typedef typename vecPTR::const_iterator S_const_iterator;
type typename (line 54) | typedef typename vecPTR::reverse_iterator SR_iterator;
type typename (line 55) | typedef typename vecPTR::const_reverse_iterator SR_const_iterator;
type T (line 57) | typedef T value_type;
type typename (line 58) | typedef typename vecPTR::allocator_type allocator_type;
type size_type (line 59) | typedef size_t size_type;
type std (line 60) | typedef std::ptrdiff_t difference_type;
type T (line 61) | typedef T& reference;
type T (line 62) | typedef const T& const_reference;
type typename (line 63) | typedef typename vecPTR::pointer pointer;
function p (line 77) | VPtrIterator(const SIterator &o) : p(o) {}
function virtual (line 78) | virtual ~VPtrIterator() {}
type VPtrIterator (line 167) | typedef VPtrIterator<T, S_iterator> iterator;
type VPtrIterator (line 168) | typedef VPtrIterator<const T, S_const_iterator> const_iterator;
type VPtrIterator (line 170) | typedef VPtrIterator<T, SR_iterator> reverse_iterator;
type VPtrIterator (line 171) | typedef VPtrIterator<const T, SR_const_iterator> const_reverse_iterator;
function iterator (line 173) | iterator begin()
function iterator (line 177) | iterator end()
function const_iterator (line 181) | const_iterator begin() const
function const_iterator (line 190) | const_iterator cbegin() const
function reverse_iterator (line 199) | reverse_iterator rbegin()
function reverse_iterator (line 203) | reverse_iterator rend()
function const_reverse_iterator (line 207) | const_reverse_iterator rbegin() const
function const_reverse_iterator (line 216) | const_reverse_iterator crbegin() const
function vecPTR (line 243) | VPtrList(size_t size) : vecPTR(size)
function assign (line 265) | void assign(size_t n, const T& val)
function assign (line 272) | void assign(std::initializer_list<T> il)
function empty (line 280) | bool empty() const noexcept
function size (line 290) | size_t size() const
function max_size (line 300) | size_t max_size() const
function reserve (line 310) | void reserve(size_t _n)
function resize (line 315) | void resize(size_t _n)
function shrink_to_fit (line 320) | void shrink_to_fit()
function SHptr (line 325) | SHptr* data()
function contains (line 330) | bool contains(const T &item) const
function indexOf (line 335) | ssize_t indexOf(const T &item) const
function lastIndexOf (line 348) | ssize_t lastIndexOf(const T &item) const
function iterator (line 361) | iterator find(const T &item)
function iterator (line 366) | iterator find(const T &item, iterator beg)
function const_iterator (line 377) | const_iterator find(const T &item) const
function const_iterator (line 382) | const_iterator find(const T &item, const_iterator beg) const
function iterator (line 393) | iterator find_last_of(const T &item)
function iterator (line 398) | iterator find_last_of(const T &item, reverse_iterator beg)
function const_iterator (line 409) | const_iterator find_last_of(const T &item) const
function const_iterator (line 414) | const_iterator find_last_of(const T &item, const_reverse_iterator beg) c...
function clear (line 425) | void clear()
function removeOne (line 430) | void removeOne(const T &item)
function removeAll (line 443) | void removeAll(const T &item)
function iterator (line 455) | iterator erase(iterator pos)
function iterator (line 461) | iterator erase(iterator from, iterator to)
function removeAt (line 471) | void removeAt(size_t at)
function removeAt (line 476) | void removeAt(size_t at, size_t num)
function pop_back (line 481) | void pop_back()
function pop_front (line 486) | void pop_front()
function swap (line 491) | void swap(size_t from, size_t to)
function move (line 498) | void move(size_t from, size_t to)
function push_back (line 529) | void push_back(const T &item)
function push_back (line 534) | void push_back(T &&item)
function push_front (line 545) | void push_front(const T &item)
function push_front (line 550) | void push_front(T &&item)
function append (line 561) | void append(const T &item)
function append (line 566) | void append(const VPtrList<T> &array)
function iterator (line 573) | iterator insert(size_t at, const T &item)
function iterator (line 578) | iterator insert(const_iterator pos, const T &item)
function iterator (line 583) | iterator insert(const_iterator pos, T &&item)
function T (line 612) | const T &last() const
function T (line 666) | const T &at(unsigned int index) const
function T (line 671) | const T &at(int index) const
function T (line 676) | const T &at(unsigned long index) const
function T (line 681) | const T &at(long index) const
function T (line 686) | const T &at(unsigned long long index) const
function T (line 691) | const T &at(long long index) const
function T (line 737) | const T &operator[](unsigned int index) const
function T (line 743) | const T &operator[](int index) const
function T (line 750) | const T &operator[](unsigned long index) const
function T (line 756) | const T &operator[](long index) const
function T (line 763) | const T &operator[](unsigned long long index) const
function T (line 769) | const T &operator[](long long index) const
function allocator_type (line 776) | allocator_type get_allocator() const noexcept
FILE: lib/fixed_point.cpp
function num_t (line 25) | num_t num_t::dist(num_t dx, num_t dy)
function num_t (line 30) | num_t num_t::idist(num_t dx, num_t dy)
function numf_t (line 35) | numf_t numf_t::times(numf_t o) const
function numf_t (line 52) | numf_t numf_t::divided_by(numf_t o) const
function num_t (line 59) | num_t num_t::times(num_t o) const
function num_t (line 86) | num_t num_t::divided_by(num_t o) const
function num_t (line 91) | num_t num_t::sqrt(num_t x)
function num_t (line 96) | num_t num_t::sin(num_t x)
function num_t (line 101) | num_t num_t::cos(num_t x)
function num_t (line 106) | num_t num_t::atan2(num_t y, num_t x)
FILE: lib/fixed_point.h
type q_t (line 35) | struct q_t
function operator (line 169) | constexpr bool operator<=(const numf_t& o) const { return i <= o.i; }
function operator (line 170) | constexpr bool operator<(const numf_t& o) const { return i < o.i; }
function operator (line 171) | constexpr bool operator>=(const numf_t& o) const { return i >= o.i; }
function operator (line 172) | constexpr bool operator>(const numf_t& o) const { return i > o.i; }
function operator (line 173) | constexpr bool operator==(const numf_t& o) const { return i == o.i; }
function operator (line 174) | constexpr bool operator!=(const numf_t& o) const { return i != o.i; }
function num_t (line 178) | struct num_t
function i (line 186) | constexpr num_t(int _i) : i((int64_t)_i << 32) {}
function i (line 187) | constexpr num_t(long _i) : i((int64_t)_i << 32) {}
function i (line 188) | constexpr num_t(long long _i) : i((int64_t)_i << 32) {}
function i (line 189) | constexpr num_t(unsigned short _i) : i((int64_t)_i << 32) {}
function i (line 190) | constexpr num_t(unsigned int _i) : i((int64_t)_i << 32) {}
function i (line 191) | constexpr num_t(unsigned long _i) : i((int64_t)_i << 32) {}
function i (line 192) | constexpr num_t(unsigned long long _i) : i((int64_t)_i << 32) {}
function explicit (line 195) | explicit constexpr num_t(int64_t _i, std::nullptr_t) : i(_i) {}
function explicit (line 196) | explicit constexpr num_t(double _i, std::nullptr_t) : i((int64_t)(_i * (...
function explicit (line 198) | explicit constexpr num_t(numf_t _i) : i(int64_t(_i.i) * 256) {}
function num_t (line 366) | static inline constexpr num_t from_double(double _i)
function num_t (line 371) | static inline constexpr num_t abs(num_t x)
function vb6round (line 376) | static inline constexpr int32_t vb6round(num_t x)
function round (line 384) | static inline constexpr int32_t round(num_t x)
function ceil (line 389) | static inline constexpr int32_t ceil(num_t x)
function floor (line 394) | static inline constexpr int32_t floor(num_t x)
function num_t (line 399) | static inline constexpr num_t roundn(num_t x)
function num_t (line 404) | static inline constexpr num_t PI()
function num_t (line 409) | static inline num_t dist2(num_t dx, num_t dy)
function fEqual_f (line 415) | static inline bool fEqual_f(numf_t x, numf_t y)
function fEqual_f (line 420) | static inline bool fEqual_f(num_t x, num_t y)
function fEqual_d (line 425) | static inline bool fEqual_d(num_t x, num_t y)
function operator (line 448) | constexpr bool operator<(const num_t& o) const { return i < o.i; }
function operator (line 449) | constexpr bool operator>=(const num_t& o) const { return i >= o.i; }
function operator (line 450) | constexpr bool operator>(const num_t& o) const { return i > o.i; }
function operator (line 451) | constexpr bool operator==(const num_t& o) const { return i == o.i; }
function operator (line 452) | constexpr bool operator!=(const num_t& o) const { return i != o.i; }
function num_t (line 543) | static inline constexpr num_t operator *(int a, num_t b) { return num_t(...
function num_t (line 552) | static inline constexpr num_t operator *(num_t b, short a) { return num_...
function num_t (line 553) | static inline constexpr num_t operator *(num_t b, int a) { return num_t(...
function num_t (line 554) | static inline constexpr num_t operator *(num_t b, long a) { return num_t...
function num_t (line 555) | static inline constexpr num_t operator *(num_t b, long long a) { return ...
function num_t (line 557) | static inline constexpr num_t operator *(num_t b, unsigned short a) { re...
function num_t (line 558) | static inline constexpr num_t operator *(num_t b, unsigned int a) { retu...
function num_t (line 559) | static inline constexpr num_t operator *(num_t b, unsigned long a) { ret...
function num_t (line 560) | static inline constexpr num_t operator *(num_t b, unsigned long long a) ...
function num_t (line 562) | static inline constexpr num_t operator *(qdec_t a, num_t b) { return b *...
function num_t (line 563) | static inline constexpr num_t operator *(qbin_t a, num_t b) { return b *...
FILE: lib/floating_point.cpp
function num_t (line 51) | num_t num_t::dist(num_t dx, num_t dy)
function num_t (line 56) | num_t num_t::idist(num_t dx, num_t dy)
function num_t (line 61) | num_t num_t::times(num_t o) const
function num_t (line 66) | num_t num_t::divided_by(num_t o) const
function num_t (line 71) | num_t num_t::sqrt(num_t x)
function num_t (line 76) | num_t num_t::sin(num_t x)
function num_t (line 81) | num_t num_t::cos(num_t x)
function num_t (line 86) | num_t num_t::atan2(num_t y, num_t x)
FILE: lib/floating_point.h
type num_t (line 29) | struct num_t
type num_muldiv_t (line 31) | struct num_muldiv_t
function numf_t (line 50) | struct numf_t
function i (line 58) | constexpr numf_t(long _i) : i(_i) {}
function i (line 59) | constexpr numf_t(long long _i) : i(_i) {}
function explicit (line 62) | explicit constexpr numf_t(float _i, std::nullptr_t) : i(_i) {}
function operator (line 66) | constexpr bool operator<=(const numf_t& o) const { return i <= o.i; }
function operator (line 67) | constexpr bool operator<(const numf_t& o) const { return i < o.i; }
function operator (line 68) | constexpr bool operator>=(const numf_t& o) const { return i >= o.i; }
function operator (line 69) | constexpr bool operator>(const numf_t& o) const { return i > o.i; }
function operator (line 70) | constexpr bool operator==(const numf_t& o) const { return i == o.i; }
function operator (line 71) | constexpr bool operator!=(const numf_t& o) const { return i != o.i; }
function numf_t (line 162) | numf_t times(numf_t o) const
function numf_t (line 167) | numf_t divided_by(numf_t o) const
function num_t (line 173) | struct num_t
function i (line 181) | constexpr num_t(int _i) : i(_i) {}
function i (line 182) | constexpr num_t(long _i) : i(_i) {}
function i (line 183) | constexpr num_t(long long _i) : i(_i) {}
function i (line 184) | constexpr num_t(unsigned short _i) : i(_i) {}
function i (line 185) | constexpr num_t(unsigned int _i) : i(_i) {}
function i (line 186) | constexpr num_t(unsigned long _i) : i(_i) {}
function i (line 187) | constexpr num_t(unsigned long long _i) : i(_i) {}
function num_t (line 323) | static inline constexpr num_t from_double(double _i)
function num_t (line 328) | static inline constexpr num_t abs(num_t x)
function round (line 333) | static inline int32_t round(num_t x)
function ceil (line 338) | static inline int32_t ceil(num_t x)
function floor (line 343) | static inline int32_t floor(num_t x)
function num_t (line 348) | static inline num_t roundn(num_t x)
function num_t (line 353) | static inline constexpr num_t PI()
function num_t (line 358) | static inline num_t dist2(num_t dx, num_t dy)
function fEqual_d (line 363) | static inline bool fEqual_d(num_t x, num_t y)
function fEqual_f (line 368) | static inline bool fEqual_f(num_t x, num_t y)
function fEqual_f (line 373) | static inline bool fEqual_f(numf_t x, numf_t y)
function operator (line 398) | constexpr bool operator<(const num_t& o) const { return i < o.i; }
function operator (line 399) | constexpr bool operator>=(const num_t& o) const { return i >= o.i; }
function operator (line 400) | constexpr bool operator>(const num_t& o) const { return i > o.i; }
function operator (line 401) | constexpr bool operator==(const num_t& o) const { return i == o.i; }
function operator (line 402) | constexpr bool operator!=(const num_t& o) const { return i != o.i; }
function num_muldiv_t (line 405) | constexpr num_muldiv_t::num_muldiv_t(num_t n) : i(n.i) {}
function numf_t (line 448) | static inline constexpr numf_t operator *(int a, numf_t b) { return numf...
function num_t (line 471) | static inline constexpr num_t operator *(int a, num_t b) { return num_t(...
function num_t (line 480) | static inline constexpr num_t operator *(num_t b, short a) { return num_...
function num_t (line 481) | static inline constexpr num_t operator *(num_t b, int a) { return num_t(...
function num_t (line 482) | static inline constexpr num_t operator *(num_t b, long a) { return num_t...
function num_t (line 483) | static inline constexpr num_t operator *(num_t b, long long a) { return ...
function num_t (line 485) | static inline constexpr num_t operator *(num_t b, unsigned short a) { re...
function num_t (line 486) | static inline constexpr num_t operator *(num_t b, unsigned int a) { retu...
function num_t (line 487) | static inline constexpr num_t operator *(num_t b, unsigned long a) { ret...
function num_t (line 488) | static inline constexpr num_t operator *(num_t b, unsigned long long a) ...
function num_t (line 490) | static inline constexpr num_t operator *(num_muldiv_t a, num_t b) { retu...
FILE: lib/fmt/fmt_container.h
function namespace (line 15) | namespace fmt {
FILE: lib/fmt/fmt_format.cpp
function FMT_MAYBE_UNUSED (line 75) | FMT_MAYBE_UNUSED
function FMT_MAYBE_UNUSED (line 79) | FMT_MAYBE_UNUSED
type fmt (line 84) | namespace fmt {
function FMT_FUNC (line 86) | FMT_FUNC internal::RuntimeError::~RuntimeError() FMT_DTOR_NOEXCEPT {}
function FMT_FUNC (line 87) | FMT_FUNC FormatError::~FormatError() FMT_DTOR_NOEXCEPT {}
function FMT_FUNC (line 88) | FMT_FUNC SystemError::~SystemError() FMT_DTOR_NOEXCEPT {}
function fmt_snprintf (line 95) | inline int fmt_snprintf(char *buffer, size_t size, const char *format,...
function safe_strerror (line 124) | int safe_strerror(
function format_error_code (line 191) | void format_error_code(Writer &out, int error_code,
function report_error (line 214) | void report_error(FormatFunc func, int error_code,
function FMT_FUNC (line 225) | FMT_FUNC void SystemError::init(
function FMT_FUNC (line 296) | FMT_FUNC void internal::report_unknown_type(char code, const char *typ...
function FMT_FUNC (line 309) | FMT_FUNC internal::UTF8ToUTF16::UTF8ToUTF16(StringRef s) {
function FMT_FUNC (line 326) | FMT_FUNC internal::UTF16ToUTF8::UTF16ToUTF8(WStringRef s) {
function FMT_FUNC (line 333) | FMT_FUNC int internal::UTF16ToUTF8::convert(WStringRef s) {
function FMT_FUNC (line 350) | FMT_FUNC void WindowsError::init(
function FMT_FUNC (line 359) | FMT_FUNC void internal::format_windows_error(
function FMT_CATCH (line 382) | FMT_CATCH(...) {}
function FMT_FUNC (line 388) | FMT_FUNC void format_system_error(
function FMT_CATCH (line 404) | FMT_CATCH(...) {}
function FMT_FUNC (line 413) | FMT_FUNC internal::Arg internal::FormatterBase::do_get_arg(
function FMT_FUNC (line 429) | FMT_FUNC void report_system_error(
function FMT_FUNC (line 436) | FMT_FUNC void report_windows_error(
function FMT_FUNC (line 443) | FMT_FUNC void print(std::FILE *f, CStringRef format_str, ArgList args) {
function FMT_FUNC (line 449) | FMT_FUNC void print(CStringRef format_str, ArgList args) {
function FMT_FUNC (line 453) | FMT_FUNC void print_colored(Color c, CStringRef format, ArgList args) {
type internal::BasicData<void> (line 463) | struct internal::BasicData<void>
FILE: lib/fmt/fmt_format.h
type __int64 (line 81) | typedef __int64 intmax_t;
function namespace (line 359) | namespace fmt {
function namespace (line 408) | namespace fmt {
function namespace (line 432) | namespace std {
function namespace (line 488) | namespace fmt {
type BasicStringRef (line 635) | typedef BasicStringRef<char> StringRef;
type BasicStringRef (line 636) | typedef BasicStringRef<wchar_t> WStringRef;
function Char (line 683) | const Char *c_str() const { return data_; }
type BasicCStringRef (line 686) | typedef BasicCStringRef<char> CStringRef;
type BasicCStringRef (line 687) | typedef BasicCStringRef<wchar_t> WCStringRef;
function class (line 690) | class FormatError : public std::runtime_error {
function namespace (line 698) | namespace internal {
function resize (line 776) | void resize(std::size_t new_size) {
function reserve (line 787) | void reserve(std::size_t capacity) {
function clear (line 792) | void clear() FMT_NOEXCEPT { size_ = 0; }
function push_back (line 794) | void push_back(const T &value) {
function T (line 805) | const T &operator[](std::size_t index) const { return ptr_[index]; }
function namespace (line 820) | namespace internal {
function wchar_t (line 956) | static wchar_t convert(wchar_t value) { return value; }
function is_negative (line 976) | bool is_negative(T value) { return value < 0; }
type SignChecker (line 980) | struct SignChecker
function is_negative (line 982) | bool is_negative(T) { return false; }
function is_negative (line 988) | bool is_negative(T value) {
type Type (line 994) | typedef uint32_t Type;
type TypeSelector (line 997) | struct TypeSelector
type Type (line 997) | typedef uint64_t Type;
type typename (line 1003) | typedef typename
type BasicData (line 1022) | typedef BasicData<> Data;
function count_digits (line 1027) | inline unsigned count_digits(uint64_t n) {
function count_digits (line 1035) | inline unsigned count_digits(uint64_t n) {
function count_digits (line 1053) | inline unsigned count_digits(uint32_t n) {
type NoThousandsSep (line 1060) | struct NoThousandsSep {
function class (line 1066) | class ThousandsSep {
function format_decimal (line 1090) | void format_decimal(Char *buffer, UInt value, unsigned num_digits,
function format_decimal (line 1115) | void format_decimal(Char *buffer, UInt value, unsigned num_digits) {
function class (line 1131) | class UTF8ToUTF16 {
function class (line 1145) | class UTF16ToUTF8 {
type Value (line 1168) | struct Value {
type CustomValue (line 1178) | struct CustomValue {
type Type (line 1198) | enum Type {
function Value (line 1210) | struct Arg : Value {
type Null (line 1226) | typedef Null<T> Supported;
type T (line 1227) | typedef T Unsupported;
type T (line 1232) | typedef T Supported;
type Null (line 1233) | typedef Null<T> Unsupported;
type T (line 1285) | typedef T type;
type T (line 1288) | typedef T type;
type Not (line 1298) | struct Not
function LConvCheck (line 1304) | LConvCheck(int) {}
function fmt (line 1316) | inline fmt::StringRef thousands_sep(...) { return ""; }
function set_string (line 1379) | void set_string(StringRef str) {
function set_string (line 1384) | void set_string(WStringRef str) {
function format_custom_arg (line 1391) | void format_custom_arg(
function type (line 1422) | static uint64_t type(long) {
function type (line 1432) | static uint64_t type(unsigned long) {
function type (line 1457) | uint64_t type(T) { return Arg::INT; }
function type (line 1464) | static uint64_t type(wchar_t) { return Arg::CHAR; }
function runtime_error (line 1560) | RuntimeError(const RuntimeError &rerr) : std::runtime_error(rerr) {}
function Result (line 1672) | Result visit_unhandled_arg() {
function Result (line 1678) | Result visit_int(int value) {
function Result (line 1683) | Result visit_long_long(LongLong value) {
function Result (line 1688) | Result visit_uint(unsigned value) {
function Result (line 1693) | Result visit_ulong_long(ULongLong value) {
function Result (line 1698) | Result visit_bool(bool value) {
function Result (line 1703) | Result visit_char(int value) {
function visit_any_int (line 1709) | visit_any_int(T) {
function Result (line 1714) | Result visit_double(double value) {
function Result (line 1719) | Result visit_long_double(long double value) {
function visit_any_double (line 1725) | visit_any_double(T) {
function Result (line 1730) | Result visit_cstring(const char *) {
function Result (line 1735) | Result visit_string(Arg::StringValue<char>) {
function Result (line 1740) | Result visit_wstring(Arg::StringValue<wchar_t>) {
function Result (line 1745) | Result visit_pointer(const void *) {
function Result (line 1750) | Result visit_custom(Arg::CustomValue) {
function Result (line 1762) | Result visit(const Arg &arg) {
type Alignment (line 1799) | enum Alignment {
type EmptySpec (line 1810) | struct EmptySpec {}
function flag (line 1818) | bool flag(unsigned) const { return false; }
function fill (line 1825) | struct WidthSpec {
function flag (line 1854) | bool flag(unsigned) const { return false; }
function AlignSpec (line 1860) | struct FormatSpec : AlignSpec {
function Char (line 1901) | const Char *str() const { return str_; }
function StrFormatSpec (line 2018) | inline StrFormatSpec<wchar_t> pad(
function class (line 2199) | class FormatterBase {
function explicit (line 2210) | explicit FormatterBase(const ArgList &args) {
function Arg (line 2216) | Arg next_arg(const char *&error) {
function Arg (line 2225) | Arg get_arg(unsigned arg_index, const char *&error) {
function check_no_auto_index (line 2229) | bool check_no_auto_index(const char *&error) {
function visit_custom (line 2284) | void visit_custom(internal::Arg::CustomValue c) {
function namespace (line 2366) | namespace internal {
function class (line 2534) | class SystemError : public internal::RuntimeError {
type typename (line 2620) | typedef typename internal::CharTraits<Char>::CharPtr CharPtr;
function Char (line 2624) | static Char *get(CharPtr p) { return p.base(); }
function Char (line 2626) | static Char *get(Char *p) { return p; }
function CharPtr (line 2636) | CharPtr grow_buffer(std::size_t n) {
type typename (line 2654) | typedef typename internal::IntTraits<Int>::MainType MainType;
function CharPtr (line 2665) | CharPtr prepare_int_buffer(unsigned num_digits,
function append_float_length (line 2703) | void append_float_length(Char *&format_ptr, long double) {
function Char (line 2739) | const Char *data() const FMT_NOEXCEPT { return &buffer_[0]; }
function Char (line 2745) | const Char *c_str() const {
function write (line 2786) | void write(BasicCStringRef<Char> format, ArgList args) {
function clear (line 2881) | void clear() FMT_NOEXCEPT { buffer_.clear(); }
type typename (line 3014) | typedef typename internal::IntTraits<T>::MainType UnsignedType;
type BasicMemoryWriter (line 3324) | typedef BasicMemoryWriter<char> MemoryWriter;
type BasicMemoryWriter (line 3325) | typedef BasicMemoryWriter<wchar_t> WMemoryWriter;
type BasicArrayWriter (line 3373) | typedef BasicArrayWriter<char> ArrayWriter;
type BasicArrayWriter (line 3374) | typedef BasicArrayWriter<wchar_t> WArrayWriter;
function class (line 3384) | class WindowsError : public SystemError {
type Color (line 3430) | enum Color { BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE }
function std (line 3449) | inline std::string format(CStringRef format_str, ArgList args) {
function std (line 3455) | inline std::wstring format(WCStringRef format_str, ArgList args) {
function class (line 3486) | class FormatInt {
function explicit (line 3528) | explicit FormatInt(long value) { FormatSigned(value); }
function explicit (line 3529) | explicit FormatInt(LongLong value) { FormatSigned(value); }
function explicit (line 3530) | explicit FormatInt(unsigned value) : str_(format_decimal(value)) {}
function explicit (line 3531) | explicit FormatInt(unsigned long value) : str_(format_decimal(value)) {}
function explicit (line 3532) | explicit FormatInt(ULongLong value) : str_(format_decimal(value)) {}
type typename (line 3567) | typedef typename internal::IntTraits<T>::MainType MainType;
type fmt (line 3647) | typedef fmt::internal::ArgArray<sizeof...(Args)> ArgArray;
function typename (line 3648) | typename ArgArray::Type array{ \
function namespace (line 3748) | namespace fmt {
function namespace (line 4101) | namespace fmt {
FILE: lib/fmt/fmt_ostream.cpp
type fmt (line 12) | namespace fmt {
type internal (line 14) | namespace internal {
function FMT_FUNC (line 15) | FMT_FUNC void write(std::ostream &os, Writer &w) {
function FMT_FUNC (line 30) | FMT_FUNC void print(std::ostream &os, CStringRef format_str, ArgList a...
FILE: lib/fmt/fmt_ostream.h
function namespace (line 16) | namespace fmt {
function ostream (line 53) | struct DummyStream : std::ostream {
type internal (line 87) | typedef internal::MakeArg< BasicFormatter<Char> > MakeArg;
FILE: lib/fmt/fmt_posix.cpp
function convert_rwcount (line 58) | inline unsigned convert_rwcount(std::size_t count) {
function convert_rwcount (line 65) | inline std::size_t convert_rwcount(std::size_t count) { return count; }
type stat (line 146) | struct stat
FILE: lib/fmt/fmt_posix.h
function namespace (line 73) | namespace fmt {
function class (line 187) | class File {
function operator (line 245) | operator Proxy() FMT_NOEXCEPT {
function FMT_API (line 269) | FMT_API ~File() FMT_NOEXCEPT;
function FMT_API (line 279) | FMT_API LongLong size() const;
function freelocale (line 335) | static void freelocale(locale_t locale) {
function strtod_l (line 339) | static double strtod_l(const char *nptr, char **endptr, _locale_t locale) {
function strtod (line 361) | double strtod(const char *&str) const {
function namespace (line 373) | namespace std {
FILE: lib/fmt/fmt_printf.cpp
type fmt (line 13) | namespace fmt {
function FMT_FUNC (line 18) | FMT_FUNC int fprintf(std::FILE *f, CStringRef format, ArgList args) {
FILE: lib/fmt/fmt_printf.h
function namespace (line 18) | namespace fmt {
type internal (line 228) | typedef internal::ArgFormatterBase<Impl, Char, Spec> Base;
function visit_bool (line 242) | void visit_bool(bool value) {
function visit_char (line 251) | void visit_char(int value) {
function visit_cstring (line 274) | void visit_cstring(const char *value) {
function visit_pointer (line 284) | void visit_pointer(const void *value) {
function visit_custom (line 292) | void visit_custom(internal::Arg::CustomValue c) {
function printf (line 522) | inline void printf(Writer &w, CStringRef format, ArgList args) {
function printf (line 527) | inline void printf(WWriter &w, WCStringRef format, ArgList args) {
function std (line 541) | inline std::string sprintf(CStringRef format, ArgList args) {
function printf (line 576) | inline int printf(CStringRef format, ArgList args) {
function fprintf (line 590) | inline int fprintf(std::ostream &os, CStringRef format_str, ArgList args) {
FILE: lib/fmt/fmt_qformat.h
function namespace (line 10) | namespace fmt
FILE: lib/fmt/fmt_string.h
function namespace (line 19) | namespace fmt {
FILE: lib/fmt/fmt_time.h
function namespace (line 22) | namespace fmt {
function std (line 103) | inline std::tm gmtime(std::time_t time) {
FILE: lib/fmt/orig/container.h
function namespace (line 15) | namespace fmt {
FILE: lib/fmt/orig/format.cc
function FMT_MAYBE_UNUSED (line 75) | FMT_MAYBE_UNUSED
function FMT_MAYBE_UNUSED (line 79) | FMT_MAYBE_UNUSED
type fmt (line 84) | namespace fmt {
function FMT_FUNC (line 86) | FMT_FUNC internal::RuntimeError::~RuntimeError() FMT_DTOR_NOEXCEPT {}
function FMT_FUNC (line 87) | FMT_FUNC FormatError::~FormatError() FMT_DTOR_NOEXCEPT {}
function FMT_FUNC (line 88) | FMT_FUNC SystemError::~SystemError() FMT_DTOR_NOEXCEPT {}
function fmt_snprintf (line 95) | inline int fmt_snprintf(char *buffer, size_t size, const char *format,...
function safe_strerror (line 124) | int safe_strerror(
function format_error_code (line 191) | void format_error_code(Writer &out, int error_code,
function report_error (line 214) | void report_error(FormatFunc func, int error_code,
function FMT_FUNC (line 225) | FMT_FUNC void SystemError::init(
function FMT_FUNC (line 296) | FMT_FUNC void internal::report_unknown_type(char code, const char *typ...
function FMT_FUNC (line 309) | FMT_FUNC internal::UTF8ToUTF16::UTF8ToUTF16(StringRef s) {
function FMT_FUNC (line 326) | FMT_FUNC internal::UTF16ToUTF8::UTF16ToUTF8(WStringRef s) {
function FMT_FUNC (line 333) | FMT_FUNC int internal::UTF16ToUTF8::convert(WStringRef s) {
function FMT_FUNC (line 350) | FMT_FUNC void WindowsError::init(
function FMT_FUNC (line 359) | FMT_FUNC void internal::format_windows_error(
function FMT_CATCH (line 382) | FMT_CATCH(...) {}
function FMT_FUNC (line 388) | FMT_FUNC void format_system_error(
function FMT_CATCH (line 404) | FMT_CATCH(...) {}
function FMT_FUNC (line 413) | FMT_FUNC internal::Arg internal::FormatterBase::do_get_arg(
function FMT_FUNC (line 429) | FMT_FUNC void report_system_error(
function FMT_FUNC (line 436) | FMT_FUNC void report_windows_error(
function FMT_FUNC (line 443) | FMT_FUNC void print(std::FILE *f, CStringRef format_str, ArgList args) {
function FMT_FUNC (line 449) | FMT_FUNC void print(CStringRef format_str, ArgList args) {
function FMT_FUNC (line 453) | FMT_FUNC void print_colored(Color c, CStringRef format, ArgList args) {
type internal::BasicData<void> (line 463) | struct internal::BasicData<void>
FILE: lib/fmt/orig/format.h
type __int64 (line 81) | typedef __int64 intmax_t;
function namespace (line 359) | namespace fmt {
function namespace (line 408) | namespace fmt {
function namespace (line 432) | namespace std {
function namespace (line 482) | namespace fmt {
type BasicStringRef (line 629) | typedef BasicStringRef<char> StringRef;
type BasicStringRef (line 630) | typedef BasicStringRef<wchar_t> WStringRef;
function Char (line 677) | const Char *c_str() const { return data_; }
type BasicCStringRef (line 680) | typedef BasicCStringRef<char> CStringRef;
type BasicCStringRef (line 681) | typedef BasicCStringRef<wchar_t> WCStringRef;
function class (line 684) | class FormatError : public std::runtime_error {
function namespace (line 692) | namespace internal {
function resize (line 770) | void resize(std::size_t new_size) {
function reserve (line 781) | void reserve(std::size_t capacity) {
function clear (line 786) | void clear() FMT_NOEXCEPT { size_ = 0; }
function push_back (line 788) | void push_back(const T &value) {
function T (line 799) | const T &operator[](std::size_t index) const { return ptr_[index]; }
function namespace (line 814) | namespace internal {
function wchar_t (line 950) | static wchar_t convert(wchar_t value) { return value; }
function is_negative (line 970) | bool is_negative(T value) { return value < 0; }
type SignChecker (line 974) | struct SignChecker
function is_negative (line 976) | bool is_negative(T) { return false; }
function is_negative (line 982) | bool is_negative(T value) {
type Type (line 988) | typedef uint32_t Type;
type TypeSelector (line 991) | struct TypeSelector
type Type (line 991) | typedef uint64_t Type;
type typename (line 997) | typedef typename
type BasicData (line 1016) | typedef BasicData<> Data;
function count_digits (line 1021) | inline unsigned count_digits(uint64_t n) {
function count_digits (line 1029) | inline unsigned count_digits(uint64_t n) {
function count_digits (line 1047) | inline unsigned count_digits(uint32_t n) {
type NoThousandsSep (line 1054) | struct NoThousandsSep {
function class (line 1060) | class ThousandsSep {
function format_decimal (line 1084) | void format_decimal(Char *buffer, UInt value, unsigned num_digits,
function format_decimal (line 1109) | void format_decimal(Char *buffer, UInt value, unsigned num_digits) {
function class (line 1125) | class UTF8ToUTF16 {
function class (line 1139) | class UTF16ToUTF8 {
type Value (line 1162) | struct Value {
type CustomValue (line 1172) | struct CustomValue {
type Type (line 1192) | enum Type {
function Value (line 1204) | struct Arg : Value {
type Null (line 1220) | typedef Null<T> Supported;
type T (line 1221) | typedef T Unsupported;
type T (line 1226) | typedef T Supported;
type Null (line 1227) | typedef Null<T> Unsupported;
type T (line 1279) | typedef T type;
type T (line 1282) | typedef T type;
type Not (line 1292) | struct Not
function LConvCheck (line 1298) | LConvCheck(int) {}
function fmt (line 1310) | inline fmt::StringRef thousands_sep(...) { return ""; }
function set_string (line 1373) | void set_string(StringRef str) {
function set_string (line 1378) | void set_string(WStringRef str) {
function format_custom_arg (line 1385) | void format_custom_arg(
function type (line 1416) | static uint64_t type(long) {
function type (line 1426) | static uint64_t type(unsigned long) {
function type (line 1451) | uint64_t type(T) { return Arg::INT; }
function type (line 1458) | static uint64_t type(wchar_t) { return Arg::CHAR; }
function runtime_error (line 1554) | RuntimeError(const RuntimeError &rerr) : std::runtime_error(rerr) {}
function Result (line 1666) | Result visit_unhandled_arg() {
function Result (line 1672) | Result visit_int(int value) {
function Result (line 1677) | Result visit_long_long(LongLong value) {
function Result (line 1682) | Result visit_uint(unsigned value) {
function Result (line 1687) | Result visit_ulong_long(ULongLong value) {
function Result (line 1692) | Result visit_bool(bool value) {
function Result (line 1697) | Result visit_char(int value) {
function visit_any_int (line 1703) | visit_any_int(T) {
function Result (line 1708) | Result visit_double(double value) {
function Result (line 1713) | Result visit_long_double(long double value) {
function visit_any_double (line 1719) | visit_any_double(T) {
function Result (line 1724) | Result visit_cstring(const char *) {
function Result (line 1729) | Result visit_string(Arg::StringValue<char>) {
function Result (line 1734) | Result visit_wstring(Arg::StringValue<wchar_t>) {
function Result (line 1739) | Result visit_pointer(const void *) {
function Result (line 1744) | Result visit_custom(Arg::CustomValue) {
function Result (line 1756) | Result visit(const Arg &arg) {
type Alignment (line 1793) | enum Alignment {
type EmptySpec (line 1804) | struct EmptySpec {}
function flag (line 1812) | bool flag(unsigned) const { return false; }
function fill (line 1819) | struct WidthSpec {
function flag (line 1848) | bool flag(unsigned) const { return false; }
function AlignSpec (line 1854) | struct FormatSpec : AlignSpec {
function Char (line 1895) | const Char *str() const { return str_; }
function StrFormatSpec (line 2012) | inline StrFormatSpec<wchar_t> pad(
function class (line 2193) | class FormatterBase {
function explicit (line 2204) | explicit FormatterBase(const ArgList &args) {
function Arg (line 2210) | Arg next_arg(const char *&error) {
function Arg (line 2219) | Arg get_arg(unsigned arg_index, const char *&error) {
function check_no_auto_index (line 2223) | bool check_no_auto_index(const char *&error) {
function visit_custom (line 2278) | void visit_custom(internal::Arg::CustomValue c) {
function namespace (line 2360) | namespace internal {
function class (line 2528) | class SystemError : public internal::RuntimeError {
type typename (line 2614) | typedef typename internal::CharTraits<Char>::CharPtr CharPtr;
function Char (line 2618) | static Char *get(CharPtr p) { return p.base(); }
function Char (line 2620) | static Char *get(Char *p) { return p; }
function CharPtr (line 2630) | CharPtr grow_buffer(std::size_t n) {
type typename (line 2648) | typedef typename internal::IntTraits<Int>::MainType MainType;
function CharPtr (line 2659) | CharPtr prepare_int_buffer(unsigned num_digits,
function append_float_length (line 2697) | void append_float_length(Char *&format_ptr, long double) {
function Char (line 2733) | const Char *data() const FMT_NOEXCEPT { return &buffer_[0]; }
function Char (line 2739) | const Char *c_str() const {
function write (line 2780) | void write(BasicCStringRef<Char> format, ArgList args) {
function clear (line 2875) | void clear() FMT_NOEXCEPT { buffer_.clear(); }
type typename (line 3008) | typedef typename internal::IntTraits<T>::MainType UnsignedType;
type BasicMemoryWriter (line 3318) | typedef BasicMemoryWriter<char> MemoryWriter;
type BasicMemoryWriter (line 3319) | typedef BasicMemoryWriter<wchar_t> WMemoryWriter;
type BasicArrayWriter (line 3367) | typedef BasicArrayWriter<char> ArrayWriter;
type BasicArrayWriter (line 3368) | typedef BasicArrayWriter<wchar_t> WArrayWriter;
function class (line 3378) | class WindowsError : public SystemError {
type Color (line 3424) | enum Color { BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE }
function std (line 3443) | inline std::string format(CStringRef format_str, ArgList args) {
function std (line 3449) | inline std::wstring format(WCStringRef format_str, ArgList args) {
function class (line 3480) | class FormatInt {
function explicit (line 3522) | explicit FormatInt(long value) { FormatSigned(value); }
function explicit (line 3523) | explicit FormatInt(LongLong value) { FormatSigned(value); }
function explicit (line 3524) | explicit FormatInt(unsigned value) : str_(format_decimal(value)) {}
function explicit (line 3525) | explicit FormatInt(unsigned long value) : str_(format_decimal(value)) {}
function explicit (line 3526) | explicit FormatInt(ULongLong value) : str_(format_decimal(value)) {}
type typename (line 3561) | typedef typename internal::IntTraits<T>::MainType MainType;
type fmt (line 3641) | typedef fmt::internal::ArgArray<sizeof...(Args)> ArgArray;
function typename (line 3642) | typename ArgArray::Type array{ \
function namespace (line 3742) | namespace fmt {
function namespace (line 4095) | namespace fmt {
FILE: lib/fmt/orig/ostream.cc
type fmt (line 12) | namespace fmt {
type internal (line 14) | namespace internal {
function FMT_FUNC (line 15) | FMT_FUNC void write(std::ostream &os, Writer &w) {
function FMT_FUNC (line 30) | FMT_FUNC void print(std::ostream &os, CStringRef format_str, ArgList a...
FILE: lib/fmt/orig/ostream.h
function namespace (line 16) | namespace fmt {
function ostream (line 53) | struct DummyStream : std::ostream {
type internal (line 87) | typedef internal::MakeArg< BasicFormatter<Char> > MakeArg;
FILE: lib/fmt/orig/posix.cc
function convert_rwcount (line 58) | inline unsigned convert_rwcount(std::size_t count) {
function convert_rwcount (line 65) | inline std::size_t convert_rwcount(std::size_t count) { return count; }
type stat (line 146) | struct stat
FILE: lib/fmt/orig/posix.h
function namespace (line 67) | namespace fmt {
function class (line 181) | class File {
function operator (line 239) | operator Proxy() FMT_NOEXCEPT {
function FMT_API (line 263) | FMT_API ~File() FMT_NOEXCEPT;
function FMT_API (line 273) | FMT_API LongLong size() const;
function strtod (line 349) | double strtod(const char *&str) const {
function namespace (line 360) | namespace std {
FILE: lib/fmt/orig/printf.cc
type fmt (line 13) | namespace fmt {
function FMT_FUNC (line 18) | FMT_FUNC int fprintf(std::FILE *f, CStringRef format, ArgList args) {
FILE: lib/fmt/orig/printf.h
function namespace (line 18) | namespace fmt {
type internal (line 228) | typedef internal::ArgFormatterBase<Impl, Char, Spec> Base;
function visit_bool (line 242) | void visit_bool(bool value) {
function visit_char (line 251) | void visit_char(int value) {
function visit_cstring (line 274) | void visit_cstring(const char *value) {
function visit_pointer (line 284) | void visit_pointer(const void *value) {
function visit_custom (line 292) | void visit_custom(internal::Arg::CustomValue c) {
function printf (line 522) | inline void printf(Writer &w, CStringRef format, ArgList args) {
function printf (line 527) | inline void printf(WWriter &w, WCStringRef format, ArgList args) {
function std (line 541) | inline std::string sprintf(CStringRef format, ArgList args) {
function printf (line 576) | inline int printf(CStringRef format, ArgList args) {
function fprintf (line 590) | inline int fprintf(std::ostream &os, CStringRef format_str, ArgList args) {
FILE: lib/fmt/orig/string.h
function namespace (line 19) | namespace fmt {
FILE: lib/fmt/orig/time.h
function namespace (line 22) | namespace fmt {
function std (line 103) | inline std::tm gmtime(std::time_t time) {
FILE: lib/fmt_format_ne.h
function namespace (line 27) | namespace fmt
FILE: lib/fmt_impl.cpp
type fmt (line 31) | namespace fmt
function localtime_ne (line 34) | std::tm localtime_ne(std::time_t time)
function sprintf_ne (line 56) | std::string sprintf_ne(const char *fstr, ...)
FILE: lib/fmt_time_ne.h
function namespace (line 24) | namespace fmt
FILE: lib/gif.h
function namespace (line 61) | namespace GIF_H
function GifSwapPixels (line 154) | static void GifSwapPixels(uint8_t* image, int pixA, int pixB)
function GifPartition (line 178) | static int GifPartition(uint8_t* image, const int left, const int right,...
function GifPartitionByMedian (line 207) | static void GifPartitionByMedian(uint8_t* image, int left, int right, in...
function GifSplitPalette (line 225) | static void GifSplitPalette(uint8_t* image, int numPixels, int firstElt,...
function GifPickChangedPixels (line 347) | static int GifPickChangedPixels( const uint8_t* lastFrame, uint8_t* fram...
function GifMakePalette (line 373) | static void GifMakePalette( const uint8_t* lastFrame, const uint8_t* nex...
function GifDitherImage (line 405) | static void GifDitherImage( const uint8_t* lastFrame, const uint8_t* nex...
function GifThresholdImage (line 515) | static void GifThresholdImage( const uint8_t* lastFrame, const uint8_t* ...
type GifBitStatus (line 575) | struct GifBitStatus
function GifWriteBit (line 585) | static void GifWriteBit( GifBitStatus& stat, uint32_t bit )
function GifWriteChunk (line 603) | static void GifWriteChunk( buf_t& buffer, GifBitStatus& stat )
function GifWriteCode (line 613) | static void GifWriteCode( buf_t& buffer, GifBitStatus& stat, uint32_t co...
type GifLzwNode (line 629) | struct GifLzwNode
function GifWritePalette (line 635) | static void GifWritePalette( const GifPalette* pPal, buf_t& buffer )
function GifWriteLzwImage (line 654) | static void GifWriteLzwImage(SDL_RWops* f, uint8_t* image, uint32_t left...
function GifOverwriteLastDelay (line 862) | static void GifOverwriteLastDelay(GifWriter* writer, uint32_t delay)
function GifEnd (line 877) | static bool GifEnd( GifWriter* writer )
FILE: lib/gif_writer.h
type SDL_RWops (line 7) | struct SDL_RWops
function namespace (line 9) | namespace GIF_H
FILE: lib/json/json.hpp
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 247) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_END (line 258) | NLOHMANN_JSON_NAMESPACE_END
type would_call_std_ (line 2814) | struct would_call_std_
type value_t (line 2872) | enum class value_t : std::uint8_t
function NLOHMANN_JSON_NAMESPACE_END (line 2937) | NLOHMANN_JSON_NAMESPACE_END
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 3030) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 3076) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 3267) | NLOHMANN_JSON_NAMESPACE_BEGIN
class json_pointer (line 3416) | class json_pointer
type ordered_map (line 3427) | struct ordered_map
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 3438) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 4230) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_END (line 4358) | NLOHMANN_JSON_NAMESPACE_END
function NLOHMANN_JSON_NAMESPACE_END (line 4590) | NLOHMANN_JSON_NAMESPACE_END
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 4636) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 4644) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 4659) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 5174) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_END (line 5356) | NLOHMANN_JSON_NAMESPACE_END
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 5404) | NLOHMANN_JSON_NAMESPACE_BEGIN
type adl_serializer (line 5832) | struct adl_serializer
method from_json (line 5837) | static auto from_json(BasicJsonType && j, TargetType& val) noexcept(
method from_json (line 5847) | static auto from_json(BasicJsonType && j) noexcept(
method to_json (line 5857) | static auto to_json(BasicJsonType& j, TargetType && val) noexcept(
function set_subtype (line 5938) | void set_subtype(subtype_type subtype_) noexcept
function subtype_type (line 5946) | constexpr subtype_type subtype() const noexcept
function has_subtype (line 5953) | constexpr bool has_subtype() const noexcept
function clear_subtype (line 5960) | void clear_subtype() noexcept
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 5999) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 6171) | NLOHMANN_JSON_NAMESPACE_BEGIN
function json_sax_dom_parser (line 6813) | explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_exceptio...
function json_sax_dom_parser (line 6818) | json_sax_dom_parser(const json_sax_dom_parser&) = delete;
function json_sax_dom_parser (line 6819) | json_sax_dom_parser(json_sax_dom_parser&&) = default;
function null (line 6824) | bool null()
function boolean (line 6830) | bool boolean(bool val)
function number_integer (line 6836) | bool number_integer(number_integer_t val)
function number_unsigned (line 6842) | bool number_unsigned(number_unsigned_t val)
function number_float (line 6848) | bool number_float(number_float_t val, const string_t& /*unused*/)
function string (line 6854) | bool string(string_t& val)
function binary (line 6860) | bool binary(binary_t& val)
function start_object (line 6866) | bool start_object(std::size_t len)
function key (line 6878) | bool key(string_t& val)
function end_object (line 6888) | bool end_object()
function start_array (line 6898) | bool start_array(std::size_t len)
function end_array (line 6910) | bool end_array()
function parse_error (line 6921) | bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/,
function is_errored (line 6933) | constexpr bool is_errored() const
class json_sax_dom_callback_parser (line 6982) | class json_sax_dom_callback_parser
method json_sax_dom_callback_parser (line 6993) | json_sax_dom_callback_parser(BasicJsonType& r,
method json_sax_dom_callback_parser (line 7002) | json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = de...
method json_sax_dom_callback_parser (line 7003) | json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default;
method json_sax_dom_callback_parser (line 7004) | json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_pa...
method json_sax_dom_callback_parser (line 7005) | json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&...
method null (line 7008) | bool null()
method boolean (line 7014) | bool boolean(bool val)
method number_integer (line 7020) | bool number_integer(number_integer_t val)
method number_unsigned (line 7026) | bool number_unsigned(number_unsigned_t val)
method number_float (line 7032) | bool number_float(number_float_t val, const string_t& /*unused*/)
method string (line 7038) | bool string(string_t& val)
method binary (line 7044) | bool binary(binary_t& val)
method start_object (line 7050) | bool start_object(std::size_t len)
method key (line 7068) | bool key(string_t& val)
method end_object (line 7085) | bool end_object()
method start_array (line 7121) | bool start_array(std::size_t len)
method end_array (line 7138) | bool end_array()
method parse_error (line 7171) | bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/,
method is_errored (line 7183) | constexpr bool is_errored() const
method handle_value (line 7205) | std::pair<bool, BasicJsonType*> handle_value(Value&& v, const bool ski...
class json_sax_acceptor (line 7289) | class json_sax_acceptor
method null (line 7298) | bool null()
method boolean (line 7303) | bool boolean(bool /*unused*/)
method number_integer (line 7308) | bool number_integer(number_integer_t /*unused*/)
method number_unsigned (line 7313) | bool number_unsigned(number_unsigned_t /*unused*/)
method number_float (line 7318) | bool number_float(number_float_t /*unused*/, const string_t& /*unused*/)
method string (line 7323) | bool string(string_t& /*unused*/)
method binary (line 7328) | bool binary(binary_t& /*unused*/)
method start_object (line 7333) | bool start_object(std::size_t /*unused*/ = static_cast<std::size_t>(-1))
method key (line 7338) | bool key(string_t& /*unused*/)
method end_object (line 7343) | bool end_object()
method start_array (line 7348) | bool start_array(std::size_t /*unused*/ = static_cast<std::size_t>(-1))
method end_array (line 7353) | bool end_array()
method parse_error (line 7358) | bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/...
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 7397) | NLOHMANN_JSON_NAMESPACE_BEGIN
function reset (line 8692) | void reset() noexcept
function char_int_type (line 8709) | char_int_type get()
function unget (line 8746) | void unget()
function add (line 8773) | void add(char_int_type c)
function number_unsigned_t (line 8790) | constexpr number_unsigned_t get_number_unsigned() const noexcept
function number_float_t (line 8796) | constexpr number_float_t get_number_float() const noexcept
function string_t (line 8802) | string_t& get_string()
function position_t (line 8812) | constexpr position_t get_position() const noexcept
function get_token_string (line 8820) | std::string get_token_string() const
function JSON_HEDLEY_RETURNS_NON_NULL (line 8844) | JSON_HEDLEY_RETURNS_NON_NULL
function skip_bom (line 8858) | bool skip_bom()
function skip_whitespace (line 8872) | void skip_whitespace()
function token_type (line 8881) | token_type scan()
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 9030) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_END (line 9170) | NLOHMANN_JSON_NAMESPACE_END
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 12195) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 12719) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_END (line 12835) | NLOHMANN_JSON_NAMESPACE_END
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 12890) | NLOHMANN_JSON_NAMESPACE_BEGIN
function pointer (line 13192) | pointer operator->() const
function iter_impl (line 13234) | iter_impl operator++(int)& // NOLINT(cert-dcl21-cpp)
function iter_impl (line 13245) | iter_impl& operator++()
function iter_impl (line 13285) | iter_impl operator--(int)& // NOLINT(cert-dcl21-cpp)
function iter_impl (line 13296) | iter_impl& operator--()
function iter_impl (line 13444) | iter_impl& operator+=(difference_type i)
function iter_impl (line 13481) | iter_impl& operator-=(difference_type i)
function iter_impl (line 13490) | iter_impl operator+(difference_type i) const
function friend (line 13501) | friend iter_impl operator+(difference_type i, const iter_impl& it)
function iter_impl (line 13512) | iter_impl operator-(difference_type i) const
function difference_type (line 13523) | difference_type operator-(const iter_impl& other) const
function reference (line 13552) | reference operator[](difference_type n) const
function reference (line 13606) | reference value() const
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 13641) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 13774) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 13835) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_BASIC_JSON_TPL_DECLARATION (line 13855) | NLOHMANN_BASIC_JSON_TPL_DECLARATION
function json_pointer (line 13867) | explicit json_pointer(const string_t& s = "")
function string_t (line 13873) | string_t to_string() const
function friend (line 13894) | friend std::ostream& operator<<(std::ostream& o, const json_pointer& ptr)
function json_pointer (line 13903) | json_pointer& operator/=(const json_pointer& ptr)
function json_pointer (line 13913) | json_pointer& operator/=(string_t token)
function json_pointer (line 13921) | json_pointer& operator/=(std::size_t array_idx)
function friend (line 13928) | friend json_pointer operator/(const json_pointer& lhs,
function friend (line 13936) | friend json_pointer operator/(const json_pointer& lhs, string_t token) /...
function friend (line 13943) | friend json_pointer operator/(const json_pointer& lhs, std::size_t array...
function json_pointer (line 13950) | json_pointer parent_pointer() const
function pop_back (line 13964) | void pop_back()
function string_t (line 13976) | const string_t& back() const
function push_back (line 13988) | void push_back(const string_t& token)
function push_back (line 13995) | void push_back(string_t&& token)
function empty (line 14002) | bool empty() const noexcept
function BasicJsonType (line 14079) | BasicJsonType& get_and_create(BasicJsonType& j) const
function BasicJsonType (line 14159) | BasicJsonType& get_unchecked(BasicJsonType* ptr) const
function BasicJsonType (line 14227) | BasicJsonType& get_checked(BasicJsonType* ptr) const
function BasicJsonType (line 14285) | const BasicJsonType& get_unchecked(const BasicJsonType* ptr) const
function BasicJsonType (line 14334) | const BasicJsonType& get_checked(const BasicJsonType* ptr) const
function contains (line 14383) | bool contains(const BasicJsonType* ptr) const
function split (line 14471) | static std::vector<string_t> split(const string_t& reference_string)
function BasicJsonType (line 14611) | static BasicJsonType
function convert (line 14640) | json_pointer<string_t> convert() const&
function convert (line 14647) | json_pointer<string_t> convert()&&
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 14814) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 14939) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_END (line 15061) | NLOHMANN_JSON_NAMESPACE_END
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 16928) | NLOHMANN_JSON_NAMESPACE_BEGIN
function NLOHMANN_JSON_NAMESPACE_END (line 18025) | NLOHMANN_JSON_NAMESPACE_END
function hex_bytes (line 18685) | static std::string hex_bytes(std::uint8_t byte)
function is_negative_number (line 18696) | bool is_negative_number(NumberType x)
function is_negative_number (line 18702) | bool is_negative_number(NumberType /*unused*/)
function dump_integer (line 18722) | void dump_integer(NumberType x)
function dump_float (line 18807) | void dump_float(number_float_t x)
function dump_float (line 18828) | void dump_float(number_float_t x, std::true_type /*is_ieee_single_or_dou...
function dump_float (line 18836) | void dump_float(number_float_t x, std::false_type /*is_ieee_single_or_do...
function decode (line 18908) | static std::uint8_t decode(std::uint8_t& state, std::uint32_t& codep, co...
function number_unsigned_t (line 18948) | number_unsigned_t remove_sign(number_unsigned_t x)
function number_unsigned_t (line 18963) | inline number_unsigned_t remove_sign(number_integer_t x) noexcept
function ordered_map (line 19050) | ordered_map() noexcept(noexcept(Container())) : Container{} {}
function ordered_map (line 19051) | explicit ordered_map(const Allocator& alloc) noexcept(noexcept(Container...
function ordered_map (line 19053) | ordered_map(It first, It last, const Allocator& alloc = Allocator())
function ordered_map (line 19055) | ordered_map(std::initializer_list<value_type> init, const Allocator& all...
function emplace (line 19058) | std::pair<iterator, bool> emplace(const key_type& key, T&& t)
function emplace (line 19073) | std::pair<iterator, bool> emplace(KeyType && key, T && t)
function T (line 19086) | T& operator[](const key_type& key)
function T (line 19093) | T & operator[](KeyType && key)
function T (line 19098) | const T& operator[](const key_type& key) const
function T (line 19105) | const T & operator[](KeyType && key) const
function T (line 19110) | T& at(const key_type& key)
function T (line 19125) | T & at(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-forward)
function T (line 19138) | const T& at(const key_type& key) const
function T (line 19153) | const T & at(KeyType && key) const // NOLINT(cppcoreguidelines-missing-s...
function size_type (line 19166) | size_type erase(const key_type& key)
function size_type (line 19187) | size_type erase(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-...
function iterator (line 19206) | iterator erase(iterator pos)
function iterator (line 19211) | iterator erase(iterator first, iterator last)
function size_type (line 19264) | size_type count(const key_type& key) const
function size_type (line 19278) | size_type count(KeyType && key) const // NOLINT(cppcoreguidelines-missin...
function iterator (line 19290) | iterator find(const key_type& key)
function iterator (line 19304) | iterator find(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-fo...
function const_iterator (line 19316) | const_iterator find(const key_type& key) const
function insert (line 19328) | std::pair<iterator, bool> insert( value_type&& value )
function insert (line 19333) | std::pair<iterator, bool> insert( const value_type& value )
function insert (line 19351) | void insert(InputIt first, InputIt last)
function NLOHMANN_JSON_NAMESPACE_BEGIN (line 19378) | NLOHMANN_JSON_NAMESPACE_BEGIN
function set_parents (line 20005) | void set_parents()
function iterator (line 20042) | iterator set_parents(iterator it, typename iterator::difference_type cou...
function reference (line 20055) | reference set_parent(reference j, std::size_t old_capacity = static_cast...
function basic_json (line 20117) | basic_json(const value_t v)
function basic_json (line 20125) | basic_json(std::nullptr_t = nullptr) noexcept // NOLINT(bugprone-excepti...
function basic_json (line 20137) | basic_json(CompatibleType && val) noexcept(noexcept( // NOLINT(bugprone-...
function basic_json (line 20151) | basic_json(const BasicJsonType& val)
function basic_json (line 20204) | basic_json(initializer_list_t init,
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20262) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20273) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20284) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20295) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20306) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20314) | JSON_HEDLEY_WARN_UNUSED_RESULT
function basic_json (line 20322) | basic_json(size_type cnt, const basic_json& val):
function basic_json (line 20334) | basic_json(InputIT first, InputIT last)
function basic_json (line 20443) | basic_json(const JsonRef& ref) : basic_json(ref.moved_or_copied()) {}
function basic_json (line 20447) | basic_json(const basic_json& other)
function basic_json (line 20516) | basic_json(basic_json&& other) noexcept
function basic_json (line 20533) | basic_json& operator=(basic_json other) noexcept (
function value_t (line 20596) | constexpr value_t type() const noexcept
function is_primitive (line 20603) | constexpr bool is_primitive() const noexcept
function is_structured (line 20610) | constexpr bool is_structured() const noexcept
function is_null (line 20617) | constexpr bool is_null() const noexcept
function is_boolean (line 20624) | constexpr bool is_boolean() const noexcept
function is_number (line 20631) | constexpr bool is_number() const noexcept
function is_number_integer (line 20638) | constexpr bool is_number_integer() const noexcept
function is_number_unsigned (line 20645) | constexpr bool is_number_unsigned() const noexcept
function is_number_float (line 20652) | constexpr bool is_number_float() const noexcept
function is_object (line 20659) | constexpr bool is_object() const noexcept
function is_array (line 20666) | constexpr bool is_array() const noexcept
function is_string (line 20673) | constexpr bool is_string() const noexcept
function is_binary (line 20680) | constexpr bool is_binary() const noexcept
function is_discarded (line 20687) | constexpr bool is_discarded() const noexcept
function object_t (line 20718) | object_t* get_impl_ptr(object_t* /*unused*/) noexcept
function object_t (line 20724) | constexpr const object_t* get_impl_ptr(const object_t* /*unused*/) const...
function array_t (line 20730) | array_t* get_impl_ptr(array_t* /*unused*/) noexcept
function array_t (line 20736) | constexpr const array_t* get_impl_ptr(const array_t* /*unused*/) const n...
function string_t (line 20742) | string_t* get_impl_ptr(string_t* /*unused*/) noexcept
function string_t (line 20748) | constexpr const string_t* get_impl_ptr(const string_t* /*unused*/) const...
function boolean_t (line 20754) | boolean_t* get_impl_ptr(boolean_t* /*unused*/) noexcept
function boolean_t (line 20760) | constexpr const boolean_t* get_impl_ptr(const boolean_t* /*unused*/) con...
function number_integer_t (line 20766) | number_integer_t* get_impl_ptr(number_integer_t* /*unused*/) noexcept
function number_integer_t (line 20772) | constexpr const number_integer_t* get_impl_ptr(const number_integer_t* /...
function number_unsigned_t (line 20778) | number_unsigned_t* get_impl_ptr(number_unsigned_t* /*unused*/) noexcept
function number_unsigned_t (line 20784) | constexpr const number_unsigned_t* get_impl_ptr(const number_unsigned_t*...
function number_float_t (line 20790) | number_float_t* get_impl_ptr(number_float_t* /*unused*/) noexcept
function number_float_t (line 20796) | constexpr const number_float_t* get_impl_ptr(const number_float_t* /*unu...
function binary_t (line 20802) | binary_t* get_impl_ptr(binary_t* /*unused*/) noexcept
function binary_t (line 20808) | constexpr const binary_t* get_impl_ptr(const binary_t* /*unused*/) const...
function ReferenceType (line 20825) | static ReferenceType get_ref_impl(ThisType& obj)
function get_ptr (line 20858) | constexpr auto get_ptr() const noexcept -> decltype(std::declval<const b...
function ValueType (line 20950) | ValueType get_impl(detail::priority_tag<1> /*unused*/) const noexcept(no...
function BasicJsonType (line 20975) | BasicJsonType get_impl(detail::priority_tag<2> /*unused*/) const
function basic_json (line 20998) | basic_json get_impl(detail::priority_tag<3> /*unused*/) const
function get_impl (line 21011) | constexpr auto get_impl(detail::priority_tag<4> /*unused*/) const noexcept
function get (line 21087) | auto get() noexcept -> decltype(std::declval<basic_json_t&>().template g...
function ValueType (line 21100) | ValueType & get_to(ValueType& v) const noexcept(noexcept(
function ValueType (line 21113) | ValueType & get_to(ValueType& v) const
function Array (line 21124) | Array get_to(T (&v)[N]) const // NOLINT(cppcoreguidelines-avoid-c-arrays...
function ReferenceType (line 21136) | ReferenceType get_ref()
function ReferenceType (line 21147) | ReferenceType get_ref() const
function binary_t (line 21206) | binary_t& get_binary()
function binary_t (line 21218) | const binary_t& get_binary() const
function reference (line 21240) | reference at(size_type idx)
function const_reference (line 21263) | const_reference at(size_type idx) const
function reference (line 21286) | reference at(const typename object_t::key_type& key)
function reference (line 21306) | reference at(KeyType && key)
function const_reference (line 21324) | const_reference at(const typename object_t::key_type& key) const
function const_reference (line 21344) | const_reference at(KeyType && key) const
function reference (line 21362) | reference operator[](size_type idx)
function const_reference (line 21408) | const_reference operator[](size_type idx) const
function reference (line 21421) | reference operator[](typename object_t::key_type key)
function const_reference (line 21443) | const_reference operator[](const typename object_t::key_type& key) const
function reference (line 21459) | reference operator[](T* key)
function const_reference (line 21465) | const_reference operator[](T* key) const
function reference (line 21474) | reference operator[](KeyType && key)
function const_reference (line 21498) | const_reference operator[](KeyType && key) const
class ValueType (line 21524) | class ValueType
function ReturnType (line 21553) | ReturnType value(const typename object_t::key_type& key, ValueType && de...
function ValueType (line 21579) | ValueType value(KeyType && key, const ValueType& default_value) const
function ReturnType (line 21606) | ReturnType value(KeyType && key, ValueType && default_value) const
function ValueType (line 21629) | ValueType value(const json_pointer& ptr, const ValueType& default_value)...
function ReturnType (line 21654) | ReturnType value(const json_pointer& ptr, ValueType && default_value) const
function ValueType (line 21678) | ValueType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, cons...
function ReturnType (line 21689) | ReturnType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, Val...
function reference (line 21696) | reference front()
function const_reference (line 21703) | const_reference front() const
function reference (line 21710) | reference back()
function const_reference (line 21719) | const_reference back() const
function IteratorType (line 21731) | IteratorType erase(IteratorType pos)
function IteratorType (line 21801) | IteratorType erase(IteratorType first, IteratorType last)
function erase_internal (line 21869) | private:
function size_type (line 21885) | size_type erase_internal(KeyType && key)
function size_type (line 21917) | size_type erase(KeyType && key)
function erase (line 21924) | void erase(const size_type idx)
function iterator (line 21953) | iterator find(const typename object_t::key_type& key)
function const_iterator (line 21967) | const_iterator find(const typename object_t::key_type& key) const
function iterator (line 21983) | iterator find(KeyType && key)
function const_iterator (line 21999) | const_iterator find(KeyType && key) const
function size_type (line 22013) | size_type count(const typename object_t::key_type& key) const
function size_type (line 22023) | size_type count(KeyType && key) const
function contains (line 22031) | bool contains(const typename object_t::key_type& key) const
function contains (line 22040) | bool contains(KeyType && key) const
function contains (line 22047) | bool contains(const json_pointer& ptr) const
function contains (line 22054) | bool contains(const typename ::nlohmann::json_pointer<BasicJsonType>& pt...
function iterator (line 22070) | iterator begin() noexcept
function const_iterator (line 22079) | const_iterator begin() const noexcept
function const_iterator (line 22086) | const_iterator cbegin() const noexcept
function iterator (line 22095) | iterator end() noexcept
function const_iterator (line 22104) | const_iterator end() const noexcept
function const_iterator (line 22111) | const_iterator cend() const noexcept
function reverse_iterator (line 22120) | reverse_iterator rbegin() noexcept
function const_reverse_iterator (line 22127) | const_reverse_iterator rbegin() const noexcept
function reverse_iterator (line 22134) | reverse_iterator rend() noexcept
function const_reverse_iterator (line 22141) | const_reverse_iterator rend() const noexcept
function const_reverse_iterator (line 22148) | const_reverse_iterator crbegin() const noexcept
function const_reverse_iterator (line 22155) | const_reverse_iterator crend() const noexcept
function iterator_wrapper (line 22167) | static iteration_proxy<iterator> iterator_wrapper(reference ref) noexcept
function iterator_wrapper (line 22178) | static iteration_proxy<const_iterator> iterator_wrapper(const_reference ...
function items (line 22185) | iteration_proxy<iterator> items() noexcept
function items (line 22192) | iteration_proxy<const_iterator> items() const noexcept
function empty (line 22208) | bool empty() const noexcept
function size_type (line 22247) | size_type size() const noexcept
function size_type (line 22286) | size_type max_size() const noexcept
function clear (line 22329) | void clear() noexcept
function push_back (line 22390) | void push_back(basic_json&& val)
function reference (line 22415) | reference operator+=(basic_json&& val)
function push_back (line 22423) | void push_back(const basic_json& val)
function reference (line 22447) | reference operator+=(const basic_json& val)
function push_back (line 22455) | void push_back(const typename object_t::value_type& val)
function reference (line 22478) | reference operator+=(const typename object_t::value_type& val)
function push_back (line 22486) | void push_back(initializer_list_t init)
function reference (line 22502) | reference operator+=(initializer_list_t init)
function reference (line 22511) | reference emplace_back(Args&& ... args)
function emplace (line 22536) | std::pair<iterator, bool> emplace(Args&& ... args)
function iterator (line 22568) | iterator insert_iterator(const_iterator pos, Args&& ... args)
function iterator (line 22587) | iterator insert(const_iterator pos, const basic_json& val)
function iterator (line 22607) | iterator insert(const_iterator pos, basic_json&& val)
function iterator (line 22614) | iterator insert(const_iterator pos, size_type cnt, const basic_json& val)
function iterator (line 22634) | iterator insert(const_iterator pos, const_iterator first, const_iterator...
function iterator (line 22665) | iterator insert(const_iterator pos, initializer_list_t ilist)
function insert (line 22685) | void insert(const_iterator first, const_iterator last)
function update (line 22710) | void update(const_reference j, bool merge_objects = false)
function update (line 22717) | void update(const_iterator first, const_iterator last, bool merge_object...
function swap (line 22764) | void swap(reference other) noexcept (
function friend (line 22781) | friend void swap(reference left, reference right) noexcept (
function swap (line 22793) | void swap(array_t& other) // NOLINT(bugprone-exception-escape,cppcoregui...
function swap (line 22809) | void swap(object_t& other) // NOLINT(bugprone-exception-escape,cppcoregu...
function swap (line 22825) | void swap(string_t& other) // NOLINT(bugprone-exception-escape,cppcoregu...
function swap (line 22841) | void swap(binary_t& other) // NOLINT(bugprone-exception-escape,cppcoregu...
function swap (line 22857) | void swap(typename binary_t::container_type& other) // NOLINT(bugprone-e...
function else (line 22946) | else if(compares_unordered(lhs, rhs))\
function compares_unordered (line 22975) | bool compares_unordered(const_reference rhs, bool inverse = false) const...
function friend (line 23088) | friend bool operator==(const_reference lhs, const_reference rhs) noexcept
function friend (line 23120) | friend bool operator!=(const_reference lhs, const_reference rhs) noexcept
function friend (line 23177) | friend bool operator<=(const_reference lhs, const_reference rhs) noexcept
function friend (line 23206) | friend bool operator>(const_reference lhs, const_reference rhs) noexcept
function friend (line 23236) | friend bool operator>=(const_reference lhs, const_reference rhs) noexcept
function friend (line 23277) | friend std::ostream& operator<<(std::ostream& o, const basic_json& j)
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23316) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23330) | JSON_HEDLEY_WARN_UNUSED_RESULT
function basic_json (line 23344) | static basic_json parse(detail::span_input_adapter&& i,
function accept (line 23357) | static bool accept(InputType&& i,
function accept (line 23366) | static bool accept(IteratorType first, IteratorType last,
function accept (line 23374) | static bool accept(detail::span_input_adapter&& i,
function sax_parse (line 23384) | static bool sax_parse(InputType&& i, SAX* sax,
function sax_parse (line 23399) | static bool sax_parse(IteratorType first, IteratorType last, SAX* sax,
function sax_parse (line 23418) | static bool sax_parse(detail::span_input_adapter&& i, SAX* sax,
function JSON_HEDLEY_RETURNS_NON_NULL (line 23459) | JSON_HEDLEY_RETURNS_NON_NULL
type data (line 23491) | struct data
method data (line 23499) | data(const value_t v)
method data (line 23504) | data(size_type cnt, const basic_json& val)
method data (line 23510) | data() noexcept = default;
method data (line 23511) | data(data&&) noexcept = default;
method data (line 23512) | data(const data&) noexcept = delete;
method data (line 23513) | data& operator=(data&&) noexcept = delete;
method data (line 23514) | data& operator=(const data&) noexcept = delete;
function to_cbor (line 23548) | static void to_cbor(const basic_json& j, detail::output_adapter<std::uin...
function to_cbor (line 23555) | static void to_cbor(const basic_json& j, detail::output_adapter<char> o)
function to_msgpack (line 23562) | static std::vector<std::uint8_t> to_msgpack(const basic_json& j)
function to_msgpack (line 23571) | static void to_msgpack(const basic_json& j, detail::output_adapter<std::...
function to_msgpack (line 23578) | static void to_msgpack(const basic_json& j, detail::output_adapter<char> o)
function to_ubjson (line 23585) | static std::vector<std::uint8_t> to_ubjson(const basic_json& j,
function to_ubjson (line 23596) | static void to_ubjson(const basic_json& j, detail::output_adapter<std::u...
function to_ubjson (line 23604) | static void to_ubjson(const basic_json& j, detail::output_adapter<char> o,
function to_bjdata (line 23612) | static std::vector<std::uint8_t> to_bjdata(const basic_json& j,
function to_bjdata (line 23623) | static void to_bjdata(const basic_json& j, detail::output_adapter<std::u...
function to_bjdata (line 23631) | static void to_bjdata(const basic_json& j, detail::output_adapter<char> o,
function to_bson (line 23639) | static std::vector<std::uint8_t> to_bson(const basic_json& j)
function to_bson (line 23648) | static void to_bson(const basic_json& j, detail::output_adapter<std::uin...
function to_bson (line 23655) | static void to_bson(const basic_json& j, detail::output_adapter<char> o)
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23663) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23679) | JSON_HEDLEY_WARN_UNUSED_RESULT
function basic_json (line 23695) | static basic_json from_cbor(const T* ptr, std::size_t len,
function basic_json (line 23705) | static basic_json from_cbor(detail::span_input_adapter&& i,
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23721) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23736) | JSON_HEDLEY_WARN_UNUSED_RESULT
function basic_json (line 23751) | static basic_json from_msgpack(const T* ptr, std::size_t len,
function basic_json (line 23760) | static basic_json from_msgpack(detail::span_input_adapter&& i,
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23775) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23790) | JSON_HEDLEY_WARN_UNUSED_RESULT
function basic_json (line 23805) | static basic_json from_ubjson(const T* ptr, std::size_t len,
function basic_json (line 23814) | static basic_json from_ubjson(detail::span_input_adapter&& i,
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23829) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23844) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23859) | JSON_HEDLEY_WARN_UNUSED_RESULT
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 23874) | JSON_HEDLEY_WARN_UNUSED_RESULT
function basic_json (line 23889) | static basic_json from_bson(const T* ptr, std::size_t len,
function basic_json (line 23898) | static basic_json from_bson(detail::span_input_adapter&& i,
function reference (line 23920) | reference operator[](const json_pointer& ptr)
function reference (line 23927) | reference operator[](const ::nlohmann::json_pointer<BasicJsonType>& ptr)
function const_reference (line 23934) | const_reference operator[](const json_pointer& ptr) const
function const_reference (line 23941) | const_reference operator[](const ::nlohmann::json_pointer<BasicJsonType>...
function reference (line 23948) | reference at(const json_pointer& ptr)
function reference (line 23955) | reference at(const ::nlohmann::json_pointer<BasicJsonType>& ptr)
function const_reference (line 23962) | const_reference at(const json_pointer& ptr) const
function const_reference (line 23969) | const_reference at(const ::nlohmann::json_pointer<BasicJsonType>& ptr) c...
function basic_json (line 23976) | basic_json flatten() const
function basic_json (line 23985) | basic_json unflatten() const
function patch_inplace (line 24001) | void patch_inplace(const basic_json& json_patch)
function basic_json (line 24272) | basic_json patch(const basic_json& json_patch) const
function JSON_HEDLEY_WARN_UNUSED_RESULT (line 24281) | JSON_HEDLEY_WARN_UNUSED_RESULT
function merge_patch (line 24424) | void merge_patch(const basic_json& apply_patch)
function NLOHMANN_BASIC_JSON_TPL_DECLARATION (line 24455) | NLOHMANN_BASIC_JSON_TPL_DECLARATION
function NLOHMANN_JSON_NAMESPACE_END (line 24492) | NLOHMANN_JSON_NAMESPACE_END
FILE: lib/json/json_rwops_input.hpp
type nlohmann (line 14) | namespace nlohmann
type json_abi_v3_11_3 (line 19) | inline namespace json_abi_v3_11_3
type detail (line 22) | namespace detail
type rwops (line 28) | namespace rwops
type char_traits (line 32) | struct char_traits : std::char_traits<T>
type char_traits<unsigned char> (line 37) | struct char_traits<unsigned char> : std::char_traits<char>
method int_type (line 43) | static int_type to_int_type(char_type c) noexcept
method char_type (line 48) | static char_type to_char_type(int_type i) noexcept
method int_type (line 53) | static constexpr int_type eof() noexcept
class rwops_input_adapter (line 63) | class rwops_input_adapter
method rwops_input_adapter (line 68) | explicit rwops_input_adapter(SDL_RWops* rwops) noexcept
method rwops_input_adapter (line 72) | rwops_input_adapter(const rwops_input_adapter&) = delete;
method rwops_input_adapter (line 73) | rwops_input_adapter(rwops_input_adapter&&) noexcept = default;
method rwops_input_adapter (line 74) | rwops_input_adapter& operator=(const rwops_input_adapter&) = del...
method rwops_input_adapter (line 75) | rwops_input_adapter& operator=(rwops_input_adapter&&) = delete;
method get_character (line 78) | rwops::char_traits<uint8_t>::int_type get_character() noexcept
function rwops_input_adapter (line 101) | inline rwops_input_adapter input_adapter(SDL_RWops* rwops)
method rwops_input_adapter (line 68) | explicit rwops_input_adapter(SDL_RWops* rwops) noexcept
method rwops_input_adapter (line 72) | rwops_input_adapter(const rwops_input_adapter&) = delete;
method rwops_input_adapter (line 73) | rwops_input_adapter(rwops_input_adapter&&) noexcept = default;
method rwops_input_adapter (line 74) | rwops_input_adapter& operator=(const rwops_input_adapter&) = del...
method rwops_input_adapter (line 75) | rwops_input_adapter& operator=(rwops_input_adapter&&) = delete;
method get_character (line 78) | rwops::char_traits<uint8_t>::int_type get_character() noexcept
FILE: lib/md5/md5.cpp
type md5 (line 9) | namespace md5 {
function sig_to_string (line 489) | void sig_to_string(const void* signature_, char* str_, const int str_l...
function sig_from_string (line 533) | void sig_from_string(void* signature_, const char* str_) {
FILE: lib/md5/md5.h
function namespace (line 14) | namespace md5 {
FILE: lib/md5/md5_loc.h
function namespace (line 20) | namespace md5
FILE: lib/md5/md5tools.hpp
type md5 (line 5) | namespace md5
FILE: lib/pcg/pcg_extras.hpp
type pcg_extras (line 66) | namespace pcg_extras {
function itype (line 116) | inline itype unxorshift(itype x, bitcount_t bits, bitcount_t shift)
function itype (line 145) | inline itype rotl(itype value, bitcount_t rot)
function itype (line 157) | inline itype rotr(itype value, bitcount_t rot)
function rotr (line 177) | inline uint8_t rotr(uint8_t value, bitcount_t rot)
function rotr (line 183) | inline uint16_t rotr(uint16_t value, bitcount_t rot)
function rotr (line 189) | inline uint32_t rotr(uint32_t value, bitcount_t rot)
function rotr (line 196) | inline uint64_t rotr(uint64_t value, bitcount_t rot)
function SrcIter (line 234) | SrcIter uneven_copy_impl(
function SrcIter (line 263) | SrcIter uneven_copy_impl(
function SrcIter (line 292) | inline SrcIter uneven_copy(SrcIter src_first,
function generate_to_impl (line 309) | inline void generate_to_impl(SeedSeq&& generator, DestIter dest,
function generate_to_impl (line 316) | void generate_to_impl(SeedSeq&& generator, DestIter dest,
function generate_to (line 345) | inline void generate_to(SeedSeq&& generator, DestIter dest)
function UInt (line 360) | inline UInt generate_one(SeedSeq&& generator)
function bounded_rand (line 368) | auto bounded_rand(RngType& rng, typename RngType::result_type upper_bo...
function shuffle (line 382) | void shuffle(Iter from, Iter to, RandType&& rng)
class seed_seq_from (line 408) | class seed_seq_from {
method seed_seq_from (line 416) | seed_seq_from(Args&&... args) :
method generate (line 423) | void generate(Iter start, Iter finish)
method size (line 429) | constexpr size_t size() const
type static_arbitrary_seed (line 446) | struct static_arbitrary_seed {
method IntType (line 448) | static constexpr IntType fnv(IntType hash, const char* pos) {
type printable_typename (line 467) | struct printable_typename {}
FILE: lib/pcg/pcg_random.hpp
type pcg_detail (line 106) | namespace pcg_detail {
type default_multiplier (line 122) | struct default_multiplier {
type default_increment (line 127) | struct default_increment {
function PCG_DEFINE_CONSTANT (line 139) | PCG_DEFINE_CONSTANT(uint8_t, default, multiplier, 141U)
function itype (line 401) | itype base_generate0()
function result_type (line 417) | result_type operator()(result_type upper_bound)
function itype (line 429) | itype distance(itype newstate, itype mask = ~itype(0U)) const
function backstep (line 440) | void backstep(itype delta)
function discard (line 445) | void discard(itype delta)
function wrapped (line 450) | bool wrapped()
function engine (line 462) | engine(itype state = itype(0xcafef00dd15ea5e5ULL))
function engine (line 473) | engine(itype state, typename sm::stream_state stream_seed)
function engine (line 482) | engine(SeedSeq&& seedSeq, typename std::enable_if<
function engine (line 493) | engine(SeedSeq&& seedSeq, typename std::enable_if<
function seed (line 506) | void seed(Args&&... args)
function itype (line 537) | itype engine<xtype,itype,output_mixin,output_previous,stream_mixin,
function itype (line 568) | itype engine<xtype,itype,output_mixin,output_previous,stream_mixin,
function itype (line 592) | itype operator-(const engine<xtype,itype,
type xsh_rs_mixin (line 686) | struct xsh_rs_mixin {
method xtype (line 687) | static xtype output(itype internal)
type xsh_rr_mixin (line 719) | struct xsh_rr_mixin {
method xtype (line 720) | static xtype output(itype internal)
type rxs_mixin (line 754) | struct rxs_mixin {
method xtype (line 755) | static xtype output_rxs(itype internal)
type mcg_multiplier (line 792) | struct mcg_multiplier {
type mcg_unmultiplier (line 797) | struct mcg_unmultiplier {
type rxs_m_xs_mixin (line 815) | struct rxs_m_xs_mixin {
method xtype (line 816) | static xtype output(itype internal)
method itype (line 836) | static itype unoutput(itype internal)
function set (line 1136) | void set(result_type wanted)
function backstep (line 1145) | void backstep(state_type distance)
function extended (line 1150) | extended(const result_type* data)
function extended (line 1156) | extended(const result_type* data, state_type seed)
function extended (line 1166) | extended(const result_type* data, state_type seed,
function extended (line 1173) | extended()
function extended (line 1179) | extended(state_type seed)
function extended (line 1189) | extended(state_type seed, typename bc::stream_state stream_seed)
function baseclass (line 1199) | public:
function seed (line 1211) | void seed(Args&&... args)
type pcg_engines (line 1359) | namespace pcg_engines {
FILE: lib/pcg/pcg_uint128.hpp
function bitcount_t (line 100) | inline bitcount_t flog2(uint32_t v)
function bitcount_t (line 105) | inline bitcount_t trailingzeros(uint32_t v)
function bitcount_t (line 110) | inline bitcount_t flog2(uint64_t v)
function bitcount_t (line 121) | inline bitcount_t trailingzeros(uint64_t v)
function bitcount_t (line 135) | inline bitcount_t flog2(uint32_t v)
function bitcount_t (line 154) | inline bitcount_t trailingzeros(uint32_t v)
function bitcount_t (line 164) | inline bitcount_t flog2(uint64_t v)
function bitcount_t (line 172) | inline bitcount_t trailingzeros(uint64_t v)
function bitcount_t (line 183) | inline bitcount_t clog2(UInt v)
function UInt (line 189) | inline UInt addwithcarry(UInt x, UInt y, bool carryin, bool* carryout)
function UInt (line 198) | inline UInt subwithcarry(UInt x, UInt y, bool carryin, bool* carryout)
function uint_x4 (line 234) | uint_x4() = default;
function w (line 238) | w{v0, v1, v2, v3}
function d (line 248) | d{v01,v23}
function d (line 262) | d{UIntX2(v01),0UL}
function uint_x4 (line 369) | uint_x4& operator*=(const uint_x4& rhs)
function uint_x4 (line 375) | uint_x4& operator/=(const uint_x4& rhs)
function uint_x4 (line 381) | uint_x4& operator%=(const uint_x4& rhs)
function uint_x4 (line 387) | uint_x4& operator+=(const uint_x4& rhs)
function uint_x4 (line 393) | uint_x4& operator-=(const uint_x4& rhs)
function uint_x4 (line 399) | uint_x4& operator&=(const uint_x4& rhs)
function uint_x4 (line 405) | uint_x4& operator|=(const uint_x4& rhs)
function uint_x4 (line 411) | uint_x4& operator^=(const uint_x4& rhs)
function uint_x4 (line 417) | uint_x4& operator>>=(bitcount_t shift)
function uint_x4 (line 423) | uint_x4& operator<<=(bitcount_t shift)
function divmod (line 463) | std::pair< uint_x4<UInt,UIntX2>, uint_x4<UInt,UIntX2> >
FILE: lib/pge_tonearest.h
function swap_halfes (line 21) | inline void swap_halfes(uint64_t &x)
function namespace (line 30) | namespace PgeFloatProp
function getMantissa (line 49) | union PgeFPBits
function getUnbiasedExponent (line 78) | uint16_t getUnbiasedExponent() const
function getSign (line 95) | bool getSign() const
function explicit (line 112) | explicit PgeFPBits(uint64_t x) : bits(x) {}
function explicit (line 116) | explicit operator double()
function uintval (line 121) | uint64_t uintval() const
function PgeFPBits (line 153) | static PgeFPBits zero()
function PgeFPBits (line 158) | static PgeFPBits negZero()
function PgeFPBits (line 163) | static PgeFPBits inf()
function PgeFPBits (line 170) | static PgeFPBits negInf()
function buildNaN (line 177) | static double buildNaN(uint64_t v)
function SDL_FORCE_INLINE (line 186) | SDL_FORCE_INLINE double pge_toNearest(double x)
FILE: lib/pge_video_rec/pge_record_gif.cpp
type PGE_VideoRecording_GIF (line 28) | struct PGE_VideoRecording_GIF : public PGE_VideoRecording
method PGE_VideoRecording_GIF (line 30) | PGE_VideoRecording_GIF() : PGE_VideoRecording() {}
function PGE_new_recording_GIF (line 97) | std::unique_ptr<PGE_VideoRecording> PGE_new_recording_GIF(const PGE_Vide...
FILE: lib/pge_video_rec/pge_record_vp8.cpp
function av_log_callback_pLog (line 82) | static void av_log_callback_pLog(void* avcl, int level, const char* fmt,...
type OutputStream (line 168) | struct OutputStream
type SwsContext (line 182) | struct SwsContext
type SwrContext (line 183) | struct SwrContext
type PGE_VideoRecording_VP8 (line 186) | struct PGE_VideoRecording_VP8 : public PGE_VideoRecording
function write_frame (line 256) | static int write_frame(AVFormatContext* fmt_ctx, AVCodecContext* c,
function init_stream (line 305) | static bool init_stream(OutputStream* ost, AVFormatContext* oc,
function AVFrame (line 356) | static AVFrame* alloc_audio_frame(AVCodecContext* enc, int nb_samples)
function open_audio (line 388) | static bool open_audio(const PGE_VideoRecording_VP8* THIS,
function AVFrame (line 494) | static AVFrame* get_audio_frame(PGE_VideoRecording_VP8* THIS, OutputStre...
function write_audio_frame (line 599) | static int write_audio_frame(PGE_VideoRecording_VP8* THIS, AVFormatConte...
function AVFrame (line 621) | static AVFrame* alloc_frame(enum AVPixelFormat pix_fmt, int width, int h...
function open_video (line 647) | static bool open_video(PGE_VideoRecording_VP8* THIS, const AVCodec* codec,
function fill_rgb_image (line 733) | static void fill_rgb_image(AVFrame* pict, uint8_t* src,
function fill_rgb_image_downscale (line 753) | static void fill_rgb_image_downscale(AVFrame* pict, uint8_t* src,
function AVFrame (line 773) | static AVFrame* get_video_frame(PGE_VideoRecording_VP8* THIS, OutputStre...
function write_video_frame (line 855) | static int write_video_frame(PGE_VideoRecording_VP8* THIS, AVFormatConte...
function close_stream (line 865) | static void close_stream(OutputStream* ost)
function PGE_new_recording_VP8 (line 1023) | std::unique_ptr<PGE_VideoRecording> PGE_new_recording_VP8(const PGE_Vide...
FILE: lib/pge_video_rec/pge_video_rec.h
type SDL_mutex (line 28) | struct SDL_mutex
type SDL_Thread (line 29) | struct SDL_Thread
type PGE_VideoFrame (line 31) | struct PGE_VideoFrame
type PGE_AudioChunk (line 45) | struct PGE_AudioChunk
type PGE_VideoSpec (line 57) | struct PGE_VideoSpec
function class (line 94) | class PGE_VideoSink
function PGE_VideoSink (line 122) | struct PGE_VideoRecording : public PGE_VideoSink
FILE: lib/pge_video_rec/pge_video_sink.cpp
function PGE_VideoFrame (line 73) | PGE_VideoFrame PGE_VideoSink::dequeue_frame()
function PGE_AudioChunk (line 97) | PGE_AudioChunk PGE_VideoSink::dequeue_audio()
FILE: lib/sdl_proxy/16m/std_16m.cpp
function s_updateTimer (line 30) | void s_updateTimer()
function SDL_GetTicks (line 42) | uint32_t SDL_GetTicks()
function SDL_GetMicroTicks (line 49) | uint64_t SDL_GetMicroTicks()
function SDL_Delay (line 56) | void SDL_Delay(int ms)
function SDL_GetTicks (line 68) | uint32_t SDL_GetTicks()
function SDL_GetMicroTicks (line 73) | uint64_t SDL_GetMicroTicks()
function SDL_Delay (line 78) | void SDL_Delay(int ms)
FILE: lib/sdl_proxy/3ds/3ds-audio-lib.cpp
function myAudioCallback (line 40) | void myAudioCallback(void* const /*nul_*/)
function SoundId (line 48) | inline SoundId getSoundId(volatile SimpleChannel* channel)
function SimpleChannel (line 53) | inline volatile SimpleChannel* validateSoundId(SoundId id)
function closeChannel (line 69) | void closeChannel(volatile SimpleChannel* channel)
function fillBuffer (line 98) | bool fillBuffer(volatile SimpleChannel* channel, volatile ndspWaveBuf* w...
function audioThread (line 278) | void audioThread(void* /*nul_*/)
function loadWaveFileData (line 314) | int loadWaveFileData(FILE* f, uint16_t* nChannels, uint32_t* sampleRate,...
function SoundId (line 356) | SoundId playSoundWAV(const char* path, int loops)
function SoundId (line 409) | SoundId playSoundMem(const WaveObject* wave, int loops)
function loadOGG_Thread (line 444) | void loadOGG_Thread(void* passed_val)
function SoundId (line 498) | SoundId playSoundOGG(const char* path, int loops)
function SoundId (line 548) | SoundId playSoundGME(const char* path, int loops)
function SoundId (line 592) | SoundId playSoundAuto(const char* path, int loops)
function audioInit (line 608) | bool audioInit()
function audioExit (line 680) | void audioExit()
function audioPause (line 703) | void audioPause()
function audioResume (line 711) | void audioResume()
function audioPauseSingle (line 719) | bool audioPauseSingle(SoundId soundId)
function audioResumeSingle (line 729) | bool audioResumeSingle(SoundId soundId)
function audioSoundPlaying (line 739) | bool audioSoundPlaying(SoundId soundId)
function killSound (line 744) | void killSound(SoundId soundId)
function WaveObject (line 751) | WaveObject* audioLoadWave(const char* path)
function audioFreeWave (line 816) | void audioFreeWave(WaveObject* wave)
function audioSetChannelDoneCallback (line 822) | void audioSetChannelDoneCallback(void (*cb)(int))
FILE: lib/sdl_proxy/3ds/3ds-audio-lib.h
type SoundId (line 33) | typedef uintptr_t SoundId;
type CHANNEL_FORMAT (line 35) | typedef enum _CHANNEL_FORMAT
type SimpleChannel (line 45) | typedef struct _SimpleChannel
type WaveObject (line 59) | typedef struct _WaveObject
FILE: lib/sdl_proxy/3ds/mixer_3ds.cpp
function MixPlatform_NoPreload (line 47) | static bool MixPlatform_NoPreload(const char* path)
function MixPlatform_PlayStream (line 58) | int MixPlatform_PlayStream(int channel, const char* path, int loops)
function Mix_Init (line 74) | int Mix_Init(int flags)
function Mix_Quit (line 80) | void Mix_Quit()
function Mix_OpenAudio (line 95) | int Mix_OpenAudio(int frequency, Uint16 format, int channels, int chunks...
function Mix_QuerySpecEx (line 105) | int Mix_QuerySpecEx(SDL_AudioSpec* out_spec)
function Mix_CloseAudio (line 115) | void Mix_CloseAudio()
function Mix_VolumeMusic (line 126) | int Mix_VolumeMusic(int volume)
function Mix_AllocateChannels (line 132) | int Mix_AllocateChannels(int numchans)
function Mix_Chunk (line 138) | Mix_Chunk* Mix_LoadWAV(const char* path)
function SoundId (line 178) | inline SoundId playSoundMaybeStream(Mix_Chunk* chunk, int loops)
function Mix_PlayChannel (line 190) | int Mix_PlayChannel(int channel, Mix_Chunk* chunk, int loops)
function Mix_PlayChannelVol (line 203) | int Mix_PlayChannelVol(int channel, Mix_Chunk* chunk, int loops, int vol...
function Mix_SetPanning (line 209) | int Mix_SetPanning(int channel, uint8_t left, uint8_t right)
function Mix_ReserveChannels (line 217) | int Mix_ReserveChannels(int channels)
function Mix_PauseAudio (line 229) | void Mix_PauseAudio(int pause)
function Mix_Music (line 237) | Mix_Music* Mix_LoadMUS(const char* path)
function Mix_VolumeMusicStream (line 268) | int Mix_VolumeMusicStream(Mix_Music* music, int volume)
function Mix_HaltMusicStream (line 275) | int Mix_HaltMusicStream(Mix_Music* music)
function Mix_FadeOutMusicStream (line 280) | int Mix_FadeOutMusicStream(Mix_Music* music, int ms)
function Mix_HaltChannel (line 286) | int Mix_HaltChannel(int channel)
function Mix_PlayingMusicStream (line 294) | int Mix_PlayingMusicStream(Mix_Music* music)
function Mix_PausedMusicStream (line 299) | int Mix_PausedMusicStream(Mix_Music* music)
function Mix_PauseMusicStream (line 304) | int Mix_PauseMusicStream(Mix_Music* music)
function Mix_ResumeMusicStream (line 309) | int Mix_ResumeMusicStream(Mix_Music* music)
function Mix_PlayMusic (line 314) | int Mix_PlayMusic(Mix_Music* music, int loops)
function Mix_PlayMusicStream (line 324) | int Mix_PlayMusicStream(Mix_Music* music, int loops)
function Mix_SetFreeOnStop (line 329) | int Mix_SetFreeOnStop(Mix_Music* music, int free_on_stop)
function Mix_FadeInMusic (line 339) | int Mix_FadeInMusic(Mix_Music* music, int loops, int fadeInMs)
function Mix_GetMusicTracks (line 351) | int Mix_GetMusicTracks(Mix_Music* music)
function Mix_SetMusicTrackMute (line 357) | int Mix_SetMusicTrackMute(Mix_Music* music, int track, int mute)
function Mix_FreeMusic (line 365) | void Mix_FreeMusic(Mix_Music* music)
function Mix_FreeChunk (line 385) | void Mix_FreeChunk(Mix_Chunk* chunk)
function Mix_GME_SetSpcEchoDisabled (line 399) | void Mix_GME_SetSpcEchoDisabled(Mix_Music* music, int disable)
function Mix_RegisterEffect (line 405) | void Mix_RegisterEffect(int chan, Mix_EffectFunc_t f, Mix_EffectDone_t d...
function Mix_UnregisterEffect (line 413) | void Mix_UnregisterEffect(int chan, Mix_EffectFunc_t f)
function Mix_ChannelFinished (line 419) | void Mix_ChannelFinished(void (*cb)(int))
function Mix_ADLMIDI_setEmulator (line 424) | void Mix_ADLMIDI_setEmulator(int emu)
function Mix_ADLMIDI_setChipsCount (line 429) | void Mix_ADLMIDI_setChipsCount(int chips)
function Mix_OPNMIDI_setEmulator (line 434) | void Mix_OPNMIDI_setEmulator(int emu)
function Mix_OPNMIDI_setChipsCount (line 439) | void Mix_OPNMIDI_setChipsCount(int chips)
FILE: lib/sdl_proxy/3ds/std_3ds.cpp
function SDL_GetMicroTicks (line 34) | uint64_t SDL_GetMicroTicks()
FILE: lib/sdl_proxy/_trash/mixer_mixerx.cpp
function MixPlatform_Init (line 68) | bool MixPlatform_Init(AudioSetup_t& obtained)
function MixPlatform_Quit (line 147) | void MixPlatform_Quit()
function MixPlatform_PlayStream (line 153) | int MixPlatform_PlayStream(int channel, const char *path, int loops)
FILE: lib/sdl_proxy/_trash/sdl_stdinc.h
function SDL_SwapLE32 (line 51) | inline uint32_t SDL_SwapLE32(uint32_t x)
function SDL_SwapBE32 (line 56) | inline uint32_t SDL_SwapBE32(uint32_t x)
function SDL_SwapLE32 (line 61) | inline uint32_t SDL_SwapLE32(uint32_t x)
function SDL_SwapBE32 (line 65) | inline uint32_t SDL_SwapBE32(uint32_t x)
function value_t (line 74) | value_t SDL_min(value_t x, value_t y)
function value_t (line 80) | value_t SDL_max(value_t x, value_t y)
FILE: lib/sdl_proxy/base/std_base.cpp
function SDL_GetMicroTicks (line 28) | uint64_t SDL_GetMicroTicks()
FILE: lib/sdl_proxy/mixer.h
type Mix_Music (line 33) | struct Mix_Music
type Mix_Chunk (line 34) | struct Mix_Chunk
type SDL_RWops (line 35) | struct SDL_RWops
type MIX_InitFlags (line 56) | typedef enum
type Mix_ADLMIDI_Emulator (line 67) | typedef enum {
type Mix_OPNMIDI_Emulator (line 77) | typedef enum {
type SDL_RWops (line 111) | struct SDL_RWops
type SDL_RWops (line 112) | struct SDL_RWops
type SDL_RWops (line 114) | struct SDL_RWops
FILE: lib/sdl_proxy/null/mixer_null.cpp
function Mix_Init (line 36) | int Mix_Init(int flags)
function Mix_Quit (line 42) | void Mix_Quit()
function Mix_OpenAudio (line 45) | int Mix_OpenAudio(int frequency, Uint16 format, int channels, int chunks...
function Mix_QuerySpecEx (line 55) | int Mix_QuerySpecEx(SDL_AudioSpec* out_spec)
function Mix_CloseAudio (line 65) | void Mix_CloseAudio()
function Mix_VolumeMusic (line 68) | int Mix_VolumeMusic(int volume)
function Mix_AllocateChannels (line 74) | int Mix_AllocateChannels(int numchans)
function Mix_Chunk (line 80) | Mix_Chunk* Mix_LoadWAV(const char* path)
function Mix_MusicDuration (line 86) | double Mix_MusicDuration(Mix_Music* music)
function Mix_PlayChannel (line 97) | int Mix_PlayChannel(int channel, Mix_Chunk* chunk, int loops)
function Mix_PlayChannelVol (line 106) | int Mix_PlayChannelVol(int channel, Mix_Chunk* chunk, int loops, int vol...
function Mix_PlayChannelTimedVolume (line 115) | int Mix_PlayChannelTimedVolume(int channel, Mix_Chunk* chunk, int loops,...
function Mix_SetPanning (line 126) | int Mix_SetPanning(int channel, uint8_t left, uint8_t right)
function Mix_ReserveChannels (line 134) | int Mix_ReserveChannels(int channels)
function Mix_PauseAudio (line 140) | void Mix_PauseAudio(int pause)
function Mix_Music (line 145) | Mix_Music* Mix_LoadMUS(const char* path)
function Mix_Music (line 151) | Mix_Music* Mix_LoadMUS_RW(struct SDL_RWops* rwops, int free_me)
function Mix_Chunk (line 159) | Mix_Chunk* Mix_LoadWAV_RW(struct SDL_RWops* rwops, int free_me)
function Mix_Music (line 167) | Mix_Music* Mix_LoadMUS_RW_ARG(struct SDL_RWops* rwops, int free_me, cons...
function Mix_VolumeMusicStream (line 175) | int Mix_VolumeMusicStream(Mix_Music* music, int volume)
function Mix_HaltMusicStream (line 182) | int Mix_HaltMusicStream(Mix_Music* music)
function Mix_FadeOutMusicStream (line 187) | int Mix_FadeOutMusicStream(Mix_Music* music, int ms)
function Mix_HaltChannel (line 193) | int Mix_HaltChannel(int channel)
function Mix_PlayingMusicStream (line 199) | int Mix_PlayingMusicStream(Mix_Music* music)
function Mix_PausedMusicStream (line 205) | int Mix_PausedMusicStream(Mix_Music* music)
function Mix_RewindMusicStream (line 211) | int Mix_RewindMusicStream(Mix_Music* music)
function Mix_SetMusicEffectPanning (line 217) | int Mix_SetMusicEffectPanning(Mix_Music* music, uint8_t left, uint8_t ri...
function Mix_PauseMusicStream (line 225) | int Mix_PauseMusicStream(Mix_Music* music)
function Mix_ResumeMusicStream (line 231) | int Mix_ResumeMusicStream(Mix_Music* music)
function Mix_PlayMusic (line 237) | int Mix_PlayMusic(Mix_Music* music, int loops)
function Mix_PlayMusicStream (line 244) | int Mix_PlayMusicStream(Mix_Music* music, int loops)
function Mix_SetFreeOnStop (line 251) | int Mix_SetFreeOnStop(Mix_Music* music, int free_on_stop)
function Mix_FadeInMusic (line 258) | int Mix_FadeInMusic(Mix_Music* music, int loops, int fadeInMs)
function Mix_GetMusicTracks (line 272) | int Mix_GetMusicTracks(Mix_Music* music)
function Mix_SetMusicTrackMute (line 278) | int Mix_SetMusicTrackMute(Mix_Music* music, int track, int mute)
function Mix_FreeMusic (line 286) | void Mix_FreeMusic(Mix_Music* music)
function Mix_FreeChunk (line 291) | void Mix_FreeChunk(Mix_Chunk* chunk)
function Mix_GME_SetSpcEchoDisabled (line 296) | void Mix_GME_SetSpcEchoDisabled(Mix_Music* music, int disable)
function Mix_RegisterEffect (line 303) | void Mix_RegisterEffect(int chan, Mix_EffectFunc_t f, Mix_EffectDone_t d...
function Mix_UnregisterEffect (line 311) | void Mix_UnregisterEffect(int chan, Mix_EffectFunc_t f)
function Mix_ChannelFinished (line 318) | void Mix_ChannelFinished(void (*cb)(int))
function Mix_ADLMIDI_setEmulator (line 323) | void Mix_ADLMIDI_setEmulator(int emu)
function Mix_ADLMIDI_setChipsCount (line 328) | void Mix_ADLMIDI_setChipsCount(int chips)
function Mix_OPNMIDI_setEmulator (line 333) | void Mix_OPNMIDI_setEmulator(int emu)
function Mix_OPNMIDI_setChipsCount (line 338) | void Mix_OPNMIDI_setChipsCount(int chips)
FILE: lib/sdl_proxy/null/sdl_null.h
type Sint64 (line 34) | typedef int64_t Sint64;
type Uint64 (line 35) | typedef uint64_t Uint64;
type Sint32 (line 36) | typedef int32_t Sint32;
type Uint32 (line 37) | typedef uint32_t Uint32;
type Sint16 (line 38) | typedef int16_t Sint16;
type Uint16 (line 39) | typedef uint16_t Uint16;
type Sint8 (line 40) | typedef int8_t Sint8;
type Uint8 (line 41) | typedef uint8_t Uint8;
function SDL_strlcpy (line 59) | inline size_t SDL_strlcpy(char* dst, const char* src, size_t maxlen)
function SDL_pow (line 71) | inline double SDL_pow(double x, double y)
FILE: lib/sdl_proxy/null/std_null.cpp
function SDL_GetTicks (line 25) | uint32_t SDL_GetTicks()
function SDL_GetMicroTicks (line 30) | uint64_t SDL_GetMicroTicks()
function SDL_Delay (line 35) | void SDL_Delay(int ms)
FILE: lib/sdl_proxy/sdl_atomic.h
function SDL_AtomicSet (line 28) | inline void SDL_AtomicSet(SDL_atomic_t* loc, int value)
function SDL_AtomicGet (line 33) | inline int SDL_AtomicGet(const SDL_atomic_t* loc)
FILE: lib/sdl_proxy/sdl_audio.h
type SDL_AudioSpec (line 88) | typedef struct SDL_AudioSpec
FILE: lib/sdl_proxy/sdl_stdinc.h
function SDL_SwapLE32 (line 66) | inline uint32_t SDL_SwapLE32(uint32_t x)
function SDL_SwapBE32 (line 71) | inline uint32_t SDL_SwapBE32(uint32_t x)
function SDL_SwapLE32 (line 76) | inline uint32_t SDL_SwapLE32(uint32_t x)
function SDL_SwapBE32 (line 80) | inline uint32_t SDL_SwapBE32(uint32_t x)
function SDL_SetError (line 90) | inline void SDL_SetError(const char *fmt, ...) { (void)fmt; /* Do Nothin...
function value_t (line 94) | value_t SDL_min(value_t x, value_t y)
function value_t (line 100) | value_t SDL_max(value_t x, value_t y)
function SDL_fmod (line 105) | inline double SDL_fmod(double x, double y)
function SDL_abs (line 110) | inline int SDL_abs(int i)
FILE: lib/sdl_proxy/sdl_timer.h
function SDL_GetTicks64 (line 32) | inline uint64_t SDL_GetTicks64()
function SDL_GetTicks64 (line 45) | inline uint64_t SDL_GetTicks64()
FILE: lib/sdl_proxy/sdl_types.h
type Sint64 (line 32) | typedef int64_t Sint64;
type Uint64 (line 33) | typedef uint64_t Uint64;
type Sint32 (line 34) | typedef int32_t Sint32;
type Uint32 (line 35) | typedef uint32_t Uint32;
type Sint16 (line 36) | typedef int16_t Sint16;
type Uint16 (line 37) | typedef uint16_t Uint16;
type Sint8 (line 38) | typedef int8_t Sint8;
type Uint8 (line 39) | typedef uint8_t Uint8;
FILE: lib/sdl_proxy/wii/std_wii.cpp
function SDL_GetMicroTicks (line 37) | uint64_t SDL_GetMicroTicks()
FILE: lib/sdl_proxy_rwops/include/SDL2/SDL_rwops.h
type SDL_RWops (line 41) | typedef struct SDL_RWops
FILE: lib/sdl_proxy_rwops/include/SDL2/_priv_rwops_funcs.h
function RWOPS_PREFIX (line 15) | RWOPS_PREFIX int64_t SDL_RWsize(SDL_RWops* stream)
function RWOPS_PREFIX (line 20) | RWOPS_PREFIX int64_t SDL_RWseek(SDL_RWops* stream, int64_t offset, int w...
function RWOPS_PREFIX (line 25) | RWOPS_PREFIX size_t SDL_RWread(SDL_RWops* stream, void* ptr, size_t size...
function RWOPS_PREFIX (line 30) | RWOPS_PREFIX size_t SDL_RWwrite(SDL_RWops* stream, const void* ptr, size...
function RWOPS_PREFIX (line 35) | RWOPS_PREFIX int SDL_RWclose(SDL_RWops* stream)
function SDL_RWtell (line 45) | RWOPS_PREFIX long SDL_RWtell(SDL_RWops* stream)
FILE: lib/sdl_proxy_rwops/sdl_proxy_rwops.c
function SDL_RWops (line 24) | SDL_RWops* SDL_AllocRW()
function SDL_FreeRW (line 29) | void SDL_FreeRW(SDL_RWops * area)
FILE: lib/sdl_proxy_rwops/sdl_proxy_rwops_file.c
function FILE (line 31) | static inline FILE *utf8_fopen(const char *filePath, const char *modes)
function s_file_size (line 48) | static int64_t s_file_size(SDL_RWops* stream)
function s_file_seek (line 63) | static int64_t s_file_seek(SDL_RWops* stream, int64_t offset, int whence)
function s_file_read (line 75) | static size_t s_file_read(SDL_RWops* stream, void* ptr, size_t size, siz...
function s_file_write (line 80) | static size_t s_file_write(SDL_RWops* stream, const void* ptr, size_t si...
function s_file_close (line 85) | static int s_file_close(SDL_RWops* stream)
function SDL_RWops (line 90) | SDL_RWops* SDL_RWFromFile(const char* pathname, const char* mode)
FILE: lib/sorting/pdqsort.h
function namespace (line 43) | namespace pdqsort_detail {
function pdqsort (line 498) | void pdqsort(Iter begin, Iter end, Compare comp) {
function pdqsort (line 513) | void pdqsort(Iter begin, Iter end) {
function pdqsort_branchless (line 519) | void pdqsort_branchless(Iter begin, Iter end, Compare comp) {
function pdqsort_branchless (line 526) | void pdqsort_branchless(Iter begin, Iter end) {
FILE: lib/sorting/tinysort.h
function tinysort (line 30) | void tinysort(it begin, it end, compare_func comp)
function tinysort (line 50) | void tinysort(it begin, it end)
FILE: lib/tclap/Arg.h
function namespace (line 46) | namespace TCLAP {
function a (line 516) | inline bool Arg::operator==(const Arg &a) const {
function argMatches (line 535) | inline bool Arg::argMatches(const std::string &argFlag) const {
function trimFlag (line 560) | inline void Arg::trimFlag(std::string &flag, std::string &value) const {
function _hasBlanks (line 577) | inline bool Arg::_hasBlanks(const std::string &s) const {
function addToList (line 587) | inline void Arg::addToList(std::list<Arg *> &argList) const {
function allowMore (line 591) | inline bool Arg::allowMore() { return false; }
function acceptsMultipleValues (line 593) | inline bool Arg::acceptsMultipleValues() { return _acceptsMultipleValues; }
function reset (line 595) | inline void Arg::reset() { _alreadySet = false; }
FILE: lib/tclap/ArgContainer.h
function namespace (line 26) | namespace TCLAP {
FILE: lib/tclap/ArgException.h
function namespace (line 30) | namespace TCLAP {
FILE: lib/tclap/ArgGroup.h
function namespace (line 33) | namespace TCLAP {
FILE: lib/tclap/ArgTraits.h
type StringLike (line 49) | struct StringLike {
FILE: lib/tclap/CmdLine.h
function namespace (line 54) | namespace TCLAP {
function _constructor (line 341) | inline void CmdLine::_constructor() {
function xorAdd (line 381) | inline void CmdLine::xorAdd(const std::vector<Arg *> &args) {
function xorAdd (line 391) | inline void CmdLine::xorAdd(Arg &a, Arg &b) {
function ArgContainer (line 398) | inline ArgContainer &CmdLine::add(ArgGroup &args) {
function ArgContainer (line 405) | inline ArgContainer &CmdLine::add(Arg &a) { return add(&a); }
function addToArgList (line 409) | inline void CmdLine::addToArgList(Arg *a) {
function ArgContainer (line 420) | inline ArgContainer &CmdLine::add(Arg *a) {
function parse (line 427) | inline void CmdLine::parse(int argc, const char *const *argv) {
function parse (line 436) | inline void CmdLine::parse(std::vector<std::string> &args) {
function _emptyCombined (line 542) | inline bool CmdLine::_emptyCombined(const std::string &s) {
function missingArgsException (line 551) | inline void CmdLine::missingArgsException(
function setOutput (line 584) | inline void CmdLine::setOutput(CmdLineOutput *co) { _output = co; }
function setExceptionHandling (line 586) | inline void CmdLine::setExceptionHandling(const bool state) {
function reset (line 590) | inline void CmdLine::reset() {
function ignoreUnmatched (line 598) | inline void CmdLine::ignoreUnmatched(const bool ignore) {
FILE: lib/tclap/CmdLineInterface.h
function namespace (line 36) | namespace TCLAP {
FILE: lib/tclap/CmdLineOutput.h
function namespace (line 37) | namespace TCLAP {
FILE: lib/tclap/Constraint.h
function namespace (line 35) | namespace TCLAP {
FILE: lib/tclap/DeferDelete.h
function namespace (line 26) | namespace TCLAP {
FILE: lib/tclap/DocBookOutput.h
function namespace (line 37) | namespace TCLAP {
FILE: lib/tclap/HelpVisitor.h
function namespace (line 30) | namespace TCLAP {
FILE: lib/tclap/IgnoreRestVisitor.h
function namespace (line 30) | namespace TCLAP {
FILE: lib/tclap/MultiArg.h
function namespace (line 34) | namespace TCLAP {
FILE: lib/tclap/MultiSwitchArg.h
function namespace (line 34) | namespace TCLAP {
function processArg (line 131) | inline bool MultiSwitchArg::processArg(int *i, std::vector<std::string> ...
function reset (line 169) | inline void MultiSwitchArg::reset() {
FILE: lib/tclap/OptionalUnlabeledTracker.h
function namespace (line 28) | namespace TCLAP {
FILE: lib/tclap/StandardTraits.h
function namespace (line 41) | namespace TCLAP {
FILE: lib/tclap/StdOutput.h
function namespace (line 40) | namespace TCLAP {
FILE: lib/tclap/SwitchArg.h
function namespace (line 33) | namespace TCLAP {
function lastCombined (line 148) | inline bool SwitchArg::lastCombined(std::string &combinedSwitches) {
function combinedSwitchesMatch (line 155) | inline bool SwitchArg::combinedSwitchesMatch(std::string &combinedSwitch...
function commonProcessing (line 189) | inline void SwitchArg::commonProcessing() {
function processArg (line 203) | inline bool SwitchArg::processArg(int *i, std::vector<std::string> &args) {
function reset (line 228) | inline void SwitchArg::reset() {
FILE: lib/tclap/UnlabeledMultiArg.h
function namespace (line 34) | namespace TCLAP {
FILE: lib/tclap/UnlabeledValueArg.h
function namespace (line 35) | namespace TCLAP {
FILE: lib/tclap/ValuesConstraint.h
function virtual (line 51) | virtual ~ValuesConstraint() {}
FILE: lib/tclap/VersionVisitor.h
function namespace (line 30) | namespace TCLAP {
FILE: lib/tclap/Visitor.h
function namespace (line 27) | namespace TCLAP {
FILE: lib/tclap/sstream.h
function namespace (line 36) | namespace TCLAP {
function namespace (line 42) | namespace TCLAP {
FILE: lib/util.cpp
function is_base64 (line 39) | static inline bool is_base64(unsigned char c)
function CSV2IntArr_CODE (line 96) | inline void CSV2IntArr_CODE(const std::string &source, TList &dest, cons...
FILE: lib/util.h
function namespace (line 36) | namespace util
function namespace (line 69) | namespace varadic_util
function namespace (line 106) | namespace charsets_utils
FILE: resources/_dev_scripts/xserver.py
function display_room_key (line 55) | def display_room_key(room_key):
class Connection (line 69) | class Connection:
method __init__ (line 70) | def __init__(self, server, conn, address):
method set_room (line 103) | def set_room(self, room, id):
method read_in_room (line 119) | def read_in_room(self):
method read_data (line 179) | def read_data(self):
method read_data_udp (line 214) | def read_data_udp(self, msg):
method set_data_conn (line 234) | def set_data_conn(self, data_conn):
method read_in_lobby (line 242) | def read_in_lobby(self):
method read (line 297) | def read(self):
class Room (line 304) | class Room:
method __init__ (line 305) | def __init__(self, server, room_key):
method enqueue_text_event (line 339) | def enqueue_text_event(self, frame_no, id, event_text):
method unregister (line 356) | def unregister(self, client):
method kill (line 389) | def kill(self, client):
method add (line 399) | def add(self, client):
method transmit (line 437) | def transmit(self, client):
method process_frame (line 457) | def process_frame(self):
method frame_loop (line 624) | def frame_loop(self):
class Server (line 645) | class Server:
method __init__ (line 646) | def __init__(self, bind_address, bind_port, frame_length):
method insert_room (line 683) | def insert_room(self, new_room):
method create_room (line 689) | def create_room(self, room_info):
method create_session (line 712) | def create_session(self, client):
method find_session (line 725) | def find_session(self, session_key):
method unregister_session (line 732) | def unregister_session(self, session_key):
method load_room (line 737) | def load_room(self, room_key):
method accept (line 763) | def accept(self):
method read_udp (line 775) | def read_udp(self):
method unregister (line 789) | def unregister(self, client):
method kill (line 797) | def kill(self, client):
method process (line 804) | def process(self):
method main_loop (line 819) | def main_loop(self):
FILE: script/src/xtech_lua_main.cpp
function xtech_lua_init (line 4) | bool xtech_lua_init()
function xtech_lua_quit (line 9) | bool xtech_lua_quit()
FILE: src/blk_id.h
type BLKID (line 26) | enum BLKID
FILE: src/blocks.cpp
function s_makeCoin (line 50) | void s_makeCoin(Block_t& b)
function s_findNearbyPlayer (line 60) | static int s_findNearbyPlayer(const Location_t& loc)
function s_InitScreensLeft (line 88) | static uint16_t s_InitScreensLeft()
function BlockHit (line 102) | void BlockHit(int A, bool HitDown, int whatPlayer)
type BlockShakeProgram (line 804) | enum BlockShakeProgram : uint8_t
function BlockShakeUp (line 819) | void BlockShakeUp(int A)
function BlockShakeUpPow (line 841) | void BlockShakeUpPow(int A)
function BlockShakeDown (line 863) | void BlockShakeDown(int A)
function BlockHitHard (line 885) | void BlockHitHard(int A)
function SafelyKillBlock (line 908) | void SafelyKillBlock(int A)
function KillBlock (line 930) | bool KillBlock(int A, bool Splode)
function BlockFrames (line 1070) | void BlockFrames()
function SwitchEndResumeMusic (line 1660) | void SwitchEndResumeMusic()
function PSwitch (line 1689) | bool PSwitch(bool enabled)
function PowBlock (line 2020) | void PowBlock()
function BlockCheckPlayerFilter (line 2117) | bool BlockCheckPlayerFilter(int blockIdx, int playerIdx)
FILE: src/blocks.h
function BlockTypeBreakable (line 27) | inline bool BlockTypeBreakable(int Type)
function BlockIsBreakable (line 35) | inline bool BlockIsBreakable(const Block_t& block)
FILE: src/change_res.cpp
function SyncSysCursorDisplay (line 37) | void SyncSysCursorDisplay()
function SetOrigRes (line 65) | void SetOrigRes()
function ChangeRes (line 90) | void ChangeRes(int, int, int, int)
function UpdateInternalRes (line 105) | void UpdateInternalRes()
function UpdateWindowRes (line 343) | void UpdateWindowRes()
FILE: src/cmd_line_setup.h
type CmdLineSetup_t (line 27) | struct CmdLineSetup_t
FILE: src/collision.cpp
function CheckCollisionIntersect (line 25) | bool CheckCollisionIntersect(const Location_t &Loc1, const Location_t &L...
function n00bCollision (line 44) | bool n00bCollision(const Location_t &Loc1, const Location_t &Loc2)
function NPCStartCollision (line 87) | bool NPCStartCollision(const Location_t &Loc1, const Location_t &Loc2)
function WarpCollision (line 108) | bool WarpCollision(const Location_t &Loc1, const SpeedlessLocation_t &en...
function FindCollision (line 154) | int FindCollision(const Location_t &Loc1, const Location_t &Loc2)
function FindCollisionBelt (line 183) | int FindCollisionBelt(const Location_t &Loc1, const Location_t &Loc2, te...
function NPCFindCollision (line 212) | int NPCFindCollision(const Location_t &Loc1, const Location_t &Loc2)
function EasyModeCollision (line 241) | int EasyModeCollision(const Location_t &Loc1, const Location_t &Loc2, bo...
function BootCollision (line 303) | int BootCollision(const Location_t &Loc1, const Location_t &Loc2, bool S...
function CursorCollision (line 366) | bool CursorCollision(const Location_t &Loc1, const Location_t &Loc2)
function CursorCollision (line 373) | bool CursorCollision(const Location_t &Loc1, const SpeedlessLocation_t &...
function CursorCollision (line 380) | bool CursorCollision(const Location_t &Loc1, const TinyLocation_t &Loc2)
function ShakeCollision (line 389) | bool ShakeCollision(const Location_t &Loc1, const Block_t &b)
function vScreenCollision (line 413) | bool vScreenCollision(int A, const Location_t &Loc2)
function vScreenCollision (line 424) | bool vScreenCollision(int A, const SpeedlessLocation_t &Loc2)
function vScreenCollision (line 435) | bool vScreenCollision(int A, const TinyLocation_t &Loc2)
function vScreenCollision2 (line 448) | bool vScreenCollision2(int A, const Location_t &Loc2)
function vScreenCollision2 (line 456) | bool vScreenCollision2(int A, const SpeedlessLocation_t &Loc2)
function vScreenCollision2 (line 464) | bool vScreenCollision2(int A, const TinyLocation_t &Loc2)
function WalkingCollision (line 474) | bool WalkingCollision(const Location_t &Loc1, const Location_t &Loc2)
function WalkingCollision2 (line 491) | bool WalkingCollision2(const Location_t &Loc1, const Location_t &Loc2)
function WalkingCollision3 (line 508) | bool WalkingCollision3(const Location_t &Loc1, const Location_t &Loc2, t...
function FindRunningCollision (line 524) | int FindRunningCollision(const Location_t &Loc1, const Location_t &Loc2,...
function ShouldTurnAround (line 554) | bool ShouldTurnAround(const Location_t &Loc1, const Location_t &Loc2, fl...
function CanComeOut (line 581) | bool CanComeOut(const Location_t &Loc1, const Location_t &Loc2)
function CheckHitSpot1 (line 604) | bool CheckHitSpot1(const Location_t &Loc1, const Location_t &Loc2)
function num_t (line 616) | num_t blockGetTopYTouching(const Block_t &block, const Location_t& loc)
function CompareWalkBlock (line 660) | bool CompareWalkBlock(int oldBlockIdx, int newBlockIdx, const Location_t...
function CompareNpcWalkBlock (line 752) | void CompareNpcWalkBlock(int &tempHitBlock, int &tempHitOldBlock,
function SectionCollision (line 799) | bool SectionCollision(const int section, const Location_t &loc)
FILE: src/collision.h
type NPC_t (line 27) | struct NPC_t
type Block_t (line 28) | struct Block_t
type CollisionSpot (line 30) | enum CollisionSpot
FILE: src/config.h
type saveUserData (line 36) | struct saveUserData
type Scope (line 42) | struct Scope
function value_t (line 87) | constexpr value_t defaults(value_t value)
function section (line 123) | section main{this, Scope::All, "main", "Main", nullptr}
function language_t (line 125) | language_t language{this, defaults(std::string("auto")), {}, Scope::Config,
function section (line 184) | section video{this, Scope::Config, "video", "Video", nullptr}
type ScaleModes (line 217) | enum ScaleModes
function section (line 385) | section audio{this, Scope::Config, "audio", "Audio", nullptr}
function section (line 444) | section controls{this, Scope::Config, "controls", "Controls"}
function section (line 448) | section advanced{this, Scope::Config, "advanced", "Advanced", "Technical...
type RenderMode_t (line 502) | enum RenderMode_t
type ScaleDownTextures (line 539) | enum ScaleDownTextures
type FullScreenType (line 571) | enum FullScreenType
function fullscreen_res_t (line 591) | fullscreen_res_t fullscreen_res{this, defaults(std::pair<int, int>{800, ...
function section (line 710) | section episode_options{this, Scope::EpisodeOptions, "episode-options", ...
function section (line 752) | section compat{this, Scope::All, "compatibility", "Session Tweaks", "Opt...
function section (line 978) | section speedrun{this, Scope::CreatorEpisode, "speedrun", "Speedrun"}
function section (line 1011) | section view_credits{this, Scope::All, "view-credits", "View Credits"}
FILE: src/config/config_base.hpp
class IniProcessing (line 37) | class IniProcessing
class XTechTranslate (line 38) | class XTechTranslate
class BaseConfigOption_t (line 44) | class BaseConfigOption_t
class ConfigSection_t (line 47) | class ConfigSection_t
class ConfigSubSection_t (line 50) | class ConfigSubSection_t
class ConfigOption_t (line 53) | class ConfigOption_t
class ConfigEnumOption_t (line 56) | class ConfigEnumOption_t
class ConfigRangeOption_t (line 59) | class ConfigRangeOption_t
class ConfigLanguage_t (line 62) | class ConfigLanguage_t
class ConfigFullscreenRes_t (line 65) | class ConfigFullscreenRes_t
class ConfigSetupEnum_t (line 68) | class ConfigSetupEnum_t
class _Config_t (line 71) | class _Config_t
type ConfigSetLevel (line 75) | enum class ConfigSetLevel : uint8_t
class ConfigChangeSentinel (line 94) | class ConfigChangeSentinel
type CompatMode (line 105) | enum class CompatMode
type CompatClass (line 113) | enum class CompatClass
type ConfigCompatInfo_t (line 122) | struct ConfigCompatInfo_t
method ConfigCompatInfo_t (line 127) | ConfigCompatInfo_t() {}
method ConfigCompatInfo_t (line 129) | ConfigCompatInfo_t(CompatClass mode, value_t prev_value)
type ConfigEnumValueInfo_t (line 134) | struct ConfigEnumValueInfo_t
method ConfigEnumValueInfo_t (line 142) | ConfigEnumValueInfo_t(const value_t value, const char* internal_name, ...
method ConfigEnumValueInfo_t (line 145) | ConfigEnumValueInfo_t(const value_t value, bool is_translatable, const...
type ConfigRangeInfo_t (line 150) | struct ConfigRangeInfo_t
method ConfigRangeInfo_t (line 156) | ConfigRangeInfo_t(const value_t min, const value_t max, const value_t ...
class BaseConfigOption_t<false> (line 163) | class BaseConfigOption_t<false>
class ConfigOption_t<false, value_t> (line 188) | class ConfigOption_t<false, value_t> : public BaseConfigOption_t<false>
method ConfigOption_t (line 194) | ConfigOption_t(_Config_t<false>* parent, const value_t default_value,
class ConfigEnumOption_t<false, value_t> (line 206) | class ConfigEnumOption_t<false, value_t> : public ConfigOption_t<false, ...
method ConfigEnumOption_t (line 215) | ConfigEnumOption_t(_Config_t<false>* parent,
class ConfigRangeOption_t<false, value_t> (line 230) | class ConfigRangeOption_t<false, value_t> : public ConfigOption_t<false,...
method ConfigRangeOption_t (line 239) | ConfigRangeOption_t(_Config_t<false>* parent,
class ConfigLanguage_t<false> (line 252) | class ConfigLanguage_t<false> : public ConfigOption_t<false, std::string>
method ConfigLanguage_t (line 257) | ConfigLanguage_t(_Config_t<false>* parent,
class ConfigFullscreenRes_t<false> (line 268) | class ConfigFullscreenRes_t<false> : public ConfigOption_t<false, std::p...
method ConfigFullscreenRes_t (line 273) | ConfigFullscreenRes_t(_Config_t<false>* parent,
class ConfigSetupEnum_t<false> (line 284) | class ConfigSetupEnum_t<false> : public ConfigEnumOption_t<false, int>
class ConfigSection_t<false> (line 290) | class ConfigSection_t<false> : public BaseConfigOption_t<false>
method ConfigSection_t (line 293) | ConfigSection_t(_Config_t<false>* parent, uint8_t scope,
class ConfigSubSection_t<false> (line 303) | class ConfigSubSection_t<false> : public BaseConfigOption_t<false>
method ConfigSubSection_t (line 306) | ConfigSubSection_t(_Config_t<false>* parent,
class BaseConfigOption_t<true> (line 316) | class BaseConfigOption_t<true>
method BaseConfigOption_t (line 326) | BaseConfigOption_t(_Config_t<true>* parent, uint8_t scope,
method is_set (line 338) | inline bool is_set() const
method unset (line 345) | inline void unset() { m_set = ConfigSetLevel::unset; }
method rotate_left (line 347) | virtual bool rotate_left() { return false; }
method rotate_right (line 348) | virtual bool rotate_right() { return false; }
method change (line 349) | virtual bool change() { return rotate_right(); }
method set_from_default (line 351) | virtual void set_from_default(ConfigSetLevel set_level) { (void)set_le...
method update_from_ini (line 352) | virtual void update_from_ini(IniProcessing* ini, ConfigSetLevel set_le...
method disable_bugfixes (line 354) | virtual void disable_bugfixes(ConfigSetLevel set_level) { (void)set_le...
method update_from_compat (line 356) | virtual void update_from_compat(CompatMode compat_mode, ConfigSetLevel...
method update_from (line 357) | virtual void update_from(const BaseConfigOption_t<true>& o, ConfigSetL...
method save_to_ini (line 359) | virtual void save_to_ini(IniProcessing* ini) { (void)ini; }
class ConfigOption_t<true, value_t> (line 369) | class ConfigOption_t<true, value_t> : public BaseConfigOption_t<true>
method ConfigOption_t (line 374) | ConfigOption_t(_Config_t<true>* parent, const value_t default_value,
class ConfigEnumOption_t<true, value_t> (line 407) | class ConfigEnumOption_t<true, value_t> : public ConfigOption_t<true, va...
method ConfigEnumOption_t (line 417) | ConfigEnumOption_t(_Config_t<true>* parent,
class ConfigRangeOption_t<true, value_t> (line 439) | class ConfigRangeOption_t<true, value_t> : public ConfigOption_t<true, v...
method ConfigRangeOption_t (line 449) | ConfigRangeOption_t(_Config_t<true>* parent,
class ConfigLanguage_t<true> (line 464) | class ConfigLanguage_t<true> : public ConfigOption_t<true, std::string>
method ConfigLanguage_t (line 473) | ConfigLanguage_t(_Config_t<true>* parent,
class ConfigFullscreenRes_t<true> (line 491) | class ConfigFullscreenRes_t<true> : public ConfigOption_t<true, std::pai...
method ConfigFullscreenRes_t (line 500) | ConfigFullscreenRes_t(_Config_t<true>* parent,
class ConfigSetupEnum_t<true> (line 518) | class ConfigSetupEnum_t<true> : public ConfigEnumOption_t<true, int>
class ConfigSection_t<true> (line 530) | class ConfigSection_t<true> : public BaseConfigOption_t<true>
method save_to_ini (line 539) | virtual void save_to_ini(IniProcessing* ini) override { update_from_in...
class ConfigSubSection_t<true> (line 543) | class ConfigSubSection_t<true> : public BaseConfigOption_t<true>
FILE: src/config/config_hooks.cpp
function config_res_set (line 61) | void config_res_set()
function config_rendermode_set (line 69) | void config_rendermode_set()
function config_fullscreen_set (line 80) | void config_fullscreen_set()
function config_video_mode_set (line 94) | void config_video_mode_set()
function config_fullscreen_type_set (line 110) | void config_fullscreen_type_set()
function config_mountdrums_set (line 119) | void config_mountdrums_set()
function config_screenmode_set (line 127) | void config_screenmode_set()
function config_audiofx_set (line 132) | void config_audiofx_set()
function config_audio_set (line 141) | void config_audio_set()
function config_music_volume_set (line 152) | void config_music_volume_set()
function config_language_set (line 160) | void config_language_set()
function config_log_level_set (line 170) | void config_log_level_set()
function config_integrations_set (line 177) | void config_integrations_set()
function config_3ds_inaccurate_gifs_set (line 184) | void config_3ds_inaccurate_gifs_set()
function config_compat_changed (line 194) | void config_compat_changed()
FILE: src/config/config_main.cpp
function s_GameInfoActivitySetup (line 245) | static void s_GameInfoActivitySetup(IniProcessing& ini)
function LoadCustomConfig (line 267) | void LoadCustomConfig()
function ResetCustomConfig (line 311) | void ResetCustomConfig()
function UpdateConfig (line 319) | void UpdateConfig()
FILE: src/control/con_control.h
type ConKeyboard_t (line 29) | struct ConKeyboard_t
type KM_Key (line 54) | struct KM_Key
type ConJoystick_t (line 68) | struct ConJoystick_t
FILE: src/control/controls.cpp
function Controls_t (line 56) | Controls_t& operator|=(Controls_t& o1, const Controls_t& o2)
type Controls (line 78) | namespace Controls
function StatusInfo (line 181) | StatusInfo InputMethod::GetStatus()
function InputMethodProfile (line 442) | InputMethodProfile* InputMethodType::AddProfile()
function InputMethodProfile (line 538) | InputMethodProfile* InputMethodType::GetDefaultProfile(int player_no)
function InitStrings (line 737) | void InitStrings()
function Init (line 761) | void Init()
function Quit (line 796) | void Quit()
function ProcessEvent (line 808) | bool ProcessEvent(const SDL_Event* ev)
function Update (line 834) | bool Update(bool check_lost_devices)
function SaveConfig (line 1017) | void SaveConfig(IniProcessing* ctl)
function LoadConfig (line 1023) | void LoadConfig(IniProcessing* ctl)
function SaveConfig (line 1032) | void SaveConfig()
function LoadConfig (line 1043) | void LoadConfig()
function InputMethod (line 1064) | InputMethod* PollInputMethod() noexcept
function DeleteInputMethod (line 1168) | void DeleteInputMethod(InputMethod* method)
function DeleteInputMethodSlot (line 1186) | void DeleteInputMethodSlot(int slot)
function SetInputMethodProfile (line 1197) | bool SetInputMethodProfile(int player_no, InputMethodProfile* profile)
function SetInputMethodProfile (line 1210) | bool SetInputMethodProfile(InputMethod* method, InputMethodProfile* pr...
function ClearInputMethods (line 1224) | void ClearInputMethods()
function RemoveNullInputMethods (line 1232) | void RemoveNullInputMethods()
function MenuControls_t (line 1244) | MenuControls_t GetMenuControls(int limit_player)
function Rumble (line 1295) | void Rumble(int player, int ms, float strength)
function RumbleAllPlayers (line 1327) | void RumbleAllPlayers(int ms, float strength)
function StatusInfo (line 1348) | StatusInfo GetStatus(int l_player_i)
function RenderTouchControls (line 1362) | void RenderTouchControls()
function UpdateTouchScreenSize (line 1415) | void UpdateTouchScreenSize()
function LoadTouchScreenGFX (line 1441) | void LoadTouchScreenGFX()
FILE: src/control/duplicate.cpp
type Controls (line 26) | namespace Controls
function InputMethodProfile (line 125) | InputMethodProfile* InputMethodType_Duplicate::AllocateProfile() noexcept
function InputMethod (line 151) | InputMethod* InputMethodType_Duplicate::Poll(const std::vector<InputMe...
FILE: src/control/duplicate.h
function namespace (line 26) | namespace Controls
FILE: src/control/input_16m.cpp
type KEYID (line 52) | enum KEYID {
type Controls (line 69) | namespace Controls
function StatusInfo (line 248) | StatusInfo InputMethod_16M::GetStatus()
function InputMethodProfile (line 783) | InputMethodProfile* InputMethodType_16M::AllocateProfile() noexcept
function InputMethod (line 859) | InputMethod* InputMethodType_16M::Poll(const std::vector<InputMethod*>...
FILE: src/control/input_16m.h
function namespace (line 6) | namespace Controls
FILE: src/control/input_3ds.cpp
type KEYID (line 57) | enum KEYID {
type Controls (line 84) | namespace Controls
function StatusInfo (line 263) | StatusInfo InputMethod_3DS::GetStatus()
function InputMethodProfile (line 839) | InputMethodProfile* InputMethodType_3DS::AllocateProfile() noexcept
function InputMethod (line 917) | InputMethod* InputMethodType_3DS::Poll(const std::vector<InputMethod*>...
FILE: src/control/input_3ds.h
function namespace (line 6) | namespace Controls
FILE: src/control/input_wii.cpp
function is_direction (line 57) | bool is_direction(const std::string* s)
function num_t (line 139) | static inline num_t i_get_thumb_dbl(WPADData* data, uint32_t button, uin...
function s_get_button (line 185) | static bool s_get_button(WPADData* data, uint32_t button, uint8_t expans...
function num_t (line 234) | static num_t s_get_button_dbl(WPADData* data, uint32_t button, uint8_t e...
type XRender (line 247) | namespace XRender
type Controls (line 252) | namespace Controls
function StatusInfo (line 469) | StatusInfo InputMethod_Wii::GetStatus()
function InputMethodProfile (line 1170) | InputMethodProfile* InputMethodType_Wii::AllocateProfile() noexcept
function InputMethod (line 1283) | InputMethod* InputMethodType_Wii::Poll(const std::vector<InputMethod*>...
function InputMethodProfile (line 1454) | InputMethodProfile* InputMethodType_Wii::AddNunchuckProfile()
function InputMethodProfile (line 1468) | InputMethodProfile* InputMethodType_Wii::AddClassicProfile()
FILE: src/control/input_wii.h
function namespace (line 10) | namespace Controls
FILE: src/control/input_wii_gc.cpp
type Controls (line 134) | namespace Controls
function
Copy disabled (too large)
Download .json
Condensed preview — 899 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (12,217K chars).
[
{
"path": ".appveyor.yml",
"chars": 1504,
"preview": "version: build-{build}\n\nenvironment:\n global:\n PLATFORMTOOLSET: \"v140\"\n CMAKEPREFIXPATH: \".\"\n SEVENZIP: \"C:\\\\P"
},
{
"path": ".gitattributes",
"chars": 234,
"preview": "changelog.txt text eol=crlf\nLICENSE text eol=crlf\nREADME.md text eol=crlf\n*.lvl "
},
{
"path": ".github/ISSUE_TEMPLATE/bug-report.yml",
"chars": 6377,
"preview": "name: Bug Report\ndescription: Create a report of the issue ocurred with the game during its use\nlabels: [\"NEW-BUG\"]\nproj"
},
{
"path": ".github/ISSUE_TEMPLATE/compile-fail-report.yml",
"chars": 3598,
"preview": "name: Build/Compilation failure report\ndescription: Create a report of the problems to compile the game from the source "
},
{
"path": ".github/ci-helper/.gitignore",
"chars": 6,
"preview": ".idea/"
},
{
"path": ".github/ci-helper/create-dmg.sh",
"chars": 7815,
"preview": "#!/bin/bash\n\n# Create a read-only disk image of the conkmtents of a folder\n\nset -e\n\nfunction pure_version() {\n echo '"
},
{
"path": ".github/ci-helper/pack-game-macos.sh",
"chars": 1297,
"preview": "#!/bin/bash\n\n# $1 assets; $2 icon $3 bundle name\n\nASSETS_NAME=$1\nICON_FILE=$2\nBUNDLE_NAME=$3\nARCHIVE_NAME=$4\n\nif [[ \"${A"
},
{
"path": ".github/ci-helper/pack-game.sh",
"chars": 1014,
"preview": "#!/bin/bash\n\nRUNNER_OS=$1\nSUBDIR_NAME=$2\nEXECUTABLE_NAME=$3\nARCHIVE_NAME=\"$4\"\nASSETS_NAME=$5\n\n\ncd build\n\nmkdir -p \"packa"
},
{
"path": ".github/ci-helper/support/dmg-license.py",
"chars": 5354,
"preview": "#! /usr/bin/env python\n\"\"\"\nThis script adds a license file to a DMG. Requires Xcode and a plain ascii text\nlicense file."
},
{
"path": ".github/ci-helper/support/dmg-license3.py",
"chars": 5361,
"preview": "#! /usr/bin/env python3\n\"\"\"\nThis script adds a license file to a DMG. Requires Xcode and a plain ascii text\nlicense file"
},
{
"path": ".github/ci-helper/support/template.applescript",
"chars": 1932,
"preview": "on run (volumeName)\n\ttell application \"Finder\"\n\t\ttell disk (volumeName as string)\n\t\t\topen\n\t\t\t\n\t\t\tset theXOrigin to WINX\n"
},
{
"path": ".github/ci-helper/translate_patcher.py",
"chars": 1273,
"preview": "#!/usr/bin/python3\n\nimport json\nimport sys\nimport optparse\n\n\ndef merge_jsons(my_dict, output):\n for k, v in my_dict.i"
},
{
"path": ".github/ci-helper/translate_sync_assets.sh",
"chars": 2304,
"preview": "#!/bin/bash\n\nOLD=$PWD\nGIT_ROOT=$PWD/build-git\nWORKDIR=\"$PWD/.github/ci-helper\"\n\nmkdir -p build-git\n\nfunction update_repo"
},
{
"path": ".github/ci-helper/translate_sync_to_stable.sh",
"chars": 1291,
"preview": "#!/bin/bash\n\nOLD=$PWD\nGIT_ROOT=$PWD/build-git\nWORKDIR=\"$PWD/.github/ci-helper\"\n\nSTABLE_BRANCH=stable-1.3.7.x\n\nif [[ -z \""
},
{
"path": ".github/ci-helper/translate_update.sh",
"chars": 1071,
"preview": "#!/bin/bash\n\nOLD_DIR=~+\n\nASSETS_ROOT=$1\n\nLANGS_IN=\"$PWD/../../resources/languages\"\nLANGS_PATCH=$1/languages/patches\nLANG"
},
{
"path": ".github/workflows/16m-ci.yml",
"chars": 3974,
"preview": "name: DSi CI\n\non:\n push:\n branches:\n - main\n - versus-ci-homebrew\n pull_request:\n branches:\n - ma"
},
{
"path": ".github/workflows/3ds-ci.yml",
"chars": 3981,
"preview": "name: 3DS CI\n\non:\n push:\n branches:\n - main\n - stable*\n - versus-ci-homebrew\n pull_request:\n bran"
},
{
"path": ".github/workflows/android-ci.yml",
"chars": 5652,
"preview": "name: Android CI\n\non:\n push:\n branches:\n - main\n - stable*\n - versus-ci-android\n pull_request:\n b"
},
{
"path": ".github/workflows/android-fdroid-ci.yml",
"chars": 5978,
"preview": "name: Android (F-Droid) CI\n\non:\n workflow_dispatch:\n push:\n branches:\n - release-1.3.7-fdroid\n\nconcurrency:\n "
},
{
"path": ".github/workflows/blocksds-ci.yml",
"chars": 4412,
"preview": "name: DSi BlocksDS CI\n\non:\n push:\n branches:\n - main\n - versus-ci-homebrew\n pull_request:\n branches:\n "
},
{
"path": ".github/workflows/emscripten.yml",
"chars": 8064,
"preview": "name: Emscripten CI\n\non:\n push:\n branches:\n - main\n - stable*\n - versus-ci-emscripten\n pull_request:"
},
{
"path": ".github/workflows/flatpak.yml",
"chars": 4034,
"preview": "name: Flatpak CI\n\non:\n push:\n branches:\n - main\n - stable*\n - versus-ci\n - versus-ci-flatpak\n p"
},
{
"path": ".github/workflows/homebrew-assets-ci.yml",
"chars": 5541,
"preview": "name: Homebrew Assets CI\n\non:\n push:\n branches:\n - main\n - stable*\n paths:\n - .github/workflows/ho"
},
{
"path": ".github/workflows/macos-ci.yml",
"chars": 7968,
"preview": "name: macOS CI\n\non:\n push:\n branches:\n - main\n - stable*\n - versus-ci-macos\n pull_request:\n branc"
},
{
"path": ".github/workflows/portmaster-ci.yml",
"chars": 4773,
"preview": "name: PortMaster CI\n\non:\n push:\n branches:\n - main\n - stable*\n - versus-ci\n - versus-ci-portmast"
},
{
"path": ".github/workflows/regression-testing-ci.yaml",
"chars": 7174,
"preview": "name: Regression Test CI\n\non:\n push:\n branches:\n - main\n - stable*\n pull_request:\n branches:\n - m"
},
{
"path": ".github/workflows/switch-ci.yml",
"chars": 5565,
"preview": "name: Switch CI\n\non:\n push:\n branches:\n - main\n - stable*\n - versus-ci-homebrew\n pull_request:\n b"
},
{
"path": ".github/workflows/sync-langs.yml",
"chars": 2059,
"preview": "name: Languages sync CI\n\non:\n push:\n branches:\n - main\n - versus-ci-langsync\n paths:\n - .github/wo"
},
{
"path": ".github/workflows/ubuntu-deb-ci.yml",
"chars": 23622,
"preview": "name: Ubuntu DEB CI\n\non:\n push:\n branches:\n - main\n - stable*\n - versus-ci\n - versus-ci-ubuntu\n "
},
{
"path": ".github/workflows/ubuntu-tar-ci.yml",
"chars": 18443,
"preview": "name: Ubuntu TAR CI\n\non:\n push:\n branches:\n - main\n - stable*\n - versus-ci\n - versus-ci-ubuntu\n "
},
{
"path": ".github/workflows/vita-ci.yml",
"chars": 6100,
"preview": "name: Vita CI\n\non:\n push:\n branches:\n - main\n - stable*\n - versus-ci-homebrew\n pull_request:\n bra"
},
{
"path": ".github/workflows/wii-ci.yml",
"chars": 4940,
"preview": "name: Wii CI\n\non:\n push:\n branches:\n - main\n - stable*\n - versus-ci-homebrew\n pull_request:\n bran"
},
{
"path": ".github/workflows/wiiu-ci.yml",
"chars": 5023,
"preview": "name: Wii U CI\n\non:\n push:\n branches:\n - main\n - stable*\n - versus-ci-homebrew\n pull_request:\n br"
},
{
"path": ".github/workflows/windows-ci.yml",
"chars": 10775,
"preview": "name: Windows CI\n\non:\n push:\n branches:\n - main\n - stable*\n - versus-ci\n pull_request:\n branches:"
},
{
"path": ".gitignore",
"chars": 1016,
"preview": "# This file is used to ignore files which are generated\n# --------------------------------------------------------------"
},
{
"path": ".gitmodules",
"chars": 2131,
"preview": "[submodule \"3rdparty/PGE_File_Formats\"]\n\tpath = 3rdparty/PGE_File_Formats\n\turl = https://github.com/WohlSoft/PGE-File-Li"
},
{
"path": "CMakeLists.txt",
"chars": 76922,
"preview": "cmake_minimum_required(VERSION 3.5...3.10)\n\nif(POLICY CMP0069) # Allow CMAKE_INTERPROCEDURAL_OPTIMIZATION (lto) to be se"
},
{
"path": "CONTRIBUTING.md",
"chars": 4227,
"preview": "We're glad you're interested in the project! Well-implemented PRs that improve TheXTech's compatibility with SMBX64 or a"
},
{
"path": "LICENSE",
"chars": 35795,
"preview": "GNU GENERAL PUBLIC LICENSE\r\n Version 3, 29 June 2007\r\n\r\n Copyright (C) 2007 Free Software Foundati"
},
{
"path": "PORTING.md",
"chars": 2601,
"preview": "TheXTech is a cross-platform engine and is built to be easy to port to new systems. It has very limited dependencies and"
},
{
"path": "README.ESP.md",
"chars": 14500,
"preview": "<p align=\"center\">\n<a href=\"https://github.com/Wohlstand/TheXTech/releases\"><img src=\"https://raw.githubusercontent.com/"
},
{
"path": "README.RUS.md",
"chars": 16233,
"preview": "<p align=\"center\">\n<a href=\"https://github.com/Wohlstand/TheXTech/releases\"><img src=\"https://raw.githubusercontent.com/"
},
{
"path": "README.md",
"chars": 14344,
"preview": "<p align=\"center\">\r\n<a href=\"https://github.com/Wohlstand/TheXTech/releases\"><img src=\"https://raw.githubusercontent.com"
},
{
"path": "android-project/.gitignore",
"chars": 326,
"preview": "# Folders\n/.idea/*\n/.gradle/*\n/build/*\n/local.properties\n/SDL-default/*\n/thextech/jni/SDL/*\n/thextech/build/*\n/thextech/"
},
{
"path": "android-project/build.gradle",
"chars": 562,
"preview": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n r"
},
{
"path": "android-project/build_init.sh",
"chars": 960,
"preview": "#!/bin/bash\n\n# Remove old version if presented\nif [[ -d SDL-default ]]; then\n rm -Rf SDL-default\nfi\n\n# Unpack recent "
},
{
"path": "android-project/gradle/wrapper/gradle-wrapper.properties",
"chars": 340,
"preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionSha256Sum=ed1a8d686605fd7c23bdf62c7fc7add1c"
},
{
"path": "android-project/gradle.properties",
"chars": 845,
"preview": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will o"
},
{
"path": "android-project/gradlew",
"chars": 8739,
"preview": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lice"
},
{
"path": "android-project/gradlew.bat",
"chars": 2872,
"preview": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \""
},
{
"path": "android-project/settings.gradle",
"chars": 20,
"preview": "include ':thextech'\n"
},
{
"path": "android-project/thextech/build.gradle",
"chars": 10538,
"preview": "def buildAsLibrary = project.hasProperty('BUILD_AS_LIBRARY');\ndef buildAsApplication = !buildAsLibrary\nif (buildAsApplic"
},
{
"path": "android-project/thextech/icon/debug/mipmap-anydpi-v26/ic_launcher.xml",
"chars": 265,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "android-project/thextech/icon/debug/mipmap-anydpi-v26/ic_launcher_round.xml",
"chars": 265,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "android-project/thextech/icon/debug/values/ic_launcher_background.xml",
"chars": 120,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"ic_launcher_background\">#C1A4A7</color>\n</resources>"
},
{
"path": "android-project/thextech/icon/devel/mipmap-anydpi-v26/ic_launcher.xml",
"chars": 265,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "android-project/thextech/icon/devel/mipmap-anydpi-v26/ic_launcher_round.xml",
"chars": 265,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "android-project/thextech/icon/devel/values/ic_launcher_background.xml",
"chars": 120,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"ic_launcher_background\">#BF8054</color>\n</resources>"
},
{
"path": "android-project/thextech/icon/main/mipmap-anydpi-v26/ic_launcher.xml",
"chars": 265,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "android-project/thextech/icon/main/mipmap-anydpi-v26/ic_launcher_round.xml",
"chars": 265,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "android-project/thextech/icon/main/values/ic_launcher_background.xml",
"chars": 120,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"ic_launcher_background\">#696F91</color>\n</resources>"
},
{
"path": "android-project/thextech/proguard-rules.pro",
"chars": 636,
"preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in [s"
},
{
"path": "android-project/thextech/src/main/AndroidManifest.xml",
"chars": 9297,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:to"
},
{
"path": "android-project/thextech/src/main/assets/buttons/Credits.txt",
"chars": 98,
"preview": "Button pictures made by ZeZeinzer (Discord BlueBoi#8980)\nAdditions and mods by 0lhi and Wohlstand\n"
},
{
"path": "android-project/thextech/src/main/generate_patternPath.sh",
"chars": 730,
"preview": "#!/bin/bash\n\nfor q in lvl LVL wld WLD lvlx LVLX wldx WLDX; do\n echo \" <data android:pathPattern=\\\".*\\\\"
},
{
"path": "android-project/thextech/src/main/java/javautil/FileUtils.java",
"chars": 18627,
"preview": "package javautil;\n\nimport android.annotation.SuppressLint;\nimport android.content.ContentResolver;\nimport android.conten"
},
{
"path": "android-project/thextech/src/main/java/javautil/README.md",
"chars": 231,
"preview": "# Android Filename Picker using Java\r\nA library for getting filenames in an Android device\r\n\r\nOriginal got from the repo"
},
{
"path": "android-project/thextech/src/main/java/org/libsdl/app/HIDDevice.java",
"chars": 623,
"preview": "package org.libsdl.app;\n\nimport android.hardware.usb.UsbDevice;\n\ninterface HIDDevice\n{\n public int getId();\n publi"
},
{
"path": "android-project/thextech/src/main/java/org/libsdl/app/HIDDeviceBLESteamController.java",
"chars": 24168,
"preview": "package org.libsdl.app;\n\nimport android.content.Context;\nimport android.bluetooth.BluetoothDevice;\nimport android.blueto"
},
{
"path": "android-project/thextech/src/main/java/org/libsdl/app/HIDDeviceManager.java",
"chars": 27596,
"preview": "package org.libsdl.app;\n\nimport android.app.Activity;\nimport android.app.AlertDialog;\nimport android.app.PendingIntent;\n"
},
{
"path": "android-project/thextech/src/main/java/org/libsdl/app/HIDDeviceUSB.java",
"chars": 9104,
"preview": "package org.libsdl.app;\n\nimport android.hardware.usb.*;\nimport android.os.Build;\nimport android.util.Log;\nimport java.ut"
},
{
"path": "android-project/thextech/src/main/java/org/libsdl/app/SDL.java",
"chars": 3491,
"preview": "package org.libsdl.app;\n\nimport android.content.Context;\n\nimport java.lang.Class;\nimport java.lang.reflect.Method;\n\n/**\n"
},
{
"path": "android-project/thextech/src/main/java/org/libsdl/app/SDLActivity.java",
"chars": 76532,
"preview": "package org.libsdl.app;\n\nimport android.app.Activity;\nimport android.app.AlertDialog;\nimport android.app.Dialog;\nimport "
},
{
"path": "android-project/thextech/src/main/java/org/libsdl/app/SDLAudioManager.java",
"chars": 19623,
"preview": "package org.libsdl.app;\n\nimport android.content.Context;\nimport android.media.AudioDeviceCallback;\nimport android.media."
},
{
"path": "android-project/thextech/src/main/java/org/libsdl/app/SDLControllerManager.java",
"chars": 30410,
"preview": "package org.libsdl.app;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.Comparator;\nimport j"
},
{
"path": "android-project/thextech/src/main/java/org/libsdl/app/SDLSurface.java",
"chars": 14749,
"preview": "package org.libsdl.app;\n\n\nimport android.content.Context;\nimport android.content.pm.ActivityInfo;\nimport android.hardwar"
},
{
"path": "android-project/thextech/src/main/java/ru/wohlsoft/thextech/GameSettings.java",
"chars": 9333,
"preview": "package ru.wohlsoft.thextech;\n\nimport android.content.Context;\nimport android.content.SharedPreferences;\nimport android."
},
{
"path": "android-project/thextech/src/main/java/ru/wohlsoft/thextech/IniFile.java",
"chars": 3900,
"preview": "package ru.wohlsoft.thextech;\n\n/*\n Code made by Aerospace and published at the StackOverflow https://stackoverflow.co"
},
{
"path": "android-project/thextech/src/main/java/ru/wohlsoft/thextech/Launcher.java",
"chars": 21341,
"preview": "package ru.wohlsoft.thextech;\n\nimport android.Manifest;\nimport android.content.Context;\nimport android.content.DialogInt"
},
{
"path": "android-project/thextech/src/main/java/ru/wohlsoft/thextech/OpenFileDialog.java",
"chars": 14331,
"preview": "package ru.wohlsoft.thextech;\n\n\nimport android.app.AlertDialog;\nimport android.content.Context;\nimport android.content.D"
},
{
"path": "android-project/thextech/src/main/java/ru/wohlsoft/thextech/UIUpdater.java",
"chars": 2207,
"preview": "package ru.wohlsoft.thextech;\n\nimport android.os.Handler;\nimport android.os.Looper;\n\n/**\n * A class used to perform peri"
},
{
"path": "android-project/thextech/src/main/java/ru/wohlsoft/thextech/thextechActivity.java",
"chars": 7495,
"preview": "package ru.wohlsoft.thextech;\n\nimport android.app.AlertDialog;\nimport android.content.DialogInterface;\nimport android.co"
},
{
"path": "android-project/thextech/src/main/res/layout/activity_launcher.xml",
"chars": 3035,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xm"
},
{
"path": "android-project/thextech/src/main/res/layout/settings_activity.xml",
"chars": 315,
"preview": "<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:layout_width=\"match_parent\"\n and"
},
{
"path": "android-project/thextech/src/main/res/values/arrays.xml",
"chars": 5089,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string-array name=\"touchscreenControllerTypes\">\n <item>@s"
},
{
"path": "android-project/thextech/src/main/res/values/colors.xml",
"chars": 208,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"colorPrimary\">#3F51B5</color>\n <color name=\"color"
},
{
"path": "android-project/thextech/src/main/res/values/strings.xml",
"chars": 3974,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"app_name\" translatable=\"false\">TheXTech</string>\n "
},
{
"path": "android-project/thextech/src/main/res/values/styles.xml",
"chars": 197,
"preview": "<resources>\n\n <!-- Base application theme. -->\n <style name=\"AppTheme\" parent=\"android:Theme.Holo.Light.DarkAction"
},
{
"path": "android-project/thextech/src/main/res/values-bg/arrays.xml",
"chars": 68,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n </resources>\n"
},
{
"path": "android-project/thextech/src/main/res/values-bg/strings.xml",
"chars": 3213,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"start_game_button\">Започни игра</string>\n <strin"
},
{
"path": "android-project/thextech/src/main/res/values-de/arrays.xml",
"chars": 1073,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"touchscreenControllerType2\">Immer deaktiviert</stri"
},
{
"path": "android-project/thextech/src/main/res/values-de/strings.xml",
"chars": 4064,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"title_activity_game_settings\">Spieleinstellungen</s"
},
{
"path": "android-project/thextech/src/main/res/values-es-rES/arrays.xml",
"chars": 1077,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"touchscreenControllerType0\">Activar siempre</string"
},
{
"path": "android-project/thextech/src/main/res/values-es-rES/strings.xml",
"chars": 4082,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"title_activity_game_settings\">Ajustes del juego</st"
},
{
"path": "android-project/thextech/src/main/res/values-fr/arrays.xml",
"chars": 68,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n </resources>\n"
},
{
"path": "android-project/thextech/src/main/res/values-fr/strings.xml",
"chars": 3057,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"setup_feedback\">Réactions</string>\n <string name"
},
{
"path": "android-project/thextech/src/main/res/values-hu/arrays.xml",
"chars": 1084,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"batteryStatusShow1\">Mutasd alacsony töltöttség eset"
},
{
"path": "android-project/thextech/src/main/res/values-hu/strings.xml",
"chars": 3513,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"title_activity_game_settings\">Játékbeállítások</str"
},
{
"path": "android-project/thextech/src/main/res/values-it/arrays.xml",
"chars": 1084,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"rendererDefault\">Predefinito</string>\n <string n"
},
{
"path": "android-project/thextech/src/main/res/values-it/strings.xml",
"chars": 1108,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"title_activity_game_settings\">Impostazioni di gioco"
},
{
"path": "android-project/thextech/src/main/res/values-ja/arrays.xml",
"chars": 892,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"touchscreenControllerType0\">つねに有効にする</string>\n <"
},
{
"path": "android-project/thextech/src/main/res/values-ja/strings.xml",
"chars": 3012,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"setup_general_cat\">一般</string>\n <string name=\"se"
},
{
"path": "android-project/thextech/src/main/res/values-ko/arrays.xml",
"chars": 906,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"touchscreenControllerType1\">하드웨어 키보드가 연결되면 비활성화</st"
},
{
"path": "android-project/thextech/src/main/res/values-ko/strings.xml",
"chars": 3039,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"setup_general_cat\">일반 사항</string>\n <string name="
},
{
"path": "android-project/thextech/src/main/res/values-nb-rNO/arrays.xml",
"chars": 68,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n </resources>\n"
},
{
"path": "android-project/thextech/src/main/res/values-nb-rNO/strings.xml",
"chars": 2530,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"managePermExplainText\">På Android 11+ trengs må ful"
},
{
"path": "android-project/thextech/src/main/res/values-pl/arrays.xml",
"chars": 68,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n </resources>\n"
},
{
"path": "android-project/thextech/src/main/res/values-pl/strings.xml",
"chars": 68,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n </resources>\n"
},
{
"path": "android-project/thextech/src/main/res/values-pt/arrays.xml",
"chars": 1040,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"touchscreenControllerType0\">Sempre ativo</string>\n "
},
{
"path": "android-project/thextech/src/main/res/values-pt/strings.xml",
"chars": 3943,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"setup_disable_sound\">Desativar som</string>\n <st"
},
{
"path": "android-project/thextech/src/main/res/values-pt-rBR/arrays.xml",
"chars": 1047,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"speedRunMode0\">Desligado</string>\n <string name="
},
{
"path": "android-project/thextech/src/main/res/values-pt-rBR/strings.xml",
"chars": 3960,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"start_game_button\">Iniciar jogo</string>\n <strin"
},
{
"path": "android-project/thextech/src/main/res/values-ru-rRU/arrays.xml",
"chars": 1110,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"touchscreenControllerType0\">Всегда включать</string"
},
{
"path": "android-project/thextech/src/main/res/values-ru-rRU/strings.xml",
"chars": 3980,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"title_activity_game_settings\">Настройки игры</strin"
},
{
"path": "android-project/thextech/src/main/res/values-ta/arrays.xml",
"chars": 1098,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"touchscreenControllerType1\">வன்பொருள் விசைப்பலகை செ"
},
{
"path": "android-project/thextech/src/main/res/values-ta/strings.xml",
"chars": 4148,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"title_activity_game_settings\">விளையாட்டு அமைப்புகள்"
},
{
"path": "android-project/thextech/src/main/res/values-tr/arrays.xml",
"chars": 1047,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"touchscreenControllerType0\">Her zaman açık</string>"
},
{
"path": "android-project/thextech/src/main/res/values-tr/strings.xml",
"chars": 3781,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"launcher_no_resources_question\">Bu oyunun çalışması"
},
{
"path": "android-project/thextech/src/main/res/values-uk/arrays.xml",
"chars": 1030,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"touchscreenControllerType0\">Завжди вмикати</string>"
},
{
"path": "android-project/thextech/src/main/res/values-uk/strings.xml",
"chars": 3562,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"title_activity_game_settings\">Налаштування гри</str"
},
{
"path": "android-project/thextech/src/main/res/values-zh-rCN/arrays.xml",
"chars": 841,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"touchscreenControllerType0\">启用</string>\n <string"
},
{
"path": "android-project/thextech/src/main/res/values-zh-rCN/strings.xml",
"chars": 2665,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"title_activity_game_settings\">游戏设置</string>\n <st"
},
{
"path": "android-project/thextech/src/main/res/values-zh-rTW/arrays.xml",
"chars": 840,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"touchscreenControllerType0\">啓用</string>\n <string"
},
{
"path": "android-project/thextech/src/main/res/values-zh-rTW/strings.xml",
"chars": 2666,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"setup_control_cat\">虛擬按鍵</string>\n <string name=\""
},
{
"path": "android-project/thextech/src/main/res/xml/root_preferences.xml",
"chars": 2487,
"preview": "<PreferenceScreen xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:app=\"http://schemas.android.com/a"
},
{
"path": "changelog.txt",
"chars": 80667,
"preview": "TheXTech Changelog.\r\n\r\nChangelog for 1.3.8-dev\r\n-Unstable changes will go here for testing during the 1.3.7.x release li"
},
{
"path": "cmake/TargetArch.cmake",
"chars": 6576,
"preview": "# Based on the Qt 5 processor detection code, so should be very accurate\n# https://qt.gitorious.org/qt/qtbase/blobs/mast"
},
{
"path": "cmake/build_props.cmake",
"chars": 19054,
"preview": "# ============================ Generic setup ==================================\n# If platform is Emscripten\nif(${CMAKE_S"
},
{
"path": "cmake/ci_linux_gcc_toolchain_arm64.cmake",
"chars": 565,
"preview": "set(CMAKE_SYSTEM_NAME Linux)\n\nset(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc)\nset(CMAKE_CXX_COMPILER /usr/bin/aarch"
},
{
"path": "cmake/ci_linux_gcc_toolchain_armhf.cmake",
"chars": 574,
"preview": "set(CMAKE_SYSTEM_NAME Linux)\n\nset(CMAKE_C_COMPILER /usr/bin/arm-linux-gnueabihf-gcc)\nset(CMAKE_CXX_COMPILER /usr/bin/arm"
},
{
"path": "cmake/ci_linux_gcc_toolchain_x32.cmake",
"chars": 413,
"preview": "set(CMAKE_SYSTEM_NAME Linux)\n\nset(CMAKE_C_COMPILER gcc)\nset(CMAKE_C_FLAGS -m32)\nset(CMAKE_CXX_COMPILER g++)\nset(CMAKE_CX"
},
{
"path": "cmake/ci_windows_mingw_toolchain_x32.cmake",
"chars": 404,
"preview": "set(CMAKE_SYSROOT \"C:/WohlMinGWw64/mingw32/\")\n\nset(CMAKE_SYSTEM_PREFIX_PATH \"C:/WohlMinGWw64/mingw32/\")\n\nset(CMAKE_C_COM"
},
{
"path": "cmake/ci_windows_mingw_toolchain_x64.cmake",
"chars": 404,
"preview": "set(CMAKE_SYSROOT \"C:/WohlMinGWw64/mingw64/\")\n\nset(CMAKE_SYSTEM_PREFIX_PATH \"C:/WohlMinGWw64/mingw64/\")\n\nset(CMAKE_C_COM"
},
{
"path": "cmake/ci_windows_msvc_toolchain_arm64.cmake",
"chars": 72,
"preview": "set(CMAKE_MSVC_RUNTIME_LIBRARY \"MultiThreaded$<$<CONFIG:Debug>:Debug>\")\n"
},
{
"path": "cmake/deploy.cmake",
"chars": 2220,
"preview": "set(CPACK_PACKAGE_VENDOR \"Wohlstand\")\nset(CPACK_PACKAGE_CONTACT \"admin@wohlnet.ru\")\nset(CPACK_PACKAGE_VERSION \"${THEXTEC"
},
{
"path": "cmake/git_info.cmake",
"chars": 1757,
"preview": "# Get the current working branch\nset(OVERRIDE_GIT_BRANCH \"\" CACHE STRING \"Override name of GIT branch\")\n\n# Identify the "
},
{
"path": "cmake/git_version.cmake",
"chars": 810,
"preview": "# adds a custom target for git version (always built)\nadd_custom_target(git_version ALL)\n\n# Report about improperly use "
},
{
"path": "cmake/git_version_update.cmake",
"chars": 2162,
"preview": "# Get the current working branch\nset(OVERRIDE_GIT_BRANCH \"\" CACHE STRING \"Override name of GIT branch\")\n\nif(OVERRIDE_GIT"
},
{
"path": "cmake/icon.desktop.in",
"chars": 996,
"preview": "[Desktop Entry]\nName=@DESKTOP_NAME@\nGenericName=@DESKTOP_GENERIC_NAME@\nComment=@DESKTOP_COMMENT@\nEncoding=UTF-8\nVersion="
},
{
"path": "cmake/library_FreeImage.cmake",
"chars": 3920,
"preview": "# FreeImage is an image management library\n\nadd_library(PGE_FreeImage INTERFACE)\n\nif(NINTENDO_SWITCH)\n set(USE_FREEIM"
},
{
"path": "cmake/library_FreeType.cmake",
"chars": 3215,
"preview": "option(FREETYPE_PIC \"Enable -fPIC flag for libFreeType\" ON)\n\nif(VITA OR NINTENDO_SWITCH OR NINTENDO_3DS OR NINTENDO_WII "
},
{
"path": "cmake/library_HarfBuzz.cmake",
"chars": 1787,
"preview": "# HarfBuzz is a text shaping engine\n\noption(HARFBUZZ_PIC \"Enable -fPIC flag for libHarfBuzz\" ON)\n\nif(VITA)\n set(HARFB"
},
{
"path": "cmake/library_SDLMixerX.cmake",
"chars": 14368,
"preview": "\n# Note: You must also include \"library_AudioCodecs.cmake\" too!\n\nadd_library(PGE_SDLMixerX INTERFACE)\nadd_library"
},
{
"path": "cmake/library_discord_rpc.cmake",
"chars": 2491,
"preview": "add_library(PGE_DiscordRPC INTERFACE)\n\nif(WIN32)\n if(\"${TARGET_PROCESSOR}\" STREQUAL \"i386\" OR \"${TARGET_PROCESSOR}\" S"
},
{
"path": "cmake/library_glew.cmake",
"chars": 1938,
"preview": "add_library(PGE_GLEW INTERFACE)\n\n# GLEW is only used for the Windows builds\nif(WIN32)\n set(GLEW_SUPPORTED ON)\nelse()\n"
},
{
"path": "cmake/library_luabind.cmake",
"chars": 1465,
"preview": "\n# Note: You must also include \"library_luajit.cmake\" too!\n\nadd_library(PGE_LuaBind INTERFACE)\n\nif(PGE_USE_LUAJIT)\n s"
},
{
"path": "cmake/library_luajit.cmake",
"chars": 4545,
"preview": "add_library(PGE_LuaJIT INTERFACE)\n\nset(PGE_USE_LUAJIT_ENABLED_BY_DEFAULT ON)\nif(EMSCRIPTEN)\n # Disable LuaJIT for uns"
},
{
"path": "cmake/library_syslibs.cmake",
"chars": 3198,
"preview": "# In this file all the generic platform specific system libraries should be listed\n\nset(THEXTECH_SYSLIBS)\n\nif(WIN32 AND "
},
{
"path": "cmake/library_zlib.cmake",
"chars": 720,
"preview": "\nif(NINTENDO_SWITCH OR XTECH_MACOSX_TIGER)\n set(PGE_SYSTEM_ZLIB_DEFAULT ON)\nelse()\n set(PGE_SYSTEM_ZLIB_DEFAULT OF"
},
{
"path": "cmake/ndk-stl-config.cmake",
"chars": 1324,
"preview": "# Copy shared STL files to Android Studio output directory so they can be\n# packaged in the APK.\n# Usage:\n#\n# find_pac"
},
{
"path": "cmake/overlays-16m.ld",
"chars": 2161,
"preview": "/*--------------------------------------------------------------------------------\n ** Example linker script for ARM9"
},
{
"path": "cmake/package_switch.cmake",
"chars": 830,
"preview": "find_program(NACPTOOL nacptool REQUIRED)\nmessage(\"-- napctool found: ${NACPTOOL}\")\n\nfind_program(ELF2NRO elf2nro REQUIRE"
},
{
"path": "cmake/package_vita.cmake",
"chars": 1782,
"preview": "\nset(VITA_APP_NAME \"TheXTech ${THEXTECH_VERSION_STRING}\")\nset(VITA_TITLEID \"THEXTECH0\")\n\nset(VITA_VERSION \"${THEXTECH_VE"
},
{
"path": "cmake/vita_buildprops.cmake",
"chars": 1640,
"preview": "message(\"Set CMAKE Flags for Vita.\")\ninclude(\"$ENV{VITASDK}/share/vita.cmake\" REQUIRED)\n\nif(POLICY CMP0077)\n cmake_po"
},
{
"path": "debian/changelog",
"chars": 181,
"preview": "thextech-smbx (1.3.6-1ppa0) oneiric; urgency=low\n\n * All changes shown at the included changelog.txt file\n\n -- Vitaly N"
},
{
"path": "debian/control",
"chars": 408,
"preview": "Source: thextech-smbx\nSection: games\nPriority: optional\nMaintainer: Vitaly Novichkov <admin@wohlnet.ru>\nBuild-Depends: c"
},
{
"path": "debian/copyright",
"chars": 882,
"preview": "####################################################################\n# thextech-smbx "
},
{
"path": "debian/rules",
"chars": 1126,
"preview": "#!/usr/bin/make -f\n\nBUILDDIR = build_dir\n\n# secondly called by launchpad\nbuild:\n\tmkdir $(BUILDDIR);\n\tcd $(BUILDDIR); cma"
},
{
"path": "docs/README_3DS.md",
"chars": 2768,
"preview": "# About TheXTech & its Nintendo 3DS Port\n\nTheXTech is an open-source rewrite of Super Mario Bros X. in C/++.\nThe origina"
},
{
"path": "docs/README_DSI.md",
"chars": 2303,
"preview": "# About TheXTech & its Nintendo DSi Port\n\nTheXTech is an open-source rewrite of Super Mario Bros X. in C++.\nThe original"
},
{
"path": "docs/README_SWITCH.md",
"chars": 1433,
"preview": "# About TheXTech & its Nintendo Switch Port\n\nTheXTech is an open-source rewrite of Super Mario Bros X. in C/++.\nThe orig"
},
{
"path": "docs/README_VITA.ESP.md",
"chars": 178,
"preview": "# Acerca de TheXTech y su puerto para Vita\n\n<La traducción aún está en desarrollo, lea la versión en inglés en el archiv"
},
{
"path": "docs/README_VITA.RUS.md",
"chars": 157,
"preview": "# О TheXTech и его порте под Vita\n\n<Перевод ещё в разработке, пожалуйста, почитайте пока английскую версию в файле READM"
},
{
"path": "docs/README_VITA.md",
"chars": 2503,
"preview": "# About TheXTech & its Vita Port\n\nTheXTech is an open-source rewrite of Super Mario Bros X. in C/++.\nThe original was wr"
},
{
"path": "docs/README_WII.md",
"chars": 2253,
"preview": "# About TheXTech & its Nintendo Wii Port\n\nTheXTech is an open-source rewrite of Super Mario Bros X. in C/++.\nThe origina"
},
{
"path": "docs/README_WIIU.md",
"chars": 5329,
"preview": "# About TheXTech & its Nintendo Wii U Port\n\nTheXTech is an open-source rewrite of Super Mario Bros X. in C/++.\nThe origi"
},
{
"path": "docs/editor.ini",
"chars": 35867,
"preview": "[exit-codes]\nany = \"Any\"\nnone = \"None\"\ncode1 = \"Roulette\"\ncode2 = \"Orb #16\"\ncode3 = \"Leave\"\ncode4 = \"Key\"\ncode5 = \"Orb #"
},
{
"path": "fastlane/metadata/android/en-GB/changelogs/1030700.txt",
"chars": 496,
"preview": "This is a large update. We worked long and hard on this update, and we finally ready to present this big update for you "
},
{
"path": "fastlane/metadata/android/en-GB/changelogs/1030701.txt",
"chars": 371,
"preview": "This update features a lot of platform-related improvements and stabilisation. Since this update the exclusive full-scre"
},
{
"path": "fastlane/metadata/android/en-GB/full_description.txt",
"chars": 944,
"preview": "This is a game engine for platforming games. This is a complete and extended port of source code of the SMBX 1.3 game en"
},
{
"path": "fastlane/metadata/android/en-GB/short_description.txt",
"chars": 25,
"preview": "2D-platformer game engine"
},
{
"path": "fastlane/metadata/android/en-GB/title.txt",
"chars": 9,
"preview": "TheXTech\n"
},
{
"path": "fastlane/metadata/android/ru/full_description.txt",
"chars": 1153,
"preview": "Это игровой движок для игр-платформеров. Это полный и расширенный порт из исходного кода движка SMBX 1.3, который изнача"
},
{
"path": "fastlane/metadata/android/ru/short_description.txt",
"chars": 35,
"preview": "Игровой движок для 2D-платформеров\n"
},
{
"path": "lib/Allocator/Allocator.h",
"chars": 639,
"preview": "#ifndef ALLOCATOR_H\n#define ALLOCATOR_H\n\n#include <cstddef> // size_t\n\nclass Allocator\n{\nprotected:\n std::size_t m_to"
},
{
"path": "lib/Allocator/LICENSE",
"chars": 1093,
"preview": "MIT License\r\n\r\nCopyright (c) 2016 Mariano Trebino\r\n\r\nPermission is hereby granted, free of charge, to any person obtaini"
},
{
"path": "lib/Allocator/LinearAllocator.cpp",
"chars": 1666,
"preview": "#include \"LinearAllocator.h\"\n#include \"Utils.h\" /* CalculatePadding */\n#include <stdlib.h> /* malloc, free */\n#incl"
},
{
"path": "lib/Allocator/LinearAllocator.h",
"chars": 581,
"preview": "#ifndef LINEARALLOCATOR_H\n#define LINEARALLOCATOR_H\n\n#include \"Allocator.h\"\n\nclass LinearAllocator : public Allocator\n{\n"
},
{
"path": "lib/Allocator/PoolAllocator.cpp",
"chars": 4018,
"preview": "#include \"PoolAllocator.h\"\n#include <assert.h>\n#include <stdint.h>\n#include <stdlib.h> /* malloc, free */\n#include <"
},
{
"path": "lib/Allocator/PoolAllocator.h",
"chars": 988,
"preview": "#pragma once\n#ifndef POOL_ALLOCATOR_H\n#define POOL_ALLOCATOR_H\n\n#include <stdint.h>\n\n#include \"Allocator.h\"\n#include \"St"
},
{
"path": "lib/Allocator/README.md",
"chars": 19995,
"preview": "Stuff taken from the repository: https://github.com/mtrebi/memory-allocators\r\n\r\n<a href='http://www.recurse.com' title='"
},
{
"path": "lib/Allocator/StackLinkedList.h",
"chars": 753,
"preview": "#ifndef STACKLINKEDLIST_H\n#define STACKLINKEDLIST_H\n\n#include <stddef.h>\n\ntemplate <class T>\nclass StackLinkedList\n{\npub"
},
{
"path": "lib/Allocator/StackLinkedListImpl.h",
"chars": 798,
"preview": "#pragma once\n#ifndef STACK_LINKED_LIST_IMPL_H\n#define STACK_LINKED_LIST_IMPL_H\n\n#include \"StackLinkedList.h\"\n\ntemplate <"
},
{
"path": "lib/Allocator/Utils.h",
"chars": 1227,
"preview": "#ifndef UTILS_H\n#define UTILS_H\n\n#include <cstddef>\n\nclass Utils\n{\npublic:\n static std::size_t CalculatePadding(const"
},
{
"path": "lib/Allocator/linear-allocator.cmake",
"chars": 146,
"preview": "include_directories(${CMAKE_CURRENT_LIST_DIR})\n\nset(LINALLOC_SRCS)\n\nlist(APPEND LINALLOC_SRCS\n ${CMAKE_CURRENT_LIST_D"
},
{
"path": "lib/Allocator/pool-allocator.cmake",
"chars": 334,
"preview": "include_directories(${CMAKE_CURRENT_LIST_DIR})\n\nset(POOLALLOC_SRCS)\n\nlist(APPEND POOLALLOC_SRCS\n ${CMAKE_CURRENT_LIST"
},
{
"path": "lib/AppPath/app_path.cmake",
"chars": 2089,
"preview": "set(APPPATH_SRCS)\n\nlist(APPEND APPPATH_SRCS\n ${CMAKE_CURRENT_LIST_DIR}/app_path.h\n ${CMAKE_CURRENT_LIST_DIR}/priva"
},
{
"path": "lib/AppPath/app_path.h",
"chars": 7543,
"preview": "/*\n * Moondust, a free game engine for platform game making\n * Copyright (c) 2014-2026 Vitaly Novichkov <admin@wohlnet.r"
},
{
"path": "lib/AppPath/private/app_path.cpp",
"chars": 9854,
"preview": "/*\n * TheXTech - A platform game engine ported from old source code for VB6\n *\n * Copyright (c) 2009-2011 Andrew Spinks,"
},
{
"path": "lib/AppPath/private/app_path_16m.cpp",
"chars": 3206,
"preview": "/*\n * Moondust, a free game engine for platform game making\n * Copyright (c) 2014-2026 Vitaly Novichkov <admin@wohlnet.r"
},
{
"path": "lib/AppPath/private/app_path_3ds.cpp",
"chars": 5720,
"preview": "/*\n * Moondust, a free game engine for platform game making\n * Copyright (c) 2014-2026 Vitaly Novichkov <admin@wohlnet.r"
},
{
"path": "lib/AppPath/private/app_path_android.cpp",
"chars": 6814,
"preview": "/*\n * Moondust, a free game engine for platform game making\n * Copyright (c) 2014-2026 Vitaly Novichkov <admin@wohlnet.r"
},
{
"path": "lib/AppPath/private/app_path_emscripten.cpp",
"chars": 5021,
"preview": "/*\n * Moondust, a free game engine for platform game making\n * Copyright (c) 2014-2026 Vitaly Novichkov <admin@wohlnet.r"
},
{
"path": "lib/AppPath/private/app_path_macos.cpp",
"chars": 7226,
"preview": "/*\n * Moondust, a free game engine for platform game making\n * Copyright (c) 2014-2026 Vitaly Novichkov <admin@wohlnet.r"
},
{
"path": "lib/AppPath/private/app_path_macos_dirs.h",
"chars": 1053,
"preview": "/*\n * Moondust, a free game engine for platform game making\n * Copyright (c) 2014-2026 Vitaly Novichkov <admin@wohlnet.r"
},
{
"path": "lib/AppPath/private/app_path_macos_dirs.m",
"chars": 3038,
"preview": "/*\n * Moondust, a free game engine for platform game making\n * Copyright (c) 2014-2026 Vitaly Novichkov <admin@wohlnet.r"
},
{
"path": "lib/AppPath/private/app_path_old.cpp",
"chars": 17883,
"preview": "/*\n * TheXTech - A platform game engine ported from old source code for VB6\n *\n * Copyright (c) 2009-2011 Andrew Spinks,"
},
{
"path": "lib/AppPath/private/app_path_private.h",
"chars": 3354,
"preview": "/*\n * Moondust, a free game engine for platform game making\n * Copyright (c) 2014-2026 Vitaly Novichkov <admin@wohlnet.r"
},
{
"path": "lib/AppPath/private/app_path_skeleton.cpp",
"chars": 3002,
"preview": "/*\n * Moondust, a free game engine for platform game making\n * Copyright (c) 2014-2026 Vitaly Novichkov <admin@wohlnet.r"
},
{
"path": "lib/AppPath/private/app_path_switch.cpp",
"chars": 2984,
"preview": "/*\n * Moondust, a free game engine for platform game making\n * Copyright (c) 2014-2026 Vitaly Novichkov <admin@wohlnet.r"
}
]
// ... and 699 more files (download for full content)
About this extraction
This page contains the full source code of the Wohlstand/TheXTech GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 899 files (10.9 MB), approximately 2.9M tokens, and a symbol index with 6498 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.