Commit Graph
586 Commits
Author SHA1 Message Date
moandJan Laupetin 4da55a351a feat: add T4 menu dumping and loading (#986)
* 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]>
2026-09-03 23:19:03 +02:00
Jan Laupetin 662780a896 chore: align iw3,iw4,iw5 menu code (#987)
* chore: small adjustments to iw3 menu dumper

* chore: align iw4 menu loader closer to iw3

* chore: align iw4 menu dumper closer to iw3

* chore: adjust iw4 menu expression dumping

* chore: adjust iw4 menu expression converting

* chore: align iw5 menu loader closer to iw3

* chore: align iw4 menu dumper closer to iw3

* chore: adjust iw5 menu expression dumping

* chore: adjust iw5 menu expression converting

* fix: not respecting reference menus when inlining menu list menus

* fix: compilation on linux
2026-08-31 22:10:37 +02:00
moandJan Laupetin 51770e7ae5 feat: IW3 menu dumping and loading (#909)
* 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]>
2026-08-31 00:04:01 +02:00
moandJan Laupetin 9f49e0e31c feat: QOS (007: Quantum of Solace) support (#894)
* 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]>
2026-08-05 00:32:23 +02:00
moandJan Laupetin 76e5bb17a2 feat: templated vehicle loading and dumping for IW4 and IW5 (#929)
* feat: templated vehicle loading and dumping for IW4 and IW5

* chore: restructure vehicle tests into separate files

---------

Co-authored-by: Jan Laupetin <[email protected]>
2026-07-26 00:28:44 +02:00
Jan Laupetin 04b6b5b4bf refactor: physpreset codestyle (#928)
* chore: adjust phys preset code to use similar code style

* fix: infinity friction for t6

* fix: t6 phys preset canFloat qboolean

* chore: move iw5 phys preset enum strings to enum strings header

* chore: add phys preset tests for all games

* chore: rename PhysPresetFields headers
2026-07-22 21:08:36 +02:00
moandJan Laupetin 37bb67a3a5 feat: add T4 PhysPreset support (#925)
* feat: add T4 PhysPreset support

* chore: slight adjustment to how the max friction constant is named

---------

Co-authored-by: Jan Laupetin <[email protected]>
2026-07-21 23:56:59 +02:00
mo 572965844e feat: templated MapEnts dumper (#923)
Relates to https://github.com/Laupetin/OpenAssetTools/issues/626
2026-07-21 19:55:40 +02:00
mo 2188f49a08 feat: templated tracer loading and dumping for IW4 and IW5 (#921)
Relates to https://github.com/Laupetin/OpenAssetTools/issues/626
2026-07-20 23:36:40 +02:00
AshandJan Laupetin e45272137f feat: T4 and T5 physconstraints dumping (#879)
* feat: T4 and T5 physconstraints dumping

* chore: small style adjustments

---------

Co-authored-by: Jan Laupetin <[email protected]>
2026-07-12 14:17:11 +02:00
AshandJan Laupetin 28e27409f5 feat: T5 map ents dumper (#878)
* feat: T5 map ents dumper

* chore: adjust map ents dumper code style to each other

---------

Co-authored-by: Jan Laupetin <[email protected]>
2026-07-12 01:03:53 +02:00
Jan Laupetin 0874f0c36f feat: font generation from ttf (#882)
* 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
2026-07-08 23:35:58 +02:00
Jan Laupetin c385f50a0e feat: add support for t4 materials (#891)
* feat: add support for t4 materials

* fix: t4 material struct
2026-07-08 22:50:22 +02:00
Jan Laupetin a4229788d7 feat: add image loading to T4 (#890) 2026-07-08 22:03:49 +02:00
Jan 5564db4f5a fix: t6 font crash (#881)
* fix: make sure t6 always has at least one kerning pair

* chore: ignore nonesense kerning pairs when dumping
2026-07-05 23:17:34 +02:00
AshandJan Laupetin bdc4c19466 feat: T6 font_s dumper (#850)
* feat: T6 font dumper

* feat: implement templated loader and writer for fonts in t6

---------

Co-authored-by: Jan Laupetin <[email protected]>
2026-07-03 23:15:55 +02:00
3fb8b2bb17 feat: font loading and dumping (#866)
* 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]>
2026-07-03 19:26:12 +02:00
moandJan Laupetin fb4b00398c feat: T4 weapon loading and dumping (#869)
* feat: T4 weapon loading and dumping

* chore: adjust naming of weapon enum values

* chore: fix typo in type names

* chore: rename t4 weapon loader files

* feat: dump and load gdt weapons for t4

* chore: weapon loaders to use similar logic

---------

Co-authored-by: Jan Laupetin <[email protected]>
2026-07-02 07:10:24 +02:00
moandJan Laupetin ee63355fd2 feat: IW3 weapon loading and dumping (#867)
* feat: IW3 weapon loading and dumping

* chore: adjust weapon strings for iw3

* chore: use original capitalization for aifuseTime

* chore: remove unused alternative iw3 csp fields

* chore: add missing checks and style the code similar to t5

* chore: small code smells in t5 weapon loader

* feat: add iw3 gdt loader

* chore: adjust weapon loader file names to t5 style

* feat: add gdt dumper for iw3 weapons

---------

Co-authored-by: Jan Laupetin <[email protected]>
2026-06-30 22:25:06 +02:00
mo c9595794a3 feat: T4 RawFile and MapEnts loading (#870) 2026-06-29 19:27:16 +02:00
moandJan Laupetin 62ee9dab40 feat: T4 LoadedSound dumper (#855)
* feat: T4 LoadedSound dumper

* chore: make t4 loaded sound dumper not parse wav

---------

Co-authored-by: Jan Laupetin <[email protected]>
2026-06-29 18:59:28 +02:00
moandJan Laupetin 228e40d17f feat: T4 MapEnts dumper (#865)
* feat: T4 MapEnts dumper

* chore: use common map_ents logic for filename

---------

Co-authored-by: Jan Laupetin <[email protected]>
2026-06-29 08:28:45 +02:00
Ashandhindercanrun 46e34b0036 feat: add addon map ents dumper to T6 (#842)
* feat: add addon map ents dumper to T6

* Remove NOMINMAX

* docs: add addonmapents to t6 supported assets

---------

Co-authored-by: hindercanrun <[email protected]>
2026-06-28 23:01:25 +02:00
mo b5d50120ad feat: T4 xanim binary dumping and loading (#854) 2026-06-27 14:16:50 +02:00
mo 8c61fa3b62 feat: T4 XModel dumper (#852) 2026-06-25 15:03:07 +02:00
Jan 255c424aac fix: t6 modman textures (#849)
* feat: dynamically decompress bc5 textures for modman

* chore: restructure image format class

* chore: keep dds file conversions

* chore: convert all kinds of webgl unsupported formats

* chore: add decompressors for remaining formats

* chore: always set full alpha if available on bc4 and bc5 decompression
2026-06-22 07:02:35 +02:00
Jan b4477ac1a9 refactor: accuracy graph subassets (#847)
* 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
2026-06-20 17:16:37 +02:00
Jan c84e3076f1 feat: t6 flametables (#845)
* feat: add flametable loading and dumping for T6

* chore: add additional validation logic of game for t6 weapon loading
2026-06-20 11:50:43 +00:00
5b11848f4d feat: T5 weapon dumping & loading (#792)
* Update docs.

* Add weapon constants.

* Register asset dumper.

* Add fields and strings for weapon parsing.

* Add gdt and raw weapon loader.

* Add weapon dumper.

* Clang format.

* Update T5 strings.

* Fix forgotten rename.

* Clang format.

* fix: add missing t5 weapon fields

* chore: properly sort,format and check size of t5 weapon enum strings

* chore: remove unused functions

* chore: add t5 weapon checks and defaults

* format enum strings

* chore: make FlameTable struct use pascal case name

* feat: dump and load flametable

* fix: make loaded weapons match vanilla data

---------

Co-authored-by: njohnson <gitea.nicholasjohnson.info>
Co-authored-by: Jan Laupetin <[email protected]>
2026-06-20 13:03:36 +02:00
Jan 85aa7417c4 feat: xmodel preview in ModMan (#835)
* chore: upgrade webwindowed for dynamic assets

* chore: make enums in ModMan lowercase

* chore: add missing platform wiiu in ModMan

* fix: register asset handler on all windows

* chore: properly localize game and platform

* chore: render example cube as xmodel preview

* chore: allow origin * in debug

* feat: show preview of xmodels with ModMan

* feat: show images in xmodel preview

* feat: auto load search paths in ModMan

* chore: load objcontainer of loaded zones in ModMan

* chore: add iw4x specific recognized zone dirs

* chore: show when models are loading

* fix: make sure webwindowed handles window and app destruction in correct order

* chore: track and properly free threejs resources

* chore: add skybox for 3d preview

* chore: add small border radius to preview

* fix: linting

* fix: linux compilation

* chore: update package lock
2026-06-18 18:52:52 +02:00
moandJan Laupetin 44d6710991 feat: initial T4 support (#807)
* feat: initial T4 support

* chore: adjust t4 symbols a bit for accuracy

* chore: add PackIndex asset to T4

* chore: remove unused AssetXModelPieces

* chore: add default and global asset pools loader for T4

* chore: use separate defines for T4 in ImageDumper

* chore: remove unnecessary namespaces in gfximage_actions

* chore: small things

* chore: fix T4 PhysPreset type

* chore: use proper XQuat2 type for T4 xanims

* chore: fix errors on T4 types

* chore: use iw3 like struct for XModelStreamInfo

* docs: add basic docs for T4

* chore: add basic ObjCompiler setup for T4

* chore: adjust loaded sound definition

* chore: make sure t4 material has the correct alignment

* chore: make sure t4 uses similar names for assets as other games

* fix: asset references should not be reusable

* chore: add content writer for t4

* feat: add t4 localize loader

* chore: reorder game ids to be alphabetically ordered

---------

Co-authored-by: Jan Laupetin <[email protected]>
2026-06-07 14:06:33 +02:00
Jan 0d0f928267 feat: add binary xanim support for remaining games (#818)
* 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
2026-06-06 14:47:51 +00:00
moandJan Laupetin 0c22dddd0e feat: IW3 xanim dumping/loading in CoD4 Mod Tools raw binary format (#768)
* 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]>
2026-06-01 22:52:49 +02:00
Jan Laupetin 8a791816ed chore: set XSurface deformed property when applicable 2026-05-24 11:13:54 +02:00
Jan Laupetin e6aa66e0f0 chore: use templating for image dumper 2026-05-17 12:07:02 +02:00
Jan Laupetin c49d2bc96f fix: do not dump iwis with format unknown 2026-05-17 11:15:25 +02:00
njohnson cd2346e174 Refactor something. 2026-05-16 09:54:26 +02:00
njohnson 336c9d8d86 Fix LMAP parsing and don't resolve till after ptr is ready. 2026-05-16 09:54:26 +02:00
njohnson 54d4eaffd2 Added assert for attenuation image. Do not dump lmapLookupStart. 2026-05-16 09:54:24 +02:00
njohnson 92418daa6d Add brackets for if. Do not dump lmapLookupStart. 2026-05-16 09:54:24 +02:00
njohnson 2b3f680d48 feat: add t6 gfxlight dumper and loader 2026-05-16 09:54:23 +02:00
njohnson 5b6a725f78 feat: add t5 gfxlight dumper and loader 2026-05-16 09:54:23 +02:00
njohnson 3c15f8ad7e feat: add iw5 gfxlight dumper and loader 2026-05-16 09:54:22 +02:00
njohnson a905a6d161 feat: add iw3 gfxlight dumper and loader 2026-05-16 09:54:22 +02:00
Jan Laupetin ff7b940e86 fix: properly dump gltf with root node in models with more than one root bone 2026-05-03 16:35:06 +02:00
Jan Laupetin 2d2ea30b45 fix: iw5 uses isFrictionInfinity as well 2026-05-03 16:00:30 +02:00
Jan Laupetin a31d3c4b88 fix: iw4 physpreset uses FLT_MAX as infinite friction 2026-05-03 15:56:09 +02:00
Jan Laupetin 67bdb79654 fix: do not clamp iw4 physpreset mass 2026-05-03 15:46:52 +02:00
Jan Laupetin 0c1bc747dc chore: update default root bone name to empty string and do not specify if matching default name 2026-05-03 13:51:56 +02:00
Jan Laupetin 4886767e67 chore: get rid of unnecessary class in XModelDumper 2026-05-03 13:09:03 +02:00