* feat: T4 add xmodel loader
* chore: remove unused xmodel related struct from T4
* fix: allocating too little trans for t4
---------
Co-authored-by: Jan Laupetin <[email protected]>
* feat: add T4 menu dumping
* chore: align with latest changes
* feat: add T4 menu loading
Load T4 menulists and menu files through the shared menu parser.
Preserve T4-specific menu and listbox fields and cover loading, dumping, linking, and round-trip behaviour.
* chore: make flag fields unsigned
* chore: rename `expOperationEnum` -> `operationEnum`
* chore: use default enum numeration for T4 operationEnum
* chore: remove unused members of operationEnum
* chore: remove redundant op from operationEnum
* refactor: align T4 expression operand names with IW3
* chore: small adjustment to iw3,t4 types
---------
Co-authored-by: Jan Laupetin <[email protected]>
* fix: handle IWD entry end of stream
Return EOF correctly for IWD entries and preserve peeked bytes during bulk reads.
* chore: small code style adaption
* chore: use minizip to write test zip file
---------
Co-authored-by: Jan Laupetin <[email protected]>
* feat: IW3 menu dumping
* fix: IW3 menu dumper preserve menu ownerdraw flag masks
* fix: IW3 menu dumper preserve numeric script arguments
Emit numeric tokens without quotes so the linker keeps colour arguments separate.
Before: `"0.1" "0.1" "0.12" "0.5"` becomes `"0.10.10.120.5"`
After: `0.1 0.1 0.12 0.5`
This fixes `mouseExit` colour commands failing to clear menu hover borders.
* fix: IW3 menu dumper preserve empty item text
Keep explicit empty text distinct from null text when dumping menu items.
This fixes CD-key values overflowing their input boxes.
* test: cover IW3 menu dumper material case
* test: cover IW3 menu list path precedence
* chore: clang format
* fix: reverse order of union to avoid edge case bug in zcg
* feat: IW3 menu loading
* fix: validate menu expression name table
* chore: explain numeric token quoting in comment
* refactor: simplify menu dump fallback path
* chore: add more dynamic window flags
* refactor: reuse IW3 menu window flag constants
* refactor: use explicit menu item feature lookup
* refactor: represent menu item text as optional
* refactor: clarify shared IW3 and IW4 menu constants
IW4 only extends the type enum so they can be shared
* refactor: clarify IW3 menu zone state naming
* fix: log IW3 menu conversion failures
* refactor: align IW3 menu list loader with IW4
* refactor: align IW3 menu dumpers with IW4
* refactor: align IW3 menu converter with IW4
* chore: use default enum numeration for operationEnum
* chore: small optimization on edit field capability initialization
* fix: iw3 menu optimizations for rect not considering relative position to parent
* chore: align iw3 menu converting closer to iw4
* chore: align iw3 menu dumping closer to iw4
* fix: not dumping menu flags properties correctly
* chore: adjust iw3 expression dumping to work similar to iw4
* chore: adjust iw3 expression converting to work similar to iw4
* chore: use unordered_map for MenuExpressionMatchers
---------
Co-authored-by: Jan Laupetin <[email protected]>
* feat: QOS (007: Quantum of Solace) support
* feat: add qos localize loader
* feat: add qos stringtable loader
* chore: comment about official zones
* fix: add qos gfximage runtime fields
* chore: remove useless dev time comments
* fix: remove all `static_asserts`s from asset headers causing build fail on x64
* chore: change union ordering of qos `entryInternalData`
* chore: move qos asset type enum to qos.h
* fix: qos and t4 xsurface index buffer
* chore: implement qos MaterialInfo struct
* chore: adjust some gfxworld struct members
* chore: implement qos PhysPreset and PhysConstraints
* chore: fix and adjust slight inconsistencies with qos zone code
* chore: reorder qos ZoneCode.lua entries in order of asset type enum
* chore: remove asset types that are not actual asset types in zones
* chore: check common asset arrays with static_assert
* chore: rename qos assets
* chore: reorder qos in templates to be in alphabetical order
* chore: use function for CopyMipLevel in Dx9TextureLoader
* chore: use templates for qos MapEntsDumper
* chore: add missing braces in XModelToCommonConverter
* chore: add generic way to peek at zone data
* Qos does not use a classic ZoneHeader so code needs to be more generic
* fix: do not use raw_byte and raw_uint typedefs for qos
* fix: not being able to write clipmapmp
* chore: additional research on qos vertex property and stuff
---------
Co-authored-by: Jan Laupetin <[email protected]>
* feat: templated vehicle loading and dumping for IW4 and IW5
* chore: restructure vehicle tests into separate files
---------
Co-authored-by: Jan Laupetin <[email protected]>
* feat: add T4 PhysPreset support
* chore: slight adjustment to how the max friction constant is named
---------
Co-authored-by: Jan Laupetin <[email protected]>
* chore: add tests for csv stream
* fix: csv values must have quotes when they contain a new line
* fix: csv reader did not properly handle special cases
* chore: add file variant of json fonts
* chore: add stb dependency
* feat: generate fonts from ttf files
* chore: add option to add yOffset to file font
* chore: dynamically adjust generated font bitmap size
* fix: printable characters should respect ISO-8859-1 control characters
* chore: do not write missing glyphs into the bitmap
* chore: remove test texture conversion
* chore: adjust font compiler for iw3,iw4,iw5,t4,t5
* chore: add possibility to fill color channels when converting
* fix: games other than t6 use rgba for fonts
* fix: make sure no mipmaps are set on loaddef
* fix: t4 and iw3 use dimensions in image loaddef
* chore: also include optional glyphs in fonts
* feat: font loading and dumping
* chore: make font properties unsigned if possible
* chore: use merge_patch to dump json font
* chore: font material is required
* chore: move static methods from font loader and dumper to anonymous namespace
* chore: make sure loaded fonts have their glyphs sorted
* chore: add macros for json NLOHMANN_TO_JSON_METHOD and NLOHMANN_FROM_JSON_METHOD
* feat: encode printable letters as string in json
Co-authored-by: hindercanrun <[email protected]>
* chore: omit redundant glyph count from jsons
---------
Co-authored-by: Jan Laupetin <[email protected]>
Co-authored-by: hindercanrun <[email protected]>
Co-authored-by: MrIkso <[email protected]>
* refactor: use subassets to load accuracy graphs for iw4,iw5,t5,t6
* fix: not dumping anim names for t5 weapons and t6 attachment unique
* refactor: dump accuracy graphs like a subasset
* refactor: use shared method for accuracy graph filenames
* refactor: use generic loader for iw3 xanims
* refactor: use generic dumper for iw3 xanims
* chore: use templating on XAnimDumper
* chore: use templating on XAnimLoader
* feat: dump xanims for T5
* feat: load binary t5 xanims
* feat: load and dump t6 xanims
* feat: load and dump iw4,iw5 xanims
* chore: make sure iw3 and t5 notify about unsupported delta3D
* chore: also use CommonVec3U8 and CommonVec3U16 for non delta trans track
* feat: IW3 dump xanim to cod4 mod tools compatible binary
* chore: add XAnimPartType enum to game headers
* chore: use XAnimPartType in XAnimDumperIW3
* chore: extract xanim filename into XAnimCommon
* chore: prefer emplace_back over push_back
* chore: small code style improvements
* chore: use proper unsigned types for XAnimParts structs
* chore: use better understandable calculations for bitfields
* chore: use game names for parts
* chore: rename method to WriteNoteTracks
* chore: adds comments and improve clearity of what the game does
* chore: extract stream writing methods into StreamUtils
* chore: use vec3 for XAnimPartTransFrames mins and size
* chore: properly differ between XQuat and XQuat2 structs
* chore: use constants for xanim flags
* chore: use optional for delta track quats and trans
* chore: split delta track writing methods into quat and trans
* chore: add assertion for bDelta
* chore: simplify quat frame encoding indexing
* chore: simplify float to int bit casting
* chore: do not throw exception on failing to reconstruct bone tracks
* feat: add xanim loader for iw3
* fix: make sure to sort quats and trans like the game
* chore: prevent empty dumped files on bad xanim data
* chore: ensure no exception on zero frames in xanim notifies
* test: add system test for iw3 xanims
---------
Co-authored-by: Jan Laupetin <[email protected]>
* Copied template from font.
* Create PhysPreset writer from Font dumper template.
* Completely refactor to match previous implementation.
* Remove files from previous implementation.
* Fix PhysPresetFields.
* Add missing fields and correct order.
* Add static infinity check as builtin does not work.
* Wasn't clang formatted.
* Remove unused 'perSurfaceSndAlias' field.
* Removed unsupported vals (tracer & vehicle) and un-needed vals (material).
* Make order match struct and mark 'tempDefaultToCylinder' as QBOOLEAN.
* Make order match struct and clamp vals for 'mass' and 'tempDefaultToCylinder'.
* Remove un-needed includes and add limits for float max.
* Remove clamping of mass.
* Use float max to determine if friction is infinite.
* Clang format.
* chore: formatting
* chore: do not use classes for obj constants
---------
Co-authored-by: njohnson <gitea.nicholasjohnson.info>
Co-authored-by: Jan Laupetin <[email protected]>