Full Code of CommitteeOfZero/impacto for AI

master 27048056eb0b cached
1240 files
7.0 MB
1.9M tokens
5346 symbols
1 requests
Download .txt
Showing preview only (7,613K chars total). Download the full file or copy to clipboard to get everything.
Repository: CommitteeOfZero/impacto
Branch: master
Commit: 27048056eb0b
Files: 1240
Total size: 7.0 MB

Directory structure:
gitextract__xh7dyft/

├── .clang-format
├── .gitattributes
├── .github/
│   └── workflows/
│       ├── docker-switch.yml
│       ├── impacto.yml
│       ├── notify.yml
│       └── publish.yml
├── .gitignore
├── CMakeLists.txt
├── CMakePresets.json
├── HorizonNX.toolchain
├── LICENSE
├── README.md
├── THIRDPARTY.md
├── VERSION
├── android/
│   ├── .gitignore
│   ├── .run/
│   │   └── app.run.xml
│   ├── README.md
│   ├── app/
│   │   ├── build.gradle
│   │   ├── proguard-rules.pro
│   │   ├── signing/
│   │   │   ├── .gitignore
│   │   │   ├── external.jks
│   │   │   └── external.properties
│   │   ├── signing.gradle
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           ├── java/
│   │           │   ├── com/
│   │           │   │   └── committeeofzero/
│   │           │   │       └── impacto/
│   │           │   │           └── ImpactoActivity.java
│   │           │   └── org/
│   │           │       └── libsdl/
│   │           │           └── app/
│   │           │               ├── HIDDevice.java
│   │           │               ├── HIDDeviceBLESteamController.java
│   │           │               ├── HIDDeviceManager.java
│   │           │               ├── HIDDeviceUSB.java
│   │           │               ├── SDL.java
│   │           │               ├── SDLActivity.java
│   │           │               ├── SDLAudioManager.java
│   │           │               ├── SDLControllerManager.java
│   │           │               └── SDLSurface.java
│   │           └── res/
│   │               └── values/
│   │                   ├── colors.xml
│   │                   ├── strings.xml
│   │                   └── styles.xml
│   ├── build.gradle
│   ├── buildDebug.bat
│   ├── gradle/
│   │   └── wrapper/
│   │       ├── gradle-wrapper.jar
│   │       └── gradle-wrapper.properties
│   ├── gradle.properties
│   ├── gradlew
│   ├── gradlew.bat
│   ├── installDebug.bat
│   └── settings.gradle
├── build-deps.ps1
├── doc/
│   ├── contributor_guide.md
│   ├── font-lb/
│   │   ├── CompoundCharacters.tbl
│   │   ├── RobonoCharset.utf8
│   │   └── font-lb.md
│   ├── getting_started.md
│   ├── ubuntu_build.md
│   └── vs_build.md
├── docker/
│   ├── impacto-emscripten/
│   │   ├── Dockerfile
│   │   ├── build_emscripten.sh
│   │   └── libatrac9-emscripten.mk
│   └── impacto-switch/
│       └── Dockerfile
├── games/
│   ├── cc/
│   │   └── .gitkeep
│   ├── chlcc/
│   │   └── .gitkeep
│   ├── rne/
│   │   └── .gitkeep
│   └── sg0/
│       └── .gitkeep
├── portfiles/
│   └── avcpp/
│       ├── 0002-av_init_packet_deprecation.patch
│       ├── portfile.cmake
│       └── vcpkg.json
├── profiles/
│   ├── cc/
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── dialogue.lua
│   │   ├── font-lb.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── systemmenu.lua
│   │   │   ├── tipsmenu.lua
│   │   │   ├── tipsnotification.lua
│   │   │   └── titlemenu.lua
│   │   ├── savedata.lua
│   │   ├── scriptvars.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   ├── vfs.lua
│   │   └── waveeffects.lua
│   ├── cclcc/
│   │   ├── bgeff.lua
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── configsystem.lua
│   │   ├── dialogue.lua
│   │   ├── font-lb-italic.lua
│   │   ├── font-lb.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── gamespecific.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── delusiontrigger.lua
│   │   │   ├── extramenus.lua
│   │   │   ├── helpmenu.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── optionsmenu.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── savemenu.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── systemmenu.lua
│   │   │   ├── tipsmenu.lua
│   │   │   ├── tipsnotification.lua
│   │   │   └── titlemenu.lua
│   │   ├── mapsystem.lua
│   │   ├── savedata.lua
│   │   ├── scriptinput.lua
│   │   ├── scriptvars.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   ├── vfs.lua
│   │   ├── waveeffects.lua
│   │   └── yesnotrigger.lua
│   ├── characterviewer/
│   │   ├── config.lua
│   │   └── game.lua
│   ├── chlcc/
│   │   ├── achievementsystem.lua
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── dialogue.lua
│   │   ├── font-lb.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── gamespecific.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── commonmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── delusiontrigger.lua
│   │   │   ├── extramenus.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── optionsmenu.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── savemenu.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── systemmenu.lua
│   │   │   ├── tipsmenu.lua
│   │   │   ├── tipsnotification.lua
│   │   │   ├── titlemenu.lua
│   │   │   └── trophymenu.lua
│   │   ├── savedata.lua
│   │   ├── scriptinput.lua
│   │   ├── scriptvars.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   ├── vfs.lua
│   │   └── waveeffects.lua
│   ├── chn/
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── dialogue.lua
│   │   ├── font-lb.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── systemmenu.lua
│   │   │   ├── tipsmenu.lua
│   │   │   ├── tipsnotification.lua
│   │   │   └── titlemenu.lua
│   │   ├── savedata.lua
│   │   ├── scriptvars.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   └── vfs.lua
│   ├── common/
│   │   ├── animation.lua
│   │   ├── charset.lua
│   │   ├── scriptinput.lua
│   │   └── scriptvars.lua
│   ├── darling/
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── dialogue.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── systemmenu.lua
│   │   │   ├── tipsmenu.lua
│   │   │   ├── tipsnotification.lua
│   │   │   └── titlemenu.lua
│   │   ├── savedata.lua
│   │   ├── scriptvars.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   └── vfs.lua
│   ├── dash/
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── dialogue.lua
│   │   ├── font-lb.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── gamespecific.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── systemmenu.lua
│   │   │   ├── tipsmenu.lua
│   │   │   ├── tipsnotification.lua
│   │   │   └── titlemenu.lua
│   │   ├── savedata.lua
│   │   ├── scene3d/
│   │   │   ├── characters.lua
│   │   │   └── scene3d.lua
│   │   ├── scriptvars.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   └── vfs.lua
│   ├── mo6tw/
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── dialogue.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── extramenus.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── optionsmenu.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── savemenu.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── systemmenu.lua
│   │   │   ├── tipsmenu.lua
│   │   │   ├── tipsnotification.lua
│   │   │   └── titlemenu.lua
│   │   ├── savedata.lua
│   │   ├── scriptinput.lua
│   │   ├── scriptvars.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   └── vfs.lua
│   ├── mo7/
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── dialogue.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── tipsmenu.lua
│   │   │   └── tipsnotification.lua
│   │   ├── savedata.lua
│   │   ├── scriptvars.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   └── vfs.lua
│   ├── mo8/
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── dialogue.lua
│   │   ├── font-lb.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── optionsmenu.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── savemenu.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── systemmenu.lua
│   │   │   ├── tipsmenu.lua
│   │   │   ├── tipsnotification.lua
│   │   │   └── titlemenu.lua
│   │   ├── savedata.lua
│   │   ├── scriptvars.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   └── vfs.lua
│   ├── modelviewer/
│   │   ├── config.lua
│   │   └── game.lua
│   ├── modelviewer-dash/
│   │   ├── config.lua
│   │   └── game.lua
│   ├── rne/
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── dialogue.lua
│   │   ├── font-lb.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── gamespecific.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── systemmenu.lua
│   │   │   ├── tipsmenu.lua
│   │   │   ├── tipsnotification.lua
│   │   │   └── titlemenu.lua
│   │   ├── savedata.lua
│   │   ├── scene3d/
│   │   │   ├── characters.lua
│   │   │   └── scene3d.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   └── vfs.lua
│   └── sgps3/
│       ├── charset.lua
│       ├── config.lua
│       ├── dialogue.lua
│       ├── font.lua
│       ├── game.lua
│       ├── hud/
│       │   ├── backlogmenu.lua
│       │   ├── datedisplay.lua
│       │   ├── loadingdisplay.lua
│       │   ├── saveicon.lua
│       │   ├── selectiondisplay.lua
│       │   ├── sysmesboxdisplay.lua
│       │   ├── systemmenu.lua
│       │   ├── tipsmenu.lua
│       │   ├── tipsnotification.lua
│       │   └── titlemenu.lua
│       ├── savedata.lua
│       ├── scriptvars.lua
│       ├── sprites.lua
│       ├── tipssystem.lua
│       └── vfs.lua
├── src/
│   ├── animation.cpp
│   ├── animation.h
│   ├── audio/
│   │   ├── adxaudiostream.cpp
│   │   ├── adxaudiostream.h
│   │   ├── atrac9audiostream.cpp
│   │   ├── atrac9audiostream.h
│   │   ├── audiobackend.h
│   │   ├── audiochannel.cpp
│   │   ├── audiochannel.h
│   │   ├── audiocommon.h
│   │   ├── audiostream.cpp
│   │   ├── audiostream.h
│   │   ├── audiosystem.cpp
│   │   ├── audiosystem.h
│   │   ├── buffering.h
│   │   ├── ffmpegaudioplayer.h
│   │   ├── hcaaudiostream.cpp
│   │   ├── hcaaudiostream.h
│   │   ├── openal/
│   │   │   ├── audiobackend.cpp
│   │   │   ├── audiobackend.h
│   │   │   ├── audiocommon.h
│   │   │   ├── ffmpegaudioplayer.cpp
│   │   │   ├── ffmpegaudioplayer.h
│   │   │   ├── openalaudiochannel.cpp
│   │   │   └── openalaudiochannel.h
│   │   ├── vorbisaudiostream.cpp
│   │   └── vorbisaudiostream.h
│   ├── background2d.cpp
│   ├── background2d.h
│   ├── character2d.cpp
│   ├── character2d.h
│   ├── characterviewer.cpp
│   ├── characterviewer.h
│   ├── config.h.in
│   ├── data/
│   │   ├── achievementsystem.cpp
│   │   ├── achievementsystem.h
│   │   ├── achievementsystemps3.cpp
│   │   ├── achievementsystemps3.h
│   │   ├── savesystem.cpp
│   │   ├── savesystem.h
│   │   ├── tipssystem.cpp
│   │   └── tipssystem.h
│   ├── debugmenu.cpp
│   ├── debugmenu.h
│   ├── effects/
│   │   ├── blur.cpp
│   │   ├── blur.h
│   │   ├── chlcc/
│   │   │   ├── bubbleseffect.cpp
│   │   │   ├── bubbleseffect.h
│   │   │   ├── butterflyeffect.cpp
│   │   │   ├── butterflyeffect.h
│   │   │   ├── eyecatch.cpp
│   │   │   └── eyecatch.h
│   │   ├── mosaic.cpp
│   │   ├── mosaic.h
│   │   ├── wave.cpp
│   │   └── wave.h
│   ├── font.h
│   ├── game.cpp
│   ├── game.h
│   ├── games/
│   │   ├── cc/
│   │   │   ├── backlogmenu.cpp
│   │   │   ├── backlogmenu.h
│   │   │   ├── sysmesbox.cpp
│   │   │   ├── sysmesbox.h
│   │   │   ├── titlemenu.cpp
│   │   │   └── titlemenu.h
│   │   ├── cclcc/
│   │   │   ├── albummenu.cpp
│   │   │   ├── albummenu.h
│   │   │   ├── clearlistmenu.cpp
│   │   │   ├── clearlistmenu.h
│   │   │   ├── delusiontrigger.cpp
│   │   │   ├── delusiontrigger.h
│   │   │   ├── helpmenu.cpp
│   │   │   ├── helpmenu.h
│   │   │   ├── librarymenu.cpp
│   │   │   ├── librarymenu.h
│   │   │   ├── librarysubmenus.cpp
│   │   │   ├── librarysubmenus.h
│   │   │   ├── mapsystem.cpp
│   │   │   ├── mapsystem.h
│   │   │   ├── moviemenu.cpp
│   │   │   ├── moviemenu.h
│   │   │   ├── musicmenu.cpp
│   │   │   ├── musicmenu.h
│   │   │   ├── optionsmenu.cpp
│   │   │   ├── optionsmenu.h
│   │   │   ├── savemenu.cpp
│   │   │   ├── savemenu.h
│   │   │   ├── savesystem.cpp
│   │   │   ├── savesystem.h
│   │   │   ├── systemmenu.cpp
│   │   │   ├── systemmenu.h
│   │   │   ├── tipsmenu.cpp
│   │   │   ├── tipsmenu.h
│   │   │   ├── tipssystem.cpp
│   │   │   ├── tipssystem.h
│   │   │   ├── titlemenu.cpp
│   │   │   ├── titlemenu.h
│   │   │   ├── yesnotrigger.cpp
│   │   │   └── yesnotrigger.h
│   │   ├── chlcc/
│   │   │   ├── albummenu.cpp
│   │   │   ├── albummenu.h
│   │   │   ├── animations/
│   │   │   │   ├── menutransition.cpp
│   │   │   │   ├── menutransition.h
│   │   │   │   ├── saveicon.cpp
│   │   │   │   ├── saveicon.h
│   │   │   │   ├── selectprompt.cpp
│   │   │   │   └── selectprompt.h
│   │   │   ├── backlogmenu.cpp
│   │   │   ├── backlogmenu.h
│   │   │   ├── clearlistmenu.cpp
│   │   │   ├── clearlistmenu.h
│   │   │   ├── commonmenu.cpp
│   │   │   ├── commonmenu.h
│   │   │   ├── delusiontrigger.cpp
│   │   │   ├── delusiontrigger.h
│   │   │   ├── introsequence.cpp
│   │   │   ├── introsequence.h
│   │   │   ├── moviemenu.cpp
│   │   │   ├── moviemenu.h
│   │   │   ├── musicmenu.cpp
│   │   │   ├── musicmenu.h
│   │   │   ├── optionsmenu.cpp
│   │   │   ├── optionsmenu.h
│   │   │   ├── savemenu.cpp
│   │   │   ├── savemenu.h
│   │   │   ├── savesystem.cpp
│   │   │   ├── savesystem.h
│   │   │   ├── sysmesbox.cpp
│   │   │   ├── sysmesbox.h
│   │   │   ├── systemmenu.cpp
│   │   │   ├── systemmenu.h
│   │   │   ├── tipsmenu.cpp
│   │   │   ├── tipsmenu.h
│   │   │   ├── tipssystem.cpp
│   │   │   ├── tipssystem.h
│   │   │   ├── titlemenu.cpp
│   │   │   ├── titlemenu.h
│   │   │   ├── trophymenu.cpp
│   │   │   └── trophymenu.h
│   │   ├── darling/
│   │   │   ├── sysmesbox.cpp
│   │   │   └── sysmesbox.h
│   │   ├── dash/
│   │   │   ├── titlemenu.cpp
│   │   │   └── titlemenu.h
│   │   ├── mo6tw/
│   │   │   ├── actorsvoicemenu.cpp
│   │   │   ├── actorsvoicemenu.h
│   │   │   ├── albummenu.cpp
│   │   │   ├── albummenu.h
│   │   │   ├── backlogmenu.cpp
│   │   │   ├── backlogmenu.h
│   │   │   ├── clearlistmenu.cpp
│   │   │   ├── clearlistmenu.h
│   │   │   ├── moviemenu.cpp
│   │   │   ├── moviemenu.h
│   │   │   ├── musicmenu.cpp
│   │   │   ├── musicmenu.h
│   │   │   ├── optionsmenu.cpp
│   │   │   ├── optionsmenu.h
│   │   │   ├── savemenu.cpp
│   │   │   ├── savemenu.h
│   │   │   ├── savesystem.cpp
│   │   │   ├── savesystem.h
│   │   │   ├── sysmesbox.cpp
│   │   │   ├── sysmesbox.h
│   │   │   ├── systemmenu.cpp
│   │   │   ├── systemmenu.h
│   │   │   ├── tipsmenu.cpp
│   │   │   ├── tipsmenu.h
│   │   │   ├── tipssystem.cpp
│   │   │   ├── tipssystem.h
│   │   │   ├── titlemenu.cpp
│   │   │   └── titlemenu.h
│   │   ├── mo8/
│   │   │   ├── optionsmenu.cpp
│   │   │   ├── optionsmenu.h
│   │   │   ├── savemenu.cpp
│   │   │   ├── savemenu.h
│   │   │   ├── systemmenu.cpp
│   │   │   ├── systemmenu.h
│   │   │   ├── titlemenu.cpp
│   │   │   └── titlemenu.h
│   │   └── rne/
│   │       ├── sysmesbox.cpp
│   │       ├── sysmesbox.h
│   │       ├── systemmenu.cpp
│   │       ├── systemmenu.h
│   │       ├── tilebackground.cpp
│   │       ├── tilebackground.h
│   │       ├── titlemenu.cpp
│   │       └── titlemenu.h
│   ├── hud/
│   │   ├── autoicondisplay.cpp
│   │   ├── autoicondisplay.h
│   │   ├── cc/
│   │   │   ├── dialoguebox.cpp
│   │   │   ├── dialoguebox.h
│   │   │   ├── nametagdisplay.cpp
│   │   │   └── nametagdisplay.h
│   │   ├── cclcc/
│   │   │   ├── tipsnotification.cpp
│   │   │   └── tipsnotification.h
│   │   ├── chlcc/
│   │   │   ├── dialoguebox.cpp
│   │   │   ├── dialoguebox.h
│   │   │   ├── nametagdisplay.cpp
│   │   │   ├── nametagdisplay.h
│   │   │   ├── tipsnotification.cpp
│   │   │   └── tipsnotification.h
│   │   ├── datedisplay.cpp
│   │   ├── datedisplay.h
│   │   ├── defaultsaveiconanimation.cpp
│   │   ├── defaultsaveiconanimation.h
│   │   ├── dialoguebox.cpp
│   │   ├── dialoguebox.h
│   │   ├── loadingdisplay.cpp
│   │   ├── loadingdisplay.h
│   │   ├── mo6tw/
│   │   │   ├── dialoguebox.cpp
│   │   │   ├── dialoguebox.h
│   │   │   ├── tipsnotification.cpp
│   │   │   └── tipsnotification.h
│   │   ├── nametagdisplay.cpp
│   │   ├── nametagdisplay.h
│   │   ├── rne/
│   │   │   ├── datedisplay.cpp
│   │   │   └── datedisplay.h
│   │   ├── saveicondisplay.cpp
│   │   ├── saveicondisplay.h
│   │   ├── skipicondisplay.cpp
│   │   ├── skipicondisplay.h
│   │   ├── tipsnotification.cpp
│   │   ├── tipsnotification.h
│   │   ├── waiticondisplay.cpp
│   │   └── waiticondisplay.h
│   ├── impacto.h
│   ├── inputsystem.cpp
│   ├── inputsystem.h
│   ├── io/
│   │   ├── afsarchive.cpp
│   │   ├── afsarchive.h
│   │   ├── assetpath.cpp
│   │   ├── assetpath.h
│   │   ├── buffering.h
│   │   ├── cpkarchive.cpp
│   │   ├── cpkarchive.h
│   │   ├── filemeta.cpp
│   │   ├── filemeta.h
│   │   ├── io.h
│   │   ├── lnk4archive.cpp
│   │   ├── lnk4archive.h
│   │   ├── lzxstream.cpp
│   │   ├── lzxstream.h
│   │   ├── memorymappedfilestream.cpp
│   │   ├── memorymappedfilestream.h
│   │   ├── memorystream.cpp
│   │   ├── memorystream.h
│   │   ├── mpkarchive.cpp
│   │   ├── mpkarchive.h
│   │   ├── physicalfilestream.cpp
│   │   ├── physicalfilestream.h
│   │   ├── stream.h
│   │   ├── textarchive.cpp
│   │   ├── textarchive.h
│   │   ├── uncompressedstream.cpp
│   │   ├── uncompressedstream.h
│   │   ├── vfs.cpp
│   │   ├── vfs.h
│   │   ├── vfsarchive.cpp
│   │   ├── vfsarchive.h
│   │   ├── zlibstream.cpp
│   │   └── zlibstream.h
│   ├── loadable.h
│   ├── log.cpp
│   ├── log.h
│   ├── main.cpp
│   ├── manifest_windows.manifest
│   ├── mask2d.cpp
│   ├── mask2d.h
│   ├── mem.cpp
│   ├── mem.h
│   ├── modelviewer.cpp
│   ├── modelviewer.h
│   ├── pch.h
│   ├── profile/
│   │   ├── animations.cpp
│   │   ├── animations.h
│   │   ├── charset.cpp
│   │   ├── charset.h
│   │   ├── configsystem.cpp
│   │   ├── configsystem.h
│   │   ├── data/
│   │   │   ├── achievementsystem.cpp
│   │   │   ├── achievementsystem.h
│   │   │   ├── bgeff.cpp
│   │   │   ├── bgeff.h
│   │   │   ├── savesystem.cpp
│   │   │   ├── savesystem.h
│   │   │   ├── tipssystem.cpp
│   │   │   ├── tipssystem.h
│   │   │   ├── waveeffects.cpp
│   │   │   └── waveeffects.h
│   │   ├── dialogue.cpp
│   │   ├── dialogue.h
│   │   ├── fonts.cpp
│   │   ├── fonts.h
│   │   ├── game.cpp
│   │   ├── game.h
│   │   ├── games/
│   │   │   ├── cc/
│   │   │   │   ├── backlogmenu.cpp
│   │   │   │   ├── backlogmenu.h
│   │   │   │   ├── dialoguebox.cpp
│   │   │   │   ├── dialoguebox.h
│   │   │   │   ├── sysmesbox.cpp
│   │   │   │   ├── sysmesbox.h
│   │   │   │   ├── titlemenu.cpp
│   │   │   │   └── titlemenu.h
│   │   │   ├── cclcc/
│   │   │   │   ├── clearlistmenu.cpp
│   │   │   │   ├── clearlistmenu.h
│   │   │   │   ├── delusiontrigger.cpp
│   │   │   │   ├── delusiontrigger.h
│   │   │   │   ├── helpmenu.cpp
│   │   │   │   ├── helpmenu.h
│   │   │   │   ├── librarymenu.cpp
│   │   │   │   ├── librarymenu.h
│   │   │   │   ├── mapsystem.cpp
│   │   │   │   ├── mapsystem.h
│   │   │   │   ├── optionsmenu.cpp
│   │   │   │   ├── optionsmenu.h
│   │   │   │   ├── savemenu.cpp
│   │   │   │   ├── savemenu.h
│   │   │   │   ├── systemmenu.cpp
│   │   │   │   ├── systemmenu.h
│   │   │   │   ├── tipsmenu.cpp
│   │   │   │   ├── tipsmenu.h
│   │   │   │   ├── tipsnotification.cpp
│   │   │   │   ├── tipsnotification.h
│   │   │   │   ├── titlemenu.cpp
│   │   │   │   ├── titlemenu.h
│   │   │   │   ├── yesnotrigger.cpp
│   │   │   │   └── yesnotrigger.h
│   │   │   ├── chlcc/
│   │   │   │   ├── albummenu.cpp
│   │   │   │   ├── albummenu.h
│   │   │   │   ├── backlogmenu.cpp
│   │   │   │   ├── backlogmenu.h
│   │   │   │   ├── clearlistmenu.cpp
│   │   │   │   ├── clearlistmenu.h
│   │   │   │   ├── commonmenu.cpp
│   │   │   │   ├── commonmenu.h
│   │   │   │   ├── delusiontrigger.cpp
│   │   │   │   ├── delusiontrigger.h
│   │   │   │   ├── dialoguebox.cpp
│   │   │   │   ├── dialoguebox.h
│   │   │   │   ├── moviemenu.cpp
│   │   │   │   ├── moviemenu.h
│   │   │   │   ├── musicmenu.cpp
│   │   │   │   ├── musicmenu.h
│   │   │   │   ├── optionsmenu.cpp
│   │   │   │   ├── optionsmenu.h
│   │   │   │   ├── savemenu.cpp
│   │   │   │   ├── savemenu.h
│   │   │   │   ├── sysmesbox.cpp
│   │   │   │   ├── sysmesbox.h
│   │   │   │   ├── systemmenu.cpp
│   │   │   │   ├── systemmenu.h
│   │   │   │   ├── tipsmenu.cpp
│   │   │   │   ├── tipsmenu.h
│   │   │   │   ├── tipsnotification.cpp
│   │   │   │   ├── tipsnotification.h
│   │   │   │   ├── titlemenu.cpp
│   │   │   │   ├── titlemenu.h
│   │   │   │   ├── trophymenu.cpp
│   │   │   │   └── trophymenu.h
│   │   │   ├── darling/
│   │   │   │   ├── sysmesbox.cpp
│   │   │   │   └── sysmesbox.h
│   │   │   ├── dash/
│   │   │   │   ├── titlemenu.cpp
│   │   │   │   └── titlemenu.h
│   │   │   ├── mo6tw/
│   │   │   │   ├── actorsvoicemenu.cpp
│   │   │   │   ├── actorsvoicemenu.h
│   │   │   │   ├── albummenu.cpp
│   │   │   │   ├── albummenu.h
│   │   │   │   ├── backlogmenu.cpp
│   │   │   │   ├── backlogmenu.h
│   │   │   │   ├── clearlistmenu.cpp
│   │   │   │   ├── clearlistmenu.h
│   │   │   │   ├── dialoguebox.cpp
│   │   │   │   ├── dialoguebox.h
│   │   │   │   ├── moviemenu.cpp
│   │   │   │   ├── moviemenu.h
│   │   │   │   ├── musicmenu.cpp
│   │   │   │   ├── musicmenu.h
│   │   │   │   ├── optionsmenu.cpp
│   │   │   │   ├── optionsmenu.h
│   │   │   │   ├── savemenu.cpp
│   │   │   │   ├── savemenu.h
│   │   │   │   ├── sysmesbox.cpp
│   │   │   │   ├── sysmesbox.h
│   │   │   │   ├── systemmenu.cpp
│   │   │   │   ├── systemmenu.h
│   │   │   │   ├── tipsmenu.cpp
│   │   │   │   ├── tipsmenu.h
│   │   │   │   ├── tipsnotification.cpp
│   │   │   │   ├── tipsnotification.h
│   │   │   │   ├── titlemenu.cpp
│   │   │   │   └── titlemenu.h
│   │   │   ├── mo8/
│   │   │   │   ├── optionsmenu.cpp
│   │   │   │   ├── optionsmenu.h
│   │   │   │   ├── savemenu.cpp
│   │   │   │   ├── savemenu.h
│   │   │   │   ├── systemmenu.cpp
│   │   │   │   ├── systemmenu.h
│   │   │   │   ├── titlemenu.cpp
│   │   │   │   └── titlemenu.h
│   │   │   └── rne/
│   │   │       ├── sysmesbox.cpp
│   │   │       ├── sysmesbox.h
│   │   │       ├── systemmenu.cpp
│   │   │       ├── systemmenu.h
│   │   │       ├── tilebackground.cpp
│   │   │       ├── tilebackground.h
│   │   │       ├── titlemenu.cpp
│   │   │       └── titlemenu.h
│   │   ├── hud/
│   │   │   ├── datedisplay.cpp
│   │   │   ├── datedisplay.h
│   │   │   ├── loadingdisplay.cpp
│   │   │   ├── loadingdisplay.h
│   │   │   ├── saveicon.cpp
│   │   │   ├── saveicon.h
│   │   │   ├── tipsnotification.cpp
│   │   │   └── tipsnotification.h
│   │   ├── profile.cpp
│   │   ├── profile.h
│   │   ├── profile_internal.cpp
│   │   ├── profile_internal.h
│   │   ├── scene3d.cpp
│   │   ├── scene3d.h
│   │   ├── scriptinput.cpp
│   │   ├── scriptinput.h
│   │   ├── scriptvars.cpp
│   │   ├── scriptvars.h
│   │   ├── sprites.cpp
│   │   ├── sprites.h
│   │   ├── subtitle.cpp
│   │   ├── subtitle.h
│   │   ├── ui/
│   │   │   ├── backlogmenu.cpp
│   │   │   ├── backlogmenu.h
│   │   │   ├── commonmenu.cpp
│   │   │   ├── commonmenu.h
│   │   │   ├── extramenus.cpp
│   │   │   ├── extramenus.h
│   │   │   ├── gamespecific.cpp
│   │   │   ├── gamespecific.h
│   │   │   ├── helpmenu.cpp
│   │   │   ├── helpmenu.h
│   │   │   ├── mapsystem.cpp
│   │   │   ├── mapsystem.h
│   │   │   ├── optionsmenu.cpp
│   │   │   ├── optionsmenu.h
│   │   │   ├── savemenu.cpp
│   │   │   ├── savemenu.h
│   │   │   ├── selectionmenu.cpp
│   │   │   ├── selectionmenu.h
│   │   │   ├── sysmesbox.cpp
│   │   │   ├── sysmesbox.h
│   │   │   ├── systemmenu.cpp
│   │   │   ├── systemmenu.h
│   │   │   ├── tipsmenu.cpp
│   │   │   ├── tipsmenu.h
│   │   │   ├── titlemenu.cpp
│   │   │   ├── titlemenu.h
│   │   │   ├── trophymenu.cpp
│   │   │   └── trophymenu.h
│   │   ├── vfs.cpp
│   │   ├── vfs.h
│   │   ├── vm.cpp
│   │   └── vm.h
│   ├── renderer/
│   │   ├── 3d/
│   │   │   ├── animation.cpp
│   │   │   ├── animation.h
│   │   │   ├── camera.cpp
│   │   │   ├── camera.h
│   │   │   ├── model.cpp
│   │   │   ├── model.h
│   │   │   ├── modelanimator.cpp
│   │   │   ├── modelanimator.h
│   │   │   ├── renderable3d.h
│   │   │   ├── scene.h
│   │   │   ├── transform.cpp
│   │   │   └── transform.h
│   │   ├── dx9/
│   │   │   ├── 3d/
│   │   │   │   ├── renderable3d.cpp
│   │   │   │   ├── renderable3d.h
│   │   │   │   ├── scene.cpp
│   │   │   │   └── scene.h
│   │   │   ├── nv12frame.cpp
│   │   │   ├── nv12frame.h
│   │   │   ├── renderer.cpp
│   │   │   ├── renderer.h
│   │   │   ├── shader.cpp
│   │   │   ├── shader.h
│   │   │   ├── utils.h
│   │   │   ├── window.cpp
│   │   │   ├── window.h
│   │   │   ├── yuvframe.cpp
│   │   │   └── yuvframe.h
│   │   ├── nv12frame.h
│   │   ├── opengl/
│   │   │   ├── 3d/
│   │   │   │   ├── renderable3d.cpp
│   │   │   │   ├── renderable3d.h
│   │   │   │   ├── scene.cpp
│   │   │   │   └── scene.h
│   │   │   ├── glc.cpp
│   │   │   ├── glc.h
│   │   │   ├── nv12frame.cpp
│   │   │   ├── nv12frame.h
│   │   │   ├── renderer.cpp
│   │   │   ├── renderer.h
│   │   │   ├── shader.cpp
│   │   │   ├── shader.h
│   │   │   ├── window.cpp
│   │   │   ├── window.h
│   │   │   ├── yuvframe.cpp
│   │   │   └── yuvframe.h
│   │   ├── renderer.cpp
│   │   ├── renderer.h
│   │   ├── vulkan/
│   │   │   ├── 3d/
│   │   │   │   ├── renderable3d.cpp
│   │   │   │   ├── renderable3d.h
│   │   │   │   ├── scene.cpp
│   │   │   │   └── scene.h
│   │   │   ├── nv12frame.cpp
│   │   │   ├── nv12frame.h
│   │   │   ├── pipeline.cpp
│   │   │   ├── pipeline.h
│   │   │   ├── renderer.cpp
│   │   │   ├── renderer.h
│   │   │   ├── utils.cpp
│   │   │   ├── utils.h
│   │   │   ├── window.cpp
│   │   │   ├── window.h
│   │   │   ├── yuvframe.cpp
│   │   │   └── yuvframe.h
│   │   ├── window.cpp
│   │   ├── window.h
│   │   └── yuvframe.h
│   ├── rng.h
│   ├── scriptvars.h
│   ├── sequencedanimation.cpp
│   ├── sequencedanimation.h
│   ├── shaders/
│   │   ├── dx9/
│   │   │   ├── CCMessageBoxSprite_frag.hlsl
│   │   │   ├── CCMessageBoxSprite_vert.hlsl
│   │   │   ├── CHLCCMenuBackground_frag.hlsl
│   │   │   ├── CHLCCMenuBackground_vert.hlsl
│   │   │   ├── MaskedSpriteNoAlpha_frag.hlsl
│   │   │   ├── MaskedSpriteNoAlpha_vert.hlsl
│   │   │   ├── MaskedSprite_frag.hlsl
│   │   │   ├── MaskedSprite_vert.hlsl
│   │   │   ├── NV12Frame_frag.hlsl
│   │   │   ├── NV12Frame_vert.hlsl
│   │   │   ├── Renderable3D_Background_frag.hlsl
│   │   │   ├── Renderable3D_Background_vert.hlsl
│   │   │   ├── Renderable3D_Character_frag.hlsl
│   │   │   ├── Renderable3D_Character_vert.hlsl
│   │   │   ├── Renderable3D_Eye_frag.hlsl
│   │   │   ├── Renderable3D_Eye_vert.hlsl
│   │   │   ├── Renderable3D_Outline_frag.hlsl
│   │   │   ├── Renderable3D_Outline_vert.hlsl
│   │   │   ├── Sprite_frag.hlsl
│   │   │   ├── Sprite_inverted_frag.hlsl
│   │   │   ├── Sprite_inverted_vert.hlsl
│   │   │   ├── Sprite_vert.hlsl
│   │   │   ├── YUVFrame_frag.hlsl
│   │   │   └── YUVFrame_vert.hlsl
│   │   ├── opengl/
│   │   │   ├── AdditiveMaskedSprite_frag.glsl
│   │   │   ├── AdditiveMaskedSprite_vert.glsl
│   │   │   ├── CCMessageBoxSprite_frag.glsl
│   │   │   ├── CCMessageBoxSprite_vert.glsl
│   │   │   ├── CHLCCMenuBackground_frag.glsl
│   │   │   ├── CHLCCMenuBackground_vert.glsl
│   │   │   ├── ColorBurnMaskedSprite_frag.glsl
│   │   │   ├── ColorBurnMaskedSprite_vert.glsl
│   │   │   ├── ColorDodgeMaskedSprite_frag.glsl
│   │   │   ├── ColorDodgeMaskedSprite_vert.glsl
│   │   │   ├── ColorMaskedSprite_frag.glsl
│   │   │   ├── ColorMaskedSprite_vert.glsl
│   │   │   ├── GaussianBlur_frag.glsl
│   │   │   ├── GaussianBlur_vert.glsl
│   │   │   ├── HardLightMaskedSprite_frag.glsl
│   │   │   ├── HardLightMaskedSprite_vert.glsl
│   │   │   ├── LinearBurnMaskedSprite_frag.glsl
│   │   │   ├── LinearBurnMaskedSprite_vert.glsl
│   │   │   ├── MaskedSpriteBinary_frag.glsl
│   │   │   ├── MaskedSpriteBinary_vert.glsl
│   │   │   ├── MaskedSpriteNoAlpha_frag.glsl
│   │   │   ├── MaskedSpriteNoAlpha_vert.glsl
│   │   │   ├── MaskedSprite_frag.glsl
│   │   │   ├── MaskedSprite_vert.glsl
│   │   │   ├── Mosaic_frag.glsl
│   │   │   ├── Mosaic_vert.glsl
│   │   │   ├── NV12Frame_frag.glsl
│   │   │   ├── NV12Frame_vert.glsl
│   │   │   ├── OverlayMaskedSprite_frag.glsl
│   │   │   ├── OverlayMaskedSprite_vert.glsl
│   │   │   ├── Renderable3D_Background_frag.glsl
│   │   │   ├── Renderable3D_Background_vert.glsl
│   │   │   ├── Renderable3D_Character_frag.glsl
│   │   │   ├── Renderable3D_Character_vert.glsl
│   │   │   ├── Renderable3D_Eye_frag.glsl
│   │   │   ├── Renderable3D_Eye_vert.glsl
│   │   │   ├── Renderable3D_Outline_frag.glsl
│   │   │   ├── Renderable3D_Outline_vert.glsl
│   │   │   ├── SceneToRT_frag.glsl
│   │   │   ├── SceneToRT_vert.glsl
│   │   │   ├── ScreenMaskedSprite_frag.glsl
│   │   │   ├── ScreenMaskedSprite_vert.glsl
│   │   │   ├── SoftLightMaskedSprite_frag.glsl
│   │   │   ├── SoftLightMaskedSprite_vert.glsl
│   │   │   ├── SpriteInverted_frag.glsl
│   │   │   ├── SpriteInverted_vert.glsl
│   │   │   ├── Sprite_frag.glsl
│   │   │   ├── Sprite_vert.glsl
│   │   │   ├── SubtitleGlyph_frag.glsl
│   │   │   ├── SubtitleGlyph_vert.glsl
│   │   │   ├── YUVFrame_frag.glsl
│   │   │   └── YUVFrame_vert.glsl
│   │   └── vulkan/
│   │       ├── CCMessageBoxSprite_frag.glsl
│   │       ├── CCMessageBoxSprite_frag.spv
│   │       ├── CCMessageBoxSprite_vert.glsl
│   │       ├── CCMessageBoxSprite_vert.spv
│   │       ├── CHLCCMenuBackground_frag.glsl
│   │       ├── CHLCCMenuBackground_frag.spv
│   │       ├── CHLCCMenuBackground_vert.glsl
│   │       ├── CHLCCMenuBackground_vert.spv
│   │       ├── MaskedSpriteNoAlpha_frag.glsl
│   │       ├── MaskedSpriteNoAlpha_frag.spv
│   │       ├── MaskedSpriteNoAlpha_vert.glsl
│   │       ├── MaskedSpriteNoAlpha_vert.spv
│   │       ├── MaskedSprite_frag.glsl
│   │       ├── MaskedSprite_frag.spv
│   │       ├── MaskedSprite_vert.glsl
│   │       ├── MaskedSprite_vert.spv
│   │       ├── NV12Frame_frag.glsl
│   │       ├── NV12Frame_frag.spv
│   │       ├── NV12Frame_vert.glsl
│   │       ├── NV12Frame_vert.spv
│   │       ├── Renderable3D_Background_frag.glsl
│   │       ├── Renderable3D_Background_frag.spv
│   │       ├── Renderable3D_Background_vert.glsl
│   │       ├── Renderable3D_Background_vert.spv
│   │       ├── Renderable3D_Character_frag.glsl
│   │       ├── Renderable3D_Character_frag.spv
│   │       ├── Renderable3D_Character_vert.glsl
│   │       ├── Renderable3D_Character_vert.spv
│   │       ├── Renderable3D_Eye_frag.glsl
│   │       ├── Renderable3D_Eye_frag.spv
│   │       ├── Renderable3D_Eye_vert.glsl
│   │       ├── Renderable3D_Eye_vert.spv
│   │       ├── Renderable3D_Outline_frag.glsl
│   │       ├── Renderable3D_Outline_frag.spv
│   │       ├── Renderable3D_Outline_vert.glsl
│   │       ├── Renderable3D_Outline_vert.spv
│   │       ├── Sprite_frag.glsl
│   │       ├── Sprite_frag.spv
│   │       ├── Sprite_inverted_frag.glsl
│   │       ├── Sprite_inverted_frag.spv
│   │       ├── Sprite_inverted_vert.glsl
│   │       ├── Sprite_inverted_vert.spv
│   │       ├── Sprite_vert.glsl
│   │       ├── Sprite_vert.spv
│   │       ├── YUVFrame_frag.glsl
│   │       ├── YUVFrame_frag.spv
│   │       ├── YUVFrame_vert.glsl
│   │       └── YUVFrame_vert.spv
│   ├── spriteanimation.cpp
│   ├── spriteanimation.h
│   ├── spritesheet.h
│   ├── stbi_impl.c
│   ├── subtitle/
│   │   ├── ass/
│   │   │   ├── subtitlerenderer.cpp
│   │   │   └── subtitlerenderer.h
│   │   ├── ffmpegsubtitlehelper.cpp
│   │   ├── ffmpegsubtitlehelper.h
│   │   ├── subtitlerenderer.h
│   │   ├── subtitlesystem.cpp
│   │   └── subtitlesystem.h
│   ├── text/
│   │   ├── dialoguepage.cpp
│   │   ├── dialoguepage.h
│   │   ├── text.cpp
│   │   ├── text.h
│   │   ├── typewritereffect.cpp
│   │   └── typewritereffect.h
│   ├── texture/
│   │   ├── bcdecode.cpp
│   │   ├── bcdecode.h
│   │   ├── bntxloader.cpp
│   │   ├── bntxloader.h
│   │   ├── ddsloader.cpp
│   │   ├── ddsloader.h
│   │   ├── gxtloader.cpp
│   │   ├── gxtloader.h
│   │   ├── plainloader.cpp
│   │   ├── plainloader.h
│   │   ├── s3tc.cpp
│   │   ├── s3tc.h
│   │   ├── stbiloader.cpp
│   │   ├── texture.cpp
│   │   ├── texture.h
│   │   └── webpdecode.cpp
│   ├── ui/
│   │   ├── backlogmenu.cpp
│   │   ├── backlogmenu.h
│   │   ├── gamespecific.cpp
│   │   ├── gamespecific.h
│   │   ├── mapsystem.cpp
│   │   ├── mapsystem.h
│   │   ├── menu.cpp
│   │   ├── menu.h
│   │   ├── nullmenu.cpp
│   │   ├── nullmenu.h
│   │   ├── optionsmenu.cpp
│   │   ├── optionsmenu.h
│   │   ├── savemenu.h
│   │   ├── selectionmenu.cpp
│   │   ├── selectionmenu.h
│   │   ├── sysmesbox.cpp
│   │   ├── sysmesbox.h
│   │   ├── tipsmenu.cpp
│   │   ├── tipsmenu.h
│   │   ├── ui.h
│   │   ├── widget.cpp
│   │   ├── widget.h
│   │   └── widgets/
│   │       ├── backlogentry.cpp
│   │       ├── backlogentry.h
│   │       ├── button.cpp
│   │       ├── button.h
│   │       ├── carousel.cpp
│   │       ├── carousel.h
│   │       ├── cc/
│   │       │   ├── backlogentry.cpp
│   │       │   ├── backlogentry.h
│   │       │   ├── titlebutton.cpp
│   │       │   └── titlebutton.h
│   │       ├── cclcc/
│   │       │   ├── librarymenubutton.h
│   │       │   ├── optionsbinarybutton.cpp
│   │       │   ├── optionsbinarybutton.h
│   │       │   ├── optionsentry.cpp
│   │       │   ├── optionsentry.h
│   │       │   ├── optionsslider.cpp
│   │       │   ├── optionsslider.h
│   │       │   ├── optionsvoiceslider.cpp
│   │       │   ├── optionsvoiceslider.h
│   │       │   ├── saveentrybutton.cpp
│   │       │   ├── saveentrybutton.h
│   │       │   ├── sysmenubutton.cpp
│   │       │   ├── sysmenubutton.h
│   │       │   ├── tipsentrybutton.cpp
│   │       │   ├── tipsentrybutton.h
│   │       │   ├── tipstabgroup.cpp
│   │       │   ├── tipstabgroup.h
│   │       │   ├── titlebutton.cpp
│   │       │   └── titlebutton.h
│   │       ├── cgviewer.cpp
│   │       ├── cgviewer.h
│   │       ├── chlcc/
│   │       │   ├── albumthumbnailbutton.cpp
│   │       │   ├── albumthumbnailbutton.h
│   │       │   ├── backlogentry.cpp
│   │       │   ├── backlogentry.h
│   │       │   ├── moviemenuentrybutton.cpp
│   │       │   ├── moviemenuentrybutton.h
│   │       │   ├── optionsbutton.cpp
│   │       │   ├── optionsbutton.h
│   │       │   ├── optionsentry.cpp
│   │       │   ├── optionsentry.h
│   │       │   ├── optionsslider.cpp
│   │       │   ├── optionsslider.h
│   │       │   ├── saveentrybutton.cpp
│   │       │   ├── saveentrybutton.h
│   │       │   ├── systemmenuentrybutton.cpp
│   │       │   ├── systemmenuentrybutton.h
│   │       │   ├── systemmessagebutton.cpp
│   │       │   ├── systemmessagebutton.h
│   │       │   ├── tipsentrybutton.cpp
│   │       │   ├── tipsentrybutton.h
│   │       │   ├── titlebutton.cpp
│   │       │   ├── titlebutton.h
│   │       │   ├── trackselectbutton.cpp
│   │       │   ├── trackselectbutton.h
│   │       │   ├── trophymenuentry.cpp
│   │       │   └── trophymenuentry.h
│   │       ├── clickarea.cpp
│   │       ├── clickarea.h
│   │       ├── group.cpp
│   │       ├── group.h
│   │       ├── label.cpp
│   │       ├── label.h
│   │       ├── mo6tw/
│   │       │   ├── actorsvoicebutton.cpp
│   │       │   ├── actorsvoicebutton.h
│   │       │   ├── albumcharacterbutton.cpp
│   │       │   ├── albumcharacterbutton.h
│   │       │   ├── albumthumbnailbutton.cpp
│   │       │   ├── albumthumbnailbutton.h
│   │       │   ├── imagethumbnailbutton.cpp
│   │       │   ├── imagethumbnailbutton.h
│   │       │   ├── saveentrybutton.cpp
│   │       │   ├── saveentrybutton.h
│   │       │   ├── scenelistentry.cpp
│   │       │   ├── scenelistentry.h
│   │       │   ├── tipsentrybutton.cpp
│   │       │   ├── tipsentrybutton.h
│   │       │   ├── titlebutton.cpp
│   │       │   └── titlebutton.h
│   │       ├── optiongroup.cpp
│   │       ├── optiongroup.h
│   │       ├── rne/
│   │       │   ├── sysmenubutton.cpp
│   │       │   └── sysmenubutton.h
│   │       ├── scrollbar.cpp
│   │       ├── scrollbar.h
│   │       ├── toggle.cpp
│   │       └── toggle.h
│   ├── util.cpp
│   ├── util.h
│   ├── video/
│   │   ├── clock.cpp
│   │   ├── clock.h
│   │   ├── ffmpegplayer.cpp
│   │   ├── ffmpegplayer.h
│   │   ├── ffmpegstream.cpp
│   │   ├── ffmpegstream.h
│   │   ├── videoplayer.cpp
│   │   ├── videoplayer.h
│   │   ├── videosystem.cpp
│   │   └── videosystem.h
│   ├── vm/
│   │   ├── expression.cpp
│   │   ├── expression.h
│   │   ├── inst_controlflow.cpp
│   │   ├── inst_controlflow.h
│   │   ├── inst_dialogue.cpp
│   │   ├── inst_dialogue.h
│   │   ├── inst_gamespecific.cpp
│   │   ├── inst_gamespecific.h
│   │   ├── inst_graphics2d.cpp
│   │   ├── inst_graphics2d.h
│   │   ├── inst_graphics3d.cpp
│   │   ├── inst_graphics3d.h
│   │   ├── inst_macros.inc
│   │   ├── inst_misc.cpp
│   │   ├── inst_misc.h
│   │   ├── inst_movie.cpp
│   │   ├── inst_movie.h
│   │   ├── inst_sound.cpp
│   │   ├── inst_sound.h
│   │   ├── inst_system.cpp
│   │   ├── inst_system.h
│   │   ├── interface/
│   │   │   ├── input.cpp
│   │   │   ├── input.h
│   │   │   ├── scene3d.cpp
│   │   │   └── scene3d.h
│   │   ├── opcodetables_cc.h
│   │   ├── opcodetables_chlcc.h
│   │   ├── opcodetables_chn.h
│   │   ├── opcodetables_darling.h
│   │   ├── opcodetables_dash.h
│   │   ├── opcodetables_mo6tw.h
│   │   ├── opcodetables_mo7.h
│   │   ├── opcodetables_mo8.h
│   │   ├── opcodetables_rne.h
│   │   ├── opcodetables_sgps3.h
│   │   ├── sc3stream.h
│   │   ├── thread.cpp
│   │   ├── thread.h
│   │   ├── vm.cpp
│   │   └── vm.h
│   ├── voicetable.cpp
│   ├── voicetable.h
│   ├── workqueue.cpp
│   └── workqueue.h
├── triplets/
│   ├── arm64-android-ci.cmake
│   ├── arm64-osx-ci.cmake
│   ├── x64-linux-ci.cmake
│   └── x64-osx-ci.cmake
├── vcpkg-configuration.json
├── vcpkg.json
└── vendor/
    ├── .clang-format
    ├── clHCA/
    │   ├── clHCA.c
    │   └── clHCA.h
    ├── glad/
    │   └── src/
    │       └── glad.c
    ├── imgui_custom/
    │   └── backends/
    │       ├── imgui_impl_opengl3.cpp
    │       ├── imgui_impl_opengl3.h
    │       └── imgui_impl_opengl3_loader.h
    ├── minilua/
    │   ├── minilua.h
    │   └── minilua_impl.c
    ├── mio/
    │   └── mio.hpp
    ├── mspack/
    │   ├── lzx.h
    │   ├── lzxd.c
    │   ├── macros.h
    │   ├── mspack.h
    │   ├── readbits.h
    │   ├── readhuff.h
    │   ├── system.c
    │   └── system.h
    ├── patches/
    │   └── LibAtrac9/
    │       └── CMakeLists.txt
    ├── pcg/
    │   └── src/
    │       └── pcg_basic.c
    ├── squish/
    │   ├── ChangeLog
    │   ├── README
    │   ├── alpha.cpp
    │   ├── alpha.h
    │   ├── clusterfit.cpp
    │   ├── clusterfit.h
    │   ├── colourblock.cpp
    │   ├── colourblock.h
    │   ├── colourfit.cpp
    │   ├── colourfit.h
    │   ├── colourset.cpp
    │   ├── colourset.h
    │   ├── config.h
    │   ├── maths.cpp
    │   ├── maths.h
    │   ├── rangefit.cpp
    │   ├── rangefit.h
    │   ├── simd.h
    │   ├── simd_float.h
    │   ├── simd_sse.h
    │   ├── simd_ve.h
    │   ├── singlecolourfit.cpp
    │   ├── singlecolourfit.h
    │   ├── singlecolourlookup.inl
    │   ├── squish.cpp
    │   └── squish.h
    └── vma/
        └── vk_mem_alloc.h

================================================
FILE CONTENTS
================================================

================================================
FILE: .clang-format
================================================
---
BasedOnStyle: Google
SortIncludes: false
UseTab: Never

================================================
FILE: .gitattributes
================================================
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto

###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs     diff=csharp

###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following 
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln       merge=binary
#*.csproj    merge=binary
#*.vbproj    merge=binary
#*.vcxproj   merge=binary
#*.vcproj    merge=binary
#*.dbproj    merge=binary
#*.fsproj    merge=binary
#*.lsproj    merge=binary
#*.wixproj   merge=binary
#*.modelproj merge=binary
#*.sqlproj   merge=binary
#*.wwaproj   merge=binary

###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg   binary
#*.png   binary
#*.gif   binary

###############################################################################
# diff behavior for common document formats
# 
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the 
# entries below.
###############################################################################
#*.doc   diff=astextplain
#*.DOC   diff=astextplain
#*.docx  diff=astextplain
#*.DOCX  diff=astextplain
#*.dot   diff=astextplain
#*.DOT   diff=astextplain
#*.pdf   diff=astextplain
#*.PDF   diff=astextplain
#*.rtf   diff=astextplain
#*.RTF   diff=astextplain


================================================
FILE: .github/workflows/docker-switch.yml
================================================
name: Docker Image CI for GHCR
on: 
  push:
    paths:
      - docker/impacto-switch/*
      - .github/workflows/docker-switch.yml
  workflow_dispatch:

jobs:
  build_and_publish:
    permissions:
      contents: read
      packages: write
    runs-on: ubuntu-latest
    steps: 
      - uses: actions/checkout@v6
      - name: Log in to the Container registry
        uses: docker/login-action@v2
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@v4
        with:
          images: ghcr.io/committeeofzero/impacto-switch

      - name: Build and push Docker image
        uses: docker/build-push-action@v4
        with:
          push: true
          context: docker/impacto-switch
          file: docker/impacto-switch/Dockerfile
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}

================================================
FILE: .github/workflows/impacto.yml
================================================
name: impacto
on:
  push:
    branches:
    - "master"
    tags:
    - "*"
  pull_request:
    branches:
    - "master"
  workflow_dispatch:

env:
  BRANCH_NAME: ${{ github.head_ref || github.ref_name }} 

jobs:
  get-version:
    name: Get version
    runs-on: ubuntu-24.04
    permissions:
      contents: read
    outputs:
      VERSION: ${{ steps.set-version.outputs.VERSION }}
    steps:
    - uses: actions/checkout@v6
    - name: Set version
      id: set-version
      run: echo "VERSION=$(cat VERSION)" >> $GITHUB_OUTPUT
    - name: Upload VERSION Artifact
      uses: actions/upload-artifact@v7
      with:
        path: VERSION
        name: VERSION
        archive: false
  lint:
    name: Run linters
    permissions:
      checks: write
      contents: write
    runs-on: ubuntu-24.04
    outputs:
      commitid: ${{ steps.commit.outputs.commitid }}

    steps:
      - name: Check out Git repository
        uses: actions/checkout@v6
      - name: Update clang-format
        run: |
          sudo apt update
          sudo pipx install clang-format
          which clang-format
          clang-format --version

      - name: Run linters
        uses: wearerequired/lint-action@v2
        with:
          auto_fix: ${{(github.event.pull_request.head.repo.full_name != 'CommitteeOfZero/impacto') && 'false' || 'true'}}
          clang_format: true
          clang_format_auto_fix: ${{(github.event.pull_request.head.repo.full_name != 'CommitteeOfZero/impacto') && 'false' || 'true'}}
          continue_on_error: false
      - name: Get latest commit
        id: commit
        run: |
          SHA=$(git rev-parse HEAD)
          echo "commitid=$SHA" >> $GITHUB_OUTPUT
  job-matrix:
    name: ${{ matrix.os_name }}
    runs-on: ${{ matrix.os }}
    timeout-minutes: 120
    needs: 
      - lint
      - get-version
    permissions:
      contents: read
      packages: write
    strategy:
      fail-fast: false
      matrix:
        include:
          - os: windows-2025
            os_name: windows
            triplet: x64-windows-release
            host_triplet: x64-windows-release
          - os: ubuntu-24.04
            os_name: linux
            triplet: x64-linux-ci
            host_triplet: x64-linux-ci
          - os: macos-15
            os_name: macos_arm64
            triplet: arm64-osx-ci
            host_triplet: arm64-osx-ci
          - os: macos-15-intel
            os_name: macos_x64
            triplet: x64-osx-ci
            host_triplet: x64-osx-ci
          - os: ubuntu-24.04
            os_name: android
            triplet: arm64-android-ci
            host_triplet: x64-linux-ci
    env:
      VCPKG_DEFAULT_TRIPLET: ${{ matrix.triplet }}
      VCPKG_BINARY_SOURCES: >-
        ${{ github.event_name == 'pull_request_target' &&
            (github.event.pull_request.head.repo.full_name != github.repository)
            && 'clear;nuget,https://nuget.pkg.github.com/committeeofzero/index.json,read'
            || 'clear;nuget,https://nuget.pkg.github.com/committeeofzero/index.json,readwrite' }}
      vcpkgCommitId: '62159a45e18f3a9ac0548628dcaf74fcb60c6ff9'
      PresetName: ${{ (matrix.os_name == 'android') && 'ci-release-android' || 'ci-release' }}
      VERSION: ${{ needs.get-version.outputs.VERSION }}
      VCPKG_FORCE_DOWNLOADED_BINARIES: 1

    steps:
    - uses: actions/checkout@v6
      with:
        ref: ${{ needs.lint.outputs.commitid }}

    - name: Setup Android Environment
      if: matrix.os_name == 'android'
      run: |
        export ABI=arm64-v8a
        export MINSDKVERSION=28
        echo "MINSDKVERSION=$MINSDKVERSION" >> $GITHUB_ENV
        echo "ABI=$ABI" >> $GITHUB_ENV
        echo "CC=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=aarch64-linux-android$MINSDKVERSION -fPIC" >> $GITHUB_ENV
        echo "VULKAN_SDK=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr" >> $GITHUB_ENV
      shell: bash

    - name: Set up Java
      uses: actions/setup-java@v4
      if: matrix.os_name == 'android'
      with:
        java-version: 17
        distribution: "temurin"
        cache: 'gradle'

    - uses: lukka/get-cmake@latest

    - name: Setup vcpkg
      uses: lukka/run-vcpkg@v11
      id: runvcpkg
      with:
        vcpkgDirectory: '${{ runner.workspace }}/build/vcpkg'
        vcpkgGitCommitId: '${{ env.vcpkgCommitId }}'
        vcpkgJsonGlob: '**/vcpkg.json'

    - name: Install Dependencies Linux
      run: |
        sudo apt-get update
        sudo apt-get install nasm libx11-dev libxft-dev libxext-dev libwayland-dev libxkbcommon-dev libegl1-mesa-dev libibus-1.0-dev libxrandr-dev libltdl-dev mono-complete autoconf autoconf-archive automake libtool libdrm-dev
      if: matrix.os_name == 'linux' || matrix.os_name == 'android'
    - name: Install Dependencies Mac
      run: brew install nasm mono
      if: contains(matrix.os_name, 'macos')

    - name: Configure NuGet feed via vcpkg
      shell: bash
      env:
        FEED_URL: 'https://nuget.pkg.github.com/committeeofzero/index.json'
      run: |
        NUGET_PATH=$(vcpkg fetch nuget | tail -n 1)

        if [[ "$NUGET_PATH" == *.exe && "$RUNNER_OS" != "Windows" ]]; then
          EXEC=(mono "$NUGET_PATH")
        else
          EXEC=("$NUGET_PATH")
        fi

        "${EXEC[@]}" sources add \
          -Source "${{ env.FEED_URL }}" \
          -StorePasswordInClearText \
          -Name GitHubPackages \
          -UserName "GithubCI" \
          -Password "${{ github.token }}"

        "${EXEC[@]}" setapikey "${{ github.token }}" \
          -Source "${{ env.FEED_URL }}"

    - name: Run CMake with vcpkg.json manifest
      uses: lukka/run-cmake@v10
      with:
        cmakeListsTxtPath: '${{ github.workspace }}/CMakeLists.txt'
        configurePreset: ${{ env.PresetName }}
        configurePresetAdditionalArgs: >-
          [
            '-DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }}',
            '-DVCPKG_HOST_TRIPLET=${{ matrix.host_triplet }}',
          ]
        buildPreset: ${{ env.PresetName }}
    - name: Copy docs
      run: |
        mkdir -p "${{ github.workspace }}/release/${{ env.PresetName }}"
        cp THIRDPARTY.md README.md LICENSE "${{ github.workspace }}/release/${{ env.PresetName }}"
      shell: bash
    - name: Decode signing/prod.properties file
      if: matrix.os_name == 'android' && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository)
      env:
        PROD_PROPERTIES: ${{ secrets.ANDROID_PROD_PROPERTIES }}
        PROD_JKS: ${{ secrets.ANDROID_PROD_JKS }}
      run: |
        echo "$PROD_PROPERTIES" > ${{ github.workspace }}/android/app/signing/prod.properties
        echo "$PROD_JKS" | base64 -d > ${{ github.workspace }}/android/app/signing/prod.jks
    - name: Build Android
      if: matrix.os_name == 'android'
      run: |
        pushd "${{ github.workspace }}/android/"
        ./gradlew assemble
        cp "${{ github.workspace }}/android/distribution/android/app/outputs/apk/release/app-release.apk" "${{ github.workspace }}/release/${{ env.PresetName }}/impacto-release.apk"
      shell: bash
    - name: Archive Artifacts
      run: |
        mv ./release/${{ env.PresetName }} ./release/impacto
        7z a -tzip -mm=Deflate -mx=9 impacto-${{ matrix.os_name }}-${{ env.VERSION }}${{ github.run_number }}-${{ github.sha }}.zip ./release/impacto
    - name: Upload Artifact
      uses: actions/upload-artifact@v7
      with:
        path: impacto-${{ matrix.os_name }}-${{ env.VERSION }}${{ github.run_number }}-${{ github.sha }}.zip
        archive: false

  switch:
    runs-on: ubuntu-latest
    timeout-minutes: 120
    needs:
      - lint
      - get-version
    permissions:
      contents: read
    container:
      image: ghcr.io/committeeofzero/impacto-switch:latest
    env:
      VERSION: ${{ needs.get-version.outputs.VERSION }}
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{ needs.lint.outputs.commitid }}
      - name: Run build
        run: |-
          cmake . -DCMAKE_TOOLCHAIN_FILE=HorizonNX.toolchain
          make -j2
          elf2nro impacto impacto.nro
          mkdir -p "release/ci-release"
          cp impacto.nro "release/ci-release"
          cp -r profiles "release/ci-release"
          cp -r games "release/ci-release"
      - name: Copy Shaders
        run: cp -r src/shaders "release/ci-release"
        shell: bash
      - name: Copy docs
        run: |
          cp THIRDPARTY.md README.md LICENSE "release/ci-release"
        shell: bash
      - name: Archive Artifacts
        run: |
          mv ./release/ci-release ./release/impacto
          7z a -tzip -mm=Deflate -mx=9 impacto-switch-${{ env.VERSION }}${{ github.run_number }}-${{ github.sha }}.zip ./release/impacto
      - name: Upload Artifact
        uses: actions/upload-artifact@v7
        with:
          path: impacto-switch-${{ env.VERSION }}${{ github.run_number }}-${{ github.sha }}.zip
          archive: false

================================================
FILE: .github/workflows/notify.yml
================================================
name: notify
on:
  workflow_run:
    workflows: [impacto]
    types:
      - completed
jobs:
  notify_fail:
    name: Notify failure
    runs-on: ubuntu-22.04
    if: always() && (github.event.workflow_run.conclusion == 'cancelled' || github.event.workflow_run.conclusion == 'failure')
    steps:
    - uses: actions/checkout@v6
    - name: 'Get Jobs Status'
      id: get_jobs_status
      run: |
        echo "Fetch workflow run jobs"
        json_data=$(curl -s -H "Authorization: Bearer ${{ github.token }}" \
                "${{ github.event.workflow_run.jobs_url }}")

        name_conclusion_array=($(echo "$json_data" | jq -r '
          .jobs[] | 
            select(.name | IN("macos_arm64", "linux", "windows", "switch", "macos_x64", "android")) | 
          "\(.name).\(.conclusion)"'))

        for item in "${name_conclusion_array[@]}"; do
            IFS='.' read -r name conclusion <<< "$item"
            echo "$name=$conclusion" >> $GITHUB_OUTPUT
        done

    - name: Get current date
      id: date
      run: echo "NOW=$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_OUTPUT

    - uses: tsickert/discord-webhook@v5.3.0
      with:
        webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
        username: IMPACTO
        avatar-url: https://cdn.discordapp.com/emojis/766988033127481344.png
        embed-title : "${{ github.event.commits[0].author.name }}"
        embed-color: 16711680
        embed-timestamp: ${{ steps.date.outputs.NOW }}
        embed-description: |
          Commit
          `${{ github.event.workflow_run.head_commit.message }} (${{ github.sha }})`
          from branch `${{ github.event.workflow_run.head_branch }}` has failed build.

          Job status:
          windows: ${{steps.get_jobs_status.outputs.windows}} 
          linux: ${{steps.get_jobs_status.outputs.linux}} 
          macos_arm64: ${{steps.get_jobs_status.outputs.macos_arm64}} 
          macos_x64: ${{steps.get_jobs_status.outputs.macos_x64}} 
          switch: ${{steps.get_jobs_status.outputs.switch}} 
          android: ${{steps.get_jobs_status.outputs.android}} 

          Details:
          ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }}

================================================
FILE: .github/workflows/publish.yml
================================================
name: publish
on:
  workflow_run:
    workflows: [impacto]
    types: [completed]
    branches: 
      - master
      - v*
jobs:
  publish_artifacts:
    name: Publish Artifacts
    runs-on: ubuntu-22.04
    permissions:
      contents: write
      actions: read
    if: github.event.workflow_run.conclusion == 'success'
    steps:
    - uses: actions/download-artifact@v8
      with:
        name: VERSION
        github-token: ${{ github.token }}
        run-id: ${{ github.event.workflow_run.id }}
    - name: Set version
      id: set-version
      run: echo "VERSION=$(cat VERSION)" >> $GITHUB_OUTPUT
    - uses: actions/download-artifact@v8
      with:
        pattern: impacto-*
        path: "${{ github.workspace }}/release"
        merge-multiple: true
        skip-decompress: true
        github-token: ${{ github.token }}
        run-id: ${{ github.event.workflow_run.id }}
    - name: Upload Release
      uses: softprops/action-gh-release@v2
      with:
        Name: Latest ${{ env.BRANCH_NAME }} build
        tag_name: ${{ steps.set-version.outputs.VERSION }}${{ github.event.workflow_run.run_number }}
        files:
          ${{ github.workspace }}/release/*.zip
        prerelease: true
        fail_on_unmatched_files: true
        target_commitish: ${{ github.sha }}
    - name: Get current date
      id: date
      run: echo "NOW=$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_ENV

    - uses: tsickert/discord-webhook@v5.3.0
      with:
        webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
        username: IMPACTO
        avatar-url: https://cdn.discordapp.com/emojis/766988033127481344.png
        embed-title : "${{ github.event.workflow_run.head_commit.author.name }}"
        embed-color: 3659647
        embed-timestamp: ${{ env.NOW }}
        embed-description: |
          Commit
          `${{ github.event.workflow_run.head_commit.message }} (${{ github.sha }})`
          from branch `${{ github.event.workflow_run.head_branch }}` has been successfully built.

          Release URL:
          https://github.com/CommitteeOfZero/impacto/releases/tag/${{ steps.set-version.outputs.VERSION }}${{ github.event.workflow_run.run_number }}

          Details:
          - Build: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.event.workflow_run.id }}
          - Publish: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}



================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]uild/
[Oo]ut
[Bb]in/
[Oo]bj/
[Ll]og/
[Ii]nstall/
cmake-build-*/
impacto-build/
ci-build/

# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# DNX
project.lock.json
project.fragment.lock.json
artifacts/

*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
#*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs
*.cbp
cmake_install.cmake
include/
Makefile
.DS_Store
.cache

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
*.mdf
*.ldf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# JetBrains Rider
.idea/
*.sln.iml

.luarc.json

# CodeRush
.cr/

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# VSCode
.vscode

###

compile_commands.json
/CMakeSettings.json
CMakeUserPresets.json
vendor/avcpp

games/*/gamedata
games/*/savedata
games/*/trophydata

================================================
FILE: CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.28)

if (POLICY CMP0141)
  cmake_policy(SET CMP0141 NEW)
endif()

if (POLICY CMP0174)
  cmake_policy(SET CMP0174 NEW)
endif()

project("impacto")

include(FetchContent)
find_package(PkgConfig)

if (EMSCRIPTEN)
    list(APPEND CMAKE_MODULE_PATH ${EMSCRIPTEN_ROOT_PATH}/cmake/Modules)
endif ()

set(Impacto_Src
    src/main.cpp
    src/log.cpp
    src/util.cpp
    src/workqueue.cpp
    src/game.cpp
    src/mem.cpp
    src/modelviewer.cpp
    src/characterviewer.cpp
    src/spriteanimation.cpp
    src/sequencedanimation.cpp
    src/background2d.cpp
    src/mask2d.cpp
    src/character2d.cpp
    src/inputsystem.cpp
    src/voicetable.cpp
    src/animation.cpp

    src/text/text.cpp
    src/text/typewritereffect.cpp
    src/text/dialoguepage.cpp

    src/effects/wave.cpp
    src/effects/blur.cpp
    src/effects/mosaic.cpp
    src/effects/chlcc/butterflyeffect.cpp
    src/effects/chlcc/bubbleseffect.cpp
    src/effects/chlcc/eyecatch.cpp

    src/renderer/renderer.cpp
    src/renderer/window.cpp

    src/data/savesystem.cpp
    src/data/tipssystem.cpp
    src/data/achievementsystem.cpp
    src/data/achievementsystemps3.cpp

    src/profile/profile.cpp
    src/profile/profile_internal.cpp
    src/profile/game.cpp
    src/profile/vfs.cpp
    src/profile/scene3d.cpp
    src/profile/sprites.cpp
    src/profile/animations.cpp
    src/profile/charset.cpp
    src/profile/fonts.cpp
    src/profile/dialogue.cpp
    src/profile/vm.cpp
    src/profile/scriptvars.cpp
    src/profile/scriptinput.cpp
    src/profile/configsystem.cpp
    src/profile/subtitle.cpp

    src/profile/data/bgeff.cpp
    src/profile/data/savesystem.cpp
    src/profile/data/tipssystem.cpp
    src/profile/data/achievementsystem.cpp
    src/profile/data/waveeffects.cpp

    src/profile/hud/saveicon.cpp
    src/profile/hud/loadingdisplay.cpp
    src/profile/hud/datedisplay.cpp
    src/profile/hud/tipsnotification.cpp

    src/profile/ui/commonmenu.cpp
    src/profile/ui/systemmenu.cpp
    src/profile/ui/titlemenu.cpp
    src/profile/ui/savemenu.cpp
    src/profile/ui/sysmesbox.cpp
    src/profile/ui/selectionmenu.cpp
    src/profile/ui/backlogmenu.cpp
    src/profile/ui/optionsmenu.cpp
    src/profile/ui/tipsmenu.cpp
    src/profile/ui/extramenus.cpp
    src/profile/ui/trophymenu.cpp
    src/profile/ui/helpmenu.cpp
    src/profile/ui/gamespecific.cpp

    src/profile/games/rne/tilebackground.cpp
    src/profile/games/rne/systemmenu.cpp
    src/profile/games/rne/titlemenu.cpp
    src/profile/games/rne/sysmesbox.cpp

    src/profile/games/dash/titlemenu.cpp

    src/profile/games/chlcc/commonmenu.cpp
    src/profile/games/chlcc/dialoguebox.cpp
    src/profile/games/chlcc/titlemenu.cpp
    src/profile/games/chlcc/savemenu.cpp
    src/profile/games/chlcc/sysmesbox.cpp
    src/profile/games/chlcc/clearlistmenu.cpp
    src/profile/games/chlcc/moviemenu.cpp
    src/profile/games/chlcc/albummenu.cpp
    src/profile/games/chlcc/musicmenu.cpp
    src/profile/games/chlcc/tipsmenu.cpp
    src/profile/games/chlcc/optionsmenu.cpp
    src/profile/games/chlcc/backlogmenu.cpp
    src/profile/games/chlcc/systemmenu.cpp
    src/profile/games/chlcc/trophymenu.cpp
    src/profile/games/chlcc/delusiontrigger.cpp
    src/profile/games/chlcc/tipsnotification.cpp

    src/profile/games/cc/backlogmenu.cpp
    src/profile/games/cc/dialoguebox.cpp
    src/profile/games/cc/titlemenu.cpp
    src/profile/games/cc/sysmesbox.cpp

    src/profile/games/cclcc/systemmenu.cpp
    src/profile/games/cclcc/titlemenu.cpp
    src/profile/games/cclcc/savemenu.cpp
    src/profile/games/cclcc/optionsmenu.cpp
    src/profile/games/cclcc/tipsmenu.cpp
    src/profile/games/cclcc/clearlistmenu.cpp
    src/profile/games/cclcc/librarymenu.cpp
    src/profile/games/cclcc/tipsnotification.cpp
    src/profile/games/cclcc/mapsystem.cpp
    src/profile/games/cclcc/delusiontrigger.cpp
    src/profile/games/cclcc/yesnotrigger.cpp
    src/profile/games/cclcc/helpmenu.cpp

    src/profile/games/mo6tw/backlogmenu.cpp
    src/profile/games/mo6tw/dialoguebox.cpp
    src/profile/games/mo6tw/sysmesbox.cpp
    src/profile/games/mo6tw/systemmenu.cpp
    src/profile/games/mo6tw/titlemenu.cpp
    src/profile/games/mo6tw/savemenu.cpp
    src/profile/games/mo6tw/optionsmenu.cpp
    src/profile/games/mo6tw/tipsmenu.cpp
    src/profile/games/mo6tw/clearlistmenu.cpp
    src/profile/games/mo6tw/moviemenu.cpp
    src/profile/games/mo6tw/actorsvoicemenu.cpp
    src/profile/games/mo6tw/musicmenu.cpp
    src/profile/games/mo6tw/albummenu.cpp
    src/profile/games/mo6tw/tipsnotification.cpp

    src/profile/games/mo8/titlemenu.cpp
    src/profile/games/mo8/systemmenu.cpp
    src/profile/games/mo8/optionsmenu.cpp
    src/profile/games/mo8/savemenu.cpp

    src/profile/games/darling/sysmesbox.cpp

    src/games/rne/tilebackground.cpp
    src/games/rne/systemmenu.cpp
    src/games/rne/titlemenu.cpp
    src/games/rne/sysmesbox.cpp

    src/games/dash/titlemenu.cpp

    src/games/chlcc/commonmenu.cpp
    src/games/chlcc/titlemenu.cpp
    src/games/chlcc/savemenu.cpp
    src/games/chlcc/sysmesbox.cpp
    src/games/chlcc/animations/selectprompt.cpp
    src/games/chlcc/animations/menutransition.cpp
    src/games/chlcc/animations/saveicon.cpp
    src/games/chlcc/savesystem.cpp
    src/games/chlcc/tipssystem.cpp
    src/games/chlcc/clearlistmenu.cpp
    src/games/chlcc/moviemenu.cpp
    src/games/chlcc/albummenu.cpp
    src/games/chlcc/musicmenu.cpp
    src/games/chlcc/tipsmenu.cpp
    src/games/chlcc/optionsmenu.cpp
    src/games/chlcc/backlogmenu.cpp
    src/games/chlcc/systemmenu.cpp
    src/games/chlcc/trophymenu.cpp
    src/games/chlcc/delusiontrigger.cpp
    src/games/chlcc/introsequence.cpp

    src/games/cc/backlogmenu.cpp
    src/games/cc/titlemenu.cpp
    src/games/cc/sysmesbox.cpp

    src/games/cclcc/titlemenu.cpp
    src/games/cclcc/savemenu.cpp
    src/games/cclcc/optionsmenu.cpp
    src/games/cclcc/tipsmenu.cpp
    src/games/cclcc/tipssystem.cpp
    src/games/cclcc/clearlistmenu.cpp
    src/games/cclcc/librarymenu.cpp
    src/games/cclcc/librarysubmenus.cpp
    src/games/cclcc/albummenu.cpp
    src/games/cclcc/musicmenu.cpp
    src/games/cclcc/moviemenu.cpp
    src/games/cclcc/mapsystem.cpp
    src/games/cclcc/delusiontrigger.cpp
    src/games/cclcc/yesnotrigger.cpp
    src/games/cclcc/savesystem.cpp
    src/games/cclcc/systemmenu.cpp
    src/games/cclcc/helpmenu.cpp

    src/games/mo6tw/backlogmenu.cpp
    src/games/mo6tw/sysmesbox.cpp
    src/games/mo6tw/systemmenu.cpp
    src/games/mo6tw/titlemenu.cpp
    src/games/mo6tw/savemenu.cpp
    src/games/mo6tw/optionsmenu.cpp
    src/games/mo6tw/tipsmenu.cpp
    src/games/mo6tw/savesystem.cpp
    src/games/mo6tw/tipssystem.cpp
    src/games/mo6tw/clearlistmenu.cpp
    src/games/mo6tw/moviemenu.cpp
    src/games/mo6tw/actorsvoicemenu.cpp
    src/games/mo6tw/musicmenu.cpp
    src/games/mo6tw/albummenu.cpp

    src/games/mo8/titlemenu.cpp
    src/games/mo8/systemmenu.cpp
    src/games/mo8/optionsmenu.cpp
    src/games/mo8/savemenu.cpp

    src/games/darling/sysmesbox.cpp

    src/hud/dialoguebox.cpp
    src/hud/defaultsaveiconanimation.cpp
    src/hud/datedisplay.cpp
    src/hud/saveicondisplay.cpp
    src/hud/loadingdisplay.cpp
    src/hud/nametagdisplay.cpp
    src/hud/autoicondisplay.cpp
    src/hud/skipicondisplay.cpp
    src/hud/waiticondisplay.cpp
    src/hud/tipsnotification.cpp

    src/hud/cc/dialoguebox.cpp
    src/hud/cc/nametagdisplay.cpp

    src/hud/cclcc/tipsnotification.cpp

    src/hud/chlcc/dialoguebox.cpp
    src/hud/chlcc/nametagdisplay.cpp
    src/hud/chlcc/tipsnotification.cpp

    src/hud/mo6tw/dialoguebox.cpp
    src/hud/mo6tw/tipsnotification.cpp

    src/hud/rne/datedisplay.cpp

    src/ui/widget.cpp
    src/ui/menu.cpp
    src/ui/nullmenu.cpp
    src/ui/selectionmenu.cpp
    src/ui/sysmesbox.cpp
    src/ui/backlogmenu.cpp
    src/ui/tipsmenu.cpp
    src/ui/optionsmenu.cpp
    src/ui/widgets/label.cpp
    src/ui/widgets/button.cpp
    src/ui/widgets/backlogentry.cpp
    src/ui/widgets/scrollbar.cpp
    src/ui/widgets/toggle.cpp
    src/ui/widgets/optiongroup.cpp
    src/ui/widgets/group.cpp
    src/ui/widgets/carousel.cpp
    src/ui/widgets/cgviewer.cpp
    src/ui/widgets/clickarea.cpp
    src/ui/widgets/mo6tw/titlebutton.cpp
    src/ui/widgets/mo6tw/saveentrybutton.cpp
    src/ui/widgets/mo6tw/tipsentrybutton.cpp
    src/ui/widgets/mo6tw/scenelistentry.cpp
    src/ui/widgets/mo6tw/imagethumbnailbutton.cpp
    src/ui/widgets/mo6tw/albumthumbnailbutton.cpp
    src/ui/widgets/mo6tw/actorsvoicebutton.cpp
    src/ui/widgets/mo6tw/albumcharacterbutton.cpp
    src/ui/widgets/chlcc/titlebutton.cpp
    src/ui/widgets/chlcc/saveentrybutton.cpp
    src/ui/widgets/chlcc/systemmenuentrybutton.cpp
    src/ui/widgets/chlcc/systemmessagebutton.cpp
    src/ui/widgets/chlcc/moviemenuentrybutton.cpp
    src/ui/widgets/chlcc/albumthumbnailbutton.cpp
    src/ui/widgets/chlcc/trackselectbutton.cpp
    src/ui/widgets/chlcc/backlogentry.cpp
    src/ui/widgets/chlcc/trophymenuentry.cpp
    src/ui/widgets/chlcc/optionsentry.cpp
    src/ui/widgets/chlcc/optionsbutton.cpp
    src/ui/widgets/chlcc/optionsslider.cpp
    src/ui/widgets/chlcc/tipsentrybutton.cpp
    src/ui/widgets/rne/sysmenubutton.cpp
    src/ui/widgets/cc/backlogentry.cpp
    src/ui/widgets/cc/titlebutton.cpp
    src/ui/widgets/cclcc/titlebutton.cpp
    src/ui/widgets/cclcc/optionsentry.cpp
    src/ui/widgets/cclcc/optionsbinarybutton.cpp
    src/ui/widgets/cclcc/optionsslider.cpp
    src/ui/widgets/cclcc/optionsvoiceslider.cpp
    src/ui/widgets/cclcc/saveentrybutton.cpp
    src/ui/widgets/cclcc/sysmenubutton.cpp
    src/ui/widgets/cclcc/tipsentrybutton.cpp
    src/ui/widgets/cclcc/tipstabgroup.cpp
    src/ui/gamespecific.cpp

    src/stbi_impl.c

    src/renderer/3d/camera.cpp
    src/renderer/3d/model.cpp
    src/renderer/3d/transform.cpp
    src/renderer/3d/animation.cpp
    src/renderer/3d/modelanimator.cpp

    src/io/filemeta.cpp
    src/io/vfs.cpp
    src/io/assetpath.cpp
    src/io/memorystream.cpp
    src/io/physicalfilestream.cpp
    src/io/uncompressedstream.cpp
    src/io/zlibstream.cpp
    src/io/vfsarchive.cpp
    src/io/mpkarchive.cpp
    src/io/cpkarchive.cpp
    src/io/lnk4archive.cpp
    src/io/textarchive.cpp
    src/io/afsarchive.cpp

    src/texture/texture.cpp
    src/texture/s3tc.cpp
    src/texture/bcdecode.cpp
    src/texture/bntxloader.cpp
    src/texture/gxtloader.cpp
    src/texture/plainloader.cpp
    src/texture/stbiloader.cpp
    src/texture/ddsloader.cpp
    src/texture/webpdecode.cpp

    src/vm/vm.cpp
    src/vm/expression.cpp
    src/vm/thread.cpp
    src/vm/inst_system.cpp
    src/vm/inst_controlflow.cpp
    src/vm/inst_dialogue.cpp
    src/vm/inst_gamespecific.cpp
    src/vm/inst_graphics2d.cpp
    src/vm/inst_graphics3d.cpp
    src/vm/inst_misc.cpp
    src/vm/inst_movie.cpp
    src/vm/inst_sound.cpp

    src/vm/interface/scene3d.cpp
    src/vm/interface/input.cpp

    src/audio/audiosystem.cpp
    src/audio/audiochannel.cpp
    src/audio/audiostream.cpp
    src/audio/vorbisaudiostream.cpp
    src/audio/atrac9audiostream.cpp
    src/audio/adxaudiostream.cpp
    src/audio/hcaaudiostream.cpp

    src/video/videosystem.cpp
    src/video/videoplayer.cpp
    src/video/clock.cpp

    src/subtitle/subtitlesystem.cpp
)

set(Impacto_Header
    src/impacto.h
    src/log.h
    src/util.h
    src/workqueue.h
    src/game.h
    src/mem.h
    src/modelviewer.h
    src/characterviewer.h
    src/spritesheet.h
    src/spriteanimation.h
    src/sequencedanimation.h
    src/font.h
    src/background2d.h
    src/mask2d.h
    src/character2d.h
    src/loadable.h
    src/inputsystem.h
    src/rng.h
    src/animation.h

    src/text/text.h
    src/text/typewritereffect.h
    src/text/dialoguepage.h

    src/effects/wave.h
    src/effects/blur.h
    src/effects/mosaic.h
    src/effects/chlcc/butterflyeffect.h
    src/effects/chlcc/bubbleseffect.h
    src/effects/chlcc/eyecatch.h

    src/renderer/renderer.h
    src/renderer/window.h
    src/renderer/yuvframe.h
    src/renderer/nv12frame.h

    src/data/savesystem.h
    src/data/tipssystem.h
    src/data/achievementsystem.h
    src/data/achievementsystemps3.h

    src/profile/profile.h
    src/profile/profile_internal.h
    src/profile/game.h
    src/profile/vfs.h
    src/profile/scene3d.h
    src/profile/sprites.h
    src/profile/animations.h
    src/profile/charset.h
    src/profile/fonts.h
    src/profile/dialogue.h
    src/profile/vm.h
    src/profile/scriptvars.h
    src/profile/scriptinput.h
    src/profile/configsystem.h
    src/profile/subtitle.h

    src/profile/data/bgeff.h
    src/profile/data/savesystem.h
    src/profile/data/tipssystem.h
    src/profile/data/achievementsystem.h
    src/profile/data/waveeffects.h

    src/profile/hud/saveicon.h
    src/profile/hud/loadingdisplay.h
    src/profile/hud/datedisplay.h
    src/profile/hud/tipsnotification.h

    src/profile/ui/commonmenu.h
    src/profile/ui/systemmenu.h
    src/profile/ui/titlemenu.h
    src/profile/ui/savemenu.h
    src/profile/ui/sysmesbox.h
    src/profile/ui/selectionmenu.h
    src/profile/ui/backlogmenu.h
    src/profile/ui/optionsmenu.h
    src/profile/ui/tipsmenu.h
    src/profile/ui/extramenus.h
    src/profile/ui/trophymenu.h
    src/profile/ui/helpmenu.h
    src/profile/ui/gamespecific.h

    src/profile/games/rne/tilebackground.h
    src/profile/games/rne/systemmenu.h
    src/profile/games/rne/titlemenu.h
    src/profile/games/rne/sysmesbox.h

    src/profile/games/dash/titlemenu.h

    src/profile/games/chlcc/commonmenu.h
    src/profile/games/chlcc/dialoguebox.h
    src/profile/games/chlcc/titlemenu.h
    src/profile/games/chlcc/savemenu.h
    src/profile/games/chlcc/sysmesbox.h
    src/profile/games/chlcc/clearlistmenu.h
    src/profile/games/chlcc/moviemenu.h
    src/profile/games/chlcc/albummenu.h
    src/profile/games/chlcc/musicmenu.h
    src/profile/games/chlcc/tipsmenu.h
    src/profile/games/chlcc/optionsmenu.h
    src/profile/games/chlcc/backlogmenu.h
    src/profile/games/chlcc/systemmenu.h
    src/profile/games/chlcc/trophymenu.h
    src/profile/games/chlcc/delusiontrigger.h
    src/profile/games/chlcc/tipsnotification.h

    src/profile/games/cc/backlogmenu.h
    src/profile/games/cc/dialoguebox.h
    src/profile/games/cc/titlemenu.h
    src/profile/games/cc/sysmesbox.h

    src/profile/games/cclcc/titlemenu.h
    src/profile/games/cclcc/savemenu.h
    src/profile/games/cclcc/optionsmenu.h
    src/profile/games/cclcc/tipsmenu.h
    src/profile/games/cclcc/clearlistmenu.h
    src/profile/games/cclcc/librarymenu.h
    src/profile/games/cclcc/tipsnotification.h
    src/profile/games/cclcc/mapsystem.h
    src/profile/games/cclcc/delusiontrigger.h
    src/profile/games/cclcc/helpmenu.h

    src/profile/games/mo6tw/backlogmenu.h
    src/profile/games/mo6tw/dialoguebox.h
    src/profile/games/mo6tw/sysmesbox.h
    src/profile/games/mo6tw/systemmenu.h
    src/profile/games/mo6tw/titlemenu.h
    src/profile/games/mo6tw/savemenu.h
    src/profile/games/mo6tw/optionsmenu.h
    src/profile/games/mo6tw/tipsmenu.h
    src/profile/games/mo6tw/clearlistmenu.h
    src/profile/games/mo6tw/moviemenu.h
    src/profile/games/mo6tw/actorsvoicemenu.h
    src/profile/games/mo6tw/musicmenu.h
    src/profile/games/mo6tw/albummenu.h
    src/profile/games/mo6tw/tipsnotification.h

    src/profile/games/mo8/titlemenu.h
    src/profile/games/mo8/systemmenu.h
    src/profile/games/mo8/optionsmenu.h
    src/profile/games/mo8/savemenu.h

    src/profile/games/darling/sysmesbox.h

    src/games/rne/tilebackground.h
    src/games/rne/systemmenu.h
    src/games/rne/titlemenu.h
    src/games/rne/sysmesbox.h

    src/games/dash/titlemenu.h

    src/games/chlcc/commonmenu.h
    src/games/chlcc/titlemenu.h
    src/games/chlcc/savemenu.h
    src/games/chlcc/sysmesbox.h
    src/games/chlcc/animations/selectprompt.h
    src/games/chlcc/animations/menutransition.h
    src/games/chlcc/animations/saveicon.h
    src/games/chlcc/savesystem.h
    src/games/chlcc/tipssystem.h
    src/games/chlcc/clearlistmenu.h
    src/games/chlcc/moviemenu.h
    src/games/chlcc/albummenu.h
    src/games/chlcc/musicmenu.h
    src/games/chlcc/tipsmenu.h
    src/games/chlcc/optionsmenu.h
    src/games/chlcc/backlogmenu.h
    src/games/chlcc/systemmenu.h
    src/games/chlcc/trophymenu.h
    src/games/chlcc/delusiontrigger.h
    src/games/chlcc/introsequence.h

    src/games/cc/titlemenu.h
    src/games/cc/sysmesbox.h

    src/games/cclcc/titlemenu.h
    src/games/cclcc/savemenu.h
    src/games/cclcc/optionsmenu.h
    src/games/cclcc/tipsmenu.h
    src/games/cclcc/clearlistmenu.h
    src/games/cclcc/librarymenu.h
    src/games/cclcc/librarysubmenus.h
    src/games/cclcc/albummenu.h
    src/games/cclcc/musicmenu.h
    src/games/cclcc/moviemenu.h
    src/games/cclcc/mapsystem.h
    src/games/cclcc/delusiontrigger.h
    src/games/cclcc/helpmenu.h

    src/games/mo6tw/sysmesbox.h
    src/games/mo6tw/systemmenu.h
    src/games/mo6tw/titlemenu.h
    src/games/mo6tw/savemenu.h
    src/games/mo6tw/optionsmenu.h
    src/games/mo6tw/tipsmenu.h
    src/games/mo6tw/savesystem.h
    src/games/mo6tw/tipssystem.h
    src/games/mo6tw/clearlistmenu.h
    src/games/mo6tw/moviemenu.h
    src/games/mo6tw/actorsvoicemenu.h
    src/games/mo6tw/musicmenu.h
    src/games/mo6tw/albummenu.h

    src/games/mo8/titlemenu.h
    src/games/mo8/systemmenu.h
    src/games/mo8/optionsmenu.h
    src/games/mo8/savemenu.h

    src/games/darling/sysmesbox.h

    src/hud/dialoguebox.h
    src/hud/defaultsaveiconanimation.h
    src/hud/datedisplay.h
    src/hud/saveicondisplay.h
    src/hud/loadingdisplay.h
    src/hud/nametagdisplay.h
    src/hud/autoicondisplay.h
    src/hud/skipicondisplay.h
    src/hud/waiticondisplay.h
    src/hud/tipsnotification.h

    src/hud/cc/dialoguebox.h
    src/hud/cc/nametagdisplay.h

    src/hud/cclcc/tipsnotification.h

    src/hud/chlcc/dialoguebox.h
    src/hud/chlcc/nametagdisplay.h
    src/hud/chlcc/tipsnotification.h

    src/hud/mo6tw/dialoguebox.h
    src/hud/mo6tw/tipsnotification.h

    src/hud/rne/datedisplay.h

    src/ui/ui.h
    src/ui/menu.h
    src/ui/nullmenu.h
    src/ui/selectionmenu.h
    src/ui/sysmesbox.h
    src/ui/backlogmenu.h
    src/ui/tipsmenu.h
    src/ui/optionsmenu.h
    src/ui/widget.h
    src/ui/widgets/label.h
    src/ui/widgets/button.h
    src/ui/widgets/backlogentry.h
    src/ui/widgets/scrollbar.h
    src/ui/widgets/toggle.h
    src/ui/widgets/optiongroup.h
    src/ui/widgets/group.h
    src/ui/widgets/carousel.h
    src/ui/widgets/cgviewer.h
    src/ui/widgets/clickarea.h
    src/ui/widgets/mo6tw/titlebutton.h
    src/ui/widgets/mo6tw/saveentrybutton.h
    src/ui/widgets/mo6tw/tipsentrybutton.h
    src/ui/widgets/mo6tw/scenelistentry.h
    src/ui/widgets/mo6tw/imagethumbnailbutton.h
    src/ui/widgets/mo6tw/albumthumbnailbutton.h
    src/ui/widgets/mo6tw/actorsvoicebutton.h
    src/ui/widgets/mo6tw/albumcharacterbutton.h
    src/ui/widgets/chlcc/titlebutton.h
    src/ui/widgets/chlcc/saveentrybutton.h
    src/ui/widgets/chlcc/tipsentrybutton.h
    src/ui/widgets/chlcc/systemmenuentrybutton.h
    src/ui/widgets/chlcc/systemmessagebutton.h
    src/ui/widgets/chlcc/moviemenuentrybutton.h
    src/ui/widgets/chlcc/albumthumbnailbutton.h
    src/ui/widgets/chlcc/trackselectbutton.h
    src/ui/widgets/chlcc/backlogentry.h
    src/ui/widgets/chlcc/trophymenuentry.h
    src/ui/widgets/chlcc/optionsentry.h
    src/ui/widgets/chlcc/optionsbutton.h
    src/ui/widgets/chlcc/optionsslider.h
    src/ui/widgets/rne/sysmenubutton.h
    src/ui/widgets/cc/backlogentry.h
    src/ui/widgets/cc/titlebutton.h
    src/ui/widgets/cclcc/titlebutton.h
    src/ui/widgets/cclcc/optionsentry.h
    src/ui/widgets/cclcc/optionsbinarybutton.h
    src/ui/widgets/cclcc/optionsslider.h
    src/ui/widgets/cclcc/optionsvoiceslider.h
    src/ui/gamespecific.h

    src/renderer/3d/camera.h
    src/renderer/3d/model.h
    src/renderer/3d/renderable3d.h
    src/renderer/3d/transform.h
    src/renderer/3d/scene.h
    src/renderer/3d/animation.h
    src/renderer/3d/modelanimator.h

    src/io/io.h
    src/io/vfs.h
    src/io/buffering.h
    src/io/filemeta.h
    src/io/assetpath.h
    src/io/stream.h
    src/io/vfsarchive.h
    src/io/memorystream.h
    src/io/physicalfilestream.h
    src/io/uncompressedstream.h
    src/io/zlibstream.h

    src/texture/texture.h
    src/texture/s3tc.h
    src/texture/bcdecode.h
    src/texture/gxtloader.h
    src/texture/bntxloader.h
    src/texture/plainloader.h

    src/vm/vm.h
    src/vm/expression.h
    src/vm/thread.h
    src/vm/inst_macros.inc
    src/vm/inst_system.h
    src/vm/inst_controlflow.h
    src/vm/inst_dialogue.h
    src/vm/inst_gamespecific.h
    src/vm/inst_graphics2d.h
    src/vm/inst_graphics3d.h
    src/vm/inst_misc.h
    src/vm/inst_movie.h
    src/vm/inst_sound.h
    src/vm/opcodetables_rne.h

    src/vm/interface/scene3d.h
    src/vm/interface/input.h

    src/audio/audiobackend.h
    src/audio/audiosystem.h
    src/audio/audiocommon.h
    src/audio/audiochannel.h
    src/audio/audiostream.h
    src/audio/buffering.h
    src/audio/ffmpegaudioplayer.h
    src/audio/vorbisaudiostream.h
    src/audio/atrac9audiostream.h
    src/audio/adxaudiostream.h
    src/audio/hcaaudiostream.h

    src/video/videosystem.h
    src/video/videoplayer.h
    src/video/clock.h

    src/subtitle/subtitlesystem.h
    src/subtitle/subtitlerenderer.h
)

if (WIN32)
    list(APPEND Impacto_Src
        src/manifest_windows.manifest
    )
endif ()

add_library(clHCA STATIC vendor/clHCA/clHCA.c)
target_include_directories(clHCA PUBLIC vendor/clHCA)

add_library(minilua STATIC vendor/minilua/minilua_impl.c)
target_include_directories(minilua PUBLIC vendor)

add_library(pcg STATIC vendor/pcg/src/pcg_basic.c)
target_include_directories(pcg PUBLIC vendor/pcg/include)

add_library(squish STATIC
    vendor/squish/alpha.cpp
    vendor/squish/clusterfit.cpp
    vendor/squish/colourblock.cpp
    vendor/squish/colourfit.cpp
    vendor/squish/colourset.cpp
    vendor/squish/maths.cpp
    vendor/squish/rangefit.cpp
    vendor/squish/singlecolourfit.cpp
    vendor/squish/squish.cpp
)
target_include_directories(squish PUBLIC vendor/squish)

set(Impacto_Lib_Targets
    clHCA
    minilua
    pcg
    squish
)

if (NX OR EMSCRIPTEN)
    set(IMPACTO_DISABLE_VULKAN ON)
    set(IMPACTO_DISABLE_DX9 ON)
    set(IMPACTO_DISABLE_MMAP ON)
    set(BUILD_SHARED_LIBS OFF)
endif ()

if(ANDROID)
    set(IMPACTO_DISABLE_IMGUI ON)
endif ()

if (UNIX AND NOT CYGWIN)
    set(IMPACTO_DISABLE_DX9 ON)
endif ()

if (IMPACTO_ASAN)
    if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
        message(STATUS "Enabling ASAN/UBSAN for clang")
        add_compile_options(-fsanitize=address,undefined)
        add_link_options(-fsanitize=address,undefined)
    elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
        message(STATUS "Enabling ASAN/UBSAN for GCC")
        add_compile_options(-fsanitize=address,undefined)
        add_link_options(-fsanitize=address,undefined)
    elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
        message(STATUS "Enabling ASAN for MSVC") # Only ASAN supported for MSVC on Windows
        add_compile_options(/fsanitize=address)
    else ()
        message(WARNING "Unknown compiler, not enabling ASAN and UBSAN")
    endif ()
else ()
    message(STATUS "NOT enabling ASAN and UBSAN, consider enabling them when developing")
endif ()


if(ANDROID OR NX)
    set(BUILD_SHARED_LIBS OFF)
    set(LIBATRAC9_BUILD_SHARED OFF)
endif()

if(NX)
    add_compile_definitions(__SWITCH__)
endif()

# dependencies
FetchContent_Declare(
    glm
    GIT_REPOSITORY	https://github.com/g-truc/glm.git
	GIT_TAG "1.0.1"
    SYSTEM
    EXCLUDE_FROM_ALL
)

FetchContent_Declare(
    libatrac9
    GIT_TAG "master"
    GIT_REPOSITORY "https://github.com/Thealexbarney/LibAtrac9.git"
    PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/vendor/patches/LibAtrac9/CMakeLists.txt <SOURCE_DIR>/CMakeLists.txt
    SYSTEM
    EXCLUDE_FROM_ALL
)
if (NOT VCPKG_TOOLCHAIN)
    FetchContent_Declare(
        fmt
        GIT_REPOSITORY "https://github.com/fmtlib/fmt.git"
        GIT_TAG "11.1.4"
        SYSTEM
        EXCLUDE_FROM_ALL
    )
endif ()

FetchContent_Declare(
    pugixml
    GIT_REPOSITORY "https://github.com/zeux/pugixml.git"
    GIT_TAG "v1.14"
    SYSTEM
    EXCLUDE_FROM_ALL
)

FetchContent_Declare(
    utf8cpp
    GIT_REPOSITORY "https://github.com/nemtrif/utfcpp"
    GIT_TAG "v4.0.5"
    SYSTEM
    EXCLUDE_FROM_ALL
)

FetchContent_Declare(
    concurrentqueue
    GIT_REPOSITORY "https://github.com/cameron314/concurrentqueue"
    GIT_TAG "v1.0.4"
    SYSTEM
    EXCLUDE_FROM_ALL
)

FetchContent_Declare(
    readerwriterqueue
    GIT_REPOSITORY "https://github.com/cameron314/readerwriterqueue"
    GIT_TAG "16b48ae1148284e7b40abf72167206a4390a4592"
    SYSTEM
    EXCLUDE_FROM_ALL
)

FetchContent_Declare(
    unordered_dense
    GIT_REPOSITORY "https://github.com/martinus/unordered_dense"
    GIT_TAG "v4.5.0"
    SYSTEM
    EXCLUDE_FROM_ALL
)

FetchContent_Declare(
    magic_enum
    GIT_TAG "7d87efb4a3dddbbe8caa9ca14eff05ede1102ab8"
    GIT_REPOSITORY "https://github.com/Neargye/magic_enum.git"
    SYSTEM
    EXCLUDE_FROM_ALL
)

if (NOT VCPKG_TOOLCHAIN)
    FetchContent_MakeAvailable(fmt)
endif ()
FetchContent_MakeAvailable(glm)
FetchContent_MakeAvailable(pugixml)
FetchContent_MakeAvailable(utf8cpp)
FetchContent_MakeAvailable(libatrac9)
FetchContent_MakeAvailable(concurrentqueue)
FetchContent_MakeAvailable(readerwriterqueue)
FetchContent_MakeAvailable(unordered_dense)
FetchContent_MakeAvailable(magic_enum)

if (NOT DEFINED IMPACTO_DISABLE_MMAP)
    list(APPEND Impacto_Src
        src/io/memorymappedfilestream.cpp
    )
    list(APPEND Impacto_Header
        src/io/memorymappedfilestream.h
    )
    list(APPEND Impacto_Include_Dirs
        vendor/mio
    )
endif ()

if (NOT DEFINED IMPACTO_DISABLE_IMGUI)
    FetchContent_Declare(
            ImGui
            GIT_REPOSITORY "https://github.com/ocornut/imgui.git"
            GIT_TAG "1db579d458da29fa43376af9d88d486910d9406a"
    )

    FetchContent_MakeAvailable(ImGui)
endif ()

if (WIN32)
    # Workaround for RelWithDebInfo builds not installing all the libraries
    set(CMAKE_MAP_IMPORTED_CONFIG_MINSIZEREL Release)
    set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO Release)

    set(SDL2_LIBRARIES SDL2::SDL2 SDL2::SDL2main)
endif ()

if (NOT NX) # avoid CMAKE_DL_LIBS for NX
    list(APPEND Impacto_Libs
        ${CMAKE_DL_LIBS}
    )
endif ()

list(APPEND Impacto_Include_Dirs ${CMAKE_CURRENT_SOURCE_DIR}/vendor)
list(APPEND Impacto_Include_Dirs ${CMAKE_CURRENT_SOURCE_DIR}/vendor/include)

if (NOT DEFINED IMPACTO_DISABLE_OPENGL)
    list(APPEND Impacto_Include_Dirs ${CMAKE_CURRENT_SOURCE_DIR}/vendor/glad/include)
endif ()

if(ANDROID)
    set(SDL2_LIBRARIES SDL2::SDL2-static SDL2::SDL2main)

    if (NOT DEFINED IMPACTO_DISABLE_OPENGL)
        find_library(GLESv3 GLESv3)
        list(APPEND Impacto_Libs
            GLESv3
        )
        
    endif ()
endif ()

if (NOT DEFINED IMPACTO_DISABLE_OPENAL)
    find_package(OpenAL REQUIRED)

    list(APPEND Impacto_Libs
            ${OPENAL_LIBRARY}
    )

    list(APPEND Impacto_Src
        src/audio/openal/audiobackend.cpp
        src/audio/openal/openalaudiochannel.cpp
        src/audio/openal/ffmpegaudioplayer.cpp
    )
    list(APPEND Impacto_Header
        src/audio/openal/audiobackend.h
        src/audio/openal/openalaudiochannel.h
        src/audio/openal/audiocommon.h
        src/audio/openal/ffmpegaudioplayer.h
    )

    list(APPEND Impacto_Include_Dirs ${OPENAL_INCLUDE_DIR})
endif ()

if (EMSCRIPTEN)
    # BINARYEN_TRAP_MODE=clamp => https://groups.google.com/forum/#!topic/emscripten-discuss/IJr4ApiW_zU
    # duk_heap_alloc() errors without this
    # MAIN_MODULE=1 => SDL_GL_GetProcAddress falls back to dlsym() so we need dynamic linking support (...)

    set(IMPACTO_EMSCRIPTEN_BUILD_FLAGS "\
        -s USE_SDL=2 \
        -s USE_ZLIB=1 \
        -s USE_OGG=1 \
        -s USE_VORBIS=1 \
        -s WASM=1 \
        -s USE_WEBGL2=1 \
        -s MAIN_MODULE=2 \
        -s BINARYEN_TRAP_MODE=clamp \
        -s ALLOW_MEMORY_GROWTH=1 \
        -g4 \
        --preload-file ${CMAKE_CURRENT_SOURCE_DIR}/profiles@/profiles \
        --preload-file ${CMAKE_CURRENT_SOURCE_DIR}/games@/games \
        --preload-file ${CMAKE_CURRENT_SOURCE_DIR}/src/shaders@/shaders \
    ")
    if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
        set(IMPACTO_EMSCRIPTEN_BUILD_FLAGS "${IMPACTO_EMSCRIPTEN_BUILD_FLAGS} \
            -s GL_ASSERTIONS=1 \
            -s GL_DEBUG=1 \
        ")
    else ()
        set(IMPACTO_EMSCRIPTEN_BUILD_FLAGS "${IMPACTO_EMSCRIPTEN_BUILD_FLAGS} \
            -O3 \
        ")
    endif ()
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${IMPACTO_EMSCRIPTEN_BUILD_FLAGS}")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${IMPACTO_EMSCRIPTEN_BUILD_FLAGS}")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${IMPACTO_EMSCRIPTEN_BUILD_FLAGS}")

    string(REPLACE "-O2" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
    string(REPLACE "-O2" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
    string(REPLACE "-O2" "" CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
else ()
    find_package(SDL2 CONFIG REQUIRED)
    find_package(ZLIB REQUIRED)

    set(SDL2_LIBRARIES 
        "$<TARGET_NAME_IF_EXISTS:SDL2::SDL2main>"
        "$<IF:$<TARGET_EXISTS:SDL2::SDL2>,SDL2::SDL2,SDL2::SDL2-static>"
    )
    if (NX)
        pkg_check_modules(ogg REQUIRED IMPORTED_TARGET ogg)
        pkg_check_modules(vorbis REQUIRED IMPORTED_TARGET vorbis)
        pkg_check_modules(vorbisfile REQUIRED IMPORTED_TARGET vorbisfile)
        pkg_check_modules(libwebp REQUIRED IMPORTED_TARGET libwebp)
        list(APPEND Impacto_Libs
            ${SDL2_LIBRARIES}
            ZLIB::ZLIB
            PkgConfig::vorbisfile
            PkgConfig::vorbis
            PkgConfig::ogg
            PkgConfig::libwebp
            EGL
            glapi
            drm_nouveau
            nx
        )
    else ()
        find_package(Ogg CONFIG REQUIRED)
        find_package(Vorbis CONFIG REQUIRED)
        find_package(WebP CONFIG REQUIRED)

        list(APPEND Impacto_Libs
            ${SDL2_LIBRARIES}
            ZLIB::ZLIB
            WebP::webp WebP::webpdecoder WebP::webpdemux
            Ogg::ogg
            Vorbis::vorbis
            Vorbis::vorbisfile
        )

        add_definitions(-DIMPACTO_OPENAL_HAVE_ALEXT)
    endif ()
endif ()

list(APPEND Impacto_Include_Dirs ${SDL2_INCLUDE_DIRS})
list(APPEND Impacto_Include_Dirs ${WebP_INCLUDE_DIRS})

if (VCPKG_TOOLCHAIN)
    find_package(fmt CONFIG REQUIRED)
endif ()
list(APPEND Impacto_Libs fmt::fmt)

list(APPEND Impacto_Libs
        pugixml::pugixml
        atrac9
        unordered_dense::unordered_dense
        magic_enum
        glm::glm
        utf8cpp
        concurrentqueue
        readerwriterqueue
)

if (NOT DEFINED IMPACTO_DISABLE_LIBASS)
    list(APPEND Impacto_Src src/subtitle/ass/subtitlerenderer.cpp)
    list(APPEND Impacto_Header src/subtitle/ass/subtitlerenderer.h)
    
    pkg_check_modules(ass REQUIRED IMPORTED_TARGET GLOBAL libass)
    # Libass links libc++ which overrides the static stllib linkage 
    if(ANDROID)
        get_target_property(ASS_LINK_LIBS PkgConfig::ass INTERFACE_LINK_LIBRARIES)
        set(CLEANED_ASS_LINK_LIBS "")
        foreach(LIB_PATH IN LISTS ASS_LINK_LIBS)
            get_filename_component(LIB_NAME "${LIB_PATH}" NAME)
            
            # Check if the filename starts with "libc++." or "libc++_"
            if(NOT ("${LIB_NAME}" MATCHES "^libc\\+\\+\\." OR "${LIB_NAME}" MATCHES "^libc\\+\\+_"))
                list(APPEND CLEANED_ASS_LINK_LIBS "${LIB_PATH}")
            endif()
        endforeach()

        set_target_properties(PkgConfig::ass PROPERTIES INTERFACE_LINK_LIBRARIES "${CLEANED_ASS_LINK_LIBS}")
    endif()
    list(APPEND Impacto_Libs
        PkgConfig::ass
    )

endif()

if (NOT DEFINED IMPACTO_DISABLE_IMGUI)
    set(imgui_src
        ${imgui_SOURCE_DIR}/imgui.cpp
        ${imgui_SOURCE_DIR}/imgui_demo.cpp
        ${imgui_SOURCE_DIR}/imgui_draw.cpp
        ${imgui_SOURCE_DIR}/imgui_tables.cpp
        ${imgui_SOURCE_DIR}/imgui_widgets.cpp
        ${imgui_SOURCE_DIR}/misc/cpp/imgui_stdlib.cpp
        ${imgui_SOURCE_DIR}/backends/imgui_impl_sdl2.cpp
    )
    set(imgui_Include_Dirs
        ${imgui_SOURCE_DIR}
        ${imgui_SOURCE_DIR}/backends
    )

    list(APPEND Impacto_Src src/debugmenu.cpp)
    list(APPEND Impacto_Header src/debugmenu.h)

    if (NOT DEFINED IMPACTO_DISABLE_OPENGL)
        list(APPEND imgui_src
            vendor/imgui_custom/backends/imgui_impl_opengl3.cpp
        )
        list(APPEND imgui_Include_Dirs
            vendor/imgui_custom/backends
        )
    endif ()

    if (NOT DEFINED IMPACTO_DISABLE_VULKAN)
        list(APPEND imgui_src
            ${imgui_SOURCE_DIR}/backends/imgui_impl_vulkan.cpp
        )
    endif ()

    if (NOT DEFINED IMPACTO_DISABLE_DX9)
        list(APPEND imgui_src
            ${imgui_SOURCE_DIR}/backends/imgui_impl_dx9.cpp
        )
    endif ()

    add_library(imgui STATIC ${imgui_src})
    target_include_directories(imgui
        PUBLIC ${imgui_Include_Dirs}
        PRIVATE ${SDL2_INCLUDE_DIRS}
    )
    target_link_libraries(imgui PRIVATE ${SDL2_LIBRARIES})
    list(APPEND Impacto_Lib_Targets imgui)
endif ()

if (NOT DEFINED IMPACTO_DISABLE_OPENGL)
    list(APPEND Impacto_Src
        src/renderer/opengl/window.cpp
        src/renderer/opengl/renderer.cpp
        src/renderer/opengl/shader.cpp
        src/renderer/opengl/glc.cpp
        src/renderer/opengl/yuvframe.cpp
        src/renderer/opengl/nv12frame.cpp
        src/renderer/opengl/3d/renderable3d.cpp
        src/renderer/opengl/3d/scene.cpp

        vendor/glad/src/glad.c
    )
    list(APPEND Impacto_Header
        src/renderer/opengl/window.h
        src/renderer/opengl/renderer.h
        src/renderer/opengl/shader.h
        src/renderer/opengl/glc.h
        src/renderer/opengl/yuvframe.h
        src/renderer/opengl/nv12frame.h
        src/renderer/opengl/3d/renderable3d.h
        src/renderer/opengl/3d/scene.h
    )

endif ()

if (NOT DEFINED IMPACTO_DISABLE_FFMPEG)
    list(APPEND Impacto_Src
        src/video/ffmpegplayer.cpp
        src/video/ffmpegstream.cpp
        src/subtitle/ffmpegsubtitlehelper.cpp
    )
    list(APPEND Impacto_Header
        src/video/ffmpegplayer.h
        src/video/ffmpegstream.h
        src/subtitle/ffmpegsubtitlehelper.h
    )

    if (NOT VCPKG_TOOLCHAIN)
        if(NOT BUILD_SHARED_LIBS)
            set(AV_ENABLE_SHARED OFF CACHE BOOL "Enable shared library build (Off)" FORCE)            
        endif()
        set(AV_DISABLE_AVDEVICE ON CACHE INTERNAL "Disable FFMPEG AVDevice")
        set(AV_DISABLE_AVFILTER ON CACHE INTERNAL "Disable FFMPEG AVFilter")
        set(AV_BUILD_EXAMPLES OFF CACHE INTERNAL "Build AVCPP Examples")
        FetchContent_Declare(
            avcpp
            GIT_REPOSITORY "https://github.com/h4tr3d/avcpp"
            GIT_TAG "6bf8c76b120cf2cc448d706ea22f112017803605"
            SYSTEM
            GIT_SUBMODULES ""
            PATCH_COMMAND ${AVCPP_PATCH}
            UPDATE_DISCONNECTED 1
        )

        FetchContent_MakeAvailable(avcpp)
        pkg_check_modules(FFmpeg REQUIRED IMPORTED_TARGET 
            libavcodec 
            libavutil 
            libswscale
            libswresample
            libavformat 
        )

        list(APPEND Impacto_Libs
            avcpp
            PkgConfig::FFmpeg
        )
    else ()
        find_package(FFMPEG REQUIRED)
        list(APPEND Impacto_Include_Dirs ${FFMPEG_INCLUDE_DIRS})
        list(APPEND Impacto_Libs ${FFMPEG_LIBRARIES})

        find_package(avcpp CONFIG REQUIRED)
        list(APPEND Impacto_Libs
            avcpp::avcpp
            avcpp::FFmpeg
        )
        
    endif ()
    list(APPEND Impacto_Include_Dirs ${FFMPEG_INCLUDE_DIRS})
    list(APPEND Impacto_Libs ${FFMPEG_LIBRARIES})
    pkg_check_modules(dav1d REQUIRED IMPORTED_TARGET dav1d)
    list(APPEND Impacto_Libs PkgConfig::dav1d)
    if(ANDROID)
        find_library(mediandk-lib mediandk)
        list(APPEND Impacto_Libs ${mediandk-lib})
    endif()
endif ()

if (NOT DEFINED IMPACTO_DISABLE_MSPACK)
    add_library(mspack STATIC
        vendor/mspack/lzxd.c
        vendor/mspack/system.c
    )
    target_include_directories(mspack PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/vendor/mspack)
    list(APPEND Impacto_Lib_Targets mspack)

    list(APPEND Impacto_Src src/io/lzxstream.cpp)
    list(APPEND Impacto_Header src/io/lzxstream.h)
endif ()

if (NOT DEFINED IMPACTO_DISABLE_VULKAN)
    list(APPEND Impacto_Src
        src/renderer/vulkan/window.cpp
        src/renderer/vulkan/renderer.cpp
        src/renderer/vulkan/pipeline.cpp
        src/renderer/vulkan/utils.cpp
        src/renderer/vulkan/yuvframe.cpp
        src/renderer/vulkan/nv12frame.cpp
        src/renderer/vulkan/3d/renderable3d.cpp
        src/renderer/vulkan/3d/scene.cpp
    )
    list(APPEND Impacto_Header
        src/renderer/vulkan/window.h
        src/renderer/vulkan/renderer.h
        src/renderer/vulkan/pipeline.h
        src/renderer/vulkan/utils.h
        src/renderer/vulkan/yuvframe.h
        src/renderer/vulkan/nv12frame.h
        src/renderer/vulkan/3d/renderable3d.h
        src/renderer/vulkan/3d/scene.h
    )

    find_package(Vulkan REQUIRED)

    list(APPEND Impacto_Libs
            ${Vulkan_LIBRARIES}
    )
    list(APPEND Impacto_Include_Dirs ${Vulkan_INCLUDE_DIRS})
endif ()

if (NOT DEFINED IMPACTO_DISABLE_DX9)
    list(APPEND Impacto_Src
        src/renderer/dx9/renderer.cpp
        src/renderer/dx9/window.cpp
        src/renderer/dx9/shader.cpp
        src/renderer/dx9/yuvframe.cpp
        src/renderer/dx9/nv12frame.cpp
        src/renderer/dx9/3d/scene.cpp
        src/renderer/dx9/3d/renderable3d.cpp
    )
    list(APPEND Impacto_Header
        src/renderer/dx9/utils.h
        src/renderer/dx9/renderer.h
        src/renderer/dx9/window.h
        src/renderer/dx9/shader.h
        src/renderer/dx9/yuvframe.h
        src/renderer/dx9/nv12frame.h
        src/renderer/dx9/3d/scene.h
        src/renderer/dx9/3d/renderable3d.h
    )

    list(APPEND Impacto_Libs
            d3d9
            d3dcompiler
    )
endif ()

if(ANDROID)
    add_library(impacto SHARED ${Impacto_Src} ${Impacto_Header})
    target_link_options(impacto PRIVATE "LINKER:--build-id=sha1")
else()
    add_executable(impacto ${Impacto_Src} ${Impacto_Header})
endif()

set_property(TARGET impacto PROPERTY COMPILE_WARNING_AS_ERROR ON)

if(MSVC)
    set_property(TARGET impacto PROPERTY WIN32_EXECUTABLE TRUE)
endIf()

list(APPEND Impacto_Libs ${Impacto_Lib_Targets})
target_link_libraries(impacto PRIVATE ${Impacto_Libs})

target_compile_options(impacto PRIVATE "$<$<C_COMPILER_ID:MSVC>:/utf-8>")
target_compile_options(impacto PRIVATE "$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")

if (IMPACTO_WARNINGS)
    if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
        message(STATUS "Enabling warnings for clang")
        target_compile_options(impacto PRIVATE -Wall -Wextra -Wno-unused-parameter -Wno-nullability-completeness)
    elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
        message(STATUS "Enabling warnings for GCC")
        target_compile_options(impacto PRIVATE -Wall -Wextra -Wno-unused-parameter)
    elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
        message(STATUS "Enabling warnings for MSVC")
        target_compile_options(impacto PRIVATE /W4 /external:anglebrackets /external:W0 /wd4100 /wd4324 /w15038 /w44388 /w44062)
    else ()
        message(WARNING "Unknown compiler, not enabling warnings")
    endif ()
else ()
    message(STATUS "NOT enabling compiler warnings, consider enabling them when developing")
endif ()

# compiler/dependency configuration
target_compile_options(impacto PRIVATE ${Impacto_Compile_Options})
set_property(TARGET impacto ${Impacto_Lib_Targets} PROPERTY CXX_STANDARD 20)
set_property(TARGET impacto PROPERTY CXX_SCAN_FOR_MODULES OFF)

# Hot reload for MSVC
if(NOT IMPACTO_ASAN)
    set_property(TARGET impacto PROPERTY MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>")
endif()

if (EMSCRIPTEN)
    set(CMAKE_EXECUTABLE_SUFFIX ".html")
endif ()

if (NX)
    add_definitions(-DENV64BIT)
else ()
    if (CMAKE_SIZEOF_VOID_P EQUAL 8)
        add_definitions(-DENV64BIT)
    else ()
        add_definitions(-DENV32BIT)
        endif ()
endif ()

add_definitions(-DGLM_FORCE_RADIANS) # lol

# target configuration

if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
    set(IMPACTO_ENABLE_SLOW_LOG_DEFAULT ON)
    set(IMPACTO_GL_DEBUG_DEFAULT ON)
else ()
    set(IMPACTO_ENABLE_SLOW_LOG_DEFAULT OFF)
    set(IMPACTO_GL_DEBUG_DEFAULT OFF)
endif ()

option(IMPACTO_ENABLE_SLOW_LOG
"Compile log statements that get hit very frequently or are in a hot path"
${IMPACTO_ENABLE_SLOW_LOG_DEFAULT})
option(IMPACTO_GL_DEBUG
"Use an OpenGL debug context and log messages"
${IMPACTO_GL_DEBUG_DEFAULT})

if (EMSCRIPTEN)
    set(IMPACTO_HAVE_THREADS OFF)
    set(IMPACTO_USE_SDL_HIGHDPI ON)
else ()
    set(IMPACTO_HAVE_THREADS ON)
    set(IMPACTO_USE_SDL_HIGHDPI OFF)
endif ()

# Enable Hot Reload for MSVC compilers if supported.
if (POLICY CMP0141)
  cmake_policy(SET CMP0141 NEW)
  set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>")
endif()

configure_file(src/config.h.in ${PROJECT_BINARY_DIR}/include/config.h)
target_include_directories(impacto SYSTEM BEFORE PRIVATE ${Impacto_Include_Dirs})
target_include_directories(impacto PRIVATE ${PROJECT_BINARY_DIR}/include)

target_precompile_headers(impacto PRIVATE 
    "$<$<COMPILE_LANGUAGE:CXX>:${CMAKE_SOURCE_DIR}/src/pch.h>"
)

# binary install

if (ANDROID)
    install(TARGETS impacto LIBRARY DESTINATION ${CMAKE_SOURCE_DIR}/android/app/src/main/jniLibs/${CMAKE_ANDROID_ARCH_ABI})
elseif (NX)
    install(TARGETS impacto RUNTIME DESTINATION .)
elseif (WIN32)
    install(TARGETS impacto RUNTIME DESTINATION .)
    install(FILES $<TARGET_RUNTIME_DLLS:impacto> DESTINATION .)
    x_vcpkg_install_local_dependencies(TARGETS impacto DESTINATION .)
else()
    if (APPLE)
        set_property(
            TARGET impacto
            PROPERTY INSTALL_RPATH
            "@loader_path/"
            "@loader_path/lib"
        )
    elseif (LINUX)
        set_property(
            TARGET impacto
            PROPERTY INSTALL_RPATH
            "$ORIGIN/"
            "$ORIGIN/lib"
            )  
    endif()

    LIST(APPEND post_exclude_regexes "^/lib" "^/usr" "^/bin" "libvulkan\\.so(\\..*)?")
    install(TARGETS impacto atrac9
        RUNTIME_DEPENDENCIES
        POST_EXCLUDE_REGEXES ${post_exclude_regexes}
        RUNTIME DESTINATION .
        LIBRARY DESTINATION ./lib
        FRAMEWORK DESTINATION ./lib
    )
endif ()

# asset install

if (NOT ANDROID)
    install(DIRECTORY src/shaders DESTINATION .)
    install(DIRECTORY profiles DESTINATION .)
    install(DIRECTORY games DESTINATION .)
else()
    install(DIRECTORY src/shaders DESTINATION ${CMAKE_SOURCE_DIR}/android/app/src/main/assets)
    install(DIRECTORY profiles DESTINATION ${CMAKE_SOURCE_DIR}/android/app/src/main/assets)
    install(DIRECTORY games DESTINATION ${CMAKE_SOURCE_DIR}/android/app/src/main/assets PATTERN "*/gamedata/*" EXCLUDE)
endif()




================================================
FILE: CMakePresets.json
================================================
{
  "version": 3,
  "cmakeMinimumRequired": {
    "major": 3,
    "minor": 25,
    "patch": 0
  },
  "configurePresets": [
    {
      "name": "Base",
      "description": "Default Base Configuration",
      "hidden": true,
      "generator": "Ninja",
      "binaryDir": "${sourceDir}/impacto-build/${presetName}",
      "installDir": "${sourceDir}/install/${presetName}",
      "toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Debug",
        "CMAKE_EXPORT_COMPILE_COMMANDS": "YES",
        "VCPKG_OVERLAY_PORTS": "${sourceDir}/portfiles",
        "IMPACTO_WARNINGS": "ON"
      }
    },
    {
      "name": "Release",
      "description": "Default Release Build",
      "hidden": false,
      "inherits": [
        "Base"
      ],
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "RelWithDebInfo"
      }
    },
    {
      "name": "Debug",
      "description": "Default Debug Build",
      "hidden": false,
      "inherits": [
        "Base"
      ],
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Debug"
      }
    },
    {
      "name": "ci-release",
      "description": "Release build for CI",
      "hidden": false,
      "generator": "Ninja",
      "binaryDir": "ci-build/${presetName}",
      "installDir": "release/${presetName}",
      "toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Release",
        "VCPKG_OVERLAY_TRIPLETS": "${sourceDir}/triplets",
        "VCPKG_OVERLAY_PORTS": "${sourceDir}/portfiles",
        "IMPACTO_WARNINGS": "ON"
      }
    },
    {
      "name": "ci-release-android",
      "description": "Android Release build for CI",
      "hidden": false,
      "inherits": [
        "ci-release"
      ],
      "cacheVariables": {
        "VCPKG_TARGET_TRIPLET":"arm64-android-ci",
        "VCPKG_CHAINLOAD_TOOLCHAIN_FILE":"$env{VCPKG_ROOT}/scripts/toolchains/android.cmake",
        "CMAKE_FIND_ROOT_PATH_MODE_LIBRARY": "BOTH",
        "CMAKE_FIND_ROOT_PATH_MODE_INCLUDE": "BOTH",
        "CMAKE_FIND_ROOT_PATH_MODE_PACKAGE": "BOTH",
        "ANDROID_PLATFORM":"android-$env{MINSDKVERSION}",
        "ANDROID_ABI": "arm64-v8a",
        "ANDROID_STL": "c++_static"
      }
    }
  ],
  "buildPresets": [
    {
      "name": "ci-release",
      "description": "x64 Release",
      "configurePreset": "ci-release",
      "targets": [
        "install"
      ]
    },
    {
      "name": "ci-release-android",
      "description": "x64 Release Android",
      "configurePreset": "ci-release-android",
      "targets": [
        "install"
      ]
    },
    {
      "name": "x64-Release",
      "description": "x64 Release with Debug Symbols",
      "configurePreset": "Release",
      "targets": [
        "install"
      ]
    },
    {
      "name": "x64-Debug",
      "description": "x64 Debug",
      "configurePreset": "Debug",
      "targets": [
        "install"
      ]
    }
  ]
}

================================================
FILE: HorizonNX.toolchain
================================================

set(CMAKE_SYSTEM_NAME "Generic")
set(WITH_PORTLIBS ON CACHE BOOL "use portlibs ?")

macro(msys_to_cmake_path MsysPath ResultingPath)
	if(WIN32)
		string(REGEX REPLACE "^/([a-zA-Z])/" "\\1:/" ${ResultingPath} "${MsysPath}")
	else()
		set(${ResultingPath} "${MsysPath}")
	endif()
endmacro()

msys_to_cmake_path("$ENV{DEVKITPRO}" DEVKITPRO)

set(NX 1)
list(APPEND CMAKE_PREFIX_PATH "${DEVKITPRO}/portlibs/switch/lib/cmake")

if(WIN32)
 set(CMAKE_C_COMPILER "${DEVKITPRO}/devkitA64/bin/aarch64-none-elf-gcc.exe")
 set(CMAKE_CXX_COMPILER "${DEVKITPRO}/devkitA64/bin/aarch64-none-elf-g++.exe")
 set(CMAKE_AR "${DEVKITPRO}/devkitA64/bin/aarch64-none-elf-gcc-ar.exe" CACHE STRING "")
 set(CMAKE_RANLIB "${DEVKITPRO}/devkitA64/bin/aarch64-none-elf-gcc-ranlib.exe" CACHE STRING "")
else()
  set(CMAKE_C_COMPILER "${DEVKITPRO}/devkitA64/bin/aarch64-none-elf-gcc")
  set(CMAKE_CXX_COMPILER "${DEVKITPRO}/devkitA64/bin/aarch64-none-elf-g++")
  set(CMAKE_AR "${DEVKITPRO}/devkitA64/bin/aarch64-none-elf-gcc-ar" CACHE STRING "")
  set(CMAKE_RANLIB "${DEVKITPRO}/devkitA64/bin/aarch64-none-elf-gcc-ranlib" CACHE STRING "")
endif()

set(PKG_CONFIG_EXECUTABLE "${DEVKITPRO}/portlibs/switch/bin/aarch64-none-elf-pkg-config" CACHE STRING "")
set(CMAKE_C_FLAGS "${CPPFLAGS} -march=armv8-a -mtune=cortex-a57 -mtp=soft -fPIC -ffunction-sections" CACHE STRING "C flags")
set(CMAKE_CXX_FLAGS "${CPPFLAGS} ${CMAKE_C_FLAGS}" CACHE STRING "C++ flags")

if(WITH_PORTLIBS)
    set(CMAKE_FIND_ROOT_PATH ${DEVKITPRO}/devkitA64 ${DEVKITPRO} ${DEVKITPRO}/libnx ${DEVKITPRO}/portlibs/switch)
else()
    set(CMAKE_FIND_ROOT_PATH ${DEVKITPRO}/devkitA64 ${DEVKITPRO}/libnx ${DEVKITPRO})
endif()

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
#set(CMAKE_STATIC_LINKER_FLAGS_INIT "-march=armv8-a -mtune=cortex-a57 -mtp=soft -L${DEVKITPRO}/libnx/lib -L${DEVKITPRO}/portlibs/switch/lib")
set(CMAKE_EXE_LINKER_FLAGS_INIT "-specs=${DEVKITPRO}/libnx/switch.specs -march=armv8-a -mtune=cortex-a57 -mtp=soft -fPIE -L${DEVKITPRO}/libnx/lib -L${DEVKITPRO}/portlibs/switch/lib")

set(BUILD_SHARED_LIBS OFF CACHE INTERNAL "Shared libs not available")

================================================
FILE: LICENSE
================================================
Copyright (c) 2024 Committee of Zero and contributors

Permission to use, copy, modify, and/or distribute this software for
any purpose with or without fee is hereby granted, provided that the
above copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.


================================================
FILE: README.md
================================================
# impacto [![impacto](https://github.com/CommitteeOfZero/impacto/actions/workflows/impacto.yml/badge.svg)](https://github.com/CommitteeOfZero/impacto/actions/workflows/impacto.yml)

**impacto** is an open-source **reimplementation** of the **"MAGES." visual novel engine** in C++ and OpenGL. Using the original data files, impacto can run any supported game on any supported platform.

## Status

**impacto is in active development**. At current stage it should be possible to reach all endings in at least one supported game - "Memories Off 6 \~T-Wave\~." However, some functionality and architectural design are still missing and **no games are fully complete yet**. Refer to [#1](https://github.com/CommitteeOfZero/impacto/issues/1) for supported games and remaining work.

impacto is currently being developed for **64-bit Windows 10 and desktop Linux PCs** but we've successfully experimented on macOS, Android (ARM), Switch (homebrew and Linux) and HTML5/WebAssembly (via Emscripten) and full official Android support is planned. OpenGL is used for the graphics renderer with experimental Vulkan and DirectX 9 options available.

## Building

For building on Windows with Visual Studio 2019 or newer, please refer to the [building instructions](doc/vs_build.md).

For building on Linux, see the [instructions for Ubuntu Desktop](doc/ubuntu_build.md) and adapt to your distribution if necessary.

More platforms and toolchains are known to work.

## Contributing

**We are looking for contributors!** Check out the [Getting Started guide](doc/getting_started.md) for pointers on setting up games for testing, finding your way around the codebase and adding functionality. Also check out the [Contributor guide](doc/contributor_guide.md) for important information on the code style you should follow.

There is work to be done for C++ programmers of any skill level in a wide range of subjects, on game engine architecture (design and implementation), reverse-engineering the original (looking at just the game's outside behaviour as a *black box* or inspecting the internals through a *white box*), replicating it, improving on it with new functionality, documenting our efforts, fixing bugs and polish. 

If you're interested, [come join our Discord](https://discord.gg/rq4GGCh) to discuss ideas and help you get into it.

## Legal stuff

impacto source code as a whole is released under the liberal [ISC license](LICENSE). Some parts are based on or copied from third-party code under various licenses. Binary distributions or parts thereof may fall under more restrictive licensing terms. See [THIRDPARTY.md](THIRDPARTY.md) for details and attribution.



================================================
FILE: THIRDPARTY.md
================================================
# Third-party component index

**impacto contains third-party code at the following locations in the source distribution:**

* `src/audio/adxaudiostream.cpp`: based on [vgmstream](https://github.com/losnoco/vgmstream) ADX implementation
* `src/io/cpkarchive.cpp`: CRILAYLA decompression based on work by [tpu](https://forum.xentax.com/viewtopic.php?f=21&t=5137&hilit=CRILAYLA) and [hcs64/vgm_ripping/utf_tab](https://github.com/hcs64/vgm_ripping/tree/master/multi/utf_tab)
* `src/texture/bcdecode.cpp`: based on [bcndecode](https://github.com/ifeherva/bcndecode)
* `src/texture/bntxloader.cpp`: Unswizzling code based on [Ryujinx](https://github.com/Ryujinx/Ryujinx)
* `src/texture/gxtloader.cpp`: Unswizzling code based on [Scarlet](https://github.com/xdanieldzd/Scarlet/blob/d8aabf430307d35a81b131e40bb3c9a4828bdd7b/Scarlet/Drawing/ImageBinary.cs) and work by [FireyFly](http://xen.firefly.nu/up/rearrange.c.html) and [ryg](https://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/)
* `src/texture/s3tc.cpp`: based on [s3tc-dxt-decompression](https://github.com/Benjamin-Dobell/s3tc-dxt-decompression)
* `src/texture/ddsloader.cpp`: based on [OpenImageIO](https://github.com/OpenImageIO/oiio/tree/master/src/dds.imageio)
* `src/video/ffmpegplayer.cpp`: syncing code based on [FFplay](https://github.com/FFmpeg/FFmpeg/blob/master/fftools/ffplay.c)
* `vendor/clHCA`: part of [vgmstream](https://github.com/losnoco/vgmstream)
* `vendor/minilua`: [minilua](https://github.com/edubart/minilua)
* `vendor/glad`: output from [glad](https://github.com/Dav1dde/glad) generator, patched for Switch support
* `vendor/include/stb_image.h`: [stb_image](https://github.com/nothings/stb)
* `vendor/imgui`: [Dear ImGui](https://github.com/ocornut/imgui)
* `vendor/pcg`: [PCG Random Number Generation, Minimal C Edition](https://github.com/imneme/pcg-c-basic)
* `vendor/squish`: [Squish](http://sjbrown.co.uk/?code=squish)
* `vendor/utf8-cpp`: [UTF8-CPP](https://github.com/nemtrif/utfcpp)
* `vendor/mspack`: [libmspack](https://www.cabextract.org.uk/libmspack/), only includes LZX decompressor to reduce code size
* `vendor/mio`: [mio](https://github.com/vimpunk/mio), except for platforms without mmap support

All third-party code mentioned above is mandatory, included in the build process and compiled into the output executable for impacto on every supported platform and build configuration.

**Additionally, impacto depends on the following external libraries:**

* Platform implementations of C runtime, C++ STL, OpenAL and OpenGL (ES)
* [glm](https://github.com/g-truc/glm/)
* [LibAtrac9](https://github.com/Thealexbarney/LibAtrac9)
* [Ogg](https://github.com/xiph/ogg)
* [SDL2](https://libsdl.org/download-2.0.php)
* [Vorbis](https://github.com/xiph/vorbis)
* [zlib](https://github.com/madler/zlib)
* [libass](https://github.com/libass/libass)
* [avcpp](https://github.com/h4tr3d/avcpp)
* [concurrent_queue](https://github.com/cameron314/concurrentqueue)
* [readerwriterqueue](https://github.com/cameron314/readerwriterqueue)
* [fmtlib](https://github.com/fmtlib/fmt)
* [pugixml](https://github.com/zeux/pugixml)
* [UTF8-CPP](https://github.com/nemtrif/utfcpp)
* [magic_enum](https://github.com/Neargye/magic_enum)

**Sourcing and linkage:**

* Refer to individual toolchain/platform documentation for standard library licenses and default external library sourcing behaviour.
* Emscripten, NX, Android builds use static linking for all other external libraries, other platforms use dynamic linking.
* Some external dependencies (due to being header only libraries) are always compiled into the output executable.
* The example Emscripten build process explicitly uses emscripten-ports packages for [Ogg](https://github.com/emscripten-ports/Ogg), [SDL2](https://github.com/emscripten-ports/SDL2), [Vorbis](https://github.com/emscripten-ports/Vorbis) and [zlib](https://github.com/emscripten-ports/zlib).
* Win32/MSVC, Linux, Android, Mac OS X build processes explicitly uses vcpkg packages listed in vcpkg.json, and the original authors' source distributions for other dependencies.
* Win32 install targets copy all required DLLs except the standard C/C++ runtime libraries to the output folder.

**Binary licensing:**

* Unless specified otherwise, impacto source and binaries are covered by [the ISC license](LICENSE) but contain and use the dependencies listed above, requiring third-party copyright notices.
* NX builds statically link OpenAL Soft (assuming this is used as the OpenAL implementation), placing NX binaries under LGPLv2 or later.
* Android builds statically link FFmpeg, placing those binaries under LGPLv2. To disable FFmpeg, use define -DIMPACTO_DISABLE_FFMPEG.
* All builds ship with libmspack in the impacto executable, placing it under LGPLv2 or later. If you wish to disable libmspack and get rid of LGPLv2 dependency, please use -DIMPACTO_DISABLE_MSPACK
  define.

License statements for third-party code in this repository (where given) and external libraries bundled by the build process in at least one supported configuration follow:

# Statements

## bcndecode

https://github.com/ifeherva/bcndecode/blob/5bc7043002d7b2485c857624f5ef6f55576ba8b4/src/bcndecode.c

>     decoder for DXTn-compressed data
>
>     Format documentation:
>       http://oss.sgi.com/projects/ogl-sample/registry/EXT/texture_compression_s3tc.txt
>
>     The contents of this file are in the public domain (CC0)
>     Full text of the CC0 license:
>       https://creativecommons.org/publicdomain/zero/1.0/
>
>     To test:
>       compile: gcc -Iinclude -DBCN_DECODER_TEST BcnDecode.c -o bcndecode
>       run: dd bs=1 skip=128 if=bc3_test.dds | ./bcndecode 256 256 3 1 > bc3_test.png

See below for license text.

## Magic Enum

https://github.com/Neargye/magic_enum

Copyright (c) 2019 - 2024 Daniil Goncharov

See below for license text(MIT)

## MiniLua

Copyright (c) 1994–2019 Lua.org, PUC-Rio.
Copyright (c) 2020-2023 Eduardo Bart (https://github.com/edubart).

See below for license text(MIT)

## Emscripten

https://github.com/emscripten-core/emscripten/tree/1.38.21

Emscripten is available under 2 licenses, the MIT license and the University of Illinois/NCSA Open Source License. See below for license texts.

Authors:

>     The following authors have all licensed their contributions to Emscripten
>     under the licensing terms detailed in LICENSE.
>
>     (Authors keep copyright of their contributions, of course; they just grant
>     a license to everyone to use it as detailed in LICENSE.)
>
>     * Alon Zakai <alonzakai@gmail.com> (copyright owned by Mozilla Foundation)
>     * Tim Dawborn <tim.dawborn@gmail.com>
>     * Max Shawabkeh <max99x@gmail.com>
>     * Sigmund Vik <sigmund_vik@yahoo.com>
>     * Jeff Terrace <jterrace@gmail.com>
>     * Benoit Tremblay <trembl.ben@gmail.com>
>     * Andreas Bergmeier <abergmeier@gmx.net>
>     * Ben Schwartz <bens@alum.mit.edu>
>     * David Claughton <dave@eclecticdave.com>
>     * David Yip <yipdw@member.fsf.org>
>     * Julien Hamaide <julien.hamaide@gmail.com>
>     * Ehsan Akhgari <ehsan.akhgari@gmail.com> (copyright owned by Mozilla Foundation)
>     * Adrian Taylor <adrian@macrobug.com>
>     * Richard Assar <richard.assar@gmail.com>
>     * Nathan Hammond <emscripten@nathanhammond.com>
>     * Behdad Esfahbod <behdad@behdad.org>
>     * David Benjamin <davidben@mit.edu>
>     * Pierre Renaux <pierre@talansoft.com>
>     * Brian Anderson <banderson@mozilla.com>
>     * Jon Bardin <diclophis@gmail.com>
>     * Jukka Jylänki <jujjyl@gmail.com>
>     * Aleksander Guryanov <caiiiycuk@gmail.com>
>     * Chad Austin <chad@chadaustin.me> (copyright owned by IMVU)
>     * nandhp <nandhp@gmail.com>
>     * YeZhongWen <linghuye2.0@gmail.com>
>     * Xingxing Pan <forandom@gmail.com>
>     * Justin Kerk <dopefishjustin@gmail.com>
>     * Andrea Bedini <andrea.bedini@gmail.com>
>     * James Pike <totoro.friend@chilon.net>
>     * Mokhtar Naamani <mokhtar.naamani@gmail.com>
>     * Benjamin Stover <benjamin.stover@gmail.com>
>     * Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>
>     * Janus Troelsen <janus.troelsen@stud.tu-darmstadt.de>
>     * Lars Schneider <lars.schneider@autodesk.com> (copyright owned by Autodesk, Inc.)
>     * Joel Martin <github@martintribe.org>
>     * Manuel Wellmann <manuel.wellmann@autodesk.com> (copyright owned by Autodesk, Inc.)
>     * Xuejie Xiao <xxuejie@gmail.com>
>     * Dominic Wong <dom@slowbunyip.org>
>     * Alan Kligman <alan.kligman@gmail.com> (copyright owned by Mozilla Foundation)
>     * Anthony Liot <wolfviking0@yahoo.com>
>     * Michael Riss <Michael.Riss@gmx.de>
>     * Jasper St. Pierre <jstpierre@mecheye.net>
>     * Manuel Schölling <manuel.schoelling@gmx.de>
>     * Bruce Mitchener, Jr. <bruce.mitchener@gmail.com>
>     * Michael Bishop <mbtyke@gmail.com>
>     * Roger Braun <roger@rogerbraun.net>
>     * Vladimir Vukicevic <vladimir@pobox.com> (copyright owned by Mozilla Foundation)
>     * Lorant Pinter <lorant.pinter@prezi.com>
>     * Tobias Doerffel <tobias.doerffel@gmail.com>
>     * Martin von Gagern <martin@von-gagern.net>
>     * Ting-Yuan Huang <thuang@mozilla.com>
>     * Joshua Granick <jgranick@blackberry.com>
>     * Felix H. Dahlke <fhd@ubercode.de>
>     * Éloi Rivard <azmeuk@gmail.com>
>     * Alexander Gladysh <ag@logiceditor.com>
>     * Arlo Breault <arlolra@gmail.com>
>     * Jacob Lee <artdent@gmail.com> (copyright owned by Google, Inc.)
>     * Joe Lee <jlee@imvu.com> (copyright owned by IMVU)
>     * Andy Friesen <andy@imvu.com> (copyright owned by IMVU)
>     * Bill Welden <bwelden@imvu.com> (copyright owned by IMVU)
>     * Michael Ey <mey@imvu.com> (copyright owned by IMVU)
>     * Llorens Marti Garcia <lgarcia@imvu.com> (copyright owned by IMVU)
>     * Jinsuck Kim <jkim@imvu.com> (copyright owned by IMVU)
>     * Todd Lee <tlee@imvu.com> (copyright owned by IMVU)
>     * Anthony Pesch <inolen@gmail.com>
>     * Robert Bragg <robert.bragg@intel.com> (copyright owned by Intel Corporation)
>     * Sylvestre Ledru <sylvestre@debian.org>
>     * Tom Fairfield <fairfield@cs.xu.edu>
>     * Anthony J. Thibault <ajt@hyperlogic.org>
>     * John Allwine <jallwine86@gmail.com>
>     * Martin Gerhardy <martin.gerhardy@gmail.com>
>     * James Gregory <jgregory@zynga.com> (copyright owned by Zynga, Inc.)
>     * Dan Gohman <sunfish@google.com> (copyright owned by Google, Inc.)
>     * Jeff Gilbert <jgilbert@mozilla.com> (copyright owned by Mozilla Foundation)
>     * Frits Talbot <frits@metapathy.com>
>     * Onno Jongbloed <hey@onnoj.net>
>     * Jez Ng <me@jezng.com>
>     * Marc Feeley <mfeeley@mozilla.com> (copyright owned by Mozilla Foundation)
>     * Ludovic Perrine <jazzzz@gmail.com>
>     * David Barksdale <david.barksdale@adcedosolutions.com>
>     * Manfred Manik Nerurkar <nerurkar*at*made-apps.biz> (copyright owned by MADE, GmbH)
>     * Joseph Gentle <me@josephg.com>
>     * Douglas T. Crosher <dtc-moz@scieneer.com> (copyright owned by Mozilla Foundation)
>     * Douglas T. Crosher <info@jsstats.com> (copyright owned by Scieneer Pty Ltd.)
>     * Soeren Balko <soeren.balko@gmail.com>
>     * Ryan Kelly (ryan@rfk.id.au)
>     * Michael Lelli <toadking@toadking.com>
>     * Yu Kobayashi <yukoba@accelart.jp>
>     * Pin Zhang <zhangpin04@gmail.com>
>     * Nick Bray <ncbray@chromium.org> (copyright owned by Google, Inc.)
>     * Aidan Hobson Sayers <aidanhs@cantab.net>
>     * Charlie Birks <admin@daftgames.net>
>     * Ranger Harke <ranger.harke@autodesk.com> (copyright owned by Autodesk, Inc.)
>     * Tobias Vrinssen <tobias@vrinssen.de>
>     * Patrick R. Martin <patrick.martin.r@gmail.com>
>     * Richard Quirk <richard.quirk@gmail.com>
>     * Marcos Scriven <marcos@scriven.org>
>     * Antoine Lambert <antoine.lambert33@gmail.com>
>     * Daniel Aquino <mr.danielaquino@gmail.com>
>     * Remi Papillie <remi.papillie@gmail.com>
>     * Fraser Adams <fraser.adams@blueyonder.co.uk>
>     * Michael Tirado <icetooth333@gmail.com>
>     * Ben Noordhuis <info@bnoordhuis.nl>
>     * Bob Roberts <bobroberts177@gmail.com>
>     * John Vilk <jvilk@cs.umass.edu>
>     * Daniel Baulig <dbaulig@fb.com> (copyright owned by Facebook, Inc.)
>     * Lu Wang <coolwanglu@gmail.com>
>     * Heidi Pan <heidi.pan@intel.com> (copyright owned by Intel)
>     * Vasilis Kalintiris <ehostunreach@gmail.com>
>     * Adam C. Clifton <adam@hulkamaniac.com>
>     * Volo Zyko <volo.zyko@gmail.com>
>     * Andre Weissflog <floooh@gmail.com>
>     * Alexandre Perrot <alexandre.perrot@gmail.com>
>     * Emerson José Silveira da Costa <emerson.costa@gmail.com>
>     * Jari Vetoniemi <mailroxas@gmail.com>
>     * Sindre Sorhus <sindresorhus@gmail.com>
>     * James S Urquhart <jamesu@gmail.com>
>     * Boris Gjenero <boris.gjenero@gmail.com>
>     * jonas echterhoff <jonas@unity3d.com>
>     * Sami Vaarala <sami.vaarala@iki.fi>
>     * Jack A. Arrington <jack@epicpineapple.com>
>     * Richard Janicek <r@janicek.co>
>     * Joel Croteau <jcroteau@gmail.com>
>     * Haneef Mubarak <haneef503@gmail.com>
>     * Nicolas Peri <nicox@shivaengine.com> (copyright owned by ShiVa Technologies, SAS)
>     * Bernhard Fey <e-male@web.de>
>     * Dave Nicponski <dave.nicponski@gmail.com>
>     * Jonathan Jarri <noxalus@gmail.com>
>     * Daniele Di Proietto <daniele.di.proietto@gmail.com>
>     * Dan Dascalescu <dNOSPAMdascalescu@gmail.com>
>     * Thomas Borsos <thomasborsos@gmail.com>
>     * Ori Avtalion <ori@avtalion.name>
>     * Guillaume Blanc <guillaumeblanc.sc@gmail.com>
>     * Usagi Ito <usagi@WonderRabbitProject.net>
>     * Camilo Polymeris <cpolymeris@gmail.com>
>     * Markus Henschel <markus.henschel@yager.de>
>     * Ophir Lojkine <ophir.lojkine@eleves.ec-nantes.fr>
>     * Ryan Sturgell <ryan.sturgell@gmail.com> (copyright owned by Google, Inc.)
>     * Jason Green <jason@transgaming.com> (copyright owned by TransGaming, Inc.)
>     * Ningxin Hu <ningxin.hu@intel.com> (copyright owned by Intel)
>     * Nicolas Guillemot <nlguillemot@gmail.com>
>     * Sathyanarayanan Gunasekaran <gsathya.ceg@gmail.com> (copyright owned by Mozilla Foundation)
>     * Nikolay Vorobyov <nik.vorobyov@gmail.com>
>     * Jonas Platte <mail@jonasplatte.de>
>     * Sebastien Ronsse <sronsse@gmail.com>
>     * Glenn R. Wichman <gwichman@zynga.com>
>     * Hamish Willee <hamishwillee@gmail.com> (copyright owned by Mozilla Foundation)
>     * Sylvain Chevalier <sylvain.chevalier@gmail.com>
>     * Nathan Ross <nross.se@gmail.com>
>     * Zachary Pomerantz <zmp@umich.edu>
>     * Boris Tsarev <boristsarev@gmail.com>
>     * Mark Logan <mark@artillery.com> (copyright owned by Artillery Games, Inc.)
>     * Коренберг Марк <socketpair@gmail.com>
>     * Gauthier Billot <gogoprog@gmail.com>
>     * Árpád Goretity <h2co3@h2co3.org>
>     * Nicholas Wilson <nicholas@nicholaswilson.me.uk>
>     * Aaron Mandle <aaronmandle@gmail.com>
>     * Bailey Hayes <Bailey.Hayes@sas.com> (copyright owned by SAS Institute Inc.)
>     * Paul Holland <pholland@adobe.com>
>     * James Long <longster@gmail.com>
>     * David Anderson <danderson@mozilla.com> (copyright owned by Mozilla Foundation)
>     * Eric Rannaud <e@nanocritical.com> (copyright owned by Nanocritical Corp.)
>     * William Furr <wfurr@google.com> (copyright owned by Google, Inc.)
>     * Dan Glastonbury <dglastonbury@mozilla.com> (copyright owned by Mozilla Foundation)
>     * Warren Seine <warren.seine@aerys.in> (copyright owned by Aerys SAS)
>     * Petr Babicka <babcca@gmail.com>
>     * Akira Takahashi <faithandbrave@gmail.com>
>     * Victor Costan <costan@gmail.com>
>     * Pepijn Van Eeckhoudt <pepijn.vaneeckhoudt@luciad.com> (copyright owned by Luciad NV)
>     * Stevie Trujillo <stevie.trujillo@gmail.com>
>     * Edward Rudd <urkle@outoforder.cc>
>     * Rene Eichhorn <rene.eichhorn1@gmail.com>
>     * Nick Desaulniers <nick@mozilla.com> (copyright owned by Mozilla Foundation)
>     * Luke Wagner <luke@mozilla.com> (copyright owned by Mozilla Foundation)
>     * Matt McCormick <matt.mccormick@kitware.com>
>     * Thaddée Tyl <thaddee.tyl@gmail.com>
>     * Philipp Wiesemann <philipp.wiesemann@arcor.de>
>     * Jan Jongboom <janjongboom@gmail.com> (copyright owned by Telenor Digital AS)
>     * Tiago Quelhas <tiagoq@gmail.com>
>     * Reinier de Blois <rddeblois@gmail.com>
>     * Yuichi Nishiwaki <yuichi.nishiwaki@gmail.com>
>     * Jérôme Bernard <jerome.bernard@ercom.fr> (copyright owned by Ercom)
>     * Chanhwi Choi <ccwpc@hanmail.net>
>     * Fábio Santos <fabiosantosart@gmail.com>
>     * Thibaut Despoulain <thibaut@artillery.com> (copyright owned by Artillery Games, Inc.)
>     * Wei Tjong Yao <weitjong@gmail.com>
>     * Tim Guan-tin Chien <timdream@gmail.com>
>     * Krzysztof Jakubowski <nadult@fastmail.fm>
>     * Vladimír Vondruš <mosra@centrum.cz>
>     * Brion Vibber <brion@pobox.com>
>     * Philip Lafleur <sendsbeak@gmail.com>
>     * Javier Meseguer de Paz <j.meseguer@gmail.com>
>     * Michael A. Balazs <michael.balazs@gmail.com>
>     * Andreas Blixt <me@blixt.nyc>
>     * Haofeng Zhang <h.z@duke.edu>
>     * Cody Welsh <codyw@protonmail.com>
>     * Hoong Ern Ng <hoongern@gmail.com>
>     * Kagami Hiiragi <kagami@genshiken.org>
>     * Jan Bölsche <jan@lagomorph.de>
>     * Sebastian Matthes <sebastianmatthes@outlook.com> (copyright owned by Volkswagen AG)
>     * Robert Goulet <robert.goulet@autodesk.com> (copyright owned by Autodesk, Inc.)
>     * Juha Järvi <befunge@gmail.com>
>     * Louis Lagrange <lagrange.louis@gmail.com>
>     * Ying-Ruei Liang <thumbd03803@gmail.com>
>     * Stuart Geipel <lapimlu@gmail.com>
>     * Yeonjun Lim <yjroot@gmail.com>
>     * Andrew Karpushin <reven86@gmail.com>
>     * Felix Zimmermann <fzimmermann89@gmail.com>
>     * Sven-Hendrik Haase <svenstaro@gmail.com>
>     * Simon Sandström <simon@nikanor.nu>
>     * Khaled Sami <k.sami.mohammed@gmail.com>
>     * Omar El-Mohandes <omar.elmohandes90@gmail.com>
>     * Florian Rival <florian.rival@gmail.com>
>     * Mark Achée <mark@achee.com>
>     * Piotr Paczkowski <kontakt@trzeci.eu>
>     * Braden MacDonald <braden@bradenmacdonald.com>
>     * Kevin Cheung <kevin.cheung@autodesk.com> (copyright owned by Autodesk, Inc.)
>     * Josh Peterson <petersonjm1@gmail.com>
>     * eska <eska@eska.me>
>     * Nate Burr <nate.oo@gmail.com>
>     * Paul "TBBle" Hampson <Paul.Hampson@Pobox.com>
>     * Andreas Plesch <andreasplesch@gmail.com>
>     * Brian Armstrong <brian.armstrong.ece+github@gmail.com>
>     * Vincenzo Chianese <vincenz.chianese@icloud.com>
>     * Noam T.Cohen <noam@ecb.co.il>
>     * Nick Shin <nick.shin@gmail.com>
>     * Gregg Tavares <github@greggman.com>
>     * Tanner Rogalsky <tanner@tannerrogalsky.com>
>     * Richard Cook <rcook@tableau.com> (copyright owned by Tableau Software, Inc.)
>     * Arnab Choudhury <achoudhury@tableau.com> (copyright owned by Tableau Software, Inc.)
>     * Charles Vaughn <cvaughn@tableau.com> (copyright owned by Tableau Software, Inc.)
>     * Pierre Krieger <pierre.krieger1708@gmail.com>
>     * Jakob Stoklund Olesen <stoklund@2pi.dk>
>     * Jérémy Anger <angerj.dev@gmail.com>
>     * Derek Schuff <dschuff@chromium.org> (copyright owned by Google, Inc.)
>     * Ashley Sommer <flubba86@gmail.com>
>     * Dave Fletcher <graveyhead@gmail.com>
>     * Lars-Magnus Skog <ralphtheninja@riseup.net>
>     * Pieter Vantorre <pietervantorre@gmail.com>
>     * Maher Sallam <maher@sallam.me>
>     * Andrey Burov <burik666@gmail.com>
>     * Holland Schutte <hgschutte1@gmail.com>
>     * Kerby Geffrard <kerby.geffrard@gmail.com>
>     * cynecx <me@cynecx.net>
>     * Chris Gibson <cgibson@mrvoxel.com>
>     * Harald Reingruber <code*at*h-reingruber.at>
>     * Aiden Koss <madd0131@umn.edu>
>     * Dustin VanLerberghe <good_ol_dv@hotmail.com>
>     * Philip Bielby <pmb45-github@srcf.ucam.org> (copyright owned by Jagex Ltd.)
>     * Régis Fénéon <regis.feneon@gmail.com>
>     * Dominic Chen <d.c.ddcc@gmail.com> (copyright owned by Google, Inc.)
>     * Junji Hashimoto <junji.hashimoto@gmail.com>
>     * Heejin Ahn <aheejin@gmail.com> (copyright owned by Google, Inc.)
>     * Andras Kucsma <andras.kucsma@gmail.com>
>     * Mateusz Borycki <mateuszborycki@gmail.com>
>     * Franklin Ta <fta2012@gmail.com>
>     * Jacob Gravelle <jgravelle@google.com> (copyright owned by Google, Inc.)
>     * Kagami Sascha Rosylight <saschanaz@outlook.com>
>     * Benny Jacobs <benny@gmx.it>
>     * Ray Brown <code@liquibits.com>
>     * Christopher Serr <christopher.serr@gmail.com>
>     * Aaron Ruß <aaron.russ@dfki.de> (copyright owned by DFKI GmbH)
>     * Vilibald Wanča <vilibald@wvi.cz>
>     * Alex Hixon <alex@alexhixon.com>
>     * Vladimir Davidovich <thy.ringo@gmail.com>
>     * Yuriy Levchenko <irov13@mail.ru>
>     * Dmitry Tolmachov <dmitolm@gmail.com>
>     * Dylan McKay <me@dylanmckay.io>
>     * Christophe Gragnic <cgragnic@netc.fr>
>     * Murphy McCauley <murphy.mccauley@gmail.com>
>     * Anatoly Trosinenko <anatoly.trosinenko@gmail.com>
>     * Brad Grantham <grantham@plunk.org>
>     * Sam Clegg <sbc@chromium.org> (copyright owned by Google, Inc.)
>     * Joshua Lind <joshualind007@hotmail.com>
>     * Hiroaki GOTO as "GORRY" <gorry@hauN.org>
>     * Mikhail Kremnyov <mkremnyov@gmail.com> (copyright owned by XCDS International)
>     * Tasuku SUENAGA a.k.a. gunyarakun <tasuku-s-github@titech.ac>
>     * Vitorio Miguel Prieto Cilia <vdrbandeiras@gmail.com>
>     * Evan Wallace <evan.exe@gmail.com>
>     * Henning Pohl <henning@still-hidden.de>
>     * Tim Neumann <mail@timnn.me>
>     * Ondrej Stava <ondrej.stava@gmail.com> (copyright owned by Google, Inc.)
>     * Jakub Jirutka <jakub@jirutka.cz>
>     * Loo Rong Jie <loorongjie@gmail.com>
>     * Jean-François Geyelin <jfgeyelin@gmail.com>
>     * Matthew Collins <thethinkofdeath@gmail.com>
>     * Satoshi N. M <snmatsutake@yahoo.co.jp>
>     * Ryan Speets <ryan@speets.ca>
>     * Fumiya Chiba <fumiya.chiba@nifty.com>
>     * Ryan C. Gordon <icculus@icculus.org>
>     * Inseok Lee <dlunch@gmail.com>
>     * Yair Levinson (copyright owned by Autodesk, Inc.)
>     * Matjaž Drolc <mdrolc@gmail.com>
>     * James Swift <james@3dengineer.com> (copyright owned by PSPDFKit GmbH)
>     * Ryan Lester <ryan@cyph.com> (copyright owned by Cyph, Inc.)
>     * Nikolay Zapolnov <zapolnov@gmail.com>
>     * Nazar Mokrynskyi <nazar@mokrynskyi.com>
>     * Yury Delendik <ydelendik@mozilla.com> (copyright owned by Mozilla Foundation)
>     * Kenneth Perry <thothonegan@gmail.com>
>     * Jim Mussared <jim.mussared@gmail.com>
>     * Dirk Vanden Boer <dirk.vdb@gmail.com>
>     * Mitchell Foley <mitchfoley@google.com> (copyright owned by Google, Inc.)
>     * Oleksandr Chekhovskyi <oleksandr.chekhovskyi@gmail.com>
>     * Michael Siebert <michael.siebert2k@gmail.com>
>     * Jonathan Hale <squareys@googlemail.com>
>     * Etienne Brateau <etienne.brateau@gmail.com>
>     * Zhiming Wang <zmwangx@gmail.com>
>     * Jameson Ernst <jameson@jpernst.com>
>     * Yoan Lecoq <yoanlecoq.io@gmail.com>
>     * Jiajie Hu <jiajie.hu@intel.com> (copyright owned by Intel Corporation)
>     * Kamil Klimek <naresh@tlen.pl>
>     * José Carlos Pujol <josecpujol(at)gmail.com>
>     * Dannii Willis <curiousdannii@gmail.com>
>     * Erik Dubbelboer <erik@dubbelboer.com>
>     * Sergey Tsatsulin <tsatsulin@gmail.com>
>     * varkor <github@varkor.com>
>     * Stuart Knightley <website@stuartk.com>
>     * Amadeus Guo<gliheng@foxmail.com>
>     * Nathan Froyd <froydnj@gmail.com> (copyright owned by Mozilla Foundation)
>     * Daniel Wirtz <dcode@dcode.io>
>     * Kibeom Kim <kk1674@nyu.edu>
>     * Marcel Klammer <m.klammer@tastenkunst.com>
>     * Axel Forsman <axelsfor@gmail.com>
>     * Ebrahim Byagowi <ebrahim@gnu.org>
>     * Thorsten Möller <thorsten.moeller@sbi.ch>
>     * Michael Droettboom <mdroettboom@mozilla.com>
>     * Nicolas Bouquet <hgy01@hieroglyphe.net>
>     * Miguel Saldivar <miguel.saldivar22@hotmail.com>
>     * Gert Van Hoey <gert.vanhoey@gmail.com>
>     * Valtteri Heikkilä <rnd@nic.fi>
>     * Daniel McNab <daniel.mcnab6+emcc(at)gmail.com>
>     * Tyler Limkemann <tslimkemann42 gmail.com>
>     * Ben Smith <binji@google.com> (copyright owned by Google, Inc.)
>     * Sylvain Beucler <beuc@beuc.net>
>     * Patrik Weiskircher <patrik@weiskircher.name>
>     * Tobias Widlund <widlundtobias(at)gmail.com>
>     * Rob Fors <mail@robfors.com>
>     * Mike Frysinger <vapier@chromium.org> (copyright owned by Google, Inc.)
>     * Sébasiten Crozet <developer@crozet.re>
>     * Andrey Nagikh <andrey@nagih.ru>
>     * Dzmitry Malyshau <dmalyshau@mozilla.com> (copyright owned by Mozilla Foundation)
>     * Bjorn Swenson <tie.372@gmail.com>
>     * Ryhor Spivak <grisha@rusteddreams.net>
>     * Jan Schär <jscissr@gmail.com>
>     * Ryhor Spivak <grisha@rusteddreams.net>
>     * Alexander Bich <quyse0@gmail.com>
>     * Ashleigh Thomas <ashleighbcthomas@gmail.com>
>     * Veniamin Petrenko <bjpbjpbjp10@gmail.com>
>     * Ian Henderson <ian@ianhenderson.org>
>     * Siim Kallas <siimkallas@gmail.com>
>     * Carl Woffenden <cwoffenden@gmail.com> (copyright owned by Numfum GmbH)
>     * Patrick Berger <patrick.berger@xmail.net> (copyright owned by Compusoft Group)
>     * Alexander Frank Lehmann <alexander.frank.lehmann@compusoftgroup.com> (copyright owned by Compusoft Group)
>     * Tommy Nguyen <tn0502@gmail.com>
>     * Thomas Schander <info@thomasschander.com> (copyright owned by Enscape GmbH)
>     * Benjamin S. Rodgers <acdimalev@gmail.com>
>     * Paul Shapiro <paul@mymonero.com>
>     * Elmo Todurov <elmo.todurov@eesti.ee>
>     * Zoltán Žarkov <zeko@freecivweb.org>
>     * Roman Yurchak <rth.yurchak@pm.me>
>     * Hampton Maxwell <me@hamptonmaxwell.com>
>     * Eric Fiselier <ericwf@google.com> (copyright owned by Google, Inc.)
>     * Sirapop Wongstapornpat <sirapop.wongstapornpat@student.oulu.fi>
>     * Matt Kane <m@mk.gg>
>     * Altan Özlü <altanozlu7@gmail.com>
>     * Mary S <ipadlover8322@gmail.com>
>     * Martin Birks <mbirks@gmail.com>
>     * Kirill Smelkov <kirr@nexedi.com> (copyright owned by Nexedi)
>     * Lutz Hören <laitch383@gmail.com>
>     * Pedro K Custodio <git@pedrokcustodio.com>

Emscripten dependencies:

>     This program uses portions of Node.js source code located in src/library_path.js,
>     in accordance with the terms of the MIT license. Node's license follows:

(See below for license text. node.js is "Copyright Joyent, Inc. and other Node contributors. All rights reserved.")

>     The musl libc project is bundled in this repo, and it has the MIT license, see

Emscripten 1.38.21 / musl 1.1.15 system/lib/libc/musl/COPYRIGHT:

>     musl as a whole is licensed under the following standard MIT license:
>
>     ----------------------------------------------------------------------
>     Copyright © 2005-2014 Rich Felker, et al.
>
>     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.
>     ----------------------------------------------------------------------
>
>     Authors/contributors include:
>
>     Alex Dowad
>     Alexander Monakov
>     Anthony G. Basile
>     Arvid Picciani
>     Bobby Bingham
>     Boris Brezillon
>     Brent Cook
>     Chris Spiegel
>     Clément Vasseur
>     Daniel Micay
>     Denys Vlasenko
>     Emil Renner Berthing
>     Felix Fietkau
>     Felix Janda
>     Gianluca Anzolin
>     Hauke Mehrtens
>     Hiltjo Posthuma
>     Isaac Dunham
>     Jaydeep Patil
>     Jens Gustedt
>     Jeremy Huntwork
>     Jo-Philipp Wich
>     Joakim Sindholt
>     John Spencer
>     Josiah Worcester
>     Justin Cormack
>     Khem Raj
>     Kylie McClain
>     Luca Barbato
>     Luka Perkov
>     M Farkas-Dyck (Strake)
>     Mahesh Bodapati
>     Michael Forney
>     Natanael Copa
>     Nicholas J. Kain
>     orc
>     Pascal Cuoq
>     Petr Hosek
>     Pierre Carrier
>     Rich Felker
>     Richard Pennington
>     Shiz
>     sin
>     Solar Designer
>     Stefan Kristiansson
>     Szabolcs Nagy
>     Timo Teräs
>     Trutz Behn
>     Valentin Ochs
>     William Haddon
>
>     Portions of this software are derived from third-party works licensed
>     under terms compatible with the above MIT license:
>
>     The TRE regular expression implementation (src/regex/reg* and
>     src/regex/tre*) is Copyright © 2001-2008 Ville Laurikari and licensed
>     under a 2-clause BSD license (license text in the source files). The
>     included version has been heavily modified by Rich Felker in 2012, in
>     the interests of size, simplicity, and namespace cleanliness.
>
>     Much of the math library code (src/math/* and src/complex/*) is
>     Copyright © 1993,2004 Sun Microsystems or
>     Copyright © 2003-2011 David Schultz or
>     Copyright © 2003-2009 Steven G. Kargl or
>     Copyright © 2003-2009 Bruce D. Evans or
>     Copyright © 2008 Stephen L. Moshier
>     and labelled as such in comments in the individual source files. All
>     have been licensed under extremely permissive terms.
>
>     The ARM memcpy code (src/string/arm/memcpy_el.S) is Copyright © 2008
>     The Android Open Source Project and is licensed under a two-clause BSD
>     license. It was taken from Bionic libc, used on Android.
>
>     The implementation of DES for crypt (src/crypt/crypt_des.c) is
>     Copyright © 1994 David Burren. It is licensed under a BSD license.
>
>     The implementation of blowfish crypt (src/crypt/crypt_blowfish.c) was
>     originally written by Solar Designer and placed into the public
>     domain. The code also comes with a fallback permissive license for use
>     in jurisdictions that may not recognize the public domain.
>
>     The smoothsort implementation (src/stdlib/qsort.c) is Copyright © 2011
>     Valentin Ochs and is licensed under an MIT-style license.
>
>     The BSD PRNG implementation (src/prng/random.c) and XSI search API
>     (src/search/*.c) functions are Copyright © 2011 Szabolcs Nagy and
>     licensed under following terms: "Permission to use, copy, modify,
>     and/or distribute this code for any purpose with or without fee is
>     hereby granted. There is no warranty."
>
>     The x86_64 port was written by Nicholas J. Kain and is licensed under
>     the standard MIT terms.
>
>     The mips and microblaze ports were originally written by Richard
>     Pennington for use in the ellcc project. The original code was adapted
>     by Rich Felker for build system and code conventions during upstream
>     integration. It is licensed under the standard MIT terms.
>
>     The mips64 port was contributed by Imagination Technologies and is
>     licensed under the standard MIT terms.
>
>     The powerpc port was also originally written by Richard Pennington,
>     and later supplemented and integrated by John Spencer. It is licensed
>     under the standard MIT terms.
>
>     All other files which have no copyright comments are original works
>     produced specifically for use as part of this library, written either
>     by Rich Felker, the main author of the library, or by one or more
>     contibutors listed above. Details on authorship of individual files
>     can be found in the git version control history of the project. The
>     omission of copyright and license comments in each file is in the
>     interest of source tree size.
>
>     In addition, permission is hereby granted for all public header files
>     (include/* and arch/*/bits/*) and crt files intended to be linked into
>     applications (crt/*, ldso/dlstart.c, and arch/*/crt_arch.h) to omit
>     the copyright notice and permission notice otherwise required by the
>     license, and to use these files without any requirement of
>     attribution. These files include substantial contributions from:
>
>     Bobby Bingham
>     John Spencer
>     Nicholas J. Kain
>     Rich Felker
>     Richard Pennington
>     Stefan Kristiansson
>     Szabolcs Nagy
>
>     all of whom have explicitly granted such permission.
>
>     This file previously contained text expressing a belief that most of
>     the files covered by the above exception were sufficiently trivial not
>     to be subject to copyright, resulting in confusion over whether it
>     negated the permissions granted in the license. In the spirit of
>     permissive licensing, and of not having licensing issues being an
>     obstacle to adoption, that text has been removed.

## unordered_dense

https://github.com/martinus/unordered_dense

Copyright (c) 2022 Martin Leitner-Ankerl
See below for license text (MIT).

## glad

Generated with https://github.com/Dav1dde/glad/tree/v0.1.27

>     What's the license of glad generated code? #101
>     Any of Public Domain, WTFPL or CC0.

See below for license text (CC0).

## glm

https://github.com/g-truc/glm/tree/0.9.9.3 or system version

Copyright (c) 2005 - G-Truc Creation. GLM can be distributed and/or modified under the terms of either a) The Happy Bunny License, or b) the MIT License. See below for license text (MIT).

## LibAtrac9

https://github.com/Thealexbarney/LibAtrac9 or system version

Copyright (c) 2018 Alex Barney. See below for license text (MIT).

## Dear ImGui

https://github.com/ocornut/imgui

Copyright (c) 2014-2024 Omar Cornut. See below for license text (MIT).

## Ogg

system version, originally https://github.com/xiph/ogg

>     Copyright (c) 2002, Xiph.org Foundation
>
>     Redistribution and use in source and binary forms, with or without
>     modification, are permitted provided that the following conditions
>     are met:
>
>     - Redistributions of source code must retain the above copyright
>     notice, this list of conditions and the following disclaimer.
>
>     - Redistributions in binary form must reproduce the above copyright
>     notice, this list of conditions and the following disclaimer in the
>     documentation and/or other materials provided with the distribution.
>
>     - Neither the name of the Xiph.org Foundation nor the names of its
>     contributors may be used to endorse or promote products derived from
>     this software without specific prior written permission.
>
>     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
>     ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
>     LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
>     A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION
>     OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
>     DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
>     THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
>     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
>     OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

## OpenAL Soft

system version, originally https://github.com/kcat/openal-soft

>     OpenAL cross platform audio library
>     Copyright (C) 1999-2007 by authors.
>     This library is free software; you can redistribute it and/or
>      modify it under the terms of the GNU Library General Public
>      License as published by the Free Software Foundation; either
>      version 2 of the License, or (at your option) any later version.
>
>     This library is distributed in the hope that it will be useful,
>      but WITHOUT ANY WARRANTY; without even the implied warranty of
>      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
>      Library General Public License for more details.
>
>     You should have received a copy of the GNU Library General Public
>      License along with this library; if not, write to the
>      Free Software Foundation, Inc.,
>      51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
>     Or go to http://www.gnu.org/copyleft/lgpl.html

See below for license text (LGPLv2).

## OpenImageIO

https://github.com/OpenImageIO/oiio/blob/master/LICENSE.md

Copyright (c) 2008-present by Contributors to the OpenImageIO project.
All Rights Reserved.

See below for license text (BSD 3-Clause License).

## PCG Random Number Generation, Minimal C Edition

https://github.com/imneme/pcg-c-basic/tree/bc39cd76ac3d541e618606bcc6e1e5ba5e5e6aa3

Copyright 2014 Melissa O'Neill <oneill@pcg-random.org>

Licensed under the Apache License, Version 2.0. See below for license text.

# Ryujinx

https://github.com/Ryujinx/Ryujinx/tree/eee639d6ba544fa5dd9352426d55e91bc54e157d/Ryujinx.Graphics/Graphics3d/Texture

Copyright (c) Ryujinx Team and Contributors.

See below for license text (MIT).

## s3tc-dxt-decompression

https://github.com/Benjamin-Dobell/s3tc-dxt-decompression/blob/5f923ecc1553aa60058d7011360cefca73e8b0fd/s3tc.cpp

Copyright (c) 2009 Benjamin Dobell, Glass Echidna.

See below for license text (MIT).

## Scarlet

https://github.com/xdanieldzd/Scarlet/blob/d8aabf430307d35a81b131e40bb3c9a4828bdd7b/Scarlet/Drawing/ImageBinary.cs

Copyright (c) 2016 xdaniel (Daniel R.) / DigitalZero Domain

See below for license text (MIT).

## SDL2

system version, originally https://libsdl.org/download-2.0.php

Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>

See below for license text (zlib).

## mio

https://github.com/vimpunk/mio/blob/master/single_include/mio/mio.hpp

Copyright (c) 2018 https://github.com/mandreyel/

See below for license text (MIT).

## stb_image

https://github.com/nothings/stb/blob/5d90a8375a1393abc0dc5f8cc9f1ac9fd9ae6530/stb_image.h

>     ------------------------------------------------------------------------------
>     This software is available under 2 licenses -- choose whichever you prefer.
>     ------------------------------------------------------------------------------
>     ALTERNATIVE A - MIT License
>     Copyright (c) 2017 Sean Barrett

See below for license text.

## Squish

https://github.com/OpenImageIO/oiio/blob/master/src/dds.imageio/squish/README

>     The squish library is distributed under the terms and conditions of the MIT
>     license. This license is specified at the top of each source file and must be
>     preserved in its entirety.

See below for license text.

## vgm_ripping

https://github.com/hcs64/vgm_ripping/tree/f460d548859d59dd03b2c3f29ed97e2dbf9bb5b3/multi/utf_tab

Copyright (c) 2014 Adam Gashlin.

See below for license text (MIT).

## vgmstream

https://github.com/losnoco/vgmstream/tree/ec0043bf6b816c817ee786458f314f2808fd5846

>     Copyright (c) 2008-2010 Adam Gashlin, Fastelbja, Ronny Elfert
>
>     Portions Copyright (c) 2004-2008, Marko Kreen
>     Portions Copyright 2001-2007  jagarl / Kazunori Ueno <jagarl@creator.club.ne.jp>
>     Portions Copyright (c) 1998, Justin Frankel/Nullsoft Inc.
>     Portions Copyright (C) 2006 Nullsoft, Inc.
>     Portions Copyright (c) 2005-2007 Paul Hsieh
>     Portions Public Domain originating with Sun Microsystems

See below for license text (ISC).

## Vorbis

system version, originally https://github.com/xiph/vorbis

>     Copyright (c) 2002-2018 Xiph.org Foundation
>
>     Redistribution and use in source and binary forms, with or without
>     modification, are permitted provided that the following conditions
>     are met:
>
>     - Redistributions of source code must retain the above copyright
>     notice, this list of conditions and the following disclaimer.
>
>     - Redistributions in binary form must reproduce the above copyright
>     notice, this list of conditions and the following disclaimer in the
>     documentation and/or other materials provided with the distribution.
>
>     - Neither the name of the Xiph.org Foundation nor the names of its
>     contributors may be used to endorse or promote products derived from
>     this software without specific prior written permission.
>
>     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
>     ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
>     LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
>     A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION
>     OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
>     DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
>     THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
>     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
>     OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

## zlib

system version, originally https://www.zlib.net/

Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler

See below for license text (zlib).

## FFmpeg

https://www.ffmpeg.org/

See below for license text (LGPLv2).

## UTF8-CPP

https://github.com/nemtrif/utfcpp

See below for license text (BSL-1.0)

## avcpp

Copyright (c) 2013-2017, Alexander Drozdov <adrozdoff@gmail.com>
All rights reserved.

See below for license text (BSD 3-Clause License).

Copyright 2006 Nemanja Trifunovic

>     Permission is hereby granted, free of charge, to any person or organization
>     obtaining a copy of the software and accompanying documentation covered by
>     this license (the "Software") to use, reproduce, display, distribute,
>     execute, and transmit the Software, and to prepare derivative works of the
>     Software, and to permit third-parties to whom the Software is furnished to
>     do so, all subject to the following:
>     
>     The copyright notices in the Software and this entire statement, including
>     the above license grant, this restriction and the following disclaimer,
>     must be included in all copies of the Software, in whole or in part, and
>     all derivative works of the Software, unless such copies or derivative
>     works are solely in the form of machine-executable object code generated by
>     a source language processor.
>     
>     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, TITLE AND NON-INFRINGEMENT. IN NO EVENT
>     SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
>     FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
>     ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
>     DEALINGS IN THE SOFTWARE.

## libmspack

https://www.cabextract.org.uk/libmspack/

See below for license text (LGPLv2).

## pugixml

https://github.com/zeux/pugixml

Copyright (c) 2006-2024 Arseny Kapoulkine

See below for license text (MIT).

## fmtlib

https://github.com/fmtlib/fmt

Copyright (c) 2012 - present, Victor Zverovich and {fmt} contributors

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.

--- Optional exception to the license ---

As an exception, if, as a result of your compiling your source code, portions
of this Software are embedded into a machine-executable object form of such
source code, you may redistribute such embedded portions in such object form
without including the above copyright and permission notices.

## concurrent_queue & readerwriterqueue

https://github.com/cameron314/concurrentqueue
https://github.com/cameron314/readerwriterqueue

Simplified BSD License:

Copyright (c) 2013-2016, Cameron Desrochers. All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
    Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

## libass
https://github.com/libass/libass

See below for license text (ISC)

# Generic license texts

## 2-clause BSD license

>     Redistribution and use in source and binary forms, with or without modification,
>     are permitted provided that the following conditions are met:
>
>     1. Redistributions of source code must retain the above copyright notice, this
>     list of conditions and the following disclaimer.
>
>     2. Redistributions in binary form must reproduce the above copyright notice,
>     this list of conditions and the following disclaimer in the documentation and/or
>     other materials provided with the distribution.
>
>     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
>     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
>     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
>     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
>     ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
>     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
>     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
>     ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
>     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
>     SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

## 3-clause BSD license

>     Redistribution and use in source and binary forms, with or without
>     modification, are permitted provided that the following conditions are met:
>
>     1. Redistributions of source code must retain the above copyright notice, this
>        list of conditions and the following disclaimer.
>
>     2. Redistributions in binary form must reproduce the above copyright notice,
>        this list of conditions and the following disclaimer in the documentation
>        and/or other materials provided with the distribution.
>
>     3. Neither the name of the copyright holder nor the names of its
>        contributors may be used to endorse or promote products derived from
>        this software without specific prior written permission.
>
>     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
>     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
>     IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
>     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
>     FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
>     DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
>     SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
>     CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
>     OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
>     OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

## Apache License, Version 2.0

>                                     Apache License
>                               Version 2.0, January 2004
>                            http://www.apache.org/licenses/
>
>       TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
>
>       1. Definitions.
>
>          "License" shall mean the terms and conditions for use, reproduction,
>          and distribution as defined by Sections 1 through 9 of this document.
>
>          "Licensor" shall mean the copyright owner or entity authorized by
>          the copyright owner that is granting the License.
>
>          "Legal Entity" shall mean the union of the acting entity and all
>          other entities that control, are controlled by, or are under common
>          control with that entity. For the purposes of this definition,
>          "control" means (i) the power, direct or indirect, to cause the
>          direction or management of such entity, whether by contract or
>          otherwise, or (ii) ownership of fifty percent (50%) or more of the
>          outstanding shares, or (iii) beneficial ownership of such entity.
>
>          "You" (or "Your") shall mean an individual or Legal Entity
>          exercising permissions granted by this License.
>
>          "Source" form shall mean the preferred form for making modifications,
>          including but not limited to software source code, documentation
>          source, and configuration files.
>
>          "Object" form shall mean any form resulting from mechanical
>          transformation or translation of a Source form, including but
>          not limited to compiled object code, generated documentation,
>          and conversions to other media types.
>
>          "Work" shall mean the work of authorship, whether in Source or
>          Object form, made available under the License, as indicated by a
>          copyright notice that is included in or attached to the work
>          (an example is provided in the Appendix below).
>
>          "Derivative Works" shall mean any work, whether in Source or Object
>          form, that is based on (or derived from) the Work and for which the
>          editorial revisions, annotations, elaborations, or other modifications
>          represent, as a whole, an original work of authorship. For the purposes
>          of this License, Derivative Works shall not include works that remain
>          separable from, or merely link (or bind by name) to the interfaces of,
>          the Work and Derivative Works thereof.
>
>          "Contribution" shall mean any work of authorship, including
>          the original version of the Work and any modifications or additions
>          to that Work or Derivative Works thereof, that is intentionally
>          submitted to Licensor for inclusion in the Work by the copyright owner
>          or by an individual or Legal Entity authorized to submit on behalf of
>          the copyright owner. For the purposes of this definition, "submitted"
>          means any form of electronic, verbal, or written communication sent
>          to the Licensor or its representatives, including but not limited to
>          communication on electronic mailing lists, source code control systems,
>          and issue tracking systems that are managed by, or on behalf of, the
>          Licensor for the purpose of discussing and improving the Work, but
>          excluding communication that is conspicuously marked or otherwise
>          designated in writing by the copyright owner as "Not a Contribution."
>
>          "Contributor" shall mean Licensor and any individual or Legal Entity
>          on behalf of whom a Contribution has been received by Licensor and
>          subsequently incorporated within the Work.
>
>       2. Grant of Copyright License. Subject to the terms and conditions of
>          this License, each Contributor hereby grants to You a perpetual,
>          worldwide, non-exclusive, no-charge, royalty-free, irrevocable
>          copyright license to reproduce, prepare Derivative Works of,
>          publicly display, publicly perform, sublicense, and distribute the
>          Work and such Derivative Works in Source or Object form.
>
>       3. Grant of Patent License. Subject to the terms and conditions of
>          this License, each Contributor hereby grants to You a perpetual,
>          worldwide, non-exclusive, no-charge, royalty-free, irrevocable
>          (except as stated in this section) patent license to make, have made,
>          use, offer to sell, sell, import, and otherwise transfer the Work,
>          where such license applies only to those patent claims licensable
>          by such Contributor that are necessarily infringed by their
>          Contribution(s) alone or by combination of their Contribution(s)
>          with the Work to which such Contribution(s) was submitted. If You
>          institute patent litigation against any entity (including a
>          cross-claim or counterclaim in a lawsuit) alleging that the Work
>          or a Contribution incorporated within the Work constitutes direct
>          or contributory patent infringement, then any patent licenses
>          granted to You under this License for that Work shall terminate
>          as of the date such litigation is filed.
>
>       4. Redistribution. You may reproduce and distribute copies of the
>          Work or Derivative Works thereof in any medium, with or without
>          modifications, and in Source or Object form, provided that You
>          meet the following conditions:
>
>          (a) You must give any other recipients of the Work or
>              Derivative Works a copy of this License; and
>
>          (b) You must cause any modified files to carry prominent notices
>              stating that You changed the files; and
>
>          (c) You must retain, in the Source form of any Derivative Works
>              that You distribute, all copyright, patent, trademark, and
>              attribution notices from the Source form of the Work,
>              excluding those notices that do not pertain to any part of
>              the Derivative Works; and
>
>          (d) If the Work includes a "NOTICE" text file as part of its
>              distribution, then any Derivative Works that You distribute must
>              include a readable copy of the attribution notices contained
>              within such NOTICE file, excluding those notices that do not
>              pertain to any part of the Derivative Works, in at least one
>              of the following places: within a NOTICE text file distributed
>              as part of the Derivative Works; within the Source form or
>              documentation, if provided along with the Derivative Works; or,
>              within a display generated by the Derivative Works, if and
>              wherever such third-party notices normally appear. The contents
>              of the NOTICE file are for informational purposes only and
>              do not modify the License. You may add Your own attribution
>              notices within Derivative Works that You distribute, alongside
>              or as an addendum to the NOTICE text from the Work, provided
>              that such additional attribution notices cannot be construed
>              as modifying the License.
>
>          You may add Your own copyright statement to Your modifications and
>          may provide additional or different license terms and conditions
>          for use, reproduction, or distribution of Your modifications, or
>          for any such Derivative Works as a whole, provided Your use,
>          reproduction, and distribution of the Work otherwise complies with
>          the conditions stated in this License.
>
>       5. Submission of Contributions. Unless You explicitly state otherwise,
>          any Contribution intentionally submitted for inclusion in the Work
>          by You to the Licensor shall be under the terms and conditions of
>          this License, without any additional terms or conditions.
>          Notwithstanding the above, nothing herein shall supersede or modify
>          the terms of any separate license agreement you may have executed
>          with Licensor regarding such Contributions.
>
>       6. Trademarks. This License does not grant permission to use the trade
>          names, trademarks, service marks, or product names of the Licensor,
>          except as required for reasonable and customary use in describing the
>          origin of the Work and reproducing the content of the NOTICE file.
>
>       7. Disclaimer of Warranty. Unless required by applicable law or
>          agreed to in writing, Licensor provides the Work (and each
>          Contributor provides its Contributions) on an "AS IS" BASIS,
>          WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>          implied, including, without limitation, any warranties or conditions
>          of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
>          PARTICULAR PURPOSE. You are solely responsible for determining the
>          appropriateness of using or redistributing the Work and assume any
>          risks associated with Your exercise of permissions under this License.
>
>       8. Limitation of Liability. In no event and under no legal theory,
>          whether in tort (including negligence), contract, or otherwise,
>          unless required by applicable law (such as deliberate and grossly
>          negligent acts) or agreed to in writing, shall any Contributor be
>          liable to You for damages, including any direct, indirect, special,
>          incidental, or consequential damages of any character arising as a
>          result of this License or out of the use or inability to use the
>          Work (including but not limited to damages for loss of goodwill,
>          work stoppage, computer failure or malfunction, or any and all
>          other commercial damages or losses), even if such Contributor
>          has been advised of the possibility of such damages.
>
>       9. Accepting Warranty or Additional Liability. While redistributing
>          the Work or Derivative Works thereof, You may choose to offer,
>          and charge a fee for, acceptance of support, warranty, indemnity,
>          or other liability obligations and/or rights consistent with this
>          License. However, in accepting such obligations, You may act only
>          on Your own behalf and on Your sole responsibility, not on behalf
>          of any other Contributor, and only if You agree to indemnify,
>          defend, and hold each Contributor harmless for any liability
>          incurred by, or claims asserted against, such Contributor by reason
>          of your accepting any such warranty or additional liability.
>
>       END OF TERMS AND CONDITIONS
>
>       APPENDIX: How to apply the Apache License to your work.
>
>          To apply the Apache License to your work, attach the following
>          boilerplate notice, with the fields enclosed by brackets "{}"
>          replaced with your own identifying information. (Don't include
>          the brackets!)  The text should be enclosed in the appropriate
>          comment syntax for the file format. We also recommend that a
>          file or class name and description of purpose be included on the
>          same "printed page" as the copyright notice for easier
>          identification within third-party archives.
>
>       Copyright {yyyy} {name of copyright owner}
>
>       Licensed under the Apache License, Version 2.0 (the "License");
>       you may not use this file except in compliance with the License.
>       You may obtain a copy of the License at
>
>           http://www.apache.org/licenses/LICENSE-2.0
>
>       Unless required by applicable law or agreed to in writing, software
>       distributed under the License is distributed on an "AS IS" BASIS,
>       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>       See the License for the specific language governing permissions and
>       limitations under the License.

## Boost Software License, Version 1.0

>     Boost Software License - Version 1.0 - August 17th, 2003
>
>     Permission is hereby granted, free of charge, to any person or organization
>     obtaining a copy of the software and accompanying documentation covered by
>     this license (the "Software") to use, reproduce, display, distribute,
>     execute, and transmit the Software, and to prepare derivative works of the
>     Software, and to permit third-parties to whom the Software is furnished to
>     do so, all subject to the following:
>
>     The copyright notices in the Software and this entire statement, including
>     the above license grant, this restriction and the following disclaimer,
>     must be included in all copies of the Software, in whole or in part, and
>     all derivative works of the Software, unless such copies or derivative
>     works are solely in the form of machine-executable object code generated by
>     a source language processor.
>
>     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, TITLE AND NON-INFRINGEMENT. IN NO EVENT
>     SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
>     FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
>     ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
>     DEALINGS IN THE SOFTWARE.

## CC0 1.0

>     Creative Commons Legal Code
>
>     CC0 1.0 Universal
>
>         CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
>         LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
>         ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
>         INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
>         REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
>         PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
>         THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
>         HEREUNDER.
>
>     Statement of Purpose
>
>     The laws of most jurisdictions throughout the world automatically confer
>     exclusive Copyright and Related Rights (defined below) upon the creator
>     and subsequent owner(s) (each and all, an "owner") of an original work of
>     authorship and/or a database (each, a "Work").
>
>     Certain owners wish to permanently relinquish those rights to a Work for
>     the purpose of contributing to a commons of creative, cultural and
>     scientific works ("Commons") that the public can reliably and without fear
>     of later claims of infringement build upon, modify, incorporate in other
>     works, reuse and redistribute as freely as possible in any form whatsoever
>     and for any purposes, including without limitation commercial purposes.
>     These owners may contribute to the Commons to promote the ideal of a free
>     culture and the further production of creative, cultural and scientific
>     works, or to gain reputation or greater distribution for their Work in
>     part through the use and efforts of others.
>
>     For these and/or other purposes and motivations, and without any
>     expectation of additional consideration or compensation, the person
>     associating CC0 with a Work (the "Affirmer"), to the extent that he or she
>     is an owner of Copyright and Related Rights in the Work, voluntarily
>     elects to apply CC0 to the Work and publicly distribute the Work under its
>     terms, with knowledge of his or her Copyright and Related Rights in the
>     Work and the meaning and intended legal effect of CC0 on those rights.
>
>     1. Copyright and Related Rights. A Work made available under CC0 may be
>     protected by copyright and related or neighboring rights ("Copyright and
>     Related Rights"). Copyright and Related Rights include, but are not
>     limited to, the following:
>
>       i. the right to reproduce, adapt, distribute, perform, display,
>          communicate, and translate a Work;
>      ii. moral rights retained by the original author(s) and/or performer(s);
>     iii. publicity and privacy rights pertaining to a person's image or
>          likeness depicted in a Work;
>      iv. rights protecting against unfair competition in regards to a Work,
>          subject to the limitations in paragraph 4(a), below;
>       v. rights protecting the extraction, dissemination, use and reuse of data
>          in a Work;
>      vi. database rights (such as those arising under Directive 96/9/EC of the
>          European Parliament and of the Council of 11 March 1996 on the legal
>          protection of databases, and under any national implementation
>          thereof, including any amended or successor version of such
>          directive); and
>     vii. other similar, equivalent or corresponding rights throughout the
>          world based on applicable law or treaty, and any national
>          implementations thereof.
>
>     2. Waiver. To the greatest extent permitted by, but not in contravention
>     of, applicable law, Affirmer hereby overtly, fully, permanently,
>     irrevocably and unconditionally waives, abandons, and surrenders all of
>     Affirmer's Copyright and Related Rights and associated claims and causes
>     of action, whether now known or unknown (including existing as well as
>     future claims and causes of action), in the Work (i) in all territories
>     worldwide, (ii) for the maximum duration provided by applicable law or
>     treaty (including future time extensions), (iii) in any current or future
>     medium and for any number of copies, and (iv) for any purpose whatsoever,
>     including without limitation commercial, advertising or promotional
>     purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
>     member of the public at large and to the detriment of Affirmer's heirs and
>     successors, fully intending that such Waiver shall not be subject to
>     revocation, rescission, cancellation, termination, or any other legal or
>     equitable action to disrupt the quiet enjoyment of the Work by the public
>     as contemplated by Affirmer's express Statement of Purpose.
>
>     3. Public License Fallback. Should any part of the Waiver for any reason
>     be judged legally invalid or ineffective under applicable law, then the
>     Waiver shall be preserved to the maximum extent permitted taking into
>     account Affirmer's express Statement of Purpose. In addition, to the
>     extent the Waiver is so judged Affirmer hereby grants to each affected
>     person a royalty-free, non transferable, non sublicensable, non exclusive,
>     irrevocable and unconditional license to exercise Affirmer's Copyright and
>     Related Rights in the Work (i) in all territories worldwide, (ii) for the
>     maximum duration provided by applicable law or treaty (including future
>     time extensions), (iii) in any current or future medium and for any number
>     of copies, and (iv) for any purpose whatsoever, including without
>     limitation commercial, advertising or promotional purposes (the
>     "License"). The License shall be deemed effective as of the date CC0 was
>     applied by Affirmer to the Work. Should any part of the License for any
>     reason be judged legally invalid or ineffective under applicable law, such
>     partial invalidity or ineffectiveness shall not invalidate the remainder
>     of the License, and in such case Affirmer hereby affirms that he or she
>     will not (i) exercise any of his or her remaining Copyright and Related
>     Rights in the Work or (ii) assert any associated claims and causes of
>     action with respect to the Work, in either case contrary to Affirmer's
>     express Statement of Purpose.
>
>     4. Limitations and Disclaimers.
>
>      a. No trademark or patent rights held by Affirmer are waived, abandoned,
>         surrendered, licensed or otherwise affected by this document.
>      b. Affirmer offers the Work as-is and makes no representations or
>         warranties of any kind concerning the Work, express, implied,
>         statutory or otherwise, including without limitation warranties of
>         title, merchantability, fitness for a particular purpose, non
>         infringement, or the absence of latent or other defects, accuracy, or
>         the present or absence of errors, whether or not discoverable, all to
>         the greatest extent permissible under applicable law.
>      c. Affirmer disclaims responsibility for clearing rights of other persons
>         that may apply to the Work or any use thereof, including without
>         limitation any person's Copyright and Related Rights in the Work.
>         Further, Affirmer disclaims responsibility for obtaining any necessary
>         consents, permissions or other rights required for any use of the
>         Work.
>      d. Affirmer understands and acknowledges that Creative Commons is not a
>         party to this document and has no duty or obligation with respect to
>         this CC0 or use of the Work.

## ISC license

>     Permission to use, copy, modify, and distribute this software for any
>     purpose with or without fee is hereby granted, provided that the above
>     copyright notice and this permission notice appear in all copies.
>
>     THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
>     WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
>     MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
>     ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
>     WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
>     ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
>     OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

## LGPLv2 (GNU Library General Public License, Version 2)

>                       GNU LIBRARY GENERAL PUBLIC LICENSE
>                            Version 2, June 1991
>
>      Copyright (C) 1991 Free Software Foundation, Inc.
>      51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
>      Everyone is permitted to copy and distribute verbatim copies
>      of this license document, but changing it is not allowed.
>
>     [This is the first released version of the library GPL.  It is
>      numbered 2 because it goes with version 2 of the ordinary GPL.]
>
>                                 Preamble
>
>       The licenses for most software are designed to take away your
>     freedom to share and change it.  By contrast, the GNU General Public
>     Licenses are intended to guarantee your freedom to share and change
>     free software--to make sure the software is free for all its users.
>
>       This license, the Library General Public License, applies to some
>     specially designated Free Software Foundation software, and to any
>     other libraries whose authors decide to use it.  You can use it for
>     your libraries, too.
>
>       When we speak of free software, we are referring to freedom, not
>     price.  Our General Public Licenses are designed to make sure that you
>     have the freedom to distribute copies of free software (and charge for
>     this service if you wish), that you receive source code or can get it
>     if you want it, that you can change the software or use pieces of it
>     in new free programs; and that you know you can do these things.
>
>       To protect your rights, we need to make restrictions that forbid
>     anyone to deny you these rights or to ask you to surrender the rights.
>     These restrictions translate to certain responsibilities for you if
>     you distribute copies of the library, or if you modify it.
>
>       For example, if you distribute copies of the library, whether gratis
>     or for a fee, you must give the recipients all the rights that we gave
>     you.  You must make sure that they, too, receive or can get the source
>     code.  If you link a program with the library, you must provide
>     complete object files to the recipients so that they can relink them
>     with the library, after making changes to the library and recompiling
>     it.  And you must show them these terms so they know their rights.
>
>       Our method of protecting your rights has two steps: (1) copyright
>     the library, and (2) offer you this license which gives you legal
>     permission to copy, distribute and/or modify the library.
>
>       Also, for each distributor's protection, we want to make certain
>     that everyone understands that there is no warranty for this free
>     library.  If the library is modified by someone else and passed on, we
>     want its recipients to know that what they have is not the original
>     version, so that any problems introduced by others will not reflect on
>     the original authors' reputations.
>
>       Finally, any free program is threatened constantly by software
>     patents.  We wish to avoid the danger that companies distributing free
>     software will individually obtain patent licenses, thus in effect
>     transforming the program into proprietary software.  To prevent this,
>     we have made it clear that any patent must be licensed for everyone's
>     free use or not licensed at all.
>
>       Most GNU software, including some libraries, is covered by the ordinary
>     GNU General Public License, which was designed for utility programs.  This
>     license, the GNU Library General Public License, applies to certain
>     designated libraries.  This license is quite different from the ordinary
>     one; be sure to read it in full, and don't assume that anything in it is
>     the same as in the ordinary license.
>
>       The reason we have a separate public license for some libraries is that
>     they blur the distinction we usually make between modifying or adding to a
>     program and simply using it.  Linking a program with a library, without
>     changing the library, is in some sense simply using the library, and is
>     analogous to running a utility program or application program.  However, in
>     a textual and legal sense, the linked executable is a combined work, a
>     derivative of the original library, and the ordinary General Public License
>     treats it as such.
>
>       Because of this blurred distinction, using the ordinary General
>     Public License for libraries did not effectively promote software
>     sharing, because most developers did not use the libraries.  We
>     concluded that weaker conditions might promote sharing better.
>
>       However, unrestricted linking of non-free programs would deprive the
>     users of those programs of all benefit from the free status of the
>     libraries themselves.  This Library General Public License is intended to
>     permit developers of non-free programs to use free libraries, while
>     preserving your freedom as a user of such programs to change the free
>     libraries that are incorporated in them.  (We have not seen how to achieve
>     this as regards changes in header files, but we have achieved it as regards
>     changes in the actual functions of the Library.)  The hope is that this
>     will lead to faster development of free libraries.
>
>       The precise terms and conditions for copying, distribution and
>     modification follow.  Pay close attention to the difference between a
>     "work based on the library" and a "work that uses the library".  The
>     former contains code derived from the library, while the latter only
>     works together with the library.
>
>       Note that it is possible for a library to be covered by the ordinary
>     General Public License rather than by this special one.
>
>                       GNU LIBRARY GENERAL PUBLIC LICENSE
>        TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
>
>       0. This License Agreement applies to any software library which
>     contains a notice placed by the copyright holder or other authorized
>     party saying it may be distributed under the terms of this Library
>     General Public License (also called "this License").  Each licensee is
>     addressed as "you".
>
>       A "library" means a collection of software functions and/or data
>     prepared so as to be conveniently linked with application programs
>     (which use some of those functions and data) to form executables.
>
>       The "Library", below, refers to any such software library or work
>     which has been distributed under these terms.  A "work based on the
>     Library" means either the Library or any derivative work under
>     copyright law: that is to say, a work containing the Library or a
>     portion of it, either verbatim or with modifications and/or translated
>     straightforwardly into another language.  (Hereinafter, translation is
>     included without limitation in the term "modification".)
>
>       "Source code" for a work means the preferred form of the work for
>     making modifications to it.  For a library, complete source code means
>     all the source code for all modules it contains, plus any associated
>     interface definition files, plus the scripts used to control compilation
>     and installation of the library.
>
>       Activities other than copying, distribution and modification are not
>     covered by this License; they are outside its scope.  The act of
>     running a program using the Library is not restricted, and output from
>     such a program is covered only if its contents constitute a work based
>     on the Library (independent of the use of the Library in a tool for
>     writing it).  Whether that is true depends on what the Library does
>     and what the program that uses the Library does.
>
>       1. You may copy and distribute verbatim copies of the Library's
>     complete source code as you receive it, in any medium, provided that
>     you conspicuously and appropriately publish on each copy an
>     appropriate copyright notice and disclaimer of warranty; keep intact
>     all the notices that refer to this License and to the absence of any
>     warranty; and distribute a copy of this License along with the
>     Library.
>
>       You may charge a fee for the physical act of transferring a copy,
>     and you may at your option offer warranty protection in exchange for a
>     fee.
>
>       2. You may modify your copy or copies of the Library or any portion
>     of it, thus forming a work based on the Library, and copy and
>     distribute such modifications or work under the terms of Section 1
>     above, provided that you also meet all of these conditions:
>
>         a) The modified work must itself be a software library.
>
>         b) You must cause the files modified to carry prominent notices
>         stating that you changed the files and the date of any change.
>
>         c) You must cause the whole of the work to be licensed at no
>         charge to all third parties under the terms of this License.
>
>         d) If a facility in the modified Library refers to a function or a
>         table of data to be supplied by an application program that uses
>         the facility, other than as an argument passed when the facility
>         is invoked, then you must make a good faith effort to ensure that,
>         in the event an application does not supply such function or
>         table, the facility still operates, and performs whatever part of
>         its purpose remains meaningful.
>
>         (For example, a function in a library to compute square roots has
>         a purpose that is entirely well-defined independent of the
>         application.  Therefore, Subsection 2d requires that any
>         application-supplied function or table used by this function must
>         be optional: if the application does not supply it, the square
>         root function must still compute square roots.)
>
>     These requirements apply to the modified work as a whole.  If
>     identifiable sections of that work are not derived from the Library,
>     and can be reasonably considered independent and separate works in
>     themselves, then this License, and its terms, do not apply to those
>     sections when you distribute them as separate works.  But when you
>     distribute the same sections as part of a whole which is a work based
>     on the Library, the distribution of the whole must be on the terms of
>     this License, whose permissions for other licensees extend to the
>     entire whole, and thus to each and every part regardless of who wrote
>     it.
>
>     Thus, it is not the intent of this section to claim rights or contest
>     your rights to work written entirely by you; rather, the intent is to
>     exercise the right to control the distribution of derivative or
>     collective works based on the Library.
>
>     In addition, mere aggregation of another work not based on the Library
>     with the Library (or with a work based on the Library) on a volume of
>     a storage or distribution medium does not bring the other work under
>     the scope of this License.
>
>       3. You may opt to apply the terms of the ordinary GNU General Public
>     License instead of this License to a given copy of the Library.  To do
>     this, you must alter all the notices that refer to this License, so
>     that they refer to the ordinary GNU General Public License, version 2,
>     instead of to this License.  (If a newer version than version 2 of the
>     ordinary GNU General Public License has appeared, then you can specify
>     that version instead if you wish.)  Do not make any other change in
>     these notices.
>
>       Once this change is made in a given copy, it is irreversible for
>     that copy, so the ordinary GNU General Public License applies to all
>     subsequent copies and derivative works made from that copy.
>
>       This option is useful when you wish to copy part of the code of
>     the Library into a program that is not a library.
>
>       4. You may copy and distribute the Library (or a portion or
>     derivative of it, under Section 2) in object code or executable form
>     under the terms of Sections 1 and 2 above provided that you accompany
>     it with the complete corresponding machine-readable source code, which
>     must be distributed under the terms of Sections 1 and 2 above on a
>     medium customarily used for software interchange.
>
>       If distribution of object code is made by offering access to copy
>     from a designated place, then offering equivalent access to copy the
>     source code from the same place satisfies the requirement to
>     distribute the source code, even though third parties are not
>     compelled to copy the source along with the object code.
>
>       5. A program that contains no derivative of any portion of the
>     Library, but is designed to work with the Library by being compiled or
>     linked with it, is called a "work that uses the Library".  Such a
>     work, in isolation, is not a derivative work of the Library, and
>     therefore falls outside the scope of this License.
>
>       However, linking a "work that uses the Library" with the Library
>     creates an executable that is a derivative of the Library (because it
>     contains portions of the Library), rather than a "work that uses the
>     library".  The executable is therefore covered by this License.
>     Section 6 states terms for distribution of such executables.
>
>       When a "work that uses the Library" uses material from a header file
>     that is part of the Library, the object code for the work may be a
>     derivative work of the Library even though the source code is not.
>     Whether this is true is especially significant if the work can be
>     linked without the Library, or if the work is itself a library.  The
>     threshold for this to be true is not precisely defined by law.
>
>       If such an object file uses only numerical parameters, data
>     structure layouts and accessors, and small macros and small inline
>     functions (ten lines or less in length), then the use of the object
>     file is unrestricted, regardless of whether it is legally a derivative
>     work.  (Executables containing this object code plus portions of the
>     Library will still fall under Section 6.)
>
>       Otherwise, if the work is a derivative of the Library, you may
>     distribute the object code for the work under the terms of Section 6.
>     Any executables containing that work also fall under Section 6,
>     whether or not they are linked directly with the Library itself.
>
>       6. As an exception to the Sections above, you may also compile or
>     link a "work that uses the Library" with the Library to produce a
>     work containing portions of the Library, and distribute that work
>     under terms of your choice, provided that the terms permit
>     modification of the work for the customer's own use and reverse
>     engineering for debugging such modifications.
>
>       You must give prominent notice with each copy of the work that the
>     Library is used in it and that the Library and its use are covered by
>     this License.  You must supply a copy of this License.  If the work
>     during execution displays copyright notices, you must include the
>     copyright notice for the Library among them, as well as a reference
>     directing the user to the copy of this License.  Also, you must do one
>     of these things:
>
>         a) Accompany the work with the complete corresponding
>         machine-readable source code for the Library including whatever
>         changes were used in the work (which must be distributed under
>         Sections 1 and 2 above); and, if the work is an executable linked
>         with the Library, with the complete machine-readable "work that
>         uses the Library", as object code and/or source code, so that the
>         user can modify the Library and then relink to produce a modified
>         executable containing the modified Library.  (It is understood
>         that the user who changes the contents of definitions files in the
>         Library will not necessarily be able to recompile the application
>         to use the modified definitions.)
>
>         b) Accompany the work with a written offer, valid for at
>         least three years, to give the same user the materials
>         specified in Subsection 6a, above, for a charge no more
>         than the cost of performing this distribution.
>
>         c) If distribution of the work is made by offering access to copy
>         from a designated place, offer equivalent access to copy the above
>         specified materials from the same place.
>
>         d) Verify that the user has already received a copy of these
>         materials or that you have already sent this user a copy.
>
>       For an executable, the required form of the "work that uses the
>     Library" must include any data and utility programs needed for
>     reproducing the executable from it.  However, as a special exception,
>     the source code distributed need not include anything that is normally
>     distributed (in either source or binary form) with the major
>     components (compiler, kernel, and so on) of the operating system on
>     which the executable runs, unless that component itself accompanies
>     the executable.
>
>       It may happen that this requirement contradicts the license
>     restrictions of other proprietary libraries that do not normally
>     accompany the operating system.  Such a contradiction means you cannot
>     use both them and the Library together in an executable that you
>     distribute.
>
>       7. You may place library facilities that are a work based on the
>     Library side-by-side in a single library together with other library
>     facilities not covered by this License, and distribute such a combined
>     library, provided that the separate distribution of the work based on
>     the Library and of the other library facilities is otherwise
>     permitted, and provided that you do these two things:
>
>         a) Accompany the combined library with a copy of the same work
>         based on the Library, uncombined with any other library
>         facilities.  This must be distributed under the terms of the
>         Sections above.
>
>         b) Give prominent notice with the combined library of the fact
>         that part of it is a work based on the Library, and explaining
>         where to find the accompanying uncombined form of the same work.
>
>       8. You may not copy, modify, sublicense, link with, or distribute
>     the Library except as expressly provided under this License.  Any
>     attempt otherwise to copy, modify, sublicense, link with, or
>     distribute the Library is void, and will automatically terminate your
>     rights under this License.  However, parties who have received copies,
>     or rights, from you under this License will not have their licenses
>     terminated so long as such parties remain in full compliance.
>
>       9. You are not required to accept this License, since you have not
>     signed it.  However, nothing else grants you permission to modify or
>     distribute the Library or its derivative works.  These actions are
>     prohibited by law if you do not accept this License.  Therefore, by
>     modifying or distributing the Library (or any work based on the
>     Library), you indicate your acceptance of this License to do so, and
>     all its terms and conditions for copying, distributing or modifying
>     the Library or works based on it.
>
>       10. Each time you redistribute the Library (or any work based on the
>     Library), the recipient automatically receives a license from the
>     original licensor to copy, distribute, link with or modify the Library
>     subject to these terms and conditions.  You may not impose any further
>     restrictions on the recipients' exercise of the rights granted herein.
>     You are not responsible for enforcing compliance by third parties to
>     this License.
>
>       11. If, as a consequence of a court judgment or allegation of patent
>     infringement or for any other reason (not limited to patent issues),
>     conditions are imposed on you (whether by court order, agreement or
>     otherwise) that contradict the conditions of this License, they do not
>     excuse you from the conditions of this License.  If you cannot
>     distribute so as to satisfy simultaneously your obligations under this
>     License and any other pertinent obligations, then as a consequence you
>     may not distribute the Library at all.  For example, if a patent
>     license would not permit royalty-free redistribution of the Library by
>     all those who receive copies directly or indirectly through you, then
>     the only way you could satisfy both it and this License would be to
>     refrain entirely from distribution of the Library.
>
>     If any portion of this section is held invalid or unenforceable under any
>     particular circumstance, the balance of the section is intended to apply,
>     and the section as a whole is intended to apply in other circumstances.
>
>     It is not the purpose of this section to induce you to infringe any
>     patents or other property right claims or to contest validity of any
>     such claims; this section has the sole purpose of protecting the
>     integrity of the free software distribution system which is
>     implemented by public license practices.  Many people have made
>     generous contributions to the wide range of software distributed
>     through that system in reliance on consistent application of that
>     system; it is up to the author/donor to decide if he or she is willing
>     to distribute software through any other system and a licensee cannot
>     impose that choice.
>
>     This section is intended to make thoroughly clear what is believed to
>     be a consequence of the rest of this License.
>
>       12. If the distribution and/or use of the Library is restricted in
>     certain countries either by patents or by copyrighted interfaces, the
>     original copyright holder who places the Library under this License may add
>     an explicit geographical distribution limitation excluding those countries,
>     so that distribution is permitted only in or among countries not thus
>     excluded.  In such case, this License incorporates the limitation as if
>     written in the body of this License.
>
>       13. The Free Software Foundation may publish revised and/or new
>     versions of the Library General Public License from time to time.
>     Such new versions will be similar in spirit to the present version,
>     but may differ in detail to address new problems or concerns.
>
>     Each version is given a distinguishing version number.  If the Library
>     specifies a version number of this License which applies to it and
>     "any later version", you have the option of following the terms and
>     conditions either of that version or of any later version published by
>     the Free Software Foundation.  If the Library does not specify a
>     license version number, you may choose any version ever published by
>     the Free Software Foundation.
>
>       14. If you wish to incorporate parts of the Library into other free
>     programs whose distribution conditions are incompatible with these,
>     write to the author to ask for permission.  For software which is
>     copyrighted by the Free Software Foundation, write to the Free
>     Software Foundation; we sometimes make exceptions for this.  Our
>     decision will be guided by the two goals of preserving the free status
>     of all derivatives of our free software and of promoting the sharing
>     and reuse of software generally.
>
>                                 NO WARRANTY
>
>       15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
>     WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
>     EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
>     OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
>     KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
>     IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
>     PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
>     LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
>     THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
>
>       16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
>     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
>     AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
>     FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
>     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
>     LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
>     RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
>     FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
>     SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
>     DAMAGES.
>
>                          END OF TERMS AND CONDITIONS
>
>                How to Apply These Terms to Your New Libraries
>
>       If you develop a new library, and you want it to be of the greatest
>     possible use to the public, we recommend making it free software that
>     everyone can redistribute and change.  You can do so by permitting
>     redistribution under these terms (or, alternatively, under the terms of the
>     ordinary General Public License).
>
>       To apply these terms, attach the following notices to the library.  It is
>     safest to attach them to the start of each source file to most effectively
>     convey the exclusion of warranty; and each file should have at least the
>     "copyright" line and a pointer to where the full notice is found.
>
>         <one line to give the library's name and a brief idea of what it does.>
>         Copyright (C) <year>  <name of author>
>
>         This library is free software; you can redistribute it and/or
>         modify it under the terms of the GNU Library General Public
>         License as published by the Free Software Foundation; either
>         version 2 of the License, or (at your option) any later version.
>
>         This library is distributed in the hope that it will be useful,
>         but WITHOUT ANY WARRANTY; without even the implied warranty of
>         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
>         Library General Public License for more details.
>
>         You should have received a copy of the GNU Library General Public
>         License along with this library; if not, write to the Free Software
>         Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
>
>     Also add information on how to contact you by electronic and paper mail.
>
>     You should also get your employer (if you work as a programmer) or your
>     school, if any, to sign a "copyright disclaimer" for the library, if
>     necessary.  Here is a sample; alter the names:
>
>       Yoyodyne, Inc., hereby disclaims all copyright interest in the
>       library `Frob' (a library for tweaking knobs) written by James Random Hacker.
>
>       <signature of Ty Coon>, 1 April 1990
>       Ty Coon, President of Vice
>
>     That's all there is to it!

## MIT License

>     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.

## zlib license

>     This software is provided 'as-is', without any express or implied
>     warranty.  In no event will the authors be held liable for any damages
>     arising from the use of this software.
>
>     Permission is granted to anyone to use this software for any purpose,
>     including commercial applications, and to alter it and redistribute it
>     freely, subject to the following restrictions:
>
>     1. The origin of this software must not be misrepresented; you must not
>        claim that you wrote the original software. If you use this software
>        in a product, an acknowledgment in the product documentation would be
>        appreciated but is not required.
>     2. Altered source versions must be plainly marked as such, and must not be
>        misrepresented as being the original software.
>     3. This notice may not be removed or altered from any source distribution.



================================================
FILE: VERSION
================================================
0.9.8.


================================================
FILE: android/.gitignore
================================================
distribution
app/src/main/assets
app/src/main/jniLibs
app/src/main/cpp/impacto/src/**

# Gradle files
.gradle/
build/

# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
!gradle-wrapper.jar

# Avoid ignore Gradle wrappper properties
!gradle-wrapper.properties

# Local configuration file (sdk path, etc)
local.properties

# Log/OS Files
*.log

# Android Studio generated files and folders
captures/
.externalNativeBuild/
.cxx/
*.apk
output.json

# IntelliJ
*.iml
.idea/
misc.xml
deploymentTargetDropDown.xml
render.experimental.xml

# Keystore files
*.jks
*.keystore

# Google Services (e.g. APIs or Firebase)
google-services.json

# Android Profiling
*.hprof

================================================
FILE: android/.run/app.run.xml
================================================
<component name="ProjectRunConfigurationManager">
  <configuration default="false" name="app" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
    <module name="android.app" />
    <option name="ANDROID_RUN_CONFIGURATION_SCHEMA_VERSION" value="1" />
    <option name="DEPLOY" value="true" />
    <option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
    <option name="DEPLOY_AS_INSTANT" value="false" />
    <option name="ARTIFACT_NAME" value="" />
    <option name="PM_INSTALL_OPTIONS" value="" />
    <option name="ALL_USERS" value="false" />
    <option name="ALWAYS_INSTALL_WITH_PM" value="false" />
    <option name="ALLOW_ASSUME_VERIFIED" value="false" />
    <option name="CLEAR_APP_STORAGE" value="false" />
    <option name="DYNAMIC_FEATURES_DISABLED_LIST" value="" />
    <option name="ACTIVITY_EXTRA_FLAGS" value="" />
    <option name="MODE" value="default_activity" />
    <option name="RESTORE_ENABLED" value="false" />
    <option name="RESTORE_FILE" value="" />
    <option name="RESTORE_FRESH_INSTALL_ONLY" value="false" />
    <option name="CLEAR_LOGCAT" value="false" />
    <option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" />
    <option name="TARGET_SELECTION_MODE" value="DEVICE_AND_SNAPSHOT_COMBO_BOX" />
    <option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
    <option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
    <option name="DEBUGGER_TYPE" value="Auto" />
    <Auto>
      <option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
      <option name="SHOW_STATIC_VARS" value="true" />
      <option name="WORKING_DIR" value="" />
      <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
      <option name="SHOW_OPTIMIZED_WARNING" value="true" />
      <option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
      <option name="DEBUG_SANDBOX_SDK" value="false" />
      <symbol_dirs symbol_path="$PROJECT_DIR$/app/src/main/cpp/impacto" />
      <startup_commands startup_commands_attr="settings append target.source-map $PROJECT_DIR$/.. $PROJECT_DIR$/app/src/main/cpp/impacto" />
      <post_attach_commands post_attach_commands_attr="settings append target.source-map $PROJECT_DIR$/.. $PROJECT_DIR$/app/src/main/cpp/impacto" />
    </Auto>
    <Hybrid>
      <option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
      <option name="SHOW_STATIC_VARS" value="true" />
      <option name="WORKING_DIR" value="" />
      <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
      <option name="SHOW_OPTIMIZED_WARNING" value="true" />
      <option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
      <option name="DEBUG_SANDBOX_SDK" value="false" />
    </Hybrid>
    <Java>
      <option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
      <option name="DEBUG_SANDBOX_SDK" value="false" />
    </Java>
    <Native>
      <option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
      <option name="SHOW_STATIC_VARS" value="true" />
      <option name="WORKING_DIR" value="" />
      <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
      <option name="SHOW_OPTIMIZED_WARNING" value="true" />
      <option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
      <option name="DEBUG_SANDBOX_SDK" value="false" />
    </Native>
    <Profilers>
      <option name="ADVANCED_PROFILING_ENABLED" value="false" />
      <option name="STARTUP_PROFILING_ENABLED" value="false" />
      <option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
      <option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Java/Kotlin Method Sample (legacy)" />
      <option name="STARTUP_NATIVE_MEMORY_PROFILING_ENABLED" value="false" />
      <option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" />
    </Profilers>
    <option name="DEEP_LINK" value="" />
    <option name="ACTIVITY" value="" />
    <option name="ACTIVITY_CLASS" value="" />
    <option name="SEARCH_ACTIVITY_IN_GLOBAL_SCOPE" value="false" />
    <option name="SKIP_ACTIVITY_VALIDATION" value="false" />
    <method v="2">
      <option name="Gradle.BeforeRunTask" enabled="false" tasks="assemble" externalProjectPath="$PROJECT_DIR$" vmOptions="" scriptParameters="" />
    </method>
  </configuration>
</component>

================================================
FILE: android/README.md
================================================
Android Development:

# Set up Android NDK
Download the Android NDK
Set $ANDROID_NDK_HOME to point to NDK path
Set $MINSDKVERSION to point to desired minimum Android API level (currently 28 in pipeline)

# Build impacto
Run cmake with the ci-release-android preset or customize with your own in CMakeUserPresets.json
VCPKG will automatically build dependencies for Android ARM64 target defined in the custom triplet.

```shell
cmake --preset ci-release-android
cmake --build --preset ci-release-android
```
libimpacto.so will automatically be copied to impacto/android/app/src/main/jniLibs/<ABI>/libimpacto.so

# Packaging
To avoid issues with packaging the .apk, avoid bundling game assets as .apk files have a maximum file size limit.
run ./gradlew assemble in impacto/android
apks will be created in impacto/android/distribution/android/app/outputs/apk

# Preparing impacto
Game assets should be copied to the `/sdcard/Android/data/com.committeeofzero.impacto/files/games` folder, see [Getting Started](/doc/getting_started.md).
Upon running the application for the first time, bundled files will be copied to the `/sdcard/Android/data/com.committeeofzero.impacto/files/` folder. This will also occur when impacto detects a .reset file in the same directory.

# Debugging
Override the CMake preset and set CMAKE_BUILD_TYPE to DEBUG (-DCMAKE_BUILD_TYPE=DEBUG in command line or override with user preset) 
to build with debug symbols first.
In Android Studio, open the impacto/android folder
Make sure the explorer is set to view Project or Project files and not Android so cpp files are actually visible.
Edit the run configuratio
- Go to debugger:
- Add <absolute_path_to_impacto>/android/app/src/main/cpp/impacto to symbol directories
- In LLDB Startup Commands, add the following so symbols get mapped to correct files
`settings append target.source-map <absolute_path_to_impacto> <absolute_path_to_impacto>/android/app/src/main/cpp/impacto`
Breakpoints should work now properly in C++ files when debugging

================================================
FILE: android/app/build.gradle
================================================
apply plugin: 'com.android.application'
apply from: 'signing.gradle'
android {
    defaultConfig {
        compileSdk 33
        applicationId "com.committeeofzero.impacto"
        minSdkVersion 28
        targetSdkVersion 34
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        ndk {
            abiFilters "arm64-v8a"
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            resValue "string", "app_name", "Impacto"
        }
        debug {
            applicationIdSuffix ".debug"
            versionNameSuffix '-DEBUG'
            resValue "string", "app_name", "Impacto Debug"
            debuggable true
            packaging {
                jniLibs {
                    keepDebugSymbols += "**/*.so"
                }
            }
        }
    }
    namespace 'com.committeeofzero.impacto'
    aaptOptions {
       noCompress 'mp4', 'mpk'
    }
    applicationVariants.all { variant ->
        def mergeTaskName = "merge${variant.name.capitalize()}NativeLibs"
        tasks.named(mergeTaskName).configure {
            outputs.upToDateWhen { false }
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
}


================================================
FILE: android/app/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /home/luap/Logiciels/android-sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

-keepclassmembers class org.libsdl.app.** { 
   public static *** **(...); 
   public *** **(...); 
}


================================================
FILE: android/app/signing/.gitignore
================================================
prod.properties
prod.jks
!external.jks
!external.properties

================================================
FILE: android/app/signing/external.properties
================================================
# Sign key alias for external.jks
releaseSignKeyAlias=key
# Sign key password for external.jks
releaseSignKeyPassword=impacto
# Path to external.jks
releaseStoreFilePath=./signing/external.jks
# Keystore password for external.jks
releaseStorePassword=impacto

================================================
FILE: android/app/signing.gradle
================================================
// https://dev.to/ivanshafran/android-open-source-app-secure-build-config-38gi
def propertiesFilename = "signing/prod.properties"
if (!project.file(propertiesFilename).exists()) {
    propertiesFilename = "signing/external.properties"
}

def signingProperties = new Properties()
signingProperties.load(new FileInputStream(file(propertiesFilename)))

android {
    signingConfigs {
        release {
            keyAlias signingProperties.releaseSignKeyAlias
            keyPassword signingProperties.releaseSignKeyPassword
            storeFile file(signingProperties.releaseStoreFilePath)
            storePassword signingProperties.releaseStorePassword
        }
    }
}

================================================
FILE: android/app/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- OpenGL ES 3.0 -->
    <uses-feature android:glEsVersion="0x00030000" />

    <!-- Touchscreen support -->
    <uses-feature
        android:name="android.hardware.touchscreen"
        android:required="false" />

    <!-- Game controller support -->
    <uses-feature
        android:name="android.hardware.bluetooth"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.gamepad"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.usb.host"
        android:required="false" />

    <!-- External mouse input events -->
    <uses-feature
        android:name="android.hardware.type.pc"
        android:required="false" />

    <!-- Allow access to Bluetooth devices -->
    <!-- Currently this is just for Steam Controller support and requires setting SDL_HINT_JOYSTICK_HIDAPI_STEAM -->
    <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

    <!-- Allow access to the vibrator -->
    <uses-permission android:name="android.permission.VIBRATE" />

    <application
        android:allowBackup="true"
        android:appCategory="game"
        android:label="@string/app_name"
        android:icon="@mipmap/ic_launcher"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".ImpactoActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
			android:screenOrientation="landscape"
            android:label="@string/app_name"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <!-- Let Android know that we can handle some USB devices and should receive this event -->
            <intent-filter>
                <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
            </intent-filter>

        </activity>

    </application>

</manifest>


================================================
FILE: android/app/src/main/java/com/committeeofzero/impacto/ImpactoActivity.java
================================================
package com.committeeofzero.impacto;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.content.SharedPreferences;

import org.libsdl.app.SDLActivity;

public class ImpactoActivity extends SDLActivity {
    SharedPreferences prefs = null;

    /**
     * This method is called by SDL before loading the native shared libraries.
     * It can be overridden to provide names of shared libraries to be loaded.
     * The default implementation returns the defaults. It never returns null.
     * An array returned by a new implementation must at least contain "SDL2".
     * Also keep in mind that the order the libraries are loaded may matter.
     *
     * @return names of shared libraries to be loaded (e.g. "SDL2", "main").
     */
    @Override
    protected String[] getLibraries() {
        return new String[]{
            "impacto"
        };
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        prefs = this.getPreferences(Context.MODE_PRIVATE);
        File externalFilesDir = getExternalFilesDir(null);
        File resetFile = new File(externalFilesDir, ".reset");
        boolean reset = prefs.getBoolean("firstRun", true);
        if (resetFile.exists()) {
            resetFile.delete();
            reset = true;
        }

        SharedPreferences.Editor editor = prefs.edit();
        editor.putBoolean("firstRun", false);
        editor.apply();
        copyAssetFolder("shaders", getFilesDir().getAbsolutePath() + "/" + "shaders");
        if (reset) {
            copyAssetFolder("games", externalFilesDir.getAbsolutePath() + "/" + "games");
            copyAssetFolder("profiles", externalFilesDir.getAbsolutePath() + "/" + "profiles");
        }
        super.onCreate(savedInstanceState);
    }

    public boolean copyAssetFolder(String srcName, String dstName) {
        try {
            boolean result = true;
            String[] fileList = getAssets().list(srcName);
            if (fileList == null) {
                return false;
            }

            if (fileList.length == 0) {
                result = copyAssetFile(srcName, dstName);
            } else {
                File file = new File(dstName);
                result = file.mkdirs();
                for (String filename : fileList) {
                    result &= copyAssetFolder(srcName + File.separator + filename, dstName + File.separator + filename);
                }
            }
            return result;
        } catch (IOException e) {
            Log.e(null, "Failed to copy folder \"" + srcName + ", error: \"" + e.getMessage() + "\"\n.");
            return false;
        }
    }

    public boolean copyAssetFile(String srcName, String dstName) {
        try {
            InputStream in = getAssets().open(srcName);
            File outFile = new File(dstName);
            OutputStream out = new FileOutputStream(outFile);
            byte[] buffer = new byte[1024];
            int read;
            while ((read = in.read(buffer)) != -1) {
                out.write(buffer, 0, read);
            }
            in.close();
            out.close();
            return true;
        } catch (IOException e) {
            Log.e(null, "Failed to copy file \"" + srcName + ", error: \"" + e.getMessage() + "\"\n.");
            return false;
        }
    }

}


================================================
FILE: android/app/src/main/java/org/libsdl/app/HIDDevice.java
================================================
package org.libsdl.app;

import android.hardware.usb.UsbDevice;

interface HIDDevice
{
    public int getId();
    public int getVendorId();
    public int getProductId();
    public String getSerialNumber();
    public int getVersion();
    public String getManufacturerName();
    public String getProductName();
    public UsbDevice getDevice();
    public boolean open();
    public int sendFeatureReport(byte[] report);
    public int sendOutputReport(byte[] report);
    public boolean getFeatureReport(byte[] report);
    public void setFrozen(boolean frozen);
    public void close();
    public void shutdown();
}


================================================
FILE: android/app/src/main/java/org/libsdl/app/HIDDeviceBLESteamController.java
================================================
package org.libsdl.app;

import android.content.Context;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothGattCallback;
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattDescriptor;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothProfile;
import android.bluetooth.BluetoothGattService;
import android.hardware.usb.UsbDevice;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.os.*;

//import com.android.internal.util.HexDump;

import java.lang.Runnable;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.UUID;

class HIDDeviceBLESteamController extends BluetoothGattCallback implements HIDDevice {

    private static final String TAG = "hidapi";
    private HIDDeviceManager mManager;
    private BluetoothDevice mDevice;
    private int mDeviceId;
    private BluetoothGatt mGatt;
    private boolean mIsRegistered = false;
    private boolean mIsConnected = false;
    private boolean mIsChromebook = false;
    private boolean mIsReconnecting = false;
    private boolean mFrozen = false;
    private LinkedList<GattOperation> mOperations;
    GattOperation mCurrentOperation = null;
    private Handler mHandler;

    private static final int TRANSPORT_AUTO = 0;
    private static final int TRANSPORT_BREDR = 1;
    private static final int TRANSPORT_LE = 2;

    private static final int CHROMEBOOK_CONNECTION_CHECK_INTERVAL = 10000;

    static public final UUID steamControllerService = UUID.fromString("100F6C32-1735-4313-B402-38567131E5F3");
    static public final UUID inputCharacteristic = UUID.fromString("100F6C33-1735-4313-B402-38567131E5F3");
    static public final UUID reportCharacteristic = UUID.fromString("100F6C34-1735-4313-B402-38567131E5F3");
    static private final byte[] enterValveMode = new byte[] { (byte)0xC0, (byte)0x87, 0x03, 0x08, 0x07, 0x00 };

    static class GattOperation {
        private enum Operation {
            CHR_READ,
            CHR_WRITE,
            ENABLE_NOTIFICATION
        }

        Operation mOp;
        UUID mUuid;
        byte[] mValue;
        BluetoothGatt mGatt;
        boolean mResult = true;

        private GattOperation(BluetoothGatt gatt, GattOperation.Operation operation, UUID uuid) {
            mGatt = gatt;
            mOp = operation;
            mUuid = uuid;
        }

        private GattOperation(BluetoothGatt gatt, GattOperation.Operation operation, UUID uuid, byte[] value) {
            mGatt = gatt;
            mOp = operation;
            mUuid = uuid;
            mValue = value;
        }

        public void run() {
            // This is executed in main thread
            BluetoothGattCharacteristic chr;

            switch (mOp) {
                case CHR_READ:
                    chr = getCharacteristic(mUuid);
                    //Log.v(TAG, "Reading characteristic " + chr.getUuid());
                    if (!mGatt.readCharacteristic(chr)) {
                        Log.e(TAG, "Unable to read characteristic " + mUuid.toString());
                        mResult = false;
                        break;
                    }
                    mResult = true;
                    break;
                case CHR_WRITE:
                    chr = getCharacteristic(mUuid);
                    //Log.
Download .txt
gitextract__xh7dyft/

├── .clang-format
├── .gitattributes
├── .github/
│   └── workflows/
│       ├── docker-switch.yml
│       ├── impacto.yml
│       ├── notify.yml
│       └── publish.yml
├── .gitignore
├── CMakeLists.txt
├── CMakePresets.json
├── HorizonNX.toolchain
├── LICENSE
├── README.md
├── THIRDPARTY.md
├── VERSION
├── android/
│   ├── .gitignore
│   ├── .run/
│   │   └── app.run.xml
│   ├── README.md
│   ├── app/
│   │   ├── build.gradle
│   │   ├── proguard-rules.pro
│   │   ├── signing/
│   │   │   ├── .gitignore
│   │   │   ├── external.jks
│   │   │   └── external.properties
│   │   ├── signing.gradle
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           ├── java/
│   │           │   ├── com/
│   │           │   │   └── committeeofzero/
│   │           │   │       └── impacto/
│   │           │   │           └── ImpactoActivity.java
│   │           │   └── org/
│   │           │       └── libsdl/
│   │           │           └── app/
│   │           │               ├── HIDDevice.java
│   │           │               ├── HIDDeviceBLESteamController.java
│   │           │               ├── HIDDeviceManager.java
│   │           │               ├── HIDDeviceUSB.java
│   │           │               ├── SDL.java
│   │           │               ├── SDLActivity.java
│   │           │               ├── SDLAudioManager.java
│   │           │               ├── SDLControllerManager.java
│   │           │               └── SDLSurface.java
│   │           └── res/
│   │               └── values/
│   │                   ├── colors.xml
│   │                   ├── strings.xml
│   │                   └── styles.xml
│   ├── build.gradle
│   ├── buildDebug.bat
│   ├── gradle/
│   │   └── wrapper/
│   │       ├── gradle-wrapper.jar
│   │       └── gradle-wrapper.properties
│   ├── gradle.properties
│   ├── gradlew
│   ├── gradlew.bat
│   ├── installDebug.bat
│   └── settings.gradle
├── build-deps.ps1
├── doc/
│   ├── contributor_guide.md
│   ├── font-lb/
│   │   ├── CompoundCharacters.tbl
│   │   ├── RobonoCharset.utf8
│   │   └── font-lb.md
│   ├── getting_started.md
│   ├── ubuntu_build.md
│   └── vs_build.md
├── docker/
│   ├── impacto-emscripten/
│   │   ├── Dockerfile
│   │   ├── build_emscripten.sh
│   │   └── libatrac9-emscripten.mk
│   └── impacto-switch/
│       └── Dockerfile
├── games/
│   ├── cc/
│   │   └── .gitkeep
│   ├── chlcc/
│   │   └── .gitkeep
│   ├── rne/
│   │   └── .gitkeep
│   └── sg0/
│       └── .gitkeep
├── portfiles/
│   └── avcpp/
│       ├── 0002-av_init_packet_deprecation.patch
│       ├── portfile.cmake
│       └── vcpkg.json
├── profiles/
│   ├── cc/
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── dialogue.lua
│   │   ├── font-lb.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── systemmenu.lua
│   │   │   ├── tipsmenu.lua
│   │   │   ├── tipsnotification.lua
│   │   │   └── titlemenu.lua
│   │   ├── savedata.lua
│   │   ├── scriptvars.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   ├── vfs.lua
│   │   └── waveeffects.lua
│   ├── cclcc/
│   │   ├── bgeff.lua
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── configsystem.lua
│   │   ├── dialogue.lua
│   │   ├── font-lb-italic.lua
│   │   ├── font-lb.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── gamespecific.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── delusiontrigger.lua
│   │   │   ├── extramenus.lua
│   │   │   ├── helpmenu.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── optionsmenu.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── savemenu.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── systemmenu.lua
│   │   │   ├── tipsmenu.lua
│   │   │   ├── tipsnotification.lua
│   │   │   └── titlemenu.lua
│   │   ├── mapsystem.lua
│   │   ├── savedata.lua
│   │   ├── scriptinput.lua
│   │   ├── scriptvars.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   ├── vfs.lua
│   │   ├── waveeffects.lua
│   │   └── yesnotrigger.lua
│   ├── characterviewer/
│   │   ├── config.lua
│   │   └── game.lua
│   ├── chlcc/
│   │   ├── achievementsystem.lua
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── dialogue.lua
│   │   ├── font-lb.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── gamespecific.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── commonmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── delusiontrigger.lua
│   │   │   ├── extramenus.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── optionsmenu.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── savemenu.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── systemmenu.lua
│   │   │   ├── tipsmenu.lua
│   │   │   ├── tipsnotification.lua
│   │   │   ├── titlemenu.lua
│   │   │   └── trophymenu.lua
│   │   ├── savedata.lua
│   │   ├── scriptinput.lua
│   │   ├── scriptvars.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   ├── vfs.lua
│   │   └── waveeffects.lua
│   ├── chn/
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── dialogue.lua
│   │   ├── font-lb.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── systemmenu.lua
│   │   │   ├── tipsmenu.lua
│   │   │   ├── tipsnotification.lua
│   │   │   └── titlemenu.lua
│   │   ├── savedata.lua
│   │   ├── scriptvars.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   └── vfs.lua
│   ├── common/
│   │   ├── animation.lua
│   │   ├── charset.lua
│   │   ├── scriptinput.lua
│   │   └── scriptvars.lua
│   ├── darling/
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── dialogue.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── systemmenu.lua
│   │   │   ├── tipsmenu.lua
│   │   │   ├── tipsnotification.lua
│   │   │   └── titlemenu.lua
│   │   ├── savedata.lua
│   │   ├── scriptvars.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   └── vfs.lua
│   ├── dash/
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── dialogue.lua
│   │   ├── font-lb.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── gamespecific.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── systemmenu.lua
│   │   │   ├── tipsmenu.lua
│   │   │   ├── tipsnotification.lua
│   │   │   └── titlemenu.lua
│   │   ├── savedata.lua
│   │   ├── scene3d/
│   │   │   ├── characters.lua
│   │   │   └── scene3d.lua
│   │   ├── scriptvars.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   └── vfs.lua
│   ├── mo6tw/
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── dialogue.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── extramenus.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── optionsmenu.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── savemenu.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── systemmenu.lua
│   │   │   ├── tipsmenu.lua
│   │   │   ├── tipsnotification.lua
│   │   │   └── titlemenu.lua
│   │   ├── savedata.lua
│   │   ├── scriptinput.lua
│   │   ├── scriptvars.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   └── vfs.lua
│   ├── mo7/
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── dialogue.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── tipsmenu.lua
│   │   │   └── tipsnotification.lua
│   │   ├── savedata.lua
│   │   ├── scriptvars.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   └── vfs.lua
│   ├── mo8/
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── dialogue.lua
│   │   ├── font-lb.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── optionsmenu.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── savemenu.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── systemmenu.lua
│   │   │   ├── tipsmenu.lua
│   │   │   ├── tipsnotification.lua
│   │   │   └── titlemenu.lua
│   │   ├── savedata.lua
│   │   ├── scriptvars.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   └── vfs.lua
│   ├── modelviewer/
│   │   ├── config.lua
│   │   └── game.lua
│   ├── modelviewer-dash/
│   │   ├── config.lua
│   │   └── game.lua
│   ├── rne/
│   │   ├── charset.lua
│   │   ├── config.lua
│   │   ├── dialogue.lua
│   │   ├── font-lb.lua
│   │   ├── font.lua
│   │   ├── game.lua
│   │   ├── gamespecific.lua
│   │   ├── hud/
│   │   │   ├── backlogmenu.lua
│   │   │   ├── datedisplay.lua
│   │   │   ├── loadingdisplay.lua
│   │   │   ├── saveicon.lua
│   │   │   ├── selectiondisplay.lua
│   │   │   ├── sysmesboxdisplay.lua
│   │   │   ├── systemmenu.lua
│   │   │   ├── tipsmenu.lua
│   │   │   ├── tipsnotification.lua
│   │   │   └── titlemenu.lua
│   │   ├── savedata.lua
│   │   ├── scene3d/
│   │   │   ├── characters.lua
│   │   │   └── scene3d.lua
│   │   ├── sprites.lua
│   │   ├── tipssystem.lua
│   │   └── vfs.lua
│   └── sgps3/
│       ├── charset.lua
│       ├── config.lua
│       ├── dialogue.lua
│       ├── font.lua
│       ├── game.lua
│       ├── hud/
│       │   ├── backlogmenu.lua
│       │   ├── datedisplay.lua
│       │   ├── loadingdisplay.lua
│       │   ├── saveicon.lua
│       │   ├── selectiondisplay.lua
│       │   ├── sysmesboxdisplay.lua
│       │   ├── systemmenu.lua
│       │   ├── tipsmenu.lua
│       │   ├── tipsnotification.lua
│       │   └── titlemenu.lua
│       ├── savedata.lua
│       ├── scriptvars.lua
│       ├── sprites.lua
│       ├── tipssystem.lua
│       └── vfs.lua
├── src/
│   ├── animation.cpp
│   ├── animation.h
│   ├── audio/
│   │   ├── adxaudiostream.cpp
│   │   ├── adxaudiostream.h
│   │   ├── atrac9audiostream.cpp
│   │   ├── atrac9audiostream.h
│   │   ├── audiobackend.h
│   │   ├── audiochannel.cpp
│   │   ├── audiochannel.h
│   │   ├── audiocommon.h
│   │   ├── audiostream.cpp
│   │   ├── audiostream.h
│   │   ├── audiosystem.cpp
│   │   ├── audiosystem.h
│   │   ├── buffering.h
│   │   ├── ffmpegaudioplayer.h
│   │   ├── hcaaudiostream.cpp
│   │   ├── hcaaudiostream.h
│   │   ├── openal/
│   │   │   ├── audiobackend.cpp
│   │   │   ├── audiobackend.h
│   │   │   ├── audiocommon.h
│   │   │   ├── ffmpegaudioplayer.cpp
│   │   │   ├── ffmpegaudioplayer.h
│   │   │   ├── openalaudiochannel.cpp
│   │   │   └── openalaudiochannel.h
│   │   ├── vorbisaudiostream.cpp
│   │   └── vorbisaudiostream.h
│   ├── background2d.cpp
│   ├── background2d.h
│   ├── character2d.cpp
│   ├── character2d.h
│   ├── characterviewer.cpp
│   ├── characterviewer.h
│   ├── config.h.in
│   ├── data/
│   │   ├── achievementsystem.cpp
│   │   ├── achievementsystem.h
│   │   ├── achievementsystemps3.cpp
│   │   ├── achievementsystemps3.h
│   │   ├── savesystem.cpp
│   │   ├── savesystem.h
│   │   ├── tipssystem.cpp
│   │   └── tipssystem.h
│   ├── debugmenu.cpp
│   ├── debugmenu.h
│   ├── effects/
│   │   ├── blur.cpp
│   │   ├── blur.h
│   │   ├── chlcc/
│   │   │   ├── bubbleseffect.cpp
│   │   │   ├── bubbleseffect.h
│   │   │   ├── butterflyeffect.cpp
│   │   │   ├── butterflyeffect.h
│   │   │   ├── eyecatch.cpp
│   │   │   └── eyecatch.h
│   │   ├── mosaic.cpp
│   │   ├── mosaic.h
│   │   ├── wave.cpp
│   │   └── wave.h
│   ├── font.h
│   ├── game.cpp
│   ├── game.h
│   ├── games/
│   │   ├── cc/
│   │   │   ├── backlogmenu.cpp
│   │   │   ├── backlogmenu.h
│   │   │   ├── sysmesbox.cpp
│   │   │   ├── sysmesbox.h
│   │   │   ├── titlemenu.cpp
│   │   │   └── titlemenu.h
│   │   ├── cclcc/
│   │   │   ├── albummenu.cpp
│   │   │   ├── albummenu.h
│   │   │   ├── clearlistmenu.cpp
│   │   │   ├── clearlistmenu.h
│   │   │   ├── delusiontrigger.cpp
│   │   │   ├── delusiontrigger.h
│   │   │   ├── helpmenu.cpp
│   │   │   ├── helpmenu.h
│   │   │   ├── librarymenu.cpp
│   │   │   ├── librarymenu.h
│   │   │   ├── librarysubmenus.cpp
│   │   │   ├── librarysubmenus.h
│   │   │   ├── mapsystem.cpp
│   │   │   ├── mapsystem.h
│   │   │   ├── moviemenu.cpp
│   │   │   ├── moviemenu.h
│   │   │   ├── musicmenu.cpp
│   │   │   ├── musicmenu.h
│   │   │   ├── optionsmenu.cpp
│   │   │   ├── optionsmenu.h
│   │   │   ├── savemenu.cpp
│   │   │   ├── savemenu.h
│   │   │   ├── savesystem.cpp
│   │   │   ├── savesystem.h
│   │   │   ├── systemmenu.cpp
│   │   │   ├── systemmenu.h
│   │   │   ├── tipsmenu.cpp
│   │   │   ├── tipsmenu.h
│   │   │   ├── tipssystem.cpp
│   │   │   ├── tipssystem.h
│   │   │   ├── titlemenu.cpp
│   │   │   ├── titlemenu.h
│   │   │   ├── yesnotrigger.cpp
│   │   │   └── yesnotrigger.h
│   │   ├── chlcc/
│   │   │   ├── albummenu.cpp
│   │   │   ├── albummenu.h
│   │   │   ├── animations/
│   │   │   │   ├── menutransition.cpp
│   │   │   │   ├── menutransition.h
│   │   │   │   ├── saveicon.cpp
│   │   │   │   ├── saveicon.h
│   │   │   │   ├── selectprompt.cpp
│   │   │   │   └── selectprompt.h
│   │   │   ├── backlogmenu.cpp
│   │   │   ├── backlogmenu.h
│   │   │   ├── clearlistmenu.cpp
│   │   │   ├── clearlistmenu.h
│   │   │   ├── commonmenu.cpp
│   │   │   ├── commonmenu.h
│   │   │   ├── delusiontrigger.cpp
│   │   │   ├── delusiontrigger.h
│   │   │   ├── introsequence.cpp
│   │   │   ├── introsequence.h
│   │   │   ├── moviemenu.cpp
│   │   │   ├── moviemenu.h
│   │   │   ├── musicmenu.cpp
│   │   │   ├── musicmenu.h
│   │   │   ├── optionsmenu.cpp
│   │   │   ├── optionsmenu.h
│   │   │   ├── savemenu.cpp
│   │   │   ├── savemenu.h
│   │   │   ├── savesystem.cpp
│   │   │   ├── savesystem.h
│   │   │   ├── sysmesbox.cpp
│   │   │   ├── sysmesbox.h
│   │   │   ├── systemmenu.cpp
│   │   │   ├── systemmenu.h
│   │   │   ├── tipsmenu.cpp
│   │   │   ├── tipsmenu.h
│   │   │   ├── tipssystem.cpp
│   │   │   ├── tipssystem.h
│   │   │   ├── titlemenu.cpp
│   │   │   ├── titlemenu.h
│   │   │   ├── trophymenu.cpp
│   │   │   └── trophymenu.h
│   │   ├── darling/
│   │   │   ├── sysmesbox.cpp
│   │   │   └── sysmesbox.h
│   │   ├── dash/
│   │   │   ├── titlemenu.cpp
│   │   │   └── titlemenu.h
│   │   ├── mo6tw/
│   │   │   ├── actorsvoicemenu.cpp
│   │   │   ├── actorsvoicemenu.h
│   │   │   ├── albummenu.cpp
│   │   │   ├── albummenu.h
│   │   │   ├── backlogmenu.cpp
│   │   │   ├── backlogmenu.h
│   │   │   ├── clearlistmenu.cpp
│   │   │   ├── clearlistmenu.h
│   │   │   ├── moviemenu.cpp
│   │   │   ├── moviemenu.h
│   │   │   ├── musicmenu.cpp
│   │   │   ├── musicmenu.h
│   │   │   ├── optionsmenu.cpp
│   │   │   ├── optionsmenu.h
│   │   │   ├── savemenu.cpp
│   │   │   ├── savemenu.h
│   │   │   ├── savesystem.cpp
│   │   │   ├── savesystem.h
│   │   │   ├── sysmesbox.cpp
│   │   │   ├── sysmesbox.h
│   │   │   ├── systemmenu.cpp
│   │   │   ├── systemmenu.h
│   │   │   ├── tipsmenu.cpp
│   │   │   ├── tipsmenu.h
│   │   │   ├── tipssystem.cpp
│   │   │   ├── tipssystem.h
│   │   │   ├── titlemenu.cpp
│   │   │   └── titlemenu.h
│   │   ├── mo8/
│   │   │   ├── optionsmenu.cpp
│   │   │   ├── optionsmenu.h
│   │   │   ├── savemenu.cpp
│   │   │   ├── savemenu.h
│   │   │   ├── systemmenu.cpp
│   │   │   ├── systemmenu.h
│   │   │   ├── titlemenu.cpp
│   │   │   └── titlemenu.h
│   │   └── rne/
│   │       ├── sysmesbox.cpp
│   │       ├── sysmesbox.h
│   │       ├── systemmenu.cpp
│   │       ├── systemmenu.h
│   │       ├── tilebackground.cpp
│   │       ├── tilebackground.h
│   │       ├── titlemenu.cpp
│   │       └── titlemenu.h
│   ├── hud/
│   │   ├── autoicondisplay.cpp
│   │   ├── autoicondisplay.h
│   │   ├── cc/
│   │   │   ├── dialoguebox.cpp
│   │   │   ├── dialoguebox.h
│   │   │   ├── nametagdisplay.cpp
│   │   │   └── nametagdisplay.h
│   │   ├── cclcc/
│   │   │   ├── tipsnotification.cpp
│   │   │   └── tipsnotification.h
│   │   ├── chlcc/
│   │   │   ├── dialoguebox.cpp
│   │   │   ├── dialoguebox.h
│   │   │   ├── nametagdisplay.cpp
│   │   │   ├── nametagdisplay.h
│   │   │   ├── tipsnotification.cpp
│   │   │   └── tipsnotification.h
│   │   ├── datedisplay.cpp
│   │   ├── datedisplay.h
│   │   ├── defaultsaveiconanimation.cpp
│   │   ├── defaultsaveiconanimation.h
│   │   ├── dialoguebox.cpp
│   │   ├── dialoguebox.h
│   │   ├── loadingdisplay.cpp
│   │   ├── loadingdisplay.h
│   │   ├── mo6tw/
│   │   │   ├── dialoguebox.cpp
│   │   │   ├── dialoguebox.h
│   │   │   ├── tipsnotification.cpp
│   │   │   └── tipsnotification.h
│   │   ├── nametagdisplay.cpp
│   │   ├── nametagdisplay.h
│   │   ├── rne/
│   │   │   ├── datedisplay.cpp
│   │   │   └── datedisplay.h
│   │   ├── saveicondisplay.cpp
│   │   ├── saveicondisplay.h
│   │   ├── skipicondisplay.cpp
│   │   ├── skipicondisplay.h
│   │   ├── tipsnotification.cpp
│   │   ├── tipsnotification.h
│   │   ├── waiticondisplay.cpp
│   │   └── waiticondisplay.h
│   ├── impacto.h
│   ├── inputsystem.cpp
│   ├── inputsystem.h
│   ├── io/
│   │   ├── afsarchive.cpp
│   │   ├── afsarchive.h
│   │   ├── assetpath.cpp
│   │   ├── assetpath.h
│   │   ├── buffering.h
│   │   ├── cpkarchive.cpp
│   │   ├── cpkarchive.h
│   │   ├── filemeta.cpp
│   │   ├── filemeta.h
│   │   ├── io.h
│   │   ├── lnk4archive.cpp
│   │   ├── lnk4archive.h
│   │   ├── lzxstream.cpp
│   │   ├── lzxstream.h
│   │   ├── memorymappedfilestream.cpp
│   │   ├── memorymappedfilestream.h
│   │   ├── memorystream.cpp
│   │   ├── memorystream.h
│   │   ├── mpkarchive.cpp
│   │   ├── mpkarchive.h
│   │   ├── physicalfilestream.cpp
│   │   ├── physicalfilestream.h
│   │   ├── stream.h
│   │   ├── textarchive.cpp
│   │   ├── textarchive.h
│   │   ├── uncompressedstream.cpp
│   │   ├── uncompressedstream.h
│   │   ├── vfs.cpp
│   │   ├── vfs.h
│   │   ├── vfsarchive.cpp
│   │   ├── vfsarchive.h
│   │   ├── zlibstream.cpp
│   │   └── zlibstream.h
│   ├── loadable.h
│   ├── log.cpp
│   ├── log.h
│   ├── main.cpp
│   ├── manifest_windows.manifest
│   ├── mask2d.cpp
│   ├── mask2d.h
│   ├── mem.cpp
│   ├── mem.h
│   ├── modelviewer.cpp
│   ├── modelviewer.h
│   ├── pch.h
│   ├── profile/
│   │   ├── animations.cpp
│   │   ├── animations.h
│   │   ├── charset.cpp
│   │   ├── charset.h
│   │   ├── configsystem.cpp
│   │   ├── configsystem.h
│   │   ├── data/
│   │   │   ├── achievementsystem.cpp
│   │   │   ├── achievementsystem.h
│   │   │   ├── bgeff.cpp
│   │   │   ├── bgeff.h
│   │   │   ├── savesystem.cpp
│   │   │   ├── savesystem.h
│   │   │   ├── tipssystem.cpp
│   │   │   ├── tipssystem.h
│   │   │   ├── waveeffects.cpp
│   │   │   └── waveeffects.h
│   │   ├── dialogue.cpp
│   │   ├── dialogue.h
│   │   ├── fonts.cpp
│   │   ├── fonts.h
│   │   ├── game.cpp
│   │   ├── game.h
│   │   ├── games/
│   │   │   ├── cc/
│   │   │   │   ├── backlogmenu.cpp
│   │   │   │   ├── backlogmenu.h
│   │   │   │   ├── dialoguebox.cpp
│   │   │   │   ├── dialoguebox.h
│   │   │   │   ├── sysmesbox.cpp
│   │   │   │   ├── sysmesbox.h
│   │   │   │   ├── titlemenu.cpp
│   │   │   │   └── titlemenu.h
│   │   │   ├── cclcc/
│   │   │   │   ├── clearlistmenu.cpp
│   │   │   │   ├── clearlistmenu.h
│   │   │   │   ├── delusiontrigger.cpp
│   │   │   │   ├── delusiontrigger.h
│   │   │   │   ├── helpmenu.cpp
│   │   │   │   ├── helpmenu.h
│   │   │   │   ├── librarymenu.cpp
│   │   │   │   ├── librarymenu.h
│   │   │   │   ├── mapsystem.cpp
│   │   │   │   ├── mapsystem.h
│   │   │   │   ├── optionsmenu.cpp
│   │   │   │   ├── optionsmenu.h
│   │   │   │   ├── savemenu.cpp
│   │   │   │   ├── savemenu.h
│   │   │   │   ├── systemmenu.cpp
│   │   │   │   ├── systemmenu.h
│   │   │   │   ├── tipsmenu.cpp
│   │   │   │   ├── tipsmenu.h
│   │   │   │   ├── tipsnotification.cpp
│   │   │   │   ├── tipsnotification.h
│   │   │   │   ├── titlemenu.cpp
│   │   │   │   ├── titlemenu.h
│   │   │   │   ├── yesnotrigger.cpp
│   │   │   │   └── yesnotrigger.h
│   │   │   ├── chlcc/
│   │   │   │   ├── albummenu.cpp
│   │   │   │   ├── albummenu.h
│   │   │   │   ├── backlogmenu.cpp
│   │   │   │   ├── backlogmenu.h
│   │   │   │   ├── clearlistmenu.cpp
│   │   │   │   ├── clearlistmenu.h
│   │   │   │   ├── commonmenu.cpp
│   │   │   │   ├── commonmenu.h
│   │   │   │   ├── delusiontrigger.cpp
│   │   │   │   ├── delusiontrigger.h
│   │   │   │   ├── dialoguebox.cpp
│   │   │   │   ├── dialoguebox.h
│   │   │   │   ├── moviemenu.cpp
│   │   │   │   ├── moviemenu.h
│   │   │   │   ├── musicmenu.cpp
│   │   │   │   ├── musicmenu.h
│   │   │   │   ├── optionsmenu.cpp
│   │   │   │   ├── optionsmenu.h
│   │   │   │   ├── savemenu.cpp
│   │   │   │   ├── savemenu.h
│   │   │   │   ├── sysmesbox.cpp
│   │   │   │   ├── sysmesbox.h
│   │   │   │   ├── systemmenu.cpp
│   │   │   │   ├── systemmenu.h
│   │   │   │   ├── tipsmenu.cpp
│   │   │   │   ├── tipsmenu.h
│   │   │   │   ├── tipsnotification.cpp
│   │   │   │   ├── tipsnotification.h
│   │   │   │   ├── titlemenu.cpp
│   │   │   │   ├── titlemenu.h
│   │   │   │   ├── trophymenu.cpp
│   │   │   │   └── trophymenu.h
│   │   │   ├── darling/
│   │   │   │   ├── sysmesbox.cpp
│   │   │   │   └── sysmesbox.h
│   │   │   ├── dash/
│   │   │   │   ├── titlemenu.cpp
│   │   │   │   └── titlemenu.h
│   │   │   ├── mo6tw/
│   │   │   │   ├── actorsvoicemenu.cpp
│   │   │   │   ├── actorsvoicemenu.h
│   │   │   │   ├── albummenu.cpp
│   │   │   │   ├── albummenu.h
│   │   │   │   ├── backlogmenu.cpp
│   │   │   │   ├── backlogmenu.h
│   │   │   │   ├── clearlistmenu.cpp
│   │   │   │   ├── clearlistmenu.h
│   │   │   │   ├── dialoguebox.cpp
│   │   │   │   ├── dialoguebox.h
│   │   │   │   ├── moviemenu.cpp
│   │   │   │   ├── moviemenu.h
│   │   │   │   ├── musicmenu.cpp
│   │   │   │   ├── musicmenu.h
│   │   │   │   ├── optionsmenu.cpp
│   │   │   │   ├── optionsmenu.h
│   │   │   │   ├── savemenu.cpp
│   │   │   │   ├── savemenu.h
│   │   │   │   ├── sysmesbox.cpp
│   │   │   │   ├── sysmesbox.h
│   │   │   │   ├── systemmenu.cpp
│   │   │   │   ├── systemmenu.h
│   │   │   │   ├── tipsmenu.cpp
│   │   │   │   ├── tipsmenu.h
│   │   │   │   ├── tipsnotification.cpp
│   │   │   │   ├── tipsnotification.h
│   │   │   │   ├── titlemenu.cpp
│   │   │   │   └── titlemenu.h
│   │   │   ├── mo8/
│   │   │   │   ├── optionsmenu.cpp
│   │   │   │   ├── optionsmenu.h
│   │   │   │   ├── savemenu.cpp
│   │   │   │   ├── savemenu.h
│   │   │   │   ├── systemmenu.cpp
│   │   │   │   ├── systemmenu.h
│   │   │   │   ├── titlemenu.cpp
│   │   │   │   └── titlemenu.h
│   │   │   └── rne/
│   │   │       ├── sysmesbox.cpp
│   │   │       ├── sysmesbox.h
│   │   │       ├── systemmenu.cpp
│   │   │       ├── systemmenu.h
│   │   │       ├── tilebackground.cpp
│   │   │       ├── tilebackground.h
│   │   │       ├── titlemenu.cpp
│   │   │       └── titlemenu.h
│   │   ├── hud/
│   │   │   ├── datedisplay.cpp
│   │   │   ├── datedisplay.h
│   │   │   ├── loadingdisplay.cpp
│   │   │   ├── loadingdisplay.h
│   │   │   ├── saveicon.cpp
│   │   │   ├── saveicon.h
│   │   │   ├── tipsnotification.cpp
│   │   │   └── tipsnotification.h
│   │   ├── profile.cpp
│   │   ├── profile.h
│   │   ├── profile_internal.cpp
│   │   ├── profile_internal.h
│   │   ├── scene3d.cpp
│   │   ├── scene3d.h
│   │   ├── scriptinput.cpp
│   │   ├── scriptinput.h
│   │   ├── scriptvars.cpp
│   │   ├── scriptvars.h
│   │   ├── sprites.cpp
│   │   ├── sprites.h
│   │   ├── subtitle.cpp
│   │   ├── subtitle.h
│   │   ├── ui/
│   │   │   ├── backlogmenu.cpp
│   │   │   ├── backlogmenu.h
│   │   │   ├── commonmenu.cpp
│   │   │   ├── commonmenu.h
│   │   │   ├── extramenus.cpp
│   │   │   ├── extramenus.h
│   │   │   ├── gamespecific.cpp
│   │   │   ├── gamespecific.h
│   │   │   ├── helpmenu.cpp
│   │   │   ├── helpmenu.h
│   │   │   ├── mapsystem.cpp
│   │   │   ├── mapsystem.h
│   │   │   ├── optionsmenu.cpp
│   │   │   ├── optionsmenu.h
│   │   │   ├── savemenu.cpp
│   │   │   ├── savemenu.h
│   │   │   ├── selectionmenu.cpp
│   │   │   ├── selectionmenu.h
│   │   │   ├── sysmesbox.cpp
│   │   │   ├── sysmesbox.h
│   │   │   ├── systemmenu.cpp
│   │   │   ├── systemmenu.h
│   │   │   ├── tipsmenu.cpp
│   │   │   ├── tipsmenu.h
│   │   │   ├── titlemenu.cpp
│   │   │   ├── titlemenu.h
│   │   │   ├── trophymenu.cpp
│   │   │   └── trophymenu.h
│   │   ├── vfs.cpp
│   │   ├── vfs.h
│   │   ├── vm.cpp
│   │   └── vm.h
│   ├── renderer/
│   │   ├── 3d/
│   │   │   ├── animation.cpp
│   │   │   ├── animation.h
│   │   │   ├── camera.cpp
│   │   │   ├── camera.h
│   │   │   ├── model.cpp
│   │   │   ├── model.h
│   │   │   ├── modelanimator.cpp
│   │   │   ├── modelanimator.h
│   │   │   ├── renderable3d.h
│   │   │   ├── scene.h
│   │   │   ├── transform.cpp
│   │   │   └── transform.h
│   │   ├── dx9/
│   │   │   ├── 3d/
│   │   │   │   ├── renderable3d.cpp
│   │   │   │   ├── renderable3d.h
│   │   │   │   ├── scene.cpp
│   │   │   │   └── scene.h
│   │   │   ├── nv12frame.cpp
│   │   │   ├── nv12frame.h
│   │   │   ├── renderer.cpp
│   │   │   ├── renderer.h
│   │   │   ├── shader.cpp
│   │   │   ├── shader.h
│   │   │   ├── utils.h
│   │   │   ├── window.cpp
│   │   │   ├── window.h
│   │   │   ├── yuvframe.cpp
│   │   │   └── yuvframe.h
│   │   ├── nv12frame.h
│   │   ├── opengl/
│   │   │   ├── 3d/
│   │   │   │   ├── renderable3d.cpp
│   │   │   │   ├── renderable3d.h
│   │   │   │   ├── scene.cpp
│   │   │   │   └── scene.h
│   │   │   ├── glc.cpp
│   │   │   ├── glc.h
│   │   │   ├── nv12frame.cpp
│   │   │   ├── nv12frame.h
│   │   │   ├── renderer.cpp
│   │   │   ├── renderer.h
│   │   │   ├── shader.cpp
│   │   │   ├── shader.h
│   │   │   ├── window.cpp
│   │   │   ├── window.h
│   │   │   ├── yuvframe.cpp
│   │   │   └── yuvframe.h
│   │   ├── renderer.cpp
│   │   ├── renderer.h
│   │   ├── vulkan/
│   │   │   ├── 3d/
│   │   │   │   ├── renderable3d.cpp
│   │   │   │   ├── renderable3d.h
│   │   │   │   ├── scene.cpp
│   │   │   │   └── scene.h
│   │   │   ├── nv12frame.cpp
│   │   │   ├── nv12frame.h
│   │   │   ├── pipeline.cpp
│   │   │   ├── pipeline.h
│   │   │   ├── renderer.cpp
│   │   │   ├── renderer.h
│   │   │   ├── utils.cpp
│   │   │   ├── utils.h
│   │   │   ├── window.cpp
│   │   │   ├── window.h
│   │   │   ├── yuvframe.cpp
│   │   │   └── yuvframe.h
│   │   ├── window.cpp
│   │   ├── window.h
│   │   └── yuvframe.h
│   ├── rng.h
│   ├── scriptvars.h
│   ├── sequencedanimation.cpp
│   ├── sequencedanimation.h
│   ├── shaders/
│   │   ├── dx9/
│   │   │   ├── CCMessageBoxSprite_frag.hlsl
│   │   │   ├── CCMessageBoxSprite_vert.hlsl
│   │   │   ├── CHLCCMenuBackground_frag.hlsl
│   │   │   ├── CHLCCMenuBackground_vert.hlsl
│   │   │   ├── MaskedSpriteNoAlpha_frag.hlsl
│   │   │   ├── MaskedSpriteNoAlpha_vert.hlsl
│   │   │   ├── MaskedSprite_frag.hlsl
│   │   │   ├── MaskedSprite_vert.hlsl
│   │   │   ├── NV12Frame_frag.hlsl
│   │   │   ├── NV12Frame_vert.hlsl
│   │   │   ├── Renderable3D_Background_frag.hlsl
│   │   │   ├── Renderable3D_Background_vert.hlsl
│   │   │   ├── Renderable3D_Character_frag.hlsl
│   │   │   ├── Renderable3D_Character_vert.hlsl
│   │   │   ├── Renderable3D_Eye_frag.hlsl
│   │   │   ├── Renderable3D_Eye_vert.hlsl
│   │   │   ├── Renderable3D_Outline_frag.hlsl
│   │   │   ├── Renderable3D_Outline_vert.hlsl
│   │   │   ├── Sprite_frag.hlsl
│   │   │   ├── Sprite_inverted_frag.hlsl
│   │   │   ├── Sprite_inverted_vert.hlsl
│   │   │   ├── Sprite_vert.hlsl
│   │   │   ├── YUVFrame_frag.hlsl
│   │   │   └── YUVFrame_vert.hlsl
│   │   ├── opengl/
│   │   │   ├── AdditiveMaskedSprite_frag.glsl
│   │   │   ├── AdditiveMaskedSprite_vert.glsl
│   │   │   ├── CCMessageBoxSprite_frag.glsl
│   │   │   ├── CCMessageBoxSprite_vert.glsl
│   │   │   ├── CHLCCMenuBackground_frag.glsl
│   │   │   ├── CHLCCMenuBackground_vert.glsl
│   │   │   ├── ColorBurnMaskedSprite_frag.glsl
│   │   │   ├── ColorBurnMaskedSprite_vert.glsl
│   │   │   ├── ColorDodgeMaskedSprite_frag.glsl
│   │   │   ├── ColorDodgeMaskedSprite_vert.glsl
│   │   │   ├── ColorMaskedSprite_frag.glsl
│   │   │   ├── ColorMaskedSprite_vert.glsl
│   │   │   ├── GaussianBlur_frag.glsl
│   │   │   ├── GaussianBlur_vert.glsl
│   │   │   ├── HardLightMaskedSprite_frag.glsl
│   │   │   ├── HardLightMaskedSprite_vert.glsl
│   │   │   ├── LinearBurnMaskedSprite_frag.glsl
│   │   │   ├── LinearBurnMaskedSprite_vert.glsl
│   │   │   ├── MaskedSpriteBinary_frag.glsl
│   │   │   ├── MaskedSpriteBinary_vert.glsl
│   │   │   ├── MaskedSpriteNoAlpha_frag.glsl
│   │   │   ├── MaskedSpriteNoAlpha_vert.glsl
│   │   │   ├── MaskedSprite_frag.glsl
│   │   │   ├── MaskedSprite_vert.glsl
│   │   │   ├── Mosaic_frag.glsl
│   │   │   ├── Mosaic_vert.glsl
│   │   │   ├── NV12Frame_frag.glsl
│   │   │   ├── NV12Frame_vert.glsl
│   │   │   ├── OverlayMaskedSprite_frag.glsl
│   │   │   ├── OverlayMaskedSprite_vert.glsl
│   │   │   ├── Renderable3D_Background_frag.glsl
│   │   │   ├── Renderable3D_Background_vert.glsl
│   │   │   ├── Renderable3D_Character_frag.glsl
│   │   │   ├── Renderable3D_Character_vert.glsl
│   │   │   ├── Renderable3D_Eye_frag.glsl
│   │   │   ├── Renderable3D_Eye_vert.glsl
│   │   │   ├── Renderable3D_Outline_frag.glsl
│   │   │   ├── Renderable3D_Outline_vert.glsl
│   │   │   ├── SceneToRT_frag.glsl
│   │   │   ├── SceneToRT_vert.glsl
│   │   │   ├── ScreenMaskedSprite_frag.glsl
│   │   │   ├── ScreenMaskedSprite_vert.glsl
│   │   │   ├── SoftLightMaskedSprite_frag.glsl
│   │   │   ├── SoftLightMaskedSprite_vert.glsl
│   │   │   ├── SpriteInverted_frag.glsl
│   │   │   ├── SpriteInverted_vert.glsl
│   │   │   ├── Sprite_frag.glsl
│   │   │   ├── Sprite_vert.glsl
│   │   │   ├── SubtitleGlyph_frag.glsl
│   │   │   ├── SubtitleGlyph_vert.glsl
│   │   │   ├── YUVFrame_frag.glsl
│   │   │   └── YUVFrame_vert.glsl
│   │   └── vulkan/
│   │       ├── CCMessageBoxSprite_frag.glsl
│   │       ├── CCMessageBoxSprite_frag.spv
│   │       ├── CCMessageBoxSprite_vert.glsl
│   │       ├── CCMessageBoxSprite_vert.spv
│   │       ├── CHLCCMenuBackground_frag.glsl
│   │       ├── CHLCCMenuBackground_frag.spv
│   │       ├── CHLCCMenuBackground_vert.glsl
│   │       ├── CHLCCMenuBackground_vert.spv
│   │       ├── MaskedSpriteNoAlpha_frag.glsl
│   │       ├── MaskedSpriteNoAlpha_frag.spv
│   │       ├── MaskedSpriteNoAlpha_vert.glsl
│   │       ├── MaskedSpriteNoAlpha_vert.spv
│   │       ├── MaskedSprite_frag.glsl
│   │       ├── MaskedSprite_frag.spv
│   │       ├── MaskedSprite_vert.glsl
│   │       ├── MaskedSprite_vert.spv
│   │       ├── NV12Frame_frag.glsl
│   │       ├── NV12Frame_frag.spv
│   │       ├── NV12Frame_vert.glsl
│   │       ├── NV12Frame_vert.spv
│   │       ├── Renderable3D_Background_frag.glsl
│   │       ├── Renderable3D_Background_frag.spv
│   │       ├── Renderable3D_Background_vert.glsl
│   │       ├── Renderable3D_Background_vert.spv
│   │       ├── Renderable3D_Character_frag.glsl
│   │       ├── Renderable3D_Character_frag.spv
│   │       ├── Renderable3D_Character_vert.glsl
│   │       ├── Renderable3D_Character_vert.spv
│   │       ├── Renderable3D_Eye_frag.glsl
│   │       ├── Renderable3D_Eye_frag.spv
│   │       ├── Renderable3D_Eye_vert.glsl
│   │       ├── Renderable3D_Eye_vert.spv
│   │       ├── Renderable3D_Outline_frag.glsl
│   │       ├── Renderable3D_Outline_frag.spv
│   │       ├── Renderable3D_Outline_vert.glsl
│   │       ├── Renderable3D_Outline_vert.spv
│   │       ├── Sprite_frag.glsl
│   │       ├── Sprite_frag.spv
│   │       ├── Sprite_inverted_frag.glsl
│   │       ├── Sprite_inverted_frag.spv
│   │       ├── Sprite_inverted_vert.glsl
│   │       ├── Sprite_inverted_vert.spv
│   │       ├── Sprite_vert.glsl
│   │       ├── Sprite_vert.spv
│   │       ├── YUVFrame_frag.glsl
│   │       ├── YUVFrame_frag.spv
│   │       ├── YUVFrame_vert.glsl
│   │       └── YUVFrame_vert.spv
│   ├── spriteanimation.cpp
│   ├── spriteanimation.h
│   ├── spritesheet.h
│   ├── stbi_impl.c
│   ├── subtitle/
│   │   ├── ass/
│   │   │   ├── subtitlerenderer.cpp
│   │   │   └── subtitlerenderer.h
│   │   ├── ffmpegsubtitlehelper.cpp
│   │   ├── ffmpegsubtitlehelper.h
│   │   ├── subtitlerenderer.h
│   │   ├── subtitlesystem.cpp
│   │   └── subtitlesystem.h
│   ├── text/
│   │   ├── dialoguepage.cpp
│   │   ├── dialoguepage.h
│   │   ├── text.cpp
│   │   ├── text.h
│   │   ├── typewritereffect.cpp
│   │   └── typewritereffect.h
│   ├── texture/
│   │   ├── bcdecode.cpp
│   │   ├── bcdecode.h
│   │   ├── bntxloader.cpp
│   │   ├── bntxloader.h
│   │   ├── ddsloader.cpp
│   │   ├── ddsloader.h
│   │   ├── gxtloader.cpp
│   │   ├── gxtloader.h
│   │   ├── plainloader.cpp
│   │   ├── plainloader.h
│   │   ├── s3tc.cpp
│   │   ├── s3tc.h
│   │   ├── stbiloader.cpp
│   │   ├── texture.cpp
│   │   ├── texture.h
│   │   └── webpdecode.cpp
│   ├── ui/
│   │   ├── backlogmenu.cpp
│   │   ├── backlogmenu.h
│   │   ├── gamespecific.cpp
│   │   ├── gamespecific.h
│   │   ├── mapsystem.cpp
│   │   ├── mapsystem.h
│   │   ├── menu.cpp
│   │   ├── menu.h
│   │   ├── nullmenu.cpp
│   │   ├── nullmenu.h
│   │   ├── optionsmenu.cpp
│   │   ├── optionsmenu.h
│   │   ├── savemenu.h
│   │   ├── selectionmenu.cpp
│   │   ├── selectionmenu.h
│   │   ├── sysmesbox.cpp
│   │   ├── sysmesbox.h
│   │   ├── tipsmenu.cpp
│   │   ├── tipsmenu.h
│   │   ├── ui.h
│   │   ├── widget.cpp
│   │   ├── widget.h
│   │   └── widgets/
│   │       ├── backlogentry.cpp
│   │       ├── backlogentry.h
│   │       ├── button.cpp
│   │       ├── button.h
│   │       ├── carousel.cpp
│   │       ├── carousel.h
│   │       ├── cc/
│   │       │   ├── backlogentry.cpp
│   │       │   ├── backlogentry.h
│   │       │   ├── titlebutton.cpp
│   │       │   └── titlebutton.h
│   │       ├── cclcc/
│   │       │   ├── librarymenubutton.h
│   │       │   ├── optionsbinarybutton.cpp
│   │       │   ├── optionsbinarybutton.h
│   │       │   ├── optionsentry.cpp
│   │       │   ├── optionsentry.h
│   │       │   ├── optionsslider.cpp
│   │       │   ├── optionsslider.h
│   │       │   ├── optionsvoiceslider.cpp
│   │       │   ├── optionsvoiceslider.h
│   │       │   ├── saveentrybutton.cpp
│   │       │   ├── saveentrybutton.h
│   │       │   ├── sysmenubutton.cpp
│   │       │   ├── sysmenubutton.h
│   │       │   ├── tipsentrybutton.cpp
│   │       │   ├── tipsentrybutton.h
│   │       │   ├── tipstabgroup.cpp
│   │       │   ├── tipstabgroup.h
│   │       │   ├── titlebutton.cpp
│   │       │   └── titlebutton.h
│   │       ├── cgviewer.cpp
│   │       ├── cgviewer.h
│   │       ├── chlcc/
│   │       │   ├── albumthumbnailbutton.cpp
│   │       │   ├── albumthumbnailbutton.h
│   │       │   ├── backlogentry.cpp
│   │       │   ├── backlogentry.h
│   │       │   ├── moviemenuentrybutton.cpp
│   │       │   ├── moviemenuentrybutton.h
│   │       │   ├── optionsbutton.cpp
│   │       │   ├── optionsbutton.h
│   │       │   ├── optionsentry.cpp
│   │       │   ├── optionsentry.h
│   │       │   ├── optionsslider.cpp
│   │       │   ├── optionsslider.h
│   │       │   ├── saveentrybutton.cpp
│   │       │   ├── saveentrybutton.h
│   │       │   ├── systemmenuentrybutton.cpp
│   │       │   ├── systemmenuentrybutton.h
│   │       │   ├── systemmessagebutton.cpp
│   │       │   ├── systemmessagebutton.h
│   │       │   ├── tipsentrybutton.cpp
│   │       │   ├── tipsentrybutton.h
│   │       │   ├── titlebutton.cpp
│   │       │   ├── titlebutton.h
│   │       │   ├── trackselectbutton.cpp
│   │       │   ├── trackselectbutton.h
│   │       │   ├── trophymenuentry.cpp
│   │       │   └── trophymenuentry.h
│   │       ├── clickarea.cpp
│   │       ├── clickarea.h
│   │       ├── group.cpp
│   │       ├── group.h
│   │       ├── label.cpp
│   │       ├── label.h
│   │       ├── mo6tw/
│   │       │   ├── actorsvoicebutton.cpp
│   │       │   ├── actorsvoicebutton.h
│   │       │   ├── albumcharacterbutton.cpp
│   │       │   ├── albumcharacterbutton.h
│   │       │   ├── albumthumbnailbutton.cpp
│   │       │   ├── albumthumbnailbutton.h
│   │       │   ├── imagethumbnailbutton.cpp
│   │       │   ├── imagethumbnailbutton.h
│   │       │   ├── saveentrybutton.cpp
│   │       │   ├── saveentrybutton.h
│   │       │   ├── scenelistentry.cpp
│   │       │   ├── scenelistentry.h
│   │       │   ├── tipsentrybutton.cpp
│   │       │   ├── tipsentrybutton.h
│   │       │   ├── titlebutton.cpp
│   │       │   └── titlebutton.h
│   │       ├── optiongroup.cpp
│   │       ├── optiongroup.h
│   │       ├── rne/
│   │       │   ├── sysmenubutton.cpp
│   │       │   └── sysmenubutton.h
│   │       ├── scrollbar.cpp
│   │       ├── scrollbar.h
│   │       ├── toggle.cpp
│   │       └── toggle.h
│   ├── util.cpp
│   ├── util.h
│   ├── video/
│   │   ├── clock.cpp
│   │   ├── clock.h
│   │   ├── ffmpegplayer.cpp
│   │   ├── ffmpegplayer.h
│   │   ├── ffmpegstream.cpp
│   │   ├── ffmpegstream.h
│   │   ├── videoplayer.cpp
│   │   ├── videoplayer.h
│   │   ├── videosystem.cpp
│   │   └── videosystem.h
│   ├── vm/
│   │   ├── expression.cpp
│   │   ├── expression.h
│   │   ├── inst_controlflow.cpp
│   │   ├── inst_controlflow.h
│   │   ├── inst_dialogue.cpp
│   │   ├── inst_dialogue.h
│   │   ├── inst_gamespecific.cpp
│   │   ├── inst_gamespecific.h
│   │   ├── inst_graphics2d.cpp
│   │   ├── inst_graphics2d.h
│   │   ├── inst_graphics3d.cpp
│   │   ├── inst_graphics3d.h
│   │   ├── inst_macros.inc
│   │   ├── inst_misc.cpp
│   │   ├── inst_misc.h
│   │   ├── inst_movie.cpp
│   │   ├── inst_movie.h
│   │   ├── inst_sound.cpp
│   │   ├── inst_sound.h
│   │   ├── inst_system.cpp
│   │   ├── inst_system.h
│   │   ├── interface/
│   │   │   ├── input.cpp
│   │   │   ├── input.h
│   │   │   ├── scene3d.cpp
│   │   │   └── scene3d.h
│   │   ├── opcodetables_cc.h
│   │   ├── opcodetables_chlcc.h
│   │   ├── opcodetables_chn.h
│   │   ├── opcodetables_darling.h
│   │   ├── opcodetables_dash.h
│   │   ├── opcodetables_mo6tw.h
│   │   ├── opcodetables_mo7.h
│   │   ├── opcodetables_mo8.h
│   │   ├── opcodetables_rne.h
│   │   ├── opcodetables_sgps3.h
│   │   ├── sc3stream.h
│   │   ├── thread.cpp
│   │   ├── thread.h
│   │   ├── vm.cpp
│   │   └── vm.h
│   ├── voicetable.cpp
│   ├── voicetable.h
│   ├── workqueue.cpp
│   └── workqueue.h
├── triplets/
│   ├── arm64-android-ci.cmake
│   ├── arm64-osx-ci.cmake
│   ├── x64-linux-ci.cmake
│   └── x64-osx-ci.cmake
├── vcpkg-configuration.json
├── vcpkg.json
└── vendor/
    ├── .clang-format
    ├── clHCA/
    │   ├── clHCA.c
    │   └── clHCA.h
    ├── glad/
    │   └── src/
    │       └── glad.c
    ├── imgui_custom/
    │   └── backends/
    │       ├── imgui_impl_opengl3.cpp
    │       ├── imgui_impl_opengl3.h
    │       └── imgui_impl_opengl3_loader.h
    ├── minilua/
    │   ├── minilua.h
    │   └── minilua_impl.c
    ├── mio/
    │   └── mio.hpp
    ├── mspack/
    │   ├── lzx.h
    │   ├── lzxd.c
    │   ├── macros.h
    │   ├── mspack.h
    │   ├── readbits.h
    │   ├── readhuff.h
    │   ├── system.c
    │   └── system.h
    ├── patches/
    │   └── LibAtrac9/
    │       └── CMakeLists.txt
    ├── pcg/
    │   └── src/
    │       └── pcg_basic.c
    ├── squish/
    │   ├── ChangeLog
    │   ├── README
    │   ├── alpha.cpp
    │   ├── alpha.h
    │   ├── clusterfit.cpp
    │   ├── clusterfit.h
    │   ├── colourblock.cpp
    │   ├── colourblock.h
    │   ├── colourfit.cpp
    │   ├── colourfit.h
    │   ├── colourset.cpp
    │   ├── colourset.h
    │   ├── config.h
    │   ├── maths.cpp
    │   ├── maths.h
    │   ├── rangefit.cpp
    │   ├── rangefit.h
    │   ├── simd.h
    │   ├── simd_float.h
    │   ├── simd_sse.h
    │   ├── simd_ve.h
    │   ├── singlecolourfit.cpp
    │   ├── singlecolourfit.h
    │   ├── singlecolourlookup.inl
    │   ├── squish.cpp
    │   └── squish.h
    └── vma/
        └── vk_mem_alloc.h
Download .txt
Showing preview only (510K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5346 symbols across 766 files)

FILE: android/app/src/main/java/com/committeeofzero/impacto/ImpactoActivity.java
  class ImpactoActivity (line 16) | public class ImpactoActivity extends SDLActivity {
    method getLibraries (line 28) | @Override
    method onCreate (line 35) | @Override
    method copyAssetFolder (line 57) | public boolean copyAssetFolder(String srcName, String dstName) {
    method copyAssetFile (line 81) | public boolean copyAssetFile(String srcName, String dstName) {

FILE: android/app/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/app/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/app/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/app/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/app/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/app/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/app/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/app/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/app/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: src/animation.cpp
  type Impacto (line 3) | namespace Impacto {

FILE: src/animation.h
  function namespace (line 7) | namespace Impacto {
  function ResetImpl (line 103) | void ResetImpl(std::optional<AnimationDirection> direction) {}
  function virtual (line 104) | virtual void FinishImpl() {}
  function virtual (line 105) | virtual void ResetImpl() {}
  function virtual (line 106) | virtual void UpdateImpl(float dt) {

FILE: src/audio/adxaudiostream.cpp
  type Impacto (line 10) | namespace Impacto {
    type Audio (line 11) | namespace Audio {
      type AdxHeaderInfo (line 13) | struct AdxHeaderInfo {
      function get_high_nibble_signed (line 36) | static inline int get_high_nibble_signed(uint8_t n) {
      function get_low_nibble_signed (line 40) | static inline int get_low_nibble_signed(uint8_t n) {
      function clamp16 (line 44) | static inline int clamp16(int32_t val) {
      function ParseAdxHeader (line 96) | static bool ParseAdxHeader(Stream* stream, AdxHeaderInfo* info) {
      function AudioStream (line 178) | AudioStream* AdxAudioStream::Create(Stream* stream) {

FILE: src/audio/adxaudiostream.h
  function namespace (line 7) | namespace Impacto {

FILE: src/audio/atrac9audiostream.cpp
  type Impacto (line 6) | namespace Impacto {
    type Audio (line 7) | namespace Audio {
      type At9ContainerInfo (line 9) | struct At9ContainerInfo {
      function ParseAt9Riff (line 35) | static bool ParseAt9Riff(Stream* stream, At9ContainerInfo* info) {
      function AudioStream (line 135) | AudioStream* Atrac9AudioStream::Create(Stream* stream) {

FILE: src/audio/atrac9audiostream.h
  function namespace (line 8) | namespace Impacto {

FILE: src/audio/audiobackend.h
  function namespace (line 5) | namespace Impacto {

FILE: src/audio/audiochannel.cpp
  type Impacto (line 13) | namespace Impacto {
    type Audio (line 14) | namespace Audio {

FILE: src/audio/audiochannel.h
  function namespace (line 8) | namespace Impacto {

FILE: src/audio/audiocommon.h
  function namespace (line 4) | namespace Impacto {

FILE: src/audio/audiostream.cpp
  type Impacto (line 4) | namespace Impacto {
    type Audio (line 5) | namespace Audio {
      function AudioStream (line 12) | AudioStream* AudioStream::Create(Io::Stream* stream) {

FILE: src/audio/audiostream.h
  function namespace (line 9) | namespace Impacto {

FILE: src/audio/audiosystem.cpp
  type Impacto (line 14) | namespace Impacto {
    type Audio (line 15) | namespace Audio {
      function AudioChannel (line 22) | static AudioChannel* GetNextChannelInGroupImpl(GroupDef& groupDef) {
      function AudioChannel (line 38) | AudioChannel* GetNextChannelInGroup(AudioChannelGroup group) {
      function StopChannelGroupImpl (line 55) | static void StopChannelGroupImpl(float fadeOut) {
      function StopChannelGroup (line 63) | void StopChannelGroup(AudioChannelGroup group, float fadeOut) {
      function PauseChannelGroupImpl (line 87) | static void PauseChannelGroupImpl() {
      function PauseChannelGroup (line 95) | void PauseChannelGroup(AudioChannelGroup group) {
      function ResumeChannelGroupImpl (line 119) | static void ResumeChannelGroupImpl() {
      function ResumeChannelGroup (line 127) | void ResumeChannelGroup(AudioChannelGroup group) {
      function AudioShutdown (line 150) | void AudioShutdown() {
      function AudioInit (line 158) | void AudioInit() {
      function AudioSubtitlesStart (line 193) | void AudioSubtitlesStart(AudioChannel* channel) {
      function PlayInGroup (line 220) | void PlayInGroup(AudioChannelGroup group, std::string const& mountpo...
      function PlayInGroup (line 228) | void PlayInGroup(AudioChannelGroup group, std::string const& mountpo...
      function AudioUpdate (line 236) | void AudioUpdate(float dt) {
      function AudioSubtitlesUpdate (line 253) | void AudioSubtitlesUpdate() {
      function AudioSubtitlesRender (line 276) | void AudioSubtitlesRender() {

FILE: src/audio/audiosystem.h
  function namespace (line 11) | namespace Impacto {

FILE: src/audio/buffering.h
  function namespace (line 6) | namespace Impacto {

FILE: src/audio/ffmpegaudioplayer.h
  function namespace (line 6) | namespace Impacto {

FILE: src/audio/hcaaudiostream.cpp
  type Impacto (line 8) | namespace Impacto {
    type Audio (line 9) | namespace Audio {
      function AudioStream (line 11) | AudioStream* HcaAudioStream::Create(Stream* stream) {

FILE: src/audio/hcaaudiostream.h
  function namespace (line 9) | namespace Impacto {

FILE: src/audio/openal/audiobackend.cpp
  type Impacto (line 5) | namespace Impacto {
    type Audio (line 6) | namespace Audio {
      type OpenAL (line 7) | namespace OpenAL {

FILE: src/audio/openal/audiobackend.h
  function namespace (line 6) | namespace Impacto {

FILE: src/audio/openal/ffmpegaudioplayer.cpp
  type Impacto (line 17) | namespace Impacto {
    type Audio (line 18) | namespace Audio {
      type OpenAL (line 19) | namespace OpenAL {

FILE: src/audio/openal/ffmpegaudioplayer.h
  function namespace (line 7) | namespace Impacto {

FILE: src/audio/openal/openalaudiochannel.cpp
  type Impacto (line 5) | namespace Impacto {
    type Audio (line 6) | namespace Audio {
      type OpenAL (line 7) | namespace OpenAL {
        function ALenum (line 9) | static ALenum ToALFormat(int channels, int bitdepth) {

FILE: src/audio/openal/openalaudiochannel.h
  function namespace (line 6) | namespace Impacto {

FILE: src/audio/vorbisaudiostream.cpp
  type Impacto (line 7) | namespace Impacto {
    type Audio (line 8) | namespace Audio {
      function OvRwRead (line 10) | static size_t OvRwRead(void* ptr, size_t size, size_t nmemb, void* d...
      function OvRwSeek (line 13) | static int OvRwSeek(void* datasource, ogg_int64_t offset, int whence) {
      function OvRwTell (line 16) | static long OvRwTell(void* datasource) {
      function AudioStream (line 21) | AudioStream* VorbisAudioStream::Create(Stream* stream) {

FILE: src/audio/vorbisaudiostream.h
  function namespace (line 7) | namespace Impacto {

FILE: src/background2d.cpp
  type Impacto (line 18) | namespace Impacto {
    type ExplodeTri (line 847) | struct ExplodeTri {
    function ResetExplodeTris (line 864) | void ResetExplodeTris(const Sprite& renderSprite) {
    function UpdateExplode (line 968) | static void UpdateExplode(float fadeCount) {
    function IsBgWaveEffectActive (line 1028) | bool IsBgWaveEffectActive() {

FILE: src/background2d.h
  function namespace (line 11) | namespace Impacto {
  function class (line 178) | class BackgroundEffect2D : public Background2D {

FILE: src/character2d.cpp
  type Impacto (line 16) | namespace Impacto {
    function GetSoundLevel (line 259) | static uint8_t GetSoundLevel(Audio::AudioChannelId channelId) {

FILE: src/character2d.h
  function namespace (line 14) | namespace Impacto {
  function class (line 107) | class CharacterPortrait2D : public Character2D {

FILE: src/characterviewer.cpp
  type Impacto (line 16) | namespace Impacto {
    type CharacterViewer (line 17) | namespace CharacterViewer {
      function Init (line 44) | void Init() {
      function Update (line 63) | void Update(float dt) {
      function EnumerateBackgrounds (line 239) | static void EnumerateBackgrounds() {
      function EnumerateCharacters (line 257) | static void EnumerateCharacters() {
      function EnumerateBgm (line 277) | static void EnumerateBgm() {

FILE: src/characterviewer.h
  function namespace (line 7) | namespace Impacto {

FILE: src/data/achievementsystem.cpp
  type Impacto (line 7) | namespace Impacto {
    type AchievementSystem (line 8) | namespace AchievementSystem {
      function Init (line 13) | void Init() { Impacto::Profile::AchievementSystem::Configure(); }
      class AchievementFileLoader (line 15) | class AchievementFileLoader
        method UnloadSync (line 20) | void UnloadSync() {}
        method AchievementError (line 21) | AchievementError LoadSync() {
        method MainThreadOnLoad (line 29) | void MainThreadOnLoad(AchievementError result) {
      function LoadStatus (line 47) | LoadStatus GetLoadStatus() { return Loader.Status; }
      function MountAchievementFile (line 49) | void MountAchievementFile() {
      function Achievement (line 56) | const Achievement* GetAchievement(int id) {
      function GetAchievementCount (line 61) | size_t GetAchievementCount() {

FILE: src/data/achievementsystem.h
  function namespace (line 7) | namespace Impacto {

FILE: src/data/achievementsystemps3.cpp
  type Impacto (line 17) | namespace Impacto {
    type AchievementSystem (line 18) | namespace AchievementSystem {
      function AchievementError (line 24) | AchievementError AchievementSystemPS3::MountAchievementFile(
      function Achievement (line 167) | const Achievement* AchievementSystemPS3::GetAchievement(int id) {

FILE: src/data/achievementsystemps3.h
  function namespace (line 13) | namespace Impacto {

FILE: src/data/savesystem.cpp
  type Impacto (line 11) | namespace Impacto {
    type SaveSystem (line 12) | namespace SaveSystem {
      function Init (line 17) | void Init() { Impacto::Profile::SaveSystem::Configure(); }
      class SaveFileLoader (line 19) | class SaveFileLoader : public Loadable<SaveFileLoader, SaveError> {
        method UnloadSync (line 23) | void UnloadSync() {}
        method SaveError (line 24) | SaveError LoadSync() {
        method MainThreadOnLoad (line 29) | void MainThreadOnLoad(SaveError result) {
      class SaveFileChecker (line 50) | class SaveFileChecker : public Loadable<SaveFileChecker, SaveError> {
        method UnloadSync (line 54) | void UnloadSync() {}
        method SaveError (line 55) | SaveError LoadSync() {
        method MainThreadOnLoad (line 59) | void MainThreadOnLoad(SaveError result) {
      class SaveFileWriter (line 70) | class SaveFileWriter : public Loadable<SaveFileWriter, SaveError> {
        method UnloadSync (line 74) | void UnloadSync() {}
        method SaveError (line 75) | SaveError LoadSync() {
        method MainThreadOnLoad (line 79) | void MainThreadOnLoad(SaveError result) {
      function ExecuteLoader (line 93) | void ExecuteLoader() {
      function LoadStatus (line 101) | LoadStatus GetLoadStatus() {
      function MountSaveFile (line 106) | void MountSaveFile() { ExecuteLoader<SaveFileLoader>(); }
      function CheckSaveFile (line 107) | void CheckSaveFile() { ExecuteLoader<SaveFileChecker>(); }
      function WriteSaveFile (line 108) | void WriteSaveFile() { ExecuteLoader<SaveFileWriter>(); }
      function InitializeSystemData (line 110) | void InitializeSystemData() {
      function SaveSystemData (line 114) | void SaveSystemData() {
      function SaveError (line 118) | SaveError LoadSystemData() {
      function SaveThumbnailData (line 122) | void SaveThumbnailData() {
      function SaveMemory (line 126) | void SaveMemory() {
      function LoadEntry (line 130) | void LoadEntry(SaveType type, int id) {
      function LoadMemoryNew (line 134) | void LoadMemoryNew(LoadProcess load) {
      function FlushWorkingSaveEntry (line 138) | void FlushWorkingSaveEntry(SaveType type, int id, int autoSaveType) {
      function GetSavePlayTime (line 143) | uint32_t GetSavePlayTime(SaveType type, int id) {
      function GetSaveFlags (line 150) | uint8_t GetSaveFlags(SaveType type, int id) {
      function SetSaveFlags (line 157) | void SetSaveFlags(SaveType type, int id, uint8_t flags) {
      function tm (line 163) | tm const& GetSaveDate(SaveType type, int id) {
      function GetSaveStatus (line 176) | uint8_t GetSaveStatus(SaveType type, int id) {
      function GetSaveTitle (line 183) | int GetSaveTitle(SaveType type, int id) {
      function GetTipStatus (line 190) | uint32_t GetTipStatus(size_t tipId) {
      function SetTipStatus (line 197) | void SetTipStatus(size_t tipId, bool isLocked, bool isUnread, bool i...
      function SetLineRead (line 204) | void SetLineRead(int scriptId, int lineId) {
      function IsLineRead (line 210) | bool IsLineRead(int scriptId, int lineId) {
      function GetReadMessagesCount (line 217) | void GetReadMessagesCount(int* totalMessageCount, int* readMessageCo...
      function GetViewedEVsCount (line 227) | void GetViewedEVsCount(int* totalEVCount, int* viewedEVCount) {
      function GetEVStatus (line 236) | void GetEVStatus(int evId, int* totalVariations, int* viewedVariatio...
      function SetEVStatus (line 245) | void SetEVStatus(int id) {
      function GetEVVariationIsUnlocked (line 251) | bool GetEVVariationIsUnlocked(size_t evId, size_t variationIdx) {
      function GetBgmFlag (line 259) | bool GetBgmFlag(int id) {
      function SetBgmFlag (line 266) | void SetBgmFlag(int id, bool flag) {
      function SetCheckpointId (line 275) | void SetCheckpointId(int id) {
      function GetQuickSaveOpenSlot (line 279) | std::optional<uint8_t> GetQuickSaveOpenSlot() {
      function UpdateQuickSaveRecentSortedId (line 286) | void UpdateQuickSaveRecentSortedId(int openSlot) {
      function Sprite (line 291) | Sprite& GetSaveThumbnail(SaveType type, int id) {
      function Sprite (line 300) | Sprite& GetWorkingSaveThumbnail() {
      function HasQSavedOnCurrentLine (line 309) | bool HasQSavedOnCurrentLine() {
      function SetQSavedOnCurrentLine (line 316) | void SetQSavedOnCurrentLine(bool value) {

FILE: src/data/savesystem.h
  type class (line 17) | enum class
  type SaveFlagsMode (line 23) | enum SaveFlagsMode { WriteProtect = 1 }
  type class (line 25) | enum class
  function SaveType (line 38) | enum class SaveType { Full = 0, Quick = 1 };
  function virtual (line 106) | virtual void LoadMemoryNew(LoadProcess){}

FILE: src/data/tipssystem.cpp
  type Impacto (line 7) | namespace Impacto {
    type TipsSystem (line 8) | namespace TipsSystem {
      function Init (line 77) | void Init() { Configure(); }
      function DataInit (line 79) | void DataInit(uint32_t scriptBufferId, uint32_t tipsDataAdr,
      function UpdateTipRecords (line 88) | void UpdateTipRecords() {
      function SetTipLockedState (line 94) | void SetTipLockedState(size_t id, bool state) {
      function SetTipUnreadState (line 100) | void SetTipUnreadState(size_t id, bool state) {
      function SetTipNewState (line 106) | void SetTipNewState(size_t id, bool state) {
      function GetTipLockedState (line 112) | bool GetTipLockedState(size_t id) {
      function TipsDataRecord (line 126) | TipsDataRecord* GetTipRecord(size_t id) {
      function GetTipCount (line 133) | size_t GetTipCount() {
      function GetTipsScriptBufferId (line 140) | uint8_t GetTipsScriptBufferId() {

FILE: src/data/tipssystem.h
  function namespace (line 9) | namespace Impacto {

FILE: src/debugmenu.cpp
  type Impacto (line 18) | namespace Impacto {
    type DebugMenu (line 19) | namespace DebugMenu {
      function HelpMarker (line 36) | static void HelpMarker(const char* desc) {
      function ImageTooltip (line 46) | static void ImageTooltip(ImVec2 pos, ImTextureID textureId, float te...
      function ParseScriptDebugData (line 73) | static void ParseScriptDebugData(uint32_t scriptId) {
      function ShowSingleWindow (line 122) | void ShowSingleWindow() {
      function ShowDockableArea (line 152) | void ShowDockableArea() {
      function Show (line 209) | void Show() {
      function ShowScriptVariablesEditor (line 228) | void ShowScriptVariablesEditor() {
      function ShowScriptDebugger (line 394) | void ShowScriptDebugger() {
      function ShowSprite (line 759) | static void ShowSprite(const Sprite* sprite) {
      function ShowObjects (line 772) | void ShowObjects() {

FILE: src/debugmenu.h
  function namespace (line 7) | namespace Impacto {

FILE: src/effects/blur.cpp
  type Impacto (line 9) | namespace Impacto {
    type Effects (line 10) | namespace Effects {

FILE: src/effects/blur.h
  function namespace (line 3) | namespace Impacto {

FILE: src/effects/chlcc/bubbleseffect.cpp
  type Impacto (line 9) | namespace Impacto {
    type UI (line 10) | namespace UI {
      type CHLCC (line 11) | namespace CHLCC {

FILE: src/effects/chlcc/bubbleseffect.h
  function namespace (line 5) | namespace Impacto {

FILE: src/effects/chlcc/butterflyeffect.cpp
  type Impacto (line 8) | namespace Impacto {
    type UI (line 9) | namespace UI {
      type CHLCC (line 10) | namespace CHLCC {

FILE: src/effects/chlcc/butterflyeffect.h
  function namespace (line 7) | namespace Impacto {

FILE: src/effects/chlcc/eyecatch.cpp
  type Impacto (line 13) | namespace Impacto {
    type UI (line 14) | namespace UI {
      type CHLCC (line 15) | namespace CHLCC {

FILE: src/effects/chlcc/eyecatch.h
  function namespace (line 5) | namespace Impacto {

FILE: src/effects/mosaic.cpp
  type Impacto (line 6) | namespace Impacto {
    type Effects (line 7) | namespace Effects {

FILE: src/effects/mosaic.h
  function namespace (line 5) | namespace Impacto {

FILE: src/effects/wave.cpp
  type Impacto (line 6) | namespace Impacto {
    type Effects (line 7) | namespace Effects {
      function Init (line 11) | void Init() {

FILE: src/effects/wave.h
  function namespace (line 5) | namespace Impacto {

FILE: src/font.h
  function namespace (line 9) | namespace Impacto {

FILE: src/game.cpp
  type Impacto (line 67) | namespace Impacto {
    type Game (line 71) | namespace Game {
      function Init (line 73) | static void Init() {
      function InitFromProfile (line 185) | void InitFromProfile(std::string const& name) {
      function Shutdown (line 190) | void Shutdown() {
      function UpdateGameState (line 206) | void UpdateGameState(float dt) {
      function UpdateSystem (line 236) | void UpdateSystem(float dt) {
      function Update (line 316) | void Update(float dt) {
      function RenderMain (line 353) | static void RenderMain() {
      function Render (line 529) | void Render() {

FILE: src/game.h
  type class (line 13) | enum class
  type class (line 19) | enum class
  type class (line 33) | enum class
  type class (line 38) | enum class
  type class (line 43) | enum class
  function SubtitleTextBackendType (line 48) | enum class SubtitleTextBackendType : int {
  function SubtitleBmpBackendType (line 52) | enum class SubtitleBmpBackendType : int {
  function namespace (line 56) | namespace Game {
  function GameFeature (line 99) | struct magic_enum::customize::enum_range<Impacto::GameFeature> {
  function DrawComponentType (line 104) | struct magic_enum::customize::enum_range<Impacto::Game::DrawComponentTyp...

FILE: src/games/cc/backlogmenu.cpp
  type Impacto (line 13) | namespace Impacto {
    type UI (line 14) | namespace UI {
      type CC (line 15) | namespace CC {

FILE: src/games/cc/backlogmenu.h
  function namespace (line 7) | namespace Impacto {

FILE: src/games/cc/sysmesbox.cpp
  type Impacto (line 13) | namespace Impacto {
    type UI (line 14) | namespace UI {
      type CC (line 15) | namespace CC {

FILE: src/games/cc/sysmesbox.h
  function namespace (line 6) | namespace Impacto {

FILE: src/games/cc/titlemenu.cpp
  type Impacto (line 24) | namespace Impacto {
    type UI (line 25) | namespace UI {
      type CC (line 26) | namespace CC {

FILE: src/games/cc/titlemenu.h
  function namespace (line 9) | namespace Impacto {

FILE: src/games/cclcc/albummenu.cpp
  type Impacto::UI::CCLCC (line 16) | namespace Impacto::UI::CCLCC {
    type GridDirection (line 70) | enum GridDirection {

FILE: src/games/cclcc/albummenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/games/cclcc/clearlistmenu.cpp
  type Impacto (line 12) | namespace Impacto {
    type UI (line 13) | namespace UI {
      type CCLCC (line 14) | namespace CCLCC {

FILE: src/games/cclcc/clearlistmenu.h
  function namespace (line 6) | namespace Impacto {

FILE: src/games/cclcc/delusiontrigger.cpp
  type Impacto (line 11) | namespace Impacto {
    type UI (line 12) | namespace UI {
      type CCLCC (line 13) | namespace CCLCC {

FILE: src/games/cclcc/delusiontrigger.h
  function namespace (line 6) | namespace Impacto {

FILE: src/games/cclcc/helpmenu.cpp
  type Impacto (line 14) | namespace Impacto {
    type UI (line 15) | namespace UI {
      type CCLCC (line 16) | namespace CCLCC {

FILE: src/games/cclcc/helpmenu.h
  function namespace (line 6) | namespace Impacto {

FILE: src/games/cclcc/librarymenu.cpp
  type Impacto (line 17) | namespace Impacto {
    type UI (line 18) | namespace UI {
      type CCLCC (line 19) | namespace CCLCC {
        function LibrarySubmenu (line 29) | LibrarySubmenu& LibraryMenu::GetMenuFromType(
        function LibraryMenuPageType (line 44) | LibraryMenuPageType LibraryMenu::GetMenuTypeFromButton(Widget* btn...

FILE: src/games/cclcc/librarymenu.h
  function namespace (line 12) | namespace Impacto {

FILE: src/games/cclcc/librarysubmenus.cpp
  type Impacto (line 11) | namespace Impacto {
    type UI (line 12) | namespace UI {
      type CCLCC (line 13) | namespace CCLCC {

FILE: src/games/cclcc/librarysubmenus.h
  function namespace (line 9) | namespace Impacto {

FILE: src/games/cclcc/mapsystem.cpp
  type Impacto (line 16) | namespace Impacto {
    type UI (line 17) | namespace UI {
      type CCLCC (line 18) | namespace CCLCC {
        function toFlt (line 24) | inline float toFlt(double d) { return static_cast<float>(d); }
        function toFlt (line 25) | inline float toFlt(int d) { return static_cast<float>(d); }
        function toInt (line 26) | inline int toInt(float f) { return static_cast<int>(f); }
        function getMapPos (line 975) | void getMapPos(float newSize, float newX, float newY, float& setX,...

FILE: src/games/cclcc/mapsystem.h
  function namespace (line 6) | namespace Impacto {

FILE: src/games/cclcc/moviemenu.cpp
  type Impacto::UI::CCLCC (line 9) | namespace Impacto::UI::CCLCC {
    function IsExtraMoviesPresent (line 13) | static bool IsExtraMoviesPresent() {

FILE: src/games/cclcc/moviemenu.h
  function namespace (line 5) | namespace Impacto::UI::CCLCC {

FILE: src/games/cclcc/musicmenu.cpp
  type Impacto (line 14) | namespace Impacto {
    type UI (line 15) | namespace UI {
      type CCLCC (line 16) | namespace CCLCC {

FILE: src/games/cclcc/musicmenu.h
  function namespace (line 8) | namespace Impacto {

FILE: src/games/cclcc/optionsmenu.cpp
  type Impacto (line 14) | namespace Impacto {
    type UI (line 15) | namespace UI {
      type CCLCC (line 16) | namespace CCLCC {

FILE: src/games/cclcc/optionsmenu.h
  function namespace (line 11) | namespace Impacto {

FILE: src/games/cclcc/savemenu.cpp
  type Impacto (line 16) | namespace Impacto {
    type UI (line 17) | namespace UI {
      type CCLCC (line 18) | namespace CCLCC {

FILE: src/games/cclcc/savemenu.h
  function namespace (line 9) | namespace Impacto {

FILE: src/games/cclcc/savesystem.cpp
  type Impacto (line 23) | namespace Impacto {
    type CCLCC (line 24) | namespace CCLCC {
      function CalculateChecksum (line 33) | uint32_t CalculateChecksum(std::span<const uint8_t> bufferData,
      function SaveError (line 56) | SaveError SaveSystem::CheckSaveFile() const {
      function SaveError (line 247) | SaveError SaveSystem::MountSaveFile(std::vector<QueuedTexture>& text...
      function SaveError (line 451) | SaveError SaveSystem::LoadSystemData() {
      function SaveError (line 620) | SaveError SaveSystem::WriteSaveFile() {
      function tm (line 695) | tm const& SaveSystem::GetSaveDate(SaveType type, int id) const {
      function Sprite (line 933) | Sprite& SaveSystem::GetSaveThumbnail(SaveType type, int id) {

FILE: src/games/cclcc/savesystem.h
  function namespace (line 9) | namespace Impacto {

FILE: src/games/cclcc/systemmenu.cpp
  type Impacto (line 13) | namespace Impacto {
    type UI (line 14) | namespace UI {
      type CCLCC (line 15) | namespace CCLCC {
        function GenerateMatrix (line 228) | static auto GenerateMatrix(CornersQuad const& corners) {
        function TransformImageVertex (line 274) | static glm::vec2 TransformImageVertex(const glm::vec2 vertex,
        function TransformImage (line 286) | static void TransformImage(CornersQuad const& sprCorners,

FILE: src/games/cclcc/systemmenu.h
  function namespace (line 10) | namespace Impacto {

FILE: src/games/cclcc/tipsmenu.cpp
  type Impacto (line 19) | namespace Impacto {
    type UI (line 20) | namespace UI {
      type CCLCC (line 21) | namespace CCLCC {

FILE: src/games/cclcc/tipsmenu.h
  function namespace (line 16) | namespace Impacto::UI::Widgets::CCLCC {
  function namespace (line 19) | namespace Impacto {

FILE: src/games/cclcc/tipssystem.cpp
  type Impacto (line 9) | namespace Impacto {
    type CCLCC (line 10) | namespace CCLCC {

FILE: src/games/cclcc/tipssystem.h
  function namespace (line 5) | namespace Impacto {

FILE: src/games/cclcc/titlemenu.cpp
  type Impacto (line 17) | namespace Impacto {
    type UI (line 18) | namespace UI {
      type CCLCC (line 19) | namespace CCLCC {

FILE: src/games/cclcc/titlemenu.h
  function namespace (line 11) | namespace Impacto {

FILE: src/games/cclcc/yesnotrigger.cpp
  type Impacto (line 8) | namespace Impacto {
    type UI (line 9) | namespace UI {
      type CCLCC (line 10) | namespace CCLCC {

FILE: src/games/cclcc/yesnotrigger.h
  function namespace (line 11) | namespace CCLCC {

FILE: src/games/chlcc/albummenu.cpp
  type Impacto (line 16) | namespace Impacto {
    type UI (line 17) | namespace UI {
      type CHLCC (line 18) | namespace CHLCC {

FILE: src/games/chlcc/albummenu.h
  function namespace (line 9) | namespace Impacto {

FILE: src/games/chlcc/animations/menutransition.cpp
  type Impacto (line 6) | namespace Impacto {
    type UI (line 7) | namespace UI {
      type CHLCC (line 8) | namespace CHLCC {

FILE: src/games/chlcc/animations/menutransition.h
  function namespace (line 6) | namespace Impacto {

FILE: src/games/chlcc/animations/saveicon.cpp
  type Impacto (line 5) | namespace Impacto {
    type UI (line 6) | namespace UI {
      type CHLCC (line 7) | namespace CHLCC {
        function Sprite (line 37) | Sprite SaveIconAnimation::CurrentSprite() const {

FILE: src/games/chlcc/animations/saveicon.h
  function namespace (line 7) | namespace Impacto {

FILE: src/games/chlcc/animations/selectprompt.cpp
  type Impacto (line 4) | namespace Impacto {
    type UI (line 5) | namespace UI {
      type CHLCC (line 6) | namespace CHLCC {

FILE: src/games/chlcc/animations/selectprompt.h
  function namespace (line 10) | namespace Impacto {

FILE: src/games/chlcc/backlogmenu.cpp
  type Impacto (line 12) | namespace Impacto {
    type UI (line 13) | namespace UI {
      type CHLCC (line 14) | namespace CHLCC {

FILE: src/games/chlcc/backlogmenu.h
  function namespace (line 7) | namespace Impacto {

FILE: src/games/chlcc/clearlistmenu.cpp
  type Impacto (line 12) | namespace Impacto {
    type UI (line 13) | namespace UI {
      type CHLCC (line 14) | namespace CHLCC {

FILE: src/games/chlcc/clearlistmenu.h
  function namespace (line 7) | namespace Impacto {

FILE: src/games/chlcc/commonmenu.cpp
  type Impacto (line 10) | namespace Impacto {
    type UI (line 11) | namespace UI {
      type CHLCC (line 12) | namespace CHLCC {

FILE: src/games/chlcc/commonmenu.h
  function namespace (line 11) | namespace Impacto {

FILE: src/games/chlcc/delusiontrigger.cpp
  type Impacto (line 13) | namespace Impacto {
    type UI (line 14) | namespace UI {
      type CHLCC (line 15) | namespace CHLCC {

FILE: src/games/chlcc/delusiontrigger.h
  function namespace (line 6) | namespace Impacto {

FILE: src/games/chlcc/introsequence.cpp
  type Impacto (line 12) | namespace Impacto {
    type CHLCC (line 13) | namespace CHLCC {

FILE: src/games/chlcc/introsequence.h
  function namespace (line 8) | namespace Impacto {

FILE: src/games/chlcc/moviemenu.cpp
  type Impacto (line 13) | namespace Impacto {
    type UI (line 14) | namespace UI {
      type CHLCC (line 15) | namespace CHLCC {
        function IsExtraMoviesPresent (line 37) | static bool IsExtraMoviesPresent() {

FILE: src/games/chlcc/moviemenu.h
  function namespace (line 8) | namespace Impacto {

FILE: src/games/chlcc/musicmenu.cpp
  type Impacto (line 15) | namespace Impacto {
    type UI (line 16) | namespace UI {
      type CHLCC (line 17) | namespace CHLCC {
        function isRepeat (line 27) | constexpr bool isRepeat(MusicPlaybackMode playbackMode) {
        function isPlaylist (line 32) | constexpr bool isPlaylist(MusicPlaybackMode playbackMode) {
        function GetEndScroll (line 65) | static float GetEndScroll(Group* itemsGroup) {

FILE: src/games/chlcc/musicmenu.h
  function namespace (line 13) | namespace Impacto {

FILE: src/games/chlcc/optionsmenu.cpp
  type Impacto (line 21) | namespace Impacto {
    type UI (line 22) | namespace UI {
      type CHLCC (line 23) | namespace CHLCC {
        function CreateTextPage (line 36) | static std::unique_ptr<Widgets::Group> CreateTextPage(
        function CreateSoundPage (line 114) | static std::unique_ptr<Widgets::Group> CreateSoundPage(
        function CreateVoicePage (line 162) | static std::unique_ptr<Widgets::Group> CreateVoicePage(

FILE: src/games/chlcc/optionsmenu.h
  function Show (line 15) | void Show() override;

FILE: src/games/chlcc/savemenu.cpp
  type Impacto (line 16) | namespace Impacto {
    type UI (line 17) | namespace UI {
      type CHLCC (line 18) | namespace CHLCC {

FILE: src/games/chlcc/savemenu.h
  function namespace (line 10) | namespace Impacto {

FILE: src/games/chlcc/savesystem.cpp
  type Impacto (line 18) | namespace Impacto {
    type CHLCC (line 19) | namespace CHLCC {
      function TextSpeedToSettingIndex (line 31) | constexpr uint8_t TextSpeedToSettingIndex(const float speed) {
      function AutoSpeedToSettingIndex (line 41) | constexpr uint8_t AutoSpeedToSettingIndex(const float speed) {
      function AutoQuickSaveSettingToIndex (line 49) | constexpr uint8_t AutoQuickSaveSettingToIndex(const uint8_t setting) {
      function AutoQuickSaveIndexToSetting (line 69) | constexpr std::underlying_type_t<AutoQuickSaveType> AutoQuickSaveInd...
      function CalculateFileChecksum (line 87) | std::pair<uint8_t, uint8_t> CalculateFileChecksum(
      function CalculateEntryChecksum (line 101) | std::pair<uint8_t, uint8_t> CalculateEntryChecksum(
      function CalculateSystemChecksum (line 115) | std::pair<uint16_t, uint16_t> CalculateSystemChecksum(
      function SaveError (line 192) | SaveError SaveSystem::CheckSaveFile() const {
      function SaveError (line 434) | SaveError SaveSystem::LoadSystemData() {
      function SaveError (line 511) | SaveError SaveSystem::MountSaveFile(std::vector<QueuedTexture>& text...
      function SaveError (line 726) | SaveError SaveSystem::WriteSaveFile() {
      function tm (line 874) | tm const& SaveSystem::GetSaveDate(SaveType type, int id) const {
      function Sprite (line 1162) | Sprite& SaveSystem::GetSaveThumbnail(SaveType type, int id) {

FILE: src/games/chlcc/savesystem.h
  function namespace (line 6) | namespace Impacto {

FILE: src/games/chlcc/sysmesbox.cpp
  type Impacto (line 12) | namespace Impacto {
    type UI (line 13) | namespace UI {
      type CHLCC (line 14) | namespace CHLCC {

FILE: src/games/chlcc/sysmesbox.h
  function namespace (line 6) | namespace Impacto {

FILE: src/games/chlcc/systemmenu.cpp
  type Impacto (line 19) | namespace Impacto {
    type UI (line 20) | namespace UI {
      type CHLCC (line 21) | namespace CHLCC {

FILE: src/games/chlcc/systemmenu.h
  function namespace (line 10) | namespace Impacto {

FILE: src/games/chlcc/tipsmenu.cpp
  type Impacto (line 18) | namespace Impacto {
    type UI (line 19) | namespace UI {
      type CHLCC (line 20) | namespace CHLCC {
        function GetEndScroll (line 33) | static float GetEndScroll(Group* tipsItemsGroup) {

FILE: src/games/chlcc/tipsmenu.h
  function namespace (line 12) | namespace Impacto {

FILE: src/games/chlcc/tipssystem.cpp
  type Impacto (line 11) | namespace Impacto {
    type CHLCC (line 12) | namespace CHLCC {

FILE: src/games/chlcc/tipssystem.h
  function namespace (line 5) | namespace Impacto {

FILE: src/games/chlcc/titlemenu.cpp
  type Impacto (line 17) | namespace Impacto {
    type UI (line 18) | namespace UI {
      type CHLCC (line 19) | namespace CHLCC {

FILE: src/games/chlcc/titlemenu.h
  function namespace (line 10) | namespace Impacto {

FILE: src/games/chlcc/trophymenu.cpp
  type Impacto (line 18) | namespace Impacto {
    type UI (line 19) | namespace UI {
      type CHLCC (line 20) | namespace CHLCC {

FILE: src/games/chlcc/trophymenu.h
  function namespace (line 13) | namespace Impacto {

FILE: src/games/darling/sysmesbox.cpp
  type Impacto (line 10) | namespace Impacto {
    type UI (line 11) | namespace UI {
      type Darling (line 12) | namespace Darling {

FILE: src/games/darling/sysmesbox.h
  function namespace (line 6) | namespace Impacto {

FILE: src/games/dash/titlemenu.cpp
  type Impacto (line 16) | namespace Impacto {
    type UI (line 17) | namespace UI {
      type Dash (line 18) | namespace Dash {

FILE: src/games/dash/titlemenu.h
  function namespace (line 6) | namespace Impacto {

FILE: src/games/mo6tw/actorsvoicemenu.cpp
  type Impacto (line 11) | namespace Impacto {
    type UI (line 12) | namespace UI {
      type MO6TW (line 13) | namespace MO6TW {

FILE: src/games/mo6tw/actorsvoicemenu.h
  function namespace (line 8) | namespace Impacto {

FILE: src/games/mo6tw/albummenu.cpp
  type Impacto (line 14) | namespace Impacto {
    type UI (line 15) | namespace UI {
      type MO6TW (line 16) | namespace MO6TW {

FILE: src/games/mo6tw/albummenu.h
  function namespace (line 8) | namespace Impacto {

FILE: src/games/mo6tw/backlogmenu.cpp
  type Impacto (line 8) | namespace Impacto {
    type UI (line 9) | namespace UI {
      type MO6TW (line 10) | namespace MO6TW {

FILE: src/games/mo6tw/backlogmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/games/mo6tw/clearlistmenu.cpp
  type Impacto (line 17) | namespace Impacto {
    type UI (line 18) | namespace UI {
      type MO6TW (line 19) | namespace MO6TW {

FILE: src/games/mo6tw/clearlistmenu.h
  function namespace (line 9) | namespace Impacto {

FILE: src/games/mo6tw/moviemenu.cpp
  type Impacto (line 9) | namespace Impacto {
    type UI (line 10) | namespace UI {
      type MO6TW (line 11) | namespace MO6TW {

FILE: src/games/mo6tw/moviemenu.h
  function namespace (line 8) | namespace Impacto {

FILE: src/games/mo6tw/musicmenu.cpp
  type Impacto (line 14) | namespace Impacto {
    type UI (line 15) | namespace UI {
      type MO6TW (line 16) | namespace MO6TW {

FILE: src/games/mo6tw/musicmenu.h
  function namespace (line 8) | namespace Impacto {

FILE: src/games/mo6tw/optionsmenu.cpp
  type Impacto (line 11) | namespace Impacto {
    type UI (line 12) | namespace UI {
      type MO6TW (line 13) | namespace MO6TW {

FILE: src/games/mo6tw/optionsmenu.h
  function namespace (line 9) | namespace Impacto {

FILE: src/games/mo6tw/savemenu.cpp
  type Impacto (line 14) | namespace Impacto {
    type UI (line 15) | namespace UI {
      type MO6TW (line 16) | namespace MO6TW {

FILE: src/games/mo6tw/savemenu.h
  function namespace (line 8) | namespace Impacto {

FILE: src/games/mo6tw/savesystem.cpp
  type Impacto (line 12) | namespace Impacto {
    type MO6TW (line 13) | namespace MO6TW {
      function SaveError (line 21) | SaveError SaveSystem::LoadSystemData() {
      function SaveError (line 74) | SaveError SaveSystem::MountSaveFile(std::vector<QueuedTexture>& text...
      function SaveError (line 270) | SaveError SaveSystem::WriteSaveFile() {
      function tm (line 506) | tm const& SaveSystem::GetSaveDate(SaveType type, int id) const {
      function Sprite (line 620) | Sprite& SaveSystem::GetSaveThumbnail(SaveType type, int id) {

FILE: src/games/mo6tw/savesystem.h
  function namespace (line 5) | namespace Impacto {

FILE: src/games/mo6tw/sysmesbox.cpp
  type Impacto (line 10) | namespace Impacto {
    type UI (line 11) | namespace UI {
      type MO6TW (line 12) | namespace MO6TW {

FILE: src/games/mo6tw/sysmesbox.h
  function namespace (line 6) | namespace Impacto {

FILE: src/games/mo6tw/systemmenu.cpp
  type Impacto (line 11) | namespace Impacto {
    type UI (line 12) | namespace UI {
      type MO6TW (line 13) | namespace MO6TW {

FILE: src/games/mo6tw/systemmenu.h
  function namespace (line 8) | namespace Impacto {

FILE: src/games/mo6tw/tipsmenu.cpp
  type Impacto (line 16) | namespace Impacto {
    type UI (line 17) | namespace UI {
      type MO6TW (line 18) | namespace MO6TW {

FILE: src/games/mo6tw/tipsmenu.h
  function namespace (line 9) | namespace Impacto {

FILE: src/games/mo6tw/tipssystem.cpp
  type Impacto (line 9) | namespace Impacto {
    type MO6TW (line 10) | namespace MO6TW {

FILE: src/games/mo6tw/tipssystem.h
  function namespace (line 5) | namespace Impacto {

FILE: src/games/mo6tw/titlemenu.cpp
  type Impacto (line 13) | namespace Impacto {
    type UI (line 14) | namespace UI {
      type MO6TW (line 15) | namespace MO6TW {

FILE: src/games/mo6tw/titlemenu.h
  function namespace (line 9) | namespace Impacto {

FILE: src/games/mo8/optionsmenu.cpp
  type Impacto (line 11) | namespace Impacto {
    type UI (line 12) | namespace UI {
      type MO8 (line 13) | namespace MO8 {

FILE: src/games/mo8/optionsmenu.h
  function namespace (line 10) | namespace Impacto {

FILE: src/games/mo8/savemenu.cpp
  type Impacto (line 14) | namespace Impacto {
    type UI (line 15) | namespace UI {
      type MO8 (line 16) | namespace MO8 {

FILE: src/games/mo8/savemenu.h
  function namespace (line 8) | namespace Impacto {

FILE: src/games/mo8/systemmenu.cpp
  type Impacto (line 12) | namespace Impacto {
    type UI (line 13) | namespace UI {
      type MO8 (line 14) | namespace MO8 {

FILE: src/games/mo8/systemmenu.h
  function namespace (line 8) | namespace Impacto {

FILE: src/games/mo8/titlemenu.cpp
  type Impacto (line 18) | namespace Impacto {
    type UI (line 19) | namespace UI {
      type MO8 (line 20) | namespace MO8 {

FILE: src/games/mo8/titlemenu.h
  function namespace (line 7) | namespace Impacto {

FILE: src/games/rne/sysmesbox.cpp
  type Impacto (line 14) | namespace Impacto {
    type UI (line 15) | namespace UI {
      type RNE (line 16) | namespace RNE {

FILE: src/games/rne/sysmesbox.h
  function namespace (line 6) | namespace Impacto {

FILE: src/games/rne/systemmenu.cpp
  type Impacto (line 13) | namespace Impacto {
    type UI (line 14) | namespace UI {
      type RNE (line 15) | namespace RNE {

FILE: src/games/rne/systemmenu.h
  function namespace (line 8) | namespace Impacto {

FILE: src/games/rne/tilebackground.cpp
  type Impacto (line 7) | namespace Impacto {
    type RNE (line 8) | namespace RNE {

FILE: src/games/rne/tilebackground.h
  function namespace (line 6) | namespace Impacto {

FILE: src/games/rne/titlemenu.cpp
  type Impacto (line 17) | namespace Impacto {
    type UI (line 18) | namespace UI {
      type RNE (line 19) | namespace RNE {

FILE: src/games/rne/titlemenu.h
  function namespace (line 6) | namespace Impacto {

FILE: src/hud/autoicondisplay.cpp
  type Impacto (line 7) | namespace Impacto {
    type AutoIconDisplay (line 8) | namespace AutoIconDisplay {
      function Init (line 16) | void Init() {
      function Update (line 39) | void Update(float dt) {
      function Render (line 72) | void Render(glm::vec4 opacityTint) {

FILE: src/hud/autoicondisplay.h
  function namespace (line 8) | namespace Impacto {

FILE: src/hud/cc/dialoguebox.cpp
  type Impacto (line 13) | namespace Impacto {
    type CC (line 14) | namespace CC {

FILE: src/hud/cc/dialoguebox.h
  function namespace (line 7) | namespace Impacto {

FILE: src/hud/cc/nametagdisplay.cpp
  type Impacto (line 6) | namespace Impacto {
    type CC (line 7) | namespace CC {

FILE: src/hud/cc/nametagdisplay.h
  function namespace (line 5) | namespace Impacto {

FILE: src/hud/cclcc/tipsnotification.cpp
  type Impacto (line 12) | namespace Impacto {
    type CCLCC (line 13) | namespace CCLCC {

FILE: src/hud/cclcc/tipsnotification.h
  function namespace (line 7) | namespace Impacto {

FILE: src/hud/chlcc/dialoguebox.cpp
  type Impacto (line 12) | namespace Impacto {
    type CHLCC (line 13) | namespace CHLCC {

FILE: src/hud/chlcc/dialoguebox.h
  function namespace (line 6) | namespace Impacto {

FILE: src/hud/chlcc/nametagdisplay.cpp
  type Impacto (line 8) | namespace Impacto {
    type CHLCC (line 9) | namespace CHLCC {

FILE: src/hud/chlcc/nametagdisplay.h
  function namespace (line 5) | namespace Impacto {

FILE: src/hud/chlcc/tipsnotification.cpp
  type Impacto (line 8) | namespace Impacto {
    type CHLCC (line 9) | namespace CHLCC {

FILE: src/hud/chlcc/tipsnotification.h
  function namespace (line 7) | namespace Impacto {

FILE: src/hud/datedisplay.cpp
  type Impacto (line 5) | namespace Impacto {
    type DateDisplay (line 6) | namespace DateDisplay {
      function Init (line 8) | void Init() {
      function Update (line 18) | void Update(float dt) {
      function Render (line 21) | void Render() {

FILE: src/hud/datedisplay.h
  function namespace (line 6) | namespace Impacto {

FILE: src/hud/defaultsaveiconanimation.cpp
  type Impacto (line 6) | namespace Impacto {
    type UI (line 7) | namespace UI {

FILE: src/hud/defaultsaveiconanimation.h
  function namespace (line 6) | namespace Impacto {

FILE: src/hud/dialoguebox.cpp
  type Impacto (line 18) | namespace Impacto {

FILE: src/hud/dialoguebox.h
  type DialoguePageMode (line 12) | enum DialoguePageMode : uint8_t
  type class (line 14) | enum class
  function virtual (line 26) | virtual void Show() { ShowName(); }
  function virtual (line 27) | virtual void Hide() { HideName(); }
  function ShowName (line 28) | void ShowName() { NametagDisplayInst->Show(); }
  function HideName (line 29) | void HideName() { NametagDisplayInst->Hide(); }
  function virtual (line 31) | virtual void Update(float dt) { NametagDisplayInst->Update(dt); }
  function virtual (line 32) | virtual void UpdateInput(float dt) {}
  function VisibilityStateType (line 37) | enum class VisibilityStateType { Hidden, Hiding, Showing, Shown };
  function class (line 45) | class PlainDialogueBox : public DialogueBox {

FILE: src/hud/loadingdisplay.cpp
  type Impacto (line 11) | namespace Impacto {
    type LoadingDisplay (line 12) | namespace LoadingDisplay {
      function Init (line 24) | void Init() {
      function Update (line 39) | void Update(float dt) {
      function Render (line 74) | void Render() {

FILE: src/hud/loadingdisplay.h
  function namespace (line 3) | namespace Impacto {

FILE: src/hud/mo6tw/dialoguebox.cpp
  type Impacto (line 11) | namespace Impacto {
    type MO6TW (line 12) | namespace MO6TW {

FILE: src/hud/mo6tw/dialoguebox.h
  function namespace (line 5) | namespace Impacto {

FILE: src/hud/mo6tw/tipsnotification.cpp
  type Impacto (line 13) | namespace Impacto {
    type MO6TW (line 14) | namespace MO6TW {

FILE: src/hud/mo6tw/tipsnotification.h
  function namespace (line 7) | namespace Impacto {

FILE: src/hud/nametagdisplay.cpp
  type Impacto (line 10) | namespace Impacto {

FILE: src/hud/nametagdisplay.h
  function namespace (line 5) | namespace Impacto {

FILE: src/hud/rne/datedisplay.cpp
  type Impacto (line 10) | namespace Impacto {
    type RNE (line 11) | namespace RNE {

FILE: src/hud/rne/datedisplay.h
  function namespace (line 5) | namespace Impacto {

FILE: src/hud/saveicondisplay.cpp
  type Impacto (line 8) | namespace Impacto {
    type SaveIconDisplay (line 9) | namespace SaveIconDisplay {
      function Init (line 20) | void Init() {
      function Hide (line 39) | void Hide() {
      function Show (line 44) | void Show() { ShowAt(DefaultPosition); }
      function ShowAt (line 45) | void ShowAt(glm::vec2 pos) {
      function ShowFor (line 49) | void ShowFor(float seconds) {
      function Update (line 57) | void Update(float dt) {
      function Render (line 63) | void Render() {

FILE: src/hud/saveicondisplay.h
  function namespace (line 5) | namespace Impacto {

FILE: src/hud/skipicondisplay.cpp
  type Impacto (line 7) | namespace Impacto {
    type SkipIconDisplay (line 8) | namespace SkipIconDisplay {
      function Init (line 16) | void Init() {
      function Update (line 39) | void Update(float dt) {
      function Render (line 72) | void Render(glm::vec4 opacityTint) {

FILE: src/hud/skipicondisplay.h
  function namespace (line 8) | namespace Impacto {

FILE: src/hud/tipsnotification.cpp
  type Impacto (line 6) | namespace Impacto {
    type TipsNotification (line 7) | namespace TipsNotification {
      function Init (line 9) | void Init() { Profile::TipsNotification::Configure(); }
      function Update (line 11) | void Update(float dt) {
      function Render (line 14) | void Render() {
      function AddTip (line 18) | void AddTip(int tipId) {

FILE: src/hud/tipsnotification.h
  function namespace (line 8) | namespace Impacto {

FILE: src/hud/waiticondisplay.cpp
  type Impacto (line 14) | namespace Impacto {
    type WaitIconDisplay (line 15) | namespace WaitIconDisplay {
      function Init (line 25) | void Init() {
      function AnyPageWaiting (line 50) | static bool AnyPageWaiting() {
      function Update (line 57) | void Update(float dt) {
      function RenderSpriteAnim (line 90) | static void RenderSpriteAnim(glm::vec2 pos, glm::vec4 opacityTint,
      function RenderSpriteAnimFixed (line 108) | static void RenderSpriteAnimFixed(glm::vec4 opacityTint) {
      function RenderRotateZ (line 116) | static void RenderRotateZ(glm::vec2 pos, glm::vec4 opacityTint,
      function RenderFixed (line 134) | static void RenderFixed(glm::vec4 opacityTint, int dialoguePageId) {
      function Render (line 140) | void Render(glm::vec2 pos, glm::vec4 opacityTint, DialoguePageMode m...

FILE: src/hud/waiticondisplay.h
  function namespace (line 8) | namespace Impacto {

FILE: src/inputsystem.cpp
  type Impacto (line 9) | namespace Impacto {
    type Input (line 10) | namespace Input {
      function BeginFrame (line 14) | void BeginFrame() {
      function SDLMouseCoordsToDesign (line 31) | static glm::vec2 SDLMouseCoordsToDesign(int x, int y) {
      function HandleEvent (line 41) | bool HandleEvent(SDL_Event const* ev) {

FILE: src/inputsystem.h
  function namespace (line 6) | namespace Impacto {

FILE: src/io/afsarchive.cpp
  type Impacto (line 9) | namespace Impacto {
    type Io (line 10) | namespace Io {
      type AfsMetaEntry (line 12) | struct AfsMetaEntry : FileMeta {
      function IoError (line 20) | IoError AfsArchive::Open(FileMeta* file, Stream** outStream) {
      function IoError (line 32) | IoError AfsArchive::Create(Stream* stream, VfsArchive** outArchive) {

FILE: src/io/afsarchive.h
  function namespace (line 5) | namespace Impacto {

FILE: src/io/assetpath.cpp
  type Impacto (line 5) | namespace Impacto {
    type Io (line 6) | namespace Io {
      function IoError (line 8) | IoError AssetPath::Open(Stream** outStream) {
      function IoError (line 20) | IoError AssetPath::Slurp(void*& outMemory, int64_t& outSize) {

FILE: src/io/assetpath.h
  function namespace (line 5) | namespace Impacto {

FILE: src/io/buffering.h
  function namespace (line 7) | namespace Impacto {

FILE: src/io/cpkarchive.cpp
  type Impacto (line 10) | namespace Impacto {
    type Io (line 11) | namespace Io {
      type CpkColumn (line 16) | struct CpkColumn {
        type Kind (line 17) | enum Kind : uint8_t {
        type Storage (line 32) | enum Storage : uint8_t {
        method Kind (line 39) | Kind GetType() const { return static_cast<Kind>(Flags & 0xF); }
        method Storage (line 40) | Storage GetStorage() const {
      type CpkMetaEntry (line 49) | struct CpkMetaEntry : public FileMeta {
      function DecryptUtfBlock (line 59) | void DecryptUtfBlock(uint8_t* utfBlock, uint64_t size) {
      function ReadString (line 67) | static std::string ReadString(int64_t stringsOffset, Stream* utfStre...
      function ReadUtfBlock (line 84) | static bool ReadUtfBlock(
      function CpkMetaEntry (line 213) | CpkMetaEntry* CpkArchive::GetFileListEntry(uint32_t id) {
      function IoError (line 226) | IoError CpkArchive::ReadItoc(int64_t itocOffset, int64_t contentOffset,
      function IoError (line 324) | IoError CpkArchive::ReadToc(int64_t tocOffset, int64_t contentOffset) {
      function IoError (line 378) | IoError CpkArchive::ReadEtoc(int64_t etocOffset) {
      function IoError (line 402) | IoError CpkArchive::Create(Stream* stream, VfsArchive** outArchive) {
      function IoError (line 478) | IoError CpkArchive::Open(FileMeta* file, Stream** outStream) {
      function get_next_bits (line 514) | static uint32_t get_next_bits(char* input, int* offset_p, uint32_t* ...
      function IoError (line 539) | static IoError DecompressLayla(char* input, int64_t compressedSize,
      function IoError (line 597) | IoError CpkArchive::Slurp(FileMeta* file, void*& outBuffer, int64_t&...

FILE: src/io/cpkarchive.h
  function namespace (line 8) | namespace Impacto {

FILE: src/io/filemeta.cpp
  type Impacto (line 5) | namespace Impacto {
    type Io (line 6) | namespace Io {
      function GetFileSize (line 8) | int64_t GetFileSize(std::string const& path) {
      function IoError (line 22) | IoError PathExists(std::string const& path) {
      function CreateDirectories (line 36) | int8_t CreateDirectories(std::string const& path, bool createParent) {
      function IoError (line 53) | IoError GetFilePermissions(std::string const& path,

FILE: src/io/filemeta.h
  function namespace (line 20) | namespace Impacto {

FILE: src/io/io.h
  function namespace (line 5) | namespace Impacto {

FILE: src/io/lnk4archive.cpp
  type Impacto (line 12) | namespace Impacto {
    type Io (line 13) | namespace Io {
      type Lnk4MetaEntry (line 15) | struct Lnk4MetaEntry : FileMeta {
      function IoError (line 23) | IoError Lnk4Archive::Open(FileMeta* file, Stream** outStream) {
      function IoError (line 44) | IoError Lnk4Archive::Create(Stream* stream, VfsArchive** outArchive) {

FILE: src/io/lnk4archive.h
  function namespace (line 5) | namespace Impacto {

FILE: src/io/lzxstream.cpp
  type Impacto (line 6) | namespace Impacto {
    type Io (line 7) | namespace Io {
      function IoError (line 11) | IoError LzxStream::Create(Stream* baseStream, int64_t offset, int64_...
      function IoError (line 108) | IoError LzxStream::Duplicate(Stream** outStream) {
      function IoError (line 119) | IoError LzxStream::FillBuffer() {
      type LZXFile (line 151) | struct LZXFile {
      function LZXread (line 161) | static int LZXread(struct LZXFile* file, void* buffer, int bytes) {
      function LZXwrite (line 189) | static int LZXwrite(struct LZXFile* file, void* buffer, int bytes) {
      type mspack_system (line 195) | struct mspack_system
      function LZXfree (line 199) | static void LZXfree(void* ptr) { free(ptr); }
      function LZXCopy (line 201) | static void LZXCopy(void* src, void* dst, size_t bytes) {
      type mspack_system (line 205) | struct mspack_system
      function LZXDecompress (line 218) | int32_t LZXDecompress(uint8_t* CompressedBuffer, int CompressedSize,

FILE: src/io/lzxstream.h
  function namespace (line 7) | namespace Impacto {

FILE: src/io/memorymappedfilestream.cpp
  type Impacto (line 8) | namespace Impacto {
    type Io (line 9) | namespace Io {
      function IoError (line 11) | IoError MemoryMappedFileStream<M>::Create(std::string const& fileName,
      function IoError (line 78) | IoError MemoryMappedFileStream<M>::Duplicate(Stream** outStream) {
      class MemoryMappedFileStream<AccessMode::write> (line 105) | class MemoryMappedFileStream<AccessMode::write>
      class MemoryMappedFileStream<AccessMode::read> (line 106) | class MemoryMappedFileStream<AccessMode::read>

FILE: src/io/memorymappedfilestream.h
  function namespace (line 10) | namespace Impacto {

FILE: src/io/memorystream.cpp
  type Impacto (line 5) | namespace Impacto {
    type Io (line 6) | namespace Io {
      function IoError (line 52) | IoError MemoryStream::Duplicate(Stream** outStream) {

FILE: src/io/memorystream.h
  function namespace (line 5) | namespace Impacto {

FILE: src/io/mpkarchive.cpp
  type Impacto (line 9) | namespace Impacto {
    type Io (line 10) | namespace Io {
      type MpkMetaEntry (line 14) | struct MpkMetaEntry : FileMeta {
      function IoError (line 24) | IoError MpkArchive::Open(FileMeta* file, Stream** outStream) {
      function IoError (line 44) | IoError MpkArchive::Create(Stream* stream, VfsArchive** outArchive) {

FILE: src/io/mpkarchive.h
  function namespace (line 5) | namespace Impacto {

FILE: src/io/physicalfilestream.cpp
  type Impacto (line 9) | namespace Impacto {
    type Io (line 10) | namespace Io {
      function IoError (line 69) | IoError PhysicalFileStream::Create(std::string const& fileName, Stre...
      function IoError (line 149) | IoError PhysicalFileStream::Duplicate(Stream** outStream) {

FILE: src/io/physicalfilestream.h
  function namespace (line 6) | namespace Impacto {

FILE: src/io/stream.h
  function namespace (line 11) | namespace Impacto {
  function T (line 103) | T ReadLE(InputStream* stream) {
  function ReadArrayLE (line 107) | void ReadArrayLE(T* dest, InputStream* stream) {
  function ReadArrayLE (line 111) | void ReadArrayLE(T* dest, InputStream* stream, size_t count) {
  function T (line 115) | T ReadBE(InputStream* stream) {
  function ReadArrayBE (line 119) | void ReadArrayBE(T* dest, InputStream* stream) {
  function ReadArrayBE (line 123) | void ReadArrayBE(T* dest, InputStream* stream, size_t count) {
  function T (line 128) | T ReadLE(Stream* stream) {
  function ReadArrayLE (line 132) | void ReadArrayLE(T* dest, Stream* stream) {
  function ReadArrayLE (line 136) | void ReadArrayLE(T* dest, Stream* stream, size_t count) {
  function T (line 140) | T ReadBE(Stream* stream) {
  function ReadArrayBE (line 144) | void ReadArrayBE(T* dest, Stream* stream) {
  function ReadArrayBE (line 148) | void ReadArrayBE(T* dest, Stream* stream, size_t count) {
  function ReadVec2LE (line 153) | inline void ReadVec2LE(float* dest, Stream* stream) {
  function ReadVec2LE (line 156) | inline void ReadVec2LE(glm::vec2* dest, Stream* stream) {
  function ReadVec3LE (line 159) | inline void ReadVec3LE(float* dest, Stream* stream) {
  function ReadVec3LE (line 162) | inline void ReadVec3LE(glm::vec3* dest, Stream* stream) {
  function ReadVec4LE (line 165) | inline void ReadVec4LE(float* dest, Stream* stream) {
  function ReadVec4LE (line 168) | inline void ReadVec4LE(glm::vec4* dest, Stream* stream) {
  function ReadMat4LE (line 171) | inline void ReadMat4LE(float* dest, Stream* stream) {
  function ReadMat4LE (line 174) | inline void ReadMat4LE(glm::mat4* dest, Stream* stream) {
  function ReadVec2BE (line 178) | inline void ReadVec2BE(float* dest, Stream* stream) {
  function ReadVec2BE (line 181) | inline void ReadVec2BE(glm::vec2* dest, Stream* stream) {
  function ReadVec3BE (line 184) | inline void ReadVec3BE(float* dest, Stream* stream) {
  function ReadVec3BE (line 187) | inline void ReadVec3BE(glm::vec3* dest, Stream* stream) {
  function ReadVec4BE (line 190) | inline void ReadVec4BE(float* dest, Stream* stream) {
  function ReadVec4BE (line 193) | inline void ReadVec4BE(glm::vec4* dest, Stream* stream) {
  function ReadMat4BE (line 196) | inline void ReadMat4BE(float* dest, Stream* stream) {
  function ReadMat4BE (line 199) | inline void ReadMat4BE(glm::mat4* dest, Stream* stream) {
  function WriteU8 (line 203) | inline void WriteU8(Stream* stream, uint8_t value) { stream->Write(&valu...
  function WriteArrayLE (line 250) | void WriteArrayLE(T* src, InputStream* stream) {
  function WriteArrayLE (line 254) | void WriteArrayLE(T* src, InputStream* stream, size_t count) {
  function WriteArrayBE (line 262) | void WriteArrayBE(T* src, InputStream* stream) {
  function WriteArrayBE (line 266) | void WriteArrayBE(T* src, InputStream* stream, size_t count) {
  function WriteArrayLE (line 275) | void WriteArrayLE(const T* src, Stream* stream) {
  function WriteArrayLE (line 279) | void WriteArrayLE(const T* src, Stream* stream, size_t count) {
  function WriteArrayBE (line 287) | void WriteArrayBE(T* src, Stream* stream) {
  function WriteArrayBE (line 291) | void WriteArrayBE(T* src, Stream* stream, size_t count) {
  function WriteVec2LE (line 296) | inline void WriteVec2LE(float* src, Stream* stream) {
  function WriteVec2LE (line 299) | inline void WriteVec2LE(glm::vec2* src, Stream* stream) {
  function WriteVec3LE (line 302) | inline void WriteVec3LE(float* src, Stream* stream) {
  function WriteVec3LE (line 305) | inline void WriteVec3LE(glm::vec3* src, Stream* stream) {
  function WriteVec4LE (line 308) | inline void WriteVec4LE(float* src, Stream* stream) {
  function WriteVec4LE (line 311) | inline void WriteVec4LE(glm::vec4* src, Stream* stream) {
  function WriteMat4LE (line 314) | inline void WriteMat4LE(float* src, Stream* stream) {
  function WriteMat4LE (line 317) | inline void WriteMat4LE(glm::mat4* src, Stream* stream) {
  function WriteVec2BE (line 321) | inline void WriteVec2BE(float* src, Stream* stream) {
  function WriteVec2BE (line 324) | inline void WriteVec2BE(glm::vec2* src, Stream* stream) {
  function WriteVec3BE (line 327) | inline void WriteVec3BE(float* src, Stream* stream) {
  function WriteVec3BE (line 330) | inline void WriteVec3BE(glm::vec3* src, Stream* stream) {
  function WriteVec4BE (line 333) | inline void WriteVec4BE(float* src, Stream* stream) {
  function WriteVec4BE (line 336) | inline void WriteVec4BE(glm::vec4* src, Stream* stream) {
  function WriteMat4BE (line 339) | inline void WriteMat4BE(float* src, Stream* stream) {
  function WriteMat4BE (line 342) | inline void WriteMat4BE(glm::mat4* src, Stream* stream) {

FILE: src/io/textarchive.cpp
  type Impacto (line 11) | namespace Impacto {
    type Io (line 12) | namespace Io {
      type TextArchiveType (line 14) | enum TextArchiveType { CLS, MLP, TextMPK }
      type TextMetaEntry (line 16) | struct TextMetaEntry : FileMeta {
      function IoError (line 24) | IoError TextArchive::Open(FileMeta* file, Stream** outStream) {
      function IoError (line 36) | IoError TextArchive::GetCurrentSize(FileMeta* file, int64_t& outSize) {
      function IoError (line 50) | IoError TextArchive::Create(Stream* stream, VfsArchive** outArchive) {

FILE: src/io/textarchive.h
  function namespace (line 6) | namespace Impacto {

FILE: src/io/uncompressedstream.cpp
  type Impacto (line 5) | namespace Impacto {
    type Io (line 6) | namespace Io {
      function IoError (line 10) | IoError UncompressedStream::Create(Stream* baseStream, int64_t baseS...
      function IoError (line 56) | IoError UncompressedStream::Duplicate(Stream** outStream) {

FILE: src/io/uncompressedstream.h
  function namespace (line 5) | namespace Impacto {

FILE: src/io/vfs.cpp
  type Impacto (line 22) | namespace Impacto {
    type Io (line 23) | namespace Io {
      function IoError (line 39) | static IoError MountInternal(std::string const& mountpoint, Stream* ...
      function VfsArchive (line 56) | static VfsArchive* FindArchive(std::string const& mountpoint,
      function VfsInit (line 66) | void VfsInit() {
      function IoError (line 76) | IoError VfsMount(std::string const& mountpoint,
      function IoError (line 109) | IoError VfsMountMemory(std::string const& mountpoint,
      function IoError (line 136) | IoError VfsUnmount(std::string const& mountpoint,
      function IoError (line 155) | static IoError GetOrigMetaInternal(std::string const& mountpoint,
      function IoError (line 173) | static IoError GetOrigMetaInternal(std::string const& mountpoint, ui...
      function IoError (line 191) | IoError VfsGetMetaImpl(std::string const& mountpoint, T file,
      function IoError (line 221) | static IoError OpenInternal(std::string const& mountpoint, VfsArchiv...
      function IoError (line 259) | IoError VfsOpenImpl(std::string const& mountpoint, T file, Stream** ...
      function IoError (line 277) | IoError SlurpInternal(VfsArchive* archive, FileMeta* origMeta, void*...
      function IoError (line 319) | IoError VfsSlurpImpl(std::string const& mountpoint, T fileName,
      function IoError (line 331) | IoError VfsListFiles(std::string const& mountpoint,
      function IoError (line 354) | IoError VfsGetMeta(std::string const& mountpoint, std::string const&...
      function IoError (line 358) | IoError VfsGetMeta(std::string const& mountpoint, uint32_t id,
      function IoError (line 362) | IoError VfsOpen(std::string const& mountpoint, std::string const& fi...
      function IoError (line 366) | IoError VfsOpen(std::string const& mountpoint, uint32_t id,
      function IoError (line 370) | IoError VfsSlurp(std::string const& mountpoint, std::string const& f...
      function IoError (line 374) | IoError VfsSlurp(std::string const& mountpoint, uint32_t id, void*& ...

FILE: src/io/vfs.h
  function namespace (line 13) | namespace Impacto {

FILE: src/io/vfsarchive.cpp
  type Impacto (line 3) | namespace Impacto {
    type Io (line 4) | namespace Io {
      function IoError (line 10) | IoError VfsArchive::Slurp(FileMeta* file, void*& outBuffer, int64_t&...
      function IoError (line 14) | IoError VfsArchive::GetCurrentSize(FileMeta* file, int64_t& outSize) {

FILE: src/io/vfsarchive.h
  function namespace (line 7) | namespace Impacto {

FILE: src/io/zlibstream.cpp
  type Impacto (line 5) | namespace Impacto {
    type Io (line 6) | namespace Io {
      function IoError (line 13) | IoError ZlibStream::Create(Stream* baseStream, int64_t compressedOff...
      function IoError (line 89) | IoError ZlibStream::Duplicate(Stream** outStream) {
      function IoError (line 118) | IoError ZlibStream::FillBuffer() {

FILE: src/io/zlibstream.h
  function namespace (line 7) | namespace Impacto {

FILE: src/loadable.h
  function namespace (line 5) | namespace Impacto {

FILE: src/log.cpp
  type Impacto (line 9) | namespace Impacto {
    function CheckLogConfig (line 16) | bool CheckLogConfig(LogLevel level, LogChannel channel) {
    function ConsoleWrite (line 25) | void ConsoleWrite(LogLevel level, std::string_view str) {
    function ImpLogImpl (line 51) | void ImpLogImpl(LogLevel level, LogChannel channel, fmt::string_view f...
    function LogToFile (line 73) | void LogToFile(void* userdata, [[maybe_unused]] int category,
    function SDLLogger (line 84) | void SDLLogger(void* userdata, [[maybe_unused]] int category,
    function SetSDLLogger (line 94) | void SetSDLLogger(SDL_LogOutputFunction loggingFunction) {
    function LogSetFile (line 109) | void LogSetFile(std::string const& path) {
    function LogSetConsole (line 123) | void LogSetConsole(bool enabled) { LoggingToConsole = enabled; }
    function LogInit (line 125) | void LogInit() {

FILE: src/log.h
  function namespace (line 12) | namespace Impacto {

FILE: src/main.cpp
  function GameLoop (line 19) | void GameLoop() {
  function handleArguments (line 39) | static std::string handleArguments(std::vector<std::string_view> args) {
  function main (line 100) | int main(int argc, char* argv[]) {

FILE: src/mask2d.cpp
  type Impacto (line 9) | namespace Impacto {

FILE: src/mask2d.h
  function namespace (line 6) | namespace Impacto {

FILE: src/mem.cpp
  type Impacto (line 3) | namespace Impacto {
    function SetFlag (line 5) | void SetFlag(uint32_t flagId, uint32_t value) {
    function GetFlag (line 16) | bool GetFlag(uint32_t flagId) {

FILE: src/mem.h
  function namespace (line 7) | namespace Impacto {

FILE: src/modelviewer.cpp
  type Impacto (line 15) | namespace Impacto {
    type ModelViewer (line 16) | namespace ModelViewer {
      function Init (line 40) | void Init() {
      function Update (line 71) | void Update(float dt) {
      function EnumerateBgm (line 428) | static void EnumerateBgm() {

FILE: src/modelviewer.h
  function namespace (line 7) | namespace Impacto {

FILE: src/profile/animations.cpp
  type Impacto (line 5) | namespace Impacto {
    type Profile (line 6) | namespace Profile {
      function LoadAnimations (line 8) | void LoadAnimations() {

FILE: src/profile/animations.h
  function namespace (line 7) | namespace Impacto {

FILE: src/profile/charset.cpp
  type Impacto (line 7) | namespace Impacto {
    type Profile (line 8) | namespace Profile {
      type Charset (line 9) | namespace Charset {
        function Load (line 11) | void Load() {

FILE: src/profile/charset.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/configsystem.cpp
  type Impacto (line 5) | namespace Impacto {
    type Profile (line 6) | namespace Profile {
      type ConfigSystem (line 7) | namespace ConfigSystem {
        function Configure (line 9) | void Configure() {
        function ResetToDefault (line 72) | void ResetToDefault() {

FILE: src/profile/configsystem.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/data/achievementsystem.cpp
  type Impacto (line 6) | namespace Impacto {
    type Profile (line 7) | namespace Profile {
      type AchievementSystem (line 8) | namespace AchievementSystem {
        function Configure (line 12) | void Configure() {

FILE: src/profile/data/achievementsystem.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/data/bgeff.cpp
  type Impacto (line 7) | namespace Impacto {
    type Profile (line 8) | namespace Profile {
      type BgEff (line 9) | namespace BgEff {
        function Load (line 11) | void Load() {

FILE: src/profile/data/bgeff.h
  function namespace (line 3) | namespace Impacto {

FILE: src/profile/data/savesystem.cpp
  type Impacto (line 9) | namespace Impacto {
    type Profile (line 10) | namespace Profile {
      type SaveSystem (line 11) | namespace SaveSystem {
        function Configure (line 15) | void Configure() {

FILE: src/profile/data/savesystem.h
  function namespace (line 7) | namespace Impacto {

FILE: src/profile/data/tipssystem.cpp
  type Impacto (line 8) | namespace Impacto {
    type Profile (line 9) | namespace Profile {
      type TipsSystem (line 10) | namespace TipsSystem {
        function Configure (line 14) | void Configure() {

FILE: src/profile/data/tipssystem.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/data/waveeffects.cpp
  type Impacto (line 5) | namespace Impacto {
    type Profile (line 6) | namespace Profile {
      type WaveEffects (line 7) | namespace WaveEffects {
        function Load (line 8) | void Load() {

FILE: src/profile/data/waveeffects.h
  function namespace (line 3) | namespace Impacto {

FILE: src/profile/dialogue.cpp
  type Impacto (line 12) | namespace Impacto {
    type Profile (line 13) | namespace Profile {
      type Dialogue (line 14) | namespace Dialogue {
        function ConfigureNametag (line 16) | static void ConfigureNametag() {
        function Configure (line 57) | void Configure() {

FILE: src/profile/dialogue.h
  function namespace (line 15) | namespace Dialogue {

FILE: src/profile/fonts.cpp
  type Impacto (line 6) | namespace Impacto {
    type Profile (line 7) | namespace Profile {
      function LoadFonts (line 9) | void LoadFonts() {

FILE: src/profile/fonts.h
  function namespace (line 7) | namespace Impacto {

FILE: src/profile/game.cpp
  type Impacto (line 7) | namespace Impacto {
    type Profile (line 8) | namespace Profile {
      function LoadGameFromLua (line 10) | void LoadGameFromLua() {

FILE: src/profile/game.h
  function namespace (line 9) | namespace Impacto {
  function SubtitleConfigType (line 95) | struct magic_enum::customize::enum_range<Impacto::Profile::SubtitleConfi...

FILE: src/profile/games/cc/backlogmenu.cpp
  type Impacto (line 6) | namespace Impacto {
    type Profile (line 7) | namespace Profile {
      type CC (line 8) | namespace CC {
        type BacklogMenu (line 9) | namespace BacklogMenu {
          function Configure (line 11) | void Configure() {

FILE: src/profile/games/cc/backlogmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/cc/dialoguebox.cpp
  type Impacto (line 6) | namespace Impacto {
    type Profile (line 7) | namespace Profile {
      type CC (line 8) | namespace CC {
        type DialogueBox (line 9) | namespace DialogueBox {
          function Configure (line 11) | void Configure() {
          function ConfigureNametag (line 16) | void ConfigureNametag() {

FILE: src/profile/games/cc/dialoguebox.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/cc/sysmesbox.cpp
  type Impacto (line 8) | namespace Impacto {
    type Profile (line 9) | namespace Profile {
      type CC (line 10) | namespace CC {
        type SysMesBox (line 11) | namespace SysMesBox {
          function Configure (line 13) | void Configure() {

FILE: src/profile/games/cc/sysmesbox.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/games/cc/titlemenu.cpp
  type Impacto (line 10) | namespace Impacto {
    type Profile (line 11) | namespace Profile {
      type CC (line 12) | namespace CC {
        type TitleMenu (line 13) | namespace TitleMenu {
          function Configure (line 15) | void Configure() {

FILE: src/profile/games/cc/titlemenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/cclcc/clearlistmenu.cpp
  type Impacto (line 7) | namespace Impacto {
    type Profile (line 8) | namespace Profile {
      type CCLCC (line 9) | namespace CCLCC {
        type ClearListMenu (line 10) | namespace ClearListMenu {
          function Configure (line 12) | void Configure() {

FILE: src/profile/games/cclcc/clearlistmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/cclcc/delusiontrigger.cpp
  type Impacto (line 7) | namespace Impacto {
    type Profile (line 8) | namespace Profile {
      type CCLCC (line 9) | namespace CCLCC {
        type DelusionTrigger (line 10) | namespace DelusionTrigger {
          function Configure (line 12) | void Configure() {}

FILE: src/profile/games/cclcc/delusiontrigger.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/cclcc/helpmenu.cpp
  type Impacto (line 7) | namespace Impacto {
    type Profile (line 8) | namespace Profile {
      type CCLCC (line 9) | namespace CCLCC {
        type HelpMenu (line 10) | namespace HelpMenu {
          function Configure (line 12) | void Configure() {

FILE: src/profile/games/cclcc/helpmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/cclcc/librarymenu.cpp
  type Impacto (line 8) | namespace Impacto {
    type Profile (line 9) | namespace Profile {
      type CCLCC (line 10) | namespace CCLCC {
        type LibraryMenu (line 11) | namespace LibraryMenu {
          function GetAlbumTbl (line 13) | std::vector<AlbumDataEntry> GetAlbumTbl() {
          function Configure (line 59) | void Configure() {

FILE: src/profile/games/cclcc/librarymenu.h
  function namespace (line 9) | namespace CCLCC {

FILE: src/profile/games/cclcc/mapsystem.cpp
  type Impacto (line 8) | namespace Impacto {
    type Profile (line 9) | namespace Profile {
      type CCLCC (line 10) | namespace CCLCC {
        type MapSystem (line 11) | namespace MapSystem {
          function Configure (line 13) | void Configure() {

FILE: src/profile/games/cclcc/mapsystem.h
  function namespace (line 4) | namespace Impacto {

FILE: src/profile/games/cclcc/optionsmenu.cpp
  type Impacto (line 10) | namespace Impacto {
    type Profile (line 11) | namespace Profile {
      type CCLCC (line 12) | namespace CCLCC {
        type OptionsMenu (line 13) | namespace OptionsMenu {
          function Configure (line 15) | void Configure() {

FILE: src/profile/games/cclcc/optionsmenu.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/games/cclcc/savemenu.cpp
  type Impacto (line 10) | namespace Impacto {
    type Profile (line 11) | namespace Profile {
      type CCLCC (line 12) | namespace CCLCC {
        type SaveMenu (line 13) | namespace SaveMenu {
          function Configure (line 15) | void Configure() {

FILE: src/profile/games/cclcc/savemenu.h
  function namespace (line 8) | namespace Impacto {

FILE: src/profile/games/cclcc/systemmenu.cpp
  type Impacto (line 9) | namespace Impacto {
    type Profile (line 10) | namespace Profile {
      type CCLCC (line 11) | namespace CCLCC {
        type SystemMenu (line 12) | namespace SystemMenu {
          function Configure (line 14) | void Configure() {

FILE: src/profile/games/cclcc/systemmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/cclcc/tipsmenu.cpp
  type Impacto (line 11) | namespace Impacto {
    type Profile (line 12) | namespace Profile {
      type CCLCC (line 13) | namespace CCLCC {
        type TipsMenu (line 14) | namespace TipsMenu {
          function Configure (line 16) | void Configure() {

FILE: src/profile/games/cclcc/tipsmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/cclcc/tipsnotification.cpp
  type Impacto (line 5) | namespace Impacto {
    type Profile (line 6) | namespace Profile {
      type CCLCC (line 7) | namespace CCLCC {
        type TipsNotification (line 8) | namespace TipsNotification {
          function Configure (line 10) | void Configure() {

FILE: src/profile/games/cclcc/tipsnotification.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/games/cclcc/titlemenu.cpp
  type Impacto (line 10) | namespace Impacto {
    type Profile (line 11) | namespace Profile {
      type CCLCC (line 12) | namespace CCLCC {
        type TitleMenu (line 13) | namespace TitleMenu {
          function Configure (line 15) | void Configure() {

FILE: src/profile/games/cclcc/titlemenu.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/games/cclcc/yesnotrigger.cpp
  type Impacto (line 6) | namespace Impacto {
    type Profile (line 7) | namespace Profile {
      type CCLCC (line 8) | namespace CCLCC {
        type YesNoTrigger (line 9) | namespace YesNoTrigger {
          function Configure (line 11) | bool Configure() {

FILE: src/profile/games/cclcc/yesnotrigger.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/chlcc/albummenu.cpp
  type Impacto (line 7) | namespace Impacto {
    type Profile (line 8) | namespace Profile {
      type CHLCC (line 9) | namespace CHLCC {
        type AlbumMenu (line 10) | namespace AlbumMenu {
          function Configure (line 12) | void Configure() {

FILE: src/profile/games/chlcc/albummenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/chlcc/backlogmenu.cpp
  type Impacto (line 6) | namespace Impacto {
    type Profile (line 7) | namespace Profile {
      type CHLCC (line 8) | namespace CHLCC {
        type BacklogMenu (line 9) | namespace BacklogMenu {
          function Configure (line 11) | void Configure() {

FILE: src/profile/games/chlcc/backlogmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/chlcc/clearlistmenu.cpp
  type Impacto (line 7) | namespace Impacto {
    type Profile (line 8) | namespace Profile {
      type CHLCC (line 9) | namespace CHLCC {
        type ClearListMenu (line 10) | namespace ClearListMenu {
          function Configure (line 12) | void Configure() {

FILE: src/profile/games/chlcc/clearlistmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/chlcc/commonmenu.cpp
  type Impacto (line 4) | namespace Impacto {
    type Profile (line 5) | namespace Profile {
      type CHLCC (line 6) | namespace CHLCC {
        type CommonMenu (line 7) | namespace CommonMenu {
          function Configure (line 9) | void Configure() {

FILE: src/profile/games/chlcc/commonmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/chlcc/delusiontrigger.cpp
  type Impacto (line 9) | namespace Impacto {
    type Profile (line 10) | namespace Profile {
      type CHLCC (line 11) | namespace CHLCC {
        type DelusionTrigger (line 12) | namespace DelusionTrigger {
          function Configure (line 14) | void Configure() {

FILE: src/profile/games/chlcc/delusiontrigger.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/chlcc/dialoguebox.cpp
  type Impacto (line 7) | namespace Impacto {
    type Profile (line 8) | namespace Profile {
      type CHLCC (line 9) | namespace CHLCC {
        type DialogueBox (line 10) | namespace DialogueBox {
          function Configure (line 12) | void Configure() {
          function ConfigureNametag (line 23) | void ConfigureNametag() {

FILE: src/profile/games/chlcc/dialoguebox.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/chlcc/moviemenu.cpp
  type Impacto (line 8) | namespace Impacto {
    type Profile (line 9) | namespace Profile {
      type CHLCC (line 10) | namespace CHLCC {
        type MovieMenu (line 11) | namespace MovieMenu {
          function Configure (line 13) | void Configure() {

FILE: src/profile/games/chlcc/moviemenu.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/games/chlcc/musicmenu.cpp
  type Impacto (line 7) | namespace Impacto {
    type Profile (line 8) | namespace Profile {
      type CHLCC (line 9) | namespace CHLCC {
        type MusicMenu (line 10) | namespace MusicMenu {
          function Configure (line 12) | void Configure() {

FILE: src/profile/games/chlcc/musicmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/chlcc/optionsmenu.cpp
  type Impacto (line 11) | namespace Impacto {
    type Profile (line 12) | namespace Profile {
      type CHLCC (line 13) | namespace CHLCC {
        type OptionsMenu (line 14) | namespace OptionsMenu {
          function Configure (line 16) | void Configure() {

FILE: src/profile/games/chlcc/optionsmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/chlcc/savemenu.cpp
  type Impacto (line 12) | namespace Impacto {
    type Profile (line 13) | namespace Profile {
      type CHLCC (line 14) | namespace CHLCC {
        type SaveMenu (line 15) | namespace SaveMenu {
          function Configure (line 17) | void Configure() {

FILE: src/profile/games/chlcc/savemenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/chlcc/sysmesbox.cpp
  type Impacto (line 8) | namespace Impacto {
    type Profile (line 9) | namespace Profile {
      type CHLCC (line 10) | namespace CHLCC {
        type SysMesBox (line 11) | namespace SysMesBox {
          function Configure (line 13) | void Configure() {

FILE: src/profile/games/chlcc/sysmesbox.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/games/chlcc/systemmenu.cpp
  type Impacto (line 9) | namespace Impacto {
    type Profile (line 10) | namespace Profile {
      type CHLCC (line 11) | namespace CHLCC {
        type SystemMenu (line 12) | namespace SystemMenu {
          function Configure (line 14) | void Configure() {

FILE: src/profile/games/chlcc/systemmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/chlcc/tipsmenu.cpp
  type Impacto (line 11) | namespace Impacto {
    type Profile (line 12) | namespace Profile {
      type CHLCC (line 13) | namespace CHLCC {
        type TipsMenu (line 14) | namespace TipsMenu {
          function Configure (line 16) | void Configure() {

FILE: src/profile/games/chlcc/tipsmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/chlcc/tipsnotification.cpp
  type Impacto (line 5) | namespace Impacto {
    type Profile (line 6) | namespace Profile {
      type CHLCC (line 7) | namespace CHLCC {
        type TipsNotification (line 8) | namespace TipsNotification {
          function Configure (line 10) | void Configure() {

FILE: src/profile/games/chlcc/tipsnotification.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/chlcc/titlemenu.cpp
  type Impacto (line 10) | namespace Impacto {
    type Profile (line 11) | namespace Profile {
      type CHLCC (line 12) | namespace CHLCC {
        type TitleMenu (line 13) | namespace TitleMenu {
          function Configure (line 15) | void Configure() {

FILE: src/profile/games/chlcc/titlemenu.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/games/chlcc/trophymenu.cpp
  type Impacto (line 12) | namespace Impacto {
    type Profile (line 13) | namespace Profile {
      type CHLCC (line 14) | namespace CHLCC {
        type TrophyMenu (line 15) | namespace TrophyMenu {
          function Configure (line 17) | void Configure() {

FILE: src/profile/games/chlcc/trophymenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/darling/sysmesbox.cpp
  type Impacto (line 8) | namespace Impacto {
    type Profile (line 9) | namespace Profile {
      type Darling (line 10) | namespace Darling {
        type SysMesBox (line 11) | namespace SysMesBox {
          function Configure (line 13) | void Configure() {

FILE: src/profile/games/darling/sysmesbox.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/games/dash/titlemenu.cpp
  type Impacto (line 9) | namespace Impacto {
    type Profile (line 10) | namespace Profile {
      type Dash (line 11) | namespace Dash {
        type TitleMenu (line 12) | namespace TitleMenu {
          function Configure (line 14) | void Configure() {

FILE: src/profile/games/dash/titlemenu.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/games/mo6tw/actorsvoicemenu.cpp
  type Impacto (line 9) | namespace Impacto {
    type Profile (line 10) | namespace Profile {
      type MO6TW (line 11) | namespace MO6TW {
        type ActorsVoiceMenu (line 12) | namespace ActorsVoiceMenu {
          function Configure (line 14) | void Configure() {

FILE: src/profile/games/mo6tw/actorsvoicemenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/mo6tw/albummenu.cpp
  type Impacto (line 9) | namespace Impacto {
    type Profile (line 10) | namespace Profile {
      type MO6TW (line 11) | namespace MO6TW {
        type AlbumMenu (line 12) | namespace AlbumMenu {
          function Configure (line 14) | void Configure() {

FILE: src/profile/games/mo6tw/albummenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/mo6tw/backlogmenu.cpp
  type Impacto (line 6) | namespace Impacto {
    type Profile (line 7) | namespace Profile {
      type MO6TW (line 8) | namespace MO6TW {
        type BacklogMenu (line 9) | namespace BacklogMenu {
          function Configure (line 11) | void Configure() {

FILE: src/profile/games/mo6tw/backlogmenu.h
  function namespace (line 3) | namespace Impacto {

FILE: src/profile/games/mo6tw/clearlistmenu.cpp
  type Impacto (line 8) | namespace Impacto {
    type Profile (line 9) | namespace Profile {
      type MO6TW (line 10) | namespace MO6TW {
        type ClearListMenu (line 11) | namespace ClearListMenu {
          function Configure (line 13) | void Configure() {

FILE: src/profile/games/mo6tw/clearlistmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/mo6tw/dialoguebox.cpp
  type Impacto (line 4) | namespace Impacto {
    type Profile (line 5) | namespace Profile {
      type MO6TW (line 6) | namespace MO6TW {
        type DialogueBox (line 7) | namespace DialogueBox {
          function Configure (line 9) | void Configure() {

FILE: src/profile/games/mo6tw/dialoguebox.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/mo6tw/moviemenu.cpp
  type Impacto (line 10) | namespace Impacto {
    type Profile (line 11) | namespace Profile {
      type MO6TW (line 12) | namespace MO6TW {
        type MovieMenu (line 13) | namespace MovieMenu {
          function Configure (line 15) | void Configure() {

FILE: src/profile/games/mo6tw/moviemenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/mo6tw/musicmenu.cpp
  type Impacto (line 11) | namespace Impacto {
    type Profile (line 12) | namespace Profile {
      type MO6TW (line 13) | namespace MO6TW {
        type MusicMenu (line 14) | namespace MusicMenu {
          function Configure (line 16) | void Configure() {

FILE: src/profile/games/mo6tw/musicmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/mo6tw/optionsmenu.cpp
  type Impacto (line 10) | namespace Impacto {
    type Profile (line 11) | namespace Profile {
      type MO6TW (line 12) | namespace MO6TW {
        type OptionsMenu (line 13) | namespace OptionsMenu {
          function Configure (line 15) | void Configure() {

FILE: src/profile/games/mo6tw/optionsmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/mo6tw/savemenu.cpp
  type Impacto (line 10) | namespace Impacto {
    type Profile (line 11) | namespace Profile {
      type MO6TW (line 12) | namespace MO6TW {
        type SaveMenu (line 13) | namespace SaveMenu {
          function Configure (line 15) | void Configure() {

FILE: src/profile/games/mo6tw/savemenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/mo6tw/sysmesbox.cpp
  type Impacto (line 8) | namespace Impacto {
    type Profile (line 9) | namespace Profile {
      type MO6TW (line 10) | namespace MO6TW {
        type SysMesBox (line 11) | namespace SysMesBox {
          function Configure (line 13) | void Configure() {

FILE: src/profile/games/mo6tw/sysmesbox.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/games/mo6tw/systemmenu.cpp
  type Impacto (line 10) | namespace Impacto {
    type Profile (line 11) | namespace Profile {
      type MO6TW (line 12) | namespace MO6TW {
        type SystemMenu (line 13) | namespace SystemMenu {
          function Configure (line 15) | void Configure() {

FILE: src/profile/games/mo6tw/systemmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/mo6tw/tipsmenu.cpp
  type Impacto (line 12) | namespace Impacto {
    type Profile (line 13) | namespace Profile {
      type MO6TW (line 14) | namespace MO6TW {
        type TipsMenu (line 15) | namespace TipsMenu {
          function Configure (line 17) | void Configure() {

FILE: src/profile/games/mo6tw/tipsmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/mo6tw/tipsnotification.cpp
  type Impacto (line 5) | namespace Impacto {
    type Profile (line 6) | namespace Profile {
      type MO6TW (line 7) | namespace MO6TW {
        type TipsNotification (line 8) | namespace TipsNotification {
          function Configure (line 10) | void Configure() {

FILE: src/profile/games/mo6tw/tipsnotification.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/mo6tw/titlemenu.cpp
  type Impacto (line 10) | namespace Impacto {
    type Profile (line 11) | namespace Profile {
      type MO6TW (line 12) | namespace MO6TW {
        type TitleMenu (line 13) | namespace TitleMenu {
          function Configure (line 15) | void Configure() {

FILE: src/profile/games/mo6tw/titlemenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/mo8/optionsmenu.cpp
  type Impacto (line 10) | namespace Impacto {
    type Profile (line 11) | namespace Profile {
      type MO8 (line 12) | namespace MO8 {
        type OptionsMenu (line 13) | namespace OptionsMenu {
          function Configure (line 15) | void Configure() {

FILE: src/profile/games/mo8/optionsmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/mo8/savemenu.cpp
  type Impacto (line 10) | namespace Impacto {
    type Profile (line 11) | namespace Profile {
      type MO8 (line 12) | namespace MO8 {
        type SaveMenu (line 13) | namespace SaveMenu {
          function Configure (line 15) | void Configure() {

FILE: src/profile/games/mo8/savemenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/mo8/systemmenu.cpp
  type Impacto (line 10) | namespace Impacto {
    type Profile (line 11) | namespace Profile {
      type MO8 (line 12) | namespace MO8 {
        type SystemMenu (line 13) | namespace SystemMenu {
          function Configure (line 15) | void Configure() {

FILE: src/profile/games/mo8/systemmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/mo8/titlemenu.cpp
  type Impacto (line 9) | namespace Impacto {
    type Profile (line 10) | namespace Profile {
      type MO8 (line 11) | namespace MO8 {
        type TitleMenu (line 12) | namespace TitleMenu {
          function Configure (line 14) | void Configure() {

FILE: src/profile/games/mo8/titlemenu.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/games/rne/sysmesbox.cpp
  type Impacto (line 8) | namespace Impacto {
    type Profile (line 9) | namespace Profile {
      type RNE (line 10) | namespace RNE {
        type SysMesBox (line 11) | namespace SysMesBox {
          function Configure (line 13) | void Configure() {

FILE: src/profile/games/rne/sysmesbox.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/games/rne/systemmenu.cpp
  type Impacto (line 10) | namespace Impacto {
    type Profile (line 11) | namespace Profile {
      type RNE (line 12) | namespace RNE {
        type SystemMenu (line 13) | namespace SystemMenu {
          function Configure (line 15) | void Configure() {

FILE: src/profile/games/rne/systemmenu.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/games/rne/tilebackground.cpp
  type Impacto (line 4) | namespace Impacto {
    type Profile (line 5) | namespace Profile {
      type RNE (line 6) | namespace RNE {

FILE: src/profile/games/rne/tilebackground.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/games/rne/titlemenu.cpp
  type Impacto (line 10) | namespace Impacto {
    type Profile (line 11) | namespace Profile {
      type RNE (line 12) | namespace RNE {
        type TitleMenu (line 13) | namespace TitleMenu {
          function Configure (line 15) | void Configure() {

FILE: src/profile/games/rne/titlemenu.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/hud/datedisplay.cpp
  type Impacto (line 7) | namespace Impacto {
    type Profile (line 8) | namespace Profile {
      type DateDisplay (line 9) | namespace DateDisplay {
        function Configure (line 15) | void Configure() {

FILE: src/profile/hud/datedisplay.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/hud/loadingdisplay.cpp
  type Impacto (line 4) | namespace Impacto {
    type Profile (line 5) | namespace Profile {
      type LoadingDisplay (line 6) | namespace LoadingDisplay {
        function Configure (line 8) | void Configure() {

FILE: src/profile/hud/loadingdisplay.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/hud/saveicon.cpp
  type Impacto (line 4) | namespace Impacto {
    type Profile (line 5) | namespace Profile {
      type SaveIcon (line 6) | namespace SaveIcon {
        function Configure (line 8) | void Configure() {

FILE: src/profile/hud/saveicon.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/hud/tipsnotification.cpp
  type Impacto (line 10) | namespace Impacto {
    type Profile (line 11) | namespace Profile {
      type TipsNotification (line 12) | namespace TipsNotification {
        function Configure (line 18) | void Configure() {
        function CreateInstance (line 50) | void CreateInstance() {

FILE: src/profile/hud/tipsnotification.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/profile.cpp
  type Impacto (line 26) | namespace Impacto {
    type Profile (line 27) | namespace Profile {
      function LuaPrint (line 31) | static int LuaPrint(lua_State* ctx) {
      function LuaInclude (line 37) | static int LuaInclude(lua_State* ctx) {
      function DefineEnum (line 109) | static void DefineEnum(lua_State* ctx) {
      function MakeLuaProfile (line 124) | void MakeLuaProfile(std::string const& name) {
      function ClearProfile (line 244) | void ClearProfile() { ClearProfileInternal(); }

FILE: src/profile/profile.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/profile_internal.cpp
  type Impacto (line 9) | namespace Impacto {
    type Profile (line 10) | namespace Profile {
      function LuaDumpStack (line 12) | void LuaDumpStack() {
      function Pop (line 44) | void Pop() { lua_pop(LuaState, 1); }
      function TryPushMember (line 46) | bool TryPushMember(char const* name) {
      function EnsurePushMember (line 54) | void EnsurePushMember(char const* name) {
      function EnsurePushMemberOfType (line 63) | void EnsurePushMemberOfType(char const* name, int type) {
      function AssertIs (line 68) | void AssertIs(int type) {
      function PushInitialIndex (line 78) | void PushInitialIndex() { lua_pushnil(LuaState); }
      function PushNextTableElement (line 80) | int PushNextTableElement() { return lua_next(LuaState, -2); }
      function ClearProfileInternal (line 123) | void ClearProfileInternal() {

FILE: src/profile/profile_internal.h
  function std (line 38) | static std::optional<T> Call() {
  function T (line 153) | T EnsureGet() {
  function T (line 166) | T EnsureGetKey() {
  function T (line 189) | inline T EnsureGetKey() {
  function TryGetMember (line 213) | bool TryGetMember(char const* name, T& out) {
  function T (line 229) | T EnsureGetMember(char const* name) {
  function T (line 237) | T EnsureGetArrayElement() {
  function T (line 242) | T EnsureGetArrayElementByIndex(uint32_t index) {
  function std (line 262) | inline std::optional<T> TryGet() {
  function T (line 279) | T outNumber{}
  function makeOptVec (line 354) | const auto makeOptVec = [&]<std::size_t... I>(std::index_sequence<I...>) {
  function toPair (line 367) | const auto toPair = [](std::optional<TupleType>&& opt) -> std::optional<...
  function std (line 380) | inline std::optional<T> TryGet() {
  function i (line 450) | [[maybe_unused]] size_t i) {
  function std (line 466) | inline std::optional<T> TryGet() {
  function errorHandler (line 490) | auto errorHandler = [](std::string error) {
  function i (line 497) | [[maybe_unused]] size_t i) {
  function AssetPath (line 533) | struct TryGetImpl<Io::AssetPath> {
  function RectF (line 538) | struct TryGetImpl<RectF> {
  function bool (line 542) | struct TryGetImpl<bool> {
  function DialogueColorPair (line 547) | struct TryGetImpl<DialogueColorPair> {
  function GetArray (line 552) | void GetArray(std::span<T> out) {
  function GetMemberArray (line 566) | void GetMemberArray(std::span<T> out, char const* name) {
  function ForEachProfileArray (line 572) | inline void ForEachProfileArray(std::invocable<uint32_t> auto func) {
  function ForEachProfileTable (line 583) | void ForEachProfileTable(std::invocable<K const&> auto func) {

FILE: src/profile/scene3d.cpp
  type Impacto (line 4) | namespace Impacto {
    type Profile (line 5) | namespace Profile {
      type Scene3D (line 6) | namespace Scene3D {
        function Configure (line 8) | void Configure() {

FILE: src/profile/scene3d.h
  function namespace (line 8) | namespace Impacto {

FILE: src/profile/scriptinput.cpp
  type Impacto (line 6) | namespace Impacto {
    type Profile (line 7) | namespace Profile {
      type TryGetImpl<ScriptInput::KeyboardPadMapping> (line 10) | struct TryGetImpl<ScriptInput::KeyboardPadMapping> {
        method Call (line 11) | static std::optional<ScriptInput::KeyboardPadMapping> Call() {
      type TryGetImpl<ScriptInput::InputAxisDir> (line 25) | struct TryGetImpl<ScriptInput::InputAxisDir> {
        method Call (line 26) | static std::optional<ScriptInput::InputAxisDir> Call() {
      type ScriptInput (line 34) | namespace ScriptInput {
        function Configure (line 37) | void Configure() {

FILE: src/profile/scriptinput.h
  function namespace (line 7) | namespace Impacto {

FILE: src/profile/scriptvars.cpp
  type Impacto (line 4) | namespace Impacto {
    type Profile (line 5) | namespace Profile {
      type ScriptVars (line 6) | namespace ScriptVars {
        function Configure (line 9) | void Configure() {

FILE: src/profile/scriptvars.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/sprites.cpp
  type Impacto (line 9) | namespace Impacto {
    type Profile (line 10) | namespace Profile {
      function Texture (line 12) | static Texture LoadTexture(Io::Stream* stream, std::string name) {
      function LoadSpritesheets (line 26) | void LoadSpritesheets() {

FILE: src/profile/sprites.h
  function namespace (line 7) | namespace Impacto {

FILE: src/profile/subtitle.cpp
  type Impacto::Profile (line 6) | namespace Impacto::Profile {
    type TryGetImpl<Subtitle::SubtitleTrackFile> (line 8) | struct TryGetImpl<Subtitle::SubtitleTrackFile> {
      method Call (line 9) | static std::optional<Subtitle::SubtitleTrackFile> Call() {
  type Impacto::Profile::Subtitle (line 29) | namespace Impacto::Profile::Subtitle {
    function Configure (line 30) | void Configure() {

FILE: src/profile/subtitle.h
  function namespace (line 7) | namespace Impacto::Profile::Subtitle {

FILE: src/profile/ui/backlogmenu.cpp
  type Impacto (line 13) | namespace Impacto {
    type Profile (line 14) | namespace Profile {
      type BacklogMenu (line 15) | namespace BacklogMenu {
        function Configure (line 19) | void Configure() {

FILE: src/profile/ui/backlogmenu.h
  function namespace (line 9) | namespace BacklogMenu {

FILE: src/profile/ui/commonmenu.cpp
  type Impacto (line 6) | namespace Impacto {
    type Profile (line 7) | namespace Profile {
      type CommonMenu (line 8) | namespace CommonMenu {
        function Configure (line 10) | void Configure() {

FILE: src/profile/ui/commonmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/ui/extramenus.cpp
  type Impacto (line 16) | namespace Impacto {
    type Profile (line 17) | namespace Profile {
      type ExtraMenus (line 18) | namespace ExtraMenus {
        function Configure (line 22) | void Configure() {

FILE: src/profile/ui/extramenus.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/ui/gamespecific.cpp
  type Impacto (line 10) | namespace Impacto {
    type Profile (line 11) | namespace Profile {
      type GameSpecific (line 12) | namespace GameSpecific {
        function Configure (line 16) | void Configure() {

FILE: src/profile/ui/gamespecific.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/ui/helpmenu.cpp
  type Impacto (line 7) | namespace Impacto {
    type Profile (line 8) | namespace Profile {
      type HelpMenu (line 9) | namespace HelpMenu {
        function Configure (line 13) | void Configure() {

FILE: src/profile/ui/helpmenu.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/ui/mapsystem.cpp
  type Impacto (line 8) | namespace Impacto {
    type Profile (line 9) | namespace Profile {
      type MapSystem (line 10) | namespace MapSystem {
        function Configure (line 12) | void Configure() {
        function CreateInstance (line 18) | void CreateInstance() {

FILE: src/profile/ui/mapsystem.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/ui/optionsmenu.cpp
  type Impacto (line 10) | namespace Impacto {
    type Profile (line 11) | namespace Profile {
      type OptionsMenu (line 12) | namespace OptionsMenu {
        function Configure (line 16) | void Configure() {

FILE: src/profile/ui/optionsmenu.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/ui/savemenu.cpp
  type Impacto (line 9) | namespace Impacto {
    type Profile (line 10) | namespace Profile {
      type SaveMenu (line 11) | namespace SaveMenu {
        function Configure (line 15) | void Configure() {

FILE: src/profile/ui/savemenu.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/ui/selectionmenu.cpp
  type Impacto (line 8) | namespace Impacto {
    type Profile (line 9) | namespace Profile {
      type SelectionMenu (line 10) | namespace SelectionMenu {
        function Configure (line 12) | void Configure() {

FILE: src/profile/ui/selectionmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/profile/ui/sysmesbox.cpp
  type Impacto (line 10) | namespace Impacto {
    type Profile (line 11) | namespace Profile {
      type SysMesBox (line 12) | namespace SysMesBox {
        function Configure (line 16) | void Configure() {

FILE: src/profile/ui/sysmesbox.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/ui/systemmenu.cpp
  type Impacto (line 13) | namespace Impacto {
    type Profile (line 14) | namespace Profile {
      type SystemMenu (line 15) | namespace SystemMenu {
        function Configure (line 19) | void Configure() {

FILE: src/profile/ui/systemmenu.h
  function namespace (line 7) | namespace Impacto {

FILE: src/profile/ui/tipsmenu.cpp
  type Impacto (line 9) | namespace Impacto {
    type Profile (line 10) | namespace Profile {
      type TipsMenu (line 11) | namespace TipsMenu {
        function Configure (line 15) | void Configure() {

FILE: src/profile/ui/tipsmenu.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/ui/titlemenu.cpp
  type Impacto (line 13) | namespace Impacto {
    type Profile (line 14) | namespace Profile {
      type TitleMenu (line 15) | namespace TitleMenu {
        function Configure (line 19) | void Configure() {

FILE: src/profile/ui/titlemenu.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/ui/trophymenu.cpp
  type Impacto (line 7) | namespace Impacto {
    type Profile (line 8) | namespace Profile {
      type TrophyMenu (line 9) | namespace TrophyMenu {
        function Configure (line 13) | void Configure() {

FILE: src/profile/ui/trophymenu.h
  function namespace (line 6) | namespace Impacto {

FILE: src/profile/vfs.cpp
  type Impacto (line 5) | namespace Impacto {
    type Profile (line 6) | namespace Profile {
      type Vfs (line 7) | namespace Vfs {
        function Configure (line 8) | void Configure() {

FILE: src/profile/vfs.h
  function namespace (line 3) | namespace Impacto {

FILE: src/profile/vm.cpp
  type Impacto (line 5) | namespace Impacto {
    type Profile (line 6) | namespace Profile {
      type Vm (line 7) | namespace Vm {
        function Configure (line 9) | void Configure() {

FILE: src/profile/vm.h
  function namespace (line 6) | namespace Impacto {

FILE: src/renderer/3d/animation.cpp
  type Impacto (line 10) | namespace Impacto {
    type TargetType (line 21) | enum TargetType {
    type SubTrackType (line 27) | enum SubTrackType {
    type Target (line 42) | struct Target {
    function Target (line 48) | Target GetTarget(Stream* stream, Model* model) {
    function ModelAnimation (line 77) | ModelAnimation* ModelAnimation::Load(Stream* stream, Model* model,

FILE: src/renderer/3d/animation.h
  function namespace (line 7) | namespace Impacto {

FILE: src/renderer/3d/camera.cpp
  type Impacto (line 10) | namespace Impacto {

FILE: src/renderer/3d/camera.h
  function namespace (line 7) | namespace Impacto {

FILE: src/renderer/3d/model.cpp
  type Impacto (line 16) | namespace Impacto {
    function AnimationIsBlacklisted (line 30) | bool AnimationIsBlacklisted(uint32_t modelId, int16_t animId) {
    function IoError (line 86) | static IoError GetModelMountpoint(uint32_t modelId,
    function IoError (line 104) | static IoError MountModel(uint32_t modelId, std::string& outMountpoint) {
    function UnmountModel (line 139) | static void UnmountModel(uint32_t modelId) {
    function IoError (line 154) | static IoError SlurpModel(uint32_t modelId, void*& outMemory,
    function IoError (line 166) | static IoError SlurpAnim(uint32_t modelId, int16_t animId, void*& outM...
    function Model (line 191) | Model* Model::Load(uint32_t modelId) {
    function Model (line 626) | Model* Model::MakePlane() {

FILE: src/renderer/3d/model.h
  function namespace (line 16) | namespace Impacto {

FILE: src/renderer/3d/modelanimator.cpp
  type Impacto (line 5) | namespace Impacto {

FILE: src/renderer/3d/modelanimator.h
  function namespace (line 5) | namespace Impacto {

FILE: src/renderer/3d/renderable3d.h
  function namespace (line 8) | namespace Impacto {

FILE: src/renderer/3d/scene.h
  function namespace (line 8) | namespace Impacto {

FILE: src/renderer/3d/transform.cpp
  type Impacto (line 8) | namespace Impacto {
    function Transform (line 27) | Transform Transform::Interpolate(Transform next, float factor) {

FILE: src/renderer/3d/transform.h
  function namespace (line 5) | namespace Impacto {

FILE: src/renderer/dx9/3d/renderable3d.cpp
  type Impacto (line 12) | namespace Impacto {
    type DirectX9 (line 13) | namespace DirectX9 {

FILE: src/renderer/dx9/3d/renderable3d.h
  function namespace (line 12) | namespace Impacto {

FILE: src/renderer/dx9/3d/scene.cpp
  type Impacto (line 10) | namespace Impacto {
    type DirectX9 (line 11) | namespace DirectX9 {

FILE: src/renderer/dx9/3d/scene.h
  function namespace (line 9) | namespace Impacto {

FILE: src/renderer/dx9/nv12frame.cpp
  type Impacto (line 5) | namespace Impacto {
    type DirectX9 (line 6) | namespace DirectX9 {

FILE: src/renderer/dx9/nv12frame.h
  function namespace (line 7) | namespace Impacto {

FILE: src/renderer/dx9/renderer.cpp
  type Impacto (line 16) | namespace Impacto {
    type DirectX9 (line 17) | namespace DirectX9 {
      function YUVFrame (line 262) | YUVFrame* Renderer::CreateYUVFrame(float width, float height) {
      function NV12Frame (line 268) | NV12Frame* Renderer::CreateNV12Frame(float width, float height) {

FILE: src/renderer/dx9/renderer.h
  function namespace (line 11) | namespace Impacto {

FILE: src/renderer/dx9/shader.cpp
  type Impacto (line 8) | namespace Impacto {
    type DirectX9 (line 9) | namespace DirectX9 {

FILE: src/renderer/dx9/shader.h
  function namespace (line 6) | namespace Impacto {

FILE: src/renderer/dx9/utils.h
  function namespace (line 7) | namespace Impacto {

FILE: src/renderer/dx9/window.cpp
  type Impacto (line 15) | namespace Impacto {
    type DirectX9 (line 16) | namespace DirectX9 {
      function RectF (line 42) | RectF DirectX9Window::GetViewport() {
      function RectF (line 53) | RectF DirectX9Window::GetScaledViewport() {

FILE: src/renderer/dx9/window.h
  function namespace (line 5) | namespace Impacto {

FILE: src/renderer/dx9/yuvframe.cpp
  type Impacto (line 5) | namespace Impacto {
    type DirectX9 (line 6) | namespace DirectX9 {

FILE: src/renderer/dx9/yuvframe.h
  function namespace (line 7) | namespace Impacto {

FILE: src/renderer/nv12frame.h
  function namespace (line 5) | namespace Impacto {

FILE: src/renderer/opengl/3d/renderable3d.cpp
  type Impacto (line 11) | namespace Impacto {
    type OpenGL (line 12) | namespace OpenGL {
      type SceneUniform (line 14) | enum SceneUniform {
      type ModelUniform (line 22) | enum ModelUniform { MU_Model = 0, MU_Count = 1 }
      type MeshUniform (line 23) | enum MeshUniform {

FILE: src/renderer/opengl/3d/renderable3d.h
  function namespace (line 8) | namespace Impacto {

FILE: src/renderer/opengl/3d/scene.cpp
  type Impacto (line 11) | namespace Impacto {
    type OpenGL (line 12) | namespace OpenGL {
      function MSResolveMode (line 330) | MSResolveMode Scene3D::CheckMSResolveMode() {

FILE: src/renderer/opengl/3d/scene.h
  function namespace (line 10) | namespace Impacto {

FILE: src/renderer/opengl/glc.cpp
  type Impacto (line 5) | namespace Impacto {
    type GLC (line 6) | namespace GLC {
      function InitializeFramebuffers (line 11) | void InitializeFramebuffers() {
      function BindFramebuffer (line 45) | void BindFramebuffer(GLenum target, GLuint framebuffer) {
      function DeleteFramebuffers (line 74) | void DeleteFramebuffers(GLsizei n, GLuint const* framebuffers) {

FILE: src/renderer/opengl/glc.h
  function namespace (line 8) | namespace Impacto {

FILE: src/renderer/opengl/nv12frame.cpp
  type Impacto (line 6) | namespace Impacto {
    type OpenGL (line 7) | namespace OpenGL {

FILE: src/renderer/opengl/nv12frame.h
  function namespace (line 5) | namespace Impacto {

FILE: src/renderer/opengl/renderer.cpp
  type Impacto (line 17) | namespace Impacto {
    type OpenGL (line 18) | namespace OpenGL {
      function CornersQuad (line 20) | static CornersQuad FlipUvVertical(CornersQuad quad) {
      function YUVFrame (line 261) | YUVFrame* Renderer::CreateYUVFrame(float width, float height) {
      function NV12Frame (line 267) | NV12Frame* Renderer::CreateNV12Frame(float width, float height) {

FILE: src/renderer/opengl/renderer.h
  function namespace (line 13) | namespace Impacto {

FILE: src/renderer/opengl/shader.cpp
  type Impacto (line 12) | namespace Impacto {
    type OpenGL (line 13) | namespace OpenGL {
      function GLuint (line 93) | GLuint ShaderCompiler::Attach(GLuint program, GLenum shaderType,
      function GLuint (line 154) | GLuint ShaderCompiler::Compile(char const* name, ShaderParamMap cons...

FILE: src/renderer/opengl/shader.h
  function namespace (line 9) | namespace Impacto {
  function class (line 130) | class AdditiveMaskedSpriteShader : public Shader<AdditiveMaskedSpriteUni...
  type SpriteUniforms (line 145) | struct SpriteUniforms
  function class (line 155) | class SpriteShader : public Shader<SpriteUniforms> {
  type SpriteInvertedUniforms (line 169) | struct SpriteInvertedUniforms
  function class (line 178) | class SpriteInvertedShader : public Shader<SpriteInvertedUniforms> {
  type YUVFrameUniforms (line 191) | struct YUVFrameUniforms
  function class (line 202) | class YUVFrameShader : public Shader<YUVFrameUniforms> {
  type MaskedSpriteNoAlphaUniforms (line 217) | struct MaskedSpriteNoAlphaUniforms
  function class (line 230) | class MaskedSpriteNoAlphaShader : public Shader<MaskedSpriteNoAlphaUnifo...
  type MaskedSpriteUniforms (line 247) | struct MaskedSpriteUniforms
  function class (line 261) | class MaskedSpriteShader : public Shader<MaskedSpriteUniforms> {
  type MaskedSpriteBinaryUniforms (line 279) | struct MaskedSpriteBinaryUniforms
  function class (line 292) | class MaskedSpriteBinaryShader : public Shader<MaskedSpriteBinaryUniform...
  type ColorBurnMaskedSpriteUniforms (line 309) | struct ColorBurnMaskedSpriteUniforms
  function class (line 320) | class ColorBurnMaskedSpriteShader
  type ColorDodgeMaskedSpriteUniforms (line 336) | struct ColorDodgeMaskedSpriteUniforms
  function class (line 347) | class ColorDodgeMaskedSpriteShader
  type ColorMaskedSpriteUniforms (line 363) | struct ColorMaskedSpriteUniforms
  function class (line 374) | class ColorMaskedSpriteShader : public Shader<ColorMaskedSpriteUniforms> {
  type HardLightMaskedSpriteUniforms (line 389) | struct HardLightMaskedSpriteUniforms
  function class (line 400) | class HardLightMaskedSpriteShader
  type LinearBurnMaskedSpriteUniforms (line 416) | struct LinearBurnMaskedSpriteUniforms
  function class (line 427) | class LinearBurnMaskedSpriteShader
  type OverlayMaskedSpriteUniforms (line 443) | struct OverlayMaskedSpriteUniforms
  function class (line 454) | class OverlayMaskedSpriteShader : public Shader<OverlayMaskedSpriteUnifo...
  type ScreenMaskedSpriteUniforms (line 469) | struct ScreenMaskedSpriteUniforms
  function class (line 480) | class ScreenMaskedSpriteShader : public Shader<ScreenMaskedSpriteUniform...
  type SoftLightMaskedSpriteUniforms (line 495) | struct SoftLightMaskedSpriteUniforms
  function class (line 506) | class SoftLightMaskedSpriteShader
  type CCMessageBoxUniforms (line 522) | struct CCMessageBoxUniforms
  function class (line 532) | class CCMessageBoxShader : public Shader<CCMessageBoxUniforms> {
  type CHLCCMenuBackgroundUniforms (line 546) | struct CHLCCMenuBackgroundUniforms
  function class (line 556) | class CHLCCMenuBackgroundShader : public Shader<CHLCCMenuBackgroundUnifo...
  type GaussianBlurUniforms (line 570) | struct GaussianBlurUniforms
  function class (line 581) | class GaussianBlurShader : public Shader<GaussianBlurUniforms> {
  type MosaicUniforms (line 596) | struct MosaicUniforms
  function class (line 607) | class MosaicShader : public Shader<MosaicUniforms> {
  type SubtitleGlyphUniforms (line 622) | struct SubtitleGlyphUniforms
  function class (line 631) | class SubtitleGlyphShader : public Shader<SubtitleGlyphUniforms> {
  type NV12FrameUniforms (line 644) | struct NV12FrameUniforms
  function class (line 654) | class NV12FrameShader : public Shader<NV12FrameUniforms> {

FILE: src/renderer/opengl/window.cpp
  type Impacto (line 19) | namespace Impacto {
    type OpenGL (line 20) | namespace OpenGL {
      function RectF (line 46) | RectF GLWindow::GetViewport() {
      function RectF (line 57) | RectF GLWindow::GetScaledViewport() {

FILE: src/renderer/opengl/window.h
  function namespace (line 5) | namespace Impacto {

FILE: src/renderer/opengl/yuvframe.cpp
  type Impacto (line 6) | namespace Impacto {
    type OpenGL (line 7) | namespace OpenGL {

FILE: src/renderer/opengl/yuvframe.h
  function namespace (line 5) | namespace Impacto {

FILE: src/renderer/renderer.cpp
  type Impacto (line 18) | namespace Impacto {
    function InitRenderer (line 20) | void InitRenderer() {
    function InsertQuad (line 46) | static void InsertQuad(const std::span<VertexBufferSprites, 4> vertices,
    function GetVisibleGlyphIds (line 177) | static std::vector<size_t> GetVisibleGlyphIds(

FILE: src/renderer/renderer.h
  function namespace (line 12) | namespace Impacto {
  function DrawConvexShape (line 337) | void DrawConvexShape(std::span<const glm::vec2> vertices, glm::vec4 colo...
  function DrawSubtitleGlyph (line 395) | void DrawSubtitleGlyph(const Sprite& sprite, glm::vec2 topLeft,
  function QuadSetUVFlipped (line 426) | static void QuadSetUVFlipped(CornersQuad spriteBounds,
  function virtual (line 436) | virtual glm::vec2 DesignToNDC(glm::vec2 designCoord) const {

FILE: src/renderer/vulkan/3d/renderable3d.cpp
  type Impacto (line 11) | namespace Impacto {
    type Vulkan (line 12) | namespace Vulkan {

FILE: src/renderer/vulkan/3d/renderable3d.h
  function namespace (line 8) | namespace Impacto {

FILE: src/renderer/vulkan/3d/scene.cpp
  type Impacto (line 9) | namespace Impacto {
    type Vulkan (line 10) | namespace Vulkan {

FILE: src/renderer/vulkan/3d/scene.h
  function namespace (line 9) | namespace Impacto {

FILE: src/renderer/vulkan/nv12frame.cpp
  type Impacto (line 3) | namespace Impacto {
    type Vulkan (line 4) | namespace Vulkan {

FILE: src/renderer/vulkan/nv12frame.h
  function namespace (line 8) | namespace Impacto {

FILE: src/renderer/vulkan/pipeline.cpp
  type Impacto (line 9) | namespace Impacto {
    type Vulkan (line 10) | namespace Vulkan {
      function VkShaderModule (line 218) | VkShaderModule Pipeline::CreateShaderModule(char const* code, size_t...

FILE: src/renderer/vulkan/pipeline.h
  function namespace (line 5) | namespace Impacto {

FILE: src/renderer/vulkan/renderer.cpp
  type Impacto (line 17) | namespace Impacto {
    type Vulkan (line 18) | namespace Vulkan {
      function VkVertexInputBindingDescription (line 20) | VkVertexInputBindingDescription Renderer::GetBindingDescription() {
      function VKAPI_ATTR (line 56) | static VKAPI_ATTR VkBool32 VKAPI_CALL
      function VkResult (line 66) | VkResult CreateDebugUtilsMessengerEXT(
      function DestroyDebugUtilsMessengerEXT (line 79) | void DestroyDebugUtilsMessengerEXT(VkInstance instance,
      function YUVFrame (line 1136) | YUVFrame* Renderer::CreateYUVFrame(float width, float height) {
      function NV12Frame (line 1142) | NV12Frame* Renderer::CreateNV12Frame(float width, float height) {

FILE: src/renderer/vulkan/renderer.h
  function namespace (line 13) | namespace Impacto {

FILE: src/renderer/vulkan/utils.cpp
  type Impacto (line 8) | namespace Impacto {
    type Vulkan (line 9) | namespace Vulkan {
      function CreateAllocator (line 11) | void CreateAllocator(VkPhysicalDevice physicalDevice, VkDevice device,
      function AllocatedBuffer (line 24) | AllocatedBuffer CreateBuffer(size_t allocSize, VkBufferUsageFlags us...
      function ImmediateSubmit (line 44) | void ImmediateSubmit(std::function<void(VkCommandBuffer cmd)>&& func...
      function VkImageCreateInfo (line 79) | VkImageCreateInfo GetImageCreateInfo(VkFormat format, VkExtent3D ext...

FILE: src/renderer/vulkan/utils.h
  function namespace (line 9) | namespace Impacto {

FILE: src/renderer/vulkan/window.cpp
  type Impacto (line 12) | namespace Impacto {
    type Vulkan (line 13) | namespace Vulkan {
      function RectF (line 39) | RectF VulkanWindow::GetViewport() {
      function RectF (line 50) | RectF VulkanWindow::GetScaledViewport() {

FILE: src/renderer/vulkan/window.h
  function namespace (line 5) | namespace Impacto {

FILE: src/renderer/vulkan/yuvframe.cpp
  type Impacto (line 3) | namespace Impacto {
    type Vulkan (line 4) | namespace Vulkan {

FILE: src/renderer/vulkan/yuvframe.h
  function namespace (line 8) | namespace Impacto {

FILE: src/renderer/window.cpp
  type Impacto (line 11) | namespace Impacto {
    function SetWindowIcon (line 13) | void SetWindowIcon(SDL_Window* window) {
    function SDL_Cursor (line 74) | static SDL_Cursor* LoadCursorFromFile(const std::string& path) {
    function InitCursors (line 127) | void InitCursors() {
    function RequestCursor (line 148) | void RequestCursor(CursorType type) {
    function ApplyCursorForFrame (line 166) | void ApplyCursorForFrame() {

FILE: src/renderer/window.h
  function namespace (line 6) | namespace Impacto {

FILE: src/renderer/yuvframe.h
  function namespace (line 5) | namespace Impacto {

FILE: src/rng.h
  function namespace (line 6) | namespace Impacto {

FILE: src/sequencedanimation.cpp
  type Impacto (line 3) | namespace Impacto {

FILE: src/sequencedanimation.h
  function namespace (line 4) | namespace Impacto {

FILE: src/spriteanimation.cpp
  type Impacto (line 3) | namespace Impacto {
    function Sprite (line 7) | Sprite SpriteAnimation::CurrentSprite() const {
    function Sprite (line 70) | Sprite FixedSpriteAnimation::CurrentSprite() const {
    function SpriteAnimation (line 97) | SpriteAnimation SpriteAnimationDef::Instantiate() {

FILE: src/spriteanimation.h
  function namespace (line 6) | namespace Impacto {

FILE: src/spritesheet.h
  function namespace (line 5) | namespace Impacto {

FILE: src/subtitle/ass/subtitlerenderer.cpp
  type Impacto (line 10) | namespace Impacto {
    type Subtitle (line 11) | namespace Subtitle {
      type Ass (line 12) | namespace Ass {
        function AssMsgHandler (line 17) | void AssMsgHandler(int level, const char* fmt, va_list va, void* d...

FILE: src/subtitle/ass/subtitlerenderer.h
  function namespace (line 8) | namespace Impacto {

FILE: src/subtitle/ffmpegsubtitlehelper.cpp
  type Impacto::Subtitle (line 5) | namespace Impacto::Subtitle {
    function make_error_pair (line 7) | std::pair<int, const std::error_category*> make_error_pair(av::Errors ...
    function make_error_pair (line 12) | std::pair<int, const std::error_category*> make_error_pair(int status) {
    function SubtitleData (line 101) | SubtitleData SubtitleDecoderContext::decodeSubtitle(av::OptionalErrorC...
    function SubtitleData (line 129) | SubtitleData SubtitleDecoderContext::decode(const av::Packet& packet,
    function SubtitleData (line 134) | SubtitleData SubtitleDecoderContext::decode(const av::Packet& packet,

FILE: src/subtitle/ffmpegsubtitlehelper.h
  function namespace (line 9) | namespace Impacto::Subtitle {

FILE: src/subtitle/subtitlerenderer.h
  function namespace (line 13) | namespace Impacto::Subtitle {
  function class (line 33) | class SubtitleRenderer {

FILE: src/subtitle/subtitlesystem.cpp
  type Impacto::Subtitle (line 14) | namespace Impacto::Subtitle {
    function SubtitleInit (line 17) | void SubtitleInit() {

FILE: src/subtitle/subtitlesystem.h
  function namespace (line 14) | namespace Impacto::Subtitle {

FILE: src/text/dialoguepage.cpp
  type Impacto (line 21) | namespace Impacto {
    type TextParseState (line 93) | enum TextParseState { TPS_Normal, TPS_Name, TPS_Ruby }

FILE: src/text/dialoguepage.h
  function namespace (line 10) | namespace Impacto {

FILE: src/text/text.cpp
  type Impacto (line 21) | namespace Impacto {
    function TextGetStringLength (line 160) | int TextGetStringLength(Vm::Sc3Stream& stream) {
    function TextGetStringLength (line 168) | int TextGetStringLength(Vm::Sc3VmThread* ctx) {
    function TextGetMainCharacterCount (line 177) | int TextGetMainCharacterCount(Vm::Sc3VmThread* ctx) {
    function TextLayoutPlainLineHelper (line 211) | std::pair<int, float> TextLayoutPlainLineHelper(
    function TextLayoutPlainLine (line 263) | int TextLayoutPlainLine(Vm::Sc3Stream& stream, int stringLength,
    function TextLayoutPlainLine (line 276) | std::vector<ProcessedTextGlyph> TextLayoutPlainLine(
    function TextLayoutPlainLine (line 289) | int TextLayoutPlainLine(Vm::Sc3VmThread* thd, int stringLength,
    function TextLayoutPlainLine (line 302) | std::vector<ProcessedTextGlyph> TextLayoutPlainLine(
    function FitGlyphsForPlainLine (line 319) | void FitGlyphsForPlainLine(std::span<ProcessedTextGlyph> glyphs,
    function TextLayoutAlignment (line 339) | int TextLayoutAlignment(Impacto::TextAlignment& alignment, float block...
    function TextGetPlainLineWidth (line 393) | float TextGetPlainLineWidth(Vm::Sc3VmThread* ctx, Font* font, float fo...
    function TextGetPlainLineWidth (line 409) | float TextGetPlainLineWidth(Vm::Sc3Stream& stream, Font* font, float f...
    function TextLayoutPlainString (line 425) | int TextLayoutPlainString(std::string_view str,
    function TextLayoutPlainString (line 444) | std::vector<ProcessedTextGlyph> TextLayoutPlainString(
    function TextGetSc3String (line 461) | void TextGetSc3String(std::string_view str, std::span<uint16_t> out) {
    function InitNamePlateData (line 479) | void InitNamePlateData(Vm::Sc3Stream& stream) {
    function GetNameId (line 496) | std::optional<uint32_t> GetNameId(const std::span<const uint16_t> name) {

FILE: src/text/text.h
  function namespace (line 13) | namespace Impacto {

FILE: src/text/typewritereffect.cpp
  type Impacto (line 9) | namespace Impacto {

FILE: src/text/typewritereffect.h
  function namespace (line 8) | namespace Impacto {

FILE: src/texture/bcdecode.cpp
  function bc1_color_load (line 53) | static void bc1_color_load(bc1_color* dst, const uint8_t* src) {
  function bc3_alpha_load (line 59) | static void bc3_alpha_load(bc3_alpha* dst, const uint8_t* src) {
  function rgba (line 63) | static rgba decode_565(uint16_t x) {
  function decode_bc1_color (line 79) | static void decode_bc1_color(rgba* dst, const uint8_t* src) {
  function decode_bc3_alpha (line 119) | static void decode_bc3_alpha(char* dst, const uint8_t* src, int stride, ...
  function decode_bc1_block (line 157) | static void decode_bc1_block(rgba* col, const uint8_t* src) {
  function decode_bc2_block (line 161) | static void decode_bc2_block(rgba* col, const uint8_t* src) {
  function decode_bc3_block (line 174) | static void decode_bc3_block(rgba* col, const uint8_t* src) {
  function decode_bc4_block (line 179) | static void decode_bc4_block(lum* col, const uint8_t* src) {
  function decode_bc5_block (line 183) | static void decode_bc5_block(rgba* col, const uint8_t* src) {
  function get_bit (line 191) | static uint8_t get_bit(const uint8_t* src, int bit) {
  function get_bits (line 197) | static uint8_t get_bits(const uint8_t* src, int bit, int count) {
  function bc7_get_subset (line 298) | static int bc7_get_subset(int ns, int partition, int n) {
  function expand_quantized (line 308) | static uint8_t expand_quantized(uint8_t v, int bits) {
  function bc7_lerp (line 313) | static void bc7_lerp(rgba* dst, const rgba* e, int s0, int s1) {
  function decode_bc7_block (line 322) | static void decode_bc7_block(rgba* col, const uint8_t* src) {
  function bc6_sign_extend (line 585) | static void bc6_sign_extend(uint16_t* v, int prec) {
  function bc6_unquantize (line 593) | static int bc6_unquantize(uint16_t v, int prec, int sign) {
  function half_to_float (line 627) | static float half_to_float(uint16_t h) {
  function bc6_finalize (line 644) | static float bc6_finalize(int v, int sign) {
  function bc6_lerp (line 657) | static void bc6_lerp(rgb32f* col, int* e0, int* e1, int s, int sign) {
  function decode_bc6_block (line 668) | static void decode_bc6_block(rgb32f* col, const uint8_t* src, int sign) {
  function swizzle_copy (line 777) | static void swizzle_copy(int swizzle, uint8_t* dst, const uint8_t* src,
  function put_block (line 792) | static void put_block(BcnDecoderState* state, const uint8_t* col, int sz,
  function decode_bcn (line 839) | static int decode_bcn(BcnDecoderState* state, const uint8_t* src, int by...
  function BcnDecode (line 877) | int BcnDecode(uint8_t* dst, int dst_size, const uint8_t* src, int src_size,
  function wcb (line 918) | static void wcb(void* ctx, void* data, int size) {

FILE: src/texture/bcdecode.h
  type BcnDecoderFormat (line 6) | typedef enum {

FILE: src/texture/bntxloader.cpp
  type Impacto (line 8) | namespace Impacto {
    type TexLoad (line 10) | namespace TexLoad {
      function CountLsbZeros (line 12) | int CountLsbZeros(int value) {
      function Pow2RoundUp (line 22) | int Pow2RoundUp(int value) {
      function DivRoundUp (line 34) | int DivRoundUp(int lhs, int rhs) { return (lhs + (rhs - 1)) / rhs; }
      function BPPbyFormat (line 80) | int BPPbyFormat(TextureFormatType format) {
      function TextureLoadBNTX (line 260) | bool TextureLoadBNTX(Stream* stream, Texture* outTexture) {

FILE: src/texture/bntxloader.h
  function namespace (line 6) | namespace Impacto {

FILE: src/texture/ddsloader.cpp
  type Impacto (line 14) | namespace Impacto {
    type Gxm (line 15) | namespace Gxm {
      function calc_shifts (line 116) | inline void calc_shifts(int mask, int& left, int& right) {
      function internal_readimg (line 134) | bool internal_readimg(Stream* stream, uint8_t* dst, int w, int h, in...
      function TextureLoadDDS (line 202) | bool TextureLoadDDS(Stream* stream, Texture* outTexture) {

FILE: src/texture/gxtloader.cpp
  type Impacto (line 10) | namespace Impacto {
    type Gxm (line 12) | namespace Gxm {
      type SceGxmTextureType (line 13) | enum SceGxmTextureType : uint32_t {
      type SceGxmTextureBaseFormat (line 23) | enum SceGxmTextureBaseFormat : uint32_t {
      type SceGxmTextureSwizzle4Mode (line 72) | enum SceGxmTextureSwizzle4Mode : uint32_t {
      type SceGxmTextureSwizzle3Mode (line 83) | enum SceGxmTextureSwizzle3Mode : uint32_t { BGR = 0x0000, RGB = 0x10...
    type SubtextureHeader (line 86) | struct SubtextureHeader {
    function Compact1By1 (line 117) | uint32_t Compact1By1(uint32_t x) {
    function DecodeMorton2X (line 125) | uint32_t DecodeMorton2X(uint32_t code) { return Compact1By1(code >> 0); }
    function DecodeMorton2Y (line 126) | uint32_t DecodeMorton2Y(uint32_t code) { return Compact1By1(code >> 1); }
    type TexLoad (line 128) | namespace TexLoad {
      function VitaUnswizzle (line 130) | void VitaUnswizzle(int* x, int* y, int width, int height) {
      function GXTLoadSubtexture (line 160) | bool GXTLoadSubtexture(Stream* stream, Texture* outTexture,
      function TextureLoadGXT (line 357) | bool TextureLoadGXT(Stream* stream, Texture* outTexture) {

FILE: src/texture/gxtloader.h
  function namespace (line 6) | namespace Impacto {

FILE: src/texture/plainloader.cpp
  type Impacto (line 3) | namespace Impacto {
    type TexLoad (line 4) | namespace TexLoad {
      type PlainPixelMode (line 12) | enum PlainPixelMode : uint32_t {
      function TextureIsPlain (line 20) | bool TextureIsPlain(Stream* stream) {
      function TextureLoadPlain (line 29) | bool TextureLoadPlain(Stream* stream, Texture* outTexture) {

FILE: src/texture/plainloader.h
  function namespace (line 6) | namespace Impacto {

FILE: src/texture/s3tc.cpp
  type Impacto (line 30) | namespace Impacto {
    type TexLoad (line 31) | namespace TexLoad {
      function DecompressBlockDXT1 (line 35) | void DecompressBlockDXT1(uint32_t startX, uint32_t startY, uint32_t ...
      function BlockDecompressImageDXT1 (line 104) | void BlockDecompressImageDXT1(uint32_t width, uint32_t height, Strea...
      function BlockDecompressImageDXT1VitaSwizzled (line 116) | void BlockDecompressImageDXT1VitaSwizzled(uint32_t width, uint32_t h...
      function DecompressBlockDXT5 (line 132) | void DecompressBlockDXT5(uint32_t startX, uint32_t startY, uint32_t ...
      function BlockDecompressImageDXT5 (line 243) | void BlockDecompressImageDXT5(uint32_t width, uint32_t height, Strea...
      function BlockDecompressImageDXT5VitaSwizzled (line 255) | void BlockDecompressImageDXT5VitaSwizzled(uint32_t width, uint32_t h...

FILE: src/texture/s3tc.h
  function namespace (line 5) | namespace Impacto {

FILE: src/texture/stbiloader.cpp
  type Impacto (line 6) | namespace Impacto {
    type TexLoad (line 7) | namespace TexLoad {
      function StbiRead (line 9) | int StbiRead(void* user, char* data, int size) {
      function StbiSkip (line 12) | void StbiSkip(void* user, int n) { ((Io::Stream*)user)->Seek(n, RW_S...
      function StbiEof (line 13) | int StbiEof(void* user) {
      function TextureLoadSTBI (line 20) | bool TextureLoadSTBI(Io::Stream* stream, Texture* outTexture) {

FILE: src/texture/texture.cpp
  type Impacto (line 11) | namespace Impacto {

FILE: src/texture/texture.h
  function namespace (line 7) | namespace Impacto {

FILE: src/texture/webpdecode.cpp
  type Impacto (line 6) | namespace Impacto {
    type TexLoad (line 7) | namespace TexLoad {
      function TextureLoadWebP (line 9) | bool TextureLoadWebP(Io::Stream* stream, Texture* outTexture) {

FILE: src/ui/backlogmenu.cpp
  type Impacto (line 24) | namespace Impacto {
    type UI (line 25) | namespace UI {
      function IsBeyondShiftedHoverBounds (line 107) | static bool IsBeyondShiftedHoverBounds(const Widget* el, float delta...
      function InVerticalHoverBounds (line 156) | static bool InVerticalHoverBounds(const Widget* entry) {

FILE: src/ui/backlogmenu.h
  function namespace (line 8) | namespace Impacto {

FILE: src/ui/gamespecific.cpp
  type Impacto (line 27) | namespace Impacto {
    type UI (line 28) | namespace UI {
      type GameSpecific (line 29) | namespace GameSpecific {
        function Init (line 34) | void Init() {
        function NonGameplayUpdate (line 59) | void NonGameplayUpdate(float dt) {
        function Update (line 74) | void Update(float dt) {
        function RenderEarlyMain (line 101) | void RenderEarlyMain() {
        function RenderMain (line 115) | void RenderMain() {
        function RenderLayer (line 148) | void RenderLayer(uint32_t layer) {
        function RenderCCButtonGuide (line 198) | void RenderCCButtonGuide() {
        function UpdateCCButtonGuide (line 228) | void UpdateCCButtonGuide([[maybe_unused]] float dt) {
        function UpdateCCAtChanScrollbar (line 243) | static void UpdateCCAtChanScrollbar() {

FILE: src/ui/gamespecific.h
  function namespace (line 2) | namespace Impacto {

FILE: src/ui/mapsystem.cpp
  type Impacto (line 3) | namespace Impacto {
    type UI (line 4) | namespace UI {
      type MapSystem (line 5) | namespace MapSystem {
        function Init (line 7) | void Init() {
        function MapInit (line 11) | void MapInit() { return MapSystemPtr->MapInit(); }
        function MapLoad (line 12) | int MapLoad(uint8_t* data) { return MapSystemPtr->MapLoad(data); }
        function MapSave (line 13) | int MapSave(uint8_t* data) { return MapSystemPtr->MapSave(data); }
        function MapSetFadein (line 14) | void MapSetFadein(int partId, int partType) {
        function MapSetGroup (line 17) | void MapSetGroup(int index, int mappedId1, int mappedId2, int mapp...
        function MapSetFadeout (line 20) | void MapSetFadeout(int partId, int partType) {
        function MapSetDisp (line 23) | void MapSetDisp(int partId, int partType) {
        function MapSetHide (line 26) | void MapSetHide(int arg1, int arg2) {
        function MapPoolFadeEndChk_Wait (line 29) | bool MapPoolFadeEndChk_Wait() { return MapSystemPtr->MapPoolFadeEn...
        function MapMoveAnimeInit (line 30) | void MapMoveAnimeInit(int arg1, int arg2, int arg3) {
        function MapMoveAnimeMain (line 33) | bool MapMoveAnimeMain() { return MapSystemPtr->MapMoveAnimeMain(); }
        function MapGetPos (line 34) | void MapGetPos(int partId, int partType, int& getX, int& getY) {
        function MapSetPool (line 37) | void MapSetPool(int index, int id, int type) {
        function MapResetPoolAll (line 40) | void MapResetPoolAll(int arg1) { return MapSystemPtr->MapResetPool...
        function MapFadeEndChk_Wait (line 41) | bool MapFadeEndChk_Wait() { return MapSystemPtr->MapFadeEndChk_Wai...
        function MapPoolShuffle (line 42) | void MapPoolShuffle(int param_1) {
        function MapPoolSetDisp (line 45) | void MapPoolSetDisp(int arg1, int arg2) {
        function MapPoolSetHide (line 48) | void MapPoolSetHide(int arg1, int arg2) {
        function MapPoolSetFadein (line 51) | void MapPoolSetFadein(int unused, int poolIdx) {
        function MapPoolSetFadeout (line 54) | void MapPoolSetFadeout(int unused, int poolIdx) {
        function MapPlayerPhotoSelect (line 57) | bool MapPlayerPhotoSelect(int unused) {
        function MapResetPool (line 60) | void MapResetPool(int poolIdx) { return MapSystemPtr->MapResetPool...
        function MapSetGroupEx (line 61) | void MapSetGroupEx(int index, int type, int mappedId) {
        function MapZoomInit (line 64) | void MapZoomInit(int mapX, int mapY, int size) {
        function MapZoomMain (line 67) | bool MapZoomMain() { return MapSystemPtr->MapZoomMain(); }
        function MapZoomInit2 (line 68) | void MapZoomInit2(int arg1, int arg2) {
        function MapZoomMain3 (line 71) | bool MapZoomMain3() { return MapSystemPtr->MapZoomMain3(); }
        function MapZoomInit3 (line 72) | bool MapZoomInit3(int setMapX, int setMapY, int setMapSize, bool h...
        function MapMoveAnimeInit2 (line 75) | bool MapMoveAnimeInit2(int setMapX, int setMapY, int setTransition...
        function MapMoveAnimeMain2 (line 78) | bool MapMoveAnimeMain2() { return MapSystemPtr->MapMoveAnimeMain2(...
        function MapPlayerPotalSelectInit (line 79) | void MapPlayerPotalSelectInit() {
        function MapPlayerPotalSelect (line 82) | bool MapPlayerPotalSelect() { return MapSystemPtr->MapPlayerPotalS...
        function MapSystem_28 (line 83) | void MapSystem_28() { return MapSystemPtr->MapSystem_28(); }
        function Update (line 84) | void Update(float dt) { return MapSystemPtr->Update(dt); }
        function RenderButtonGuide (line 85) | void RenderButtonGuide() { return MapSystemPtr->RenderButtonGuide(...
        function Render (line 86) | void Render() { return MapSystemPtr->Render(); }

FILE: src/ui/mapsystem.h
  function namespace (line 3) | namespace Impacto {

FILE: src/ui/menu.cpp
  type Impacto (line 6) | namespace Impacto {
    type UI (line 7) | namespace UI {

FILE: src/ui/menu.h
  function namespace (line 8) | namespace Impacto {

FILE: src/ui/nullmenu.cpp
  type Impacto (line 3) | namespace Impacto {
    type UI (line 4) | namespace UI {

FILE: src/ui/nullmenu.h
  function namespace (line 5) | namespace Impacto {

FILE: src/ui/optionsmenu.cpp
  type Impacto (line 8) | namespace Impacto {
    type UI (line 9) | namespace UI {

FILE: src/ui/optionsmenu.h
  function namespace (line 7) | namespace Impacto {

FILE: src/ui/savemenu.h
  function namespace (line 8) | namespace Impacto {

FILE: src/ui/selectionmenu.cpp
  type Impacto (line 8) | namespace Impacto {
    type UI (line 9) | namespace UI {

FILE: src/ui/selectionmenu.h
  function namespace (line 8) | namespace Impacto {

FILE: src/ui/sysmesbox.cpp
  type Impacto (line 3) | namespace Impacto {
    type UI (line 4) | namespace UI {

FILE: src/ui/sysmesbox.h
  function namespace (line 8) | namespace Impacto {

FILE: src/ui/tipsmenu.cpp
  type Impacto (line 3) | namespace Impacto {
    type UI (line 4) | namespace UI {

FILE: src/ui/tipsmenu.h
  function namespace (line 7) | namespace Impacto {

FILE: src/ui/ui.h
  type class (line 18) | enum class
  type class (line 22) | enum class
  type class (line 30) | enum class
  type class (line 37) | enum class
  type class (line 46) | enum class
  type class (line 56) | enum class
  type class (line 63) | enum class
  type class (line 69) | enum class
  type class (line 75) | enum class
  type class (line 79) | enum class
  type class (line 84) | enum class
  type class (line 89) | enum class
  type class (line 94) | enum class
  type class (line 98) | enum class
  function HelpMenuType (line 102) | enum class HelpMenuType : int {

FILE: src/ui/widget.cpp
  type Impacto (line 5) | namespace Impacto {
    type UI (line 6) | namespace UI {
      function WidgetType (line 25) | WidgetType Widget::GetType() { return WT_NORMAL; }
      function Widget (line 36) | Widget* Widget::GetFocus(FocusDirection dir) {

FILE: src/ui/widget.h
  function namespace (line 9) | namespace Impacto {

FILE: src/ui/widgets/backlogentry.cpp
  type Impacto (line 11) | namespace Impacto {
    type UI (line 12) | namespace UI {
      type Widgets (line 13) | namespace Widgets {

FILE: src/ui/widgets/backlogentry.h
  function namespace (line 10) | namespace Impacto {

FILE: src/ui/widgets/button.cpp
  type Impacto (line 10) | namespace Impacto {
    type UI (line 11) | namespace UI {
      type Widgets (line 12) | namespace Widgets {

FILE: src/ui/widgets/button.h
  function namespace (line 10) | namespace Impacto {

FILE: src/ui/widgets/carousel.cpp
  type Impacto (line 6) | namespace Impacto {
    type UI (line 7) | namespace UI {
      type Widgets (line 8) | namespace Widgets {

FILE: src/ui/widgets/carousel.h
  function namespace (line 7) | namespace Impacto {

FILE: src/ui/widgets/cc/backlogentry.cpp
  type Impacto (line 7) | namespace Impacto {
    type UI (line 8) | namespace UI {
      type Widgets (line 9) | namespace Widgets {
        type CC (line 10) | namespace CC {

FILE: src/ui/widgets/cc/backlogentry.h
  function namespace (line 5) | namespace Impacto {

FILE: src/ui/widgets/cc/titlebutton.cpp
  type Impacto (line 6) | namespace Impacto {
    type UI (line 7) | namespace UI {
      type Widgets (line 8) | namespace Widgets {
        type CC (line 9) | namespace CC {

FILE: src/ui/widgets/cc/titlebutton.h
  function namespace (line 5) | namespace Impacto {

FILE: src/ui/widgets/cclcc/librarymenubutton.h
  function namespace (line 13) | namespace Widgets {

FILE: src/ui/widgets/cclcc/optionsbinarybutton.cpp
  type Impacto (line 12) | namespace Impacto {
    type UI (line 13) | namespace UI {
      type Widgets (line 14) | namespace Widgets {
        type CCLCC (line 15) | namespace CCLCC {

FILE: src/ui/widgets/cclcc/optionsbinarybutton.h
  function namespace (line 7) | namespace Impacto {

FILE: src/ui/widgets/cclcc/optionsentry.cpp
  type Impacto (line 11) | namespace Impacto {
    type UI (line 12) | namespace UI {
      type Widgets (line 13) | namespace Widgets {
        type CCLCC (line 14) | namespace CCLCC {

FILE: src/ui/widgets/cclcc/optionsentry.h
  function namespace (line 9) | namespace Impacto {

FILE: src/ui/widgets/cclcc/optionsslider.cpp
  type Impacto (line 10) | namespace Impacto {
    type UI (line 11) | namespace UI {
      type Widgets (line 12) | namespace Widgets {
        type CCLCC (line 13) | namespace CCLCC {

FILE: src/ui/widgets/cclcc/optionsslider.h
  function namespace (line 7) | namespace Impacto {

FILE: src/ui/widgets/cclcc/optionsvoiceslider.cpp
  type Impacto (line 11) | namespace Impacto {
    type UI (line 12) | namespace UI {
      type Widgets (line 13) | namespace Widgets {
        type CCLCC (line 14) | namespace CCLCC {

FILE: src/ui/widgets/cclcc/optionsvoiceslider.h
  function namespace (line 6) | namespace Impacto {

FILE: src/ui/widgets/cclcc/saveentrybutton.cpp
  type Impacto (line 11) | namespace Impacto {
    type UI (line 12) | namespace UI {
      type Widgets (line 13) | namespace Widgets {
        type CCLCC (line 14) | namespace CCLCC {

FILE: src/ui/widgets/cclcc/saveentrybutton.h
  function namespace (line 10) | namespace Impacto {

FILE: src/ui/widgets/cclcc/sysmenubutton.cpp
  type Impacto (line 5) | namespace Impacto {
    type UI (line 6) | namespace UI {
      type Widgets (line 7) | namespace Widgets {
        type CCLCC (line 8) | namespace CCLCC {

FILE: src/ui/widgets/cclcc/sysmenubutton.h
  function namespace (line 5) | namespace Impacto {

FILE: src/ui/widgets/cclcc/tipsentrybutton.cpp
  type Impacto (line 12) | namespace Impacto {
    type UI (line 13) | namespace UI {
      type Widgets (line 14) | namespace Widgets {
        type CCLCC (line 15) | namespace CCLCC {

FILE: src/ui/widgets/cclcc/tipsentrybutton.h
  function namespace (line 6) | namespace Impacto {

FILE: src/ui/widgets/cclcc/tipstabgroup.cpp
  type Impacto (line 17) | namespace Impacto {
    type UI (line 18) | namespace UI {
      type Widgets (line 19) | namespace Widgets {
        type CCLCC (line 20) | namespace CCLCC {

FILE: src/ui/widgets/cclcc/tipstabgroup.h
  function namespace (line 11) | namespace Impacto {

FILE: src/ui/widgets/cclcc/titlebutton.cpp
  type Impacto (line 9) | namespace Impacto {
    type UI (line 10) | namespace UI {
      type Widgets (line 11) | namespace Widgets {
        type CCLCC (line 12) | namespace CCLCC {

FILE: src/ui/widgets/cclcc/titlebutton.h
  function namespace (line 6) | namespace Impacto {

FILE: src/ui/widgets/cgviewer.cpp
  type Impacto (line 8) | namespace Impacto {
    type UI (line 9) | namespace UI {
      type Widgets (line 10) | namespace Widgets {

FILE: src/ui/widgets/cgviewer.h
  function namespace (line 11) | namespace Impacto {

FILE: src/ui/widgets/chlcc/albumthumbnailbutton.cpp
  type Impacto (line 4) | namespace Impacto {
    type UI (line 5) | namespace UI {
      type Widgets (line 6) | namespace Widgets {
        type CHLCC (line 7) | namespace CHLCC {

FILE: src/ui/widgets/chlcc/albumthumbnailbutton.h
  function class (line 10) | class AlbumThumbnailButton : public Button {

FILE: src/ui/widgets/chlcc/backlogentry.cpp
  type Impacto (line 8) | namespace Impacto {
    type UI (line 9) | namespace UI {
      type Widgets (line 10) | namespace Widgets {
        type CHLCC (line 11) | namespace CHLCC {

FILE: src/ui/widgets/chlcc/backlogentry.h
  function namespace (line 6) | namespace Impacto {

FILE: src/ui/widgets/chlcc/moviemenuentrybutton.cpp
  type Impacto (line 8) | namespace Impacto {
    type UI (line 9) | namespace UI {
      type Widgets (line 10) | namespace Widgets {
        type CHLCC (line 11) | namespace CHLCC {

FILE: src/ui/widgets/chlcc/moviemenuentrybutton.h
  function namespace (line 6) | namespace Impacto {

FILE: src/ui/widgets/chlcc/optionsbutton.cpp
  type Impacto (line 9) | namespace Impacto {
    type UI (line 10) | namespace UI {
      type Widgets (line 11) | namespace Widgets {
        type CHLCC (line 12) | namespace CHLCC {
          class OptionsButton<bool> (line 98) | class OptionsButton<bool>
          class OptionsButton<uint8_t> (line 99) | class OptionsButton<uint8_t>
          class OptionsButton<float> (line 100) | class OptionsButton<float>

FILE: src/ui/widgets/chlcc/optionsbutton.h
  function namespace (line 5) | namespace Impacto {

FILE: src/ui/widgets/chlcc/optionsentry.cpp
  type Impacto (line 3) | namespace Impacto {
    type UI (line 4) | namespace UI {
      type Widgets (line 5) | namespace Widgets {
        type CHLCC (line 6) | namespace CHLCC {

FILE: src/ui/widgets/chlcc/optionsentry.h
  function namespace (line 9) | namespace Impacto {

FILE: src/ui/widgets/chlcc/optionsslider.cpp
  type Impacto (line 8) | namespace Impacto {
    type UI (line 9) | namespace UI {
      type Widgets (line 10) | namespace Widgets {
        type CHLCC (line 11) | namespace CHLCC {

FILE: src/ui/widgets/chlcc/optionsslider.h
  function namespace (line 6) | namespace Impacto {

FILE: src/ui/widgets/chlcc/saveentrybutton.cpp
  type Impacto (line 10) | namespace Impacto {
    type UI (line 11) | namespace UI {
      type Widgets (line 12) | namespace Widgets {
        type CHLCC (line 13) | namespace CHLCC {

FILE: src/ui/widgets/chlcc/saveentrybutton.h
  function namespace (line 10) | namespace Impacto {

FILE: src/ui/widgets/chlcc/systemmenuentrybutton.cpp
  type Impacto (line 8) | namespace Impacto {
    type UI (line 9) | namespace UI {
      type Widgets (line 10) | namespace Widgets {
        type CHLCC (line 11) | namespace CHLCC {

FILE: src/ui/widgets/chlcc/systemmenuentrybutton.h
  function namespace (line 6) | namespace Impacto {

FILE: src/ui/widgets/chlcc/systemmessagebutton.cpp
  type Impacto (line 5) | namespace Impacto {
    type UI (line 6) | namespace UI {
      type Widgets (line 7) | namespace Widgets {
        type CHLCC (line 8) | namespace CHLCC {

FILE: src/ui/widgets/chlcc/systemmessagebutton.h
  function namespace (line 5) | namespace Impacto {

FILE: src/ui/widgets/chlcc/tipsentrybutton.cpp
  type Impacto (line 11) | namespace Impacto {
    type UI (line 12) | namespace UI {
      type Widgets (line 13) | namespace Widgets {
        type CHLCC (line 14) | namespace CHLCC {

FILE: src/ui/widgets/chlcc/tipsentrybutton.h
  function namespace (line 6) | namespace Impacto {

FILE: src/ui/widgets/chlcc/titlebutton.cpp
  type Impacto (line 6) | namespace Impacto {
    type UI (line 7) | namespace UI {
      type Widgets (line 8) | namespace Widgets {
        type CHLCC (line 9) | namespace CHLCC {

FILE: src/ui/widgets/chlcc/titlebutton.h
  function namespace (line 5) | namespace Impacto {

FILE: src/ui/widgets/chlcc/trackselectbutton.cpp
  type Impacto (line 5) | namespace Impacto {
    type UI (line 6) | namespace UI {
      type Widgets (line 7) | namespace Widgets {
        type CHLCC (line 8) | namespace CHLCC {

FILE: src/ui/widgets/chlcc/trackselectbutton.h
  function namespace (line 7) | namespace Impacto {

FILE: src/ui/widgets/chlcc/trophymenuentry.cpp
  type Impacto (line 8) | namespace Impacto {
    type UI (line 9) | namespace UI {
      type Widgets (line 10) | namespace Widgets {
        type CHLCC (line 11) | namespace CHLCC {

FILE: src/ui/widgets/chlcc/trophymenuentry.h
  function namespace (line 6) | namespace Impacto {

FILE: src/ui/widgets/clickarea.cpp
  type Impacto (line 7) | namespace Impacto {
    type UI (line 8) | namespace UI {
      type Widgets (line 9) | namespace Widgets {

FILE: src/ui/widgets/clickarea.h
  function namespace (line 7) | namespace Impacto {

FILE: src/ui/widgets/group.cpp
  type Impacto (line 7) | namespace Impacto {
    type UI (line 8) | namespace UI {
      type Widgets (line 9) | namespace Widgets {
        function WidgetType (line 69) | WidgetType Group::GetType() { return WT_GROUP; }
        function Widget (line 121) | Widget* Group::GetFocus(FocusDirection dir) {
        function Widget (line 182) | Widget* Group::GetFirstFocusableChild() {

FILE: src/ui/widgets/group.h
  function namespace (line 9) | namespace Impacto {

FILE: src/ui/widgets/label.cpp
  type Impacto (line 7) | namespace Impacto {
    type UI (line 8) | namespace UI {
      type Widgets (line 9) | namespace Widgets {

FILE: src/ui/widgets/label.h
  function namespace (line 10) | namespace Impacto {

FILE: src/ui/widgets/mo6tw/actorsvoicebutton.cpp
  type Impacto (line 5) | namespace Impacto {
    type UI (line 6) | namespace UI {
      type Widgets (line 7) | namespace Widgets {
        type MO6TW (line 8) | namespace MO6TW {

FILE: src/ui/widgets/mo6tw/actorsvoicebutton.h
  function namespace (line 6) | namespace Impacto {

FILE: src/ui/widgets/mo6tw/albumcharacterbutton.cpp
  type Impacto (line 5) | namespace Impacto {
    type UI (line 6) | namespace UI {
      type Widgets (line 7) | namespace Widgets {
        type MO6TW (line 8) | namespace MO6TW {

FILE: src/ui/widgets/mo6tw/albumcharacterbutton.h
  function namespace (line 6) | namespace Impacto {

FILE: src/ui/widgets/mo6tw/albumthumbnailbutton.cpp
  type Impacto (line 7) | namespace Impacto {
    type UI (line 8) | namespace UI {
      type Widgets (line 9) | namespace Widgets {
        type MO6TW (line 10) | namespace MO6TW {

FILE: src/ui/widgets/mo6tw/albumthumbnailbutton.h
  function namespace (line 6) | namespace Impacto {

FILE: src/ui/widgets/mo6tw/imagethumbnailbutton.cpp
  type Impacto (line 6) | namespace Impacto {
    type UI (line 7) | namespace UI {
      type Widgets (line 8) | namespace Widgets {
        type MO6TW (line 9) | namespace MO6TW {

FILE: src/ui/widgets/mo6tw/imagethumbnailbutton.h
  function namespace (line 6) | namespace Impacto {

FILE: src/ui/widgets/mo6tw/saveentrybutton.cpp
  type Impacto (line 6) | namespace Impacto {
    type UI (line 7) | namespace UI {
      type Widgets (line 8) | namespace Widgets {
        type MO6TW (line 9) | namespace MO6TW {

FILE: src/ui/widgets/mo6tw/saveentrybutton.h
  function namespace (line 5) | namespace Impacto {

FILE: src/ui/widgets/mo6tw/scenelistentry.cpp
  type Impacto (line 5) | namespace Impacto {
    type UI (line 6) | namespace UI {
      type Widgets (line 7) | namespace Widgets {
        type MO6TW (line 8) | namespace MO6TW {

FILE: src/ui/widgets/mo6tw/scenelistentry.h
  function namespace (line 6) | namespace Impacto {

FILE: src/ui/widgets/mo6tw/tipsentrybutton.cpp
  type Impacto (line 9) | namespace Impacto {
    type UI (line 10) | namespace UI {
      type Widgets (line 11) | namespace Widgets {
        type MO6TW (line 12) | namespace MO6TW {

FILE: src/ui/widgets/mo6tw/tipsentrybutton.h
  function namespace (line 6) | namespace Impacto {

FILE: src/ui/widgets/mo6tw/titlebutton.cpp
  type Impacto (line 5) | namespace Impacto {
    type UI (line 6) | namespace UI {
      type Widgets (line 7) | namespace Widgets {
        type MO6TW (line 8) | namespace MO6TW {

FILE: src/ui/widgets/mo6tw/titlebutton.h
  function namespace (line 5) | namespace Impacto {

FILE: src/ui/widgets/optiongroup.cpp
  type Impacto (line 6) | namespace Impacto {
    type UI (line 7) | namespace UI {
      type Widgets (line 8) | namespace Widgets {

FILE: src/ui/widgets/optiongroup.h
  function namespace (line 10) | namespace Impacto {

FILE: src/ui/widgets/rne/sysmenubutton.cpp
  type Impacto (line 5) | namespace Impacto {
    type UI (line 6) | namespace UI {
      type Widgets (line 7) | namespace Widgets {
        type RNE (line 8) | namespace RNE {

FILE: src/ui/widgets/rne/sysmenubutton.h
  function namespace (line 5) | namespace Impacto {

FILE: src/ui/widgets/scrollbar.cpp
  type Impacto (line 7) | namespace Impacto {
    type UI (line 8) | namespace UI {
      type Widgets (line 9) | namespace Widgets {

FILE: src/ui/widgets/scrollbar.h
  function namespace (line 6) | namespace Impacto {

FILE: src/ui/widgets/toggle.cpp
  type Impacto (line 8) | namespace Impacto {
    type UI (line 9) | namespace UI {
      type Widgets (line 10) | namespace Widgets {

FILE: src/ui/widgets/toggle.h
  function namespace (line 9) | namespace Impacto {

FILE: src/util.cpp
  type Impacto (line 8) | namespace Impacto {
    function CornersQuad (line 10) | CornersQuad& CornersQuad::Transform(const glm::mat4 transformation) {
    function CornersQuad (line 19) | CornersQuad& CornersQuad::Transform(
    function CornersQuad (line 29) | CornersQuad& CornersQuad::Translate(const glm::vec2 offset) {
    function CornersQuad (line 38) | CornersQuad& CornersQuad::Scale(const glm::vec2 scaling,
    function CornersQuad (line 52) | CornersQuad& CornersQuad::Rotate(const float angle, const glm::vec2 or...
    function CornersQuad (line 66) | CornersQuad& CornersQuad::Rotate(const glm::quat rotation, glm::vec3 o...
    function CornersQuad (line 86) | CornersQuad& CornersQuad::Rotate(const glm::quat rotation,
    function CornersQuad (line 125) | CornersQuad RectF::Transform(glm::mat4 transformation) const {
    function CornersQuad (line 129) | CornersQuad RectF::Transform(
    function RectF (line 134) | RectF& RectF::Scale(const glm::vec2 scaling, const glm::vec2 origin) {
    function CornersQuad (line 147) | CornersQuad RectF::Rotate(float angle, glm::vec2 origin) const {
    function CornersQuad (line 151) | CornersQuad RectF::RotateAroundCenter(float angle) const {
    function CornersQuad (line 155) | CornersQuad RectF::Rotate(glm::quat rotation, glm::vec3 origin) const {
    function CornersQuad (line 159) | CornersQuad RectF::Rotate(const glm::quat rotation, const glm::vec3 or...
    function CornersQuad (line 166) | CornersQuad RectF::FlipVertical() const {
    function CornersQuad (line 170) | CornersQuad RectF::FlipHorizontal() const {
    function CornersQuad (line 174) | inline CornersQuad operator*(const glm::mat4 transformation, RectF rec...
    function Rotate2D (line 178) | glm::mat2 Rotate2D(float angle) {
    function TransformationMatrix (line 189) | glm::mat4 TransformationMatrix(const glm::vec2 scalingOrigin,
    function TransformationMatrix (line 199) | glm::mat4 TransformationMatrix(const glm::vec3 scalingOrigin,
    function TransformVector (line 229) | glm::vec4 TransformVector(const glm::vec2 pos, const glm::vec2 scaling...
    function TransformVector (line 238) | glm::vec4 TransformVector(const glm::vec3 pos, const glm::vec3 scaling...
    function GetHashCode (line 248) | uint32_t GetHashCode(const std::span<const uint8_t> data) {
    function DumpMat4 (line 257) | std::string DumpMat4(glm::mat4* matrix, std::string_view columnSeparator,
    function ResizeImage (line 273) | int ResizeImage(Rect const& srcRect, Rect const& dstRect,
    function RectF (line 321) | RectF RectF::Coalesce(const RectF& first, const RectF& second) {
    function RectF (line 334) | RectF RectF::BoundingBox(const RectF& first, const CornersQuad& second) {
    function RectF (line 352) | RectF RectF::BoundingBox(const CornersQuad& first, const RectF& second) {
    function RectF (line 356) | RectF RectF::Intersection(const RectF& first, const RectF& second) {
    function tm (line 367) | tm CurrentDateTime() {

FILE: src/util.h
  function namespace (line 39) | namespace Impacto {
  type Rect (line 100) | struct Rect
  type CornersQuad (line 101) | struct CornersQuad
  function Right (line 103) | struct RectF {
  function Uint32Log2 (line 371) | constexpr int Uint32Log2(uint32_t v) {
  function eulerZYXToQuat (line 402) | inline void eulerZYXToQuat(glm::vec3 const* zyx, glm::quat* quat) {
  function DegToRad (line 437) | constexpr float DegToRad(float deg) {
  function RadToDeg (line 440) | constexpr float RadToDeg(float rad) {
  function NormalizeDeg (line 443) | inline float NormalizeDeg(float deg) {
  function NormalizeRad (line 448) | inline float NormalizeRad(float rad) {
  function ScrWorkAngleToRad (line 454) | constexpr float ScrWorkAngleToRad(int angle) {
  function glm (line 458) | inline glm::quat ScrWorkAnglesToQuaternion(int x, int y, int z) {
  function glm (line 463) | inline glm::quat ScrWorkAngleZToQuaternion(int angle) {
  function glm (line 467) | inline glm::quat AxisAngleToQuaternion(glm::vec3 axis, float angle) {
  function StringEndsWith (line 471) | inline bool StringEndsWith(std::string const& str, std::string const& en...
  function StringEndsWithCi (line 476) | inline bool StringEndsWithCi(std::string const& str,
  function TrimString (line 484) | inline void TrimString(std::string& str) {
  function MakeLowerCase (line 497) | inline void MakeLowerCase(std::string& str) {
  function CALCrnd (line 526) | inline int CALCrnd(int max) {
  function GetBufferId (line 536) | inline int GetBufferId(int bufIdByScript) {
  function GetScriptBufferId (line 539) | inline int GetScriptBufferId(int bufIdBySurf) {
  function time_t (line 544) | constexpr time_t timegm(tm const& t) {

FILE: src/video/clock.cpp
  type Impacto::Video (line 4) | namespace Impacto::Video {

FILE: src/video/clock.h
  function namespace (line 3) | namespace Impacto::Video {

FILE: src/video/ffmpegplayer.cpp
  type Impacto (line 39) | namespace Impacto {
    type Video (line 40) | namespace Video {
      function SubtitleCodecToType (line 43) | Profile::Subtitle::SubtitleType SubtitleCodecToType(AVCodecID id) {
      function AVBufferRef (line 105) | AVBufferRef* FFmpegPlayer::HwDecoderInit(const AVCodec* codec) {
      function findDecoderCodec (line 122) | std::optional<av::Codec> findDecoderCodec(av::Stream const& avStream) {

FILE: src/video/ffmpegplayer.h
  function namespace (line 19) | namespace Impacto {

FILE: src/video/ffmpegstream.cpp
  type Impacto (line 4) | namespace Impacto {
    type Video (line 5) | namespace Video {

FILE: src/video/ffmpegstream.h
  type AVFrame (line 25) | struct AVFrame
  type AVPacket (line 26) | struct AVPacket
  type AVCodecContext (line 27) | struct AVCodecContext
  type AVStream (line 28) | struct AVStream
  function AVMEDIA_TYPE_VIDEO (line 39) | struct AVTypes<AVMEDIA_TYPE_VIDEO> {
  function AVMEDIA_TYPE_AUDIO (line 44) | struct AVTypes<AVMEDIA_TYPE_AUDIO> {
  function AVMEDIA_TYPE_SUBTITLE (line 50) | struct AVTypes<AVMEDIA_TYPE_SUBTITLE> {
  type AVPacketItem (line 61) | struct AVPacketItem {

FILE: src/video/videoplayer.cpp
  type Impacto (line 4) | namespace Impacto {
    type Video (line 5) | namespace Video {
      function VideoPlayer (line 7) | VideoPlayer* VideoPlayer::Create(Io::Stream* stream) {

FILE: src/video/videoplayer.h
  function namespace (line 8) | namespace Impacto {

FILE: src/video/videosystem.cpp
  type Impacto (line 8) | namespace Impacto {
    type Video (line 9) | namespace Video {
      function VideoShutdown (line 11) | void VideoShutdown() {
      function VideoInit (line 17) | void VideoInit() {
      function VideoUpdate (line 41) | void VideoUpdate(float dt) {
      function VideoRender (line 47) | void VideoRender(float videoAlpha) {

FILE: src/video/videosystem.h
  function namespace (line 6) | namespace Impacto {

FILE: src/vm/expression.cpp
  type Impacto (line 9) | namespace Impacto {
    type Vm (line 11) | namespace Vm {
      type ExprTokenType (line 13) | enum ExprTokenType {
      type ExprToken (line 64) | struct ExprToken {
      class ExpressionNode (line 70) | class ExpressionNode {
      class ExpressionParser (line 83) | class ExpressionParser {
      function ExpressionEval (line 96) | int ExpressionEval(Sc3VmThread* thd) {
      function ExpressionNode (line 326) | ExpressionNode* ExpressionParser::ParseSubExpression(int minPreciden...
      function ExpressionNode (line 397) | ExpressionNode* ExpressionParser::ParseTerm() {

FILE: src/vm/expression.h
  function namespace (line 6) | namespace Impacto {

FILE: src/vm/inst_controlflow.cpp
  type Impacto (line 12) | namespace Impacto {
    type Vm (line 14) | namespace Vm {
      function VmInstruction (line 16) | VmInstruction(InstJump) {
      function VmInstruction (line 22) | VmInstruction(InstJumpTable) {
      function VmInstruction (line 35) | VmInstruction(InstIf) {
      function VmInstruction (line 54) | VmInstruction(InstCall) {
      function VmInstruction (line 73) | VmInstruction(InstJumpFar) {
      function VmInstruction (line 81) | VmInstruction(InstCallFar) {
      function VmInstruction (line 102) | VmInstruction(InstReturn) {
      function VmInstruction (line 120) | VmInstruction(InstReturnIfFlag) {
      function VmInstruction (line 142) | VmInstruction(InstLoop) {
      function VmInstruction (line 162) | VmInstruction(InstFlagOnJump) {
      function VmInstruction (line 172) | VmInstruction(InstKeyOnJump) {
      function VmInstruction (line 209) | VmInstruction(InstKeyOnJump_Dash) {
      function VmInstruction (line 233) | VmInstruction(InstClickOnJump) {
      function VmInstruction (line 252) | VmInstruction(InstKeyboardOnJump) {
      function VmInstruction (line 289) | VmInstruction(InstControlOnJump) {
      function VmInstruction (line 298) | VmInstruction(InstGetControl) { StartInstruction; }
      function VmInstruction (line 299) | VmInstruction(InstPackFileAddBind) { StartInstruction; }
      function VmInstruction (line 300) | VmInstruction(InstLoadJump) {
      function VmInstruction (line 312) | VmInstruction(InstSwitch) {
      function VmInstruction (line 317) | VmInstruction(InstCase) {
      function VmInstruction (line 327) | VmInstruction(InstFlagOffReturn) {

FILE: src/vm/inst_controlflow.h
  function namespace (line 5) | namespace Impacto {

FILE: src/vm/inst_dialogue.cpp
  type Impacto (line 24) | namespace Impacto {
    type Vm (line 26) | namespace Vm {
      function VmInstruction (line 30) | VmInstruction(InstMesViewFlag) {
      function VmInstruction (line 47) | VmInstruction(InstSetMesWinPri) {
      function VmInstruction (line 57) | VmInstruction(InstMesSync) {
      function VmInstruction (line 81) | VmInstruction(InstMesSetID) {
      function VmInstruction (line 125) | VmInstruction(InstMesCls) {
      function VmInstruction (line 147) | VmInstruction(InstMesVoiceWait) {
      function VmInstruction (line 152) | VmInstruction(InstMes) {
      function VmInstruction (line 230) | VmInstruction(InstMesMain) {
      function VmInstruction (line 331) | VmInstruction(InstSetMesModeFormat) {
      function VmInstruction (line 339) | VmInstruction(InstSetNGmoji) {
      function VmInstruction (line 349) | VmInstruction(InstMesRev) {
      function VmInstruction (line 385) | VmInstruction(InstMessWindow) {
      function VmInstruction (line 483) | VmInstruction(InstSel) {
      function VmInstruction (line 536) | VmInstruction(InstSelect) {
      function VmInstruction (line 584) | VmInstruction(InstSysSel) {
      function VmInstruction (line 594) | VmInstruction(InstSysSelect) {
      function VmInstruction (line 615) | VmInstruction(InstSetTextTable) {
      function VmInstruction (line 624) | VmInstruction(InstSetDic) {
      function VmInstruction (line 653) | VmInstruction(InstEncyclopedia) {
      function VmInstruction (line 662) | VmInstruction(InstNameID) {
      function VmInstruction (line 694) | VmInstruction(InstTips) {
      function VmInstruction (line 746) | VmInstruction(InstSetRevMes) {
      function ChkMesSkip (line 788) | void ChkMesSkip() {

FILE: src/vm/inst_dialogue.h
  function namespace (line 5) | namespace Impacto {

FILE: src/vm/inst_gamespecific.cpp
  type Impacto (line 23) | namespace Impacto {
    type Vm (line 25) | namespace Vm {
      function VmInstruction (line 31) | VmInstruction(InstUnk0041) {
      function VmInstruction (line 36) | VmInstruction(InstUnk0052) {
      function VmInstruction (line 42) | VmInstruction(InstUnk0053) {
      function VmInstruction (line 49) | VmInstruction(InstUnk0054) {
      function VmInstruction (line 56) | VmInstruction(InstAddContents) {
      function VmInstruction (line 82) | VmInstruction(InstUnk011F) {
      function VmInstruction (line 87) | VmInstruction(InstUnk012D) {
      function VmInstruction (line 92) | VmInstruction(InstAllClearChkCHLCC) {
      function VmInstruction (line 129) | VmInstruction(InstRINNS) {
      function VmInstruction (line 156) | VmInstruction(InstRINNSMain) {
      function VmInstruction (line 176) | VmInstruction(InstChatMO8) {
      function VmInstruction (line 228) | VmInstruction(InstGeotag) {
      function VmInstruction (line 399) | VmInstruction(InstUnk100FMO6) {
      function VmInstruction (line 411) | VmInstruction(InstUnk1010MO6) {
      function VmInstruction (line 421) | VmInstruction(InstUnk1011MO6) {
      function VmInstruction (line 437) | VmInstruction(InstUnk1037MO7) {
      function VmInstruction (line 441) | VmInstruction(InstUnk1037) {
      function VmInstruction (line 450) | VmInstruction(InstMapSystem) {
      function VmInstruction (line 688) | VmInstruction(InstPhoneSG) {
      function VmInstruction (line 765) | VmInstruction(InstMail) {
      function VmInstruction (line 868) | VmInstruction(InstUnk1038Darling) {
      function VmInstruction (line 876) | VmInstruction(InstUnk1038MO7) {
      function VmInstruction (line 884) | VmInstruction(InstTwipo) {
      function VmInstruction (line 952) | VmInstruction(InstTwipo_Dash) {
      function VmInstruction (line 1018) | VmInstruction(InstDelusionTriggerCHLCC) {
      function VmInstruction (line 1052) | VmInstruction(InstYesNoTriggerCCLCC) {
      function VmInstruction (line 1137) | VmInstruction(InstUnk103A) {
      function VmInstruction (line 1160) | VmInstruction(InstUnk1037Noah) {
      function VmInstruction (line 1389) | VmInstruction(InstMtrg) {

FILE: src/vm/inst_gamespecific.h
  function namespace (line 5) | namespace Impacto {

FILE: src/vm/inst_graphics2d.cpp
  type Impacto (line 15) | namespace Impacto {
    type Vm (line 17) | namespace Vm {
      function VmInstruction (line 23) | VmInstruction(InstCreateSurf) {
      function VmInstruction (line 34) | VmInstruction(InstReleaseSurf) {
      function VmInstruction (line 45) | VmInstruction(InstLoadPic) {
      function VmInstruction (line 71) | VmInstruction(InstSurfFill) {
      function VmInstruction (line 84) | VmInstruction(InstSCcapture) {
      function VmInstruction (line 90) | VmInstruction(InstBGload) {
      function VmInstruction (line 107) | VmInstruction(InstBGswap) {
      function VmInstruction (line 134) | VmInstruction(InstBGsetColor) {
      function VmInstruction (line 142) | VmInstruction(InstBGsetLink) {
      function VmInstruction (line 156) | VmInstruction(InstBGsetLinkOld) {
      function VmInstruction (line 168) | VmInstruction(InstCHAload) {
      function VmInstruction (line 205) | VmInstruction(InstCHAswap) {
      function VmInstruction (line 233) | VmInstruction(InstBGrelease) {
      function VmInstruction (line 243) | VmInstruction(InstBGcopy) {
      function VmInstruction (line 264) | VmInstruction(InstCHAcopy) {
      function VmInstruction (line 287) | VmInstruction(InstCharaLayerLoad) { StartInstruction; }
      function VmInstruction (line 288) | VmInstruction(InstCHAmove) {
      function VmInstruction (line 337) | VmInstruction(InstBGloadEx) {
      function VmInstruction (line 345) | VmInstruction(InstCHArelease) {
      function VmInstruction (line 355) | VmInstruction(InstGetCharaPause) {
      function VmInstruction (line 363) | VmInstruction(InstBGfadeExpInit) {
      function VmInstruction (line 373) | VmInstruction(InstBGeffectWave) {
      function VmInstruction (line 470) | VmInstruction(InstBGeffect) {
      function VmInstruction (line 496) | VmInstruction(InstBGeffectMO7) {
      function VmInstruction (line 508) | VmInstruction(InstFACEload) {
      function VmInstruction (line 536) | VmInstruction(InstFACErelease) {

FILE: src/vm/inst_graphics2d.h
  function namespace (line 5) | namespace Impacto {

FILE: src/vm/inst_graphics3d.cpp
  type Impacto (line 18) | namespace Impacto {
    type Vm (line 20) | namespace Vm {
      function VmInstruction (line 33) | VmInstruction(InstCHAload3D) {
      function VmInstruction (line 63) | VmInstruction(InstCHArelease3D) {
      function VmInstruction (line 69) | VmInstruction(InstUnk0204) {  // Not implemented
      function VmInstruction (line 76) | VmInstruction(InstCHAswap3DMaybe) {
      function VmInstruction (line 85) | VmInstruction(InstCHAplayAnim3DMaybe) {
      function VmInstruction (line 115) | VmInstruction(InstCHAUnk02073D) {
      function VmInstruction (line 123) | VmInstruction(InstCHAUnk02073D_Dash) {
      function ObjectIsRenderable (line 160) | inline bool ObjectIsRenderable(int objectId) {
      function ObjectIdToRenderableId (line 164) | inline int ObjectIdToRenderableId(int objectId) { return objectId - ...
      function VmInstruction (line 168) | VmInstruction(InstPositionObject) {
      function VmInstruction (line 240) | VmInstruction(InstPositionObject_Dash) {
      function VmInstruction (line 296) | VmInstruction(InstCHAsetAnim3D) {
 
Condensed preview — 1240 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,729K chars).
[
  {
    "path": ".clang-format",
    "chars": 58,
    "preview": "---\nBasedOnStyle: Google\nSortIncludes: false\nUseTab: Never"
  },
  {
    "path": ".gitattributes",
    "chars": 2518,
    "preview": "###############################################################################\n# Set default behavior to automatically "
  },
  {
    "path": ".github/workflows/docker-switch.yml",
    "chars": 1020,
    "preview": "name: Docker Image CI for GHCR\non: \n  push:\n    paths:\n      - docker/impacto-switch/*\n      - .github/workflows/docker-"
  },
  {
    "path": ".github/workflows/impacto.yml",
    "chars": 8988,
    "preview": "name: impacto\non:\n  push:\n    branches:\n    - \"master\"\n    tags:\n    - \"*\"\n  pull_request:\n    branches:\n    - \"master\"\n"
  },
  {
    "path": ".github/workflows/notify.yml",
    "chars": 2214,
    "preview": "name: notify\non:\n  workflow_run:\n    workflows: [impacto]\n    types:\n      - completed\njobs:\n  notify_fail:\n    name: No"
  },
  {
    "path": ".github/workflows/publish.yml",
    "chars": 2414,
    "preview": "name: publish\non:\n  workflow_run:\n    workflows: [impacto]\n    types: [completed]\n    branches: \n      - master\n      - "
  },
  {
    "path": ".gitignore",
    "chars": 4603,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User"
  },
  {
    "path": "CMakeLists.txt",
    "chars": 43626,
    "preview": "cmake_minimum_required(VERSION 3.28)\n\nif (POLICY CMP0141)\n  cmake_policy(SET CMP0141 NEW)\nendif()\n\nif (POLICY CMP0174)\n "
  },
  {
    "path": "CMakePresets.json",
    "chars": 2985,
    "preview": "{\n  \"version\": 3,\n  \"cmakeMinimumRequired\": {\n    \"major\": 3,\n    \"minor\": 25,\n    \"patch\": 0\n  },\n  \"configurePresets\":"
  },
  {
    "path": "HorizonNX.toolchain",
    "chars": 2231,
    "preview": "\nset(CMAKE_SYSTEM_NAME \"Generic\")\nset(WITH_PORTLIBS ON CACHE BOOL \"use portlibs ?\")\n\nmacro(msys_to_cmake_path MsysPath R"
  },
  {
    "path": "LICENSE",
    "chars": 752,
    "preview": "Copyright (c) 2024 Committee of Zero and contributors\n\nPermission to use, copy, modify, and/or distribute this software "
  },
  {
    "path": "README.md",
    "chars": 2662,
    "preview": "# impacto [![impacto](https://github.com/CommitteeOfZero/impacto/actions/workflows/impacto.yml/badge.svg)](https://githu"
  },
  {
    "path": "THIRDPARTY.md",
    "chars": 102074,
    "preview": "# Third-party component index\n\n**impacto contains third-party code at the following locations in the source distribution"
  },
  {
    "path": "VERSION",
    "chars": 7,
    "preview": "0.9.8.\n"
  },
  {
    "path": "android/.gitignore",
    "chars": 682,
    "preview": "distribution\napp/src/main/assets\napp/src/main/jniLibs\napp/src/main/cpp/impacto/src/**\n\n# Gradle files\n.gradle/\nbuild/\n\n#"
  },
  {
    "path": "android/.run/app.run.xml",
    "chars": 4301,
    "preview": "<component name=\"ProjectRunConfigurationManager\">\n  <configuration default=\"false\" name=\"app\" type=\"AndroidRunConfigurat"
  },
  {
    "path": "android/README.md",
    "chars": 2012,
    "preview": "Android Development:\n\n# Set up Android NDK\nDownload the Android NDK\nSet $ANDROID_NDK_HOME to point to NDK path\nSet $MINS"
  },
  {
    "path": "android/app/build.gradle",
    "chars": 1484,
    "preview": "apply plugin: 'com.android.application'\napply from: 'signing.gradle'\nandroid {\n    defaultConfig {\n        compileSdk 33"
  },
  {
    "path": "android/app/proguard-rules.pro",
    "chars": 1037,
    "preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /h"
  },
  {
    "path": "android/app/signing/.gitignore",
    "chars": 59,
    "preview": "prod.properties\nprod.jks\n!external.jks\n!external.properties"
  },
  {
    "path": "android/app/signing/external.properties",
    "chars": 258,
    "preview": "# Sign key alias for external.jks\nreleaseSignKeyAlias=key\n# Sign key password for external.jks\nreleaseSignKeyPassword=im"
  },
  {
    "path": "android/app/signing.gradle",
    "chars": 672,
    "preview": "// https://dev.to/ivanshafran/android-open-source-app-secure-build-config-38gi\ndef propertiesFilename = \"signing/prod.pr"
  },
  {
    "path": "android/app/src/main/AndroidManifest.xml",
    "chars": 2337,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <!-- O"
  },
  {
    "path": "android/app/src/main/java/com/committeeofzero/impacto/ImpactoActivity.java",
    "chars": 3498,
    "preview": "package com.committeeofzero.impacto;\n\nimport java.io.File;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\n"
  },
  {
    "path": "android/app/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/app/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/app/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/app/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/app/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/app/src/main/java/org/libsdl/app/SDLActivity.java",
    "chars": 76530,
    "preview": "package org.libsdl.app;\n\nimport android.app.Activity;\nimport android.app.AlertDialog;\nimport android.app.Dialog;\nimport "
  },
  {
    "path": "android/app/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/app/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/app/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/app/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/app/src/main/res/values/strings.xml",
    "chars": 25,
    "preview": "<resources>\n</resources>\n"
  },
  {
    "path": "android/app/src/main/res/values/styles.xml",
    "chars": 383,
    "preview": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar"
  },
  {
    "path": "android/build.gradle",
    "chars": 804,
    "preview": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    r"
  },
  {
    "path": "android/buildDebug.bat",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "android/gradle/wrapper/gradle-wrapper.properties",
    "chars": 250,
    "preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
  },
  {
    "path": "android/gradle.properties",
    "chars": 816,
    "preview": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will o"
  },
  {
    "path": "android/gradlew",
    "chars": 8669,
    "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/gradlew.bat",
    "chars": 2826,
    "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/installDebug.bat",
    "chars": 24,
    "preview": "gradlew.bat installDebug"
  },
  {
    "path": "android/settings.gradle",
    "chars": 16,
    "preview": "include ':app'\n\n"
  },
  {
    "path": "build-deps.ps1",
    "chars": 1410,
    "preview": "param(\n    [ValidateSet(\"x64\", \"x86\")][string]$Arch = \"x64\"\n)\n\nfunction SetEnv() {\n    $vswhere = \"${env:ProgramFiles(x8"
  },
  {
    "path": "doc/contributor_guide.md",
    "chars": 935,
    "preview": "# Code style\n\nThis project includes a clang-format file, which should be used for formatting all of the C++ code files. "
  },
  {
    "path": "doc/font-lb/CompoundCharacters.tbl",
    "chars": 44,
    "preview": "[E000]=ガ\n[E001]=タッ\n[E002]=  \n[E003-EFFF]= "
  },
  {
    "path": "doc/font-lb/RobonoCharset.utf8",
    "chars": 3200,
    "preview": " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz /:-;!?'.@#%~*_`()゚^>+<ノキリッ$&\",[]="
  },
  {
    "path": "doc/font-lb/font-lb.md",
    "chars": 2565,
    "preview": "Font is generated with mgsfontgen-dx (we should really publish that some time...) and the following patch:\n\n```\ndiff --g"
  },
  {
    "path": "doc/getting_started.md",
    "chars": 5762,
    "preview": "# Getting started\n\n## Game profiles\n\nTo handle the complexity of the full range of MAGES. engine titles (originally deve"
  },
  {
    "path": "doc/ubuntu_build.md",
    "chars": 1993,
    "preview": "# Build instructions based on Ubuntu 20.04 LTS\n\nYou can use the following shell script for getting dependencies and sett"
  },
  {
    "path": "doc/vs_build.md",
    "chars": 1653,
    "preview": "# Building with Visual Studio\n\n## Dependencies\n\nVisual Studio must have the \"Desktop development with C++\" optional feat"
  },
  {
    "path": "docker/impacto-emscripten/Dockerfile",
    "chars": 1978,
    "preview": "#   docker build -t emscripten:latest --build-arg EMSCRIPTEN_SDK=sdk-tag-1.38.21-64bit https://raw.githubusercontent.com"
  },
  {
    "path": "docker/impacto-emscripten/build_emscripten.sh",
    "chars": 195,
    "preview": "#!/bin/sh\n\nemcmake cmake -DCMAKE_FIND_ROOT_PATH=/impacto-deps -DCMAKE_PREFIX_PATH=/local $@ /src\nemmake make\n# https://g"
  },
  {
    "path": "docker/impacto-emscripten/libatrac9-emscripten.mk",
    "chars": 788,
    "preview": "NAME = libatrac9\n\nCC = emcc\nAR = emar\nSFLAGS = -O2\nCFLAGS = -Wall -Wextra -std=c99\n\nSRCDIR = src\nOBJDIR = obj\nBINDIR = b"
  },
  {
    "path": "docker/impacto-switch/Dockerfile",
    "chars": 540,
    "preview": "FROM devkitpro/devkita64\n\nLABEL org.opencontainers.image.source https://github.com/committeeofzero/impacto\n\nRUN apt inst"
  },
  {
    "path": "games/cc/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "games/chlcc/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "games/rne/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "games/sg0/.gitkeep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "portfiles/avcpp/0002-av_init_packet_deprecation.patch",
    "chars": 420,
    "preview": "diff --git a/CMakeLists.txt b/CMakeLists.txt\nindex a5fed05..7875b91 100644\n--- a/CMakeLists.txt\n+++ b/CMakeLists.txt\n@@ "
  },
  {
    "path": "portfiles/avcpp/portfile.cmake",
    "chars": 1366,
    "preview": "if(VCPKG_TARGET_IS_WINDOWS)\n    # avcpp doesn't export any symbols\n    vcpkg_check_linkage(ONLY_STATIC_LIBRARY)\nendif()\n"
  },
  {
    "path": "portfiles/avcpp/vcpkg.json",
    "chars": 577,
    "preview": "{\n  \"name\": \"avcpp\",\n  \"version\": \"3.0.1.0\",\n  \"port-version\": 0,\n  \"description\": \"Wrapper for the FFmpeg that simplify"
  },
  {
    "path": "profiles/cc/charset.lua",
    "chars": 1254,
    "preview": "root.Charset = {\n    Flags = {}\n};\n\nfor i = 0, (64 * 117) - 1 do root.Charset.Flags[i] = 0; end\n\nlocal spaces = {[0]=0, "
  },
  {
    "path": "profiles/cc/config.lua",
    "chars": 149,
    "preview": "root.Language = \"Japanese\";\nroot.ResolutionWidth = 1920;\nroot.ResolutionHeight = 1080;\nroot.Fullscreen = false;\nroot.Dat"
  },
  {
    "path": "profiles/cc/dialogue.lua",
    "chars": 5856,
    "preview": "root.Sprites[\"ADVBox\"] = {\n    Sheet = \"MesBox\",\n    Bounds = { X = 0, Y = 1, Width = 1920, Height = 298 }\n};\n\nroot.Spri"
  },
  {
    "path": "profiles/cc/font-lb.lua",
    "chars": 667,
    "preview": "root.Fonts = {\n    [\"Default\"] = {\n        Type = FontType.LB,\n        ForegroundSheet = \"FontLBForeground\",\n        Out"
  },
  {
    "path": "profiles/cc/font.lua",
    "chars": 3080,
    "preview": "root.Fonts = {\n    [\"Default\"] = {\n        Type = FontType.Basic,\n        Sheet = \"Font\",\n        Columns = 64,\n        "
  },
  {
    "path": "profiles/cc/game.lua",
    "chars": 1957,
    "preview": "root.ActiveRenderer = RendererType.OpenGL;\n\nroot.LayerCount = 100;\nroot.GameFeatures = GameFeature.Sc3VirtualMachine | G"
  },
  {
    "path": "profiles/cc/hud/backlogmenu.lua",
    "chars": 2381,
    "preview": "root.BacklogMenu = {\n    Type = BacklogMenuType.CC,\n    DrawType = DrawComponentType.SystemMenu,\n\n    BacklogBackgroundS"
  },
  {
    "path": "profiles/cc/hud/datedisplay.lua",
    "chars": 4186,
    "preview": "local sheet = \"Data\";\nlocal name = \"Date\";\n\nlocal yearNumFirstX = 2287.5;\nlocal yearNumFirstY = 94.5;\nlocal yearNumWidth"
  },
  {
    "path": "profiles/cc/hud/loadingdisplay.lua",
    "chars": 1795,
    "preview": "root.LoadingDisplay = {\n    ResourceLoadBgAnim = \"ResourceLoadingBg\",\n    SaveLoadBgAnim = \"SaveLoadingBg\",\n    LoadingI"
  },
  {
    "path": "profiles/cc/hud/saveicon.lua",
    "chars": 688,
    "preview": "root.SaveIcon = {\n    ForegroundAnimation = \"SaveIcon\",\n    DefaultPosition = { X = 92, Y = 713 },\n    BackgroundSprite "
  },
  {
    "path": "profiles/cc/hud/selectiondisplay.lua",
    "chars": 2434,
    "preview": "root.SelectionDisplay = {\n    DrawType = DrawComponentType.Text,\n    SelectionBackgroundSprite = \"SelectionBackground\",\n"
  },
  {
    "path": "profiles/cc/hud/sysmesboxdisplay.lua",
    "chars": 3259,
    "preview": "local sheet = \"SysMesBox\";\nlocal name = \"SysMesBox\";\n\nroot.SysMesBoxDisplay = {\n    Type = SysMesBoxType.CC,\n    DrawTyp"
  },
  {
    "path": "profiles/cc/hud/systemmenu.lua",
    "chars": 3353,
    "preview": "root.SystemMenu = {\n    Type = SystemMenuType.RNE,\n    DrawType = DrawComponentType.SystemMenu,\n    Background = {\n     "
  },
  {
    "path": "profiles/cc/hud/tipsmenu.lua",
    "chars": 50,
    "preview": "root.TipsMenu = {\n    Type = TipsMenuType.None\n};\n"
  },
  {
    "path": "profiles/cc/hud/tipsnotification.lua",
    "chars": 67,
    "preview": "root.TipsNotification = {\n    Type = TipsNotificationType.None,\n};\n"
  },
  {
    "path": "profiles/cc/hud/titlemenu.lua",
    "chars": 5637,
    "preview": "root.TitleMenu = {\n    Type = TitleMenuType.CC,\n    DrawType = DrawComponentType.SystemMenu,\n    PressToStartX = 816,\n  "
  },
  {
    "path": "profiles/cc/savedata.lua",
    "chars": 101,
    "preview": "root.SaveData = {\n    Type = SaveDataType.None,\n    SaveFilePath = \"games/cc/savedata/SYSTEM.DAT\",\n};"
  },
  {
    "path": "profiles/cc/scriptvars.lua",
    "chars": 543,
    "preview": "local sv = root.ScriptVars;\n\nsv.SW_TITLECUR1 = 2139;\nsv.SW_TITLECUR2 = 2140; --Actual guess\nsv.SW_BG1POSX_OFS = 2400;\nsv"
  },
  {
    "path": "profiles/cc/sprites.lua",
    "chars": 1322,
    "preview": "root.SpriteSheets = {\n    [\"Data\"] = {\n        Path = { Mount = \"system\", Id = 5 },\n        DesignWidth = 3072,\n        "
  },
  {
    "path": "profiles/cc/tipssystem.lua",
    "chars": 54,
    "preview": "root.TipsSystem = {\n    Type = TipsSystemType.None,\n};"
  },
  {
    "path": "profiles/cc/vfs.lua",
    "chars": 551,
    "preview": "root.Vfs = {\n    Mounts = {\n        [\"script\"] = {\"games/cc/gamedata/script.cls\"},\n        [\"system\"] = {\"games/cc/gamed"
  },
  {
    "path": "profiles/cc/waveeffects.lua",
    "chars": 88,
    "preview": "root.WaveEffects = {\n    WaveMaxCount = 20;\n    BGWaveGridSize = { X = 160, Y = 90 }\n};\n"
  },
  {
    "path": "profiles/cclcc/bgeff.lua",
    "chars": 60226,
    "preview": "root.BgEffData = {\n    -- bgId, eff1Shader, eff2Shader, eff3Shader, effChaShader\n    BgEffShaderData = {\n        {0, Sha"
  },
  {
    "path": "profiles/cclcc/charset.lua",
    "chars": 8069,
    "preview": "root.CharsetInternal = {\n    CharsetStr = \" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz /:-;!?'.@#%~*"
  },
  {
    "path": "profiles/cclcc/config.lua",
    "chars": 232,
    "preview": "root.Language = \"Japanese\";\nroot.ResolutionWidth = 1920;\nroot.ResolutionHeight = 1080;\nroot.Fullscreen = false;\nroot.Sub"
  },
  {
    "path": "profiles/cclcc/configsystem.lua",
    "chars": 598,
    "preview": "root.ConfigSystem = {\n    ShowTipsNotification = true;\n    AdvanceTextOnDirectionalInput = false;\n    DirectionalInputFo"
  },
  {
    "path": "profiles/cclcc/dialogue.lua",
    "chars": 6199,
    "preview": "root.Sprites[\"ADVBox\"] = {\n    Sheet = \"MesBox\",\n    Bounds = { X = 0, Y = 1, Width = 1920, Height = 298 }\n};\n\nroot.Spri"
  },
  {
    "path": "profiles/cclcc/font-lb-italic.lua",
    "chars": 805,
    "preview": "root.Fonts = {\n    [\"Default\"] = {\n        Type = FontType.LB,\n        ForegroundSheet = \"FontLBForeground\",\n        Out"
  },
  {
    "path": "profiles/cclcc/font-lb.lua",
    "chars": 667,
    "preview": "root.Fonts = {\n    [\"Default\"] = {\n        Type = FontType.LB,\n        ForegroundSheet = \"FontLBForeground\",\n        Out"
  },
  {
    "path": "profiles/cclcc/font.lua",
    "chars": 3086,
    "preview": "root.Fonts = {\n    [\"Default\"] = {\n        Type = FontType.Basic,\n        Sheet = \"Font\",\n        Columns = 64,\n        "
  },
  {
    "path": "profiles/cclcc/game.lua",
    "chars": 2426,
    "preview": "root.ActiveRenderer = RendererType.OpenGL;\n\nroot.LayerCount = 100;\nroot.GameFeatures = GameFeature.Sc3VirtualMachine | G"
  },
  {
    "path": "profiles/cclcc/gamespecific.lua",
    "chars": 538,
    "preview": "root.GameSpecific = {\n  Type = GameSpecificType.CCLCC,\n  UIButtonGuideSprites = {},\n  UIButtonGuideEndDisp = {\n    X = 0"
  },
  {
    "path": "profiles/cclcc/hud/backlogmenu.lua",
    "chars": 2380,
    "preview": "root.BacklogMenu = {\n    Type = BacklogMenuType.CC,\n    DrawType = DrawComponentType.SystemMenu,\n\n    BacklogBackgroundS"
  },
  {
    "path": "profiles/cclcc/hud/datedisplay.lua",
    "chars": 4186,
    "preview": "local sheet = \"Data\";\nlocal name = \"Date\";\n\nlocal yearNumFirstX = 2287.5;\nlocal yearNumFirstY = 94.5;\nlocal yearNumWidth"
  },
  {
    "path": "profiles/cclcc/hud/delusiontrigger.lua",
    "chars": 28,
    "preview": "root.DelusionTrigger = {\n};\n"
  },
  {
    "path": "profiles/cclcc/hud/extramenus.lua",
    "chars": 17636,
    "preview": "-- PgNumber, GridThumbnailPos, {X, Y, Width, Height} in album sheet for each variant\nlocal AlbumTbl = {\n    { 0, 0, {{0x"
  },
  {
    "path": "profiles/cclcc/hud/helpmenu.lua",
    "chars": 714,
    "preview": "root.HelpMenu = {\n    DrawType = DrawComponentType.SystemMenu,\n    Type = HelpMenuType.CCLCC,\n    FadeInDuration = 32/60"
  },
  {
    "path": "profiles/cclcc/hud/loadingdisplay.lua",
    "chars": 1795,
    "preview": "root.LoadingDisplay = {\n    ResourceLoadBgAnim = \"ResourceLoadingBg\",\n    SaveLoadBgAnim = \"SaveLoadingBg\",\n    LoadingI"
  },
  {
    "path": "profiles/cclcc/hud/optionsmenu.lua",
    "chars": 7188,
    "preview": "root.OptionsMenu = {\n    Type = OptionsMenuType.CCLCC,\n    DrawType = DrawComponentType.SystemMenu,\n\n    FadeInDuration "
  },
  {
    "path": "profiles/cclcc/hud/saveicon.lua",
    "chars": 749,
    "preview": "root.SaveIcon = {\n    ForegroundAnimation = \"SaveIcon\",\n    DefaultPosition = { X = 104, Y = 736 },\n    BackgroundSprite"
  },
  {
    "path": "profiles/cclcc/hud/savemenu.lua",
    "chars": 4280,
    "preview": "root.SaveMenu = {\n    Type = SaveMenuType.CCLCC,\n    DrawType = DrawComponentType.SystemMenu,\n    EmptyThumbnailSprite ="
  },
  {
    "path": "profiles/cclcc/hud/selectiondisplay.lua",
    "chars": 2434,
    "preview": "root.SelectionDisplay = {\n    DrawType = DrawComponentType.Text,\n    SelectionBackgroundSprite = \"SelectionBackground\",\n"
  },
  {
    "path": "profiles/cclcc/hud/sysmesboxdisplay.lua",
    "chars": 3259,
    "preview": "local sheet = \"SysMesBox\";\nlocal name = \"SysMesBox\";\n\nroot.SysMesBoxDisplay = {\n    Type = SysMesBoxType.CC,\n    DrawTyp"
  },
  {
    "path": "profiles/cclcc/hud/systemmenu.lua",
    "chars": 5016,
    "preview": "root.SystemMenu = {\n    Type = SystemMenuType.CCLCC,\n    DrawType = DrawComponentType.SystemMenu,\n\n    FadeInDuration = "
  },
  {
    "path": "profiles/cclcc/hud/tipsmenu.lua",
    "chars": 2658,
    "preview": "root.TipsMenu = {\n    Type = TipsMenuType.CCLCC,\n    DrawType = DrawComponentType.SystemMenu,\n    FadeInDuration = 0.4,\n"
  },
  {
    "path": "profiles/cclcc/hud/tipsnotification.lua",
    "chars": 736,
    "preview": "root.TipsNotification = {\n    Type = TipsNotificationType.CCLCC,\n    TextTableId = 0,\n    NotificationTextPart1MessageId"
  },
  {
    "path": "profiles/cclcc/hud/titlemenu.lua",
    "chars": 5787,
    "preview": "root.TitleMenu = {\n    Type = TitleMenuType.CCLCC,\n    DrawType = DrawComponentType.SystemMenu,\n    PressToStartX = 823,"
  },
  {
    "path": "profiles/cclcc/mapsystem.lua",
    "chars": 2458,
    "preview": "root.MapSystem = {\n    MapBackground = \"MapBackground\",\n    MapPartsPhotoSprites = {},\n    MapPartsArticleSprites = {},\n"
  },
  {
    "path": "profiles/cclcc/savedata.lua",
    "chars": 4984,
    "preview": "root.SaveData = {\n    Type = SaveDataType.CCLCC,\n    SaveFilePath = \"games/cclcc/savedata/SAVEDATA.DAT\",\n    ScriptMessa"
  },
  {
    "path": "profiles/cclcc/scriptinput.lua",
    "chars": 22,
    "preview": "-- This is just common"
  },
  {
    "path": "profiles/cclcc/scriptvars.lua",
    "chars": 1149,
    "preview": "local sv = root.ScriptVars;\n\nsv.SW_ATCHAN_SCROLL_MAX = 1504;\nsv.SW_TITLECUR1 = 2139;\nsv.SW_TITLECUR2 = 2140; --Actual gu"
  },
  {
    "path": "profiles/cclcc/sprites.lua",
    "chars": 4166,
    "preview": "root.SpriteSheets = {\n    [\"Album\"] = {\n        Path = { Mount = \"system\", Id = 0 },\n        DesignWidth = 4096,\n       "
  },
  {
    "path": "profiles/cclcc/tipssystem.lua",
    "chars": 135,
    "preview": "root.TipsSystem = {\n    Type = TipsSystemType.CCLCC,\n    MaxTipsCount = 300,\n    TipsTextTableId = 2,\n    TipsTextSortSt"
  },
  {
    "path": "profiles/cclcc/vfs.lua",
    "chars": 827,
    "preview": "root.Vfs = {\n    Mounts = {\n        [\"bg\"] = {\"games/cclcc/gamedata/bg.mpk\"},\n        [\"bgeffect\"] = {\"games/cclcc/gamed"
  },
  {
    "path": "profiles/cclcc/waveeffects.lua",
    "chars": 88,
    "preview": "root.WaveEffects = {\n    WaveMaxCount = 20;\n    BGWaveGridSize = { X = 160, Y = 90 }\n};\n"
  },
  {
    "path": "profiles/cclcc/yesnotrigger.lua",
    "chars": 6744,
    "preview": "local function createYesNoData(value1, value2, value3, value4, value5, value6, value7, value8, value9, value10)\n    retu"
  },
  {
    "path": "profiles/characterviewer/config.lua",
    "chars": 110,
    "preview": "root.Language = \"Japanese\";\nroot.ResolutionWidth = 1280;\nroot.ResolutionHeight = 720;\nroot.Fullscreen = false;"
  },
  {
    "path": "profiles/characterviewer/game.lua",
    "chars": 180,
    "preview": "include('chlcc/game.lua');\n\nroot.GameFeatures = GameFeature.Renderer2D | GameFeature.CharacterViewer | GameFeature.Audio"
  },
  {
    "path": "profiles/chlcc/achievementsystem.lua",
    "chars": 120,
    "preview": "root.AchievementData = {\n  Type = AchievementDataType.PS3,\n  AchievementDataPath = \"games/chlcc/trophydata/TROPHY.TRP\"\n}"
  },
  {
    "path": "profiles/chlcc/charset.lua",
    "chars": 2436,
    "preview": "root.CharsetInternal = {\n    CharsetStr = \" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz /:-;!?'.@#%~*"
  },
  {
    "path": "profiles/chlcc/config.lua",
    "chars": 148,
    "preview": "root.Language = \"Japanese\";\nroot.ResolutionWidth = 1280;\nroot.ResolutionHeight = 720;\nroot.Fullscreen = false;\nroot.Date"
  },
  {
    "path": "profiles/chlcc/dialogue.lua",
    "chars": 5256,
    "preview": "root.Sprites[\"ADVBox\"] = {\n    Sheet = \"Data\",\n    Bounds = { X = 768, Y = 815, Width = 1280, Height = 206 },\n};\nroot.Sp"
  },
  {
    "path": "profiles/chlcc/font-lb.lua",
    "chars": 719,
    "preview": "root.Fonts = {\n    [\"Default\"] = {\n        Type = FontType.LB,\n        ForegroundSheet = \"FontLBForeground\",\n        Out"
  },
  {
    "path": "profiles/chlcc/font.lua",
    "chars": 2257,
    "preview": "-- WARNING, 0-INDEXED ARRAYS AHEAD\n\nroot.Fonts = {\n    [\"Default\"] = {\n        Type = FontType.Basic,\n        Sheet = \"F"
  },
  {
    "path": "profiles/chlcc/game.lua",
    "chars": 2312,
    "preview": "root.ActiveRenderer = RendererType.OpenGL;\n\nroot.LayerCount = 100;\nroot.GameFeatures = GameFeature.Sc3VirtualMachine | G"
  },
  {
    "path": "profiles/chlcc/gamespecific.lua",
    "chars": 1235,
    "preview": "root.GameSpecific = {\n  Type = GameSpecificType.CHLCC,\n\n  MonitorScanline = \"MonitorScanline\",\n\n  ButterflySprites = {},"
  },
  {
    "path": "profiles/chlcc/hud/backlogmenu.lua",
    "chars": 2291,
    "preview": "root.BacklogMenu = {\n    Type = BacklogMenuType.CHLCC,\n    DrawType = DrawComponentType.SystemMenu,\n    BackgroundColor "
  },
  {
    "path": "profiles/chlcc/hud/commonmenu.lua",
    "chars": 1466,
    "preview": "root.CommonMenu = {\n  Type = CommonMenuType.CHLCC,\n  CircleStartPosition = { X = 20, Y = 20 },\n  CircleOffset = 200,\n\n  "
  },
  {
    "path": "profiles/chlcc/hud/datedisplay.lua",
    "chars": 4140,
    "preview": "local sheet = \"Data\";\nlocal name = \"Date\";\n\nlocal yearNumFirstX = 1525;\nlocal yearNumFirstY = 63;\nlocal yearNumWidth = 2"
  },
  {
    "path": "profiles/chlcc/hud/delusiontrigger.lua",
    "chars": 55031,
    "preview": "root.DelusionTrigger = {\n  BackgroundSprite = \"BackgroundSprite\",\n  BackgroundSpriteMask = \"BackgroundSpriteMask\",\n  Scr"
  },
  {
    "path": "profiles/chlcc/hud/extramenus.lua",
    "chars": 20798,
    "preview": "root.ExtraMenus = {\n    ClearListMenu = {\n        DrawType = DrawComponentType.SystemMenu,\n        Type = ClearListMenuT"
  },
  {
    "path": "profiles/chlcc/hud/loadingdisplay.lua",
    "chars": 1795,
    "preview": "root.LoadingDisplay = {\n    ResourceLoadBgAnim = \"ResourceLoadingBg\",\n    SaveLoadBgAnim = \"SaveLoadingBg\",\n    LoadingI"
  },
  {
    "path": "profiles/chlcc/hud/optionsmenu.lua",
    "chars": 9418,
    "preview": "root.OptionsMenu = {\n    DrawType = DrawComponentType.SystemMenu,\n    Type = OptionsMenuType.CHLCC,\n\n    FadeInDuration "
  },
  {
    "path": "profiles/chlcc/hud/saveicon.lua",
    "chars": 550,
    "preview": "root.SaveIcon = {\n    DefaultPosition = { X = 1120, Y = 495 },\n    SaveIconMenuOverlay = false,\n    SaveIconCurrentType "
  },
  {
    "path": "profiles/chlcc/hud/savemenu.lua",
    "chars": 5756,
    "preview": "root.SaveMenu = {\n    Type = SaveMenuType.CHLCC,\n    DrawType = DrawComponentType.SystemMenu,\n    SaveBackgroundColor = "
  },
  {
    "path": "profiles/chlcc/hud/selectiondisplay.lua",
    "chars": 2434,
    "preview": "root.SelectionDisplay = {\n    DrawType = DrawComponentType.Text,\n    SelectionBackgroundSprite = \"SelectionBackground\",\n"
  },
  {
    "path": "profiles/chlcc/hud/sysmesboxdisplay.lua",
    "chars": 2101,
    "preview": "local sheet = \"Data\";\nlocal name = \"SysMesBox\";\n\nroot.SysMesBoxDisplay = {\n    Type = SysMesBoxType.CHLCC,\n    DrawType "
  },
  {
    "path": "profiles/chlcc/hud/systemmenu.lua",
    "chars": 6543,
    "preview": "root.SystemMenu = {\n    Type = SystemMenuType.CHLCC,\n    DrawType = DrawComponentType.SystemMenu,\n    BackgroundColor = "
  },
  {
    "path": "profiles/chlcc/hud/tipsmenu.lua",
    "chars": 6537,
    "preview": "root.TipsMenu = {\n    DrawType = DrawComponentType.SystemMenu,\n    Type = TipsMenuType.CHLCC,\n    TransitionDuration = 6"
  },
  {
    "path": "profiles/chlcc/hud/tipsnotification.lua",
    "chars": 679,
    "preview": "root.TipsNotification = {\n    Type = TipsNotificationType.CHLCC,\n\n    TextTableId = 2,\n    NotificationTextPart1MessageI"
  },
  {
    "path": "profiles/chlcc/hud/titlemenu.lua",
    "chars": 15837,
    "preview": "local languageSuffix = root.Language\nif root.Language == \"Japanese\" then languageSuffix = \"\" end\n\nroot.TitleMenu = {\n   "
  },
  {
    "path": "profiles/chlcc/hud/trophymenu.lua",
    "chars": 3767,
    "preview": "root.TrophyMenu = {\n    DrawType = DrawComponentType.SystemMenu,\n    Type = TrophyMenuType.CHLCC,\n\n    BackgroundColor ="
  },
  {
    "path": "profiles/chlcc/savedata.lua",
    "chars": 4751,
    "preview": "root.SaveData = {\n    Type = SaveDataType.CHLCC,\n    SaveFilePath = \"games/chlcc/savedata/SYSTEM.DAT\",\n    ThumbnailFile"
  },
  {
    "path": "profiles/chlcc/scriptinput.lua",
    "chars": 1460,
    "preview": "--[[\nlocal AllDirDirect = root.PADinput.PAD1UP | root.PADinput.PAD1DOWN | root.PADinput.PAD1LEFT | root.PADinput.PAD1RIG"
  },
  {
    "path": "profiles/chlcc/scriptvars.lua",
    "chars": 4751,
    "preview": "local sv = root.ScriptVars;\n\nsv.SW_MESNAMEID0 = 0; -- Disable\nsv.SW_TOTALPLAYTIME = 990;\nsv.SW_GAMESTATE = 1012;\nsv.SW_T"
  },
  {
    "path": "profiles/chlcc/sprites.lua",
    "chars": 3046,
    "preview": "root.SpriteSheets = {\n    [\"CG\"] = {\n        Path = { Mount = \"system\", Id = 0 },\n        DesignWidth = 2048,\n        De"
  },
  {
    "path": "profiles/chlcc/tipssystem.lua",
    "chars": 1283,
    "preview": "local SortCategoryMappingJP = {\n    0x0,  0x0,  0x1,  0x1,\n    0x2,  0x2,  0x3,  0x3,\n    0x4,  0x4,  0x5,  0x5,\n    0x6"
  },
  {
    "path": "profiles/chlcc/vfs.lua",
    "chars": 525,
    "preview": "root.Vfs = {\n    Mounts = {\n        [\"bg\"] = {\"games/chlcc/gamedata/BG.CPK\"},\n        [\"bgm\"] = {\"games/chlcc/gamedata/B"
  },
  {
    "path": "profiles/chlcc/waveeffects.lua",
    "chars": 88,
    "preview": "root.WaveEffects = {\n    WaveMaxCount = 10;\n    BGWaveGridSize = { X = 160, Y = 90 }\n};\n"
  },
  {
    "path": "profiles/chn/charset.lua",
    "chars": 1254,
    "preview": "root.Charset = {\n    Flags = {}\n};\n\nfor i = 0, (64 * 117) - 1 do root.Charset.Flags[i] = 0; end\n\nlocal spaces = {[0]=0, "
  },
  {
    "path": "profiles/chn/config.lua",
    "chars": 149,
    "preview": "root.Language = \"Japanese\";\nroot.ResolutionWidth = 1920;\nroot.ResolutionHeight = 1080;\nroot.Fullscreen = false;\nroot.Dat"
  },
  {
    "path": "profiles/chn/dialogue.lua",
    "chars": 3501,
    "preview": "root.Sprites[\"ADVBox\"] = {\n    Sheet = \"MesBox\",\n    Bounds = { X = 0, Y = 0, Width = 1920, Height = 281 }\n};\n\nroot.Dial"
  },
  {
    "path": "profiles/chn/font-lb.lua",
    "chars": 669,
    "preview": "root.Fonts = {\n    [\"Default\"] = {\n        Type = FontType.LB,\n        ForegroundSheet = \"FontLBForeground\",\n        Out"
  },
  {
    "path": "profiles/chn/font.lua",
    "chars": 3080,
    "preview": "root.Fonts = {\n    [\"Default\"] = {\n        Type = FontType.Basic,\n        Sheet = \"Font\",\n        Columns = 64,\n        "
  },
  {
    "path": "profiles/chn/game.lua",
    "chars": 1833,
    "preview": "root.ActiveRenderer = RendererType.OpenGL;\n\nroot.LayerCount = 100;\nroot.GameFeatures = GameFeature.Sc3VirtualMachine | G"
  },
  {
    "path": "profiles/chn/hud/backlogmenu.lua",
    "chars": 1186,
    "preview": "root.BacklogMenu = {\n    Type = BacklogMenuType.None,\n    DrawType = DrawComponentType.ExtrasScenes,\n    BacklogBackgrou"
  },
  {
    "path": "profiles/chn/hud/datedisplay.lua",
    "chars": 4186,
    "preview": "local sheet = \"Data\";\nlocal name = \"Date\";\n\nlocal yearNumFirstX = 2287.5;\nlocal yearNumFirstY = 94.5;\nlocal yearNumWidth"
  },
  {
    "path": "profiles/chn/hud/loadingdisplay.lua",
    "chars": 1795,
    "preview": "root.LoadingDisplay = {\n    ResourceLoadBgAnim = \"ResourceLoadingBg\",\n    SaveLoadBgAnim = \"SaveLoadingBg\",\n    LoadingI"
  },
  {
    "path": "profiles/chn/hud/saveicon.lua",
    "chars": 705,
    "preview": "root.SaveIcon = {\n    ForegroundAnimation = \"SaveIcon\",\n    DefaultPosition = { X = 1729.5, Y = 34.5 },\n    BackgroundSp"
  },
  {
    "path": "profiles/chn/hud/selectiondisplay.lua",
    "chars": 2434,
    "preview": "root.SelectionDisplay = {\n    DrawType = DrawComponentType.Text,\n    SelectionBackgroundSprite = \"SelectionBackground\",\n"
  },
  {
    "path": "profiles/chn/hud/sysmesboxdisplay.lua",
    "chars": 2930,
    "preview": "local sheet = \"SysMesBox\";\nlocal name = \"SysMesBox\";\n\nroot.SysMesBoxDisplay = {\n    Type = SysMesBoxType.CC,\n    DrawTyp"
  },
  {
    "path": "profiles/chn/hud/systemmenu.lua",
    "chars": 3353,
    "preview": "root.SystemMenu = {\n    Type = SystemMenuType.RNE,\n    DrawType = DrawComponentType.SystemMenu,\n    Background = {\n     "
  },
  {
    "path": "profiles/chn/hud/tipsmenu.lua",
    "chars": 50,
    "preview": "root.TipsMenu = {\n    Type = TipsMenuType.None\n};\n"
  },
  {
    "path": "profiles/chn/hud/tipsnotification.lua",
    "chars": 64,
    "preview": "root.TipsNotification = {\n\tType = TipsNotificationType.None,\n};\n"
  },
  {
    "path": "profiles/chn/hud/titlemenu.lua",
    "chars": 5637,
    "preview": "root.TitleMenu = {\n    Type = TitleMenuType.CC,\n    DrawType = DrawComponentType.SystemMenu,\n    PressToStartX = 816,\n  "
  },
  {
    "path": "profiles/chn/savedata.lua",
    "chars": 101,
    "preview": "root.SaveData = {\n    Type = SaveDataType.None,\n    SaveFilePath = \"games/cc/savedata/SYSTEM.DAT\",\n};"
  },
  {
    "path": "profiles/chn/scriptvars.lua",
    "chars": 449,
    "preview": "local sv = root.ScriptVars;\n\nsv.SW_BG1POSX_OFS = 2400;\nsv.SW_BG1POSY_OFS = 2401;\nsv.SW_BG1SX_OFS = 2402;\nsv.SW_BG1SY_OFS"
  },
  {
    "path": "profiles/chn/sprites.lua",
    "chars": 1192,
    "preview": "root.SpriteSheets = {\n    [\"Data\"] = {\n        Path = { Mount = \"system\", Id = 18 },\n        DesignWidth = 3072,\n       "
  },
  {
    "path": "profiles/chn/tipssystem.lua",
    "chars": 54,
    "preview": "root.TipsSystem = {\n    Type = TipsSystemType.None,\n};"
  },
  {
    "path": "profiles/chn/vfs.lua",
    "chars": 613,
    "preview": "root.Vfs = {\n    Mounts = {\n        [\"script\"] = {\"games/chn/gamedata/script.cls\"},\n        [\"system\"] = {\"games/chn/gam"
  },
  {
    "path": "profiles/common/animation.lua",
    "chars": 2780,
    "preview": "if root.Animations == nil then root.Animations = {} end\nAnimationDirections = {\n    Left = 0,\n    Right = 1,\n    Down = "
  },
  {
    "path": "profiles/common/charset.lua",
    "chars": 1555,
    "preview": "root.Charset = {\n    Flags = {},\n    CharacterToSc3 = {}\n};\n\nfunction AddCharsetFlag(characterString, flag)\n    if chara"
  },
  {
    "path": "profiles/common/scriptinput.lua",
    "chars": 8940,
    "preview": "root.PADinput = {\n    PAD1UP = 0x10000,\n    PAD1DOWN = 0x20000,\n    PAD1LEFT = 0x40000,\n    PAD1RIGHT = 0x80000,\n    PAD"
  },
  {
    "path": "profiles/common/scriptvars.lua",
    "chars": 11668,
    "preview": "root.ScriptVars = {\n    SW_TITLECT=1016,\n    LR_DATE=1029,\n    SW_ACTORVOICE_ALPHA=1102,\n    SW_ACTORVOICE_CUR=1103,\n   "
  },
  {
    "path": "profiles/darling/charset.lua",
    "chars": 1290,
    "preview": "-- WARNING, 0-INDEXED ARRAYS AHEAD\n\nroot.Charset = {\n    Flags = {}\n};\n\nfor i = 0, (64 * 43) - 1 do root.Charset.Flags[i"
  },
  {
    "path": "profiles/darling/config.lua",
    "chars": 148,
    "preview": "root.Language = \"Japanese\";\nroot.ResolutionWidth = 1280;\nroot.ResolutionHeight = 720;\nroot.Fullscreen = false;\nroot.Date"
  },
  {
    "path": "profiles/darling/dialogue.lua",
    "chars": 3653,
    "preview": "root.Sprites[\"ADVBox\"] = {\n    Sheet = \"Data\",\n    Bounds = { X = 767, Y = 806, Width = 1280, Height = 216 },\n};\n\nroot.S"
  },
  {
    "path": "profiles/darling/font.lua",
    "chars": 3115,
    "preview": "-- WARNING, 0-INDEXED ARRAYS AHEAD\n\nroot.Fonts = {\n    [\"Default\"] = {\n        Type = FontType.Basic,\n        Sheet = \"F"
  },
  {
    "path": "profiles/darling/game.lua",
    "chars": 1832,
    "preview": "root.ActiveRenderer = RendererType.OpenGL;\n\nroot.LayerCount = 100;\nroot.GameFeatures = GameFeature.Sc3VirtualMachine | G"
  },
  {
    "path": "profiles/darling/hud/backlogmenu.lua",
    "chars": 1187,
    "preview": "root.BacklogMenu = {\n    Type = BacklogMenuType.None,\n    DrawType = DrawComponentType.ExtrasScenes,\n    BacklogBackgrou"
  },
  {
    "path": "profiles/darling/hud/datedisplay.lua",
    "chars": 4140,
    "preview": "local sheet = \"Data\";\nlocal name = \"Date\";\n\nlocal yearNumFirstX = 1525;\nlocal yearNumFirstY = 63;\nlocal yearNumWidth = 2"
  },
  {
    "path": "profiles/darling/hud/loadingdisplay.lua",
    "chars": 1795,
    "preview": "root.LoadingDisplay = {\n    ResourceLoadBgAnim = \"ResourceLoadingBg\",\n    SaveLoadBgAnim = \"SaveLoadingBg\",\n    LoadingI"
  },
  {
    "path": "profiles/darling/hud/saveicon.lua",
    "chars": 684,
    "preview": "root.SaveIcon = {\n    ForegroundAnimation = \"SaveIcon\",\n    DefaultPosition = { X = 1153, Y = 23 },\n    BackgroundSprite"
  },
  {
    "path": "profiles/darling/hud/selectiondisplay.lua",
    "chars": 2434,
    "preview": "root.SelectionDisplay = {\n    DrawType = DrawComponentType.Text,\n    SelectionBackgroundSprite = \"SelectionBackground\",\n"
  },
  {
    "path": "profiles/darling/hud/sysmesboxdisplay.lua",
    "chars": 1681,
    "preview": "local sheet = \"Data\";\nlocal name = \"SysMesBox\";\n\nroot.SysMesBoxDisplay = {\n    Type = SysMesBoxType.Darling,\n    DrawTyp"
  },
  {
    "path": "profiles/darling/hud/systemmenu.lua",
    "chars": 2016,
    "preview": "root.SystemMenu = {\n    Type = SystemMenuType.None,\n    DrawType = DrawComponentType.SystemMenu,\n    ButtonBackgroundSpr"
  },
  {
    "path": "profiles/darling/hud/tipsmenu.lua",
    "chars": 50,
    "preview": "root.TipsMenu = {\n    Type = TipsMenuType.None\n};\n"
  },
  {
    "path": "profiles/darling/hud/tipsnotification.lua",
    "chars": 67,
    "preview": "root.TipsNotification = {\n    Type = TipsNotificationType.None,\n};\n"
  },
  {
    "path": "profiles/darling/hud/titlemenu.lua",
    "chars": 9764,
    "preview": "root.TitleMenu = {\n    Type = TitleMenuType.CHLCC,\n    DrawType = DrawComponentType.SystemMenu,\n    PressToStartX = 72,\n"
  },
  {
    "path": "profiles/darling/savedata.lua",
    "chars": 106,
    "preview": "root.SaveData = {\n    Type = SaveDataType.None,\n    SaveFilePath = \"games/darling/savedata/SYSTEM.DAT\",\n};"
  },
  {
    "path": "profiles/darling/scriptvars.lua",
    "chars": 482,
    "preview": "local sv = root.ScriptVars;\n\nsv.SW_BG1POSX_OFS = 2300;\nsv.SW_BG1POSY_OFS = 2301;\nsv.SW_BG1SX_OFS = 2302;\nsv.SW_BG1SY_OFS"
  },
  {
    "path": "profiles/darling/sprites.lua",
    "chars": 931,
    "preview": "root.SpriteSheets = {\n    [\"Data\"] = {\n        Path = { Mount = \"system\", Id = 10 },\n        DesignWidth = 2048,\n       "
  },
  {
    "path": "profiles/darling/tipssystem.lua",
    "chars": 54,
    "preview": "root.TipsSystem = {\n    Type = TipsSystemType.None,\n};"
  },
  {
    "path": "profiles/darling/vfs.lua",
    "chars": 543,
    "preview": "root.Vfs = {\n    Mounts = {\n        [\"script\"] = {\"games/darling/gamedata/script.cls\"},\n        [\"system\"] = {\"games/dar"
  },
  {
    "path": "profiles/dash/charset.lua",
    "chars": 1253,
    "preview": "root.Charset = {\n    Flags = {}\n};\n\nfor i = 0, (64 * 50) - 1 do root.Charset.Flags[i] = 0; end\n\nlocal spaces = {[0]=0, 6"
  },
  {
    "path": "profiles/dash/config.lua",
    "chars": 149,
    "preview": "root.Language = \"Japanese\";\nroot.ResolutionWidth = 1920;\nroot.ResolutionHeight = 1080;\nroot.Fullscreen = false;\nroot.Dat"
  },
  {
    "path": "profiles/dash/dialogue.lua",
    "chars": 4239,
    "preview": "root.Sprites[\"ADVBox\"] = {\n    Sheet = \"MesBox\",\n    Bounds = { X = 0, Y = 864, Width = 1920, Height = 281 }\n};\n\nroot.Di"
  }
]

// ... and 1040 more files (download for full content)

About this extraction

This page contains the full source code of the CommitteeOfZero/impacto GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1240 files (7.0 MB), approximately 1.9M tokens, and a symbol index with 5346 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.

Copied to clipboard!