Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
286 commits
Select commit Hold shift + click to select a range
ac08831
XTCovnert: add archive extraction code
ds-sloth Dec 6, 2024
7b01bd8
libxtconvert.cpp: force fallback masks made from PNGs to be b/w
ds-sloth Dec 6, 2024
ef9a091
libxtconvert.cpp: allow providing base assets as archive
ds-sloth Dec 6, 2024
ea28702
libxtconvert.cpp: specify modification time in created ISO
ds-sloth Dec 6, 2024
2d17ca7
libxtconvert.cpp: print error string to qInfo()
ds-sloth Dec 6, 2024
5d9cec4
XTConvert: use hardcoded embedded masks when none provided
ds-sloth Dec 6, 2024
748a3c4
libxtconvert.cpp: use folder containing gameinfo.ini as assets root
ds-sloth Dec 6, 2024
15890eb
libxtconvert.cpp: use folder containing .wld/.wldx as episode root
ds-sloth Dec 6, 2024
8eeeba2
libxtconvert.cpp: don't look for GIFs with invalid indexes
ds-sloth Dec 7, 2024
842ab19
libxtconvert.cpp: skip certain nuisance filetypes
ds-sloth Dec 7, 2024
919c15a
graphics_load.cpp: update GIF conversion conditions
ds-sloth Dec 7, 2024
a1ac3f5
libxtconvert.cpp: make log more "quiet"
ds-sloth Dec 7, 2024
d9070e0
libxtconvert.cpp: refine GIF save logic
ds-sloth Dec 7, 2024
7a75b20
libxtconvert.cpp: downscale GIF masks when targeting Wii/3DS
ds-sloth Dec 7, 2024
9e29181
XTConvert: add option to force creation of ISO on 3DS
ds-sloth Dec 7, 2024
247259c
ArgGroup.h: don't display values not visible in help
ds-sloth Dec 7, 2024
5ac8f22
XTConvert: add CLI
ds-sloth Dec 7, 2024
bdf1832
mbediso: update for less aggressive compression
ds-sloth Dec 8, 2024
5e816d3
libxtconvert.cpp: update filenames
ds-sloth Dec 8, 2024
b269192
mbediso: update again
ds-sloth Dec 8, 2024
f8bbe94
XTConvert: prefer ISO+LZ4 on 3DS
ds-sloth Dec 8, 2024
9835fcd
libxtconvert.cpp: fix long filename support
ds-sloth Dec 14, 2024
fb7860c
libxtconvert.cpp: update music quality
ds-sloth Dec 14, 2024
64334b9
libxtconvert.cpp: don't make DSGs with width/height above 1024
ds-sloth Dec 15, 2024
9f1501e
libxtconvert.cpp: ignore PDN files
ds-sloth Dec 15, 2024
eec95c6
libxtconvert.cpp: skip PNGs when SMBX 1.3 GIFs are also present
ds-sloth Dec 15, 2024
b7699a0
libxtconvert.cpp: create maxmod soundbank with external mmutil
ds-sloth Dec 15, 2024
e776a75
libxtconvert.cpp: convert more file types to QOA
ds-sloth Dec 15, 2024
dd57da2
XTConvert: add submodule mmutil
ds-sloth Dec 15, 2024
0bcce74
libxtconvert.cpp: use libmmutil instead of system mmutil
ds-sloth Dec 16, 2024
486bb72
XTConvert: remove duplicate lib from library filename
ds-sloth Dec 16, 2024
4a12fe3
XTConvert: organize source
ds-sloth Dec 16, 2024
5441dd8
XTConvert: squash some warnings
ds-sloth Dec 16, 2024
54c8032
XTConvert: add GPLv3 license header
ds-sloth Dec 16, 2024
dcaf734
libxtconvert.cpp: don't clobber existing pack-id for episode
ds-sloth Dec 16, 2024
90356b5
XTConvert: allow rar archives as input
ds-sloth Dec 16, 2024
6ff809d
libxtconvert.cpp: don't allow already-converted input
ds-sloth Dec 16, 2024
227280d
libxtconvert.cpp: update filters
ds-sloth Dec 16, 2024
e084da5
Resume work on XTConvert UI
ds-sloth Dec 16, 2024
c368b1d
libxtconvert.cpp: start work on progress reporting
ds-sloth Dec 16, 2024
2800a7a
xtconvert_cli.cpp: add ability to convert for desktop
ds-sloth Dec 16, 2024
6bf8538
libxtconvert.cpp: update condition for c5a3 format
ds-sloth Dec 17, 2024
3a84883
libxtconvert.cpp: update excluded filetypes and unconditional copies
ds-sloth Dec 17, 2024
50c8bad
libxtconvert.cpp: prefer PNG for UI assets, etc
ds-sloth Dec 22, 2024
2ac17b7
libxtconvert.cpp: don't delete mask GIFs with desktop target
ds-sloth Dec 22, 2024
6600933
XTConvert: implement legacy archive formats
ds-sloth Dec 27, 2024
8d22305
XTConvert: add callback system for logs
ds-sloth Jan 12, 2025
1cd06b9
XTConvert: check that player texture shrink is valid
ds-sloth Jan 12, 2025
cc2ba37
XTConvert: refine logging interface
ds-sloth Jan 13, 2025
115cfcc
XTConvertUI: first worker thread implementation
ds-sloth Jan 13, 2025
bb42fa6
libxtconvert.cpp: refine filetypes
ds-sloth Jan 13, 2025
9a2aad8
XTConvert: add progress tracker
ds-sloth Jan 15, 2025
8da80a2
Update libarchive
ds-sloth Jan 15, 2025
99c7843
libxtconvert.cpp: shrink players on all homebrew platforms
ds-sloth Jan 17, 2025
2b746fc
libxtconvert.cpp: update file logging conditions
ds-sloth Jan 17, 2025
d41f3ef
libxtconvert.cpp: add extra log callbacks
ds-sloth Jan 17, 2025
9c13cda
XTConvert: update UI
ds-sloth Jan 17, 2025
921b891
xt_convert.cpp: fix save file dialog options
ds-sloth Jan 17, 2025
f66f312
XTConvert: minor UI tweaks
ds-sloth Jan 17, 2025
d37510f
XTConvert: add logging for lost mask/transparency
ds-sloth Jan 17, 2025
320ced0
libxtconvert.cpp: refine filetypes
ds-sloth Jan 17, 2025
901219c
libxtconvert.cpp: skip TheXTech data directories
ds-sloth Jan 17, 2025
8e850f9
XTConvert: use tab bar for logs
ds-sloth Jan 17, 2025
ed5e383
libxtconvert.cpp: refine filetypes again
ds-sloth Jan 17, 2025
b2a0079
libxtconvert.cpp: more filetypes work
ds-sloth Jan 17, 2025
466eba3
XTConvert: refine colors
ds-sloth Jan 17, 2025
7e15fbc
XTConvert: simplify progress bar logic
ds-sloth Jan 17, 2025
de5c7dc
libxtconvert.cpp: don't create invalid graphics.list for mainline
ds-sloth Jan 18, 2025
b02021c
libxtconvert.cpp: add psm to list of non-tracker music
ds-sloth Jan 18, 2025
3600f8e
xt_convert.cpp: reset progress bar on parameter change
ds-sloth Jan 24, 2025
fabd535
libxtconvert.cpp: don't exclude icon resources on desktop
ds-sloth Jan 24, 2025
da440c2
libxtconvert.cpp: try to use better permission setting for 7z archive
ds-sloth Jan 24, 2025
58ff602
ubuntu-ci.yml: use recursive submodule update
ds-sloth Jan 24, 2025
5923f2c
GitHub CI: don't upload to build server on manual dispatch
ds-sloth Jan 24, 2025
38e5ada
CMake: Disabled -Werror at libarchive on debug builds
Wohlstand Jan 26, 2025
891671e
Update mmutil
ds-sloth Feb 15, 2025
5845a33
XTConvert/CMakeLists.txt: fix Windows build
ds-sloth Mar 9, 2025
9b8faa2
libxtconvert.cpp: don't totally fail on invalid audio
ds-sloth Mar 9, 2025
4b94120
libxtconvert.cpp: treat wav as a known filetype
ds-sloth Mar 9, 2025
50acb8d
libxtconvert.cpp: remove spurious error message
ds-sloth Mar 11, 2025
4bc69ec
XTConvert: save real image dimensions in size lists
ds-sloth Mar 11, 2025
d2e9d3d
libxtconvert.cpp: fix right column of odd-width DSGs
ds-sloth Mar 11, 2025
f667983
XTConvert: add ability to detect non-2x textures
ds-sloth Mar 11, 2025
27c79e7
XTConvert: Attempt to fix the Windows build
Wohlstand Mar 15, 2025
3a63150
Move XTConvert to new directory
Wohlstand Mar 15, 2025
2e756fa
Maintainer: Fixed build with disabled XTConvert
Wohlstand Mar 15, 2025
d8d3655
XTConvert: Fixed WinXP compatibility
Wohlstand Mar 15, 2025
69e0cbd
XTConvert: Added Moondust version code
Wohlstand Mar 15, 2025
6b318ab
XTConvert: Attempt to fix the runtime
Wohlstand Mar 15, 2025
024c35c
XTConvert: Slightly adjust heads
Wohlstand Mar 15, 2025
2a69d7c
Adjusted list of git modules
Wohlstand Mar 16, 2025
020d1cd
Ouch
Wohlstand Mar 16, 2025
0d5d3d1
Attempt to fix skewed modules
Wohlstand Mar 16, 2025
4141822
Fixed biggest mistake inthe universe
Wohlstand Mar 16, 2025
8d5404b
Update libarchive
Wohlstand Mar 16, 2025
576aa0b
Update mmutil
ds-sloth Mar 16, 2025
3443a4e
Update upstream branches of modules
ds-sloth Mar 16, 2025
2535e16
misc.cpp: fix fileTime on POSIX-like platforms
ds-sloth Mar 16, 2025
a6696df
Update mbediso
Wohlstand Mar 16, 2025
04c411b
CI: Add libxz and libgnurx into Windows CI
Wohlstand Mar 16, 2025
ddb8876
XTConvert: Fixed CMake warning at modern CMake
Wohlstand Mar 16, 2025
c27ab6d
XTConvert: Turn all libraries into external projects
Wohlstand Mar 18, 2025
be57ebb
OUCH!
Wohlstand Mar 18, 2025
e80a608
CMake: Use lz4 independently from mbediso
Wohlstand Mar 19, 2025
08a4d89
libxtconvert.cpp: fix graphics conversion
ds-sloth Mar 26, 2025
1cca9f1
library_lib3dstools.cmake: fix build dependency graph
ds-sloth Mar 31, 2025
f8d3367
libxtconvert.cpp: adjust condition for converting music
ds-sloth Mar 31, 2025
06d1faf
XTConvert: adjust help text for release
ds-sloth Mar 31, 2025
92e343e
libxtconvert.cpp: convert all levels to lvlx (non-destructively)
ds-sloth Apr 6, 2025
1df9997
CI: deploy to GitHub Artifacts
ds-sloth Apr 9, 2025
1ae9b02
libxtconvert.cpp: fix MSVC build
ds-sloth Apr 9, 2025
db9dc45
libxtconvert.cpp: exclude .bak files
ds-sloth Apr 9, 2025
c1a6f55
libxtconvert.cpp: fix case for ds_store, add desktop.ini
ds-sloth Apr 9, 2025
c284baa
libxtconvert.cpp: create false lvl files
ds-sloth Apr 9, 2025
d8d0495
XTConvert: save source hash
ds-sloth Apr 10, 2025
82a6082
Try to enable CI for the XTConvert
Wohlstand May 19, 2025
be529c0
CMake: Append XTConvert to Windows deployment
Wohlstand May 20, 2025
cbe2c7a
CMake: Properly add lzma and gnurx to deployment
Wohlstand May 20, 2025
02e67cf
libxtconvert.cpp: update music filetypes
ds-sloth May 24, 2025
d3d9fad
libxtconvert.cpp: update graphics array bounds
ds-sloth May 24, 2025
3a0a1d1
XConvert: Small refactor of filter lists
Wohlstand Jun 24, 2025
d7e1f47
Started the work on the audio converter library
Wohlstand Jun 24, 2025
2b6d7f7
AudioProcessor: Implemented Vorbis codec
Wohlstand Jun 24, 2025
8fad4d1
libxtconvert.cpp: tune file extension conditions
ds-sloth Jun 24, 2025
d1abe8a
AudioProcesspr: Implemented working ogg reading and writing
Wohlstand Jun 25, 2025
1e3902c
AudioProcessor: Fixed loop points ocrrection by multi-pass
Wohlstand Jun 25, 2025
70c878b
AudioProcessor: comment out debug progress prints
Wohlstand Jun 25, 2025
2d5f55d
AudioProcessor: Implemented DEcoding of QOA
Wohlstand Jun 27, 2025
266825b
AudioProcessor: Implemented QOA encoding
Wohlstand Jun 27, 2025
8a197b1
AudioProcessor: Fixed the data size written to XQOA head
Wohlstand Jun 27, 2025
0329495
AudioProcessor: Stabilize the work, and fixed loop end of XQOA files
Wohlstand Jun 27, 2025
94df5e9
AudioProcessor: Added an option to cut at loop end
Wohlstand Jun 27, 2025
edea777
AudioProcessor: Initial support of MIDI
Wohlstand Jun 27, 2025
5e1c01f
AudioProcessing: Fixed loop end cut formula
Wohlstand Jun 27, 2025
c0683db
AudioProcessor: Optimized the cut condition
Wohlstand Jun 27, 2025
5928916
AudioProcessor: Added MixerX's music detector
Wohlstand Jun 27, 2025
164bedc
Attempt to solve the Linux and macOS CI builds
Wohlstand Jul 19, 2025
51a2fdf
Update libgnurx
Wohlstand Jul 19, 2025
b38421a
CMake: Attempt to fix the build
Wohlstand Jul 19, 2025
ce22d93
CMake: Fixed minimum version
Wohlstand Jul 19, 2025
008e3b4
XTConvert: Attempt to fix static Qt build
Wohlstand Jul 19, 2025
e60e306
XTConvert: now apply the true static Qt fix
Wohlstand Jul 19, 2025
bde41b1
Added libTIFF for static Qt build
Wohlstand Jul 19, 2025
9bd3551
AudioConverterTest: Fixed Qt6 build
Wohlstand Jul 27, 2025
f652d75
AudioCvtTest: Prefer C++11
Wohlstand Jul 28, 2025
74ebbcb
libxtconvert.cpp: don't clobber error message
ds-sloth Aug 16, 2025
4f4076e
XTConvert: allow shrink_player_texture to apply to 2x sprites
ds-sloth Aug 16, 2025
566231e
XTConvert: convert images to QOI format on desktop
ds-sloth Aug 16, 2025
d1d06eb
libxtconvert.cpp: ignore nomariochallenge files
ds-sloth Aug 21, 2025
046f5b4
libxtconvert.cpp: ouch, fix graphics on non-desktop platforms
ds-sloth Aug 21, 2025
a7e715d
macOS: Include "xtconvert" tool into postinstall script
Wohlstand Aug 29, 2025
faa8607
libxtconvert.cpp: process masks together with their images on desktop
ds-sloth Sep 5, 2025
7351436
libxtconvert.cpp: don't use GIF extension for QOI files
ds-sloth Sep 6, 2025
a0e362c
AudioProcessor: Initial work on PXTone and path arguments handling
Wohlstand Oct 3, 2025
445ee49
AudioProcessor: Implemented customizable source specs and gaining
Wohlstand Oct 4, 2025
afbd3f8
AudioProcessor: Move entire music args parser to own class
Wohlstand Oct 4, 2025
47819a8
AudioProcessing: Added Binary-Integer arg type
Wohlstand Oct 4, 2025
e8ed5ec
AudioProcessor: Fixed music arguments handler
Wohlstand Oct 6, 2025
4dc0adb
AudioProcessor: Fixed the track number argument handling
Wohlstand Oct 6, 2025
ef0387e
AudioProcessor: Make PXTone handler to work
Wohlstand Oct 6, 2025
5c4302d
AudioProcessor: Added libOPNMIDI handler and synth selector
Wohlstand Oct 6, 2025
3bc077f
AudioProcessor: Added sketch for the OPUS handler
Wohlstand Oct 6, 2025
09352b4
AudioProcessor: Implemented OPUS reader
Wohlstand Oct 9, 2025
cbc325a
AudioProcessor: OPUS encode works, and Float32 OGG/OPUS support
Wohlstand Oct 10, 2025
c30902b
AudioProcessor: Implemented DEcoding of MP3
Wohlstand Oct 10, 2025
b96b818
AudioProcessor: Implemented MP3 encoding via LAME
Wohlstand Oct 10, 2025
944ab73
AudioProcessor: Implemented WAV writing
Wohlstand Oct 11, 2025
ca3dac2
AudioProcessing: Implemented DEcoding of FLAC
Wohlstand Oct 13, 2025
0d8dadc
AudioConverterTest: Enable all the warnings
Wohlstand Oct 15, 2025
4b69d70
pxtone: Fixed a pile of initialisation warnings
Wohlstand Oct 15, 2025
6d7f793
AudioProcessor: Fixed warnings
Wohlstand Oct 15, 2025
7d4cd3c
AudioProcessor: Document out all the members of audio_file.h
Wohlstand Oct 15, 2025
a990af2
AudioProcessor: Implemented FLAC module
Wohlstand Oct 15, 2025
86ce6e1
AudioProcessor: Implemented handling of libEDLMIDI
Wohlstand Oct 15, 2025
f9c5eef
AudioProcessor: Adjusted the output format
Wohlstand Oct 15, 2025
cf39f07
AudioProcessor: Implemented FluidSynth handling
Wohlstand Oct 15, 2025
6fa02e1
AudioProcessor: Added KLM detection and proper MIDI config for XMI/MUS
Wohlstand Oct 15, 2025
85f24a3
AudioProcessor: Implemented GME handling
Wohlstand Oct 15, 2025
838711e
AudioProcessor: Added license header and #pragma once
Wohlstand Oct 15, 2025
bf25a5c
AudioProcessor: Fixed some returns and constants at FLAC and WAV
Wohlstand Oct 16, 2025
ba53a15
AudioProcessing: Implemented FFMPEG decoding
Wohlstand Oct 16, 2025
c59dd6d
AudioProcessor: Added passing of spec changed boolean
Wohlstand Oct 16, 2025
99d6609
AudioProcessor: Added missing AAC signature for detection
Wohlstand Oct 16, 2025
8ee9b13
Maintainer: Ensure that output package extension will be appended
Wohlstand Oct 17, 2025
78169da
Ouch
Wohlstand Oct 18, 2025
b1829f0
libxtconvert.cpp: accept char block array from legacy PGE-X parser
ds-sloth Oct 18, 2025
b63c7fc
Incomplete FFMPEG Encoder
Wohlstand Nov 4, 2025
0d362ad
XTConvert: Fixed Qt 6 build
Wohlstand Nov 17, 2025
f764545
AudioProcessor: Fixed dumbest memory leaks
Wohlstand Dec 16, 2025
1aa293a
libxtconvert.cpp: handle 1x QOI input files
ds-sloth Mar 7, 2026
462494e
libxtconvert.cpp: update ignores
ds-sloth Mar 7, 2026
fd27df0
libxtconvert.cpp: force creation of save files for preview images
ds-sloth Mar 7, 2026
34b2c39
Maintainer: Fixed build
Wohlstand Mar 8, 2026
d38df3f
Audio Processor: For the future, add list of available codecs
Wohlstand Mar 15, 2026
1b42382
Audio Processing: Experiment: try to cut frame at loop start
Wohlstand Mar 15, 2026
71dd902
AudioProcessing: Start turning this thing into more robust one
Wohlstand Mar 15, 2026
84e6b27
AudioProcessor: Some more tweaks on the stability
Wohlstand Mar 28, 2026
19844f5
XTConvert: Use new audio converter library
Wohlstand Mar 29, 2026
77f5d33
XTConvert: Experimental conversion of synthesized streams
Wohlstand Mar 29, 2026
fc470fd
XTConvert: Move SPC back into "non-tracker" list
Wohlstand Mar 29, 2026
4422ebd
CMake: Ensure AudioCodecs dependency is built before XTConvert
Wohlstand Mar 29, 2026
86a77bc
CMake: Include Opus' directory to fix the build
Wohlstand Mar 29, 2026
5872082
AudioProcessor: Fixed Vorbis warnings
Wohlstand Mar 29, 2026
a2ffc22
CMake: Do install of the PROPER license file
Wohlstand Mar 29, 2026
89dc524
CMake: Another attempt to fix the build
Wohlstand Mar 29, 2026
49f170d
Ouch
Wohlstand Mar 29, 2026
949a86c
AudioProcessing: Ensure fluidlite is handled properly
Wohlstand Mar 29, 2026
2776372
CMake: Link static SDL2 to XTConvert when needed
Wohlstand Mar 29, 2026
be88831
CMake: Do link shlwapi to AudioProcessor on Windows
Wohlstand Mar 29, 2026
95659c0
XTConvert: Try to output different format from the target
Wohlstand Mar 29, 2026
0cbcdc9
XTConvert: Fixed build on Windows
Wohlstand Mar 29, 2026
9b84be1
AudioProcessor: Wrap the frame size update into function
Wohlstand Apr 5, 2026
b223bda
AuidioProcessor: Added support for tracker music handling using libxmp
Wohlstand Apr 5, 2026
e5e2bb9
Maintainer: Added the missing license header
Wohlstand Apr 5, 2026
b6c5961
Maintainer: Added .h files to project too
Wohlstand Apr 5, 2026
a56f289
Turn Maintainer-only EpisodeBox class into static library
Wohlstand Apr 5, 2026
317ab6c
Attempt to fix the Windows build
Wohlstand Apr 6, 2026
2090500
EpisodeBox: Initial work on music.ini handling
Wohlstand Apr 7, 2026
f8d3948
EpisodeBox: Experimental support of music.ini files
Wohlstand Apr 11, 2026
824f329
EpisodeBox: Added sounds.ini handling and the "rename SFX" function
Wohlstand Apr 12, 2026
051a034
EpisodeBox: More handling of sound files
Wohlstand Apr 12, 2026
2d28134
XTConvert: Implemented conversion of music with the EpisodeBox
Wohlstand Apr 13, 2026
a37edba
XTConvert: Use 10-symbol SHA1 hash parts instead of large arguments s…
Wohlstand Apr 14, 2026
da237e9
AudioProcessor: Attempt to zero-init qoa desc heads
Wohlstand Apr 14, 2026
9cd1254
AudioProcessor: Use the wanted spec when possible
Wohlstand Apr 14, 2026
9e7e426
AudioProcessor: attempt to not re-initialize AudioStream
Wohlstand Apr 16, 2026
7098fec
libxtconvert.cpp: convert LVL files to LVLX for performance
ds-sloth Apr 18, 2026
b721e4f
Update libgnurx
Wohlstand Apr 18, 2026
862a485
AudioProcessing: Enable opus encoding support
Wohlstand Apr 19, 2026
74eeab0
libxtconvert.cpp: make directory for converted music files
ds-sloth Apr 20, 2026
c3e1990
libxtconvert.cpp: DSi - convert all music outside of music.ini
ds-sloth Apr 20, 2026
0f2408c
libxtconvert.cpp: convert_sfx - use XQOA format on 3DS and Wii
ds-sloth Apr 20, 2026
8c6bb99
libxtconvert.cpp: DSi - fix soundbank creation
ds-sloth Apr 20, 2026
cb4d01a
libxtconvert.cpp: actually use WAV on 3DS
ds-sloth Apr 20, 2026
71f77c7
AudioProcessing: Try use the LameMP3 build
Wohlstand Apr 21, 2026
a568382
AudioProcessor: Attempt to implement encoder
Wohlstand May 12, 2026
5b73e3f
AudioProcessing: More progress on FFMPEG encoding support
Wohlstand May 13, 2026
b66ec2c
AudioProcessor: More work on encoder
Wohlstand May 13, 2026
4eb2224
AudioProcessor: No more memory leaks in FFMPEG module!
Wohlstand May 14, 2026
a7be7ae
AudioProcessor: FFMPEG Encoding now working, almost
Wohlstand May 14, 2026
f6f3413
AudioProcessor: Attempt to fix WMA encoding
Wohlstand May 15, 2026
0c44db6
AudioProcessor: FFMPEG Encode now working correct!
Wohlstand May 15, 2026
9ee5786
AudioProcessor: Save meta-tags while encoding via FFMPEG
Wohlstand May 15, 2026
83c9839
AudioProcessor: Fixed MP3 codec leak when destroyed without closure
Wohlstand May 15, 2026
4837c9e
Fixed submodules linking
Wohlstand Jul 17, 2026
131df57
library_librarchive.cmake: Enable libgcc to fix the build
Wohlstand Jul 23, 2026
eab914f
libxtconvert.cpp: track pre-conversion of music separately
ds-sloth Sep 11, 2026
42e68f4
libxtconvert.cpp: update graphics bounds
ds-sloth Oct 10, 2026
b453c9b
Update mbediso
Wohlstand Oct 16, 2026
3919fd1
CI: Attempt to fix deal with pull-request builds for macOS
Wohlstand Oct 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions .github/workflows/macos-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ on:
branches:
- master
- stable
- wip-translator
- wip-xtconvert
pull_request:
branches:
- master
Expand Down Expand Up @@ -153,12 +153,21 @@ jobs:

- name: Rename package
shell: bash
if: success() && github.event_name != 'pull_request' && github.event_name != 'workflow_dispatch' && steps.event-check.outputs.is_pull_request == 'false' && steps.upload-check.outputs.available == 'true'
run: |
mv ./bin-cmake-release/pge-project-${BRANCH_NAME}-macosx.pkg ./bin-cmake-release/pge-project-${BRANCH_NAME}-macosx-${{ matrix.config.arch }}.pkg
# mv ./bin-cmake-release/pge-project-${BRANCH_NAME}-macosx.dmg ./bin-cmake-release/pge-project-${BRANCH_NAME}-macosx-${{ matrix.config.arch }}.dmg

- name: Upload artifact
if: success() && steps.upload-check.outputs.available == 'true'
uses: actions/upload-artifact@v4
continue-on-error: true
with:
path: bin-cmake-release/*.pkg
name: ${{ matrix.config.name }} ${{ matrix.config.build_type }}

- name: Deploy to builds.wohlsoft.ru
if: success() && github.event_name != 'pull_request' && steps.event-check.outputs.is_pull_request == 'false' && steps.upload-check.outputs.available == 'true'
if: success() && github.event_name != 'pull_request' && github.event_name != 'workflow_dispatch' && steps.event-check.outputs.is_pull_request == 'false' && steps.upload-check.outputs.available == 'true'
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
Expand Down
15 changes: 11 additions & 4 deletions .github/workflows/ubuntu-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
- master
- stable
- versus-ci-ubuntu
- wip-translator
- wip-xtconvert
pull_request:
branches:
- master
Expand Down Expand Up @@ -74,8 +74,7 @@ jobs:
- name: Pull submodules
shell: bash
run: |
git submodule init
git submodule update
git submodule update --init --recursive

- name: Check if a pull request
id: event-check
Expand Down Expand Up @@ -214,8 +213,16 @@ jobs:

./build.sh no-pause ninja deploy static-qt qt-png portable

- name: Upload artifact
if: success() && steps.upload-check.outputs.available == 'true'
uses: actions/upload-artifact@v4
continue-on-error: true
with:
path: bin-cmake-release/*.tar.bz2
name: ${{ matrix.config.name }} ${{ matrix.config.build_type }}

- name: Deploy to builds.wohlsoft.ru
if: success() && github.event_name != 'pull_request' && steps.event-check.outputs.is_pull_request == 'false' && steps.upload-check.outputs.available == 'true'
if: success() && github.event_name != 'pull_request' && github.event_name != 'workflow_dispatch' && steps.event-check.outputs.is_pull_request == 'false' && steps.upload-check.outputs.available == 'true'
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
Expand Down
46 changes: 42 additions & 4 deletions .github/workflows/windows-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ on:
branches:
- master
- stable
- wip-translator
- wip-xtconvert
pull_request:
branches:
- master
Expand Down Expand Up @@ -36,7 +36,9 @@ jobs:
qt_download: "https://wohlsoft.ru/docs/Software/QtBuilds/Qt-5.15.10-x64-mingw-w64-13.1.0-shared-release.7z", qt_install_dir: "C:/Qt/",
qt_dir: "C:/Qt/5.15.10-x64/bin",
ninja_download: "https://wohlsoft.ru/docs/Software/Ninja-Build/ninja-win.zip", ninja_install_dir: "C:/MinGW-w64/mingw64/bin",
lftp_download: "https://wohlsoft.ru/docs/Software/lftp-4.4.15.win64-openssl-1.0.1g.7z", lftp_install_dir: "C:/MinGW-w64/mingw64/"
lftp_download: "https://wohlsoft.ru/docs/Software/lftp-4.4.15.win64-openssl-1.0.1g.7z", lftp_install_dir: "C:/MinGW-w64/mingw64/",
libxz_download: "https://wohlsoft.ru/docs/Software/MinGW/mingw-w64-x86_64-xz-5.6.4-1-any.7z", libxz_install_dir: "C:/MinGW-w64/mingw64/",
libgnurx_download: "https://wohlsoft.ru/docs/Software/MinGW/mingw-w64-x86_64-libgnurx-2.5.1-3-any.7z", libgnurx_install_dir: "C:/MinGW-w64/mingw64/"
}
- {
name: "32-bit",
Expand All @@ -51,7 +53,9 @@ jobs:
qt_download: "https://wohlsoft.ru/docs/Software/QtBuilds/Qt-5.6.3-i686-mingw-w64-12.2.0-shared-release.7z", qt_install_dir: "C:/Qt/",
qt_dir: "C:/Qt/5.6.3-i686/bin",
ninja_download: "https://wohlsoft.ru/docs/Software/Ninja-Build/ninja-win.zip", ninja_install_dir: "C:/MinGW-w64/mingw32/bin",
lftp_download: "https://wohlsoft.ru/docs/Software/lftp-4.4.15.win64-openssl-1.0.1g.7z", lftp_install_dir: "C:/MinGW-w64/mingw32/"
lftp_download: "https://wohlsoft.ru/docs/Software/lftp-4.4.15.win64-openssl-1.0.1g.7z", lftp_install_dir: "C:/MinGW-w64/mingw32/",
libxz_download: "https://wohlsoft.ru/docs/Software/MinGW/mingw-w64-i686-xz-5.6.4-1-any.7z", libxz_install_dir: "C:/MinGW-w64/mingw32/",
libgnurx_download: "https://wohlsoft.ru/docs/Software/MinGW/mingw-w64-i686-libgnurx-2.5.1-3-any.7z", libgnurx_install_dir: "C:/MinGW-w64/mingw32/"
}

steps:
Expand Down Expand Up @@ -99,6 +103,32 @@ jobs:
run: |
7z x mingw.7z -o"${{ matrix.config.mingw_install_dir }}"

- name: Download libxz
if: matrix.config.libxz_download
uses: carlosperate/download-file-action@v2
with:
file-url: "${{ matrix.config.libxz_download }}"
file-name: libxz.7z

- name: Extract libxz
if: matrix.config.libxz_install_dir
shell: bash
run: |
7z x libxz.7z bin lib include -o"${{ matrix.config.libxz_install_dir }}"

- name: Download libgnurx
if: matrix.config.libgnurx_download
uses: carlosperate/download-file-action@v2
with:
file-url: "${{ matrix.config.libgnurx_download }}"
file-name: libgnurx.7z

- name: Extract libgnurx
if: matrix.config.libgnurx_install_dir
shell: bash
run: |
7z x libgnurx.7z bin lib include -o"${{ matrix.config.libgnurx_install_dir }}"

- name: Download Qt
if: matrix.config.qt_download
uses: carlosperate/download-file-action@v2
Expand Down Expand Up @@ -198,8 +228,16 @@ jobs:
mkdir _packed
mv bin-cmake-release/_packed/*.zip _packed

- name: Upload artifact
if: success() && steps.upload-check.outputs.available == 'true'
uses: actions/upload-artifact@v4
continue-on-error: true
with:
path: _packed/*.zip
name: ${{ matrix.config.name }} ${{ matrix.config.build_type }}

- name: Deploy to builds.wohlsoft.ru
if: success() && github.event_name != 'pull_request' && steps.event-check.outputs.is_pull_request == 'false' && steps.upload-check.outputs.available == 'true'
if: success() && github.event_name != 'pull_request' && github.event_name != 'workflow_dispatch' && steps.event-check.outputs.is_pull_request == 'false' && steps.upload-check.outputs.available == 'true'
shell: bash
run: |
if [[ ! -z "${{ matrix.config.extra_path }}" ]]; then
Expand Down
44 changes: 44 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,47 @@
path = _Libs/libtiff
url = https://github.com/WohlSoft/libtiff.git
branch = master
[submodule "_Libs/tex3ds"]
path = _Libs/tex3ds
url = https://github.com/WohlSoft/xtconvert-tex3ds.git
branch = libtex3ds
[submodule "_Libs/3dstools"]
path = _Libs/3dstools
url = https://github.com/WohlSoft/xtconvert-3dstools.git
branch = libromfs3ds
[submodule "_Libs/libimagequant"]
path = _Libs/libimagequant
url = https://github.com/WohlSoft/xtconvert-libimagequant.git
branch = 2.x
[submodule "_Libs/libarchive"]
path = _Libs/libarchive
url = https://github.com/WohlSoft/xtconvert-libarchive.git
branch = fix-iso-filenames
[submodule "_Libs/mbediso"]
path = _Libs/mbediso
url = https://github.com/WohlSoft/mbediso.git
branch = main
[submodule "_Libs/spc2it"]
path = _Libs/spc2it
url = https://github.com/WohlSoft/spc2it.git
branch = master
[submodule "_Libs/mmutil"]
path = _Libs/mmutil
url = https://github.com/WohlSoft/mmutil.git
branch = master
[submodule "_Libs/lz4"]
path = _Libs/lz4
url = https://github.com/WohlSoft/lz4.git
branch = release-patches
[submodule "_Libs/libgnurx"]
path = _Libs/libgnurx
url = https://github.com/WohlSoft/libgnurx.git
branch = master
[submodule "_Libs/libxz"]
path = _Libs/libxz
url = https://github.com/WohlSoft/xz.git
branch = master
[submodule "_Libs/libtiff"]
path = _Libs/libtiff
url = https://github.com/WohlSoft/libtiff.git
branch = master
55 changes: 45 additions & 10 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,32 @@ endif()
option(PGE_STATIC_SDLMIXER "Prefer static assembly of SDL Mixer X and libraries" ${PGE_STATIC_SDLMIXER_PLATFORM_DEFAULT})
option(ENABLE_ADDRESS_SANITIZER "Enable the Address Sanitizer GCC feature" OFF)

set(AUDIOCODECS_ENABLE_ENCODERS OFF)
set(SDLMIXER_USE_OGG_STB ON)

if(NOT EMSCRIPTEN AND NOT ANDROID)
option(PGE_BUILD_GIFS2PNG "Build the GIFs2PNG utility component" ON)
option(PGE_BUILD_PNG2GIFS "Build the GIFs2PNG utility component" ON)
option(PGE_BUILD_LAZYFIXTOOL "Build the LazyFixTool utility component" ON)
option(PGE_BUILD_PALETTEFILTER "Build the PaletteFilter utility component" ON)
endif()

option(PGE_BUILD_ENGINE "Build the Runtime Engine component" ON)

if(PGE_ENABLE_QT AND NOT ANDROID AND NOT EMSCRIPTEN)
option(PGE_BUILD_EDITOR "Build the PGE Editor component (Qt5 required)" ON)
option(PGE_BUILD_PLAYERCALIBRATOR "Build the Player Calibrator utility component (Qt5 required)" ON)
option(PGE_BUILD_MUSICPLAYER "Build the SDL Mixer X Music Player component (Qt5 required)" ON)
option(PGE_BUILD_MAINTAINER "Build the Maintainer utility component (Qt5 required)" ON)
option(PGE_BUILD_TRANSLATOR "Build the Translator utility component (Qt5 required)" ON)
option(PGE_BUILD_XTCONVERT "Build the XTConvert utility component" ON)

if(PGE_BUILD_XTCONVERT)
set(AUDIOCODECS_ENABLE_ENCODERS ON)
set(SDLMIXER_USE_OGG_STB OFF)
endif()
endif()

if(PGE_STATIC_SDLMIXER)
set(PGE_SHARED_SDLMIXER OFF)
else()
Expand Down Expand Up @@ -120,6 +146,10 @@ if(PGE_ENABLE_STATIC_QT AND "${CMAKE_SYSTEM}" MATCHES "Linux")
include(_common/library_tiff.cmake)
endif()

if(PGE_ENABLE_QT AND (PGE_BUILD_MAINTAINER OR PGE_BUILD_XTCONVERT))
add_subdirectory(_common/qt-modules/episode_box)
endif()

if(NOT USE_SYSTEM_LIBPNG)
add_dependencies(libpng_Local AudioCodecs_Local) #Zlib is needed to libPNG
add_dependencies(FREETYPE_Local libpng_Local) #libPNG is needed to FreeType
Expand Down Expand Up @@ -153,7 +183,6 @@ endif()
# Build dependent libraries only
add_custom_target(libs DEPENDS ${LIBS_TARGETS})

option(PGE_BUILD_ENGINE "Build the Runtime Engine component" ON)
if(PGE_BUILD_ENGINE)
add_subdirectory(Engine)
# Append changelog file
Expand All @@ -165,35 +194,45 @@ if(PGE_BUILD_ENGINE)
endif()

if(NOT EMSCRIPTEN AND NOT ANDROID)
option(PGE_BUILD_GIFS2PNG "Build the GIFs2PNG utility component" ON)
if(PGE_BUILD_GIFS2PNG)
add_subdirectory(GIFs2PNG)
InstallTextFile(FILE "${Moondust_SOURCE_DIR}/Content/readmes/GIFs2PNG_Readme.txt" RENAME "GIFs2PNG.readme.txt" DESTINATION "${PGE_INSTALL_DOCS}" COMPONENT "MoondustGifs2PNG")
endif()

option(PGE_BUILD_PNG2GIFS "Build the GIFs2PNG utility component" ON)
if(PGE_BUILD_PNG2GIFS)
add_subdirectory(PNG2GIFs)
InstallTextFile(FILE "${Moondust_SOURCE_DIR}/Content/readmes/PNG2GIFs_Readme.txt" RENAME "PNG2GIFs.readme.txt" DESTINATION "${PGE_INSTALL_DOCS}" COMPONENT "MoondustPNG2GIFs")
endif()

option(PGE_BUILD_LAZYFIXTOOL "Build the LazyFixTool utility component" ON)
if(PGE_BUILD_LAZYFIXTOOL)
add_subdirectory(LazyFixTool)
InstallTextFile(FILE "${Moondust_SOURCE_DIR}/Content/readmes/LazyFixTool_Readme.txt" RENAME "LazyFixTool.readme.txt" DESTINATION "${PGE_INSTALL_DOCS}" COMPONENT "MoondustLazyFixTool")
endif()

option(PGE_BUILD_PALETTEFILTER "Build the PaletteFilter utility component" ON)
if(PGE_BUILD_PALETTEFILTER)
add_subdirectory(PaletteFilter)
InstallTextFile(FILE "${Moondust_SOURCE_DIR}/Content/readmes/PaletteFilter_Readme.txt" RENAME "PaletteFilter.readme.txt" DESTINATION "${PGE_INSTALL_DOCS}" COMPONENT "MoondustPalleteFilter")
endif()

if(PGE_BUILD_XTCONVERT)
include(_common/library_lz4.cmake)
include(_common/library_mbediso.cmake)
include(_common/library_lib3dstools.cmake)
include(_common/library_tex3ds.cmake)
include(_common/library_libimagequant.cmake)
include(_common/library_spc2it.cmake)
include(_common/library_mmutil.cmake)
include(_common/library_lzma.cmake)
include(_common/library_gnurx.cmake)
include(_common/library_libarchive.cmake)
add_subdirectory(XTConvert)
InstallTextFile(FILE "${Moondust_SOURCE_DIR}/Content/readmes/XTConvert_Readme.txt" RENAME "XTConvert.readme.txt" DESTINATION "${PGE_INSTALL_DIRECTORY}")
endif()
endif()

if(PGE_ENABLE_QT AND NOT ANDROID AND NOT EMSCRIPTEN)
include(_common/qt-modules/qt_modules_langs.cmake)

option(PGE_BUILD_EDITOR "Build the PGE Editor component (Qt5 required)" ON)
if(PGE_BUILD_EDITOR)
add_subdirectory(Editor)
# Append changelog file
Expand All @@ -202,7 +241,6 @@ if(PGE_ENABLE_QT AND NOT ANDROID AND NOT EMSCRIPTEN)
qtDeployAdd(pge_editor)
endif()

option(PGE_BUILD_PLAYERCALIBRATOR "Build the Player Calibrator utility component (Qt5 required)" ON)
if(PGE_BUILD_PLAYERCALIBRATOR)
add_subdirectory(PlayableCalibrator)
# Append changelog file
Expand All @@ -211,7 +249,6 @@ if(PGE_ENABLE_QT AND NOT ANDROID AND NOT EMSCRIPTEN)
qtDeployAdd(pge_calibrator)
endif()

option(PGE_BUILD_MUSICPLAYER "Build the SDL Mixer X Music Player component (Qt5 required)" ON)
if(PGE_BUILD_MUSICPLAYER)
add_subdirectory(MusicPlayer)
# Append changelog file
Expand All @@ -220,13 +257,11 @@ if(PGE_ENABLE_QT AND NOT ANDROID AND NOT EMSCRIPTEN)
qtDeployAdd(pge_musplay)
endif()

option(PGE_BUILD_MAINTAINER "Build the Maintainer utility component (Qt5 required)" ON)
if(PGE_BUILD_MAINTAINER)
add_subdirectory(Maintainer)
qtDeployAdd(pge_maintainer)
endif()

option(PGE_BUILD_TRANSLATOR "Build the Translator utility component (Qt5 required)" ON)
if(PGE_BUILD_TRANSLATOR)
add_subdirectory(Translator)
qtDeployAdd(pge_translator)
Expand Down
1 change: 1 addition & 0 deletions Content/readmes/XTConvert_Readme.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
XTConvert - an experimental utility to convert episodes and game assets packs for TheXTech into various portable packages.
Loading
Loading