mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2026-06-27 03:18:17 +00:00
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 <jan@laupetin.net>
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
#include "IW3/CommonAssetIW3.h"
|
||||
#include "IW4/CommonAssetIW4.h"
|
||||
#include "IW5/CommonAssetIW5.h"
|
||||
#include "T4/CommonAssetT4.h"
|
||||
#include "T5/CommonAssetT5.h"
|
||||
#include "T6/CommonAssetT6.h"
|
||||
|
||||
@@ -10,13 +11,15 @@
|
||||
|
||||
ICommonAssetTypeMapper* ICommonAssetTypeMapper::GetCommonAssetMapperByGame(GameId gameId)
|
||||
{
|
||||
static ICommonAssetTypeMapper* assetTypeMappers[static_cast<unsigned>(GameId::COUNT)]{
|
||||
static ICommonAssetTypeMapper* assetTypeMappers[]{
|
||||
new IW3::CommonAssetTypeMapper(),
|
||||
new IW4::CommonAssetTypeMapper(),
|
||||
new IW5::CommonAssetTypeMapper(),
|
||||
new T4::CommonAssetTypeMapper(),
|
||||
new T5::CommonAssetTypeMapper(),
|
||||
new T6::CommonAssetTypeMapper(),
|
||||
};
|
||||
static_assert(std::extent_v<decltype(assetTypeMappers)> == static_cast<unsigned>(GameId::COUNT));
|
||||
|
||||
assert(static_cast<unsigned>(gameId) < static_cast<unsigned>(GameId::COUNT));
|
||||
auto* result = assetTypeMappers[static_cast<unsigned>(gameId)];
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "IW3/GameIW3.h"
|
||||
#include "IW4/GameIW4.h"
|
||||
#include "IW5/GameIW5.h"
|
||||
#include "T4/GameT4.h"
|
||||
#include "T5/GameT5.h"
|
||||
#include "T6/GameT6.h"
|
||||
#include "Utils/StringUtils.h"
|
||||
@@ -11,13 +12,15 @@
|
||||
|
||||
IGame* IGame::GetGameById(GameId gameId)
|
||||
{
|
||||
static IGame* games[static_cast<unsigned>(GameId::COUNT)]{
|
||||
static IGame* games[]{
|
||||
new IW3::Game(),
|
||||
new IW4::Game(),
|
||||
new IW5::Game(),
|
||||
new T4::Game(),
|
||||
new T5::Game(),
|
||||
new T6::Game(),
|
||||
};
|
||||
static_assert(std::extent_v<decltype(games)> == static_cast<unsigned>(GameId::COUNT));
|
||||
|
||||
assert(static_cast<unsigned>(gameId) < static_cast<unsigned>(GameId::COUNT));
|
||||
auto* result = games[static_cast<unsigned>(gameId)];
|
||||
|
||||
@@ -15,6 +15,7 @@ enum class GameId : std::uint8_t
|
||||
IW3,
|
||||
IW4,
|
||||
IW5,
|
||||
T4,
|
||||
T5,
|
||||
T6,
|
||||
|
||||
@@ -48,6 +49,7 @@ static constexpr const char* GameId_Names[]{
|
||||
"IW3",
|
||||
"IW4",
|
||||
"IW5",
|
||||
"T4",
|
||||
"T5",
|
||||
"T6",
|
||||
};
|
||||
|
||||
@@ -159,7 +159,6 @@ namespace IW3
|
||||
WFT_NUM_FIELD_TYPES
|
||||
};
|
||||
|
||||
using AssetXModelPieces = Asset<ASSET_TYPE_XMODELPIECES, XModelPieces>;
|
||||
using AssetPhysPreset = Asset<ASSET_TYPE_PHYSPRESET, PhysPreset>;
|
||||
using AssetXAnim = Asset<ASSET_TYPE_XANIMPARTS, XAnimParts>;
|
||||
using AssetXModel = Asset<ASSET_TYPE_XMODEL, XModel>;
|
||||
@@ -194,7 +193,6 @@ namespace IW3
|
||||
using SubAssetPixelShader = SubAsset<SUB_ASSET_TYPE_PIXEL_SHADER, MaterialPixelShader>;
|
||||
} // namespace IW3
|
||||
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetXModelPieces, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetPhysPreset, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetXAnim, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetXModel, name);
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
#include "CommonAssetT4.h"
|
||||
|
||||
#include "T4.h"
|
||||
|
||||
#include <cassert>
|
||||
|
||||
namespace T4
|
||||
{
|
||||
CommonAssetTypeMapper::CommonAssetTypeMapper() = default;
|
||||
|
||||
CommonAssetType CommonAssetTypeMapper::GameToCommonAssetType(const asset_type_t gameAssetType) const
|
||||
{
|
||||
static CommonAssetType lookupTable[static_cast<unsigned>(ASSET_TYPE_COUNT)]{
|
||||
CommonAssetType::XMODEL_PIECES, // ASSET_TYPE_XMODELPIECES
|
||||
CommonAssetType::PHYS_PRESET, // ASSET_TYPE_PHYSPRESET
|
||||
CommonAssetType::PHYS_CONSTRAINTS, // ASSET_TYPE_PHYSCONSTRAINTS
|
||||
CommonAssetType::DESTRUCTIBLE_DEF, // ASSET_TYPE_DESTRUCTIBLEDEF
|
||||
CommonAssetType::XANIM, // ASSET_TYPE_XANIMPARTS
|
||||
CommonAssetType::XMODEL, // ASSET_TYPE_XMODEL
|
||||
CommonAssetType::MATERIAL, // ASSET_TYPE_MATERIAL
|
||||
CommonAssetType::TECHNIQUE_SET, // ASSET_TYPE_TECHNIQUE_SET
|
||||
CommonAssetType::IMAGE, // ASSET_TYPE_IMAGE
|
||||
CommonAssetType::SOUND, // ASSET_TYPE_SOUND
|
||||
CommonAssetType::LOADED_SOUND, // ASSET_TYPE_LOADED_SOUND
|
||||
CommonAssetType::CLIP_MAP, // ASSET_TYPE_CLIPMAP
|
||||
CommonAssetType::CLIP_MAP, // ASSET_TYPE_CLIPMAP_PVS
|
||||
CommonAssetType::COM_WORLD, // ASSET_TYPE_COMWORLD
|
||||
CommonAssetType::GAME_WORLD_SP, // ASSET_TYPE_GAMEWORLD_SP
|
||||
CommonAssetType::GAME_WORLD_MP, // ASSET_TYPE_GAMEWORLD_MP
|
||||
CommonAssetType::MAP_ENTS, // ASSET_TYPE_MAP_ENTS
|
||||
CommonAssetType::GFX_WORLD, // ASSET_TYPE_GFXWORLD
|
||||
CommonAssetType::LIGHT_DEF, // ASSET_TYPE_LIGHT_DEF
|
||||
CommonAssetType::UI_MAP, // ASSET_TYPE_UI_MAP
|
||||
CommonAssetType::FONT, // ASSET_TYPE_FONT
|
||||
CommonAssetType::MENU_LIST, // ASSET_TYPE_MENULIST
|
||||
CommonAssetType::MENU, // ASSET_TYPE_MENU
|
||||
CommonAssetType::LOCALIZE_ENTRY, // ASSET_TYPE_LOCALIZE_ENTRY
|
||||
CommonAssetType::WEAPON, // ASSET_TYPE_WEAPON
|
||||
CommonAssetType::SOUND_DRIVER_GLOBALS, // ASSET_TYPE_SNDDRIVER_GLOBALS
|
||||
CommonAssetType::FX, // ASSET_TYPE_FX
|
||||
CommonAssetType::IMPACT_FX, // ASSET_TYPE_IMPACT_FX
|
||||
CommonAssetType::AI_TYPE, // ASSET_TYPE_AITYPE
|
||||
CommonAssetType::MP_TYPE, // ASSET_TYPE_MPTYPE
|
||||
CommonAssetType::CHARACTER, // ASSET_TYPE_CHARACTER
|
||||
CommonAssetType::XMODEL_ALIAS, // ASSET_TYPE_XMODELALIAS
|
||||
CommonAssetType::RAW_FILE, // ASSET_TYPE_RAWFILE
|
||||
CommonAssetType::STRING_TABLE, // ASSET_TYPE_STRINGTABLE
|
||||
CommonAssetType::PACK_INDEX, // ASSET_TYPE_PACK_INDEX
|
||||
};
|
||||
|
||||
assert(gameAssetType < ASSET_TYPE_COUNT);
|
||||
return lookupTable[gameAssetType];
|
||||
}
|
||||
|
||||
std::optional<asset_type_t> CommonAssetTypeMapper::CommonToGameAssetType(const CommonAssetType commonAssetType) const
|
||||
{
|
||||
#define MAP_COMMON(common, game) \
|
||||
case common: \
|
||||
return game;
|
||||
|
||||
switch (commonAssetType)
|
||||
{
|
||||
MAP_COMMON(CommonAssetType::XMODEL_PIECES, ASSET_TYPE_XMODELPIECES)
|
||||
MAP_COMMON(CommonAssetType::PHYS_PRESET, ASSET_TYPE_PHYSPRESET)
|
||||
MAP_COMMON(CommonAssetType::PHYS_CONSTRAINTS, ASSET_TYPE_PHYSCONSTRAINTS)
|
||||
MAP_COMMON(CommonAssetType::DESTRUCTIBLE_DEF, ASSET_TYPE_DESTRUCTIBLEDEF)
|
||||
MAP_COMMON(CommonAssetType::XANIM, ASSET_TYPE_XANIMPARTS)
|
||||
MAP_COMMON(CommonAssetType::XMODEL, ASSET_TYPE_XMODEL)
|
||||
MAP_COMMON(CommonAssetType::MATERIAL, ASSET_TYPE_MATERIAL)
|
||||
MAP_COMMON(CommonAssetType::TECHNIQUE_SET, ASSET_TYPE_TECHNIQUE_SET)
|
||||
MAP_COMMON(CommonAssetType::IMAGE, ASSET_TYPE_IMAGE)
|
||||
MAP_COMMON(CommonAssetType::SOUND, ASSET_TYPE_SOUND)
|
||||
MAP_COMMON(CommonAssetType::LOADED_SOUND, ASSET_TYPE_LOADED_SOUND)
|
||||
MAP_COMMON(CommonAssetType::CLIP_MAP, ASSET_TYPE_CLIPMAP_PVS)
|
||||
MAP_COMMON(CommonAssetType::COM_WORLD, ASSET_TYPE_COMWORLD)
|
||||
MAP_COMMON(CommonAssetType::GAME_WORLD_SP, ASSET_TYPE_GAMEWORLD_SP)
|
||||
MAP_COMMON(CommonAssetType::GAME_WORLD_MP, ASSET_TYPE_GAMEWORLD_MP)
|
||||
MAP_COMMON(CommonAssetType::MAP_ENTS, ASSET_TYPE_MAP_ENTS)
|
||||
MAP_COMMON(CommonAssetType::GFX_WORLD, ASSET_TYPE_GFXWORLD)
|
||||
MAP_COMMON(CommonAssetType::LIGHT_DEF, ASSET_TYPE_LIGHT_DEF)
|
||||
MAP_COMMON(CommonAssetType::UI_MAP, ASSET_TYPE_UI_MAP)
|
||||
MAP_COMMON(CommonAssetType::FONT, ASSET_TYPE_FONT)
|
||||
MAP_COMMON(CommonAssetType::MENU_LIST, ASSET_TYPE_MENULIST)
|
||||
MAP_COMMON(CommonAssetType::MENU, ASSET_TYPE_MENU)
|
||||
MAP_COMMON(CommonAssetType::LOCALIZE_ENTRY, ASSET_TYPE_LOCALIZE_ENTRY)
|
||||
MAP_COMMON(CommonAssetType::WEAPON, ASSET_TYPE_WEAPON)
|
||||
MAP_COMMON(CommonAssetType::SOUND_DRIVER_GLOBALS, ASSET_TYPE_SNDDRIVER_GLOBALS)
|
||||
MAP_COMMON(CommonAssetType::FX, ASSET_TYPE_FX)
|
||||
MAP_COMMON(CommonAssetType::IMPACT_FX, ASSET_TYPE_IMPACT_FX)
|
||||
MAP_COMMON(CommonAssetType::AI_TYPE, ASSET_TYPE_AITYPE)
|
||||
MAP_COMMON(CommonAssetType::MP_TYPE, ASSET_TYPE_MPTYPE)
|
||||
MAP_COMMON(CommonAssetType::CHARACTER, ASSET_TYPE_CHARACTER)
|
||||
MAP_COMMON(CommonAssetType::XMODEL_ALIAS, ASSET_TYPE_XMODELALIAS)
|
||||
MAP_COMMON(CommonAssetType::RAW_FILE, ASSET_TYPE_RAWFILE)
|
||||
MAP_COMMON(CommonAssetType::STRING_TABLE, ASSET_TYPE_STRINGTABLE)
|
||||
MAP_COMMON(CommonAssetType::PACK_INDEX, ASSET_TYPE_PACK_INDEX)
|
||||
|
||||
default:
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
#undef MAP_COMMON
|
||||
}
|
||||
} // namespace T4
|
||||
@@ -0,0 +1,15 @@
|
||||
#pragma once
|
||||
|
||||
#include "Game/CommonAsset.h"
|
||||
|
||||
namespace T4
|
||||
{
|
||||
class CommonAssetTypeMapper final : public ICommonAssetTypeMapper
|
||||
{
|
||||
public:
|
||||
CommonAssetTypeMapper();
|
||||
|
||||
[[nodiscard]] CommonAssetType GameToCommonAssetType(asset_type_t gameAssetType) const override;
|
||||
[[nodiscard]] std::optional<asset_type_t> CommonToGameAssetType(CommonAssetType commonAssetType) const override;
|
||||
};
|
||||
} // namespace T4
|
||||
@@ -0,0 +1,35 @@
|
||||
#include "CommonT4.h"
|
||||
|
||||
#include "Utils/Pack.h"
|
||||
|
||||
using namespace T4;
|
||||
|
||||
PackedTexCoords Common::Vec2PackTexCoords(const float (&in)[2])
|
||||
{
|
||||
return PackedTexCoords{pack32::Vec2PackTexCoordsVU(in)};
|
||||
}
|
||||
|
||||
PackedUnitVec Common::Vec3PackUnitVec(const float (&in)[3])
|
||||
{
|
||||
return PackedUnitVec{pack32::Vec3PackUnitVecScaleBased(in)};
|
||||
}
|
||||
|
||||
GfxColor Common::Vec4PackGfxColor(const float (&in)[4])
|
||||
{
|
||||
return GfxColor{pack32::Vec4PackGfxColor(in)};
|
||||
}
|
||||
|
||||
void Common::Vec2UnpackTexCoords(const PackedTexCoords& in, float (&out)[2])
|
||||
{
|
||||
pack32::Vec2UnpackTexCoordsVU(in.packed, out);
|
||||
}
|
||||
|
||||
void Common::Vec3UnpackUnitVec(const PackedUnitVec& in, float (&out)[3])
|
||||
{
|
||||
pack32::Vec3UnpackUnitVecScaleBased(in.packed, out);
|
||||
}
|
||||
|
||||
void Common::Vec4UnpackGfxColor(const GfxColor& in, float (&out)[4])
|
||||
{
|
||||
pack32::Vec4UnpackGfxColor(in.packed, out);
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
#pragma once
|
||||
|
||||
#include "T4.h"
|
||||
#include "Utils/Djb2.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
namespace T4
|
||||
{
|
||||
class Common
|
||||
{
|
||||
public:
|
||||
static constexpr uint32_t R_HashString(const char* str, const uint32_t hash)
|
||||
{
|
||||
return djb2_xor_nocase(str, hash);
|
||||
}
|
||||
|
||||
static constexpr uint32_t R_HashString(const char* string)
|
||||
{
|
||||
// Using djb2 with a 0 starting value makes a worse hash func apparently
|
||||
// but who am I to judge
|
||||
return R_HashString(string, 0u);
|
||||
}
|
||||
|
||||
static PackedTexCoords Vec2PackTexCoords(const float (&in)[2]);
|
||||
static PackedUnitVec Vec3PackUnitVec(const float (&in)[3]);
|
||||
static GfxColor Vec4PackGfxColor(const float (&in)[4]);
|
||||
static void Vec2UnpackTexCoords(const PackedTexCoords& in, float (&out)[2]);
|
||||
static void Vec3UnpackUnitVec(const PackedUnitVec& in, float (&out)[3]);
|
||||
static void Vec4UnpackGfxColor(const GfxColor& in, float (&out)[4]);
|
||||
};
|
||||
} // namespace T4
|
||||
@@ -0,0 +1,93 @@
|
||||
#include "GameT4.h"
|
||||
|
||||
#include "T4.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
using namespace T4;
|
||||
|
||||
namespace
|
||||
{
|
||||
constexpr const char* ASSET_TYPE_NAMES[]{
|
||||
"xmodelpieces",
|
||||
"physpreset",
|
||||
"physconstraints",
|
||||
"destructibledef",
|
||||
"xanim",
|
||||
"xmodel",
|
||||
"material",
|
||||
"techniqueset",
|
||||
"image",
|
||||
"sound",
|
||||
"loadedsound",
|
||||
"clipmap_unused",
|
||||
"clipmap",
|
||||
"comworld",
|
||||
"gameworldsp",
|
||||
"gameworldmp",
|
||||
"mapents",
|
||||
"gfxworld",
|
||||
"lightdef",
|
||||
"uimap",
|
||||
"font",
|
||||
"menulist",
|
||||
"menu",
|
||||
"localize",
|
||||
"weapon",
|
||||
"snddriverglobals",
|
||||
"fx",
|
||||
"impactfx",
|
||||
"aitype",
|
||||
"mptype",
|
||||
"character",
|
||||
"xmodelalias",
|
||||
"rawfile",
|
||||
"stringtable",
|
||||
"packindex",
|
||||
};
|
||||
static_assert(std::extent_v<decltype(ASSET_TYPE_NAMES)> == ASSET_TYPE_COUNT);
|
||||
|
||||
constexpr const char* SUB_ASSET_TYPE_NAMES[]{
|
||||
"technique",
|
||||
"vertexdecl",
|
||||
"vertexshader",
|
||||
"pixelshader",
|
||||
};
|
||||
static_assert(std::extent_v<decltype(SUB_ASSET_TYPE_NAMES)> == SUB_ASSET_TYPE_COUNT);
|
||||
} // namespace
|
||||
|
||||
namespace T4
|
||||
{
|
||||
Game::Game()
|
||||
: AbstractGame(ASSET_TYPE_NAMES, std::extent_v<decltype(ASSET_TYPE_NAMES)>, SUB_ASSET_TYPE_NAMES, std::extent_v<decltype(SUB_ASSET_TYPE_NAMES)>)
|
||||
{
|
||||
AddAssetTypeNameAlias<AssetTechniqueSet>("techset");
|
||||
AddAssetTypeNameAlias<AssetLoadedSound>("loaded_sound");
|
||||
AddAssetTypeNameAlias<AssetClipMap>("col_map_sp");
|
||||
AddAssetTypeNameAlias<AssetClipMapPvs>("col_map_mp");
|
||||
AddAssetTypeNameAlias<AssetComWorld>("com_map");
|
||||
AddAssetTypeNameAlias<AssetGameWorldSp>("game_map_sp");
|
||||
AddAssetTypeNameAlias<AssetGameWorldMp>("game_map_mp");
|
||||
AddAssetTypeNameAlias<AssetMapEnts>("map_ents");
|
||||
AddAssetTypeNameAlias<AssetGfxWorld>("gfx_map");
|
||||
AddAssetTypeNameAlias<AssetLightDef>("gfxlightdef");
|
||||
AddAssetTypeNameAlias<AssetMenuList>("menufile");
|
||||
}
|
||||
|
||||
GameId Game::GetId() const
|
||||
{
|
||||
return GameId::T4;
|
||||
}
|
||||
|
||||
const std::string& Game::GetFullName() const
|
||||
{
|
||||
static std::string fullName = "Call Of Duty: World at War";
|
||||
return fullName;
|
||||
}
|
||||
|
||||
const std::string& Game::GetShortName() const
|
||||
{
|
||||
static std::string shortName = "T4";
|
||||
return shortName;
|
||||
}
|
||||
} // namespace T4
|
||||
@@ -0,0 +1,16 @@
|
||||
#pragma once
|
||||
|
||||
#include "Game/IGame.h"
|
||||
|
||||
namespace T4
|
||||
{
|
||||
class Game final : public AbstractGame
|
||||
{
|
||||
public:
|
||||
Game();
|
||||
|
||||
[[nodiscard]] GameId GetId() const override;
|
||||
[[nodiscard]] const std::string& GetFullName() const override;
|
||||
[[nodiscard]] const std::string& GetShortName() const override;
|
||||
};
|
||||
} // namespace T4
|
||||
@@ -0,0 +1,150 @@
|
||||
#pragma once
|
||||
|
||||
// clang-format off: Order of includes matters here
|
||||
|
||||
#include "Game/IAsset.h"
|
||||
|
||||
#include "T4_Assets.h"
|
||||
|
||||
// clang-format on
|
||||
|
||||
namespace T4
|
||||
{
|
||||
enum XAssetType
|
||||
{
|
||||
ASSET_TYPE_XMODELPIECES,
|
||||
ASSET_TYPE_PHYSPRESET,
|
||||
ASSET_TYPE_PHYSCONSTRAINTS,
|
||||
ASSET_TYPE_DESTRUCTIBLEDEF,
|
||||
ASSET_TYPE_XANIMPARTS,
|
||||
ASSET_TYPE_XMODEL,
|
||||
ASSET_TYPE_MATERIAL,
|
||||
ASSET_TYPE_TECHNIQUE_SET,
|
||||
ASSET_TYPE_IMAGE,
|
||||
ASSET_TYPE_SOUND,
|
||||
ASSET_TYPE_LOADED_SOUND,
|
||||
ASSET_TYPE_CLIPMAP,
|
||||
ASSET_TYPE_CLIPMAP_PVS,
|
||||
ASSET_TYPE_COMWORLD,
|
||||
ASSET_TYPE_GAMEWORLD_SP,
|
||||
ASSET_TYPE_GAMEWORLD_MP,
|
||||
ASSET_TYPE_MAP_ENTS,
|
||||
ASSET_TYPE_GFXWORLD,
|
||||
ASSET_TYPE_LIGHT_DEF,
|
||||
ASSET_TYPE_UI_MAP,
|
||||
ASSET_TYPE_FONT,
|
||||
ASSET_TYPE_MENULIST,
|
||||
ASSET_TYPE_MENU,
|
||||
ASSET_TYPE_LOCALIZE_ENTRY,
|
||||
ASSET_TYPE_WEAPON,
|
||||
ASSET_TYPE_SNDDRIVER_GLOBALS,
|
||||
ASSET_TYPE_FX,
|
||||
ASSET_TYPE_IMPACT_FX,
|
||||
ASSET_TYPE_AITYPE,
|
||||
ASSET_TYPE_MPTYPE,
|
||||
ASSET_TYPE_CHARACTER,
|
||||
ASSET_TYPE_XMODELALIAS,
|
||||
ASSET_TYPE_RAWFILE,
|
||||
ASSET_TYPE_STRINGTABLE,
|
||||
ASSET_TYPE_PACK_INDEX,
|
||||
|
||||
ASSET_TYPE_COUNT,
|
||||
|
||||
ASSET_TYPE_STRING = ASSET_TYPE_COUNT,
|
||||
ASSET_TYPE_ASSETLIST
|
||||
};
|
||||
|
||||
enum SubAssetType
|
||||
{
|
||||
SUB_ASSET_TYPE_TECHNIQUE,
|
||||
SUB_ASSET_TYPE_VERTEX_DECL,
|
||||
SUB_ASSET_TYPE_VERTEX_SHADER,
|
||||
SUB_ASSET_TYPE_PIXEL_SHADER,
|
||||
|
||||
SUB_ASSET_TYPE_COUNT
|
||||
};
|
||||
|
||||
struct ScriptStringList
|
||||
{
|
||||
int count;
|
||||
const char** strings;
|
||||
};
|
||||
|
||||
struct XAsset
|
||||
{
|
||||
XAssetType type;
|
||||
XAssetHeader header;
|
||||
};
|
||||
|
||||
struct XAssetList
|
||||
{
|
||||
ScriptStringList stringList;
|
||||
int assetCount;
|
||||
XAsset* assets;
|
||||
};
|
||||
|
||||
using AssetPhysPreset = Asset<ASSET_TYPE_PHYSPRESET, PhysPreset>;
|
||||
using AssetPhysConstraints = Asset<ASSET_TYPE_PHYSCONSTRAINTS, PhysConstraints>;
|
||||
using AssetDestructibleDef = Asset<ASSET_TYPE_DESTRUCTIBLEDEF, DestructibleDef>;
|
||||
using AssetXAnim = Asset<ASSET_TYPE_XANIMPARTS, XAnimParts>;
|
||||
using AssetXModel = Asset<ASSET_TYPE_XMODEL, XModel>;
|
||||
using AssetMaterial = Asset<ASSET_TYPE_MATERIAL, Material>;
|
||||
using AssetTechniqueSet = Asset<ASSET_TYPE_TECHNIQUE_SET, MaterialTechniqueSet>;
|
||||
using AssetImage = Asset<ASSET_TYPE_IMAGE, GfxImage>;
|
||||
using AssetSound = Asset<ASSET_TYPE_SOUND, snd_alias_list_t>;
|
||||
using AssetLoadedSound = Asset<ASSET_TYPE_LOADED_SOUND, LoadedSound>;
|
||||
using AssetClipMap = Asset<ASSET_TYPE_CLIPMAP, clipMap_t>;
|
||||
using AssetClipMapPvs = Asset<ASSET_TYPE_CLIPMAP_PVS, clipMap_t>;
|
||||
using AssetComWorld = Asset<ASSET_TYPE_COMWORLD, ComWorld>;
|
||||
using AssetGameWorldSp = Asset<ASSET_TYPE_GAMEWORLD_SP, GameWorldSp>;
|
||||
using AssetGameWorldMp = Asset<ASSET_TYPE_GAMEWORLD_MP, GameWorldMp>;
|
||||
using AssetMapEnts = Asset<ASSET_TYPE_MAP_ENTS, MapEnts>;
|
||||
using AssetGfxWorld = Asset<ASSET_TYPE_GFXWORLD, GfxWorld>;
|
||||
using AssetLightDef = Asset<ASSET_TYPE_LIGHT_DEF, GfxLightDef>;
|
||||
using AssetFont = Asset<ASSET_TYPE_FONT, Font_s>;
|
||||
using AssetMenuList = Asset<ASSET_TYPE_MENULIST, MenuList>;
|
||||
using AssetMenu = Asset<ASSET_TYPE_MENU, menuDef_t>;
|
||||
using AssetLocalize = Asset<ASSET_TYPE_LOCALIZE_ENTRY, LocalizeEntry>;
|
||||
using AssetWeapon = Asset<ASSET_TYPE_WEAPON, WeaponDef>;
|
||||
using AssetSoundDriverGlobals = Asset<ASSET_TYPE_SNDDRIVER_GLOBALS, SndDriverGlobals>;
|
||||
using AssetFx = Asset<ASSET_TYPE_FX, FxEffectDef>;
|
||||
using AssetImpactFx = Asset<ASSET_TYPE_IMPACT_FX, FxImpactTable>;
|
||||
using AssetRawFile = Asset<ASSET_TYPE_RAWFILE, RawFile>;
|
||||
using AssetStringTable = Asset<ASSET_TYPE_STRINGTABLE, StringTable>;
|
||||
using AssetPackIndex = Asset<ASSET_TYPE_PACK_INDEX, PackIndex>;
|
||||
|
||||
using SubAssetTechnique = SubAsset<SUB_ASSET_TYPE_TECHNIQUE, MaterialTechnique>;
|
||||
using SubAssetVertexDecl = SubAsset<SUB_ASSET_TYPE_VERTEX_DECL, MaterialVertexDeclaration>;
|
||||
using SubAssetVertexShader = SubAsset<SUB_ASSET_TYPE_VERTEX_SHADER, MaterialVertexShader>;
|
||||
using SubAssetPixelShader = SubAsset<SUB_ASSET_TYPE_PIXEL_SHADER, MaterialPixelShader>;
|
||||
} // namespace T4
|
||||
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetPhysPreset, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetPhysConstraints, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetDestructibleDef, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetXAnim, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetXModel, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetMaterial, info.name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetTechniqueSet, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetImage, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetSound, aliasName);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetLoadedSound, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetClipMap, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetClipMapPvs, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetComWorld, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetGameWorldSp, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetGameWorldMp, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetMapEnts, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetGfxWorld, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetLightDef, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetFont, fontName);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetMenuList, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetMenu, window.name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetLocalize, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetWeapon, szInternalName);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetSoundDriverGlobals, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetFx, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetImpactFx, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetRawFile, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetStringTable, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T4::AssetPackIndex, name);
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user