748 Commits

Author SHA1 Message Date
njohnson
b046d12c09 Disable CI workflow, keep only tag-triggered releases
Some checks failed
Release / build-macos (push) Failing after 41s
Release / build-linux (push) Failing after 1m17s
Release / build-windows (push) Failing after 1m17s
Release / deploy (push) Has been skipped
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 18:44:51 -05:00
njohnson
aef254bf04 Convert Windows bash steps to CMD
Some checks failed
CI Build / build-macos (push) Successful in 28s
Release / build-macos (push) Failing after 34s
Release / build-linux (push) Failing after 1m20s
CI Build / build-windows (push) Successful in 1m36s
CI Build / build-ubuntu (push) Has been cancelled
Release / build-windows (push) Failing after 1m38s
Release / deploy (push) Has been skipped
- Replace bash with cmd for all Windows runner steps
- Use setlocal enabledelayedexpansion for variable expansion
- Use findstr for string matching instead of bash [[ ]]
- Use xcopy/copy instead of cp
- Use powershell inline for sed-like regex replacements

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 18:41:48 -05:00
njohnson
679ff06a57 Fix Package for Installer steps with safer glob handling
Some checks failed
CI Build / build-macos (push) Successful in 27s
Release / build-windows (push) Failing after 38s
Release / build-macos (push) Failing after 36s
CI Build / build-windows (push) Successful in 1m30s
CI Build / build-ubuntu (push) Has been cancelled
Release / build-linux (push) Failing after 3m31s
Release / deploy (push) Has been skipped
- Add debug output to diagnose build failures
- Handle empty directories gracefully with || true
- Add fallback for app.app -> XPlor.app rename on macOS
- Check for non-empty directories before glob copy

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 18:38:39 -05:00
njohnson
384070fad6 Revert release workflow to use bash on Windows
Some checks failed
CI Build / build-windows (push) Has been cancelled
CI Build / build-ubuntu (push) Has been cancelled
CI Build / build-macos (push) Has been cancelled
Release / build-macos (push) Failing after 35s
Release / build-linux (push) Failing after 10m59s
Release / build-windows (push) Failing after 38s
Release / deploy (push) Has been skipped
Bash is now available on the Windows runner. Reverted all PowerShell
(pwsh) steps back to bash for consistency across platforms.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 18:04:20 -05:00
njohnson
2c1abead2f Fix Windows release workflow - use PowerShell instead of bash
Some checks failed
CI Build / build-macos (push) Successful in 33s
Release / build-windows (push) Failing after 54s
Release / build-macos (push) Failing after 39s
CI Build / build-ubuntu (push) Successful in 1m30s
CI Build / build-windows (push) Successful in 1m45s
Release / build-linux (push) Failing after 8m37s
Release / deploy (push) Has been skipped
The Windows runner doesn't have bash in PATH. Convert the "Extract
version info" steps in build-windows and deploy jobs from bash to
PowerShell (pwsh) syntax.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 17:48:10 -05:00
njohnson
e50bfbfde2 Add multi-platform release workflow with 3 channels
Some checks failed
CI Build / build-macos (push) Successful in 28s
CI Build / build-ubuntu (push) Successful in 1m28s
CI Build / build-windows (push) Successful in 1m48s
Release / build-macos (push) Failing after 46s
Release / build-windows (push) Failing after 51s
Release / build-linux (push) Failing after 1m39s
Release / deploy (push) Has been skipped
- Triggers on tags: v1.0.0 (stable), v1.0.0-alpha1 (alpha), v1.0.0-test1 (tester)
- Builds on Windows, macOS, and Linux in parallel
- Creates offline and online installers for each platform
- Deploys repository to P:\repository\{channel}
- Creates Gitea release with all installers

Outputs:
- XPlor-{version}-Windows-Setup.exe / Online.exe
- XPlor-{version}-macOS-Setup.dmg / Online.dmg
- XPlor-{version}-Linux-Setup.run / Online.run

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 17:36:04 -05:00
njohnson
f40146f2c0 Trigger CI build
All checks were successful
CI Build / build-macos (push) Successful in 33s
CI Build / build-windows (push) Successful in 2m13s
CI Build / build-ubuntu (push) Successful in 3m3s
2026-01-13 17:22:44 -05:00
njohnson
c69b95e1ce Speed up Windows CI: use all CPU cores for jom
Some checks failed
CI Build / build-macos (push) Successful in 27s
CI Build / build-ubuntu (push) Has been cancelled
CI Build / build-windows (push) Failing after 17m17s
Changed from -j 1 to -j %NUMBER_OF_PROCESSORS%

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 16:33:03 -05:00
njohnson
ef6300aee9 Fix Linux build: define __stdcall as empty on non-Windows
The __stdcall calling convention is Windows-specific.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 16:28:28 -05:00
njohnson
9fec6729fc Fix Ubuntu CI: ignore apt-get update failures from third-party repos
Some checks failed
CI Build / build-macos (push) Successful in 28s
CI Build / build-ubuntu (push) Failing after 1m8s
CI Build / build-windows (push) Successful in 7m54s
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 16:25:22 -05:00
njohnson
9a8170f1d8 Fix Ubuntu CI: handle root/container environments without sudo
Some checks failed
CI Build / build-ubuntu (push) Failing after 5s
CI Build / build-macos (push) Successful in 26s
CI Build / build-windows (push) Successful in 8m49s
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 16:23:44 -05:00
njohnson
783b6ee73f Add Ubuntu build job to CI pipeline
Some checks failed
CI Build / build-macos (push) Successful in 26s
CI Build / build-ubuntu (push) Failing after 3s
CI Build / build-windows (push) Successful in 8m34s
Adds linux-g++ build with:
- System dependencies: build-essential, libgl1-mesa-dev, zlib1g-dev
- Searches common Qt installation paths for gcc_64

Requires an Ubuntu runner with label "ubuntu" and Qt installed.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 15:14:24 -05:00
njohnson
44a9f851ea Add zlib library to repository for Windows CI builds
All checks were successful
CI Build / build-macos (push) Successful in 27s
CI Build / build-windows (push) Successful in 8m34s
The zlib directory was incorrectly listed as "unused" in .gitignore,
but it's required by app.pro for Windows builds. Added exception
patterns for third-party libraries.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 15:03:24 -05:00
njohnson
2d63185dc0 Fix macOS CLI build: add zlib linkage for Unix platforms
Some checks failed
CI Build / build-macos (push) Successful in 29s
CI Build / build-windows (push) Failing after 7m33s
The CLI tool was missing the system zlib linkage that app.pro already had,
causing undefined symbol errors for zlib functions on macOS.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 14:45:13 -05:00
njohnson
a2b8f69bb1 Fix macOS build: make Windows-only libraries conditional
Some checks failed
CI Build / build-macos (push) Failing after 27s
CI Build / build-windows (push) Failing after 7m43s
- DevIL, bundled zlib, and xcompress64 only linked on Windows
- macOS/Linux use system zlib (-lz)
- DLL deployment only on Windows

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 14:37:52 -05:00
njohnson
c3d75e4a97 Merge branch 'alpha'
Some checks failed
CI Build / build-macos (push) Failing after 27s
CI Build / build-windows (push) Failing after 7m50s
2026-01-13 14:29:48 -05:00
njohnson
51d632dd90 Fix macOS build: wrap Xbox SDK code with Q_OS_WIN guards
The xcompress.h header and XMem compression functions require Windows.h
and the Xbox SDK, which are not available on macOS. Wrap all XMem
functions with #ifdef Q_OS_WIN and provide stub implementations that
return empty data on non-Windows platforms.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 14:27:34 -05:00
njohnson
41cb33b5b5 Adding test file to trigger pipeline. 2026-01-13 14:26:26 -05:00
njohnson
d0b8560913 Fix macOS build: use system zlib and fix LZO types
Some checks failed
CI Build / build-macos (push) Failing after 13s
CI Build / build-windows (push) Failing after 15s
2026-01-13 14:22:28 -05:00
njohnson
ebee591530 Fix CI: use Qt 6.10.1 paths inline
Some checks failed
CI Build / build-macos (push) Failing after 10s
CI Build / build-windows (push) Failing after 13m2s
2026-01-13 14:19:50 -05:00
njohnson
03364418b0 Auto-detect Qt version on macOS
Some checks failed
CI Build / build-macos (push) Failing after 3s
CI Build / build-windows (push) Failing after 17s
2026-01-13 14:10:24 -05:00
njohnson
5a8eff078d Add macOS build to CI pipeline
Some checks failed
CI Build / build-macos (push) Failing after 15s
CI Build / build-windows (push) Failing after 53s
2026-01-13 13:57:26 -05:00
njohnson
8d90b644ab Add action for opening maintenance tool from within XPlor.
Some checks failed
CI Build / build (push) Failing after 18s
2026-01-13 13:11:27 -05:00
njohnson
fdf1d608b6 Fix some gitignores 2026-01-13 13:09:53 -05:00
njohnson
77e3ac2ff1 Fix runner label to match 'windows'
Some checks failed
CI Build / build (push) Has been cancelled
2026-01-13 12:50:44 -05:00
njohnson
e1604ffe92 Add Gitea Actions CI/CD workflows
Some checks failed
CI Build / build (push) Has been cancelled
- ci.yml: Build on every push (for testing)
- release.yml: Full release pipeline on version tags

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 12:43:53 -05:00
njohnson
79800c5c2a Add stable Updates.xml. 2026-01-12 23:08:33 -05:00
njohnson
1b210b9815 Update .gitignore. 2026-01-12 23:07:12 -05:00
njohnson
4cb15c5873 Update .pro. 2026-01-12 23:06:48 -05:00
njohnson
1587269f8f Update .gitignore. 2026-01-12 23:06:09 -05:00
njohnson
1f48b85cc3 Remove old bsp assets. 2026-01-12 23:05:16 -05:00
njohnson
0c3d2d0de9 Remove old model files. 2026-01-12 23:04:56 -05:00
njohnson
57c7ee7de5 Enhance app UI with export integration and tab management
Major UI improvements across the application:

MainWindow:
- Integrate undo stack for field editing
- Dirty state tracking with tab title indicators (*)
- Save/SaveAs prompts on tab close with unsaved changes
- Export menu integration in tab context menu
- Tab management: close all, close left/right of current tab
- Connect export system to tree widget signals

XTreeWidget:
- Add context menus for tree items
- Quick export action for immediate saves
- Export dialog action for format options
- Raw data export for any item
- Batch export for containers

XTreeWidgetItem:
- Add modified state tracking with visual indicator
- Support for marking items as dirty

ImagePreviewWidget:
- Enhanced image display and navigation
- Improved zoom and pan controls

TreeBuilder:
- Better handling of nested data structures
- Improved child node generation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1.10
2026-01-12 20:55:41 -05:00
njohnson
37bde14174 Add parse command to CLI with multiple output formats
Extend CLI with comprehensive file parsing capabilities:

New parse command:
- Parse binary files using XScript definitions
- Auto-detect file type or force specific type with -t option
- Output formats: JSON, tree, or table view

Output options:
- JSON (-f json): Machine-readable structured output
- Tree (-f tree): Hierarchical view with colored output
- Table (-f table): Compact tabular format

Additional features:
- Verbose mode (-v) to show hidden fields
- Warnings-only mode (-w) to show blank/zero values
- Nested data expansion in tree view
- Hex formatting for addresses and hashes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 20:55:00 -05:00
njohnson
d7488c5fa9 Add comprehensive export system with format-specific dialogs
Implement a unified export system for extracting data from parsed files:

ExportManager (singleton):
- Centralized export handling for all content types
- Content type detection (image, audio, video, text, binary)
- Batch export support with progress tracking

Format-specific export dialogs:
- ImageExportDialog: PNG, JPEG, BMP, TGA with quality options
- AudioExportDialog: WAV, MP3, OGG with FFmpeg integration
- BinaryExportDialog: Raw data export with optional decompression
- BatchExportDialog: Recursive export with filtering options
- Base ExportDialog class for common functionality

Settings additions:
- FFmpeg path configuration with auto-detection
- Search common install locations and PATH

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 20:54:38 -05:00
njohnson
05c70c1108 Add field editing UI with undo support and dirty state tracking
Implement infrastructure for editing parsed binary fields:

FieldEditCommand (QUndoCommand):
- Undo/redo support for field value changes
- Stores old and new values with field metadata
- Integrates with Qt's undo stack

DirtyStateManager:
- Tracks modified state per-tab
- Emits signals when dirty state changes
- Enables save prompts and tab indicators

ScriptTypeEditorWidget enhancements:
- Add recompilation debouncing (300ms) for responsive editing
- Build form layout only for fields with values (skip unexecuted branches)
- Support edit signals for modified fields
- Improved table and form layout building

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 20:54:23 -05:00
njohnson
908100f487 Enhance Volition format definitions for Saints Row series
Major improvements to VPP, PEG, and ASM parsers:

vpp.xscript:
- Support all VPP versions (4-10) for Saints Row 1-4 and Red Faction
- Add container type detection (str2, packfile, etc.)
- Improved compression handling (zlib, LZO, auto-detection)
- Better recursive parsing of nested archives

peg.xscript:
- Full PEG texture container parsing
- Support for multiple texture formats (DXT1, DXT3, DXT5, etc.)
- Xbox 360 and PC format variants

asm.xscript:
- Animation state machine container parsing

New format definitions:
- anim.xscript: Animation data
- audio.xscript: Audio containers (bank files)
- mesh.xscript: 3D mesh geometry
- morph.xscript: Morph targets
- rig.xscript: Skeletal rigs
- sim.xscript: Simulation data
- zone.xscript: Level zone data

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 20:53:59 -05:00
njohnson
a86c5f592c Add Dead Rising 2 format definitions
XScript definitions for Dead Rising 2 (Xbox 360) file formats:
- big.xscript: Main archive format with LZX-compressed entries
- tex.xscript: Texture files
- anm.xscript: Animation files
- bcf.xscript, bcs.xscript, bct.xscript: Character format files
- bin.xscript: Generic binary containers
- bik.xscript: Bink video references
- havok.xscript: Havok physics data

The .big archive parser uses deadrising_lzx() to decompress entries
and recursively parses nested archives.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 20:53:43 -05:00
njohnson
3e3883cfeb Add DSL journaling infrastructure for field editing and write-back
Introduce operation journaling to track how values are read from the
binary stream, enabling future write-back of edited fields.

New components:
- OperationJournal: Records read operations with stream offsets, sizes,
  byte order, and original values during parsing
- ReverseEval: Analyzes expressions for invertibility (e.g., x+5 can be
  reversed to compute the source field when editing the result)
- Recompiler: Infrastructure for recompiling modified values back to
  binary format

Interpreter enhancements:
- Add runTypeInternalWithJournal() for journaled parsing
- Journal scalar reads, byte reads, strings, skip/seek operations
- Add deadrising_lzx() built-in for Dead Rising 2 LZX decompression
- Support _deadrising_lzx_stem context variable for nested archives

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 20:53:20 -05:00
njohnson
2f84e41cb7 Add native LZX decompression via libmspack
Integrate libmspack's LZX decompressor for Xbox 360 and UE-style
compressed data. This replaces the need for external xcompress64.dll
which was hanging/crashing on certain files.

- Add mspack/ library (lzxd.c decompressor with Gildor's fixes)
- Implement memory-based mspack_system for in-memory decompression
- Support multiple LZX formats: raw streams, Xbox 360 block format,
  and Dead Rising 2's per-block format with 4-byte size headers
- Add DecompressDeadRisingLZX() with per-block independent contexts
  to handle the block-based compression correctly

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 20:52:18 -05:00
njohnson
4ff45f1cac Remove COD test files, keep empty tests directory
Stripped all platform-specific COD test files (360, PC, PS3, Wii, WiiU).
Will rebuild test suite later with new approach.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 17:04:08 -05:00
njohnson
1554eb4d74 Remove unused third-party libraries from git tracking
Analysis of .pro files shows these are never referenced:
- dx9_sdk/ - DirectX 9 SDK (completely unused)
- xna/ - XNA framework (completely unused)
- zlib/ - Qt's internal QtZlib is used instead

Active libraries retained:
- devil_sdk/ - Image loading for previews
- xbox_sdk/ - Xbox 360 format decompression
- oodle_lib/ - Dynamic compression loading

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 16:59:06 -05:00
njohnson
6fbb62a242 Ignore CLAUDE.md 2026-01-11 16:56:03 -05:00
njohnson
92caed5f7e Ignore CLAUDE.md 2026-01-11 16:54:42 -05:00
njohnson
6fdcc44948 Gitignore build and deploy scripts
These contain local paths and shouldn't be tracked.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 16:13:03 -05:00
njohnson
6b19ebb217 Add confirmation prompt before publishing release
Pauses and shows what will be published, requires y/Y to proceed.
If declined, exits gracefully with local files still available.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 16:12:28 -05:00
njohnson
f9d9333bd7 Use Claude Code to generate release notes in deploy script
Calls claude.exe --print with git log to generate professional
release notes. Falls back to basic git log format if unavailable.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 16:11:34 -05:00
njohnson
0c43e3e250 Update gitignore and app.pro
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 16:08:54 -05:00
njohnson
7b1f5d34a1 Consolidate XScript definitions with byte order inheritance
- Volition VPP: Unified BE/LE types using inheritance pattern
- THQA PAK: Child types now inherit byte order from parent
- Various XScript definition updates and fixes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 16:08:46 -05:00
njohnson
39230139b9 Update DSL parser and interpreter
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 16:08:38 -05:00