715 Commits

Author SHA1 Message Date
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
njohnson
ca98c059ba Rename xscript-cli to cli tool
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 16:08:33 -05:00
njohnson
b844c71758 Add build and deploy scripts
- build_debug.cmd / build_release.cmd: Windows batch files with MSVC setup
- build_all_debug.sh / build_all_release.sh: Shell wrappers for Git Bash
- deploy.sh: Automated release script for Gitea
- Update CLAUDE.md with build instructions

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 16:08:27 -05:00
njohnson
144ed7b83d Fix remaining match() call in fastfile.xscript
Convert platform_u32 match to if-else chain.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 13:01:21 -05:00
njohnson
8430428a91 Fix XScript syntax errors in COD definitions
- Convert match() function calls to if-else chains (match keyword conflict)
- Remove unsupported bracket attributes [table=..., columns=...]
- Expand inline statement with bracket attributes to explicit if block

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 12:50:59 -05:00
njohnson
272216a7d5 Fix TreeBuilder assignment and xscript-cli linking
- Change TreeBuilder m_registry from reference to pointer to allow assignment
- Add default constructor to TreeBuilder for member initialization
- Add Xbox SDK xcompress64 library to xscript-cli linker dependencies

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 12:39:18 -05:00
njohnson
f9c3f91eec Fix xscript-cli build dependency on libs
Enable tools.depends = libs so xscript-cli waits for dsl.lib
to be built before linking.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 12:36:16 -05:00
njohnson
1b3b5ee194 Add project documentation and clean up obsolete files
- Add CLAUDE.md with project overview and XScript reference
- Remove obsolete ai-commit.sh script
- Clean up duplicate .env entry in .gitignore

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 12:12:00 -05:00
njohnson
8277be6518 Add xscript-cli tool and GML disassembler
- Add xscript-cli: Command-line validator for XScript definition files
  - Syntax checking and reference validation
  - Directory batch processing
  - Type listing and info commands
- Add gml_disasm.py: Python disassembler for Avatar GML bytecode
- Update tools.pro for new subprojects

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 12:11:38 -05:00
njohnson
19459d7aaf Enhance LogManager with file output and entry buffering
- Add log-to-file functionality with configurable path
- Buffer log entries before listeners connect to prevent lost messages
- Add flush mechanism for buffered entries
- Improve utils.h with additional helper functions

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 12:11:16 -05:00
njohnson
f0030ea6f2 Add new format definitions for FMOD, THQ, Volition, and Wii
- FMOD: FSB audio bank format support
- THQ: PAK archives, G4RC textures, RAD video, STR strings, GML scripts
- Volition: VPP archives, PEG textures, ASM container format
- Wii: BNR banner format with metadata extraction

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 12:10:58 -05:00
njohnson
8f07bf0b72 Update Asura XScript definitions with new syntax
- Migrate from bracket attributes to ui() function calls
- Enhance chunk parsing with improved structure definitions
- Add additional metadata fields to chunk handlers
- Update Xbox 360 texture and archive definitions

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 12:10:29 -05:00
njohnson
f3bca6871e Update COD XScript definitions with new syntax
- Migrate from set_global/get_global to ctx_set/ctx_get
- Replace if-else chains with match() expressions
- Update inline pointer handling patterns
- Improve GfxWorld and asset parsing structures
- Clean up redundant code across 60+ definition files

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 12:09:57 -05:00
njohnson
e4c913bb06 Refactor main window and extend settings functionality
- Refactor MainWindow to use TreeBuilder for parsed data organization
- Integrate new ListPreviewWidget and TextViewerWidget
- Add Python path auto-detection and scripts directory settings
- Add log-to-file option and improve debug logging feedback
- Improve image format detection (PNG, JPEG, BMP, DDS, TGA, RCB)
- Update app.pro with new source files

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 12:09:31 -05:00
njohnson
57ad7c4111 Add new preview widgets and enhance existing viewers
- Add ListPreviewWidget for displaying parsed list data with table view
- Add TextViewerWidget for text file preview with syntax highlighting
- Add TreeBuilder class to organize parsed data into tree structure
- Enhance HexView with selection support, copy functionality, keyboard navigation
- Enhance ImagePreviewWidget with additional format support and metadata display
- Minor audio preview widget adjustments

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 12:08:59 -05:00
njohnson
c45d5cba86 Add XScript language features and DslKeys abstraction
- Add inline, array, const, and match statement syntax
- Add true/false keywords and deflate() decompression function
- Introduce DslKeys enum for internal metadata key management
- Improve parse_here delegation pattern with variable merging
- Remove deprecated bracket attribute syntax (use ui() instead)
- Enhance script type editor with additional functionality
- Remove obsolete install.cmd

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-11 12:08:26 -05:00
njohnson
904abf2e36 Add configurable QuickBMS path with auto-detection
- Add QuickBMS path setting to Settings class with auto-detection
- Add Tools page in Preferences with QuickBMS configuration UI
- Update Compression class to use configurable path instead of hardcoded
- Add startup prompt if QuickBMS not found, with option to locate

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 00:54:57 -05:00
njohnson
2017abb175 Add reset settings option in preferences
- Reset All Settings button in General preferences
- Clears all settings and restores XPlor Dark theme
- Applies theme change immediately
- Confirmation dialog before reset

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 00:43:52 -05:00
njohnson
d0510d7ab2 Update Asura archive XScript definitions
- Enhanced chunk parsing
- Improved structure definitions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 00:38:33 -05:00
njohnson
b46c94a47b Update compression and logging libraries
- Enhanced compression support
- Log manager improvements

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 00:38:25 -05:00
njohnson
c208595473 Update DSL interpreter and type registry
- Enhanced XScript parsing capabilities
- Type registry improvements

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 00:38:12 -05:00
njohnson
5f43466057 Update main app with theming and UI improvements
- App metadata defines at top of main.cpp
- Dynamic themed app icon (accent color replaces red)
- Icon refreshes on theme change
- Disabled unimplemented menu actions
- Image preview with theme support
- Updated CLI help text with feature list
- Splash screen integration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 00:38:04 -05:00
njohnson
42373120b0 Clean up report issue dialog with build-time token
- API token loaded from .env at build time via qmake
- All fields required with validation
- Email validation with regex
- Cleaner UI with placeholder text
- Added .env to gitignore

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 00:37:55 -05:00
njohnson
079e790aae Redesign about dialog to match splash screen style
- Custom painting with theme colors
- Accent stripe at top
- "X" in accent color, "Plor" in text color
- Dynamic version from QCoreApplication
- Dynamic copyright year
- Removed "With Help From" section

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 00:37:46 -05:00
njohnson
50d90d4742 Update preferences editor with theme support
- Theme selection (dark/light modes)
- Accent color picker with presets
- Live preview of theme changes
- Settings persistence via QSettings

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 00:36:50 -05:00
njohnson
cd686a8b41 Add definition viewer dialog
- View loaded XScript definitions
- Shows definition name and source path
- Displays load status (success/error)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 00:36:42 -05:00
njohnson
885b4f6ad6 Add audio preview widget
- Waveform visualization with theme accent color
- Playback controls (play/pause, stop, position slider)
- Time display with milliseconds (MM:SS.mmm)
- Position tracking line on waveform
- Volume control

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 00:36:00 -05:00
njohnson
aa92fe014a Add hex viewer widget
- Custom hex viewer with address, hex, and ASCII columns
- Theme-aware colors for selection and highlights
- Keyboard navigation and selection support
- Scrollable view for large files

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 00:35:47 -05:00
njohnson
c041f25448 Add settings manager and splash screen
- Settings singleton for app-wide preferences (theme, recent files)
- Theme support with accent colors and dark/light modes
- Splash screen with custom painting, progress bar, theme colors
- Wait-for-interaction option for splash screen

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 00:35:31 -05:00
njohnson
68d749ee63 Add comprehensive README documentation
Document:
- Project overview and features
- Supported game formats (CoD, Asura Engine)
- Project structure
- Build instructions
- XScript language syntax and examples
- Usage guide
- How to add new format support
- Dependencies and acknowledgments

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1.8 1.9
2026-01-07 16:43:03 -05:00
njohnson
64db5a19ed Add dynamic file filter to Open dialog
- Add TypeRegistry::supportedExtensions() to extract file extensions
  from loaded XScript definitions by parsing criteria blocks
- Implement File > Open action with QFileDialog
- Generate filter string dynamically from all root type definitions
- Include "All Supported Files" and "All Files" filter options

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 16:41:46 -05:00
njohnson
bebaeff322 Merge branch 'main' of https://code.redline.llc/njohnson/XPlor 1.7 2026-01-07 16:38:17 -05:00
njohnson
d5fe20d746 Update app with image preview and code style changes
- Integrate ImagePreviewWidget for texture asset preview
- Standardize member variable naming (m_var -> mVar)
- Standardize getter methods (GetXxx -> Xxx)
- Add app resource file for Windows

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 16:36:53 -05:00
njohnson
0fa26e5256 Expand Call of Duty XScript definitions
Add new asset type definitions:
- GfxWorld and related structures (cells, lights, probes)
- Menu system (menudef, itemdef, windowdef, listboxdef)
- Sound system (soundalias, soundfile, speakermap, sndcurve)
- D3D resources (vertex/index buffers)
- Font glyphs and expression entries

Update existing definitions with improved field annotations
and UI display properties.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 16:36:40 -05:00