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]>
This commit is contained in:
mo
2026-08-05 00:32:23 +02:00
committed by GitHub
co-authored by Jan Laupetin
parent 5c0a7257fd
commit 9f49e0e31c
142 changed files with 6000 additions and 97 deletions
+4
View File
@@ -89,6 +89,10 @@ const ASSET_TYPE_LOOKUP: Record<CommonAssetType, string> = {
footstep_table: "Footstep table",
footstep_fx_table: "Footstep FX table",
zbarrier: "ZBarrier",
xml_tree: "XML tree",
scene_animation: "Scene animation",
cutscene: "Cutscene",
custom_camera: "Custom camera",
};
export function localizeAssetType(assetType: CommonAssetType): string {
+40
View File
@@ -130,6 +130,46 @@ const ASSET_TYPES_BY_GAME: Record<GameId, CommonAssetType[]> = {
"vehicle",
"addon_map_ents",
],
qos: [
"xmodel_pieces",
"phys_preset",
"phys_constraints",
"destructible_def",
"xanim",
"xmodel",
"material",
"technique_set",
"image",
"sound",
"sound_curve",
"clip_map",
"clip_map",
"com_world",
"game_world_sp",
"game_world_mp",
"map_ents",
"gfx_world",
"light_def",
"ui_map",
"font",
"menu_list",
"menu",
"localize_entry",
"weapon",
"sound_driver_globals",
"fx",
"impact_fx",
"ai_type",
"mp_type",
"character",
"xmodel_alias",
"raw_file",
"string_table",
"xml_tree",
"scene_animation",
"cutscene",
"custom_camera",
],
t4: [
"xmodel_pieces",
"phys_preset",
+5 -1
View File
@@ -73,7 +73,11 @@ export type CommonAssetType =
| "slug"
| "footstep_table"
| "footstep_fx_table"
| "zbarrier";
| "zbarrier"
| "xml_tree"
| "scene_animation"
| "cutscene"
| "custom_camera";
export interface AssetDto {
type: CommonAssetType;
+1 -1
View File
@@ -1,6 +1,6 @@
import { getBinds } from "@webwindowed/web-api";
export type GameId = "iw3" | "iw4" | "iw5" | "t4" | "t5" | "t6";
export type GameId = "iw3" | "iw4" | "iw5" | "qos" | "t4" | "t5" | "t6";
export type GamePlatform = "pc" | "xbox" | "ps3" | "wiiu";