Hexray decompiles for tungsten.

This commit is contained in:
Justin Marshall
2026-08-08 10:04:20 -07:00
commit 3d01d735ce
1758 changed files with 3218839 additions and 0 deletions
@@ -0,0 +1,179 @@
// ========================================================================
// ??0idAAS2DebugAreaModel@@QAA@XZ
// EA : 0x825AE5B8
// RVA : 0x005AE5B8
// PDB : w:\tech5\engine\aas2file\aas2debugareamodel.cpp
// ========================================================================
idAAS2DebugAreaModel *__fastcall idAAS2DebugAreaModel::idAAS2DebugAreaModel(idAAS2DebugAreaModel *this)
{
idResource::idResource(this);
this->__vftable = (idAAS2DebugAreaModel_vtbl *)&idAAS2DebugAreaModel::`vftable';
idAAS2DebugAreaModelData::idAAS2DebugAreaModelData(this: &this->data);
this->sourceTimestamp = -1;
return this;
}
// ========================================================================
// __unwind$219576
// EA : 0x825AE614
// RVA : 0x005AE614
// PDB : w:\tech5\engine\aas2file\aas2debugareamodel.cpp
// ========================================================================
void _unwind_219576()
{
int v0; // r12
idResource::~idResource(this: *(idResource **)(v0 - 112 + 132));
}
// ========================================================================
// ??1idAAS2DebugAreaModel@@UAA@XZ
// EA : 0x825AE658
// RVA : 0x005AE658
// PDB : w:\tech5\engine\aas2file\aas2debugareamodel.cpp
// ========================================================================
void __fastcall idAAS2DebugAreaModel::~idAAS2DebugAreaModel(idAAS2DebugAreaModel *this)
{
this->__vftable = (idAAS2DebugAreaModel_vtbl *)&idAAS2DebugAreaModel::`vftable';
idAAS2DebugAreaModelData::~idAAS2DebugAreaModelData(this: &this->data);
idResource::~idResource(this);
}
// ========================================================================
// __unwind$219598
// EA : 0x825AE6AC
// RVA : 0x005AE6AC
// PDB : w:\tech5\engine\aas2file\aas2debugareamodel.cpp
// ========================================================================
void _unwind_219598()
{
int v0; // r12
idResource::~idResource(this: *(idResource **)(v0 - 112 + 132));
}
// ========================================================================
// ?LoadResource@idAAS2DebugAreaModel@@UAAXXZ
// EA : 0x825AE750
// RVA : 0x005AE750
// PDB : w:\tech5\engine\aas2file\aas2debugareamodel.cpp
// ========================================================================
void __fastcall idAAS2DebugAreaModel::LoadResource(idAAS2DebugAreaModel *this)
{
idAAS2DebugAreaModelData *p_data; // r29
const char *str; // r6
idResource::resourceError_t v4; // r3
idStr v5; // [sp+50h] [-140h] BYREF
char v6[288]; // [sp+70h] [-120h] BYREF
p_data = &this->data;
idAAS2DebugAreaModelData::Free(this: &this->data);
str = this->name.str;
this->sourceTimestamp = -1;
fileSystem->FixLongFilename(
this: fileSystem,
a2: "generated",
a3: idAAS2DebugAreaModelData::BINARY_FILE_EXTENSION,
a4: str,
a5: v6,
a6: 256);
v5.len = 0;
v5.allocedAndFlag = 20;
v5.data = v5.baseBuffer;
v5.baseBuffer[0] = 0;
v4 = idAAS2DebugAreaModelData::LoadBinary(this: p_data, binaryFileName: v6, errorMsg: &v5);
if ( v4 != RESOURCE_ERROR_NONE )
{
if ( v4 >= RESOURCE_ERROR_FATAL )
{
idResource::SetResourceError(this, fmt: v5.data);
idLib::Error(fmt: "Resource Fatal Error: %s", v5.data);
}
idResource::SetResourceError(this, fmt: "Could not gen binary in retail '%s'", this->name.str);
}
idStr::FreeData(this: &v5);
}
// ========================================================================
// $LN36
// EA : 0x825AE82C
// RVA : 0x005AE82C
// PDB : w:\tech5\engine\aas2file\aas2debugareamodel.cpp
// ========================================================================
void _LN36()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 400 + 80));
}
// ========================================================================
// ?ReloadIfStale@idAAS2DebugAreaModel@@UAA_NXZ
// EA : 0x825AE858
// RVA : 0x005AE858
// PDB : w:\tech5\engine\aas2file\aas2debugareamodel.cpp
// ========================================================================
int __fastcall idAAS2DebugAreaModel::ReloadIfStale(idAAS2DebugAreaModel *this)
{
_BYTE v3[264]; // [sp+50h] [-120h] BYREF
if ( fileSystem->GetTimestamp(this: fileSystem, a2: this->name.str, a3: false) == this->sourceTimestamp )
return 0;
fileSystem->FixLongFilename(
this: fileSystem,
a2: "generated",
a3: idAAS2DebugAreaModelData::BINARY_FILE_EXTENSION,
a4: this->name.str,
a5: v3,
a6: 256);
fileSystem->RemoveFile(this: fileSystem, a2: v3, a3: FSPATH_BASE);
this->LoadResource(this);
return 1;
}
// ========================================================================
// ?WriteResourceFile@idAAS2DebugAreaModel@@UBAXXZ
// EA : 0x825AE920
// RVA : 0x005AE920
// PDB : w:\tech5\engine\aas2file\aas2debugareamodel.cpp
// ========================================================================
void __fastcall idAAS2DebugAreaModel::WriteResourceFile(idAAS2DebugAreaModel *this)
{
idAAS2DebugAreaModelGenerator::WriteToBinary(
uniqueIdName: this->name.str,
fileName: this->name.str,
sourceTimestamp: this->sourceTimestamp,
data: &this->data);
}
// ========================================================================
// `dynamic initializer for 'idAAS2DebugAreaModel::resourceList''
// EA : 0x83335040
// RVA : 0x01335040
// PDB : w:\tech5\engine\aas2file\aas2debugareamodel.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idAAS2DebugAreaModel::resourceList__()
{
idResourceList::idResourceList(this: &idAAS2DebugAreaModel::resourceList, typeName: "aasDebugAreaModel");
idAAS2DebugAreaModel::resourceList.__vftable = (idTypedResourceList<idAAS2DebugAreaModel>_vtbl *)&idTypedResourceList<idAAS2DebugAreaModel>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idAAS2DebugAreaModel::resourceList__);
}
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetResourceList@idAAS2DebugAreaModel@@UBAPAVidResourceList@@XZ
// EA : 0x825AE640
// RVA : 0x005AE640
// PDB : w:\tech5\engine\aas2file\aas2debugareamodel.h
// ========================================================================
idTypedResourceList<idAAS2DebugAreaModel> *__fastcall idAAS2DebugAreaModel::GetResourceList(idAAS2DebugAreaModel *this)
{
return &idAAS2DebugAreaModel::resourceList;
}
@@ -0,0 +1,436 @@
// ========================================================================
// `idAAS2DebugAreaModelData::LoadBinary'::`2'::idLocalFileBuffer::~idLocalFileBuffer
// EA : 0x825AE9E0
// RVA : 0x005AE9E0
// PDB : w:\tech5\engine\aas2file\aas2debugareamodeldata.cpp
// ========================================================================
void __fastcall _idAAS2DebugAreaModelData::LoadBinary_::_2_::idLocalFileBuffer::~idLocalFileBuffer(int a1)
{
void *v1; // r4
v1 = *(void **)(a1 + 4);
if ( v1 != nullptr )
{
idMem::Free(this: &mem, ptr: v1, align: ALIGN_16);
*(_DWORD *)(a1 + 4) = 0;
}
}
// ========================================================================
// ?Draw@idAAS2DebugAreaModelData@@QBAXPAVidRenderWorld@@ABV?$idList@H$04@@@Z
// EA : 0x825AECE8
// RVA : 0x005AECE8
// PDB : w:\tech5\engine\aas2file\aas2debugareamodeldata.cpp
// ========================================================================
void __fastcall idAAS2DebugAreaModelData::Draw(
idAAS2DebugAreaModelData *this,
idRenderWorld *rw,
const idList<int,5> *visibleAreas)
{
int num; // r10
int v7; // r19
int v8; // r21
int v9; // r28
idAAS2DebugAreaModelData::debugAreaInfo_t *v10; // r25
int v11; // r26
idAAS2DebugAreaModelData::areaTri_t *list; // r11
idAAS2DebugAreaModelData::areaTri_t *v13; // r30
idWinding v14; // [sp+50h] [-90h] BYREF
float v15[32]; // [sp+60h] [-80h] BYREF
num = visibleAreas->num;
v15[0] = 0.0;
v7 = 0;
v15[1] = 1.0;
v15[2] = 0.0;
v15[3] = 0.5;
if ( num > 0 )
{
v8 = 0;
do
{
v9 = 0;
v10 = &this->areas.list[visibleAreas->list[v8]];
if ( v10->tris.num > 0 )
{
v11 = 0;
do
{
list = v10->tris.list;
v13 = &v10->tris.list[v11];
v14.__vftable = (idWinding_vtbl *)&idWinding::`vftable';
memset(&v14.numPoints, 0, 12);
idWinding::AddPoint(this: &v14, v: &this->vertices.list[list[v11].v0]);
idWinding::AddPoint(this: &v14, v: &this->vertices.list[v13->v1]);
idWinding::AddPoint(this: &v14, v: &this->vertices.list[v13->v2]);
rw->DebugFilledPolygon(this: rw, a2: (const idVec4 *)v15, a3: &v14, a4: 0, a5: true);
v14.__vftable = (idWinding_vtbl *)&idWinding::`vftable';
idMem::Free(this: &mem, ptr: v14.p, align: ALIGN_16);
++v9;
v14.p = nullptr;
++v11;
}
while ( v9 < v10->tris.num );
}
++v7;
++v8;
}
while ( v7 < visibleAreas->num );
}
}
// ========================================================================
// __unwind$220514
// EA : 0x825AEE60
// RVA : 0x005AEE60
// PDB : w:\tech5\engine\aas2file\aas2debugareamodeldata.cpp
// ========================================================================
void _unwind_220514()
{
int v0; // r12
idWinding::~idWinding(this: (idWinding *)(v0 - 224 + 80));
}
// ========================================================================
// ?BuildResourceNameFromAASName@idAAS2DebugAreaModelData@@SAXPBDAAVidStr@@@Z
// EA : 0x825AEE88
// RVA : 0x005AEE88
// PDB : w:\tech5\engine\aas2file\aas2debugareamodeldata.cpp
// ========================================================================
void __fastcall idAAS2DebugAreaModelData::BuildResourceNameFromAASName(const char *aasName, idStr *resourceName)
{
idStr::operator=(this: resourceName, text: aasName);
idStr::Append(this: resourceName, text: (char *)idAAS2DebugAreaModelData::TEXT_FILE_EXTENSION);
}
// ========================================================================
// ?Free@idAAS2DebugAreaModelData@@QAAXXZ
// EA : 0x825AF098
// RVA : 0x005AF098
// PDB : w:\tech5\engine\aas2file\aas2debugareamodeldata.cpp
// ========================================================================
void __fastcall idAAS2DebugAreaModelData::Free(idAAS2DebugAreaModelData *this)
{
char *list; // r3
idList<idThread *,58>::Clear((idList<idVehicleState *,5> *)this);
if ( this->areas.listStatic == 0 || this->areas.listStatic == 2 )
{
list = (char *)this->areas.list;
if ( list != nullptr )
idListArrayDelete<idList<idDeclVehicleUpgrade const *,5>>(ptr: list, num: this->areas.size);
this->areas.list = nullptr;
this->areas.size = 0;
}
this->areas.num = 0;
}
// ========================================================================
// ??0idAAS2DebugAreaModelData@@QAA@XZ
// EA : 0x825AF180
// RVA : 0x005AF180
// PDB : w:\tech5\engine\aas2file\aas2debugareamodeldata.cpp
// ========================================================================
idAAS2DebugAreaModelData *__fastcall idAAS2DebugAreaModelData::idAAS2DebugAreaModelData(idAAS2DebugAreaModelData *this)
{
this->vertices.list = nullptr;
this->vertices.granularity = 0;
this->vertices.memTag = 5;
this->vertices.listStatic = 0;
this->vertices.size = 0;
this->vertices.num = 0;
idList<idThread *,58>::Clear((idList<idVehicleState *,5> *)this);
this->areas.granularity = 0;
this->areas.memTag = 5;
this->areas.listStatic = 0;
this->areas.list = nullptr;
this->areas.size = 0;
this->areas.num = 0;
return this;
}
// ========================================================================
// __unwind$221093
// EA : 0x825AF1E4
// RVA : 0x005AF1E4
// PDB : w:\tech5\engine\aas2file\aas2debugareamodeldata.cpp
// ========================================================================
void _unwind_221093()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: *(idStaticList<idVehicleState *,4> **)(v0 - 128 + 148));
}
// ========================================================================
// ??1idAAS2DebugAreaModelData@@QAA@XZ
// EA : 0x825AF218
// RVA : 0x005AF218
// PDB : w:\tech5\engine\aas2file\aas2debugareamodeldata.cpp
// ========================================================================
void __fastcall idAAS2DebugAreaModelData::~idAAS2DebugAreaModelData(idAAS2DebugAreaModelData *this)
{
char *list; // r3
if ( this->areas.listStatic == 0 || this->areas.listStatic == 2 )
{
list = (char *)this->areas.list;
if ( list != nullptr )
idListArrayDelete<idList<idDeclVehicleUpgrade const *,5>>(ptr: list, num: this->areas.size);
this->areas.list = nullptr;
this->areas.size = 0;
}
this->areas.num = 0;
idList<idThread *,58>::Clear((idList<idVehicleState *,5> *)this);
}
// ========================================================================
// __unwind$221128
// EA : 0x825AF278
// RVA : 0x005AF278
// PDB : w:\tech5\engine\aas2file\aas2debugareamodeldata.cpp
// ========================================================================
void _unwind_221128()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: *(idStaticList<idVehicleState *,4> **)(v0 - 112 + 132));
}
// ========================================================================
// ?LoadBinary@idAAS2DebugAreaModelData@@QAA?AW4resourceError_t@idResource@@PBDAAVidStr@@@Z
// EA : 0x825AF2A8
// RVA : 0x005AF2A8
// PDB : w:\tech5\engine\aas2file\aas2debugareamodeldata.cpp
// ========================================================================
int __fastcall idAAS2DebugAreaModelData::LoadBinary(
idAAS2DebugAreaModelData *this,
const char *binaryFileName,
idStr *errorMsg)
{
unsigned __int64 v3; // r26
char **p_areas; // r24
idFile *v8; // r3
idResource::resourceError_t v10; // r3
idResource::resourceError_t v11; // r30
unsigned int v12; // r30
void *v13; // r23
int v14; // r22
int v15; // r25
idList<idAAS2DebugAreaModelData::areaTri_t,5> *v16; // r27
int v17; // r29
int v18; // r28
idAAS2DebugAreaModelData::areaTri_t *v19; // r30
idFileLocal v20; // [sp+50h] [-420h] BYREF
int v21; // [sp+54h] [-41Ch] BYREF
int v22; // [sp+58h] [-418h] BYREF
int v23[5]; // [sp+5Ch] [-414h] BYREF
idResource::resourceHeader_t v24; // [sp+70h] [-400h] BYREF
idFile_Memory v25; // [sp+B0h] [-3C0h] BYREF
char v26[256]; // [sp+200h] [-270h] BYREF
char v27; // [sp+300h] [-170h] BYREF
p_areas = (char **)&this->areas;
idList<idThread *,58>::Clear((idList<idVehicleState *,5> *)this);
LODWORD(v3) = 0;
if ( this->areas.listStatic == 0 || this->areas.listStatic == 2 )
{
if ( *p_areas != nullptr )
idListArrayDelete<idList<idDeclVehicleUpgrade const *,5>>(ptr: *p_areas, num: this->areas.size);
*p_areas = nullptr;
this->areas.size = 0;
}
this->areas.num = 0;
v8 = fileSystem->OpenFileRead(this: fileSystem, a2: binaryFileName, a3: 1, a4: 0);
v20.file = v8;
if ( v8 == nullptr )
{
idStr::operator=(this: errorMsg, text: idResource::resourceErrorMessage[1]);
idFileLocal::~idFileLocal(this: &v20);
return 1;
}
v24.versionHi = 0;
v24.versionLo = 0;
v24.sourceFileNameLen = 0;
v24.uniqueIdNameLen = 0;
v24.resourceId = 0xFFFF;
v24.headerVersionHi = 1;
v24.headerVersionLo = 1;
v24.platform = 4;
v24.sourceTimestamp = 0xFFFFFF;
v24.pad[0] = 0;
v24.pad[1] = 0;
v24.pad[2] = 0;
v24.hash = v3;
v24.dataOffset = v3;
v24.totalSize = v3;
v10 = idResource::ReadBinaryHeader(
file: v8,
expectedResourceId: 0x41415344u,
expectedVersionHi: 1u,
expectedVersionLo: 0,
header: &v24,
sourceFileName: &v27,
uniqueIdName: v26);
v11 = v10;
if ( v10 != RESOURCE_ERROR_NONE )
{
idStr::operator=(this: errorMsg, text: idResource::resourceErrorMessage[v10]);
idFileLocal::~idFileLocal(this: &v20);
return v11;
}
v12 = LODWORD(v24.totalSize) - LODWORD(v24.dataOffset);
v23[1] = LODWORD(v24.totalSize) - LODWORD(v24.dataOffset);
v13 = idMem::AllocWithLocation(
this: &mem,
location: "w:\\tech5\\engine\\aas2file\\AAS2DebugAreaModelData.cpp(106) : TAG_AAS",
size: LODWORD(v24.totalSize) - LODWORD(v24.dataOffset),
tag: TAG_AAS,
zeroBuffer: false,
align: ALIGN_16,
heap: HEAP_DEFAULTHEAP);
v23[2] = (int)v13;
if ( v20.file->Read(this: v20.file, a2: v13, a3: v12) != v12 )
{
idStr::operator=(this: errorMsg, text: idResource::resourceErrorMessage[7]);
if ( v13 != nullptr )
idMem::Free(this: &mem, ptr: v13, align: ALIGN_16);
idFileLocal::~idFileLocal(this: &v20);
return 7;
}
idFile_Memory::idFile_Memory(this: &v25);
idFile_Memory::SetReadOnlyData(this: &v25, data: (const char *)v13, length: v12);
v25.Read(this: &v25, a2: v23, a3: 4u);
if ( v23[0] <= 0 )
{
idStr::operator=(this: errorMsg, text: "Bad number of vertices");
idFile_Memory::~idFile_Memory(this: &v25);
if ( v13 != nullptr )
idMem::Free(this: &mem, ptr: v13, align: ALIGN_16);
LABEL_34:
idFileLocal::~idFileLocal(this: &v20);
return 6;
}
idList<idVec3,37>::SetNum(this: &this->vertices, newNum: v23[0]);
v25.Read(this: &v25, a2: this->vertices.list, a3: 12 * v23[0]);
v25.Read(this: &v25, a2: &v22, a3: 4u);
if ( v22 <= 0 )
{
idStr::operator=(this: errorMsg, text: "Bad number of areas");
idFile_Memory::~idFile_Memory(this: &v25);
if ( v13 != nullptr )
idMem::Free(this: &mem, ptr: v13, align: ALIGN_16);
goto LABEL_34;
}
idList<idAAS2DebugAreaModelData::debugAreaInfo_t,5>::SetNum(this: &this->areas, newNum: v22);
v14 = 0;
if ( v22 > 0 )
{
v15 = 0;
while ( 1 )
{
v25.Read(this: &v25, a2: &v21, a3: 4u);
if ( v21 < 0 )
break;
v16 = (idList<idAAS2DebugAreaModelData::areaTri_t,5> *)&(*p_areas)[v15];
idList<idAnimWebBlendEquation::existingNode_t,5>::SetNum(this: v16, newNum: v21);
v17 = 0;
if ( v21 > 0 )
{
v18 = 0;
do
{
v19 = &v16->list[v18];
v25.Read(this: &v25, a2: v19, a3: 4u);
v25.Read(this: &v25, a2: &v19->v1, a3: 4u);
v25.Read(this: &v25, a2: &v19->v2, a3: 4u);
++v17;
++v18;
}
while ( v17 < v21 );
}
++v14;
v15 += 16;
if ( v14 >= v22 )
goto LABEL_29;
}
idStr::operator=(this: errorMsg, text: "Bad number of area tris");
idFile_Memory::~idFile_Memory(this: &v25);
if ( v13 != nullptr )
idMem::Free(this: &mem, ptr: v13, align: ALIGN_16);
goto LABEL_34;
}
LABEL_29:
idFile_Memory::~idFile_Memory(this: &v25);
if ( v13 != nullptr )
idMem::Free(this: &mem, ptr: v13, align: ALIGN_16);
idFileLocal::~idFileLocal(this: &v20);
return 0;
}
// ========================================================================
// __unwind$221172
// EA : 0x825AF72C
// RVA : 0x005AF72C
// PDB : w:\tech5\engine\aas2file\aas2debugareamodeldata.cpp
// ========================================================================
void _unwind_221172()
{
int v0; // r12
idFileLocal::~idFileLocal(this: (idFileLocal *)(v0 - 1136 + 80));
}
// ========================================================================
// __unwind$221173
// EA : 0x825AF754
// RVA : 0x005AF754
// PDB : w:\tech5\engine\aas2file\aas2debugareamodeldata.cpp
// ========================================================================
void _unwind_221173()
{
int v0; // r12
_idAAS2DebugAreaModelData::LoadBinary_::_2_::idLocalFileBuffer::~idLocalFileBuffer(a1: v0 - 1136 + 96);
}
// ========================================================================
// __unwind$221174
// EA : 0x825AF77C
// RVA : 0x005AF77C
// PDB : w:\tech5\engine\aas2file\aas2debugareamodeldata.cpp
// ========================================================================
void _unwind_221174()
{
int v0; // r12
idFile_Memory::~idFile_Memory(this: (idFile_Memory *)(v0 - 1136 + 176));
}
@@ -0,0 +1,117 @@
// ========================================================================
// ?WriteToBinary@idAAS2DebugAreaModelGenerator@@SA_NPBD0IABVidAAS2DebugAreaModelData@@@Z
// EA : 0x825AF860
// RVA : 0x005AF860
// PDB : w:\tech5\engine\aas2file\aas2debugareamodelgenerator.cpp
// ========================================================================
int __fastcall idAAS2DebugAreaModelGenerator::WriteToBinary(
const char *uniqueIdName,
const char *fileName,
unsigned int sourceTimestamp,
const idAAS2DebugAreaModelData *data)
{
unsigned __int64 v4; // r27
int v9; // r23
int v10; // r24
unsigned int (__fastcall *Write)(struct idFile_Memory *, const void *, unsigned int); // ctr
int v12; // r29
int v13; // r28
int v14; // r30
char *filePtr; // r30
unsigned int v16; // r3
int v18; // [sp+50h] [-210h] BYREF
int v19; // [sp+54h] [-20Ch] BYREF
int num; // [sp+58h] [-208h] BYREF
idResource::resourceHeader_t v21; // [sp+60h] [-200h] BYREF
idFile_Memory v22; // [sp+A0h] [-1C0h] BYREF
idFile_Memory::idFile_Memory(this: &v22);
num = data->vertices.num;
v22.Write(this: &v22, a2: &num, a3: 4u);
v22.Write(this: &v22, a2: data->vertices.list, a3: 12 * num);
v19 = data->areas.num;
v22.Write(this: &v22, a2: &v19, a3: 4u);
LODWORD(v4) = 0;
v9 = 0;
if ( v19 > 0 )
{
v10 = 0;
do
{
HIDWORD(v4) = &data->areas.list[v10];
Write = v22.Write;
v18 = *(_DWORD *)(HIDWORD(v4) + 4);
Write(this: &v22, a2: &v18, a3: 4u);
v12 = 0;
if ( v18 > 0 )
{
v13 = 0;
do
{
v14 = v13 + *(_DWORD *)HIDWORD(v4);
v22.Write(this: &v22, a2: (const void *)v14, a3: 4u);
v22.Write(this: &v22, a2: (const void *)(v14 + 4), a3: 4u);
v22.Write(this: &v22, a2: (const void *)(v14 + 8), a3: 4u);
++v12;
v13 += 12;
}
while ( v12 < v18 );
}
++v9;
++v10;
}
while ( v9 < v19 );
}
v21.sourceTimestamp = sourceTimestamp;
v21.sourceFileNameLen = 0;
v21.uniqueIdNameLen = 0;
filePtr = v22.filePtr;
v21.headerVersionHi = 1;
v21.headerVersionLo = 1;
v21.resourceId = 1094800196;
v21.versionHi = idAAS2DebugAreaModelData::BINARY_VERSION_HI;
v21.versionLo = idAAS2DebugAreaModelData::BINARY_VERSION_LO;
v21.platform = 4;
v21.pad[0] = 0;
v21.pad[1] = 0;
v21.pad[2] = 0;
v21.uniqueId = v4;
v21.hash = v4;
v21.dataOffset = 0x100000004LL;
v21.totalSize = v4;
v16 = (unsigned __int64)idFile_Memory::Length(this: &v22) >> 32;
if ( idResource::WriteBinary(
uniqueIdName,
sourceFileName: fileName,
fileExtension: idAAS2DebugAreaModelData::BINARY_FILE_EXTENSION,
header: &v21,
data: filePtr,
dataLen: v16) )
{
idFile_Memory::~idFile_Memory(this: &v22);
return 1;
}
else
{
idFile_Memory::~idFile_Memory(this: &v22);
return 0;
}
}
// ========================================================================
// __unwind$224652
// EA : 0x825AFA94
// RVA : 0x005AFA94
// PDB : w:\tech5\engine\aas2file\aas2debugareamodelgenerator.cpp
// ========================================================================
void _unwind_224652()
{
int v0; // r12
idFile_Memory::~idFile_Memory(this: (idFile_Memory *)(v0 - 608 + 160));
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,87 @@
// ========================================================================
// ?GetResourceList@idAAS2File@@UBAPAVidResourceList@@XZ
// EA : 0x825B3640
// RVA : 0x005B3640
// PDB : w:\tech5\engine\aas2file\aas2file.h
// ========================================================================
idTypedResourceList<idAAS2File> *__fastcall idAAS2File::GetResourceList(idAAS2File *this)
{
return &idAAS2File::resourceList;
}
// ========================================================================
// ?FloodAddVisitedArea@idAAS2File@@ABAXH@Z
// EA : 0x825BCD80
// RVA : 0x005BCD80
// PDB : w:\tech5\engine\aas2file\aas2file.h
// ========================================================================
void __fastcall idAAS2File::FloodAddVisitedArea(
idAAS2File *this,
int areaNum,
int a3,
int a4,
int a5,
int a6,
int a7,
int a8,
int a9,
int a10,
int a11,
int a12,
int a13,
int a14)
{
a14 = areaNum;
idList<idAnimWebBlendTree *,5>::Append(
this: (idList<enum encounterGroupRole_t,5> *)&this->visitedAreas,
obj: (const encounterGroupRole_t *)&a14);
this->areas.list[areaNum].flags |= 0x8000u;
}
// ========================================================================
// ?FloodClearVisitedAreas@idAAS2File@@ABAXH@Z
// EA : 0x825BCDE8
// RVA : 0x005BCDE8
// PDB : w:\tech5\engine\aas2file\aas2file.h
// ========================================================================
void __fastcall idAAS2File::FloodClearVisitedAreas(idAAS2File *this, int offset)
{
int v3; // r9
int v4; // r10
int v5; // r11
unsigned __int16 *p_flags; // r8
idList<int,37> *p_visitedAreas; // r31
int size; // r11
v3 = offset;
if ( offset < this->visitedAreas.num )
{
v4 = offset;
do
{
++v3;
v5 = this->visitedAreas.list[v4++];
p_flags = &this->areas.list[v5].flags;
*p_flags &= ~0x8000u;
}
while ( v3 < this->visitedAreas.num );
}
p_visitedAreas = &this->visitedAreas;
if ( offset <= this->visitedAreas.size
|| idList<idNavSpline *,5>::Resize(
this: (idList<idSpawnArea::GeneratedPosition *,5> *)&this->visitedAreas,
newsize: offset) )
{
size = p_visitedAreas->size;
if ( offset < size )
size = offset;
p_visitedAreas->num = size;
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,994 @@
// ========================================================================
// ?CreateState@idCollisionGridLocal@@UBAXAAVidCollisionGridState@@@Z
// EA : 0x825BDAA8
// RVA : 0x005BDAA8
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
void __fastcall idCollisionGridLocal::CreateState(idCollisionGridLocal *this, idCollisionGridState *state)
{
int v4; // r31
int v5; // r29
idCollisionGridState::Create(this: state, num: this->grid.indices.num, material_: nullptr);
v4 = 0;
if ( this->grid.indices.num > 0 )
{
v5 = 0;
do
{
if ( this->grid.indices.list[v5] == idGenGridModel::INVALID_INDEX )
idCollisionGridState::Inactivate(this: state, id: v4);
else
idCollisionGridState::Activate(this: state, id: v4);
++v4;
++v5;
}
while ( v4 < this->grid.indices.num );
}
}
// ========================================================================
// ?IsValid@idCollisionGridLocal@@UBA_NXZ
// EA : 0x825BDB28
// RVA : 0x005BDB28
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
unsigned int __fastcall idCollisionGridLocal::IsValid(idCollisionGridLocal *this)
{
return (-this->grid.parts.num & (unsigned int)~this->grid.parts.num) >> 31;
}
// ========================================================================
// ?GetBinaryFileName@idCollisionGridLocal@@QBA?AVidStr@@PBD@Z
// EA : 0x825BDC40
// RVA : 0x005BDC40
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
idCollisionGridLocal *__fastcall idCollisionGridLocal::GetBinaryFileName(
idCollisionGridLocal *this,
idStr *result,
const char *modelName)
{
char v6[288]; // [sp+60h] [-120h] BYREF
this->name.str = (const char *)20;
this->trackedMemory = (int)&this->nextOnHashChain;
this->__vftable = nullptr;
HIBYTE(this->nextOnHashChain) = 0;
if ( idStr::Icmpn(s1: modelName, s2: "maps/", n: 5) != 0 )
{
fileSystem->FixLongFilename(this: fileSystem, a2: "generated", a3: "bcg", a4: modelName, a5: v6, a6: 256);
idStr::operator=((idStr *)this, text: v6);
}
else
{
idStr::operator=((idStr *)this, text: modelName);
idStr::SetFileExtension((idStr *)this, extension: "bcg");
}
return this;
}
// ========================================================================
// __unwind$227548
// EA : 0x825BDD0C
// RVA : 0x005BDD0C
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
void _unwind_227548()
{
int v0; // r12
int v1; // r31
v1 = v0 - 384;
if ( (*(_DWORD *)(v0 - 384 + 80) & 1) != 0 )
{
*(_DWORD *)(v1 + 80) &= ~1u;
idStrStatic<260>::~idStrStatic<260>(this: *(idStr **)(v1 + 404));
}
}
// ========================================================================
// ?ReloadIfStale@idCollisionGridLocal@@UAA_NXZ
// EA : 0x825BDD58
// RVA : 0x005BDD58
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
int __fastcall idCollisionGridLocal::ReloadIfStale(idCollisionGridLocal *this)
{
idStr v3[2]; // [sp+50h] [-40h] BYREF
idCollisionGridLocal::GetBinaryFileName(
this: (idCollisionGridLocal *)v3,
result: (idStr *)this,
modelName: this->name.str);
if ( fileSystem->GetTimestamp(this: fileSystem, a2: v3[0].data, a3: false) == this->binaryTimeStamp )
{
if ( idStr::Icmpn(s1: v3[0].data, s2: "maps/", n: 5) == 0
|| fileSystem->GetTimestamp(this: fileSystem, a2: this->name.str, a3: false) == this->sourceTimeStamp )
{
idStr::FreeData(this: v3);
return 0;
}
fileSystem->RemoveFile(this: fileSystem, a2: v3[0].data, a3: FSPATH_BASE);
}
this->LoadResource(this);
idStr::FreeData(this: v3);
return 1;
}
// ========================================================================
// __unwind$227593
// EA : 0x825BDE50
// RVA : 0x005BDE50
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
void _unwind_227593()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 144 + 80));
}
// ========================================================================
// ?FreeData@idCollisionGridLocal@@QAAXXZ
// EA : 0x825BDE78
// RVA : 0x005BDE78
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
void __fastcall idCollisionGridLocal::FreeData(idCollisionGridLocal *this)
{
idList<idVehicleState *,5> *p_grid; // r31
p_grid = (idList<idVehicleState *,5> *)&this->grid;
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->grid.vertices);
idList<idThread *,58>::Clear(this: p_grid + 2);
idList<idThread *,58>::Clear(this: p_grid + 3);
idList<idThread *,58>::Clear(this: p_grid + 4);
idList<idThread *,58>::Clear(this: p_grid + 5);
idList<idThread *,58>::Clear(this: p_grid);
this->binaryTimeStamp = -1;
this->sourceTimeStamp = -1;
}
// ========================================================================
// ??1idCollisionGridLocal@@UAA@XZ
// EA : 0x825BE498
// RVA : 0x005BE498
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
void __fastcall idCollisionGridLocal::~idCollisionGridLocal(idCollisionGridLocal *this)
{
this->__vftable = (idCollisionGridLocal_vtbl *)&idCollisionGridLocal::`vftable';
idCollisionGridLocal::FreeData(this);
idSoundBSPFile::~idSoundBSPFile(this: &this->grid);
this->__vftable = (idCollisionGridLocal_vtbl *)&idCollisionGrid::`vftable';
idResource::~idResource(this);
}
// ========================================================================
// __unwind$228114
// EA : 0x825BE4FC
// RVA : 0x005BE4FC
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
void _unwind_228114()
{
int v0; // r12
idCollisionGrid::~idCollisionGrid(this: *(idCollisionGrid **)(v0 - 112 + 132));
}
// ========================================================================
// __unwind$228115
// EA : 0x825BE524
// RVA : 0x005BE524
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
void _unwind_228115()
{
int v0; // r12
idSoundBSPFile::~idSoundBSPFile(this: (idGenGridModel *)(*(_DWORD *)(v0 - 112 + 132) + 36));
}
// ========================================================================
// ??0idCollisionGridLocal@@QAA@XZ
// EA : 0x825BED80
// RVA : 0x005BED80
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
idCollisionGridLocal *__fastcall idCollisionGridLocal::idCollisionGridLocal(idCollisionGridLocal *this)
{
idResource::idResource(this);
this->__vftable = (idCollisionGridLocal_vtbl *)&idCollisionGridLocal::`vftable';
idGenGridModel::idGenGridModel(this: &this->grid);
this->binaryTimeStamp = -1;
this->sourceTimeStamp = -1;
return this;
}
// ========================================================================
// __unwind$228767
// EA : 0x825BEDE0
// RVA : 0x005BEDE0
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
void _unwind_228767()
{
int v0; // r12
idCollisionGrid::~idCollisionGrid(this: *(idCollisionGrid **)(v0 - 112 + 132));
}
// ========================================================================
// ?RasterizePolygon@idGridRasterize@@SAXABVidGenGridModel@@AAVidCollisionGridState@@PBVidVec2i@@H@Z
// EA : 0x825BF310
// RVA : 0x005BF310
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
void __fastcall idGridRasterize::RasterizePolygon(__int64 state, const idVec2i *pos, int num, long double a4)
{
int v4; // r16
int v5; // r21
double v8; // fp29
int v9; // r15
double v10; // fp24
_DWORD *v11; // r18
int v12; // r11
const idVec2i *v13; // r20
int v14; // r9
int y; // r8
int v16; // r4
unsigned __int64 v17; // kr00_8
unsigned __int64 v18; // kr08_8
int v19; // r8
int v20; // r25
int v21; // r9
__int64 v22; // r6
int v23; // r23
__int64 v24; // r7
int v25; // r29
int v26; // r26
int v27; // r30
int v28; // r30
int v29; // r11
double v30; // fp23
__int64 v31; // r9
double v32; // fp31
double v33; // fp25
long double v34; // fp2
__int64 v35; // r5
double v36; // fp28
double v37; // fp30
double v38; // fp27
long double v39; // fp2
double v40; // fp26
gridRasterizeEdge_t *v41; // r3
gridRasterizeEdge_t *v42; // r10
double v43; // fp0
char v44; // r11
double v45; // fp0
double v46; // fp0
gridRasterizeEdge_t *i; // r11
int v48; // r25
gridRasterizeEdge_t *v49; // r26
gridRasterizeEdge_t *v50; // r21
gridRasterizeEdge_t *v51; // r10
gridRasterizeEdge_t *next; // r7
gridRasterizeEdge_t *prev; // r11
gridRasterizeEdge_t *v54; // r11
gridRasterizeEdge_t *j; // r9
gridRasterizeEdge_t *k; // r28
unsigned int x; // r11
unsigned __int16 v58; // r9
int v59; // r30
int v60; // r29
float *v61; // r30
float *v62; // r27
char v63; // r28
int v64; // r29
int v65; // r10
char v66; // r11
int v67; // r11
_DWORD *v68; // r11
_DWORD *v69; // r11
int v70; // r9
int v71; // r11
int v72; // r7
float **v73; // r11
gridRasterizeEdge_t *v74; // [sp+50h] [-2550h]
signed int v75; // [sp+60h] [-2540h]
unsigned __int64 v76; // [sp+68h] [-2538h]
int v77; // [sp+70h] [-2530h]
signed int v78; // [sp+74h] [-252Ch]
idList<gridRasterizeEdge_t,5> v79; // [sp+A0h] [-2500h] BYREF
int v80; // [sp+B0h] [-24F0h] BYREF
idCollisionGridState *v81; // [sp+25BCh] [+1Ch]
v81 = (idCollisionGridState *)state;
v4 = 0;
v79.granularity = 1;
v79.num = 0;
v79.size = 256;
v5 = HIDWORD(state);
*(_WORD *)&v79.memTag = 1281;
v79.list = (gridRasterizeEdge_t *)&v80;
LODWORD(state) = *(_DWORD *)(HIDWORD(state) + 128);
v74 = nullptr;
v8 = (float)state;
v78 = state;
v9 = 0x7FFFFFFF;
v77 = *(_DWORD *)(HIDWORD(state) + 112);
v75 = 0x80000000;
v10 = (float)((float)1.0 / (float)state);
if ( num > 0 )
{
v11 = (_DWORD *)(HIDWORD(state) + 120);
v12 = num - 1;
v13 = pos;
do
{
v14 = v11[1];
y = v13->y;
v16 = pos[v12].y;
LODWORD(v76) = y - v14;
v17 = __PAIR64__(v13->x - *v11, y - v14);
v18 = __PAIR64__(pos[v12].x - *v11, v16 - v14);
if ( v16 - v14 > y - v14 )
{
v17 = __PAIR64__(v76, v16 - v14);
HIDWORD(v76) = v13->x - *v11;
v18 = v76;
}
v19 = *(_DWORD *)(v5 + 112) - 1;
__twllei(v78, 0);
__twlgei(v78 & ~(__ROL4__(HIDWORD(v18), 1) - 1), 0xFFFFFFFF);
v20 = SHIDWORD(v18) / v78;
if ( SHIDWORD(v18) / v78 >= v19 )
v20 = v19;
v21 = *(_DWORD *)(v5 + 116);
HIDWORD(v22) = v78 & ~(__ROL4__(v18, 1) - 1);
__twllei(v78, 0);
__twlgei(HIDWORD(v22), 0xFFFFFFFF);
v23 = (int)v18 / v78;
if ( (int)v18 / v78 >= v21 - 1 )
v23 = v21 - 1;
__twllei(v78, 0);
HIDWORD(v24) = v78 & ~(__ROL4__(HIDWORD(v17), 1) - 1);
__twlgei(HIDWORD(v24), 0xFFFFFFFF);
v25 = SHIDWORD(v17) / v78;
if ( SHIDWORD(v17) / v78 >= v19 )
v25 = *(_DWORD *)(v5 + 112) - 1;
__twllei(v78, 0);
__twlgei(v78 & ~(__ROL4__(v17, 1) - 1), 0xFFFFFFFF);
v26 = (int)v17 / v78;
if ( (int)v17 / v78 >= v21 - 1 )
v26 = v21 - 1;
if ( v23 == v26 )
{
v27 = v20;
if ( v20 >= v25 )
{
v27 = v25;
if ( v20 > v25 )
v25 = v20;
}
for ( ; v27 <= v25; ++v27 )
idCollisionGridState::Inactivate(this: v81, id: v27 + v23 * v77);
}
else
{
v28 = HIDWORD(v17) - HIDWORD(v18);
v29 = v17 - v18;
if ( HIDWORD(v17) == HIDWORD(v18) )
{
v30 = 1.0e30;
}
else
{
LODWORD(v24) = abs32(v28);
v30 = (float)((float)1.0 / (float)v24);
}
LODWORD(v31) = HIDWORD(v18);
HIDWORD(v31) = v29 ^ (v29 >> 31);
LODWORD(v22) = abs32(v29);
v32 = (float)v31;
*(double *)&a4 = (float)((float)v31 * (float)v10);
v33 = (float)((float)1.0 / (float)v22);
v34 = floor(x: a4);
LODWORD(v35) = v18;
v36 = (float)v35;
v37 = (float)((float)*(double *)&v34 * (float)v8);
v38 = (float)((float)((float)*(double *)&v34 * (float)v8) + (float)v8);
*(double *)&v34 = (float)((float)v35 * (float)v10);
v39 = floor(x: v34);
v40 = (float)((float)*(double *)&v39 * (float)v8);
v41 = idList<gridRasterizeEdge_t,5>::Alloc(this: &v79);
v41->x = v20;
v41->xEnd = v25;
v41->y = v23;
v41->yEnd = v26;
if ( v28 != 0 )
{
v44 = 1;
if ( SHIDWORD(v18) >= SHIDWORD(v17) )
v44 = -1;
v41->delta.x = (float)v30 * (float)v8;
v41->xDir = v44;
if ( SHIDWORD(v18) <= SHIDWORD(v17) )
v45 = (float)((float)v38 - (float)v32);
else
v45 = (float)((float)v32 - (float)v37);
v43 = (float)((float)v45 * (float)v30);
v42 = nullptr;
}
else
{
v42 = nullptr;
v41->xDir = 0;
v41->delta.x = 1900671690;
v43 = 1.0e30;
}
v41->t.x = v43;
v41->delta.y = (float)v33 * (float)v8;
if ( (int)v18 <= (int)v17 )
v46 = (float)((float)v40 - (float)v36);
else
v46 = (float)((float)v36 - (float)v40);
v41->t.y = (float)v46 * (float)v33;
v41->next = nullptr;
v41->prev = nullptr;
if ( v23 < v9 )
v9 = v23;
if ( v26 > v75 )
v75 = v26;
for ( i = v74; i != nullptr; i = i->next )
{
if ( i->y >= (unsigned int)(unsigned __int16)v23 )
break;
v42 = i;
}
v41->next = i;
v41->prev = v42;
if ( i != nullptr )
i->prev = v41;
if ( v42 != nullptr )
v42->next = v41;
else
v74 = v41;
}
v12 = v4++;
++v13;
}
while ( v4 < num );
}
v48 = v9 * v77;
if ( v9 <= v75 )
{
v49 = nullptr;
v50 = v74;
do
{
v51 = v50;
if ( v50 != nullptr )
{
do
{
if ( v51->y > v9 )
break;
next = v51->next;
if ( v51->next != nullptr )
next->prev = v51->prev;
prev = v51->prev;
if ( prev != nullptr )
prev->next = v51->next;
else
v50 = v51->next;
v54 = v49;
for ( j = nullptr; v54 != nullptr; v54 = v54->next )
{
if ( v51->x < (int)v54->x )
break;
j = v54;
}
v51->next = v54;
v51->prev = j;
if ( v54 != nullptr )
v54->prev = v51;
if ( j != nullptr )
j->next = v51;
else
v49 = v51;
v51 = next;
}
while ( next != nullptr );
}
for ( k = v49; k != nullptr; k = k->next->next )
{
if ( k->next == nullptr )
break;
x = k->next->x;
v58 = k->x;
if ( v58 >= x )
v58 = k->next->x;
v59 = v58;
if ( k->x > (unsigned int)k->next->x )
LOWORD(x) = k->x;
v60 = (unsigned __int16)x;
if ( v58 <= (int)(unsigned __int16)x )
{
do
{
idCollisionGridState::Inactivate(this: v81, id: v59 + v48);
++v59;
}
while ( v59 <= v60 );
}
}
v61 = (float *)v49;
if ( v49 != nullptr )
{
do
{
v62 = *(float **)v61;
v63 = 0;
v64 = v48;
while ( 1 )
{
while ( 1 )
{
idCollisionGridState::Inactivate(this: v81, id: *((unsigned __int16 *)v61 + 12) + v64);
if ( v61[4] >= (double)v61[5] )
break;
v65 = *((unsigned __int16 *)v61 + 12);
if ( v65 == *((unsigned __int16 *)v61 + 14) )
{
if ( *(_DWORD *)v61 != 0 )
*(float *)(*(_DWORD *)v61 + 4) = v61[1];
v68 = *((_DWORD **)v61 + 1);
if ( v68 != nullptr )
{
*v68 = *(_DWORD *)v61;
goto LABEL_91;
}
goto LABEL_90;
}
v66 = *((_BYTE *)v61 + 32);
v61[4] = v61[2] + v61[4];
v63 = 1;
*((_WORD *)v61 + 12) = v66 + (_WORD)v65;
}
v67 = *((unsigned __int16 *)v61 + 13);
if ( v67 != v9 )
break;
v61[5] = v61[3] + v61[5];
v64 += v77;
*((_WORD *)v61 + 13) = v67 + 1;
}
if ( v67 == *((unsigned __int16 *)v61 + 15) )
{
if ( *(_DWORD *)v61 != 0 )
*(float *)(*(_DWORD *)v61 + 4) = v61[1];
v69 = *((_DWORD **)v61 + 1);
if ( v69 != nullptr )
{
*v69 = *(_DWORD *)v61;
goto LABEL_91;
}
LABEL_90:
v49 = *(gridRasterizeEdge_t **)v61;
LABEL_91:
v63 = 0;
}
if ( v63 != 0 )
{
v70 = *((unsigned __int16 *)v61 + 12) * v78;
while ( *((_DWORD *)v61 + 1) != 0 )
{
v71 = *((_DWORD *)v61 + 1);
if ( *(unsigned __int16 *)(v71 + 24) * v78 < v70 )
break;
if ( *(_DWORD *)v61 != 0 )
*(_DWORD *)(*(_DWORD *)v61 + 4) = v71;
**((float **)v61 + 1) = *v61;
v72 = *((_DWORD *)v61 + 1);
*(_DWORD *)v61 = v72;
v61[1] = *(float *)(v72 + 4);
*(_DWORD *)(v72 + 4) = v61;
v73 = *((float ***)v61 + 1);
if ( v73 != nullptr )
*v73 = v61;
else
v49 = (gridRasterizeEdge_t *)v61;
}
}
v61 = v62;
}
while ( v62 != nullptr );
}
++v9;
v48 += v77;
}
while ( v9 <= v75 );
}
if ( (v79.listStatic == 0 || v79.listStatic == 2) && v79.list != nullptr )
idMem::Free(this: &mem, ptr: v79.list, align: ALIGN_16);
}
// ========================================================================
// __unwind$229331
// EA : 0x825BFA54
// RVA : 0x005BFA54
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
void _unwind_229331()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: (idStaticList<idVehicleState *,4> *)(v0 - 9632 + 160));
}
// ========================================================================
// ?InactivateFill@idCollisionGridLocal@@UBAXPBVidVec2i@@HAAVidCollisionGridState@@@Z
// EA : 0x825BFA80
// RVA : 0x005BFA80
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
void __fastcall idCollisionGridLocal::InactivateFill(
idCollisionGridLocal *this,
const idVec2i *pos,
int num,
idCollisionGridState *state,
long double a5)
{
__int64 v8; // r4
LODWORD(v8) = state;
HIDWORD(v8) = &this->grid;
idGridRasterize::RasterizePolygon(state: v8, pos, num, a4: a5);
}
// ========================================================================
// ?LoadBinary@idGenGridModel@@QAA_NPAVidFile@@@Z
// EA : 0x825BFA98
// RVA : 0x005BFA98
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
int __fastcall idGenGridModel::LoadBinary(idGenGridModel *this, idFile *file)
{
idFile_vtbl *v5; // r11
idList<cm_gridPart_t,5> *p_parts; // r25
idList<cm_gridNodeBSP_t,5> *p_nodes; // r24
int i; // r31
idVec3 *v9; // r3
int j; // r28
int num; // r11
int size; // r10
cm_edge_t *list; // r9
int v14; // r31
int k; // r31
int v16; // r11
int v17; // r10
unsigned __int16 *v18; // r9
unsigned __int16 *v19; // r4
int m; // r29
int v21; // r11
int v22; // r10
cm_polygon_t *v23; // r9
int v24; // r31
int n; // r29
int v26; // r11
int v27; // r10
cm_gridPart_t *v28; // r10
int v29; // r31
int ii; // r31
int v31; // r11
int v32; // r10
unsigned __int16 *v33; // r9
unsigned __int16 *v34; // r4
int jj; // r29
int v36; // r11
int v37; // r10
cm_gridNodeBSP_t *v38; // r10
int v39; // r31
int v40; // [sp+50h] [-80h] BYREF
int v41; // [sp+54h] [-7Ch] BYREF
int v42; // [sp+58h] [-78h] BYREF
int v43; // [sp+5Ch] [-74h] BYREF
int v44; // [sp+60h] [-70h] BYREF
int v45; // [sp+64h] [-6Ch] BYREF
int v46; // [sp+68h] [-68h] BYREF
if ( file == nullptr )
return 0;
v5 = file->__vftable;
v40 = 0;
v41 = 0;
v42 = 0;
v43 = 0;
v44 = 0;
v45 = 0;
v46 = 0;
v5->Read(this: file, a2: &v40, a3: 4u);
file->Read(this: file, a2: &v41, a3: 4u);
file->Read(this: file, a2: &v42, a3: 4u);
file->Read(this: file, a2: &v43, a3: 4u);
file->Read(this: file, a2: &v44, a3: 4u);
file->Read(this: file, a2: &v45, a3: 4u);
file->Read(this: file, a2: &v46, a3: 4u);
if ( v40 > this->vertices.size )
idList<idVec3,59>::Resize(this: &this->vertices, newsize: v40);
if ( v41 > this->edges.size )
idList<idEffectPhysicsBroadPhase::idSPMarker,59>::Resize(this: &this->edges, newsize: v41);
if ( v42 > this->polygonEdges.size )
idList<unsigned short,30>::Resize(this: &this->polygonEdges, newsize: v42);
if ( v43 > this->polygons.size )
idList<animMapOffsets_t,5>::Resize(this: &this->polygons, newsize: v43);
p_parts = &this->parts;
if ( v44 > this->parts.size )
idList<cm_gridPart_t,5>::Resize(this: &this->parts, newsize: v44);
if ( v45 > this->indices.size )
idList<unsigned short,30>::Resize(this: &this->indices, newsize: v45);
p_nodes = &this->nodes;
if ( v46 > this->nodes.size )
idList<cm_gridNodeBSP_t,5>::Resize(this: &this->nodes, newsize: v46);
for ( i = 0; i < v40; ++i )
{
v9 = idList<idVec3,5>::Alloc(this: &this->vertices);
file->Read(this: file, a2: v9, a3: 12u);
}
for ( j = 0; j < v41; ++j )
{
idList<idEffectPhysicsBroadPhase::idSPMarker,59>::PreAllocateWithGranularity(
this: &this->edges,
newSize: this->edges.num + 1);
num = this->edges.num;
size = this->edges.size;
list = this->edges.list;
if ( num >= size )
{
v14 = (int)&list[size - 1];
}
else
{
v14 = (int)&list[num];
this->edges.num = num + 1;
}
file->Read(this: file, a2: (void *)v14, a3: 2u);
file->Read(this: file, a2: (void *)(v14 + 2), a3: 2u);
}
for ( k = 0; k < v42; ++k )
{
idList<unsigned short,5>::PreAllocateWithGranularity(this: &this->polygonEdges, newSize: this->polygonEdges.num + 1);
v16 = this->polygonEdges.num;
v17 = this->polygonEdges.size;
v18 = this->polygonEdges.list;
if ( v16 >= v17 )
{
v19 = &v18[v17 - 1];
}
else
{
v19 = &v18[v16];
this->polygonEdges.num = v16 + 1;
}
file->Read(this: file, a2: v19, a3: 2u);
}
for ( m = 0; m < v43; ++m )
{
idList<cm_polygon_t,5>::PreAllocateWithGranularity(this: &this->polygons, newSize: this->polygons.num + 1);
v21 = this->polygons.num;
v22 = this->polygons.size;
v23 = this->polygons.list;
if ( v21 >= v22 )
{
v24 = (int)&v23[v22 - 1];
}
else
{
v24 = (int)&v23[v21];
this->polygons.num = v21 + 1;
}
file->Read(this: file, a2: (void *)(v24 + 12), a3: 1u);
file->Read(this: file, a2: (void *)(v24 + 14), a3: 2u);
file->Read(this: file, a2: (void *)(v24 + 13), a3: 1u);
file->Read(this: file, a2: (void *)v24, a3: 12u);
}
for ( n = 0; n < v44; ++n )
{
idList<cm_gridPart_t,5>::PreAllocateWithGranularity(this: &this->parts, newSize: this->parts.num + 1);
v26 = this->parts.num;
v27 = this->parts.size;
if ( v26 >= v27 )
{
v29 = (int)&p_parts->list[v27 - 1];
}
else
{
v28 = p_parts->list;
this->parts.num = v26 + 1;
v29 = (int)&v28[v26];
}
file->Read(this: file, a2: (void *)v29, a3: 12u);
file->Read(this: file, a2: (void *)(v29 + 12), a3: 2u);
file->Read(this: file, a2: (void *)(v29 + 14), a3: 2u);
file->Read(this: file, a2: (void *)(v29 + 16), a3: 2u);
}
for ( ii = 0; ii < v45; ++ii )
{
idList<unsigned short,5>::PreAllocateWithGranularity(this: &this->indices, newSize: this->indices.num + 1);
v31 = this->indices.num;
v32 = this->indices.size;
v33 = this->indices.list;
if ( v31 >= v32 )
{
v34 = &v33[v32 - 1];
}
else
{
v34 = &v33[v31];
this->indices.num = v31 + 1;
}
file->Read(this: file, a2: v34, a3: 2u);
}
for ( jj = 0; jj < v46; ++jj )
{
idList<cm_gridNodeBSP_t,5>::PreAllocateWithGranularity(this: &this->nodes, newSize: this->nodes.num + 1);
v36 = this->nodes.num;
v37 = this->nodes.size;
if ( v36 >= v37 )
{
v39 = (int)&p_nodes->list[v37 - 1];
}
else
{
v38 = p_nodes->list;
this->nodes.num = v36 + 1;
v39 = (int)&v38[v36];
}
file->Read(this: file, a2: (void *)v39, a3: 24u);
file->Read(this: file, a2: (void *)(v39 + 24), a3: 4u);
file->Read(this: file, a2: (void *)(v39 + 28), a3: 2u);
file->Read(this: file, a2: (void *)(v39 + 30), a3: 2u);
file->Read(this: file, a2: (void *)(v39 + 32), a3: 1u);
}
file->Read(this: file, a2: &this->numX, a3: 4u);
file->Read(this: file, a2: &this->numY, a3: 4u);
file->Read(this: file, a2: &this->dimension, a3: 4u);
file->Read(this: file, a2: &this->offset, a3: 8u);
return 1;
}
// ========================================================================
// ?Load_Binary@idCollisionGridLocal@@QAA_NXZ
// EA : 0x825C0180
// RVA : 0x005C0180
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
int __fastcall idCollisionGridLocal::Load_Binary(idCollisionGridLocal *this)
{
idFile *v2; // r3
idFile *v3; // r30
int v5; // [sp+50h] [-50h] BYREF
idStr v6[2]; // [sp+60h] [-40h] BYREF
idCollisionGridLocal::GetBinaryFileName(
this: (idCollisionGridLocal *)v6,
result: (idStr *)this,
modelName: this->name.str);
v2 = fileSystem->OpenFileRead(this: fileSystem, a2: v6[0].data, a3: 1, a4: 0);
v3 = v2;
if ( v2 != nullptr )
{
this->binaryTimeStamp = v2->Timestamp(this: v2);
v3->Read(this: v3, a2: &v5, a3: 4u);
if ( v5 == 1111705347 )
{
v3->Read(this: v3, a2: &this->sourceTimeStamp, a3: 4u);
if ( (unsigned __int8)idGenGridModel::LoadBinary(this: &this->grid, file: v3) != 0 )
{
((void (__fastcall *)(idFile *, int))v3->dtr_idFile)(a1: v3, a2: 1);
idStr::FreeData(this: v6);
return 1;
}
else
{
((void (__fastcall *)(idFile *, int))v3->dtr_idFile)(a1: v3, a2: 1);
idStr::FreeData(this: v6);
return 0;
}
}
else
{
idLib::Warning(fmt: "%s is not a binary collision grid file", v6[0].data);
((void (__fastcall *)(idFile *, int))v3->dtr_idFile)(a1: v3, a2: 1);
idCollisionGridLocal::FreeData(this);
idStr::FreeData(this: v6);
return 0;
}
}
else
{
idStr::FreeData(this: v6);
return 0;
}
}
// ========================================================================
// __unwind$230739
// EA : 0x825C02F4
// RVA : 0x005C02F4
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
void _unwind_230739()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 160 + 96));
}
// ========================================================================
// ?LoadResource@idCollisionGridLocal@@UAAXXZ
// EA : 0x825C0320
// RVA : 0x005C0320
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
void __fastcall idCollisionGridLocal::LoadResource(idCollisionGridLocal *this)
{
idCollisionGridLocal::FreeData(this);
idCollisionGridLocal::Load_Binary(this);
}
// ========================================================================
// `dynamic initializer for 'idCollisionGridLocal::resourceList''
// EA : 0x83335138
// RVA : 0x01335138
// PDB : w:\tech5\engine\cm\collisiongrid.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idCollisionGridLocal::resourceList__()
{
idResourceList::idResourceList(this: &idCollisionGridLocal::resourceList, typeName: "cg");
idCollisionGridLocal::resourceList.__vftable = (idTypedResourceList<idCollisionGridLocal>_vtbl *)&idTypedResourceList<idCollisionGridLocal>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idCollisionGridLocal::resourceList__);
}
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetResourceList@idCollisionGridLocal@@UBAPAVidResourceList@@XZ
// EA : 0x825BE550
// RVA : 0x005BE550
// PDB : w:\tech5\engine\cm\collisiongrid.h
// ========================================================================
idTypedResourceList<idCollisionGridLocal> *__fastcall idCollisionGridLocal::GetResourceList(idCollisionGridLocal *this)
{
return &idCollisionGridLocal::resourceList;
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,14 @@
// ========================================================================
// ?GetResourceList@idCollisionModelLocal@@UBAPAVidResourceList@@XZ
// EA : 0x825C0960
// RVA : 0x005C0960
// PDB : w:\tech5\engine\cm\collisionmodel.h
// ========================================================================
idTypedResourceList<idCollisionModelLocal> *__fastcall idCollisionModelLocal::GetResourceList(
idCollisionModelLocal *this)
{
return &idCollisionModelLocal::resourceList;
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,476 @@
// ========================================================================
// ?IsAnimatedRenderModel@idCollisionModelBuilder@@SA_NPBD@Z
// EA : 0x825D2C78
// RVA : 0x005D2C78
// PDB : w:\tech5\engine\cm\collisionmodelbuilder_sphere.cpp
// ========================================================================
BOOL __fastcall idCollisionModelBuilder::IsAnimatedRenderModel(const char *fileName)
{
idStr *v1; // r3
BOOL v2; // r30
idStr v4; // [sp+50h] [-60h] BYREF
idStr v5; // [sp+70h] [-40h] BYREF
v4.len = 0;
v4.allocedAndFlag = 20;
v4.data = v4.baseBuffer;
v4.baseBuffer[0] = 0;
v1 = idStr::idStr(this: &v5, text: fileName);
idStr::ExtractFileExtension(this: v1, dest: &v4);
idStr::FreeData(this: &v5);
v2 = (_cntlzw(idStr::Icmp(s1: v4.data, s2: "md6")) & 0x20) != 0;
idStr::FreeData(this: &v4);
return v2;
}
// ========================================================================
// __unwind$223482
// EA : 0x825D2D04
// RVA : 0x005D2D04
// PDB : w:\tech5\engine\cm\collisionmodelbuilder_sphere.cpp
// ========================================================================
void _unwind_223482()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 176 + 80));
}
// ========================================================================
// __unwind$223483
// EA : 0x825D2D2C
// RVA : 0x005D2D2C
// PDB : w:\tech5\engine\cm\collisionmodelbuilder_sphere.cpp
// ========================================================================
void _unwind_223483()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 176 + 112));
}
// ========================================================================
// ?BuildForDeclMD6@idCollisionModelBuilder@@SA_NPAVidCollisionModelLocal@@PBVidDeclMD6@@@Z
// EA : 0x825D2F20
// RVA : 0x005D2F20
// PDB : w:\tech5\engine\cm\collisionmodelbuilder_sphere.cpp
// ========================================================================
int __fastcall idCollisionModelBuilder::BuildForDeclMD6(idCollisionModelLocal *model, const idDeclMD6 *md6Decl)
{
const idMD6Model *v5; // r11
const idMD6Skel *skeleton; // r30
idMD6SkelData *data; // r6
unsigned __int16 numJoints; // r11
int v9; // r12
float *v10; // r26
int v11; // r18
int i; // r19
const idJointGroup *JointGroupForIndex; // r3
const idJointGroup *v14; // r27
int v15; // r30
int v16; // r22
int v17; // r24
int v18; // r25
__int16 value; // r8
idVec3 *v20; // r11
float x; // r7
float y; // r6
float *v23; // r11
double v24; // fp0
double v25; // fp13
double v26; // fp12
float *v27; // r11
double v28; // fp0
double v29; // fp10
double v30; // fp9
double v31; // fp8
size_t num; // r27
unsigned __int8 *list; // r22
float *v34; // r20
float *v35; // r19
__int16 v36; // r16
float *v37; // r18
float *v38; // r21
unsigned __int8 *v39; // r17
int v40; // r30
double v41; // fp0
double v42; // fp12
double v43; // fp11
unsigned __int8 v44; // r11
unsigned int v45; // r3
size_t v46; // r26
size_t v47; // r25
size_t v48; // r24
size_t v49; // r16
size_t v50; // r23
double v51; // fp0
double v52; // fp13
double v53; // fp12
double v54; // fp11
double v55; // fp10
double v56; // fp9
void *v57; // r30
unsigned int v58; // r3
idMem *v59; // r30
_DWORD back_chain[20]; // [sp+0h] [-1E0h]
unsigned __int8 surfType; // [sp+50h] [-190h] BYREF
unsigned __int8 v62; // [sp+51h] [-18Fh] BYREF
unsigned __int16 v63; // [sp+52h] [-18Eh]
float v64; // [sp+54h] [-18Ch] BYREF
float v65; // [sp+58h] [-188h] BYREF
float v66; // [sp+5Ch] [-184h] BYREF
float v67; // [sp+60h] [-180h] BYREF
idMem *v68; // [sp+64h] [-17Ch]
idVec3 *v69; // [sp+68h] [-178h]
idList<float,13> v70; // [sp+70h] [-170h] BYREF
idList<float,13> v71; // [sp+80h] [-160h] BYREF
idList<float,13> v72; // [sp+90h] [-150h] BYREF
idList<float,13> v73; // [sp+A0h] [-140h] BYREF
idList<unsigned char,37> v74; // [sp+B0h] [-130h] BYREF
idList<unsigned char,37> v75; // [sp+C0h] [-120h] BYREF
float v76; // [sp+D0h] [-110h]
float v77; // [sp+D4h] [-10Ch]
float z; // [sp+D8h] [-108h]
unsigned int v79[13]; // [sp+E0h] [-100h] BYREF
cm_sphereModelPtrs_t v80; // [sp+120h] [-C0h] BYREF
if ( md6Decl == nullptr )
return 0;
v5 = md6Decl->model;
if ( v5 == nullptr )
return 0;
skeleton = v5->skeleton;
if ( ((skeleton->data->numJoints + 7) & 0xFFF8) == 0 )
return 0;
*((_BYTE *)&model->idResource + 32) &= ~0x80u;
idResource::SetName(this: model, _name: md6Decl->name.str);
model->modelType = CM_SPHEREMODEL;
model->bounds.b[0].z = 1.0e30;
model->bounds.b[0].y = 1.0e30;
model->bounds.b[0].x = 1.0e30;
model->bounds.b[1].z = -1.0e30;
model->bounds.b[1].y = -1.0e30;
model->bounds.b[1].x = -1.0e30;
model->contents = 0;
model->sourceFileTime = -1;
model->isWorldModel = false;
model->isTraceModel = false;
model->isConvex = false;
model->isStreamed = false;
model->sphereModel = nullptr;
((void (*)(void))RtlCheckStack12)();
data = skeleton->data;
v68 = &mem;
numJoints = data->numJoints;
*(_DWORD *)((char *)back_chain + v9) = back_chain[0];
v10 = (float *)idMem::AllocWithLocation(
this: &mem,
location: "w:\\tech5\\engine\\cm\\CollisionModelBuilder_sphere.cpp(89) : TAG_MD6_COLLISION",
size: 48 * ((numJoints + 7) & 0xFFF8),
tag: TAG_MD6_COLLISION,
zeroBuffer: false,
align: ALIGN_16,
heap: HEAP_DEFAULTHEAP);
idMD6Blend::DecodeBasePose(
skeleton: skeleton->data,
temp: &surfType,
tempSize: 0x4000u,
originOffset: md6Decl->config->visualOffset,
offsetAdd: true,
outPose: v10);
idList<idRecycledTraceModel *,13>::idList<idRecycledTraceModel *,13>(this: (idList<float,13> *)&v74);
idList<idRecycledTraceModel *,13>::idList<idRecycledTraceModel *,13>(this: &v72);
idList<idRecycledTraceModel *,13>::idList<idRecycledTraceModel *,13>(this: &v71);
idList<idRecycledTraceModel *,13>::idList<idRecycledTraceModel *,13>(this: &v70);
idList<idRecycledTraceModel *,13>::idList<idRecycledTraceModel *,13>(this: &v73);
idList<idRecycledTraceModel *,13>::idList<idRecycledTraceModel *,13>(this: (idList<float,13> *)&v75);
v63 = 0;
v11 = idJointGroupCollection::NumJointGroupsForType(this: &md6Decl->jointGroupCollection, type: JOINTGROUP_HITTEST);
for ( i = 0; i < v11; ++i )
{
JointGroupForIndex = idJointGroupCollection::GetJointGroupForIndex(
this: &md6Decl->jointGroupCollection,
type: JOINTGROUP_HITTEST,
index: i);
v14 = JointGroupForIndex;
if ( JointGroupForIndex != nullptr )
{
v15 = 0;
if ( JointGroupForIndex->joints.num > 0 )
{
v16 = 0;
v17 = 0;
v18 = 0;
do
{
value = v14->joints.list[v18].value;
if ( v15 < 0 || v15 >= v14->jointOffsets.num )
v20 = &vec3_origin;
else
v20 = &v14->jointOffsets.list[v17];
x = v20->x;
y = v20->y;
z = v20->z;
LODWORD(v64) = value;
v76 = x;
v77 = y;
v23 = &v10[12 * value];
v24 = (float)((float)(z * v23[2]) + (float)((float)(x * *v23) + (float)(y * v23[1])));
v25 = (float)((float)(z * v23[6]) + (float)((float)(x * v23[4]) + (float)(y * v23[5])));
v26 = (float)((float)(x * v23[8]) + (float)((float)(y * v23[9]) + (float)(z * v23[10])));
if ( v15 < 0 || v15 >= v14->jointScalars.num )
v64 = 1.0;
else
v64 = v14->jointScalars.list[v16];
v69 = (idVec3 *)value;
v27 = &v10[12 * value];
v29 = (float)((float)(v27[5] * (float)v25) + (float)(v27[1] * (float)v24));
v30 = (float)((float)(v27[4] * (float)v25) + (float)(*v27 * (float)v24));
v31 = (float)((float)((float)v26 * v27[10])
+ (float)((float)(v27[6] * (float)v25) + (float)(v27[2] * (float)v24)));
v28 = v27[8];
v66 = (float)((float)v26 * v27[9]) + (float)v29;
v67 = v31;
v65 = (float)((float)v26 * (float)v28) + (float)v30;
if ( (unsigned __int16)(value + 1) > (unsigned int)v63 )
v63 = value + 1;
surfType = value;
idList<unsigned char,25>::Append(this: &v74, obj: &surfType);
idList<float,13>::Append(this: &v72, obj: &v65);
idList<float,13>::Append(this: &v71, obj: &v66);
idList<float,13>::Append(this: &v70, obj: &v67);
idList<float,13>::Append(this: &v73, obj: &v64);
surfType = v14->args.surfType;
idList<unsigned char,25>::Append(this: &v75, obj: &surfType);
++v15;
++v18;
++v17;
++v16;
}
while ( v15 < v14->joints.num );
}
}
}
num = v74.num;
list = v75.list;
v34 = v70.list;
v35 = v71.list;
v36 = v74.num;
v37 = v72.list;
v38 = v73.list;
v39 = v74.list;
if ( (v74.num & 3) != 0 )
{
v40 = v74.num;
v62 = v75.list[v75.num - 1];
v41 = v70.list[v70.num - 1];
v42 = v72.list[v72.num - 1];
v43 = v73.list[v73.num - 1];
v44 = v74.list[v74.num - 1];
v66 = v71.list[v71.num - 1];
v65 = v42;
v64 = v43;
v67 = v41;
if ( v74.num < (int)((v74.num + 3) & 0xFFFFFFFC) )
{
surfType = v44;
do
{
idList<unsigned char,25>::Append(this: &v74, obj: &surfType);
idList<float,13>::Append(this: &v72, obj: &v65);
idList<float,13>::Append(this: &v71, obj: &v66);
idList<float,13>::Append(this: &v70, obj: &v67);
idList<float,13>::Append(this: &v73, obj: &v64);
idList<unsigned char,25>::Append(this: &v75, obj: &v62);
++v40;
}
while ( v40 < (int)((v40 + 3) & 0xFFFFFFFC) );
num = v74.num;
v39 = v74.list;
v37 = v72.list;
v35 = v71.list;
v34 = v70.list;
v38 = v73.list;
list = v75.list;
}
}
idMem::Free(this: &mem, ptr: v10, align: ALIGN_16);
v45 = md6Decl->GetDeclTimestamp(this: md6Decl);
v46 = 4 * v72.num;
LOWORD(v79[10]) = (num + 79) & 0xFFF0;
v47 = 4 * v71.num;
v48 = 4 * v70.num;
LOWORD(v79[9]) = v36;
v49 = v75.num;
v50 = 4 * v73.num;
v51 = md6Decl->referenceBounds.b[0].x;
v52 = md6Decl->referenceBounds.b[0].y;
HIWORD(v79[9]) = v63;
HIWORD(v79[11]) = (LOWORD(v79[10]) + 4 * LOWORD(v72.num) + 15) & 0xFFF0;
LODWORD(v64) = &md6Decl->referenceBounds;
v53 = md6Decl->referenceBounds.b[0].z;
HIWORD(v79[10]) = 64;
v54 = md6Decl->referenceBounds.b[1].x;
LODWORD(v64) = &md6Decl->referenceBounds.b[1];
LOWORD(v79[11]) = (HIWORD(v79[11]) + 4 * LOWORD(v71.num) + 15) & 0xFFF0;
v55 = md6Decl->referenceBounds.b[1].y;
v56 = md6Decl->referenceBounds.b[1].z;
v79[1] = v45;
*(float *)&v79[2] = v51;
HIWORD(v79[12]) = (LOWORD(v79[11]) + 4 * LOWORD(v70.num) + 15) & 0xFFF0;
*(float *)&v79[3] = v52;
*(float *)&v79[4] = v53;
*(float *)&v79[5] = v54;
*(float *)&v79[6] = v55;
*(float *)&v79[7] = v56;
v79[8] = 128;
LOWORD(v79[12]) = (HIWORD(v79[12]) + 4 * LOWORD(v73.num) + 15) & 0xFFF0;
v79[0] = LOWORD(v79[12]) + v75.num;
v57 = idMem::AllocWithLocation(
this: v68,
location: "w:\\tech5\\engine\\cm\\CollisionModelBuilder_sphere.cpp(169) : TAG_ANIMATION",
size: v79[0],
tag: TAG_ANIMATION,
zeroBuffer: true,
align: ALIGN_16,
heap: HEAP_DEFAULTHEAP);
memcpy(Dst: v57, Src: v79, Size: 0x34u);
idSphereModelCollisionDetection::SetupCollisionSpherePtrs(csData: (const cm_sphereModel_t *)v57, csPtrs: &v80);
memcpy(Dst: v80.joint, Src: v39, Size: num);
memcpy(Dst: v80.offsetX, Src: v37, Size: v46);
memcpy(Dst: v80.offsetY, Src: v35, Size: v47);
memcpy(Dst: v80.offsetZ, Src: v34, Size: v48);
memcpy(Dst: v80.radius, Src: v38, Size: v50);
memcpy(Dst: v80.surfType, Src: list, Size: v49);
idResource::SetName(this: model, _name: md6Decl->name.str);
v58 = md6Decl->GetDeclTimestamp(this: md6Decl);
model->sphereModel = (cm_sphereModel_t *)v57;
model->sourceFileTime = v58;
model->bounds.b[0].x = *((float *)v57 + 2);
model->bounds.b[0].y = *((float *)v57 + 3);
v69 = &model->bounds.b[1];
model->bounds.b[0].z = *((float *)v57 + 4);
model->bounds.b[1].x = *((float *)v57 + 5);
model->bounds.b[1].y = *((float *)v57 + 6);
model->bounds.b[1].z = *((float *)v57 + 7);
model->contents = model->sphereModel->contents;
if ( (v75.listStatic == 0 || v75.listStatic == 2) && list != nullptr )
{
v59 = v68;
idMem::Free(this: v68, ptr: list, align: ALIGN_16);
}
else
{
v59 = v68;
}
if ( (v73.listStatic == 0 || v73.listStatic == 2) && v38 != nullptr )
idMem::Free(this: v59, ptr: v38, align: ALIGN_16);
if ( (v70.listStatic == 0 || v70.listStatic == 2) && v34 != nullptr )
idMem::Free(this: v59, ptr: v34, align: ALIGN_16);
if ( (v71.listStatic == 0 || v71.listStatic == 2) && v35 != nullptr )
idMem::Free(this: v59, ptr: v35, align: ALIGN_16);
if ( (v72.listStatic == 0 || v72.listStatic == 2) && v37 != nullptr )
idMem::Free(this: v59, ptr: v37, align: ALIGN_16);
if ( (v74.listStatic == 0 || v74.listStatic == 2) && v39 != nullptr )
idMem::Free(this: v59, ptr: v39, align: ALIGN_16);
return 1;
}
// ========================================================================
// __unwind$223584
// EA : 0x825D3744
// RVA : 0x005D3744
// PDB : w:\tech5\engine\cm\collisionmodelbuilder_sphere.cpp
// ========================================================================
void _unwind_223584()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: (idStaticList<idVehicleState *,4> *)(v0 - 480 + 176));
}
// ========================================================================
// __unwind$223585
// EA : 0x825D376C
// RVA : 0x005D376C
// PDB : w:\tech5\engine\cm\collisionmodelbuilder_sphere.cpp
// ========================================================================
void _unwind_223585()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: (idStaticList<idVehicleState *,4> *)(v0 - 480 + 144));
}
// ========================================================================
// __unwind$223586
// EA : 0x825D3794
// RVA : 0x005D3794
// PDB : w:\tech5\engine\cm\collisionmodelbuilder_sphere.cpp
// ========================================================================
void _unwind_223586()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: (idStaticList<idVehicleState *,4> *)(v0 - 480 + 128));
}
// ========================================================================
// __unwind$223587
// EA : 0x825D37BC
// RVA : 0x005D37BC
// PDB : w:\tech5\engine\cm\collisionmodelbuilder_sphere.cpp
// ========================================================================
void _unwind_223587()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: (idStaticList<idVehicleState *,4> *)(v0 - 480 + 112));
}
// ========================================================================
// __unwind$223588
// EA : 0x825D37E4
// RVA : 0x005D37E4
// PDB : w:\tech5\engine\cm\collisionmodelbuilder_sphere.cpp
// ========================================================================
void _unwind_223588()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: (idStaticList<idVehicleState *,4> *)(v0 - 480 + 160));
}
// ========================================================================
// __unwind$223589
// EA : 0x825D380C
// RVA : 0x005D380C
// PDB : w:\tech5\engine\cm\collisionmodelbuilder_sphere.cpp
// ========================================================================
void _unwind_223589()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: (idStaticList<idVehicleState *,4> *)(v0 - 480 + 192));
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,28 @@
// ========================================================================
// ??1idCollisionGrid@@UAA@XZ
// EA : 0x825BD8D0
// RVA : 0x005BD8D0
// PDB : w:\tech5\engine\cm\collisionmodelmanager.h
// ========================================================================
void __fastcall idCollisionGrid::~idCollisionGrid(idCollisionGrid *this)
{
this->__vftable = (idCollisionGrid_vtbl *)&idCollisionGrid::`vftable';
idResource::~idResource(this);
}
// ========================================================================
// ??1idCollisionModel@@UAA@XZ
// EA : 0x825C0830
// RVA : 0x005C0830
// PDB : w:\tech5\engine\cm\collisionmodelmanager.h
// ========================================================================
void __fastcall idCollisionModel::~idCollisionModel(idCollisionModel *this)
{
this->__vftable = (idCollisionModel_vtbl *)&idCollisionModel::`vftable';
idResource::~idResource(this);
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,941 @@
// ========================================================================
// ?AdvanceSubModelQueryFirstSubmittedIndex@idQueryData@@QAAX_K@Z
// EA : 0x825D3838
// RVA : 0x005D3838
// PDB : w:\tech5\engine\cm\collisionqueryjobmanager.h
// ========================================================================
// local variable allocation has failed, the output may be wrong!
void __fastcall idQueryData::AdvanceSubModelQueryFirstSubmittedIndex(
idQueryData *this,
unsigned int a2,
unsigned __int64 newIndex)
{
unsigned __int64 *p_subModelQueryFirstSubmittedIndex; // r26
unsigned __int64 subModelQueryFirstSubmittedIndex; // r30 OVERLAPPED
subModelQuery_t *v6; // r31
p_subModelQueryFirstSubmittedIndex = &this->subModelQueryFirstSubmittedIndex;
subModelQueryFirstSubmittedIndex = this->subModelQueryFirstSubmittedIndex;
if ( (unsigned int)subModelQueryFirstSubmittedIndex < a2 )
{
do
{
v6 = &this->subModelQueries[subModelQueryFirstSubmittedIndex & 0xFFF];
ReleaseSubModelData(subModel: (const cm_subModelData_t *)v6->subModel, data: v6->subModelData);
LODWORD(subModelQueryFirstSubmittedIndex) = subModelQueryFirstSubmittedIndex + 1;
v6->subModelData = nullptr;
}
while ( (unsigned int)subModelQueryFirstSubmittedIndex < HIDWORD(subModelQueryFirstSubmittedIndex) );
}
*p_subModelQueryFirstSubmittedIndex = *(unsigned __int64 *)((char *)&subModelQueryFirstSubmittedIndex + 4);
}
// ========================================================================
// ?StartFrame@idQueryData@@QAAXXZ
// EA : 0x825D38A0
// RVA : 0x005D38A0
// PDB : w:\tech5\engine\cm\collisionqueryjobmanager.h
// ========================================================================
// local variable allocation has failed, the output may be wrong!
void __fastcall idQueryData::StartFrame(idQueryData *this)
{
__int128 v1; // r10 OVERLAPPED
int v2; // r6
__int128 v3; // r6
int v4; // r11
*(_QWORD *)((char *)&v1 + 4) = this->subModelQueryLastAllocedIndex;
*((_QWORD *)&v1 + 1) = this->queryParmsLastAllocedIndex;
*(_QWORD *)((char *)&v1 - 4) = this->slideMoveStateLastAllocedIndex;
*(_QWORD *)((char *)&v1 + 12) = this->intermediateResultsLastAllocedOffset;
*((_QWORD *)&v3 + 1) = *(_QWORD *)((char *)&this->modelQueries[0].type + v2);
++DWORD1(v1);
*((_BYTE *)&this->modelQueries[0].type + DWORD2(v3)) = 1;
this->modelQueryFirstAllocedIndex = *(_QWORD *)&v1;
++DWORD2(v1);
DWORD2(v3) = v1 + 1;
DWORD1(v3) = v4 + 1;
this->subModelQueryFirstAllocedIndex = *(_QWORD *)((char *)&v1 + 4);
this->queryParmsFirstAllocedIndex = *(_QWORD *)((char *)&v3 + 4);
this->slideMoveStateFirstAllocedIndex = *(_QWORD *)(&this - 1);
this->intermediateResultsFirstAllocedOffset = *(_QWORD *)((char *)&v1 + 12);
this->finalResultsFirstAllocedOffset = v3;
}
// ========================================================================
// ?UpdateQueryDataStats@idQueryData@@QAAHPAUqueryDataStats_t@@AAHHAAU2@@Z
// EA : 0x825D4130
// RVA : 0x005D4130
// PDB : w:\tech5\engine\cm\collisionqueryjobmanager.h
// ========================================================================
int __fastcall idQueryData::UpdateQueryDataStats(
idQueryData *this,
queryDataStats_t *stats,
int *numStats,
int maxStats,
queryDataStats_t *totalStats)
{
int v10; // r10
int *p_finalResultSize; // r11
int v12; // r27
queryDataStats_t *v13; // r29
int v14; // r28
const char **p_userName; // r30
unsigned __int64 i; // r5
_DWORD *v17; // r10
const char *v18; // r7
int v19; // r11
queryDataStats_t *v20; // r9
int v21; // r9
int v22; // r6
queryDataStats_t *v23; // r11
int numSubModelQueries; // r8
int v25; // r7
int v26; // r9
int finalResultSize; // r9
int v28; // r8
int v29; // r5
int *v30; // r11
int v31; // r7
int v32; // r8
int v33; // r9
int v34; // r10
int v35; // r8
int v36; // r9
int v37; // r10
int v38; // r8
int v39; // r9
int v40; // r10
int v41; // r8
int v42; // r10
int v43; // r9
int numModelQueries; // r8
int v45; // r7
int queryDataSize; // r10
int v47; // r9
int maxCollisionQueries; // r10
int maxModelQueries; // r10
int maxSubModelQueries; // r10
int maxQueryDataSize; // r10
int v52; // r11
int maxFinalResultSize; // r10
_BYTE v55[44]; // [sp+50h] [-90h] BYREF
totalStats->numCollisionQueries = 0;
totalStats->numModelQueries = 0;
totalStats->numSubModelQueries = 0;
totalStats->queryDataSize = 0;
totalStats->finalResultSize = 0;
v10 = 0;
if ( *numStats > 0 )
{
p_finalResultSize = &stats[-1].finalResultSize;
do
{
p_finalResultSize[7] = 0;
++v10;
p_finalResultSize[8] = 0;
p_finalResultSize[9] = 0;
p_finalResultSize[10] = 0;
p_finalResultSize += 11;
*p_finalResultSize = 0;
}
while ( v10 < *numStats );
}
if ( *numStats > 0 )
{
v12 = 1;
v13 = stats;
do
{
v14 = v12;
if ( v12 < *numStats )
{
p_userName = &v13[1].userName;
do
{
if ( idStr::Cmp(s1: *p_userName, s2: v13->userName) < 0 )
{
memcpy(Dst: v55, Src: p_userName, Size: sizeof(v55));
memcpy(Dst: p_userName, Src: v13, Size: 0x2Cu);
memcpy(Dst: v13, Src: v55, Size: sizeof(queryDataStats_t));
}
++v14;
p_userName += 11;
}
while ( v14 < *numStats );
}
++v12;
++v13;
}
while ( v12 - 1 < *numStats );
}
for ( i = this->modelQueryFirstSubmittedIndex;
(unsigned int)i <= LODWORD(this->modelQueryLastAllocedIndex);
LODWORD(i) = i + 1 )
{
v17 = (_DWORD *)((char *)this + (((_DWORD)i << 7) & 0x3FF80));
v18 = (const char *)v17[7];
if ( v18 == nullptr )
v18 = "*Unknown*";
v19 = 0;
if ( *numStats > 0 )
{
v20 = stats;
do
{
if ( v18 == v20->userName )
break;
++v19;
++v20;
}
while ( v19 < *numStats );
}
if ( v19 < maxStats )
{
v21 = v19 + 1;
if ( *numStats > v19 + 1 )
v21 = *numStats;
*numStats = v21;
if ( (unsigned int)(*v17 - 1) > 8 )
{
v22 = 0;
}
else if ( *v17 == 2 || *v17 == 3 || *v17 == 4 || *v17 == 5 || *v17 == 6 || *v17 == 1 )
{
v22 = 192;
}
else
{
v22 = 992;
}
v23 = &stats[v19];
v23->userName = v18;
numSubModelQueries = v23->numSubModelQueries;
v25 = v23->numModelQueries + 1;
v23->numCollisionQueries += (_cntlzw(v17[10]) & 0x20) != 0;
v23->numModelQueries = v25;
v23->numSubModelQueries = numSubModelQueries + v17[12];
v26 = v17[12];
if ( v26 < 1 )
v26 = 1;
v28 = v26 * v22 + v23->queryDataSize;
finalResultSize = v23->finalResultSize;
v23->queryDataSize = v28;
v23->finalResultSize = (v17[9] == 0 ? 0 : v22) + finalResultSize;
}
}
v29 = 0;
if ( *numStats > 0 )
{
v30 = &stats[-1].finalResultSize;
do
{
v31 = v30[7];
v32 = v30[12];
if ( v32 <= v31 )
v32 = v30[7];
v33 = v30[13];
v34 = v30[8];
v30[12] = v32;
v35 = v33;
if ( v33 <= v34 )
v35 = v34;
v36 = v30[14];
v37 = v30[9];
v30[13] = v35;
v38 = v36;
if ( v36 <= v37 )
v38 = v37;
v39 = v30[15];
v40 = v30[10];
v30[14] = v38;
v41 = v39;
if ( v39 <= v40 )
v41 = v40;
v42 = v30[11];
v43 = v30[16];
v30[15] = v41;
if ( v43 > v42 )
v42 = v43;
v30[16] = v42;
++v29;
numModelQueries = totalStats->numModelQueries;
totalStats->numCollisionQueries += v31;
v45 = totalStats->numSubModelQueries;
totalStats->numModelQueries = numModelQueries + v30[8];
queryDataSize = totalStats->queryDataSize;
totalStats->numSubModelQueries = v30[9] + v45;
v47 = totalStats->finalResultSize;
totalStats->queryDataSize = queryDataSize + v30[10];
v30 += 11;
totalStats->finalResultSize = *v30 + v47;
}
while ( v29 < *numStats );
}
maxCollisionQueries = totalStats->maxCollisionQueries;
if ( maxCollisionQueries <= totalStats->numCollisionQueries )
maxCollisionQueries = totalStats->numCollisionQueries;
totalStats->maxCollisionQueries = maxCollisionQueries;
maxModelQueries = totalStats->maxModelQueries;
if ( maxModelQueries <= totalStats->numModelQueries )
maxModelQueries = totalStats->numModelQueries;
totalStats->maxModelQueries = maxModelQueries;
maxSubModelQueries = totalStats->maxSubModelQueries;
if ( maxSubModelQueries <= totalStats->numSubModelQueries )
maxSubModelQueries = totalStats->numSubModelQueries;
totalStats->maxSubModelQueries = maxSubModelQueries;
maxQueryDataSize = totalStats->maxQueryDataSize;
if ( maxQueryDataSize <= totalStats->queryDataSize )
maxQueryDataSize = totalStats->queryDataSize;
totalStats->maxQueryDataSize = maxQueryDataSize;
v52 = totalStats->finalResultSize;
maxFinalResultSize = totalStats->maxFinalResultSize;
if ( maxFinalResultSize <= v52 )
totalStats->maxFinalResultSize = v52;
else
totalStats->maxFinalResultSize = maxFinalResultSize;
return *numStats;
}
// ========================================================================
// ?EndFrame@idQueryData@@QAAXXZ
// EA : 0x825D7498
// RVA : 0x005D7498
// PDB : w:\tech5\engine\cm\collisionqueryjobmanager.h
// ========================================================================
// local variable allocation has failed, the output may be wrong!
void __fastcall idQueryData::EndFrame(idQueryData *this)
{
__int64 v1; // r28
int *p_failedModelQuery; // r24
int v4; // r27
int *p_numCollisionQueries; // r30
int v6; // r8
int v7; // r4
int v8; // r7
int v9; // r5
int v10; // r6
__int64 v11; // r10
__int64 v12; // r8
__int64 v13; // r6
va *v14; // r3
int failedSubModelQuery; // r11
__int64 v16; // r6
va *v17; // r3
int failedQueryParms; // r11
__int64 v19; // r6
va *v20; // r3
int failedSlideMoveState; // r11
__int64 v22; // r6
va *v23; // r3
int failedIntermediateResults; // r11
__int64 v25; // r6
va *v26; // r3
int failedFinalResults; // r11
__int64 v28; // r6
va *v29; // r3
int failedMergeResults; // r4
int v31; // r6 OVERLAPPED
__int128 v32; // r5 OVERLAPPED
unsigned __int64 finalResultsFirstAllocedOffset; // r11
__int128 v34; // r9
int v35; // r3
int v36; // [sp+8h] [-1728h]
int v37; // [sp+Ch] [-1724h]
int v38; // [sp+10h] [-1720h]
int v39; // [sp+14h] [-171Ch]
int v40; // [sp+18h] [-1718h]
int v41; // [sp+1Ch] [-1714h]
int v42[4]; // [sp+50h] [-16E0h] BYREF
idStr v43; // [sp+60h] [-16D0h] BYREF
queryDataStats_t v44; // [sp+80h] [-16B0h] BYREF
_BYTE v45[5632]; // [sp+B0h] [-1680h] BYREF
p_failedModelQuery = &this->failedModelQuery;
LODWORD(v1) = 0;
this->started = false;
if ( this->failedModelQuery > 0
|| this->failedSubModelQuery > 0
|| this->failedQueryParms > 0
|| this->failedSlideMoveState > 0
|| this->failedIntermediateResults > 0
|| this->failedFinalResults > 0
|| this->failedMergeResults > 0 )
{
v42[0] = 0;
memset(Dst: v45, Val: 0, Size: sizeof(v45));
*(_QWORD *)&v44.userName = v1;
*(_QWORD *)&v44.numModelQueries = v1;
*(_QWORD *)&v44.queryDataSize = v1;
*(_QWORD *)&v44.maxCollisionQueries = v1;
*(_QWORD *)&v44.maxSubModelQueries = v1;
v44.maxFinalResultSize = 0;
idQueryData::UpdateQueryDataStats(
this,
stats: (queryDataStats_t *)v45,
numStats: v42,
maxStats: 128,
totalStats: &v44);
idLib::Printf(fmt: ".............................................\n");
v4 = v42[0];
if ( v42[0] > 0 )
{
p_numCollisionQueries = &v44.numCollisionQueries;
do
{
v6 = p_numCollisionQueries[16] >> 10;
v7 = p_numCollisionQueries[12];
v8 = p_numCollisionQueries[15] >> 10;
v9 = p_numCollisionQueries[13];
v10 = p_numCollisionQueries[14];
p_numCollisionQueries += 11;
idLib::Printf(
fmt: "%4d queries, %4d mdl queries, %4d sub-mdl queries, %4d kB temp, %4d kB final, %s\n",
v7,
v9,
v10,
v8,
v6,
(const char *)*p_numCollisionQueries);
--v4;
}
while ( v4 != 0 );
}
idLib::Printf(fmt: ".............................................\n");
idLib::Printf(
fmt: "%4d queries, %4d mdl queries, %4d sub-mdl queries, %4d kB temp, %4d kB final, total\n",
v44.numCollisionQueries,
v44.numModelQueries,
v44.numSubModelQueries,
v44.queryDataSize >> 10,
v44.finalResultSize >> 10);
idLib::Printf(
fmt: "%4d queries, %4d mdl queries, %4d sub-mdl queries, %4d kB temp, %4d kB final, maximum\n",
2048,
2048,
4096,
1024,
512);
v43.len = 0;
v43.allocedAndFlag = 20;
v43.data = v43.baseBuffer;
v43.baseBuffer[0] = 0;
if ( *p_failedModelQuery > 0 )
{
LODWORD(v11) = &unk_821B0000;
LODWORD(v13) = 2048;
HIDWORD(v13) = *p_failedModelQuery + 2048;
v14 = va::va(
this: (va *)v45,
fmt: " Model Queries (%d/%d)",
a3: v13,
a4: v12,
a5: v11,
a6: v36,
a7: v37,
a8: v38,
a9: v39,
a10: v40,
a11: v41);
idStr::Append(this: &v43, text: v14);
*p_failedModelQuery = 0;
}
failedSubModelQuery = this->failedSubModelQuery;
if ( failedSubModelQuery > 0 )
{
LODWORD(v11) = &unk_821B0000;
LODWORD(v16) = 4096;
HIDWORD(v16) = failedSubModelQuery + 4096;
v17 = va::va(
this: (va *)v45,
fmt: " Sub-Model Queries (%d/%d)",
a3: v16,
a4: v12,
a5: v11,
a6: v36,
a7: v37,
a8: v38,
a9: v39,
a10: v40,
a11: v41);
idStr::Append(this: &v43, text: v17);
this->failedSubModelQuery = 0;
}
failedQueryParms = this->failedQueryParms;
if ( failedQueryParms > 0 )
{
LODWORD(v11) = &unk_821B0000;
LODWORD(v19) = 2048;
HIDWORD(v19) = failedQueryParms + 2048;
v20 = va::va(
this: (va *)v45,
fmt: " Query Parms (%d/%d)",
a3: v19,
a4: v12,
a5: v11,
a6: v36,
a7: v37,
a8: v38,
a9: v39,
a10: v40,
a11: v41);
idStr::Append(this: &v43, text: v20);
this->failedQueryParms = 0;
}
failedSlideMoveState = this->failedSlideMoveState;
if ( failedSlideMoveState > 0 )
{
LODWORD(v11) = &unk_821B0000;
LODWORD(v22) = 128;
HIDWORD(v22) = failedSlideMoveState + 128;
v23 = va::va(
this: (va *)v45,
fmt: " Slide Move States (%d/%d)",
a3: v22,
a4: v12,
a5: v11,
a6: v36,
a7: v37,
a8: v38,
a9: v39,
a10: v40,
a11: v41);
idStr::Append(this: &v43, text: v23);
this->failedSlideMoveState = 0;
}
failedIntermediateResults = this->failedIntermediateResults;
if ( failedIntermediateResults > 0 )
{
LODWORD(v11) = &unk_821B0000;
LODWORD(v25) = 1024;
HIDWORD(v25) = (failedIntermediateResults + 0x100000) >> 10;
v26 = va::va(
this: (va *)v45,
fmt: " Intermediate Result Bytes (%d kB/%d kB)",
a3: v25,
a4: v12,
a5: v11,
a6: v36,
a7: v37,
a8: v38,
a9: v39,
a10: v40,
a11: v41);
idStr::Append(this: &v43, text: v26);
this->failedIntermediateResults = 0;
}
failedFinalResults = this->failedFinalResults;
if ( failedFinalResults > 0 )
{
LODWORD(v11) = &unk_821B0000;
LODWORD(v28) = 512;
HIDWORD(v28) = (failedFinalResults + 0x80000) >> 10;
v29 = va::va(
this: (va *)v45,
fmt: " Final Result Bytes (%d kB/%d kB)",
a3: v28,
a4: v12,
a5: v11,
a6: v36,
a7: v37,
a8: v38,
a9: v39,
a10: v40,
a11: v41);
idStr::Append(this: &v43, text: v29);
this->failedFinalResults = 0;
}
if ( v43.len != 0 )
idLib::Warning(fmt: "Collision Detection system ran out of free%s", v43.data);
failedMergeResults = this->failedMergeResults;
if ( failedMergeResults > 0 )
{
idLib::Warning(
fmt: "%d collision detection querie(s) needed more than %d kB of merge results",
failedMergeResults,
32);
this->failedMergeResults = 0;
}
idStr::FreeData(this: &v43);
}
v31 = 2381872;
*((_QWORD *)&v32 + 1) = this->modelQueryFirstAllocedIndex;
*(_QWORD *)((char *)&v32 + 4) = this->subModelQueryFirstAllocedIndex;
this->modelQueryFirstSubmittedIndex = v32;
idQueryData::AdvanceSubModelQueryFirstSubmittedIndex(
this: (idQueryData *)DWORD1(v32),
a2: DWORD2(v32),
newIndex: *(unsigned __int64 *)&v31);
finalResultsFirstAllocedOffset = this->finalResultsFirstAllocedOffset;
*((_QWORD *)&v34 + 1) = this->queryParmsFirstAllocedIndex;
*(_QWORD *)((char *)&v34 + 4) = *(_QWORD *)((char *)&this->modelQueries[0].type + DWORD2(v34));
*(_QWORD *)&v34 = *(_QWORD *)((char *)&this->modelQueries[0].type + DWORD1(v34));
v35 = HIDWORD(finalResultsFirstAllocedOffset) | 0x58A0;
HIDWORD(finalResultsFirstAllocedOffset) = &idDeclReachIK::resourceList.hashTable[243];
*(_QWORD *)((char *)&this->modelQueries[0].type + HIDWORD(v34)) = v34;
this->slideMoveStateFirstSubmittedIndex = *(_QWORD *)((char *)&v34 + 4);
*(_QWORD *)((char *)&this->modelQueries[0].type + v35) = finalResultsFirstAllocedOffset;
this->intermediateResultsFirstSubmittedOffset = *(_QWORD *)&v34;
*(_QWORD *)(HIDWORD(finalResultsFirstAllocedOffset) - 18144) = finalResultsFirstAllocedOffset;
}
// ========================================================================
// __unwind$229616
// EA : 0x825D7890
// RVA : 0x005D7890
// PDB : w:\tech5\engine\cm\collisionqueryjobmanager.h
// ========================================================================
void _unwind_229616()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 5936 + 96));
}
// ========================================================================
// ?Clear@idQueryData@@QAAXXZ
// EA : 0x825DC7F8
// RVA : 0x005DC7F8
// PDB : w:\tech5\engine\cm\collisionqueryjobmanager.h
// ========================================================================
void __fastcall idQueryData::Clear(idQueryData *this)
{
this->modelQueryFirstAllocedIndex = 0x24581000000001LL;
this->subModelQueryFirstSubmittedIndex = 0x24581000000001LL;
this->slideMoveStateFirstAllocedIndex = 0x24581000000001LL;
this->subModelQueryFirstAllocedIndex = 0x24581000000001LL;
this->queryParmsFirstSubmittedIndex = 0x24581000000001LL;
this->queryParmsFirstAllocedIndex = 0x24581000000001LL;
this->slideMoveStateFirstSubmittedIndex = 0x24582800000001LL;
this->modelQueryLastAllocedIndex = 0x100000000LL;
this->subModelQueryLastSubmittedIndex = 0x100000000LL;
this->subModelQueryLastAllocedIndex = 0x100000000LL;
this->queryParmsLastSubmittedIndex = 0x100000000LL;
this->queryParmsLastAllocedIndex = 0x100000000LL;
this->slideMoveStateLastSubmittedIndex = 0x100000000LL;
this->slideMoveStateLastAllocedIndex = 0x100000000LL;
this->modelQueryFirstSubmittedIndex = 0x24588000000001LL;
this->intermediateResultsFirstSubmittedOffset = 16;
this->intermediateResultsLastSubmittedOffset = 16;
this->modelQueryLastSubmittedIndex = 0x24000000000000LL;
this->intermediateResultsFirstAllocedOffset = 16;
this->intermediateResultsLastAllocedOffset = 16;
this->finalResultsFirstSubmittedOffset = 16;
this->finalResultsLastSubmittedOffset = 16;
this->finalResultsFirstAllocedOffset = 16;
this->finalResultsLastAllocedOffset = 16;
this->started = false;
this->failedModelQuery = 0;
this->failedSubModelQuery = 0;
this->failedQueryParms = 0;
this->failedIntermediateResults = 0;
this->failedFinalResults = 0;
this->failedSlideMoveState = 0;
this->failedMergeResults = 0;
}
// ========================================================================
// ?ReleaseQueryOnlyData@idQueryData@@QAAXXZ
// EA : 0x825DC9A0
// RVA : 0x005DC9A0
// PDB : w:\tech5\engine\cm\collisionqueryjobmanager.h
// ========================================================================
// local variable allocation has failed, the output may be wrong!
void __fastcall idQueryData::ReleaseQueryOnlyData(idQueryData *this, unsigned __int64 a2)
{
int v2; // r6
unsigned __int64 intermediateResultsLastSubmittedOffset; // r5 OVERLAPPED
__int64 v5; // r7 OVERLAPPED
v2 = 2381864;
LODWORD(a2) = LODWORD(this->modelQueryLastSubmittedIndex) + 1;
this->modelQueryFirstSubmittedIndex = a2;
idQueryData::AdvanceSubModelQueryFirstSubmittedIndex(
this,
a2: LODWORD(this->subModelQueryLastSubmittedIndex) + 1,
newIndex: *(unsigned __int64 *)((char *)&a2 - 4));
intermediateResultsLastSubmittedOffset = this->intermediateResultsLastSubmittedOffset;
LODWORD(v5) = LODWORD(this->queryParmsLastSubmittedIndex) + 1;
HIDWORD(v5) = LODWORD(this->slideMoveStateLastSubmittedIndex) + 1;
*(_QWORD *)((char *)&this->modelQueries[0].type + HIDWORD(intermediateResultsLastSubmittedOffset)) = v5;
this->slideMoveStateFirstSubmittedIndex = *(unsigned __int64 *)((char *)&intermediateResultsLastSubmittedOffset - 4);
this->intermediateResultsFirstSubmittedOffset = intermediateResultsLastSubmittedOffset;
}
// ========================================================================
// ??0timings_t@@QAA@XZ
// EA : 0x825DCDC8
// RVA : 0x005DCDC8
// PDB : w:\tech5\engine\cm\collisionqueryjobmanager.h
// ========================================================================
timings_t *__fastcall timings_t::timings_t(timings_t *this)
{
this->max = 0;
this->min = -1;
this->total = 0;
this->count = 0;
return this;
}
// ========================================================================
// ?AllocModelQuery@idQueryData@@QAAPAUmodelQuery_t@@XZ
// EA : 0x825DCDE8
// RVA : 0x005DCDE8
// PDB : w:\tech5\engine\cm\collisionqueryjobmanager.h
// ========================================================================
modelQuery_t *__fastcall idQueryData::AllocModelQuery(idQueryData *this)
{
unsigned __int64 modelQueryLastAllocedIndex; // r11
modelQuery_t *result; // r3
unsigned int v3; // r10
modelQueryLastAllocedIndex = this->modelQueryLastAllocedIndex;
if ( (unsigned int)(modelQueryLastAllocedIndex - LODWORD(this->modelQueryFirstSubmittedIndex) + 1) < 0x800 )
{
LODWORD(modelQueryLastAllocedIndex) = modelQueryLastAllocedIndex + 1;
this->modelQueryLastAllocedIndex = modelQueryLastAllocedIndex;
result = (modelQuery_t *)((((_DWORD)modelQueryLastAllocedIndex << 7) & 0x3FF80) + HIDWORD(modelQueryLastAllocedIndex));
v3 = ((unsigned int)&result->pad[5] + 3) & 0xFFFFFF80;
do
{
__asm { dcbz128 0, r10 }
v3 += 128;
}
while ( v3 <= (((unsigned int)&result->pad[5] + 3) & 0xFFFFFF80) );
}
else
{
++*(_DWORD *)(HIDWORD(modelQueryLastAllocedIndex) + 2382020);
return nullptr;
}
return result;
}
// ========================================================================
// ?AllocSubModelQuery@idQueryData@@QAAPAUsubModelQuery_t@@XZ
// EA : 0x825DCE68
// RVA : 0x005DCE68
// PDB : w:\tech5\engine\cm\collisionqueryjobmanager.h
// ========================================================================
subModelQuery_t *__fastcall idQueryData::AllocSubModelQuery(idQueryData *this)
{
unsigned __int64 subModelQueryLastAllocedIndex; // r11
subModelQuery_t *result; // r3
unsigned int v3; // r11
unsigned int i; // r10
subModelQueryLastAllocedIndex = this->subModelQueryLastAllocedIndex;
if ( (unsigned int)(subModelQueryLastAllocedIndex - LODWORD(this->subModelQueryFirstSubmittedIndex) + 5) < 0x1000 )
{
LODWORD(subModelQueryLastAllocedIndex) = subModelQueryLastAllocedIndex + 1;
this->subModelQueryLastAllocedIndex = subModelQueryLastAllocedIndex;
result = (subModelQuery_t *)(32 * ((subModelQueryLastAllocedIndex & 0xFFF) + 0x2000)
+ HIDWORD(subModelQueryLastAllocedIndex));
v3 = ((unsigned int)&result[3].nextOnModelQuery + 3) & 0xFFFFFF80;
for ( i = ((unsigned int)&result->nextOnModelQuery + 3) & 0xFFFFFF80; v3 <= i; v3 += 128 )
__asm { dcbz128 0, r11 }
}
else
{
++*(_DWORD *)(HIDWORD(subModelQueryLastAllocedIndex) + 2382024);
return nullptr;
}
return result;
}
// ========================================================================
// ?AllocQueryParms@idQueryData@@QAAPAUqueryParms_t@@XZ
// EA : 0x825DCEF8
// RVA : 0x005DCEF8
// PDB : w:\tech5\engine\cm\collisionqueryjobmanager.h
// ========================================================================
queryParms_t *__fastcall idQueryData::AllocQueryParms(idQueryData *this)
{
unsigned __int64 queryParmsLastAllocedIndex; // r11
queryParms_t *result; // r3
unsigned int v3; // r11
unsigned int i; // r10
queryParmsLastAllocedIndex = this->queryParmsLastAllocedIndex;
if ( (unsigned int)(queryParmsLastAllocedIndex - LODWORD(this->queryParmsFirstSubmittedIndex) + 2) < 0x800 )
{
LODWORD(queryParmsLastAllocedIndex) = queryParmsLastAllocedIndex + 1;
this->queryParmsLastAllocedIndex = queryParmsLastAllocedIndex;
result = (queryParms_t *)(192 * ((queryParmsLastAllocedIndex & 0x7FF) + 2048) + HIDWORD(queryParmsLastAllocedIndex));
v3 = ((unsigned int)&result->modelOrigin.x + 3) & 0xFFFFFF80;
for ( i = ((unsigned int)&result->selfId + 3) & 0xFFFFFF80; v3 <= i; v3 += 128 )
__asm { dcbz128 0, r11 }
}
else
{
++*(_DWORD *)(HIDWORD(queryParmsLastAllocedIndex) + 2382028);
return nullptr;
}
return result;
}
// ========================================================================
// ?AllocSlideMoveState@idQueryData@@QAAPAUslideMoveState_t@@XZ
// EA : 0x825DCF90
// RVA : 0x005DCF90
// PDB : w:\tech5\engine\cm\collisionqueryjobmanager.h
// ========================================================================
slideMoveState_t *__fastcall idQueryData::AllocSlideMoveState(idQueryData *this)
{
unsigned __int64 slideMoveStateLastAllocedIndex; // r11
slideMoveState_t *result; // r3
int v3; // r7
unsigned int v4; // r11
unsigned int i; // r10
slideMoveStateLastAllocedIndex = this->slideMoveStateLastAllocedIndex;
if ( (unsigned int)(slideMoveStateLastAllocedIndex - LODWORD(this->slideMoveStateFirstSubmittedIndex) + 2) < 0x80 )
{
LODWORD(slideMoveStateLastAllocedIndex) = slideMoveStateLastAllocedIndex + 1;
this->slideMoveStateLastAllocedIndex = slideMoveStateLastAllocedIndex;
v3 = 176 * (slideMoveStateLastAllocedIndex & 0x7F) + HIDWORD(slideMoveStateLastAllocedIndex);
result = (slideMoveState_t *)(v3 + 786432);
v4 = (v3 + 786559) & 0xFFFFFF80;
for ( i = (v3 + 786607) & 0xFFFFFF80; v4 <= i; v4 += 128 )
__asm { dcbz128 0, r11 }
}
else
{
++*(_DWORD *)(HIDWORD(slideMoveStateLastAllocedIndex) + 2382040);
return nullptr;
}
return result;
}
// ========================================================================
// ?AllocIntermediateResults@idQueryData@@QAAPAUqueryResults_t@@II@Z
// EA : 0x825DD020
// RVA : 0x005DD020
// PDB : w:\tech5\engine\cm\collisionqueryjobmanager.h
// ========================================================================
queryResults_t *__fastcall idQueryData::AllocIntermediateResults(
idQueryData *this,
unsigned int numResults,
unsigned int resultSize)
{
unsigned int v3; // r6
unsigned __int64 intermediateResultsFirstSubmittedOffset; // r4
unsigned __int64 *p_intermediateResultsLastAllocedOffset; // r8
__int64 v6; // r11
unsigned __int64 v7; // r9
queryResults_t *result; // r3
unsigned int v9; // r7
unsigned int i; // r10
v3 = numResults * resultSize;
p_intermediateResultsLastAllocedOffset = &this->intermediateResultsLastAllocedOffset;
LODWORD(v6) = numResults * resultSize;
intermediateResultsFirstSubmittedOffset = this->intermediateResultsFirstSubmittedOffset;
HIDWORD(v6) = HIDWORD(intermediateResultsFirstSubmittedOffset);
v7 = *p_intermediateResultsLastAllocedOffset;
if ( (unsigned int)(v6 - intermediateResultsFirstSubmittedOffset + v7 + 128) < 0x100000 )
{
LODWORD(v6) = v6 + v7;
LODWORD(v7) = v7 & 0xFFFFF;
*(_QWORD *)HIDWORD(v7) = v6;
v9 = v6 & 0xFFF00000;
LODWORD(v6) = (v6 + 0x8000) & 0xFFF00000;
result = (queryResults_t *)(v7 + HIDWORD(intermediateResultsFirstSubmittedOffset) + 808960);
if ( (unsigned int)v6 > v9 )
*(_QWORD *)HIDWORD(v7) = v6;
_R11 = (v7 + HIDWORD(v6) + 809087) & 0xFFFFFF80;
for ( i = ((unsigned int)result + v3 - 1) & 0xFFFFFF80; _R11 <= i; _R11 += 128 )
{
__asm
{
dcbz128 0, r11
dcbf 0, r11
}
}
}
else
{
*(_DWORD *)(HIDWORD(intermediateResultsFirstSubmittedOffset) + 2382032) += v3;
return nullptr;
}
return result;
}
// ========================================================================
// ?AllocFinalResult@idQueryData@@QAAPAUqueryResults_t@@I@Z
// EA : 0x825DD0E8
// RVA : 0x005DD0E8
// PDB : w:\tech5\engine\cm\collisionqueryjobmanager.h
// ========================================================================
queryResults_t *__fastcall idQueryData::AllocFinalResult(idQueryData *this, unsigned __int64 totalSize)
{
unsigned __int64 *p_finalResultsLastAllocedOffset; // r11
unsigned int v3; // r6
unsigned __int64 finalResultsLastAllocedOffset; // r10
queryResults_t *result; // r3
int v6; // r6
unsigned int v8; // r10
p_finalResultsLastAllocedOffset = &this->finalResultsLastAllocedOffset;
finalResultsLastAllocedOffset = this->finalResultsLastAllocedOffset;
v3 = finalResultsLastAllocedOffset & 0xFFF80000;
LODWORD(finalResultsLastAllocedOffset) = (HIDWORD(totalSize) + finalResultsLastAllocedOffset) & 0xFFF80000;
if ( (unsigned int)finalResultsLastAllocedOffset > v3 )
*p_finalResultsLastAllocedOffset = finalResultsLastAllocedOffset;
if ( (unsigned int)(HIDWORD(totalSize)
- *(_DWORD *)(HIDWORD(this->finalResultsLastAllocedOffset) + 2381988)
+ LODWORD(this->finalResultsLastAllocedOffset)
+ 128) < 0x80000 )
{
idCollisionQuery::finalResultsLastAllocedOffset = *p_finalResultsLastAllocedOffset;
v6 = (this->finalResultsLastAllocedOffset & 0x7FFFF) + HIDWORD(this->finalResultsLastAllocedOffset);
LODWORD(totalSize) = HIDWORD(totalSize) + LODWORD(this->finalResultsLastAllocedOffset);
*p_finalResultsLastAllocedOffset = totalSize;
result = (queryResults_t *)(v6 + 1857536);
v8 = (v6 + 1857536 + HIDWORD(totalSize) - 1) & 0xFFFFFF80;
for ( _R11 = (v6 + 1857663) & 0xFFFFFF80; _R11 <= v8; _R11 += 128 )
{
__asm
{
dcbz128 0, r11
dcbf 0, r11
}
}
}
else
{
*(_DWORD *)(*(_DWORD *)p_finalResultsLastAllocedOffset + 2382036) += HIDWORD(totalSize);
return nullptr;
}
return result;
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,966 @@
// ========================================================================
// ?ExecuteSubModelQuery@idCollisionQueryExecute@@SAXPAVidTraceWork@@AAUqueryResults_t@@PBUqueryParms_t@@PBVidTraceModel@@PBUcm_subModelData_t@@H@Z
// EA : 0x825E56F0
// RVA : 0x005E56F0
// PDB : w:\tech5\engine\cm\jobs\collisionquery.cpp
// ========================================================================
void __fastcall idCollisionQueryExecute::ExecuteSubModelQuery(
idTraceWork *tw,
queryResults_t *results,
const queryParms_t *parms,
const idTraceModel *trm,
const cm_subModelData_t *subModelData,
int subModelNum)
{
const idMat3 *v13; // [sp+8h] [-888h]
int v14; // [sp+8h] [-888h]
int v15; // [sp+8h] [-888h]
const idMat3 *v16; // [sp+Ch] [-884h]
int v17; // [sp+Ch] [-884h]
int v18; // [sp+10h] [-880h]
int v19; // [sp+14h] [-87Ch]
trace_t v20; // [sp+B0h] [-7E0h] BYREF
trace_t v21; // [sp+480h] [-410h] BYREF
tw->profile[0] = 0;
tw->profile[1] = 0;
tw->profile[2] = 0;
tw->profile[3] = 0;
tw->profile[4] = 0;
if ( parms->testQuery && (parms->type == TRACE_TRANSLATION || parms->type == TRACE_ROTATION) )
{
idPolygonModelCollisionDetection::StartContents(
tw,
result: &v20,
start: &parms->start,
trm,
trmAxis: &parms->trmAxis,
contentMask: parms->contentMask,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis);
idPolygonModelCollisionDetection::TraceThroughSubModel(tw, subModelData, subModelNum);
idPolygonModelCollisionDetection::FinishContents(
tw,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis,
modelEntityNum: parms->modelEntityNum,
modelPhysicsId: parms->modelPhysicsId,
modelId: parms->modelBodyId,
selfId: parms->selfId,
modelContentsOverride: parms->modelContentsOverride);
if ( v20.c.contentFlags != 0 )
results->query.status |= 2u;
}
if ( (unsigned int)(parms->type - 1) <= 8 )
{
if ( parms->type == TRACE_TRANSLATION_POINT )
{
if ( !idPolygonModelCollisionDetection::StartTranslationPoint(
tw,
result: (trace_t *)results->data,
start: &parms->start,
end: &parms->end,
contentMask: parms->contentMask,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis) )
goto LABEL_28;
goto LABEL_19;
}
if ( parms->type == TRACE_ROTATION )
{
if ( idPolygonModelCollisionDetection::StartRotation(
tw,
result: (trace_t *)results->data,
rorg: &parms->rotationOrigin,
axis: &parms->rotationAxis,
angle: parms->rotationAngle,
start: (const idVec3 *)subModelData,
trm: (const idTraceModel *)&parms->start,
trmAxis: (const idMat3 *)trm,
contentMask: (int)&parms->trmAxis,
modelOrigin: v13->mat,
modelAxis: v16) )
{
idPolygonModelCollisionDetection::TraceThroughSubModel(tw, subModelData, subModelNum);
idPolygonModelCollisionDetection::FinishRotation(
tw,
rorg: &parms->rotationOrigin,
axis: &parms->rotationAxis,
angle: parms->rotationAngle,
start: (const idVec3 *)parms->selfId,
trmAxis: (const idMat3 *)&parms->start,
modelOrigin: parms->trmAxis.mat,
modelAxis: (const idMat3 *)&parms->modelOrigin,
modelEntityNum: (int)&parms->modelAxis,
modelPhysicsId: v14,
modelBodyId: v17,
selfId: v18,
modelContentsOverride: v19);
}
goto LABEL_28;
}
if ( parms->type != TRACE_ROTATION_POINT )
{
switch ( parms->type )
{
case TRACE_CONTENTS:
idPolygonModelCollisionDetection::StartContents(
tw,
result: (trace_t *)results->data,
start: &parms->start,
trm,
trmAxis: &parms->trmAxis,
contentMask: parms->contentMask,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis);
idPolygonModelCollisionDetection::TraceThroughSubModel(tw, subModelData, subModelNum);
idPolygonModelCollisionDetection::FinishContents(
tw,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis,
modelEntityNum: parms->modelEntityNum,
modelPhysicsId: parms->modelPhysicsId,
modelId: parms->modelBodyId,
selfId: parms->selfId,
modelContentsOverride: parms->modelContentsOverride);
goto LABEL_28;
case TRACE_CONTENTS_POINT:
idPolygonModelCollisionDetection::StartContentsPoint(
tw,
result: (trace_t *)results->data,
start: &parms->start,
contentMask: parms->contentMask,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis);
idPolygonModelCollisionDetection::TraceThroughSubModel(tw, subModelData, subModelNum);
idPolygonModelCollisionDetection::FinishContents(
tw,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis,
modelEntityNum: parms->modelEntityNum,
modelPhysicsId: parms->modelPhysicsId,
modelId: parms->modelBodyId,
selfId: parms->selfId,
modelContentsOverride: parms->modelContentsOverride);
goto LABEL_28;
case TRACE_CONTACTS_UNI_DIR:
case TRACE_CONTACTS_OMNI_DIR:
*(_DWORD *)results->data = 0;
idPolygonModelCollisionDetection::StartContacts(
tw,
result: (contactsResult_t *)results->data,
start: &parms->start,
dir: &parms->dir,
depth: parms->depth,
trm: (const idTraceModel *)subModelData,
trmAxis: (const idMat3 *)trm,
contentMask: (int)&parms->trmAxis,
modelOrigin: (const idVec3 *)parms->contentMask,
modelAxis: v13);
idPolygonModelCollisionDetection::TraceThroughSubModel(tw, subModelData, subModelNum);
idPolygonModelCollisionDetection::FinishContacts(
tw,
firstContact: 0,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis,
modelEntityNum: parms->modelEntityNum,
modelPhysicsId: parms->modelPhysicsId,
modelBodyId: parms->modelBodyId,
selfId: parms->selfId,
modelContentsOverride: v15);
goto LABEL_28;
default:
break;
}
if ( parms->type != TRACE_TRANSLATION )
{
*(_DWORD *)results->data = 0;
*(_DWORD *)&results->data[4] = 0;
idPolygonModelCollisionDetection::StartClip(
tw,
result: (clipResult_t *)results->data,
start: &parms->start,
trm,
trmAxis: &parms->trmAxis,
contentMask: parms->contentMask,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis);
idPolygonModelCollisionDetection::TraceThroughSubModel(tw, subModelData, subModelNum);
idPolygonModelCollisionDetection::FinishClip(
tw,
firstClipVert: 0,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis);
goto LABEL_28;
}
if ( !idPolygonModelCollisionDetection::StartTranslation(
tw,
result: (trace_t *)results->data,
contacts: nullptr,
start: &parms->start,
end: &parms->end,
trm,
trmAxis: &parms->trmAxis,
contentMask: parms->contentMask,
modelOrigin: v13->mat,
modelAxis: v16) )
goto LABEL_28;
LABEL_19:
idPolygonModelCollisionDetection::TraceThroughSubModel(tw, subModelData, subModelNum);
idPolygonModelCollisionDetection::FinishTranslation(
tw,
start: &parms->start,
end: &parms->end,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis,
modelEntityNum: parms->modelEntityNum,
modelPhysicsId: parms->modelPhysicsId,
modelBodyId: parms->modelBodyId,
selfId: (int)v13,
modelContentsOverride: (int)v16);
goto LABEL_28;
}
if ( idPolygonModelCollisionDetection::StartRotationPoint(
tw,
result: (trace_t *)results->data,
rorg: &parms->rotationOrigin,
axis: &parms->rotationAxis,
angle: parms->rotationAngle,
start: (const idVec3 *)subModelData,
contentMask: (int)&parms->start,
modelOrigin: (const idVec3 *)parms->contentMask,
modelAxis: (const idMat3 *)&parms->modelOrigin) )
{
idPolygonModelCollisionDetection::TraceThroughSubModel(tw, subModelData, subModelNum);
idPolygonModelCollisionDetection::FinishRotation(
tw,
rorg: &parms->rotationOrigin,
axis: &parms->rotationAxis,
angle: parms->rotationAngle,
start: (const idVec3 *)parms->modelPhysicsId,
trmAxis: (const idMat3 *)&parms->start,
modelOrigin: parms->trmAxis.mat,
modelAxis: (const idMat3 *)&parms->modelOrigin,
modelEntityNum: (int)&parms->modelAxis,
modelPhysicsId: (int)v13,
modelBodyId: (int)v16,
selfId: v18,
modelContentsOverride: v19);
}
}
LABEL_28:
if ( parms->testQuery && (parms->type == TRACE_TRANSLATION || parms->type == TRACE_ROTATION) )
{
idPolygonModelCollisionDetection::StartContents(
tw,
result: &v21,
start: (const idVec3 *)&results->data[4],
trm,
trmAxis: (const idMat3 *)&results->data[16],
contentMask: parms->contentMask,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis);
idPolygonModelCollisionDetection::TraceThroughSubModel(tw, subModelData, subModelNum);
idPolygonModelCollisionDetection::FinishContents(
tw,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis,
modelEntityNum: parms->modelEntityNum,
modelPhysicsId: parms->modelPhysicsId,
modelId: parms->modelBodyId,
selfId: parms->selfId,
modelContentsOverride: parms->modelContentsOverride);
if ( v21.c.contentFlags != 0 )
results->query.status |= 4u;
}
if ( results->query.status == QUERY_STATUS_PENDING )
results->query.status = QUERY_STATUS_SUCCESS;
results->query.profile[0] = tw->profile[0];
results->query.profile[1] = tw->profile[1];
results->query.profile[2] = tw->profile[2];
results->query.profile[3] = tw->profile[3];
results->query.profile[4] = tw->profile[4];
results->query.type = parms->type;
results->query.done = 1;
results->query.merged = parms->autoMerge;
}
// ========================================================================
// ?ExecutePolygonModelQuery@idCollisionQueryExecute@@SAXPAVidTraceWork@@AAUqueryResults_t@@PBUqueryParms_t@@PBVidTraceModel@@PBUcm_polygonModel_t@@@Z
// EA : 0x825E5CF0
// RVA : 0x005E5CF0
// PDB : w:\tech5\engine\cm\jobs\collisionquery.cpp
// ========================================================================
void __fastcall idCollisionQueryExecute::ExecutePolygonModelQuery(
idTraceWork *tw,
queryResults_t *results,
const queryParms_t *parms,
const idTraceModel *trm,
const cm_polygonModel_t *polygonModel)
{
const idMat3 *v11; // [sp+8h] [-878h]
int v12; // [sp+8h] [-878h]
int v13; // [sp+8h] [-878h]
const idMat3 *v14; // [sp+Ch] [-874h]
int v15; // [sp+Ch] [-874h]
int v16; // [sp+10h] [-870h]
int v17; // [sp+14h] [-86Ch]
trace_t v18; // [sp+B0h] [-7D0h] BYREF
trace_t v19; // [sp+480h] [-400h] BYREF
tw->profile[0] = 0;
tw->profile[1] = 0;
tw->profile[2] = 0;
tw->profile[3] = 0;
tw->profile[4] = 0;
if ( parms->testQuery && (parms->type == TRACE_TRANSLATION || parms->type == TRACE_ROTATION) )
{
idPolygonModelCollisionDetection::StartContents(
tw,
result: &v18,
start: &parms->start,
trm,
trmAxis: &parms->trmAxis,
contentMask: parms->contentMask,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis);
idPolygonModelCollisionDetection::TraceThroughModel(tw, model: polygonModel);
idPolygonModelCollisionDetection::FinishContents(
tw,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis,
modelEntityNum: parms->modelEntityNum,
modelPhysicsId: parms->modelPhysicsId,
modelId: parms->modelBodyId,
selfId: parms->selfId,
modelContentsOverride: parms->modelContentsOverride);
if ( v18.c.contentFlags != 0 )
results->query.status |= 2u;
}
if ( (unsigned int)(parms->type - 1) <= 8 )
{
if ( parms->type == TRACE_TRANSLATION_POINT )
{
if ( !idPolygonModelCollisionDetection::StartTranslationPoint(
tw,
result: (trace_t *)results->data,
start: &parms->start,
end: &parms->end,
contentMask: parms->contentMask,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis) )
goto LABEL_28;
goto LABEL_19;
}
if ( parms->type == TRACE_ROTATION )
{
if ( idPolygonModelCollisionDetection::StartRotation(
tw,
result: (trace_t *)results->data,
rorg: &parms->rotationOrigin,
axis: &parms->rotationAxis,
angle: parms->rotationAngle,
start: (const idVec3 *)polygonModel,
trm: (const idTraceModel *)&parms->start,
trmAxis: (const idMat3 *)trm,
contentMask: (int)&parms->trmAxis,
modelOrigin: v11->mat,
modelAxis: v14) )
{
idPolygonModelCollisionDetection::TraceThroughModel(tw, model: polygonModel);
idPolygonModelCollisionDetection::FinishRotation(
tw,
rorg: &parms->rotationOrigin,
axis: &parms->rotationAxis,
angle: parms->rotationAngle,
start: (const idVec3 *)parms->selfId,
trmAxis: (const idMat3 *)&parms->start,
modelOrigin: parms->trmAxis.mat,
modelAxis: (const idMat3 *)&parms->modelOrigin,
modelEntityNum: (int)&parms->modelAxis,
modelPhysicsId: v12,
modelBodyId: v15,
selfId: v16,
modelContentsOverride: v17);
}
goto LABEL_28;
}
if ( parms->type != TRACE_ROTATION_POINT )
{
switch ( parms->type )
{
case TRACE_CONTENTS:
idPolygonModelCollisionDetection::StartContents(
tw,
result: (trace_t *)results->data,
start: &parms->start,
trm,
trmAxis: &parms->trmAxis,
contentMask: parms->contentMask,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis);
idPolygonModelCollisionDetection::TraceThroughModel(tw, model: polygonModel);
idPolygonModelCollisionDetection::FinishContents(
tw,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis,
modelEntityNum: parms->modelEntityNum,
modelPhysicsId: parms->modelPhysicsId,
modelId: parms->modelBodyId,
selfId: parms->selfId,
modelContentsOverride: parms->modelContentsOverride);
goto LABEL_28;
case TRACE_CONTENTS_POINT:
idPolygonModelCollisionDetection::StartContentsPoint(
tw,
result: (trace_t *)results->data,
start: &parms->start,
contentMask: parms->contentMask,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis);
idPolygonModelCollisionDetection::TraceThroughModel(tw, model: polygonModel);
idPolygonModelCollisionDetection::FinishContents(
tw,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis,
modelEntityNum: parms->modelEntityNum,
modelPhysicsId: parms->modelPhysicsId,
modelId: parms->modelBodyId,
selfId: parms->selfId,
modelContentsOverride: parms->modelContentsOverride);
goto LABEL_28;
case TRACE_CONTACTS_UNI_DIR:
case TRACE_CONTACTS_OMNI_DIR:
*(_DWORD *)results->data = 0;
idPolygonModelCollisionDetection::StartContacts(
tw,
result: (contactsResult_t *)results->data,
start: &parms->start,
dir: &parms->dir,
depth: parms->depth,
trm: (const idTraceModel *)polygonModel,
trmAxis: (const idMat3 *)trm,
contentMask: (int)&parms->trmAxis,
modelOrigin: (const idVec3 *)parms->contentMask,
modelAxis: v11);
idPolygonModelCollisionDetection::TraceThroughModel(tw, model: polygonModel);
idPolygonModelCollisionDetection::FinishContacts(
tw,
firstContact: 0,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis,
modelEntityNum: parms->modelEntityNum,
modelPhysicsId: parms->modelPhysicsId,
modelBodyId: parms->modelBodyId,
selfId: parms->selfId,
modelContentsOverride: v13);
goto LABEL_28;
default:
break;
}
if ( parms->type != TRACE_TRANSLATION )
{
*(_DWORD *)&results->data[4] = 0;
*(_DWORD *)results->data = 0;
idPolygonModelCollisionDetection::StartClip(
tw,
result: (clipResult_t *)results->data,
start: &parms->start,
trm,
trmAxis: &parms->trmAxis,
contentMask: parms->contentMask,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis);
idPolygonModelCollisionDetection::TraceThroughModel(tw, model: polygonModel);
idPolygonModelCollisionDetection::FinishClip(
tw,
firstClipVert: 0,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis);
goto LABEL_28;
}
if ( !idPolygonModelCollisionDetection::StartTranslation(
tw,
result: (trace_t *)results->data,
contacts: nullptr,
start: &parms->start,
end: &parms->end,
trm,
trmAxis: &parms->trmAxis,
contentMask: parms->contentMask,
modelOrigin: v11->mat,
modelAxis: v14) )
goto LABEL_28;
LABEL_19:
idPolygonModelCollisionDetection::TraceThroughModel(tw, model: polygonModel);
idPolygonModelCollisionDetection::FinishTranslation(
tw,
start: &parms->start,
end: &parms->end,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis,
modelEntityNum: parms->modelEntityNum,
modelPhysicsId: parms->modelPhysicsId,
modelBodyId: parms->modelBodyId,
selfId: (int)v11,
modelContentsOverride: (int)v14);
goto LABEL_28;
}
if ( idPolygonModelCollisionDetection::StartRotationPoint(
tw,
result: (trace_t *)results->data,
rorg: &parms->rotationOrigin,
axis: &parms->rotationAxis,
angle: parms->rotationAngle,
start: (const idVec3 *)polygonModel,
contentMask: (int)&parms->start,
modelOrigin: (const idVec3 *)parms->contentMask,
modelAxis: (const idMat3 *)&parms->modelOrigin) )
{
idPolygonModelCollisionDetection::TraceThroughModel(tw, model: polygonModel);
idPolygonModelCollisionDetection::FinishRotation(
tw,
rorg: &parms->rotationOrigin,
axis: &parms->rotationAxis,
angle: parms->rotationAngle,
start: (const idVec3 *)parms->modelPhysicsId,
trmAxis: (const idMat3 *)&parms->start,
modelOrigin: parms->trmAxis.mat,
modelAxis: (const idMat3 *)&parms->modelOrigin,
modelEntityNum: (int)&parms->modelAxis,
modelPhysicsId: (int)v11,
modelBodyId: (int)v14,
selfId: v16,
modelContentsOverride: v17);
}
}
LABEL_28:
if ( parms->testQuery && (parms->type == TRACE_TRANSLATION || parms->type == TRACE_ROTATION) )
{
idPolygonModelCollisionDetection::StartContents(
tw,
result: &v19,
start: (const idVec3 *)&results->data[4],
trm,
trmAxis: (const idMat3 *)&results->data[16],
contentMask: parms->contentMask,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis);
idPolygonModelCollisionDetection::TraceThroughModel(tw, model: polygonModel);
idPolygonModelCollisionDetection::FinishContents(
tw,
modelOrigin: &parms->modelOrigin,
modelAxis: &parms->modelAxis,
modelEntityNum: parms->modelEntityNum,
modelPhysicsId: parms->modelPhysicsId,
modelId: parms->modelBodyId,
selfId: parms->selfId,
modelContentsOverride: parms->modelContentsOverride);
if ( v19.c.contentFlags != 0 )
results->query.status |= 4u;
}
if ( results->query.status == QUERY_STATUS_PENDING )
results->query.status = QUERY_STATUS_SUCCESS;
results->query.profile[0] = tw->profile[0];
results->query.profile[1] = tw->profile[1];
results->query.profile[2] = tw->profile[2];
results->query.profile[3] = tw->profile[3];
results->query.profile[4] = tw->profile[4];
results->query.type = parms->type;
results->query.done = 1;
results->query.merged = parms->autoMerge;
}
// ========================================================================
// ?ExecuteSphereModelQuery@idCollisionQueryExecute@@SAXAAUqueryResults_t@@PBUqueryParms_t@@PBVidJointMat@@PBUcm_sphereModel_t@@@Z
// EA : 0x825E62C8
// RVA : 0x005E62C8
// PDB : w:\tech5\engine\cm\jobs\collisionquery.cpp
// ========================================================================
void __fastcall idCollisionQueryExecute::ExecuteSphereModelQuery(
queryResults_t *results,
const queryParms_t *parms,
const idVec3 *modelJoints,
const cm_sphereModel_t *sphereModel)
{
int v6; // [sp+8h] [-B8h]
int v7; // [sp+Ch] [-B4h]
int v8; // [sp+10h] [-B0h]
int v9; // [sp+14h] [-ACh]
int v10; // [sp+18h] [-A8h]
if ( (unsigned int)(parms->type - 1) <= 8 )
{
switch ( parms->type )
{
case TRACE_TRANSLATION_POINT:
LABEL_10:
idSphereModelCollisionDetection::TraceThroughModel(
trace: (trace_t *)results->data,
csData: sphereModel,
start: &parms->start,
end: &parms->end,
radius: parms->depth,
trmAxis: (const idMat3 *)parms->selfId,
modelJoints: (const idJointMat *)&parms->trmAxis,
modelOrigin: modelJoints,
modelAxis: (const idMat3 *)&parms->modelOrigin,
modelEntityNum: v6,
modelPhysicsId: v7,
modelBodyId: v8,
selfId: v9,
modelContentsOverride: v10);
break;
case TRACE_ROTATION:
case TRACE_ROTATION_POINT:
case TRACE_CONTENTS:
case TRACE_CONTENTS_POINT:
*(float *)results->data = 1.0;
*(idVec3 *)&results->data[4] = parms->end;
*(idMat3 *)&results->data[16] = parms->trmAxis;
memset(Dst: &results->data[52], Val: 0, Size: 0x4Cu);
break;
case TRACE_CONTACTS_UNI_DIR:
case TRACE_CONTACTS_OMNI_DIR:
LABEL_13:
*(_DWORD *)results->data = 0;
break;
case TRACE_TRANSLATION:
goto LABEL_10;
default:
*(_DWORD *)&results->data[4] = 0;
goto LABEL_13;
}
}
if ( results->query.status == QUERY_STATUS_PENDING )
results->query.status = QUERY_STATUS_SUCCESS;
results->query.profile[0] = 0;
results->query.profile[1] = 0;
results->query.profile[2] = 0;
results->query.profile[3] = 0;
results->query.profile[4] = 0;
results->query.type = parms->type;
results->query.done = 1;
results->query.merged = parms->autoMerge;
}
// ========================================================================
// ?SetupDependentParms@idCollisionQueryExecute@@SAXPAUqueryParms_t@@PBU2@PBUqueryResults_t@@W4dependencyType_t@@22@Z
// EA : 0x825E6448
// RVA : 0x005E6448
// PDB : w:\tech5\engine\cm\jobs\collisionquery.cpp
// ========================================================================
void __fastcall idCollisionQueryExecute::SetupDependentParms(
queryParms_t *resultParms,
const queryParms_t *sourceParms,
const queryResults_t *modelPosition,
const dependencyType_t dependencyType,
const queryResults_t *dependency1,
const queryResults_t *dependency2)
{
unsigned __int8 *data; // r11
float *v13; // r10
float *v14; // r11
float *v15; // r11
double v16; // fp10
double v17; // fp4
double v18; // fp6
double v19; // fp2
double y; // fp1
double x; // fp10
double v22; // fp3
double v23; // fp2
float *v24; // r11
float *v25; // r11
double v26; // fp4
double v27; // fp11
double v28; // fp3
double v29; // fp10
float *v30; // r10
double v31; // fp9
double v32; // fp8
double v33; // fp6
double v34; // fp5
double z; // fp11
double v36; // fp0
double v37; // fp3
double v38; // fp2
double v39; // fp11
double v40; // fp10
double v41; // fp7
double v42; // fp8
float *v43; // r11
double v44; // fp5
double v45; // fp4
double v46; // fp11
double v47; // fp2
double v48; // fp9
double v49; // fp8
double v50; // fp6
double v51; // fp5
unsigned __int8 *v52; // r4
float *v53; // r11
double v54; // fp9
double v55; // fp8
double v56; // fp5
double v57; // fp6
double v58; // fp4
double v59; // fp3
double v60; // fp2
double v61; // fp1
double v62; // fp11
double v63; // fp7
double v64; // fp6
double v65; // fp9
double v66; // fp5
double v67; // fp3
double v68; // fp2
double v69; // fp1
double v70; // fp5
double v71; // fp4
double v72; // fp9
double v73; // fp8
idMat3 v74[2]; // [sp+50h] [-60h] BYREF
queryParms_t::operator=(this: resultParms, __that: sourceParms);
if ( modelPosition != nullptr )
{
resultParms->modelOrigin.x = *(float *)&modelPosition->data[4];
resultParms->modelOrigin.y = *(float *)&modelPosition->data[8];
resultParms->modelOrigin.z = *(float *)&modelPosition->data[12];
resultParms->modelAxis.mat[0].x = *(float *)&modelPosition->data[16];
resultParms->modelAxis.mat[0].y = *(float *)&modelPosition->data[20];
resultParms->modelAxis.mat[0].z = *(float *)&modelPosition->data[24];
resultParms->modelAxis.mat[1].x = *(float *)&modelPosition->data[28];
resultParms->modelAxis.mat[1].y = *(float *)&modelPosition->data[32];
resultParms->modelAxis.mat[1].z = *(float *)&modelPosition->data[36];
resultParms->modelAxis.mat[2].x = *(float *)&modelPosition->data[40];
resultParms->modelAxis.mat[2].y = *(float *)&modelPosition->data[44];
resultParms->modelAxis.mat[2].z = *(float *)&modelPosition->data[48];
}
data = nullptr;
if ( dependency1 != nullptr )
data = dependency1->data;
v13 = nullptr;
if ( dependency2 != nullptr )
v13 = (float *)dependency2->data;
switch ( dependencyType )
{
case DEPENDENCY_MOTION_ROTATION:
v14 = (float *)(data + 4);
resultParms->start.x = *v14;
resultParms->start.y = v14[1];
resultParms->start.z = v14[2];
resultParms->rotationOrigin.x = *v14;
resultParms->rotationOrigin.y = v14[1];
resultParms->rotationOrigin.z = v14[2];
break;
case DEPENDENCY_MOTION_CONTACTS:
resultParms->start.x = *((float *)data + 1);
resultParms->start.y = *((float *)data + 2);
resultParms->start.z = *((float *)data + 3);
resultParms->trmAxis.mat[0].x = *((float *)data + 4);
resultParms->trmAxis.mat[0].y = *((float *)data + 5);
resultParms->trmAxis.mat[0].z = *((float *)data + 6);
resultParms->trmAxis.mat[1].x = *((float *)data + 7);
resultParms->trmAxis.mat[1].y = *((float *)data + 8);
resultParms->trmAxis.mat[1].z = *((float *)data + 9);
resultParms->trmAxis.mat[2].x = *((float *)data + 10);
resultParms->trmAxis.mat[2].y = *((float *)data + 11);
resultParms->trmAxis.mat[2].z = *((float *)data + 12);
break;
case DEPENDENCY_STEPMOVE_STEP_UP:
case DEPENDENCY_STEPMOVE_STEP_DOWN:
v15 = (float *)(data + 4);
resultParms->start.x = *v15;
resultParms->start.y = v15[1];
resultParms->start.z = v15[2];
v16 = v15[2];
v17 = (float)(sourceParms->dir.y * sourceParms->depth);
v18 = v15[1];
v19 = (float)(sourceParms->dir.z * sourceParms->depth);
resultParms->end.x = *v15 + (float)(sourceParms->dir.x * sourceParms->depth);
resultParms->end.y = (float)v17 + (float)v18;
resultParms->end.z = (float)v16 + (float)v19;
break;
case DEPENDENCY_STEPMOVE_2ND_MOVE:
resultParms->start.x = *((float *)data + 1);
resultParms->start.y = *((float *)data + 2);
resultParms->start.z = *((float *)data + 3);
y = sourceParms->end.y;
x = sourceParms->end.x;
v22 = (float)(sourceParms->dir.x * (float)(sourceParms->depth * *(float *)data));
v23 = (float)(sourceParms->dir.y * (float)(sourceParms->depth * *(float *)data));
resultParms->end.z = sourceParms->end.z
+ (float)(sourceParms->dir.z * (float)(sourceParms->depth * *(float *)data));
resultParms->end.x = (float)x + (float)v22;
resultParms->end.y = (float)y + (float)v23;
break;
case DEPENDENCY_STEPMOVE_CONTACTS:
case DEPENDENCY_SLIDEMOVE_CONTACTS:
v24 = (float *)(data + 4);
resultParms->start.x = *v24;
resultParms->start.y = v24[1];
resultParms->start.z = v24[2];
resultParms->end.x = *v24;
resultParms->end.y = v24[1];
resultParms->end.z = v24[2];
break;
case DEPENDENCY_SLIDEMOVE_STEP_UP_1:
v25 = (float *)(data + 4);
resultParms->start.x = *v25;
resultParms->start.y = v25[1];
resultParms->start.z = v25[2];
v26 = (float)(sourceParms->dir.y * sourceParms->depth);
v27 = v25[2];
v28 = (float)(sourceParms->dir.z * sourceParms->depth);
v29 = v25[1];
resultParms->end.x = *v25 + (float)(sourceParms->dir.x * sourceParms->depth);
resultParms->end.y = (float)v26 + (float)v29;
resultParms->end.z = (float)v27 + (float)v28;
break;
case DEPENDENCY_SLIDEMOVE_STEP_UP_2:
case DEPENDENCY_SLIDEMOVE_STEP_UP_3:
case DEPENDENCY_SLIDEMOVE_STEP_UP_4:
case DEPENDENCY_SLIDEMOVE_STEP_DOWN_2:
case DEPENDENCY_SLIDEMOVE_STEP_DOWN_3:
case DEPENDENCY_SLIDEMOVE_STEP_DOWN_4:
v30 = (float *)(data + 4);
resultParms->start.x = *((float *)data + 1);
resultParms->start.y = *((float *)data + 2);
resultParms->start.z = *((float *)data + 3);
if ( (data[124] & 0x20) != 0 )
goto LABEL_16;
v31 = (float)(sourceParms->dir.y * sourceParms->depth);
v32 = (float)(sourceParms->dir.z * sourceParms->depth);
v33 = *((float *)data + 2);
v34 = *((float *)data + 3);
resultParms->end.x = (float)(sourceParms->dir.x * sourceParms->depth) + *v30;
resultParms->end.y = (float)v31 + (float)v33;
resultParms->end.z = (float)v34 + (float)v32;
break;
case DEPENDENCY_SLIDEMOVE_2ND_MOVE_1:
resultParms->start.x = *((float *)data + 1);
resultParms->start.y = *((float *)data + 2);
resultParms->start.z = *((float *)data + 3);
z = sourceParms->end.z;
v36 = sourceParms->end.y;
v37 = (float)(sourceParms->dir.y * (float)(sourceParms->depth * *(float *)data));
v38 = (float)(sourceParms->dir.z * (float)(sourceParms->depth * *(float *)data));
resultParms->end.x = sourceParms->end.x
+ (float)(sourceParms->dir.x * (float)(sourceParms->depth * *(float *)data));
resultParms->end.y = (float)v36 + (float)v37;
resultParms->end.z = (float)z + (float)v38;
break;
case DEPENDENCY_SLIDEMOVE_2ND_MOVE_2:
case DEPENDENCY_SLIDEMOVE_2ND_MOVE_3:
case DEPENDENCY_SLIDEMOVE_2ND_MOVE_4:
resultParms->start.x = *((float *)data + 1);
resultParms->start.y = *((float *)data + 2);
resultParms->start.z = *((float *)data + 3);
if ( (data[124] & 0x20) != 0 )
{
resultParms->end.x = *((float *)data + 1);
resultParms->end.y = *((float *)data + 2);
resultParms->end.z = *((float *)data + 3);
}
else
{
v39 = (float)(v13[2] + (float)(v13[18] * v13[20]));
v40 = (float)(v13[3] + (float)(v13[19] * v13[20]));
v41 = (float)(sourceParms->dir.z * (float)(sourceParms->depth * *(float *)data));
v42 = (float)(sourceParms->dir.y * (float)(sourceParms->depth * *(float *)data));
resultParms->end.x = (float)((float)(v13[20] * v13[17]) + v13[1])
+ (float)(sourceParms->dir.x * (float)(sourceParms->depth * *(float *)data));
resultParms->end.z = (float)v40 + (float)v41;
resultParms->end.y = (float)v39 + (float)v42;
}
break;
case DEPENDENCY_SLIDEMOVE_STEP_DOWN_1:
v43 = (float *)(data + 4);
resultParms->start.x = *v43;
resultParms->start.y = v43[1];
resultParms->start.z = v43[2];
v44 = (float)(sourceParms->dir.z * sourceParms->depth);
v45 = (float)(sourceParms->dir.x * sourceParms->depth);
v46 = *v43;
v47 = v43[2];
resultParms->end.y = (float)(sourceParms->dir.y * sourceParms->depth) + v43[1];
resultParms->end.z = (float)v47 + (float)v44;
resultParms->end.x = (float)v45 + (float)v46;
break;
case DEPENDENCY_SLIDEMOVE_SLIDE:
v30 = (float *)(data + 4);
resultParms->start.x = *((float *)data + 1);
resultParms->start.y = *((float *)data + 2);
resultParms->start.z = *((float *)data + 3);
if ( (data[124] & 0x20) != 0 )
{
LABEL_16:
resultParms->end.x = *v30;
resultParms->end.y = v30[1];
resultParms->end.z = v30[2];
}
else
{
v48 = (float)(*((float *)data + 18) * *((float *)data + 20));
v49 = (float)(*((float *)data + 19) * *((float *)data + 20));
v50 = *((float *)data + 2);
v51 = *((float *)data + 3);
resultParms->end.x = (float)(*((float *)data + 20) * *((float *)data + 17)) + *v30;
resultParms->end.y = (float)v48 + (float)v50;
resultParms->end.z = (float)v51 + (float)v49;
}
break;
case DEPENDENCY_LOCAL_SPACE:
v52 = data + 16;
v54 = (float)(sourceParms->start.z * *((float *)data + 10));
v55 = (float)(sourceParms->start.x * *((float *)data + 5));
v56 = (float)(sourceParms->start.z * *((float *)data + 12));
v57 = *((float *)data + 7);
v58 = *((float *)data + 8);
v59 = *((float *)data + 6);
v60 = *((float *)data + 4);
v61 = *((float *)data + 11);
v62 = *((float *)data + 9);
v53 = (float *)(data + 4);
v63 = v53[1];
v64 = (float)((float)(sourceParms->start.y * (float)v57) + (float)v54);
v65 = v53[2];
v66 = (float)((float)(sourceParms->start.x * (float)v59) + (float)v56);
v67 = (float)((float)(sourceParms->start.z * (float)v61)
+ (float)((float)(sourceParms->start.y * (float)v58) + (float)v55));
v69 = (float)((float)((float)(sourceParms->start.x * (float)v60) + (float)v64) + *v53);
v68 = (float)((float)(sourceParms->start.y * (float)v62) + (float)v66);
resultParms->start.x = v69;
resultParms->start.y = (float)v67 + (float)v63;
resultParms->start.z = (float)v65 + (float)v68;
v70 = v53[2];
v71 = v53[1];
v72 = (float)((float)(*((float *)v52 + 7) * sourceParms->end.z)
+ (float)((float)(*((float *)v52 + 1) * sourceParms->end.x)
+ (float)(*((float *)v52 + 4) * sourceParms->end.y)));
v73 = (float)((float)(*((float *)v52 + 5) * sourceParms->end.y)
+ (float)((float)(*((float *)v52 + 8) * sourceParms->end.z)
+ (float)(sourceParms->end.x * *((float *)v52 + 2))));
resultParms->end.x = (float)((float)(sourceParms->end.x * *(float *)v52)
+ (float)((float)(sourceParms->end.y * *((float *)v52 + 3))
+ (float)(sourceParms->end.z * *((float *)v52 + 6))))
+ *v53;
resultParms->end.y = (float)v72 + (float)v71;
resultParms->end.z = (float)v70 + (float)v73;
resultParms->trmAxis = *idMat3::operator*(this: v74, result: (idMat3 *)v52, a: &sourceParms->trmAxis);
break;
default:
return;
}
}
@@ -0,0 +1,56 @@
// ========================================================================
// ?CopyFrom@contactsResult_t@@QAAXABU1@@Z
// EA : 0x825DDB08
// RVA : 0x005DDB08
// PDB : w:\tech5\engine\cm\jobs\collisionresults.h
// ========================================================================
void __fastcall contactsResult_t::CopyFrom(contactsResult_t *this, const contactsResult_t *other)
{
int v2; // r9
bool v3; // cr57
char *v4; // r10
float *p_y; // r11
v2 = 0;
v3 = other->numContacts > 0;
this->numContacts = other->numContacts;
if ( v3 )
{
v4 = (char *)&other->pad[2] + 3;
p_y = &this->contacts[0].point.y;
do
{
if ( v2 >= 12 )
break;
++v2;
*(p_y - 2) = *(float *)(v4 + 1);
*(p_y - 1) = *(float *)(v4 + 5);
*p_y = *(float *)((char *)p_y + (char *)other - (char *)this);
p_y[1] = *(float *)(v4 + 13);
p_y[2] = *(float *)(v4 + 17);
p_y[3] = *(float *)(v4 + 21);
p_y[4] = *(float *)(v4 + 25);
p_y[5] = *(float *)(v4 + 29);
p_y[6] = *(float *)(v4 + 33);
p_y[7] = *(float *)(v4 + 37);
p_y[8] = *(float *)(v4 + 41);
p_y[9] = *(float *)(v4 + 45);
p_y[10] = *(float *)(v4 + 49);
p_y[11] = *(float *)(v4 + 53);
p_y[12] = *(float *)(v4 + 57);
p_y[13] = *(float *)(v4 + 61);
p_y[14] = *(float *)(v4 + 65);
p_y[15] = *(float *)(v4 + 69);
*((_BYTE *)p_y + 64) = v4[73];
*((_BYTE *)p_y + 65) = v4[74];
*((_BYTE *)p_y + 66) = v4[75];
v4 += 76;
*((_BYTE *)p_y + 67) = *v4;
p_y += 19;
}
while ( v2 < this->numContacts );
}
}
@@ -0,0 +1,216 @@
// ========================================================================
// ?SetupForSubModel@idModelCheckCounts@@QAAXPBUcm_subModelData_t@@@Z
// EA : 0x825E6B78
// RVA : 0x005E6B78
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_cache.cpp
// ========================================================================
void __fastcall idModelCheckCounts::SetupForSubModel(idModelCheckCounts *this, const cm_subModelData_t *subModelData)
{
unsigned __int8 *v2; // r11
unsigned __int8 *v3; // r11
this->vertexCheckCounts = (unsigned __int8 *)this;
v2 = &this->baseCheckCounts[(int)((subModelData->numVertices + 7) & 0xFFFFFFF8) >> 3];
this->edgeCheckCounts = v2;
v3 = &v2[(int)((subModelData->numEdges + 7) & 0xFFFFFFF8) / 8];
this->polygonCheckCounts = v3;
this->polytopeCheckCounts = &v3[(int)((subModelData->numPolygons + 7) & 0xFFFFFFF8) >> 3];
XMemSet(
dest: this,
c: 0,
count: (((int)((subModelData->numPolytopes + 7) & 0xFFFFFFF8) >> 3)
+ ((int)((subModelData->numVertices + 7) & 0xFFFFFFF8) >> 3)
+ ((int)((subModelData->numPolygons + 7) & 0xFFFFFFF8) >> 3)
+ ((int)((subModelData->numEdges + 7) & 0xFFFFFFF8) >> 3)
+ 15)
& 0xFFFFFFF0);
}
// ========================================================================
// ?Init@idTraceWork@@QAAXXZ
// EA : 0x825E6C40
// RVA : 0x005E6C40
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_cache.cpp
// ========================================================================
void __fastcall idTraceWork::Init(idTraceWork *this)
{
this->numVerts = 0;
this->numEdges = 0;
this->numPolys = 0;
this->contents = 0;
this->start.w = 0.0;
this->start.z = 0.0;
this->start.y = 0.0;
this->start.x = 0.0;
this->end.w = 0.0;
this->end.z = 0.0;
this->end.y = 0.0;
this->end.x = 0.0;
this->dir.w = 0.0;
this->dir.z = 0.0;
this->dir.y = 0.0;
this->dir.x = 0.0;
this->negDir.w = 0.0;
this->negDir.z = 0.0;
this->negDir.y = 0.0;
this->negDir.x = 0.0;
this->trmTransform.mat[0] = 0.0;
this->trmTransform.mat[1] = 0.0;
this->trmTransform.mat[2] = 0.0;
this->trmTransform.mat[3] = 0.0;
this->trmTransform.mat[4] = 0.0;
this->trmTransform.mat[5] = 0.0;
this->trmTransform.mat[6] = 0.0;
this->trmTransform.mat[7] = 0.0;
this->trmTransform.mat[8] = 0.0;
this->trmTransform.mat[9] = 0.0;
this->trmTransform.mat[10] = 0.0;
this->trmTransform.mat[11] = 0.0;
this->trmBoundsMin.w = 0.0;
this->trmBoundsMin.z = 0.0;
this->trmBoundsMin.y = 0.0;
this->trmBoundsMin.x = 0.0;
this->trmBoundsMax.w = 0.0;
this->trmBoundsMax.z = 0.0;
this->trmBoundsMax.y = 0.0;
this->trmBoundsMax.x = 0.0;
this->trmExtents.w = 0.0;
this->trmExtents.z = 0.0;
this->trmExtents.y = 0.0;
this->trmExtents.x = 0.0;
this->traceBoundsMin.w = 0.0;
this->traceBoundsMin.z = 0.0;
this->traceBoundsMin.y = 0.0;
this->traceBoundsMin.x = 0.0;
this->traceBoundsMax.w = 0.0;
this->traceBoundsMax.z = 0.0;
this->traceBoundsMax.y = 0.0;
this->traceBoundsMax.x = 0.0;
*(_DWORD *)&this->traceBoundsShort.b[1][1] = 0;
*(_DWORD *)&this->traceBoundsShort.b[0][2] = 0;
this->traceBoundsShort.b[0][1] = 0;
this->traceBoundsShort.b[0][0] = 0;
this->heartPlane1.d = 0.0;
this->heartPlane1.c = 0.0;
this->heartPlane1.b = 0.0;
this->heartPlane1.a = 0.0;
this->heartPlane2.d = 0.0;
this->heartPlane2.c = 0.0;
this->heartPlane2.b = 0.0;
this->heartPlane2.a = 0.0;
this->maxDistFromHeartPlane1 = 0.0;
this->maxDistFromHeartPlane2 = 0.0;
this->fraction = 0.0;
this->angle = 0.0;
this->negAngle = 0.0;
this->maxTan = 0.0;
this->initialTan = 0.0;
this->origin.w = 0.0;
this->origin.z = 0.0;
this->origin.y = 0.0;
this->origin.x = 0.0;
this->axis.w = 0.0;
this->axis.z = 0.0;
this->axis.y = 0.0;
this->axis.x = 0.0;
this->ZAxisTransform.mat[0] = 0.0;
this->ZAxisTransform.mat[1] = 0.0;
this->ZAxisTransform.mat[2] = 0.0;
this->ZAxisTransform.mat[3] = 0.0;
this->ZAxisTransform.mat[4] = 0.0;
this->ZAxisTransform.mat[5] = 0.0;
this->ZAxisTransform.mat[6] = 0.0;
this->ZAxisTransform.mat[7] = 0.0;
this->ZAxisTransform.mat[8] = 0.0;
this->ZAxisTransform.mat[9] = 0.0;
this->ZAxisTransform.mat[10] = 0.0;
this->ZAxisTransform.mat[11] = 0.0;
this->endTransform.mat[0] = 0.0;
this->endTransform.mat[1] = 0.0;
this->endTransform.mat[2] = 0.0;
this->endTransform.mat[3] = 0.0;
this->endTransform.mat[4] = 0.0;
this->endTransform.mat[5] = 0.0;
this->endTransform.mat[6] = 0.0;
this->endTransform.mat[7] = 0.0;
this->endTransform.mat[8] = 0.0;
this->endTransform.mat[9] = 0.0;
this->endTransform.mat[10] = 0.0;
this->endTransform.mat[11] = 0.0;
this->traceType = TRACE_TRANSLATION;
this->contactDepth = 0.0;
this->isConvex = false;
this->quickExit = false;
XMemSet(dest: &this->modelCheckCounts, c: 0, count: 0x3A0u);
this->modelCheckCounts.checkCount = 0;
this->modelCheckCounts.vertexCheckCounts = nullptr;
this->modelCheckCounts.edgeCheckCounts = nullptr;
this->modelCheckCounts.polygonCheckCounts = nullptr;
this->modelCheckCounts.polytopeCheckCounts = nullptr;
this->traceResult = nullptr;
this->contactsResult = nullptr;
this->clipResult = nullptr;
this->pad = 0;
this->subModelNum = 0;
this->polygonSideCache.side = 0;
XMemSet(dest: this, c: 0, count: 0x200u);
XMemSet(dest: this->edges, c: 0, count: 0x200u);
XMemSet(dest: this->polys, c: 0, count: 0x400u);
XMemSet(dest: this->vertexPosition, c: 0, count: 0x200u);
XMemSet(dest: this->vertexEndPosition, c: 0, count: 0x200u);
XMemSet(dest: this->vertexPluecker, c: 0, count: 0x300u);
XMemSet(dest: this->edgePluecker, c: 0, count: 0x300u);
XMemSet(dest: this->edgeZAxisPluecker, c: 0, count: 0x300u);
XMemSet(dest: this->edgeNormal, c: 0, count: 0x200u);
XMemSet(dest: this->vertIsUsed, c: 0, count: 0x20u);
XMemSet(dest: this->edgeIsUsed, c: 0, count: 0x20u);
XMemSet(dest: this->polyIsUsed, c: 0, count: 0x10u);
XMemSet(dest: this->polygonEdgeSideCache, c: 0, count: 0x50u);
XMemSet(dest: this->polygonVertexSideCache, c: 0, count: 0x50u);
XMemSet(dest: this->polygonEdgePlueckerCache, c: 0, count: 0x180u);
XMemSet(dest: this->polygonVertexPlueckerCache, c: 0, count: 0x180u);
XMemSet(dest: &this->subModelPtrs, c: 0, count: 0x28u);
XMemSet(dest: this->profile, c: 0, count: 0x14u);
}
// ========================================================================
// ?AllocTraceWork@idPolygonModelCollisionDetection@@SAPAVidTraceWork@@XZ
// EA : 0x825E6F90
// RVA : 0x005E6F90
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_cache.cpp
// ========================================================================
idTraceWork *__fastcall idPolygonModelCollisionDetection::AllocTraceWork()
{
idTraceWork *v0; // r31
v0 = (idTraceWork *)idMem::AllocWithLocation(
this: &mem,
location: "w:\\tech5\\engine\\cm\\jobs\\polygonmodel\\PolygonModel_cache.cpp(150) : TAG_COLLISION",
size: 0x241Cu,
tag: TAG_COLLISION,
zeroBuffer: false,
align: ALIGN_16,
heap: HEAP_DEFAULTHEAP);
idTraceWork::Init(this: v0);
return v0;
}
// ========================================================================
// ?GetTraceWorkSPUSize@idPolygonModelCollisionDetection@@SAHXZ
// EA : 0x825E6FE8
// RVA : 0x005E6FE8
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_cache.cpp
// ========================================================================
int __fastcall idPolygonModelCollisionDetection::GetTraceWorkSPUSize()
{
return 9244;
}
@@ -0,0 +1,474 @@
// ========================================================================
// ?CM_BoundsPlaneSide@@YAHABVidVec4@@0ABVidPlane@@@Z
// EA : 0x825E53C0
// RVA : 0x005E53C0
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
int __fastcall CM_BoundsPlaneSide(const idVec4 *boundsMin, const idVec4 *boundsMax, const idPlane *plane)
{
double v3; // fp4
double v4; // fp3
double v5; // fp1
int result; // r3
double v7; // fp13
v3 = __fabs((float)((float)(boundsMax->x - (float)((float)(boundsMin->x + boundsMax->x) * (float)0.5)) * plane->a));
v4 = __fabs((float)((float)(boundsMax->y - (float)((float)(boundsMin->y + boundsMax->y) * (float)0.5)) * plane->b));
v5 = __fabs((float)((float)(boundsMax->z - (float)((float)(boundsMin->z + boundsMax->z) * (float)0.5)) * plane->c));
if ( (float)((float)((float)((float)(plane->a * (float)((float)(boundsMin->x + boundsMax->x) * (float)0.5))
+ (float)((float)(plane->b * (float)((float)(boundsMin->y + boundsMax->y) * (float)0.5))
+ (float)(plane->c * (float)((float)(boundsMin->z + boundsMax->z) * (float)0.5))))
+ plane->d)
- (float)((float)((float)v4 + (float)v3) + (float)v5)) > 0.1 )
return 0;
v7 = (float)((float)((float)((float)v4 + (float)v3) + (float)v5)
+ (float)((float)((float)(plane->a * (float)((float)(boundsMin->x + boundsMax->x) * (float)0.5))
+ (float)((float)(plane->b * (float)((float)(boundsMin->y + boundsMax->y) * (float)0.5))
+ (float)(plane->c * (float)((float)(boundsMin->z + boundsMax->z) * (float)0.5))))
+ plane->d));
result = 1;
if ( v7 >= -0.1 )
return 3;
return result;
}
// ========================================================================
// ?CM_BoundsShortPlaneCull@@YA_NABVidBoundsShort@@ABVidPlane@@M@Z
// EA : 0x825E5480
// RVA : 0x005E5480
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
BOOL __fastcall CM_BoundsShortPlaneCull(
const idBoundsShort *bs,
const idPlane *plane,
double cmpdist,
double a4,
double a5,
double a6,
double a7,
double a8,
double a9,
double a10,
float a11,
float a12,
float a13,
float a14,
float a15,
float a16,
float a17,
float a18)
{
char v23; // cr56
char v24; // cr57
char v25; // cr58
char v26; // cr59
char v27; // r6
unsigned __int8 v29; // cr56
unsigned __int8 v30; // cr57
__asm { lvx128 v63, r0, r3 }
_R10 = 16;
__asm
{
lvx128 v61, r0, r4
vsldoi128 v60, v95, v63, 6
}
_R9 = &vmx_float_one;
__asm { vupkhsh128 v59, v63 }
_R8 = 64;
_R7 = &a18;
__asm
{
vupkhsh128 v58, v60
vcsxwfp128 v57, v59, 0
lvx128 v62, r9, r10
lvx128 v63, r9, r8
vand128 v56, v93, v63
lvx128 v63, r0, r9
vcsxwfp128 v55, v58, 0
lvlx128 v54, r0, r7
vspltw128 v53, v54, 0
vaddfp128 v52, v89, v55
vmulfp128 v51, v84, v62
vsubfp128 v50, v87, v51
vrlimi128 v51, v63, 1, 0
vmsum4fp128 v49, v93, v51
vmsum3fp128 v48, v88, v50
vaddfp128 v47, v80, v53
vcmpgtfp128. v46, v81, v47
}
v27 = (v23 << 7) | (v24 << 6) | (32 * v25) | (16 * v26);
_R5 = 48;
__asm
{
lvx128 v63, r9, r5
vxor128 v45, v79, v63
vcmpgtfp128. v44, v77, v49
}
return (((v29 << 7) | (v30 << 6)) & 0x80) != 0 || v27 < 0;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_firstOnePlusTwoUlps''
// EA : 0x833360C8
// RVA : 0x013360C8
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_firstOnePlusTwoUlps__()
{
vmx_float_firstOnePlusTwoUlps.vector4_f32[0] = (float)((float)0.00000011920929 * (float)2.0) + (float)1.0;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_posInfinity''
// EA : 0x833360F0
// RVA : 0x013360F0
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_posInfinity__()
{
vmx_float_posInfinity.vector4_f32[0] = 1.0e30;
vmx_float_posInfinity.vector4_f32[1] = 1.0e30;
vmx_float_posInfinity.vector4_f32[2] = 1.0e30;
vmx_float_posInfinity.vector4_f32[3] = 1.0e30;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_negInfinity''
// EA : 0x83336118
// RVA : 0x01336118
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_negInfinity__()
{
vmx_float_negInfinity.vector4_f32[0] = -1.0e30;
vmx_float_negInfinity.vector4_f32[1] = -1.0e30;
vmx_float_negInfinity.vector4_f32[2] = -1.0e30;
vmx_float_negInfinity.vector4_f32[3] = -1.0e30;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_firstOnePlusTwoUlps''_0
// EA : 0x83336140
// RVA : 0x01336140
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_firstOnePlusTwoUlps___0()
{
vmx_float_firstOnePlusTwoUlps_0.vector4_f32[0] = (float)((float)0.00000011920929 * (float)2.0) + (float)1.0;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_posInfinity''_0
// EA : 0x83336168
// RVA : 0x01336168
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_posInfinity___0()
{
vmx_float_posInfinity_0.vector4_f32[0] = 1.0e30;
vmx_float_posInfinity_0.vector4_f32[1] = 1.0e30;
vmx_float_posInfinity_0.vector4_f32[2] = 1.0e30;
vmx_float_posInfinity_0.vector4_f32[3] = 1.0e30;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_negInfinity''_0
// EA : 0x83336190
// RVA : 0x01336190
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_negInfinity___0()
{
vmx_float_negInfinity_0.vector4_f32[0] = -1.0e30;
vmx_float_negInfinity_0.vector4_f32[1] = -1.0e30;
vmx_float_negInfinity_0.vector4_f32[2] = -1.0e30;
vmx_float_negInfinity_0.vector4_f32[3] = -1.0e30;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_firstOnePlusTwoUlps''_1
// EA : 0x833361B8
// RVA : 0x013361B8
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_firstOnePlusTwoUlps___1()
{
vmx_float_firstOnePlusTwoUlps_1.vector4_f32[0] = (float)((float)0.00000011920929 * (float)2.0) + (float)1.0;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_posInfinity''_1
// EA : 0x833361E0
// RVA : 0x013361E0
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_posInfinity___1()
{
vmx_float_posInfinity_1.vector4_f32[0] = 1.0e30;
vmx_float_posInfinity_1.vector4_f32[1] = 1.0e30;
vmx_float_posInfinity_1.vector4_f32[2] = 1.0e30;
vmx_float_posInfinity_1.vector4_f32[3] = 1.0e30;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_negInfinity''_1
// EA : 0x83336208
// RVA : 0x01336208
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_negInfinity___1()
{
vmx_float_negInfinity_1.vector4_f32[0] = -1.0e30;
vmx_float_negInfinity_1.vector4_f32[1] = -1.0e30;
vmx_float_negInfinity_1.vector4_f32[2] = -1.0e30;
vmx_float_negInfinity_1.vector4_f32[3] = -1.0e30;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_firstOnePlusTwoUlps''_2
// EA : 0x83336230
// RVA : 0x01336230
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_firstOnePlusTwoUlps___2()
{
vmx_float_firstOnePlusTwoUlps_2.vector4_f32[0] = (float)((float)0.00000011920929 * (float)2.0) + (float)1.0;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_posInfinity''_2
// EA : 0x83336258
// RVA : 0x01336258
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_posInfinity___2()
{
vmx_float_posInfinity_2.vector4_f32[0] = 1.0e30;
vmx_float_posInfinity_2.vector4_f32[1] = 1.0e30;
vmx_float_posInfinity_2.vector4_f32[2] = 1.0e30;
vmx_float_posInfinity_2.vector4_f32[3] = 1.0e30;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_negInfinity''_2
// EA : 0x83336280
// RVA : 0x01336280
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_negInfinity___2()
{
vmx_float_negInfinity_2.vector4_f32[0] = -1.0e30;
vmx_float_negInfinity_2.vector4_f32[1] = -1.0e30;
vmx_float_negInfinity_2.vector4_f32[2] = -1.0e30;
vmx_float_negInfinity_2.vector4_f32[3] = -1.0e30;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_firstOnePlusTwoUlps''_3
// EA : 0x833362A8
// RVA : 0x013362A8
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_firstOnePlusTwoUlps___3()
{
vmx_float_firstOnePlusTwoUlps_3.vector4_f32[0] = (float)((float)0.00000011920929 * (float)2.0) + (float)1.0;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_posInfinity''_3
// EA : 0x833362D0
// RVA : 0x013362D0
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_posInfinity___3()
{
vmx_float_posInfinity_3.vector4_f32[0] = 1.0e30;
vmx_float_posInfinity_3.vector4_f32[1] = 1.0e30;
vmx_float_posInfinity_3.vector4_f32[2] = 1.0e30;
vmx_float_posInfinity_3.vector4_f32[3] = 1.0e30;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_negInfinity''_3
// EA : 0x833362F8
// RVA : 0x013362F8
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_negInfinity___3()
{
vmx_float_negInfinity_3.vector4_f32[0] = -1.0e30;
vmx_float_negInfinity_3.vector4_f32[1] = -1.0e30;
vmx_float_negInfinity_3.vector4_f32[2] = -1.0e30;
vmx_float_negInfinity_3.vector4_f32[3] = -1.0e30;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_firstOnePlusTwoUlps''_4
// EA : 0x83336320
// RVA : 0x01336320
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_firstOnePlusTwoUlps___4()
{
vmx_float_firstOnePlusTwoUlps_4.vector4_f32[0] = (float)((float)0.00000011920929 * (float)2.0) + (float)1.0;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_posInfinity''_4
// EA : 0x83336348
// RVA : 0x01336348
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_posInfinity___4()
{
vmx_float_posInfinity_4.vector4_f32[0] = 1.0e30;
vmx_float_posInfinity_4.vector4_f32[1] = 1.0e30;
vmx_float_posInfinity_4.vector4_f32[2] = 1.0e30;
vmx_float_posInfinity_4.vector4_f32[3] = 1.0e30;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_negInfinity''_4
// EA : 0x83336370
// RVA : 0x01336370
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_negInfinity___4()
{
vmx_float_negInfinity_4.vector4_f32[0] = -1.0e30;
vmx_float_negInfinity_4.vector4_f32[1] = -1.0e30;
vmx_float_negInfinity_4.vector4_f32[2] = -1.0e30;
vmx_float_negInfinity_4.vector4_f32[3] = -1.0e30;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_firstOnePlusTwoUlps''_5
// EA : 0x83336398
// RVA : 0x01336398
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_firstOnePlusTwoUlps___5()
{
vmx_float_firstOnePlusTwoUlps_5.vector4_f32[0] = (float)((float)0.00000011920929 * (float)2.0) + (float)1.0;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_posInfinity''_5
// EA : 0x833363C0
// RVA : 0x013363C0
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_posInfinity___5()
{
vmx_float_posInfinity_5.vector4_f32[0] = 1.0e30;
vmx_float_posInfinity_5.vector4_f32[1] = 1.0e30;
vmx_float_posInfinity_5.vector4_f32[2] = 1.0e30;
vmx_float_posInfinity_5.vector4_f32[3] = 1.0e30;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_negInfinity''_5
// EA : 0x833363E8
// RVA : 0x013363E8
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_negInfinity___5()
{
vmx_float_negInfinity_5.vector4_f32[0] = -1.0e30;
vmx_float_negInfinity_5.vector4_f32[1] = -1.0e30;
vmx_float_negInfinity_5.vector4_f32[2] = -1.0e30;
vmx_float_negInfinity_5.vector4_f32[3] = -1.0e30;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_firstOnePlusTwoUlps''_6
// EA : 0x83336410
// RVA : 0x01336410
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_firstOnePlusTwoUlps___6()
{
vmx_float_firstOnePlusTwoUlps_6.vector4_f32[0] = (float)((float)0.00000011920929 * (float)2.0) + (float)1.0;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_posInfinity''_6
// EA : 0x83336438
// RVA : 0x01336438
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_posInfinity___6()
{
vmx_float_posInfinity_6.vector4_f32[0] = 1.0e30;
vmx_float_posInfinity_6.vector4_f32[1] = 1.0e30;
vmx_float_posInfinity_6.vector4_f32[2] = 1.0e30;
vmx_float_posInfinity_6.vector4_f32[3] = 1.0e30;
}
// ========================================================================
// `dynamic initializer for 'vmx_float_negInfinity''_6
// EA : 0x83336460
// RVA : 0x01336460
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodel_inline.h
// ========================================================================
void _dynamic_initializer_for__vmx_float_negInfinity___6()
{
vmx_float_negInfinity_6.vector4_f32[0] = -1.0e30;
vmx_float_negInfinity_6.vector4_f32[1] = -1.0e30;
vmx_float_negInfinity_6.vector4_f32[2] = -1.0e30;
vmx_float_negInfinity_6.vector4_f32[3] = -1.0e30;
}
@@ -0,0 +1,120 @@
// ========================================================================
// ?CM_GetPolygonPlane@@YAXABUcm_subModelPtrs_t@@ABUcm_polygon_t@@AAVidPlane@@@Z
// EA : 0x825BD948
// RVA : 0x005BD948
// PDB : w:\tech5\engine\cm\jobs\polygonmodel\polygonmodeldata.h
// ========================================================================
void __fastcall CM_GetPolygonPlane(const cm_subModelPtrs_t *subModel, const cm_polygon_t *polygon, idPlane *plane)
{
cm_vertex_t *vertices; // r9
cm_edge_t *edges; // r10
unsigned __int16 *v5; // r11
unsigned int v6; // r7
unsigned int v7; // r4
char *v8; // r11
int v9; // r8
int v10; // r7
float *v11; // r11
float *v12; // r10
float *v13; // r9
double v14; // fp8
double v15; // fp7
double v16; // fp10
double v17; // fp1
double v18; // fp5
double v19; // fp6
double v20; // fp4
double v21; // fp2
double v22; // fp3
double v25; // fp6
double v26; // fp9
double v27; // fp6
double v28; // fp4
double v29; // fp3
vertices = subModel->vertices;
edges = subModel->edges;
v5 = (unsigned __int16 *)((char *)subModel->polygonEdges + __ROL4__(polygon->firstEdge, 1));
v6 = *v5;
v7 = v5[1];
v8 = (char *)edges + ((4 * v7) & 0xFFFC);
v9 = ((2 * v6) & 0x7FFE) + (v6 >> 15);
v10 = *(unsigned __int16 *)&v8[(~v7 >> 14) & 2];
v11 = (float *)((char *)&vertices->p.x + __ROL4__(*(unsigned __int16 *)&v8[(v7 >> 14) & 2], 4));
v12 = (float *)((char *)&vertices->p.x + __ROL4__(edges->vertexNum[v9], 4));
v13 = (float *)((char *)&vertices->p.x + __ROL4__(v10, 4));
v14 = (float)(v12[2] - v11[2]);
v15 = (float)(*v13 - *v11);
v16 = (float)(v12[1] - v11[1]);
v17 = (float)(v13[1] - v11[1]);
v18 = (float)((float)(v13[2] - v11[2]) * (float)(v12[1] - v11[1]));
v19 = (float)((float)(v13[1] - v11[1]) * (float)(*v12 - *v11));
v20 = (float)((float)((float)(v13[2] - v11[2]) * (float)(*v12 - *v11))
- (float)((float)(v12[2] - v11[2]) * (float)(*v13 - *v11)));
plane->b = (float)((float)(v13[2] - v11[2]) * (float)(*v12 - *v11))
- (float)((float)(v12[2] - v11[2]) * (float)(*v13 - *v11));
v21 = (float)((float)((float)v17 * (float)v14) - (float)v18);
plane->a = (float)((float)v17 * (float)v14) - (float)v18;
v22 = (float)((float)((float)v15 * (float)v16) - (float)v19);
plane->c = (float)((float)v15 * (float)v16) - (float)v19;
_FP9 = (float)((float)((float)((float)v21 * (float)v21)
+ (float)((float)((float)v22 * (float)v22) + (float)((float)v20 * (float)v20)))
- idMath::FLT_SMALLEST_NON_DENORMAL);
__asm { fsel f8, f9, f10, f13 }
v25 = __frsqrte(_FP8);
v26 = (float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)v25
* (float)((float)((float)((float)v21 * (float)v21) + (float)((float)((float)v22 * (float)v22) + (float)((float)v20 * (float)v20)))
* (float)0.5))
* (float)v25)
- (float)1.5)
* (float)v25)
* (float)((float)((float)((float)v21 * (float)v21)
+ (float)((float)((float)v22 * (float)v22)
+ (float)((float)v20 * (float)v20)))
* (float)0.5))
* (float)((float)-(float)((float)((float)((float)v25
* (float)((float)((float)((float)v21 * (float)v21)
+ (float)((float)((float)v22 * (float)v22) + (float)((float)v20 * (float)v20)))
* (float)0.5))
* (float)v25)
- (float)1.5)
* (float)v25))
- (float)1.5)
* (float)((float)-(float)((float)((float)((float)v25
* (float)((float)((float)((float)v21 * (float)v21)
+ (float)((float)((float)v22 * (float)v22)
+ (float)((float)v20 * (float)v20)))
* (float)0.5))
* (float)v25)
- (float)1.5)
* (float)v25));
v27 = (float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)v25 * (float)((float)((float)((float)v21 * (float)v21) + (float)((float)((float)v22 * (float)v22) + (float)((float)v20 * (float)v20))) * (float)0.5)) * (float)v25) - (float)1.5)
* (float)v25)
* (float)((float)((float)((float)v21 * (float)v21) + (float)((float)((float)v22 * (float)v22) + (float)((float)v20 * (float)v20)))
* (float)0.5))
* (float)((float)-(float)((float)((float)((float)v25 * (float)((float)((float)((float)v21 * (float)v21) + (float)((float)((float)v22 * (float)v22) + (float)((float)v20 * (float)v20))) * (float)0.5)) * (float)v25) - (float)1.5)
* (float)v25))
- (float)1.5)
* (float)((float)-(float)((float)((float)((float)v25
* (float)((float)((float)((float)v21 * (float)v21) + (float)((float)((float)v22 * (float)v22) + (float)((float)v20 * (float)v20))) * (float)0.5))
* (float)v25)
- (float)1.5)
* (float)v25))
* (float)((float)((float)((float)v21 * (float)v21)
+ (float)((float)((float)v22 * (float)v22)
+ (float)((float)v20 * (float)v20)))
* (float)0.5))
* (float)v26)
- (float)1.5)
* (float)v26);
plane->a = (float)v21 * (float)v27;
v28 = (float)((float)v20 * (float)v27);
plane->b = v28;
v29 = (float)((float)v22 * (float)v27);
plane->c = v29;
plane->d = -(float)((float)((float)v29 * v11[2])
+ (float)((float)(v11[1] * (float)v28) + (float)((float)((float)v21 * (float)v27) * *v11)));
}
@@ -0,0 +1,676 @@
// ========================================================================
// ?SetupCollisionSpherePtrs@idSphereModelCollisionDetection@@SAHPBUcm_sphereModel_t@@AAUcm_sphereModelPtrs_t@@@Z
// EA : 0x825F4E10
// RVA : 0x005F4E10
// PDB : w:\tech5\engine\cm\jobs\spheremodel\spheremodel.cpp
// ========================================================================
int __fastcall idSphereModelCollisionDetection::SetupCollisionSpherePtrs(
const cm_sphereModel_t *csData,
cm_sphereModelPtrs_t *csPtrs)
{
csPtrs->joint = (unsigned __int8 *)csData + csData->jointOffset;
csPtrs->offsetX = (float *)((char *)&csData->totalSize + csData->offsetXOffset);
csPtrs->offsetY = (float *)((char *)&csData->totalSize + csData->offsetYOffset);
csPtrs->offsetZ = (float *)((char *)&csData->totalSize + csData->offsetZOffset);
csPtrs->radius = (float *)((char *)&csData->totalSize + csData->radiusOffset);
csPtrs->surfType = (unsigned __int8 *)csData + csData->surfTypeOffset;
return csData->numSpheres;
}
// ========================================================================
// ?TraceThroughModel@idSphereModelCollisionDetection@@SAXAAUtrace_t@@PBUcm_sphereModel_t@@ABVidVec3@@2MABVidMat3@@PBVidJointMat@@23HHHHH@Z
// EA : 0x825F4E60
// RVA : 0x005F4E60
// PDB : w:\tech5\engine\cm\jobs\spheremodel\spheremodel.cpp
// ========================================================================
void __fastcall idSphereModelCollisionDetection::TraceThroughModel(
trace_t *trace,
const cm_sphereModel_t *csData,
const idVec3 *start,
const idVec3 *end,
double radius,
const idMat3 *trmAxis,
const idJointMat *modelJoints,
const idVec3 *modelOrigin,
const idMat3 *modelAxis,
double a10,
double a11,
double a12,
double a13,
double a14,
double a15,
double a16,
int modelEntityNum,
int modelPhysicsId,
int modelBodyId,
int selfId,
int modelContentsOverride,
int a22,
int a23,
int a24,
int a25,
int a26,
int a27,
float a28,
int a29,
int a30,
int a31,
int a32,
int a33,
int a34,
int a35,
float *a36,
int a37,
int a38,
int a39,
int a40,
int a41,
int a42,
int a43,
const idMat3 *modelAxis_0,
int a45,
int modelEntityNuma)
{
idVec3 *p_endpos; // r22
int numSpheres; // r25
int offsetXOffset; // r10
int jointOffset; // r11
int offsetYOffset; // r7
int offsetZOffset; // r4
int radiusOffset; // r3
int surfTypeOffset; // r26
char *v70; // r28
char *v71; // r5
char *v73; // r7
char *v74; // r4
char *v75; // r3
char *v76; // r26
char v77; // cr56
int v81; // r10
unsigned int v83; // r11
unsigned int v85; // r26
unsigned int v91; // ctr
unsigned __int8 v100; // cr56
unsigned __int8 v101; // cr57
int v102; // r9
int v104; // r24
double v105; // fp5
float *v107; // r11
double v108; // fp29
double v109; // fp1
double v110; // fp11
double v111; // fp4
double v112; // fp5
double v113; // fp10
int contents; // r7
double v115; // fp13
bool v116; // cr58
double z; // fp6
double y; // fp8
double v121; // fp12
double v122; // fp11
double v123; // fp1
double v124; // fp0
int v125; // r11
int v126; // r8
int v127; // r7
int v128; // r6
const idMat3 *v129; // r5
int v130; // r4
int v131; // [sp+50h] [-140h] BYREF
float v132; // [sp+54h] [-13Ch] BYREF
char *v133; // [sp+64h] [-12Ch]
char *v134; // [sp+68h] [-128h]
char *v135; // [sp+6Ch] [-124h]
char *v136; // [sp+70h] [-120h]
char *v137; // [sp+74h] [-11Ch]
a28 = radius;
p_endpos = &trace->endpos;
_R21 = start;
trace->fraction = 1.0;
trace->endpos = *end;
_R27 = end;
trace->endAxis.mat[0].x = modelJoints->mat[0];
trace->endAxis.mat[0].y = modelJoints->mat[1];
_R20 = modelAxis;
trace->endAxis.mat[0].z = modelJoints->mat[2];
trace->endAxis.mat[1] = *(idVec3 *)&modelJoints->mat[3];
trace->endAxis.mat[2] = *(idVec3 *)&modelJoints->mat[6];
memset(Dst: &trace->c, Val: 0, Size: sizeof(trace->c));
_R9 = 16;
_R8 = a36;
numSpheres = csData->numSpheres;
_R4 = 12;
__asm { lvlx128 v63, r0, r20 }
_R3 = 40;
__asm { lvlx128 v61, r0, r21 }
_R28 = 24;
offsetXOffset = csData->offsetXOffset;
_R5 = 28;
__asm { lvrx128 v60, r9, r20 }
_R6 = vmxi_word_four;
jointOffset = csData->jointOffset;
_R24 = -48;
__asm
{
lvlx128 v55, r4, r8
lvrx128 v54, r3, r8
vor128 v59, v95, v60
lvlx128 v53, r28, r8
}
offsetYOffset = csData->offsetYOffset;
__asm { lvrx128 v58, r9, r8 }
offsetZOffset = csData->offsetZOffset;
__asm { lvlx128 v57, r0, r8 }
radiusOffset = csData->radiusOffset;
__asm { lvrx128 v56, r5, r8 }
surfTypeOffset = csData->surfTypeOffset;
__asm
{
lvrx128 v52, r9, r21
vspltisw128 v63, 0
lvx128 v62, r6, r24
}
v132 = *(float *)&numSpheres;
__asm
{
lvlx128 v51, r0, r27
vor128 v50, v89, v58
vor128 v49, v87, v56
}
v70 = (char *)csData + jointOffset;
__asm
{
vor128 v48, v85, v54
lvrx128 v45, r9, r27
vor128 v47, v93, v52
vor128 v43, v83, v45
}
__asm { vand128 v46, v91, v62 }
v71 = (char *)csData + offsetXOffset;
__asm { vand128 v42, v82, v62 }
_R11 = &vmx_float_smallest_non_denorm;
__asm { vand128 v44, v79, v62 }
v73 = (char *)csData + offsetYOffset;
__asm { vand128 v38, v75, v62 }
v74 = (char *)csData + offsetZOffset;
__asm { vand128 v41, v81, v62 }
v75 = (char *)csData + radiusOffset;
__asm { vand128 v39, v80, v62 }
v76 = (char *)csData + surfTypeOffset;
__asm
{
vsubfp128 v40, v76, v46
lvx128 v60, r0, r11
vsubfp128 v37, v70, v46
}
v133 = (char *)csData + offsetXOffset;
v134 = v73;
v135 = v74;
v136 = v75;
v137 = v76;
__asm
{
vmulfp128 v36, v74, v40
vmulfp128 v35, v73, v40
vmulfp128 v34, v71, v40
vmulfp128 v33, v74, v37
vmulfp128 v32, v73, v37
vmulfp128 v62, v71, v37
vmrghw128 v61, v67, v63
vmrghw128 v59, v68, v34
vmrglw128 v57, v68, v34
vmrghw128 v56, v64, v63
vmrghw128 v55, v65, v62
vmrglw128 v54, v91, v61
vmrghw128 v53, v91, v61
vmrglw128 v58, v67, v63
vmrglw128 v51, v87, v56
vmrghw128 v50, v87, v56
vaddfp128 v49, v85, v54
vmrglw128 v52, v64, v63
vmrglw128 v48, v65, v62
vmrghw128 v47, v89, v58
vaddfp128 v46, v82, v51
vmrghw128 v45, v80, v52
vaddfp128 v44, v81, v47
vaddfp128 v43, v78, v45
vspltw128 v56, v44, 0
vspltw128 v55, v44, 1
vspltw128 v54, v44, 2
vsubfp128 v42, v75, v44
vmulfp128 v41, v74, v42
vspltw128 v29, v42, 0
vspltw128 v28, v42, 1
vspltw128 v53, v42, 2
vspltw128 v40, v41, 1
vspltw128 v39, v41, 0
vspltw128 v38, v41, 2
vaddfp128 v37, v71, v40
vaddfp128 v61, v69, v38
vcmpgtfp128. v36, v93, v60
}
if ( v77 != 0 )
{
__asm { vrefp128 v35, v61 }
_R24 = -16;
_R11 = -32;
_R23 = -112;
v81 = 0;
__asm
{
lvx128 v27, r6, r24
lvx128 v6, r6, r11
vmr v9, v27
lvx128 v7, r6, r23
vmulfp128 v34, v93, v35
vaddfp128 v33, v67, v35
vmulfp128 v32, v66, v35
vsubfp128 v62, v65, v32
}
if ( numSpheres > 0 )
{
__asm { lvx128 v30, r0, r6 }
v83 = (unsigned int)(numSpheres - 1) >> 2;
_R25 = &a28;
_R16 = v71 - v73;
v85 = v83 + 1;
_R15 = v74 - v73;
_R14 = v75 - v73;
__asm { lvlx128 v59, r0, r25 }
_R11 = v73;
_R7 = -96;
__asm { vspltw128 v57, v59, 0 }
_R5 = -80;
v91 = v85;
_R4 = -64;
__asm { lvx128 v31, r6, r7 }
__asm { lvx128 v59, r6, r5 }
_R3 = 32;
__asm { lvx128 v58, r6, r4 }
do
{
__asm { lvx128 v52, r14, r11 }
__asm { vaddfp128 v51, v84, v57 }
__asm { lvx128 v0, r16, r11 }
__asm { lvx128 v13, r0, r11 }
__asm { lvx128 v12, r15, r11 }
_R7 = (char *)modelOrigin + 16 * (unsigned __int8)v70[v81] + 16 * __ROL4__((unsigned __int8)v70[v81], 1);
_R6 = (char *)modelOrigin + 16 * (unsigned __int8)v70[v81 + 1] + 16 * __ROL4__((unsigned __int8)v70[v81 + 1], 1);
_R5 = (char *)modelOrigin + 16 * (unsigned __int8)v70[v81 + 2] + 16 * __ROL4__((unsigned __int8)v70[v81 + 2], 1);
_R4 = (char *)modelOrigin + 16 * (unsigned __int8)v70[v81 + 3] + 16 * __ROL4__((unsigned __int8)v70[v81 + 3], 1);
v81 += 4;
__asm { lvx128 v50, r0, r7 }
_R11 += 16;
__asm
{
lvx128 v49, r0, r6
lvx128 v48, r0, r5
lvx128 v47, r0, r4
lvx128 v46, r7, r9
vmrghw128 v45, v82, v48
lvx128 v44, r6, r9
vmrglw128 v43, v82, v48
lvx128 v42, r5, r9
vmrghw128 v41, v81, v47
lvx128 v40, r4, r9
vmrglw128 v39, v81, v47
lvx128 v38, r7, r3
vmrghw128 v37, v78, v42
lvx128 v36, r6, r3
vmrglw128 v35, v78, v42
lvx128 v34, r5, r3
vmrghw128 v33, v76, v40
lvx128 v32, r4, r3
vmrglw128 v52, v76, v40
vmrghw128 v50, v70, v34
vmrglw128 v49, v70, v34
vmrghw128 v48, v68, v32
vmrglw128 v47, v68, v32
vmrglw128 v10, v75, v39
vmrghw128 v11, v77, v41
vmrglw128 v5, v67, v52
vmrghw128 v8, v69, v33
vmrglw128 v3, v81, v47
vmrghw128 v4, v82, v48
vmaddfp v11, v11, v10, v0
vmrglw128 v2, v77, v41
vmaddfp v10, v8, v5, v0
vmrglw128 v8, v69, v33
vmrglw128 v5, v82, v48
vmaddfp v0, v4, v3, v0
vmrghw128 v4, v75, v39
vmrghw128 v3, v67, v52
vmrghw128 v1, v81, v47
vmaddfp v11, v2, v11, v13
vmaddfp v10, v8, v10, v13
vmr v8, v6
vmaddfp v0, v5, v0, v13
vmaddfp v13, v4, v11, v12
vmaddfp v11, v3, v10, v12
vor128 v10, v93, v61
vmaddfp v12, v1, v0, v12
vsubfp128 v0, v88, v13
vsubfp128 v13, v87, v11
vor128 v11, v83, v51
vsubfp128 v46, v86, v12
vor128 v12, v83, v51
vmulfp128 v5, v85, v46
vmulfp128 v4, v78, v46
vmaddfp v5, v28, v5, v13
vaddsws v6, v6, v30
vmaddfp v13, v13, v4, v13
vmaddfp v5, v29, v5, v0
vmaddfp v0, v0, v13, v0
vmulfp128 v13, v5, v5
vxor128 v45, v5, v58
vnmsubfp v0, v12, v0, v11
vnmsubfp v13, v0, v13, v10
vmaxfp128 v44, v13, v60
vcmpgtfp128 v43, v13, v63
vrsqrtefp128 v0, v44
vmulfp128 v13, v76, v0
vmulfp128 v42, v0, v59
vmaddfp v0, v13, v31, v0
vmulfp128 v41, v74, v0
vmulfp128 v40, v73, v44
vaddfp128 v39, v77, v40
vsubfp128 v38, v77, v40
vmulfp128 v37, v71, v62
vmulfp128 v36, v70, v62
vminfp128 v35, v69, v36
vmulfp128 v34, v69, v36
vcmpgefp128 v33, v67, v63
vor128 v0, v67, v35
vcmpgefp128 v32, v67, v7
vcmpgtfp128 v52, v95, v34
vand128 v51, v75, v33
vandc128 v50, v83, v32
vor128 v13, v82, v52
vsel v12, v9, v8, v13
vsel v13, v7, v0, v13
vmr v9, v12
vmr v7, v13
}
--v91;
}
while ( v91 != 0 );
v76 = v137;
v75 = v136;
v74 = v135;
v73 = v134;
v71 = v133;
*(float *)&numSpheres = v132;
}
__asm { vpermwi128 v49, v7, 0x4E # 'N' }
_R11 = &v131;
__asm { vpermwi128 v13, v9, 0x4E # 'N' }
_R10 = &v132;
__asm
{
vminfp128 v48, v7, v49
vcmpgtfp128 v12, v7, v49
vpermwi128 v47, v48, 0xB1
vsel v12, v9, v13, v12
vcmpgtfp128 v11, v80, v47
vminfp128 v46, v80, v47
vpermwi128 v13, v12, 0xB1
vsel v0, v12, v13, v11
stvewx v0, 0, r11
vcmpgtsw. v0, v0, v27
stvewx128 v46, r0, r10
}
if ( (((v100 << 7) | (v101 << 6)) & 0x80) != 0 )
{
v102 = v131;
_FP0 = v132;
v104 = 4 * v131;
v105 = *(float *)&v74[4 * v131];
__asm { fsel f2, f0, f0, f13 }
v107 = &modelOrigin->x + 4 * (unsigned __int8)v70[v131] + 4 * __ROL4__((unsigned __int8)v70[v131], 1);
v108 = (float)(_R21->x + (float)((float)(_R27->x - _R21->x) * (float)_FP2));
v109 = (float)(_R21->z + (float)((float)(_R27->z - _R21->z) * (float)_FP2));
v110 = (float)(_R21->y + (float)((float)(_R27->y - _R21->y) * (float)_FP2));
v111 = (float)((float)(_R21->z + (float)((float)(_R27->z - _R21->z) * (float)_FP2))
- (float)(_R20->mat[0].z
+ (float)((float)(a36[2]
* (float)((float)((float)(*v107 * *(float *)&v71[4 * v131])
+ (float)((float)(v107[2] * (float)v105)
+ (float)(v107[1] * *(float *)&v73[4 * v131])))
+ v107[3]))
+ (float)((float)(a36[8]
* (float)((float)((float)(v107[8] * *(float *)&v71[4 * v131])
+ (float)((float)(v107[10] * (float)v105)
+ (float)(v107[9] * *(float *)&v73[4 * v131])))
+ v107[11]))
+ (float)(a36[5]
* (float)((float)((float)(v107[4] * *(float *)&v71[4 * v131])
+ (float)((float)(v107[6] * (float)v105)
+ (float)(v107[5] * *(float *)&v73[4 * v131])))
+ v107[7]))))));
v113 = (float)((float)(_R21->x + (float)((float)(_R27->x - _R21->x) * (float)_FP2))
- (float)(_R20->mat[0].x
+ (float)((float)(*a36
* (float)((float)((float)(*v107 * *(float *)&v71[4 * v131])
+ (float)((float)(v107[2] * (float)v105)
+ (float)(v107[1] * *(float *)&v73[4 * v131])))
+ v107[3]))
+ (float)((float)(a36[6]
* (float)((float)((float)(v107[8] * *(float *)&v71[4 * v131])
+ (float)((float)(v107[10] * (float)v105)
+ (float)(v107[9] * *(float *)&v73[4 * v131])))
+ v107[11]))
+ (float)(a36[3]
* (float)((float)((float)(v107[4] * *(float *)&v71[4 * v131])
+ (float)((float)(v107[6] * (float)v105)
+ (float)(v107[5] * *(float *)&v73[4 * v131])))
+ v107[7]))))));
v112 = (float)((float)(_R21->y + (float)((float)(_R27->y - _R21->y) * (float)_FP2))
- (float)(_R20->mat[0].y
+ (float)((float)(a36[1]
* (float)((float)((float)(*v107 * *(float *)&v71[4 * v131])
+ (float)((float)(v107[2] * (float)v105)
+ (float)(v107[1] * *(float *)&v73[4 * v131])))
+ v107[3]))
+ (float)((float)(a36[7]
* (float)((float)((float)(v107[8] * *(float *)&v71[4 * v131])
+ (float)((float)(v107[10] * (float)v105)
+ (float)(v107[9] * *(float *)&v73[4 * v131])))
+ v107[11]))
+ (float)(a36[4]
* (float)((float)((float)(v107[4] * *(float *)&v71[4 * v131])
+ (float)((float)(v107[6] * (float)v105)
+ (float)(v107[5] * *(float *)&v73[4 * v131])))
+ v107[7]))))));
contents = modelEntityNuma;
v115 = idMath::FLT_SMALLEST_NON_DENORMAL;
v116 = modelEntityNuma == 0;
trace->fraction = _FP2;
p_endpos->z = v109;
p_endpos->y = v110;
p_endpos->x = v108;
trace->c.type = CONTACT_SPHERE;
z = p_endpos->z;
y = p_endpos->y;
_FP3 = (float)((float)((float)((float)v113 * (float)v113)
+ (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112)))
- (float)v115);
__asm { fsel f13, f3, f7, f13 }
v121 = __frsqrte(_FP13);
v122 = (float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)v121
* (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5))
* (float)v121)
- (float)1.5)
* (float)v121)
* (float)((float)((float)((float)v113 * (float)v113)
+ (float)((float)((float)v111 * (float)v111)
+ (float)((float)v112 * (float)v112)))
* (float)0.5))
* (float)((float)-(float)((float)((float)((float)v121
* (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112)))
* (float)0.5))
* (float)v121)
- (float)1.5)
* (float)v121))
- (float)1.5)
* (float)((float)-(float)((float)((float)((float)v121
* (float)((float)((float)((float)v113 * (float)v113)
+ (float)((float)((float)v111 * (float)v111)
+ (float)((float)v112 * (float)v112)))
* (float)0.5))
* (float)v121)
- (float)1.5)
* (float)v121));
v123 = (float)((float)v113
* (float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5) * (float)v121) * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5))
* (float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5) * (float)v121))
- (float)1.5)
* (float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121)
- (float)1.5)
* (float)v121))
* (float)((float)((float)((float)v113 * (float)v113)
+ (float)((float)((float)v111 * (float)v111)
+ (float)((float)v112 * (float)v112)))
* (float)0.5))
* (float)v122)
- (float)1.5)
* (float)v122));
v124 = (float)((float)v112
* (float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5) * (float)v121) * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5))
* (float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5) * (float)v121))
- (float)1.5)
* (float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121)
- (float)1.5)
* (float)v121))
* (float)((float)((float)((float)v113 * (float)v113)
+ (float)((float)((float)v111 * (float)v111)
+ (float)((float)v112 * (float)v112)))
* (float)0.5))
* (float)v122)
- (float)1.5)
* (float)v122));
trace->c.point.x = p_endpos->x
- (float)((float)((float)v113
* (float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5) * (float)v121) * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5) * (float)v121)) - (float)1.5)
* (float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5)
* (float)v121))
* (float)((float)((float)((float)v113 * (float)v113)
+ (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112)))
* (float)0.5))
* (float)v122)
- (float)1.5)
* (float)v122))
* (float)radius);
trace->c.point.z = (float)z
- (float)((float)((float)v111
* (float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5) * (float)v121) * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5) * (float)v121)) - (float)1.5)
* (float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5)
* (float)v121))
* (float)((float)((float)((float)v113 * (float)v113)
+ (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112)))
* (float)0.5))
* (float)v122)
- (float)1.5)
* (float)v122))
* (float)radius);
trace->c.point.y = (float)y
- (float)((float)((float)v112
* (float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5) * (float)v121) * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5) * (float)v121)) - (float)1.5)
* (float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5)
* (float)v121))
* (float)((float)((float)((float)v113 * (float)v113)
+ (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112)))
* (float)0.5))
* (float)v122)
- (float)1.5)
* (float)v122))
* (float)radius);
trace->c.normal.z = (float)v111
* (float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5) * (float)v121) * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5))
* (float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5) * (float)v121))
- (float)1.5)
* (float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121)
- (float)1.5)
* (float)v121))
* (float)((float)((float)((float)v113 * (float)v113)
+ (float)((float)((float)v111
* (float)v111)
+ (float)((float)v112
* (float)v112)))
* (float)0.5))
* (float)v122)
- (float)1.5)
* (float)v122);
trace->c.normal.x = (float)v113
* (float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5) * (float)v121) * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5))
* (float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5) * (float)v121))
- (float)1.5)
* (float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121)
- (float)1.5)
* (float)v121))
* (float)((float)((float)((float)v113 * (float)v113)
+ (float)((float)((float)v111
* (float)v111)
+ (float)((float)v112
* (float)v112)))
* (float)0.5))
* (float)v122)
- (float)1.5)
* (float)v122);
trace->c.normal.y = (float)v112
* (float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5) * (float)v121) * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5))
* (float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5) * (float)v121))
- (float)1.5)
* (float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121)
- (float)1.5)
* (float)v121))
* (float)((float)((float)((float)v113 * (float)v113)
+ (float)((float)((float)v111
* (float)v111)
+ (float)((float)v112
* (float)v112)))
* (float)0.5))
* (float)v122)
- (float)1.5)
* (float)v122);
trace->c.dist = (float)((float)v123 * trace->c.point.x)
+ (float)((float)((float)((float)v111
* (float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5) * (float)v121) * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5) * (float)v121)) - (float)1.5)
* (float)((float)-(float)((float)((float)((float)v121 * (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112))) * (float)0.5)) * (float)v121) - (float)1.5) * (float)v121))
* (float)((float)((float)((float)v113 * (float)v113) + (float)((float)((float)v111 * (float)v111) + (float)((float)v112 * (float)v112)))
* (float)0.5))
* (float)v122)
- (float)1.5)
* (float)v122))
* trace->c.point.z)
+ (float)((float)v124 * trace->c.point.y));
trace->c.separation = *(float *)&v75[v104];
if ( v116 )
contents = csData->contents;
v125 = numSpheres - 1;
trace->c.contentFlags = contents;
trace->c.surfaceType = (unsigned __int8)v76[v102];
trace->c.surfaceFlags = 0;
if ( v102 < numSpheres - 1 )
v125 = v102;
v126 = a38;
v127 = a40;
v128 = a42;
v129 = modelAxis_0;
trace->c.modelFeature = v125;
v130 = (unsigned __int8)v70[v102];
trace->c.entityNum = v126;
trace->c.physicsId = v127;
trace->c.bodyId = v128;
trace->c.selfId = (int)v129;
trace->c.trmFeature = v130;
trace->c.flags = 0;
}
}
}
@@ -0,0 +1,948 @@
// ========================================================================
// ArgCompletion_MTL
// EA : 0x825F6780
// RVA : 0x005F6780
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void __fastcall ArgCompletion_MTL(idAutoComplete *autoComplete)
{
cmdSystem->ArgCompletion_FolderExtension(this: cmdSystem, a2: autoComplete, a3: "/", a4: "mtl", a5: false);
}
// ========================================================================
// ParseVec3
// EA : 0x825F6950
// RVA : 0x005F6950
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
idVec3 *__fastcall ParseVec3(idVec3 *result, idLexer *src)
{
char *data; // r3
double x; // fp0
idStr v6[2]; // [sp+50h] [-50h] BYREF
v6[0].len = 0;
v6[0].allocedAndFlag = 20;
v6[0].data = v6[0].baseBuffer;
v6[0].baseBuffer[0] = 0;
idLexer::ParseRestOfLine(this: src, out: v6);
data = v6[0].data;
result->x = 0.0;
result->y = 0.0;
result->z = 0.0;
if ( sscanf(string: data, format: "%f %f %f", result, &result->y, &result->z) == 1 )
{
x = result->x;
result->z = result->x;
result->y = x;
}
idStr::FreeData(this: v6);
return result;
}
// ========================================================================
// __unwind$220407
// EA : 0x825F69EC
// RVA : 0x005F69EC
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_220407()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 160 + 80));
}
// ========================================================================
// ?ExtractFinalFilename@@YA?AVidStr@@QBD@Z
// EA : 0x825F6F28
// RVA : 0x005F6F28
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
idStr *__fastcall ExtractFinalFilename(idStr *result, const char *str)
{
int v3; // r29
const char *v4; // r11
int v5; // r10
int i; // r11
const char *v7; // r30
unsigned int allocedAndFlag; // r11
int v9; // r4
int v10; // r11
bool v11; // zf
char *v12; // r10
char *v13; // r9
char v14; // r11
v3 = 0;
v4 = str;
do
v5 = *(unsigned __int8 *)v4++;
while ( v5 != 0 );
for ( i = v4 - str - 2; i >= 0; --i )
{
if ( str[i] <= 32 )
break;
}
result->len = 0;
result->allocedAndFlag = 20;
v7 = &str[i + 1];
result->data = result->baseBuffer;
result->baseBuffer[0] = 0;
if ( &str[i] != (const char *)-1 )
{
if ( *v7 != 0 )
{
do
++v3;
while ( v7[v3] != 0 );
}
allocedAndFlag = result->allocedAndFlag;
v9 = v3 + 1;
v11 = allocedAndFlag >> 31 == 0;
v10 = allocedAndFlag & 0x7FFFFFFF;
if ( v11 )
{
if ( v9 > v10 )
idStr::ReAllocate(this: result, amount: v9, keepold: true);
}
else if ( v9 > v10
&& AssertFailed(
file: "w:\\tech5\\shared\\idlib\\text/Str.h",
line: 463,
expression: "amount <= GetAlloced()",
inlineBreak: true) )
{
__trap();
}
v12 = (char *)(v7 - 1);
v13 = result->data - 1;
do
{
v14 = *++v12;
*++v13 = *v12;
}
while ( v14 != 0 );
result->len = v3;
}
return result;
}
// ========================================================================
// ?StripBaseDirFromFilename@@YA?AVidStr@@QBD@Z
// EA : 0x825F7050
// RVA : 0x005F7050
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
idStr *__fastcall StripBaseDirFromFilename(idStr *result, const char *str)
{
char *v4; // r3
const char *v5; // r4
v4 = strstr(str1: str, str2: "base/");
if ( v4 != nullptr || (v4 = strstr(str1: str, str2: "base\\"), v5 = str, v4 != nullptr) )
v5 = v4 + 5;
idStr::idStr(this: result, text: v5);
return result;
}
// ========================================================================
// ?TestExtractFinalFilename_f@@YAXABVidCmdArgs@@@Z
// EA : 0x825F70D0
// RVA : 0x005F70D0
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void __fastcall TestExtractFinalFilename_f(const idCmdArgs *args)
{
const char *v1; // r4
idStr v2; // [sp+50h] [-60h] BYREF
idStr v3; // [sp+70h] [-40h] BYREF
if ( args->argc <= 1 )
v1 = &byte_8200D768;
else
v1 = args->argv[1];
ExtractFinalFilename(result: &v2, str: v1);
idLib::Printf(fmt: "final file name: %s\n", v2.data);
StripBaseDirFromFilename(result: &v3, str: v2.data);
idLib::Printf(fmt: "final file name: %s\n", v3.data);
idStr::FreeData(this: &v3);
idStr::FreeData(this: &v2);
}
// ========================================================================
// __unwind$221328
// EA : 0x825F7160
// RVA : 0x005F7160
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_221328()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 176 + 80));
}
// ========================================================================
// __unwind$221329
// EA : 0x825F7188
// RVA : 0x005F7188
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_221329()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 176 + 112));
}
// ========================================================================
// ?LocalFileNameToGameFileName@@YA?AVidStr@@QBD0@Z
// EA : 0x825F7778
// RVA : 0x005F7778
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
idStr *__fastcall LocalFileNameToGameFileName(idStr *result, const char *localFileName, const char *currentDirectory)
{
idStr v6; // [sp+60h] [-80h] BYREF
idStr v7; // [sp+80h] [-60h] BYREF
idStr v8[2]; // [sp+A0h] [-40h] BYREF
idStr::idStr(this: &v6, text: localFileName);
idStr::MakeNameCanonical(this: &v6);
if ( idStr::Find(searchIn: v6.data, searchFor: ":", casesensitive: true, start: 0, end: v6.len) != -1
|| *v6.data == 47 )
{
StripBaseDirFromFilename(result: v8, str: v6.data);
idStr::idStr(this: result, text: v8);
idStr::FreeData(this: v8);
}
else
{
idStr::idStr(this: &v7, text: currentDirectory);
idStr::StripTrailing(this: &v7, c: 47);
idStr::StripTrailing(this: &v7, c: 92);
idStr::Append(this: &v7, text: "/");
idStr::Append(this: &v7, text: &v6);
idStr::idStr(this: result, text: &v7);
idStr::FreeData(this: &v7);
}
idStr::FreeData(this: &v6);
return result;
}
// ========================================================================
// __unwind$221684
// EA : 0x825F7878
// RVA : 0x005F7878
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_221684()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 224 + 96));
}
// ========================================================================
// __unwind$221685
// EA : 0x825F78A0
// RVA : 0x005F78A0
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_221685()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 224 + 128));
}
// ========================================================================
// __unwind$221686
// EA : 0x825F78C8
// RVA : 0x005F78C8
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_221686()
{
int v0; // r12
int v1; // r31
v1 = v0 - 224;
if ( (*(_DWORD *)(v0 - 224 + 80) & 1) != 0 )
{
*(_DWORD *)(v1 + 80) &= ~1u;
idStrStatic<260>::~idStrStatic<260>(this: *(idStr **)(v1 + 244));
}
}
// ========================================================================
// __unwind$221689
// EA : 0x825F790C
// RVA : 0x005F790C
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_221689()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 224 + 160));
}
// ========================================================================
// ?DeclMaterialForParsedMtl@@YAPBVidMaterial@@ABVidParsedMtl@@VidMtlOptions@@@Z
// EA : 0x825F7940
// RVA : 0x005F7940
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
const idMaterial *__fastcall DeclMaterialForParsedMtl(const idParsedMtl *mtl, const idMtlOptions *mtlOptions)
{
idDecl *v4; // r3
const idMaterial *MaterialOrAutoMaterial; // r30
idStr v7; // [sp+50h] [-D0h] BYREF
idStr v8; // [sp+70h] [-B0h] BYREF
idStr v9; // [sp+90h] [-90h] BYREF
idStr v10; // [sp+B0h] [-70h] BYREF
idStr v11[2]; // [sp+D0h] [-50h] BYREF
v4 = (idDecl *)idResourceList::Load(
this: &idMaterial::resourceList,
name: mtl->mtlName.data,
makeDefault: false,
skipStaleCheck: false);
MaterialOrAutoMaterial = (const idMaterial *)v4;
if ( v4 == nullptr || idDecl::IsImplicit(this: v4) )
{
ExtractFinalFilename(result: &v8, str: mtl->map_Kd.data);
if ( v8.len != 0 )
{
idStr::idStr(this: &v7, text: &v8);
idStr::ToLower(this: &v7);
idStr::BackSlashesToSlashes(this: &v7);
idStr::GetFilePath(this: v11, result: &mtlOptions->loadedFile);
LocalFileNameToGameFileName(result: &v10, localFileName: v7.data, currentDirectory: v11[0].data);
idStr::GetWithoutExtension(this: &v9, result: &v10);
MaterialOrAutoMaterial = (const idMaterial *)idResourceList::Load(
this: &idMaterial::resourceList,
name: v9.data,
makeDefault: true,
skipStaleCheck: false);
idStr::FreeData(this: &v9);
idStr::FreeData(this: &v10);
idStr::FreeData(this: v11);
idStr::FreeData(this: &v7);
}
else
{
MaterialOrAutoMaterial = FindMaterialOrAutoMaterial(name: mtl->mtlName.data);
}
idStr::FreeData(this: &v8);
}
idStr::FreeData(this: &mtlOptions->loadedFile);
return MaterialOrAutoMaterial;
}
// ========================================================================
// __unwind$221766
// EA : 0x825F7A60
// RVA : 0x005F7A60
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_221766()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: *(idStr **)(v0 - 288 + 316));
}
// ========================================================================
// __unwind$221767
// EA : 0x825F7A88
// RVA : 0x005F7A88
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_221767()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 288 + 112));
}
// ========================================================================
// __unwind$221768
// EA : 0x825F7AB0
// RVA : 0x005F7AB0
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_221768()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 288 + 80));
}
// ========================================================================
// __unwind$221769
// EA : 0x825F7AD8
// RVA : 0x005F7AD8
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_221769()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 288 + 208));
}
// ========================================================================
// __unwind$221770
// EA : 0x825F7B00
// RVA : 0x005F7B00
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_221770()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 288 + 176));
}
// ========================================================================
// __unwind$221771
// EA : 0x825F7B28
// RVA : 0x005F7B28
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_221771()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 288 + 144));
}
// ========================================================================
// ?ParseMtlFile@@YA_NQBDAAV?$idList@VidParsedMtl@@$04@@@Z
// EA : 0x825F7E88
// RVA : 0x005F7E88
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
int __fastcall ParseMtlFile(const char *mtlText, idList<idParsedMtl,5> *parsedMtls)
{
const char *v4; // r11
int v5; // r10
idToken v7; // [sp+60h] [-400h] BYREF
const char *v8; // [sp+A8h] [-3B8h]
const char *v9; // [sp+ACh] [-3B4h]
const char *v10; // [sp+B0h] [-3B0h]
const char *v11; // [sp+B4h] [-3ACh]
const char *v12; // [sp+B8h] [-3A8h]
const char *v13; // [sp+BCh] [-3A4h]
const char *v14; // [sp+C0h] [-3A0h]
const char *v15; // [sp+C4h] [-39Ch]
const char *v16; // [sp+C8h] [-398h]
const char *v17; // [sp+CCh] [-394h]
idStr v18; // [sp+D0h] [-390h] BYREF
idStr v19; // [sp+F0h] [-370h] BYREF
idLexer v20; // [sp+110h] [-350h] BYREF
idVec3 v21; // [sp+198h] [-2C8h] BYREF
idVec3 v22; // [sp+1A8h] [-2B8h] BYREF
idVec3 v23; // [sp+1B8h] [-2A8h] BYREF
idVec3 v24; // [sp+1C8h] [-298h] BYREF
idVec3 v25[2]; // [sp+1D8h] [-288h] BYREF
idParsedMtl v26; // [sp+1F0h] [-270h] BYREF
if ( parsedMtls->listStatic == 0 || parsedMtls->listStatic == 2 )
{
if ( parsedMtls->list != nullptr )
idListArrayDelete<idParsedMtl>(ptr: parsedMtls->list, num: parsedMtls->size);
parsedMtls->list = nullptr;
parsedMtls->size = 0;
}
parsedMtls->num = 0;
idLexer::idLexer(this: &v20, flags_: 8724);
v4 = mtlText;
do
v5 = *(unsigned __int8 *)v4++;
while ( v5 != 0 );
if ( !idLexer::LoadMemory(this: &v20, ptr: mtlText, length_: v4 - mtlText - 1, name: "parsed mtl file") )
{
idLexer::~idLexer(this: &v20);
return 0;
}
v7.len = 0;
v7.baseBuffer[0] = 0;
v7.intvalue = 0;
v7.data = v7.baseBuffer;
v7.allocedAndFlag = 20;
memset(&v7.whiteSpaceStart_p, 0, 12);
v7.floatvalue = -3.4028235e38;
v18.allocedAndFlag = 20;
v18.data = v18.baseBuffer;
v18.len = 0;
v18.baseBuffer[0] = 0;
if ( !idLexer::ReadToken(this: &v20, token: &v7) )
{
LABEL_72:
idStr::FreeData(this: &v18);
idStr::FreeData(this: &v7);
idLexer::~idLexer(this: &v20);
return 1;
}
v13 = "map_opacity";
v9 = "map_ns";
v8 = "tf";
v11 = "map_bump";
v10 = "map_refl";
v14 = "map_ke";
v17 = "map_d";
v15 = "bump";
v16 = "map_ks";
v12 = "map_kd";
while ( 1 )
{
idStr::ToLower(this: &v7);
if ( idStr::Cmp(s1: v7.data, s2: "#") != 0 )
break;
idLexer::ParseCompleteLine(this: &v20, out: &v18);
LABEL_71:
if ( !idLexer::ReadToken(this: &v20, token: &v7) )
goto LABEL_72;
}
if ( idStr::Cmp(s1: v7.data, s2: "newmtl") != 0 )
{
idLexer::ParseCompleteLine(this: &v20, out: &v18);
idStr::FreeData(this: &v18);
idStr::FreeData(this: &v7);
idLexer::~idLexer(this: &v20);
return 0;
}
idParsedMtl::idParsedMtl(this: &v26);
idLexer::ParseRestOfLine(this: &v20, out: &v26.mtlName);
if ( !idLexer::ReadToken(this: &v20, token: &v7) )
{
LABEL_70:
idList<idParsedMtl,5>::Append(this: parsedMtls, obj: &v26);
idParsedMtl::~idParsedMtl(this: &v26);
goto LABEL_71;
}
while ( 1 )
{
idStr::ToLower(this: &v7);
if ( idStr::Cmp(s1: v7.data, s2: "#") != 0 )
break;
idLexer::ParseCompleteLine(this: &v20, out: &v18);
LABEL_67:
if ( !idLexer::ReadToken(this: &v20, token: &v7) )
goto LABEL_70;
}
if ( idStr::Cmp(s1: v7.data, s2: "newmtl") == 0 )
{
idLexer::UnreadToken(this: &v20);
goto LABEL_70;
}
if ( idStr::Cmp(s1: v7.data, s2: "map_ka") == 0 )
{
idLexer::ParseRestOfLine(this: &v20, out: &v26.map_Ka);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: v12) == 0 )
{
idLexer::ParseRestOfLine(this: &v20, out: &v26.map_Kd);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: v16) == 0 )
{
idLexer::ParseRestOfLine(this: &v20, out: &v26.map_Ks);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: v14) == 0 )
{
idLexer::ParseRestOfLine(this: &v20, out: &v26.map_Ke);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: v11) == 0 || idStr::Cmp(s1: v7.data, s2: v15) == 0 )
{
idLexer::ParseRestOfLine(this: &v20, out: &v26.map_bump);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: v13) == 0 )
{
idLexer::ParseRestOfLine(this: &v20, out: &v26.map_opacity);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: v17) == 0 )
{
idLexer::ParseRestOfLine(this: &v20, out: &v26.map_d);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: v9) == 0 )
{
idLexer::ParseRestOfLine(this: &v20, out: &v26.map_Ns);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: v10) == 0 || idStr::Cmp(s1: v7.data, s2: "refl") == 0 )
{
idLexer::ParseRestOfLine(this: &v20, out: &v26.map_refl);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: "decal") == 0 )
{
idLexer::ParseRestOfLine(this: &v20, out: &v26.decal);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: "disp") == 0 )
{
idLexer::ParseRestOfLine(this: &v20, out: &v26.disp);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: "map_aat") == 0 )
{
v19.len = 0;
v19.data = v19.baseBuffer;
v19.allocedAndFlag = 20;
v19.baseBuffer[0] = 0;
idLexer::ParseRestOfLine(this: &v20, out: &v19);
idStr::ToLower(this: &v19);
if ( idStr::Cmp(s1: v19.data, s2: "on") != 0 )
{
idStr::FreeData(this: &v19);
v26.map_aat = false;
}
else
{
idStr::FreeData(this: &v19);
v26.map_aat = true;
}
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: "ns") == 0 )
{
v26.Ns = idLexer::ParseFloat(this: &v20, errorFlag: nullptr);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: "ni") == 0 )
{
v26.Ni = idLexer::ParseFloat(this: &v20, errorFlag: nullptr);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: "d") == 0 )
{
v26.d = idLexer::ParseFloat(this: &v20, errorFlag: nullptr);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: "tr") == 0 )
{
v26.Tr = idLexer::ParseFloat(this: &v20, errorFlag: nullptr);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: "illum") == 0 )
{
v26.illum = idLexer::ParseInt(this: &v20);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: v8) == 0 )
{
v26.Tf = *ParseVec3(result: &v21, src: &v20);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: "ka") == 0 )
{
v26.Ka = *ParseVec3(result: &v23, src: &v20);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: "kd") == 0 )
{
v26.Kd = *ParseVec3(result: v25, src: &v20);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: "ks") == 0 )
{
v26.Ks = *ParseVec3(result: &v22, src: &v20);
goto LABEL_67;
}
if ( idStr::Cmp(s1: v7.data, s2: "ke") == 0 )
{
v26.Ke = *ParseVec3(result: &v24, src: &v20);
goto LABEL_67;
}
idParsedMtl::~idParsedMtl(this: &v26);
idStr::FreeData(this: &v18);
idStr::FreeData(this: &v7);
idLexer::~idLexer(this: &v20);
return 0;
}
// ========================================================================
// __unwind$222046
// EA : 0x825F8660
// RVA : 0x005F8660
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_222046()
{
int v0; // r12
idLexer::~idLexer(this: (idLexer *)(v0 - 1120 + 272));
}
// ========================================================================
// __unwind$222047
// EA : 0x825F8688
// RVA : 0x005F8688
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_222047()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 1120 + 96));
}
// ========================================================================
// __unwind$222048
// EA : 0x825F86B0
// RVA : 0x005F86B0
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_222048()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 1120 + 208));
}
// ========================================================================
// __unwind$222049
// EA : 0x825F86D8
// RVA : 0x005F86D8
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_222049()
{
int v0; // r12
idParsedMtl::~idParsedMtl(this: (idParsedMtl *)(v0 - 1120 + 496));
}
// ========================================================================
// __unwind$222185
// EA : 0x825F8700
// RVA : 0x005F8700
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_222185()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 1120 + 240));
}
// ========================================================================
// ?LoadAndParseMtlFile@@YA_NQBDAAV?$idList@VidParsedMtl@@$04@@@Z
// EA : 0x825F8778
// RVA : 0x005F8778
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
char *__fastcall LoadAndParseMtlFile(const char *filename, idList<idParsedMtl,5> *parsedMtls)
{
char *result; // r3
int v4; // r31
char *v5; // [sp+50h] [-20h] BYREF
fileSystem->ReadFile(this: fileSystem, a2: filename, a3: (void **)&v5, a4: nullptr);
result = v5;
if ( v5 != nullptr )
{
v4 = ParseMtlFile(mtlText: v5, parsedMtls);
idMem::Free(this: &mem, ptr: v5, align: ALIGN_16);
return (char *)v4;
}
return result;
}
// ========================================================================
// ?testMtlLoader_f@@YAXABVidCmdArgs@@@Z
// EA : 0x825F8810
// RVA : 0x005F8810
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void __fastcall testMtlLoader_f(const idCmdArgs *args)
{
int v1; // r30
idFileList *v2; // r29
int i; // r28
idList<idParsedMtl,5> v4[4]; // [sp+60h] [-40h] BYREF
if ( args->argc == 2 )
{
v1 = 0;
v4[0].listStatic = 0;
v4[0].memTag = 5;
memset(v4, 0, 14);
if ( *args->argv[1] == 42 )
{
v2 = fileSystem->ListFilesTree(this: fileSystem, a2: "models", a3: "mtl", a4: 0);
for ( i = 0; i < v2->list.num; ++v1 )
{
idLib::Printf(fmt: "parsing %s.\n", v2->list.list[v1].data);
LoadAndParseMtlFile(filename: v2->list.list[v1].data, parsedMtls: v4);
++i;
}
idFileList::~idFileList(this: v2);
idMem::Free(this: &mem, ptr: v2, align: ALIGN_16);
}
else
{
LoadAndParseMtlFile(filename: args->argv[1], parsedMtls: v4);
}
if ( (v4[0].listStatic == 0 || v4[0].listStatic == 2) && v4[0].list != nullptr )
idListArrayDelete<idParsedMtl>(ptr: v4[0].list, num: v4[0].size);
}
else
{
idLib::Printf(fmt: "USAGE: testMtlLoader <.mtl file | *>\n");
}
}
// ========================================================================
// __unwind$222398
// EA : 0x825F897C
// RVA : 0x005F897C
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_222398()
{
int v0; // r12
idList<idParsedMtl,5>::~idList<idParsedMtl,5>(this: (idList<idParsedMtl,5> *)(v0 - 160 + 96));
}
// ========================================================================
// __unwind$222399
// EA : 0x825F89A4
// RVA : 0x005F89A4
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void _unwind_222399()
{
int v0; // r12
std::auto_ptr<idFileList>::~auto_ptr<idFileList>(this: (std::auto_ptr<idFileList> *)(v0 - 160 + 80));
}
// ========================================================================
// `dynamic initializer for 'r_fixObjMaterialPath''
// EA : 0x83336488
// RVA : 0x01336488
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__r_fixObjMaterialPath__()
{
idCVar::idCVar(
this: &r_fixObjMaterialPath,
name: "r_fixObjMaterialPath",
value: "0",
flags: 1,
description: "temp hack fix for material paths being jumbled up for objs coming out of modo",
valueCompletion: nullptr);
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__r_fixObjMaterialPath__);
}
// ========================================================================
// `dynamic initializer for 'TestExtractFinalFilename_v''
// EA : 0x833364E0
// RVA : 0x013364E0
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
idCommandLink *_dynamic_initializer_for__TestExtractFinalFilename_v__()
{
return idCommandLink::idCommandLink(
this: &TestExtractFinalFilename_v,
cmdName: "TestExtractFinalFilename",
function: TestExtractFinalFilename_f,
description: "Test ExtractFinalFilename()",
argCompletion: nullptr);
}
// ========================================================================
// `dynamic initializer for 'testMtlLoader_v''
// EA : 0x83336508
// RVA : 0x01336508
// PDB : w:\tech5\engine\compilers\renderbump\mtltocpuvmtr.cpp
// ========================================================================
idCommandLink *_dynamic_initializer_for__testMtlLoader_v__()
{
return idCommandLink::idCommandLink(
this: &testMtlLoader_v,
cmdName: "testMtlLoader",
function: testMtlLoader_f,
description: "Tests the parsing and processing of .mtl files",
argCompletion: ArgCompletion_MTL);
}
@@ -0,0 +1,84 @@
// ========================================================================
// ?SetAliasHandle@idMD6AnimProps@@QAAXV?$idHandle@GW4invalidAliasHandle_t@@$0PPPP@@@@Z
// EA : 0x825F89D0
// RVA : 0x005F89D0
// PDB : w:\tech5\engine\decls\animwebs\animprops.cpp
// ========================================================================
void __fastcall idMD6AnimProps::SetAliasHandle(
idMD6AnimProps *this,
const idHandle<unsigned short,enum invalidAliasHandle_t,65535> *handle)
{
this->aliasHandle.value = (unsigned __int16)handle;
this->anim = nullptr;
}
// ========================================================================
// ?SetAnim@idMD6AnimProps@@QAAXPBVidMD6Anim@@@Z
// EA : 0x825F89E0
// RVA : 0x005F89E0
// PDB : w:\tech5\engine\decls\animwebs\animprops.cpp
// ========================================================================
void __fastcall idMD6AnimProps::SetAnim(idMD6AnimProps *this, const idMD6Anim *anim_)
{
this->anim = anim_;
this->aliasHandle.value = -1;
}
// ========================================================================
// ?SelectAnim@idMD6AnimProps@@QBAPBVidMD6Anim@@PBVidDeclMD6@@H@Z
// EA : 0x825F89F0
// RVA : 0x005F89F0
// PDB : w:\tech5\engine\decls\animwebs\animprops.cpp
// ========================================================================
const idMD6Anim *__fastcall idMD6AnimProps::SelectAnim(idMD6AnimProps *this, const idDeclMD6 *declMD6, const int index)
{
const idMD6Alias *Alias; // r3
if ( this->anim != nullptr )
return this->anim;
if ( this->aliasHandle.value == 0xFFFF )
return nullptr;
Alias = idDeclMD6::FindAlias(this: declMD6, aliasHandle: &this->aliasHandle, includeInherited: true);
if ( Alias == nullptr )
return nullptr;
return (const idMD6Anim *)idResourceList::FindExisting(
this: &idMD6Anim::resourceList,
name: Alias->animRefs.list[index].str,
skipStaleCheck: true);
}
// ========================================================================
// ?SelectAndLoadAnim@idMD6AnimProps@@QBAPBVidMD6Anim@@PBVidDeclMD6@@H@Z
// EA : 0x825F8A98
// RVA : 0x005F8A98
// PDB : w:\tech5\engine\decls\animwebs\animprops.cpp
// ========================================================================
const idMD6Anim *__fastcall idMD6AnimProps::SelectAndLoadAnim(
idMD6AnimProps *this,
const idDeclMD6 *declMD6,
const int index)
{
const idMD6Alias *Alias; // r3
if ( this->anim != nullptr )
return this->anim;
if ( this->aliasHandle.value == 0xFFFF )
return nullptr;
Alias = idDeclMD6::FindAlias(this: declMD6, aliasHandle: &this->aliasHandle, includeInherited: true);
if ( Alias == nullptr )
return nullptr;
return (const idMD6Anim *)idResourceList::Load(
this: &idMD6Anim::resourceList,
name: Alias->animRefs.list[index].str,
makeDefault: false,
skipStaleCheck: true);
}
@@ -0,0 +1,33 @@
// ========================================================================
// ??0animList_t@idAnimWebBlendEquation@@QAA@XZ
// EA : 0x825F91E8
// RVA : 0x005F91E8
// PDB : w:\tech5\engine\decls\animwebs\animwebblendequation.h
// ========================================================================
idAnimWebBlendEquation::animList_t *__fastcall idAnimWebBlendEquation::animList_t::animList_t(
idAnimWebBlendEquation::animList_t *this)
{
this->filterList.list = this->filterList.staticList;
this->filterList.granularity = 1;
this->filterList.num = 0;
this->filterList.memTag = 5;
this->filterList.size = 10;
this->filterList.listStatic = 1;
this->animList.size = 256;
this->animList.num = 0;
this->animList.granularity = 1;
this->animList.list = this->animList.staticList;
this->animList.memTag = 5;
this->animList.listStatic = 1;
this->tagList.size = 256;
this->tagList.num = 0;
this->tagList.granularity = 1;
this->tagList.list = this->tagList.staticList;
this->tagList.memTag = 5;
this->tagList.listStatic = 1;
this->animPropIndex = -1;
return this;
}
@@ -0,0 +1,208 @@
// ========================================================================
// ?Free@idScalarMemBlock@@AAAXXZ
// EA : 0x825FDA58
// RVA : 0x005FDA58
// PDB : w:\tech5\engine\decls\animwebs\animwebscalar.cpp
// ========================================================================
void __fastcall idScalarMemBlock::Free(idScalarMemBlock *this)
{
float *floats; // r4
floats = this->floats;
this->num = 0;
if ( floats != nullptr )
{
idMem::Free(this: &mem, ptr: floats, align: ALIGN_16);
this->floats = nullptr;
}
}
// ========================================================================
// ?SetScalarPtr@idAnimWebScalar@@QAAXPAM@Z
// EA : 0x825FDAB0
// RVA : 0x005FDAB0
// PDB : w:\tech5\engine\decls\animwebs\animwebscalar.cpp
// ========================================================================
void __fastcall idAnimWebScalar::SetScalarPtr(idAnimWebScalar *this, float *scalar)
{
if ( scalar != nullptr )
{
this->scalarPtr = scalar;
this->scalarIndex = -1;
}
}
// ========================================================================
// ?SetIndex@idAnimWebScalar@@QAAXABVidScalarMemBlock@@H@Z
// EA : 0x825FDAC8
// RVA : 0x005FDAC8
// PDB : w:\tech5\engine\decls\animwebs\animwebscalar.cpp
// ========================================================================
void __fastcall idAnimWebScalar::SetIndex(idAnimWebScalar *this, const idScalarMemBlock *memBlock, __int16 index)
{
this->scalarIndex = index;
this->scalarPtr = nullptr;
}
// ========================================================================
// ?Alloc@idScalarMemBlock@@QAAXH@Z
// EA : 0x825FDAD8
// RVA : 0x005FDAD8
// PDB : w:\tech5\engine\decls\animwebs\animwebscalar.cpp
// ========================================================================
void __fastcall idScalarMemBlock::Alloc(idScalarMemBlock *this, int num_)
{
float *floats; // r4
floats = this->floats;
this->num = 0;
if ( floats != nullptr )
{
idMem::Free(this: &mem, ptr: floats, align: ALIGN_16);
this->floats = nullptr;
}
this->num = num_;
if ( num_ > 0 )
this->floats = (float *)idMem::AllocWithLocation(
this: &mem,
location: "w:\\tech5\\engine\\decls\\AnimWebs\\AnimWebScalar.cpp(28) : TAG_ANIMWEB",
size: 4 * num_,
tag: TAG_ANIMWEB,
zeroBuffer: false,
align: ALIGN_16,
heap: HEAP_DEFAULTHEAP);
}
// ========================================================================
// ?Free@idScalarMemBlock@@QAAXAAV?$idList@VidAnimWebScalar@@$04@@@Z
// EA : 0x825FDB58
// RVA : 0x005FDB58
// PDB : w:\tech5\engine\decls\animwebs\animwebscalar.cpp
// ========================================================================
void __fastcall idScalarMemBlock::Free(idScalarMemBlock *this, idList<idAnimWebScalar,5> *scalars)
{
int v3; // r11
int v4; // r10
idAnimWebScalar *v5; // r9
float *floats; // r4
v3 = 0;
if ( scalars->num > 0 )
{
v4 = 0;
do
{
++v3;
v5 = &scalars->list[v4++];
v5->scalarIndex = -1;
}
while ( v3 < scalars->num );
}
floats = this->floats;
this->num = 0;
if ( floats != nullptr )
{
idMem::Free(this: &mem, ptr: floats, align: ALIGN_16);
this->floats = nullptr;
}
}
// ========================================================================
// ?SetName@idAnimWebScalar@@QAAXPBD@Z
// EA : 0x825FDBE8
// RVA : 0x005FDBE8
// PDB : w:\tech5\engine\decls\animwebs\animwebscalar.cpp
// ========================================================================
// attributes: thunk
void __fastcall idAnimWebScalar::SetName(idAnimWebScalar *this, const char *name_)
{
idAtomicString::Set(this: &this->name, str_: name_);
}
// ========================================================================
// ?GetScalar@idAnimWebScalar@@QBAMABVidScalarMemBlock@@@Z
// EA : 0x825FDBF0
// RVA : 0x005FDBF0
// PDB : w:\tech5\engine\decls\animwebs\animwebscalar.cpp
// ========================================================================
float __fastcall idAnimWebScalar::GetScalar(idAnimWebScalar *this, const idScalarMemBlock *memBlock)
{
int scalarIndex; // r11
float *scalarPtr; // r11
double v4; // fp1
scalarIndex = this->scalarIndex;
if ( scalarIndex >= 0 )
{
v4 = memBlock->floats[scalarIndex];
}
else
{
scalarPtr = this->scalarPtr;
if ( scalarPtr != nullptr )
{
v4 = *scalarPtr;
}
else
{
idLib::Warning(
fmt: "idAnimWebScalar::GetScalar - Trying to access uninitialized blend variable \"%s\"",
this->name.str);
v4 = 0.0;
}
}
return *((float *)&v4 + 1);
}
// ========================================================================
// ?SetScalar@idAnimWebScalar@@QAAXAAVidScalarMemBlock@@M@Z
// EA : 0x825FDC70
// RVA : 0x005FDC70
// PDB : w:\tech5\engine\decls\animwebs\animwebscalar.cpp
// ========================================================================
void __fastcall idAnimWebScalar::SetScalar(idAnimWebScalar *this, idScalarMemBlock *memBlock, double f)
{
int scalarIndex; // r11
scalarIndex = this->scalarIndex;
if ( scalarIndex >= 0 )
memBlock->floats[scalarIndex] = f;
else
*this->scalarPtr = f;
}
// ========================================================================
// ?Init@idAnimWebScalar@@QAAXPBDEPAM@Z
// EA : 0x825FDCA0
// RVA : 0x005FDCA0
// PDB : w:\tech5\engine\decls\animwebs\animwebscalar.cpp
// ========================================================================
void __fastcall idAnimWebScalar::Init(idAnimWebScalar *this, const char *name_, unsigned __int8 flags_, float *scalar)
{
idAtomicString::Set(this: &this->name, str_: name_);
this->flags = flags_;
if ( scalar != nullptr )
{
this->scalarPtr = scalar;
this->scalarIndex = -1;
}
}
@@ -0,0 +1,14 @@
// ========================================================================
// ??1idScalarMemBlock@@QAA@XZ
// EA : 0x826D0CF0
// RVA : 0x006D0CF0
// PDB : w:\tech5\engine\decls\animwebs\animwebscalar.h
// ========================================================================
// attributes: thunk
void __fastcall idScalarMemBlock::~idScalarMemBlock(idScalarMemBlock *this)
{
idScalarMemBlock::Free(this);
}
@@ -0,0 +1,840 @@
// ========================================================================
// ?GetDuration@blendParms_t@@QBAFXZ
// EA : 0x825FDCE0
// RVA : 0x005FDCE0
// PDB : w:\tech5\engine\decls\animwebs\blendparms.cpp
// ========================================================================
int __fastcall blendParms_t::GetDuration(blendParms_t *this)
{
return (unsigned __int16)this->parms.destDuration;
}
// ========================================================================
// ?GetDurationMS@blendParms_t@@QBAFXZ
// EA : 0x825FDCE8
// RVA : 0x005FDCE8
// PDB : w:\tech5\engine\decls\animwebs\blendparms.cpp
// ========================================================================
int __fastcall blendParms_t::GetDurationMS(blendParms_t *this, int a2, int a3, __int64 a4)
{
LODWORD(a4) = this->parms.destDuration;
return (unsigned __int16)(int)(float)((float)((float)a4 * (float)1000.0) * (float)0.033333335);
}
// ========================================================================
// ??0blendParms_t@@QAA@XZ
// EA : 0x825FDD40
// RVA : 0x005FDD40
// PDB : w:\tech5\engine\decls\animwebs\blendparms.cpp
// ========================================================================
blendParms_t *__fastcall blendParms_t::blendParms_t(blendParms_t *this)
{
this->parms.srcAnim = nullptr;
this->parms.destAnim = nullptr;
*(_DWORD *)&this->parms.sourceStartFrame = 0x7FFF;
this->parms.destStartFrame = 0;
this->parms.destDuration = 0;
this->parms.flags = 0;
this->parms.originBlend = 0;
this->parms.blendType = 0;
return this;
}
// ========================================================================
// ?Write@blendParms_t@@QBAXAAVidFile_String@@PBD@Z
// EA : 0x825FDD70
// RVA : 0x005FDD70
// PDB : w:\tech5\engine\decls\animwebs\blendparms.cpp
// ========================================================================
void __fastcall blendParms_t::Write(blendParms_t *this, idFile_String *str, __int64 indent, __int64 a4, __int64 a5)
{
int v7; // r30
va *v8; // r3
__int64 v9; // r10
__int64 v10; // r8
__int64 v11; // r6
va *v12; // r3
__int64 v13; // r10
__int64 v14; // r8
const idMD6Anim *destAnim; // r11
__int64 v16; // r6
va *v17; // r3
__int64 v18; // r10
__int64 v19; // r6
__int64 v20; // r8
va *v21; // r3
__int64 v22; // r8
__int64 v23; // r6
__int64 v24; // r10
va *v25; // r3
__int64 v26; // r6
__int64 v27; // r10
__int64 v28; // r8
va *v29; // r3
__int64 v30; // r10
__int64 v31; // r6
__int64 v32; // r8
va *v33; // r3
__int64 v34; // r10
__int64 v35; // r6
__int64 v36; // r8
int v37; // r11
__int64 v38; // r10
__int64 v39; // r8
__int64 v40; // r6
va *v41; // r3
int blendType; // r11
__int64 v43; // r10
__int64 v44; // r8
__int64 v45; // r6
va *v46; // r3
va *v47; // r3
va *v48; // r3
va *v49; // r3
int v50; // [sp+8h] [-1078h]
int v51; // [sp+8h] [-1078h]
int v52; // [sp+8h] [-1078h]
int v53; // [sp+8h] [-1078h]
int v54; // [sp+8h] [-1078h]
int v55; // [sp+8h] [-1078h]
int v56; // [sp+8h] [-1078h]
int v57; // [sp+8h] [-1078h]
int v58; // [sp+Ch] [-1074h]
int v59; // [sp+Ch] [-1074h]
int v60; // [sp+Ch] [-1074h]
int v61; // [sp+Ch] [-1074h]
int v62; // [sp+Ch] [-1074h]
int v63; // [sp+Ch] [-1074h]
int v64; // [sp+Ch] [-1074h]
int v65; // [sp+Ch] [-1074h]
int v66; // [sp+10h] [-1070h]
int v67; // [sp+10h] [-1070h]
int v68; // [sp+10h] [-1070h]
int v69; // [sp+10h] [-1070h]
int v70; // [sp+10h] [-1070h]
int v71; // [sp+10h] [-1070h]
int v72; // [sp+10h] [-1070h]
int v73; // [sp+10h] [-1070h]
int v74; // [sp+14h] [-106Ch]
int v75; // [sp+14h] [-106Ch]
int v76; // [sp+14h] [-106Ch]
int v77; // [sp+14h] [-106Ch]
int v78; // [sp+14h] [-106Ch]
int v79; // [sp+14h] [-106Ch]
int v80; // [sp+14h] [-106Ch]
int v81; // [sp+14h] [-106Ch]
int v82; // [sp+18h] [-1068h]
int v83; // [sp+18h] [-1068h]
int v84; // [sp+18h] [-1068h]
int v85; // [sp+18h] [-1068h]
int v86; // [sp+18h] [-1068h]
int v87; // [sp+18h] [-1068h]
int v88; // [sp+18h] [-1068h]
int v89; // [sp+18h] [-1068h]
int v90; // [sp+1Ch] [-1064h]
int v91; // [sp+1Ch] [-1064h]
int v92; // [sp+1Ch] [-1064h]
int v93; // [sp+1Ch] [-1064h]
int v94; // [sp+1Ch] [-1064h]
int v95; // [sp+1Ch] [-1064h]
int v96; // [sp+1Ch] [-1064h]
int v97; // [sp+1Ch] [-1064h]
va v98; // [sp+50h] [-1030h] BYREF
v7 = HIDWORD(indent);
v8 = va::va(
this: &v98,
fmt: "%sblendParms {\n",
a3: indent,
a4,
a5,
a6: v50,
a7: v58,
a8: v66,
a9: v74,
a10: v82,
a11: v90);
idFile_String::operator+=(this: str, str: v8->buffer);
if ( this->parms.srcAnim != nullptr )
LODWORD(v11) = this->parms.srcAnim->name.str;
else
LODWORD(v11) = &byte_8200D768;
HIDWORD(v11) = v7;
v12 = va::va(
this: &v98,
fmt: "%s\tsrcAnim \"%s\"\n",
a3: v11,
a4: v10,
a5: v9,
a6: v51,
a7: v59,
a8: v67,
a9: v75,
a10: v83,
a11: v91);
idFile_String::operator+=(this: str, str: v12->buffer);
destAnim = this->parms.destAnim;
if ( destAnim != nullptr )
LODWORD(v16) = destAnim->name.str;
else
LODWORD(v16) = &byte_8200D768;
HIDWORD(v16) = v7;
v17 = va::va(
this: &v98,
fmt: "%s\tdestAnim \"%s\"\n",
a3: v16,
a4: v14,
a5: v13,
a6: v52,
a7: v60,
a8: v68,
a9: v76,
a10: v84,
a11: v92);
idFile_String::operator+=(this: str, str: v17->buffer);
HIDWORD(v18) = (unsigned __int16)this->parms.sourceStartFrame;
LODWORD(v18) = &unk_821B0000;
HIDWORD(v19) = v7;
LODWORD(v19) = SWORD1(v18);
v21 = va::va(
this: &v98,
fmt: "%s\tsourceStartFrame %d\n",
a3: v19,
a4: v20,
a5: v18,
a6: v53,
a7: v61,
a8: v69,
a9: v77,
a10: v85,
a11: v93);
idFile_String::operator+=(this: str, str: v21->buffer);
HIDWORD(v22) = (unsigned __int16)this->parms.sourceDuration;
LODWORD(v22) = &unk_821B0000;
HIDWORD(v23) = v7;
LODWORD(v23) = SWORD1(v22);
v25 = va::va(
this: &v98,
fmt: "%s\tsourceDuration %d\n",
a3: v23,
a4: v22,
a5: v24,
a6: v54,
a7: v62,
a8: v70,
a9: v78,
a10: v86,
a11: v94);
idFile_String::operator+=(this: str, str: v25->buffer);
HIDWORD(v26) = v7;
LODWORD(v26) = this->parms.destStartFrame;
v29 = va::va(
this: &v98,
fmt: "%s\tdestStartFrame %d\n",
a3: v26,
a4: v28,
a5: v27,
a6: v55,
a7: v63,
a8: v71,
a9: v79,
a10: v87,
a11: v95);
idFile_String::operator+=(this: str, str: v29->buffer);
HIDWORD(v30) = (unsigned __int16)this->parms.destDuration;
LODWORD(v30) = &unk_821B0000;
HIDWORD(v31) = v7;
LODWORD(v31) = SWORD1(v30);
v33 = va::va(
this: &v98,
fmt: "%s\tdestDuration %d\n",
a3: v31,
a4: v32,
a5: v30,
a6: v56,
a7: v64,
a8: v72,
a9: v80,
a10: v88,
a11: v96);
idFile_String::operator+=(this: str, str: v33->buffer);
LODWORD(v36) = (unsigned __int8)this->parms.originBlend;
v37 = (char)v36;
if ( (_BYTE)v36 != 0 )
{
LODWORD(v38) = &idSort_Quick<idSortedMaterial,idSort_SortedMaterial> `RTTI Type Descriptor';
HIDWORD(v38) = 4 * (char)v36;
LODWORD(v39) = idMD6Blend::originBlendNames;
HIDWORD(v39) = &unk_821B0000;
HIDWORD(v40) = v7;
LODWORD(v40) = idMD6Blend::originBlendNames[v37];
v41 = va::va(
this: &v98,
fmt: "%s\toriginBlend \"%s\"\n",
a3: v40,
a4: v39,
a5: v38,
a6: v57,
a7: v65,
a8: v73,
a9: v81,
a10: v89,
a11: v97);
idFile_String::operator+=(this: str, str: v41->buffer);
}
blendType = this->parms.blendType;
if ( this->parms.blendType != 0 )
{
LODWORD(v43) = &idSort_Quick<idSortedMaterial,idSort_SortedMaterial> `RTTI Type Descriptor';
HIDWORD(v43) = 4 * blendType;
LODWORD(v44) = idMD6Branch::blendTypeNames;
HIDWORD(v44) = &unk_821B0000;
HIDWORD(v45) = v7;
LODWORD(v45) = idMD6Branch::blendTypeNames[blendType];
v46 = va::va(
this: &v98,
fmt: "%s\tblendType \"%s\"\n",
a3: v45,
a4: v44,
a5: v43,
a6: v57,
a7: v65,
a8: v73,
a9: v81,
a10: v89,
a11: v97);
idFile_String::operator+=(this: str, str: v46->buffer);
}
if ( (this->parms.flags & 1) != 0 )
{
HIDWORD(v35) = v7;
LODWORD(v34) = this->parms.flags & 1;
v47 = va::va(
this: &v98,
fmt: "%s\tsourceEndRelative\n",
a3: v35,
a4: v36,
a5: v34,
a6: v57,
a7: v65,
a8: v73,
a9: v81,
a10: v89,
a11: v97);
idFile_String::operator+=(this: str, str: v47->buffer);
}
LODWORD(v34) = this->parms.flags & 2;
if ( (this->parms.flags & 2) != 0 )
{
HIDWORD(v35) = v7;
v48 = va::va(
this: &v98,
fmt: "%s\tdestEndRelative\n",
a3: v35,
a4: v36,
a5: v34,
a6: v57,
a7: v65,
a8: v73,
a9: v81,
a10: v89,
a11: v97);
idFile_String::operator+=(this: str, str: v48->buffer);
}
HIDWORD(v35) = v7;
v49 = va::va(
this: &v98,
fmt: "%s}\n",
a3: v35,
a4: v36,
a5: v34,
a6: v57,
a7: v65,
a8: v73,
a9: v81,
a10: v89,
a11: v97);
idFile_String::operator+=(this: str, str: v49->buffer);
}
// ========================================================================
// ?GetRelativeFrames@blendParms_t@@ABA_NPBVidMD6Anim@@_NABF2AAF3@Z
// EA : 0x825FDFC8
// RVA : 0x005FDFC8
// PDB : w:\tech5\engine\decls\animwebs\blendparms.cpp
// ========================================================================
int __fastcall blendParms_t::GetRelativeFrames(
blendParms_t *this,
const idMD6Anim *anim,
const bool endRelative,
__int16 *inFirstFrame,
const __int16 *inDuration,
__int16 *outFirstRelativeFrame,
__int16 *outLastRelativeFrame)
{
idMD6AnimData *animData; // r11
int v9; // r11
if ( endRelative )
{
if ( anim == nullptr )
return 0;
animData = anim->animData;
if ( animData != nullptr )
LOWORD(animData) = animData->numFrames;
*outFirstRelativeFrame = (_WORD)animData - *inFirstFrame - 1;
}
else
{
*outFirstRelativeFrame = *inFirstFrame;
}
v9 = *inDuration + *outFirstRelativeFrame;
if ( v9 >= 0 )
{
if ( v9 > 0x7FFF )
LOWORD(v9) = 0x7FFF;
*outLastRelativeFrame = v9;
return 1;
}
else
{
*outLastRelativeFrame = 0;
return 1;
}
}
// ========================================================================
// ?GetSourceFrames@blendParms_t@@QBA_NPBVidMD6Anim@@AAF1@Z
// EA : 0x825FE058
// RVA : 0x005FE058
// PDB : w:\tech5\engine\decls\animwebs\blendparms.cpp
// ========================================================================
int __fastcall blendParms_t::GetSourceFrames(
blendParms_t *this,
const idMD6Anim *anim,
__int16 *firstFrame,
__int16 *lastFrame)
{
return blendParms_t::GetRelativeFrames(
this,
anim,
endRelative: this->parms.flags & 1,
inFirstFrame: &this->parms.sourceStartFrame,
inDuration: &this->parms.sourceDuration,
outFirstRelativeFrame: firstFrame,
outLastRelativeFrame: lastFrame);
}
// ========================================================================
// ?GetDestFrames@blendParms_t@@QBA_NPBVidMD6Anim@@AAF1@Z
// EA : 0x825FE078
// RVA : 0x005FE078
// PDB : w:\tech5\engine\decls\animwebs\blendparms.cpp
// ========================================================================
int __fastcall blendParms_t::GetDestFrames(
blendParms_t *this,
const idMD6Anim *anim,
__int16 *firstFrame,
__int16 *duration_)
{
__int16 v5[4]; // [sp+50h] [-10h] BYREF
*duration_ = this->parms.destDuration;
return blendParms_t::GetRelativeFrames(
this,
anim,
endRelative: (this->parms.flags & 2) != 0,
inFirstFrame: &this->parms.destStartFrame,
inDuration: &this->parms.destDuration,
outFirstRelativeFrame: firstFrame,
outLastRelativeFrame: v5);
}
// ========================================================================
// ?SetDestStartFrame@blendParms_t@@QAAXH@Z
// EA : 0x825FE0C0
// RVA : 0x005FE0C0
// PDB : w:\tech5\engine\decls\animwebs\blendparms.cpp
// ========================================================================
void __fastcall blendParms_t::SetDestStartFrame(blendParms_t *this, int frame)
{
if ( frame >= -32767 )
{
if ( frame <= 0x7FFF )
this->parms.destStartFrame = frame;
else
this->parms.destStartFrame = 0x7FFF;
}
else
{
this->parms.destStartFrame = -32767;
}
}
// ========================================================================
// ?SetDuration@blendParms_t@@QAAXH@Z
// EA : 0x825FE0F0
// RVA : 0x005FE0F0
// PDB : w:\tech5\engine\decls\animwebs\blendparms.cpp
// ========================================================================
void __fastcall blendParms_t::SetDuration(blendParms_t *this, int frame)
{
if ( frame >= -32767 )
{
if ( frame <= 0x7FFF )
this->parms.destDuration = frame;
else
this->parms.destDuration = 0x7FFF;
}
else
{
this->parms.destDuration = -32767;
}
}
// ========================================================================
// ?SetDurationMS@blendParms_t@@QAAXH@Z
// EA : 0x825FE120
// RVA : 0x005FE120
// PDB : w:\tech5\engine\decls\animwebs\blendparms.cpp
// ========================================================================
void __fastcall blendParms_t::SetDurationMS(blendParms_t *this, unsigned int ms)
{
int v2; // r11
v2 = (int)(float)((float)((float)__SPAIR64__(&unk_821B0000, ms) * (float)30.0) * (float)0.001);
if ( v2 >= -32767 )
{
if ( v2 > 0x7FFF )
LOWORD(v2) = 0x7FFF;
this->parms.destDuration = v2;
}
else
{
this->parms.destDuration = -32767;
}
}
// ========================================================================
// ?Parse@blendParms_t@@QAAXPAVidDeclAnimWeb@@PAVidDeclAnimWebNode@@PBD2AAVidParser@@@Z
// EA : 0x825FE188
// RVA : 0x005FE188
// PDB : w:\tech5\engine\decls\animwebs\blendparms.cpp
// ========================================================================
void __fastcall blendParms_t::Parse(
blendParms_t *this,
idDeclAnimWeb *decl,
idDeclAnimWebNode *node,
const char *toSubWebName,
const char *toStateName,
idParser *src)
{
idDeclAnimWeb *v7; // r29
idDeclAnimWebNode *v8; // r28
int v10; // r3
__int16 v11; // r11
int v12; // r3
__int16 v13; // r11
int v14; // r3
__int16 v15; // r11
int v16; // r3
__int16 v17; // r11
__int64 v18; // r11
long double v19; // fp2
long double v20; // fp2
__int16 v21; // r3
char v22; // r9
int v23; // r3
char v24; // r9
int v25; // r3
char v26; // r8
int v27; // r3
char flags; // r9
const char **v29; // r30
char v30; // r29
const char **v31; // r30
char v32; // r29
char v33; // [sp+50h] [-130h]
idToken v34; // [sp+90h] [-F0h] BYREF
v34.len = 0;
v34.allocedAndFlag = 20;
v7 = decl;
v34.floatvalue = -3.4028235e38;
v8 = node;
v34.data = v34.baseBuffer;
v34.baseBuffer[0] = 0;
v34.intvalue = 0;
memset(&v34.whiteSpaceStart_p, 0, 12);
idParser::ExpectTokenType(this: src, type: 5, subtype: 46, token: &v34);
v33 = 0;
if ( idParser::ReadToken(this: src, token: &v34) )
{
do
{
if ( v34.type == 5 && v34.subtype == 47 )
break;
if ( idStr::Cmp(s1: v34.data, s2: "srcAnim") != 0 )
{
if ( idStr::Cmp(s1: v34.data, s2: "destAnim") != 0 )
{
if ( idStr::Cmp(s1: v34.data, s2: "sourceStartFrame") != 0 )
{
if ( idStr::Cmp(s1: v34.data, s2: "sourceDuration") != 0 )
{
if ( idStr::Cmp(s1: v34.data, s2: "destStartFrame") != 0 )
{
if ( idStr::Cmp(s1: v34.data, s2: "destDuration") != 0 )
{
if ( idStr::Cmp(s1: v34.data, s2: "duration") != 0 )
{
if ( idStr::Cmp(s1: v34.data, s2: "durationf") != 0 )
{
if ( idStr::Cmp(s1: v34.data, s2: "srcFirstFrame") != 0 )
{
if ( idStr::Cmp(s1: v34.data, s2: "srcLastFrame") != 0 )
{
if ( idStr::Cmp(s1: v34.data, s2: "destFrame") != 0 )
{
if ( idStr::Cmp(s1: v34.data, s2: "originBlend") != 0 )
{
if ( idStr::Cmp(s1: v34.data, s2: "blendType") != 0 )
{
if ( idStr::Cmp(s1: v34.data, s2: "sourceEndRelative") != 0 )
{
if ( idStr::Cmp(s1: v34.data, s2: "destEndRelative") != 0 )
idParser::Error(this: src, str: "Unknown blendParms parameter '%s'", v34.data);
else
this->parms.flags |= 2u;
}
else
{
this->parms.flags |= 1u;
}
}
else
{
this->parms.blendType = 4;
idParser::ExpectTokenType(this: src, type: 1, subtype: 0, token: &v34);
v31 = idMD6Branch::blendTypeNames;
v32 = 0;
while ( idStr::Cmp(s1: v34.data, s2: *v31) != 0 )
{
++v31;
++v32;
if ( (int)v31 >= (int)&dword_835BFC0C )
goto LABEL_66;
}
this->parms.blendType = v32;
LABEL_66:
if ( this->parms.blendType == 4 )
idParser::Error(this: src, str: "Unknown blend type '%s'", v34.data);
}
}
else
{
this->parms.originBlend = 3;
idParser::ExpectTokenType(this: src, type: 1, subtype: 0, token: &v34);
v29 = idMD6Blend::originBlendNames;
v30 = 0;
while ( idStr::Cmp(s1: v34.data, s2: *v29) != 0 )
{
++v29;
++v30;
if ( (int)v29 >= (int)&unk_835BFAF4 )
goto LABEL_58;
}
this->parms.originBlend = v30;
LABEL_58:
if ( this->parms.originBlend == 3 )
idParser::Error(this: src, str: "Unknown origin blend type '%s'", v34.data);
}
}
else
{
v27 = idParser::ParseInt(this: src);
if ( v27 > 0x7FFF )
LOWORD(v27) = 0x7FFF;
flags = this->parms.flags;
this->parms.destStartFrame = v27;
this->parms.flags = flags | 8;
}
}
else
{
v25 = idParser::ParseInt(this: src);
if ( v25 > 0x7FFF )
LOWORD(v25) = 0x7FFF;
v26 = this->parms.flags;
this->parms.sourceDuration = v25;
v33 = 1;
this->parms.flags = v26 | 8;
}
}
else
{
v23 = idParser::ParseInt(this: src);
if ( v23 > 0x7FFF )
LOWORD(v23) = 0x7FFF;
v24 = this->parms.flags;
this->parms.sourceStartFrame = v23;
this->parms.flags = v24 | 4;
}
}
else
{
v21 = idParser::ParseInt(this: src);
v22 = this->parms.flags;
this->parms.destDuration = v21;
this->parms.flags = v22 | 8;
}
}
else
{
LODWORD(v18) = idParser::ParseInt(this: src);
*(double *)&v19 = (float)((float)((float)v18 * (float)0.001) * (float)30.0);
v20 = ceil(x: v19);
this->parms.flags |= 8u;
this->parms.destDuration = (int)(float)*(double *)&v20;
}
}
else
{
v16 = idParser::ParseInt(this: src);
v17 = v16;
if ( v16 >= -32767 )
{
if ( v16 > 0x7FFF )
v17 = 0x7FFF;
this->parms.destDuration = v17;
}
else
{
this->parms.destDuration = -32767;
}
}
}
else
{
v14 = idParser::ParseInt(this: src);
v15 = v14;
if ( v14 >= -32767 )
{
if ( v14 > 0x7FFF )
v15 = 0x7FFF;
this->parms.destStartFrame = v15;
}
else
{
this->parms.destStartFrame = -32767;
}
}
}
else
{
v12 = idParser::ParseInt(this: src);
v13 = v12;
if ( v12 >= -32767 )
{
if ( v12 > 0x7FFF )
v13 = 0x7FFF;
this->parms.sourceDuration = v13;
}
else
{
this->parms.sourceDuration = -32767;
}
}
}
else
{
v10 = idParser::ParseInt(this: src);
v11 = v10;
if ( v10 >= -32767 )
{
if ( v10 > 0x7FFF )
v11 = 0x7FFF;
this->parms.sourceStartFrame = v11;
}
else
{
this->parms.sourceStartFrame = -32767;
}
}
}
else
{
idParser::ExpectTokenType(this: src, type: 1, subtype: 0, token: &v34);
this->parms.destAnim = v34.len != 0
? (const idMD6Anim *)idResourceList::Load(
this: &idMD6Anim::resourceList,
name: v34.data,
makeDefault: true,
skipStaleCheck: false)
: nullptr;
}
}
else
{
idParser::ExpectTokenType(this: src, type: 1, subtype: 0, token: &v34);
this->parms.srcAnim = v34.len != 0
? (const idMD6Anim *)idResourceList::Load(
this: &idMD6Anim::resourceList,
name: v34.data,
makeDefault: true,
skipStaleCheck: false)
: nullptr;
}
}
while ( idParser::ReadToken(this: src, token: &v34) );
v8 = node;
v7 = decl;
}
if ( v33 != 0 )
this->parms.sourceDuration -= this->parms.sourceStartFrame;
idDeclAnimWeb::GetSubWebName(
this: v7,
index: (const idIndex<short,enum idDeclAnimWeb::invalidSubWebIndex_t> *)(unsigned __int16)v8->subWebIndex.value);
idDeclAnimWeb::GetStateName(
this: v7,
index: (const idIndex<short,enum idDeclAnimWeb::invalidStateIndex_t> *)(unsigned __int16)v8->states.stateIndex[0].value);
idStr::FreeData(this: &v34);
}
// ========================================================================
// __unwind$219794
// EA : 0x825FE7F0
// RVA : 0x005FE7F0
// PDB : w:\tech5\engine\decls\animwebs\blendparms.cpp
// ========================================================================
void _unwind_219794()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 384 + 144));
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,29 @@
// ========================================================================
// ?GetBaseModel@idDeclAnimWeb@@QBAPBVidDeclMD6@@XZ
// EA : 0x825FEE70
// RVA : 0x005FEE70
// PDB : w:\tech5\engine\decls\animwebs\declanimweb.h
// ========================================================================
const idDeclMD6 *__fastcall idDeclAnimWeb::GetBaseModel(idDeclAnimWeb *this)
{
if ( this->models.num <= 0 )
return nullptr;
else
return *this->models.list;
}
// ========================================================================
// ?GetDeclInfo@idDeclAnimWeb@@UBAPAVidDeclInfo@@XZ
// EA : 0x82603090
// RVA : 0x00603090
// PDB : w:\tech5\engine\decls\animwebs\declanimweb.h
// ========================================================================
idDeclInfoTemplate<idDeclAnimWeb> *__fastcall idDeclAnimWeb::GetDeclInfo(idDeclAnimWeb *this)
{
return &idDeclAnimWeb::resourceList;
}
@@ -0,0 +1,475 @@
// ========================================================================
// ??1idDeclAnimWebEdge@@UAA@XZ
// EA : 0x82605AB0
// RVA : 0x00605AB0
// PDB : w:\tech5\engine\decls\animwebs\declanimwebedge.cpp
// ========================================================================
void __fastcall idDeclAnimWebEdge::~idDeclAnimWebEdge(idDeclAnimWebEdge *this)
{
this->__vftable = (idDeclAnimWebEdge_vtbl *)&idDeclAnimWebEdge::`vftable';
}
// ========================================================================
// ??0idDeclAnimWebEdge@@QAA@XZ
// EA : 0x82605AC0
// RVA : 0x00605AC0
// PDB : w:\tech5\engine\decls\animwebs\declanimwebedge.cpp
// ========================================================================
idDeclAnimWebEdge *__fastcall idDeclAnimWebEdge::idDeclAnimWebEdge(idDeclAnimWebEdge *this)
{
this->__vftable = (idDeclAnimWebEdge_vtbl *)&idDeclAnimWebEdge::`vftable';
this->destSubWebIndex.value = -1;
blendParms_t::blendParms_t(this: &this->blendParms);
this->customFlags = 0;
return this;
}
// ========================================================================
// ?Parse@idDeclAnimWebEdge@@QAAXPAVidDeclAnimWeb@@PAVidDeclAnimWebNode@@PAVidEdgeCache@2@AAVidParser@@@Z
// EA : 0x82605B18
// RVA : 0x00605B18
// PDB : w:\tech5\engine\decls\animwebs\declanimwebedge.cpp
// ========================================================================
void __fastcall idDeclAnimWebEdge::Parse(
idDeclAnimWebEdge *this,
idDeclAnimWeb *decl,
idDeclAnimWebNode *node,
idDeclAnimWeb::idEdgeCache *edgeCache,
idParser *src)
{
const char *SubWebName; // r3
unsigned __int8 v11; // r23
int len; // r22
unsigned __int8 v13; // r11
const enumTypeInfo_t *EnumInfo; // r3
const enumTypeInfo_t *v15; // r27
const enumValueInfo_t *EnumValueInfo; // r3
char *data; // r5
idIndex<short,enum idDeclAnimWeb::invalidStateIndex_t> v18; // [sp+50h] [-190h] BYREF
__int16 v19; // [sp+52h] [-18Eh] BYREF
idStr v20; // [sp+60h] [-180h] BYREF
int v22; // [sp+84h] [-15Ch]
idToken v23; // [sp+90h] [-150h] BYREF
idToken v24; // [sp+E0h] [-100h] BYREF
idToken v25; // [sp+130h] [-B0h] BYREF
v23.len = 0;
v23.allocedAndFlag = 20;
v23.floatvalue = -3.4028235e38;
v23.data = v23.baseBuffer;
v23.baseBuffer[0] = 0;
v23.intvalue = 0;
memset(&v23.whiteSpaceStart_p, 0, 12);
idParser::ExpectTokenType(this: src, type: 5, subtype: 46, token: &v23);
SubWebName = idDeclAnimWeb::GetSubWebName(
this: decl,
index: (const idIndex<short,enum idDeclAnimWeb::invalidSubWebIndex_t> *)(unsigned __int16)node->subWebIndex.value);
idStr::idStr(this: &v20, text: SubWebName);
v25.floatvalue = -3.4028235e38;
v25.allocedAndFlag = 20;
v25.data = v25.baseBuffer;
v25.len = 0;
v25.baseBuffer[0] = 0;
v25.intvalue = 0;
memset(&v25.whiteSpaceStart_p, 0, 12);
idParser::ExpectTokenString(this: src, string: "toState");
idParser::ExpectTokenType(this: src, type: 1, subtype: 0, token: &v25);
v11 = edgeCache->flags & 0xFE;
if ( idParser::CheckTokenString(this: src, string: "toSubWeb") != 0 )
{
idParser::ExpectTokenType(this: src, type: 1, subtype: 0, token: &v23);
len = v23.len;
idStr::EnsureAlloced(this: &v20, amount: v23.len + 1, keepold: false, geometricGrowth: false);
memcpy(Dst: v20.data, Src: v23.data, Size: len);
v20.data[len] = 0;
v20.len = len;
}
if ( idParser::CheckTokenString(this: src, string: "weightScale") != 0 )
{
v22 = (int)(float)(idParser::ParseFloat(this: src, errorFlag: nullptr) * (float)16.0);
v13 = v22;
if ( v22 >= 0 )
{
if ( v22 > 255 )
v13 = -1;
}
else
{
v13 = 0;
}
edgeCache->weightScale = v13;
}
if ( idParser::CheckTokenString(this: src, string: "randomizeWeight") != 0 )
v11 |= idParser::ParseBool(this: src);
if ( idParser::CheckTokenString(this: src, string: "blendParms") != 0 )
blendParms_t::Parse(this: &this->blendParms, decl, node, toSubWebName: v20.data, toStateName: v25.data, src);
if ( idParser::CheckTokenString(this: src, string: "customFlags") != 0 )
{
EnumInfo = idTypeInfoTools::FindEnumInfo(this: typeInfoTools, typeName: "animWebEdgeCustomFlag_t");
v24.allocedAndFlag = 20;
v24.floatvalue = -3.4028235e38;
v15 = EnumInfo;
v24.data = v24.baseBuffer;
v24.len = 0;
v24.baseBuffer[0] = 0;
v24.intvalue = 0;
memset(&v24.whiteSpaceStart_p, 0, 12);
while ( idParser::ReadTokenOnLine(this: src, token: &v24) != 0 )
{
if ( v15 != nullptr )
{
EnumValueInfo = idTypeInfoTools::FindEnumValueInfo(
this: typeInfoTools,
enumInfo: v15,
name: v24.data,
defaultIfNotFound: false);
if ( EnumValueInfo != nullptr )
this->customFlags |= EnumValueInfo->value;
else
idLib::Warning(fmt: "unrecognized custom flag '%s'", v24.data);
}
}
idStr::FreeData(this: &v24);
}
if ( v25.len != 0 )
{
v18.value = -1;
idDeclAnimWeb::AddNode(
this: decl,
subWebName: v20.data,
stateName: v25.data,
nodeIndex: (idIndex<short,enum idDeclAnimWeb::invalidNodeIndex_t> *)edgeCache,
subWebIndex: &this->destSubWebIndex,
stateIndex: &v18);
}
else if ( v20.len != 0 )
{
data = v20.data;
edgeCache->destNodeIndex.value = -1;
this->destSubWebIndex.value = HIWORD(idDeclAnimWeb::AddSubWeb(
this: (idDeclAnimWeb *)&v19,
result: (idIndex<short,enum idDeclAnimWeb::invalidSubWebIndex_t> *)decl,
subWebName: data)->__vftable);
}
else
{
idParser::Error(this: src, str: "idDeclAnimWebEdge: sub-web name cannot be empty.");
}
edgeCache->flags = v11;
idParser::ExpectTokenType(this: src, type: 5, subtype: 47, token: &v23);
idStr::FreeData(this: &v25);
idStr::FreeData(this: &v20);
idStr::FreeData(this: &v23);
}
// ========================================================================
// __unwind$219544
// EA : 0x82605EA8
// RVA : 0x00605EA8
// PDB : w:\tech5\engine\decls\animwebs\declanimwebedge.cpp
// ========================================================================
void _unwind_219544()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 480 + 144));
}
// ========================================================================
// __unwind$219545
// EA : 0x82605ED0
// RVA : 0x00605ED0
// PDB : w:\tech5\engine\decls\animwebs\declanimwebedge.cpp
// ========================================================================
void _unwind_219545()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 480 + 96));
}
// ========================================================================
// __unwind$219546
// EA : 0x82605EF8
// RVA : 0x00605EF8
// PDB : w:\tech5\engine\decls\animwebs\declanimwebedge.cpp
// ========================================================================
void _unwind_219546()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 480 + 304));
}
// ========================================================================
// __unwind$219547
// EA : 0x82605F20
// RVA : 0x00605F20
// PDB : w:\tech5\engine\decls\animwebs\declanimwebedge.cpp
// ========================================================================
void _unwind_219547()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 480 + 224));
}
// ========================================================================
// ?Write@idDeclAnimWebEdge@@QBAXPBVidDeclAnimWeb@@PBVidDeclAnimWebNode@@PBVidEdgeCache@2@AAVidFile_String@@PBD@Z
// EA : 0x82605F50
// RVA : 0x00605F50
// PDB : w:\tech5\engine\decls\animwebs\declanimwebedge.cpp
// ========================================================================
void __fastcall idDeclAnimWebEdge::Write(
idDeclAnimWebEdge *this,
const idDeclAnimWeb *decl,
__int64 edgeCache,
__int64 indent,
__int64 a5)
{
int v7; // r26
__int16 *v8; // r25
idFile_String *v9; // r30
unsigned int v10; // r29
va *v11; // r3
__int64 v12; // r10
__int64 v13; // r8
__int64 v14; // r6
va *v15; // r3
const char *StateName; // r3
__int64 v17; // r10
__int64 v18; // r8
__int64 v19; // r8
__int64 v20; // r6
const char *SubWebName; // r3
__int64 v22; // r10
__int64 v23; // r8
va *v24; // r3
__int64 v25; // r10
double v26; // fp0
va *v27; // r3
va *v28; // r3
va *v29; // r3
__int64 v30; // r6
__int64 v31; // r10
__int64 v32; // r8
__int64 v33; // r10
__int64 v34; // r6
__int64 v35; // r8
va *v36; // r3
int v37; // [sp+8h] [-20B8h]
int v38; // [sp+8h] [-20B8h]
int v39; // [sp+8h] [-20B8h]
int v40; // [sp+8h] [-20B8h]
int v41; // [sp+Ch] [-20B4h]
int v42; // [sp+Ch] [-20B4h]
int v43; // [sp+Ch] [-20B4h]
int v44; // [sp+Ch] [-20B4h]
int v45; // [sp+10h] [-20B0h]
int v46; // [sp+10h] [-20B0h]
int v47; // [sp+10h] [-20B0h]
int v48; // [sp+10h] [-20B0h]
int v49; // [sp+14h] [-20ACh]
int v50; // [sp+14h] [-20ACh]
int v51; // [sp+14h] [-20ACh]
int v52; // [sp+14h] [-20ACh]
int v53; // [sp+18h] [-20A8h]
int v54; // [sp+18h] [-20A8h]
int v55; // [sp+18h] [-20A8h]
int v56; // [sp+18h] [-20A8h]
int v57; // [sp+1Ch] [-20A4h]
int v58; // [sp+1Ch] [-20A4h]
int v59; // [sp+1Ch] [-20A4h]
int v60; // [sp+1Ch] [-20A4h]
__int16 v61; // [sp+50h] [-2070h]
idStr v62; // [sp+60h] [-2060h] BYREF
va v63; // [sp+80h] [-2040h] BYREF
va v64; // [sp+1080h] [-1040h] BYREF
v7 = HIDWORD(edgeCache);
HIDWORD(edgeCache) = indent;
v8 = (__int16 *)edgeCache;
v9 = (idFile_String *)HIDWORD(indent);
v10 = indent;
v11 = va::va(
this: &v63,
fmt: "%sedge {\n",
a3: edgeCache,
a4: indent,
a5,
a6: v37,
a7: v41,
a8: v45,
a9: v49,
a10: v53,
a11: v57);
idFile_String::operator+=(this: v9, str: v11->buffer);
v61 = *v8;
if ( *v8 == -1 )
{
LODWORD(v12) = 0;
}
else
{
HIDWORD(v12) = decl->nodes.list;
LODWORD(v13) = 4 * v61;
LODWORD(v12) = *(_DWORD *)(v13 + HIDWORD(v12));
}
if ( v61 >= 0 )
{
StateName = idDeclAnimWeb::GetStateName(
this: decl,
index: (const idIndex<short,enum idDeclAnimWeb::invalidStateIndex_t> *)*(unsigned __int16 *)(v12 + 4));
v15 = va::va(
this: &v63,
fmt: "%s\ttoState \"%s\"\n",
a3: __SPAIR64__(v10, (unsigned int)StateName),
a4: v18,
a5: v17,
a6: v38,
a7: v42,
a8: v46,
a9: v50,
a10: v54,
a11: v58);
}
else
{
HIDWORD(v14) = v10;
v15 = va::va(
this: &v63,
fmt: "%s\ttoState \"\"\n",
a3: v14,
a4: v13,
a5: v12,
a6: v38,
a7: v42,
a8: v46,
a9: v50,
a10: v54,
a11: v58);
}
idFile_String::operator+=(this: v9, str: v15->buffer);
if ( this->destSubWebIndex.value != *(__int16 *)(v7 + 2) )
{
SubWebName = idDeclAnimWeb::GetSubWebName(
this: decl,
index: (const idIndex<short,enum idDeclAnimWeb::invalidSubWebIndex_t> *)(unsigned __int16)this->destSubWebIndex.value);
v24 = va::va(
this: &v63,
fmt: "%s\ttoSubWeb \"%s\"\n",
a3: __SPAIR64__(v10, (unsigned int)SubWebName),
a4: v23,
a5: v22,
a6: v39,
a7: v43,
a8: v47,
a9: v51,
a10: v55,
a11: v59);
idFile_String::operator+=(this: v9, str: v24->buffer);
}
LODWORD(v19) = *((unsigned __int8 *)v8 + 2);
LODWORD(v25) = &unk_821B0000;
HIDWORD(v25) = 0x82000000;
v26 = (float)((float)v19 * (float)0.0625);
if ( v26 != 1.0 )
{
v27 = va::va(
this: &v63,
fmt: "%s\tweightScale %g\n",
a3: __SPAIR64__(v10, LODWORD(v26)),
a4: v19,
a5: v25,
a6: v39,
a7: v43,
a8: v47,
a9: v51,
a10: v55,
a11: v59,
v26);
idFile_String::operator+=(this: v9, str: v27->buffer);
}
LODWORD(v25) = *((_BYTE *)v8 + 3) & 1;
if ( (*((_BYTE *)v8 + 3) & 1) != 0 )
{
HIDWORD(v20) = v10;
v28 = va::va(
this: &v63,
fmt: "%s\trandomizeWeight 1\n",
a3: v20,
a4: v19,
a5: v25,
a6: v39,
a7: v43,
a8: v47,
a9: v51,
a10: v55,
a11: v59);
idFile_String::operator+=(this: v9, str: v28->buffer);
}
HIDWORD(v20) = v10;
v29 = va::va(
this: &v63,
fmt: "%s\t",
a3: v20,
a4: v19,
a5: v25,
a6: v39,
a7: v43,
a8: v47,
a9: v51,
a10: v55,
a11: v59);
idStr::idStr(this: &v62, text: v29);
HIDWORD(v30) = v62.data;
blendParms_t::Write(this: &this->blendParms, str: v9, indent: v30, a4: v32, a5: v31);
LODWORD(v33) = &unk_821B0000;
HIDWORD(v34) = v10;
v36 = va::va(
this: &v64,
fmt: "%s}\n",
a3: v34,
a4: v35,
a5: v33,
a6: v40,
a7: v44,
a8: v48,
a9: v52,
a10: v56,
a11: v60);
idFile_String::operator+=(this: v9, str: v36->buffer);
idStr::FreeData(this: &v62);
}
// ========================================================================
// __unwind$219837
// EA : 0x82606154
// RVA : 0x00606154
// PDB : w:\tech5\engine\decls\animwebs\declanimwebedge.cpp
// ========================================================================
void _unwind_219837()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 8384 + 96));
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,174 @@
// ========================================================================
// ?NumCoordinateDimensions@idModelInfo@idDeclAnimWebNode@@QBAHXZ
// EA : 0x82582E40
// RVA : 0x00582E40
// PDB : w:\tech5\engine\decls\animwebs\declanimwebnode.h
// ========================================================================
int __fastcall idDeclAnimWebNode::idModelInfo::NumCoordinateDimensions(idDeclAnimWebNode::idModelInfo *this)
{
idList<float,32> *coordinates; // r11
char v2; // r10
int num; // r10
signed int v4; // r9
coordinates = this->coordinates;
if ( coordinates == nullptr || coordinates->num <= 0 || (v2 = 1, this->animProps.num <= 0) )
v2 = 0;
if ( v2 == 0 )
return 0;
num = coordinates->num;
v4 = this->animProps.num;
__twllei(v4, 0);
__twlgei(v4 & ~(__ROL4__(num, 1) - 1), 0xFFFFFFFF);
return num / v4;
}
// ========================================================================
// ??1idModelInfo@idDeclAnimWebNode@@QAA@XZ
// EA : 0x825920B8
// RVA : 0x005920B8
// PDB : w:\tech5\engine\decls\animwebs\declanimwebnode.h
// ========================================================================
void __fastcall idDeclAnimWebNode::idModelInfo::~idModelInfo(idDeclAnimWebNode::idModelInfo *this)
{
idDeclAnimWebNode::idModelInfo::SetNumCoordinateDimensions(this, numDimensions: 0);
idDeclAnimWebNode::idModelInfo::UpdateTagGroupsList(this, numTagGroups: 0);
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->animProps);
}
// ========================================================================
// __unwind$688315
// EA : 0x8259210C
// RVA : 0x0059210C
// PDB : w:\tech5\engine\decls\animwebs\declanimwebnode.h
// ========================================================================
void _unwind_688315()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: (idStaticList<idVehicleState *,4> *)(*(_DWORD *)(v0 - 112 + 132) + 12));
}
// ========================================================================
// ??4idModelInfo@idDeclAnimWebNode@@QAAABV01@ABV01@@Z
// EA : 0x82592138
// RVA : 0x00592138
// PDB : w:\tech5\engine\decls\animwebs\declanimwebnode.h
// ========================================================================
const idDeclAnimWebNode::idModelInfo *__fastcall idDeclAnimWebNode::idModelInfo::operator=(
idDeclAnimWebNode::idModelInfo *this,
idDeclAnimWebNode::idModelInfo *other)
{
int v4; // r29
if ( other != this )
{
this->blendEq.str = other->blendEq.str;
this->blendEqFixed.str = other->blendEqFixed.str;
idList<idMD6AnimProps,32>::operator=(this: &this->animProps, other: &other->animProps);
this->modelIndex.value = other->modelIndex.value;
v4 = idDeclAnimWebNode::idModelInfo::NumCoordinateDimensions(this: other);
idDeclAnimWebNode::idModelInfo::SetNumCoordinateDimensions(this, numDimensions: v4);
if ( v4 > 0 )
idList<float,32>::operator=(this: this->coordinates, other: other->coordinates);
idDeclAnimWebNode::idModelInfo::CopyTagGroups(this, other);
}
return this;
}
// ========================================================================
// ?NumTagGroups@idModelInfo@idDeclAnimWebNode@@QBAHXZ
// EA : 0x825F8E38
// RVA : 0x005F8E38
// PDB : w:\tech5\engine\decls\animwebs\declanimwebnode.h
// ========================================================================
int __fastcall idDeclAnimWebNode::idModelInfo::NumTagGroups(idDeclAnimWebNode::idModelInfo *this)
{
idList<idDeclAnimWebTagGroup,32> *tagGroups; // r11
tagGroups = this->tagGroups;
if ( tagGroups != nullptr )
return tagGroups->num;
else
return 0;
}
// ========================================================================
// ?SetCoordinate@idModelInfo@idDeclAnimWebNode@@QAAXHABV?$idList@M$04@@@Z
// EA : 0x82606428
// RVA : 0x00606428
// PDB : w:\tech5\engine\decls\animwebs\declanimwebnode.h
// ========================================================================
void __fastcall idDeclAnimWebNode::idModelInfo::SetCoordinate(
idDeclAnimWebNode::idModelInfo *this,
const int propIndex,
const idList<float,5> *value)
{
idList<float,32> *coordinates; // r11
char v4; // r11
int num; // r29
int v6; // r11
int v7; // r28
int v8; // r10
int v9; // r9
int v10; // r27
int v11; // r26
float *v12; // r7
int v13; // r11
int v14; // r10
int v15; // ctr
coordinates = this->coordinates;
if ( coordinates == nullptr || coordinates->num <= 0 || (v4 = 1, this->animProps.num <= 0) )
v4 = 0;
if ( v4 != 0 )
{
num = value->num;
v6 = 0;
v7 = num * propIndex;
if ( num >= 4 )
{
v8 = 0;
v9 = v7;
do
{
v10 = v7 + 2 + v6;
v11 = v7 + 3 + v6;
v6 += 4;
this->coordinates->list[v9] = value->list[v8];
v12 = &this->coordinates->list[v9];
v9 += 4;
v12[1] = value->list[v8 + 1];
this->coordinates->list[v10] = value->list[v8 + 2];
this->coordinates->list[v11] = value->list[v8 + 3];
v8 += 4;
}
while ( v6 < num - 3 );
}
if ( v6 < num )
{
v14 = v6 + v7;
v15 = num - v6;
v13 = v6;
do
{
this->coordinates->list[v14++] = value->list[v13++];
--v15;
}
while ( v15 != 0 );
}
}
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetDeclInfo@idDeclAF@@UBAPAVidDeclInfo@@XZ
// EA : 0x82613908
// RVA : 0x00613908
// PDB : w:\tech5\engine\decls\declaf.h
// ========================================================================
idDeclInfoTemplate<idDeclAF> *__fastcall idDeclAF::GetDeclInfo(idDeclAF *this)
{
return &idDeclAF::resourceList;
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,27 @@
// ========================================================================
// ?GetDeclInfo@idDeclBreakable@@UBAPAVidDeclInfo@@XZ
// EA : 0x82616010
// RVA : 0x00616010
// PDB : w:\tech5\engine\decls\declbreakable.h
// ========================================================================
idDeclInfoTemplate<idDeclBreakable> *__fastcall idDeclBreakable::GetDeclInfo(idDeclBreakable *this)
{
return &idDeclBreakable::resourceList;
}
// ========================================================================
// ?GetDeclInfo@idDeclDestructiblePieceInfo@@UBAPAVidDeclInfo@@XZ
// EA : 0x82622DC0
// RVA : 0x00622DC0
// PDB : w:\tech5\engine\decls\declbreakable.h
// ========================================================================
idDeclInfoTemplate<idDeclDestructiblePieceInfo> *__fastcall idDeclDestructiblePieceInfo::GetDeclInfo(
idDeclDestructiblePieceInfo *this)
{
return &idDeclDestructiblePieceInfo::resourceList;
}
@@ -0,0 +1,158 @@
// ========================================================================
// ??0idDeclDragJoints@@QAA@XZ
// EA : 0x826182E0
// RVA : 0x006182E0
// PDB : w:\tech5\engine\decls\decldragjoints.cpp
// ========================================================================
idDeclDragJoints *__fastcall idDeclDragJoints::idDeclDragJoints(idDeclDragJoints *this)
{
idDeclTypeInfo::idDeclTypeInfo(this: &this->idDeclTypeInfo);
this->__vftable = (idDeclDragJoints_vtbl *)&idDeclDragJoints::`vftable';
this->baseJoint.len = 0;
this->baseJoint.allocedAndFlag = 20;
this->baseJoint.data = this->baseJoint.baseBuffer;
this->baseJoint.baseBuffer[0] = 0;
this->joints.granularity = 0;
this->joints.listStatic = 0;
this->joints.memTag = 5;
this->joints.list = nullptr;
this->joints.size = 0;
this->joints.num = 0;
this->subWebs.granularity = 0;
this->subWebs.memTag = 5;
this->subWebs.listStatic = 0;
this->subWebs.list = nullptr;
this->subWebs.size = 0;
this->subWebs.num = 0;
this->ghostJointDistance = 16.0;
return this;
}
// ========================================================================
// __unwind$219278
// EA : 0x82618398
// RVA : 0x00618398
// PDB : w:\tech5\engine\decls\decldragjoints.cpp
// ========================================================================
void _unwind_219278()
{
int v0; // r12
idDeclTypeInfo::~idDeclTypeInfo(this: *(idDeclTypeInfo **)(v0 - 112 + 132));
}
// ========================================================================
// __unwind$219279
// EA : 0x826183C0
// RVA : 0x006183C0
// PDB : w:\tech5\engine\decls\decldragjoints.cpp
// ========================================================================
void _unwind_219279()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(*(_DWORD *)(v0 - 112 + 132) + 68));
}
// ========================================================================
// __unwind$219280
// EA : 0x826183EC
// RVA : 0x006183EC
// PDB : w:\tech5\engine\decls\decldragjoints.cpp
// ========================================================================
void _unwind_219280()
{
int v0; // r12
idList<idStr,99>::~idList<idStr,99>(this: (idList<idStr,5> *)(*(_DWORD *)(v0 - 112 + 132) + 100));
}
// ========================================================================
// ??1idDeclDragJoints@@UAA@XZ
// EA : 0x82618430
// RVA : 0x00618430
// PDB : w:\tech5\engine\decls\decldragjoints.cpp
// ========================================================================
void __fastcall idDeclDragJoints::~idDeclDragJoints(idDeclDragJoints *this)
{
idStr *list; // r3
idJointName *v3; // r3
this->__vftable = (idDeclDragJoints_vtbl *)&idDeclDragJoints::`vftable';
if ( this->subWebs.listStatic == 0 || this->subWebs.listStatic == 2 )
{
list = this->subWebs.list;
if ( list != nullptr )
idListArrayDelete<idStr>(ptr: list, num: this->subWebs.size);
this->subWebs.list = nullptr;
this->subWebs.size = 0;
}
this->subWebs.num = 0;
if ( this->joints.listStatic == 0 || this->joints.listStatic == 2 )
{
v3 = this->joints.list;
if ( v3 != nullptr )
idListArrayDelete<idStr>(ptr: v3, num: this->joints.size);
this->joints.list = nullptr;
this->joints.size = 0;
}
this->joints.num = 0;
idStr::FreeData(this: &this->baseJoint);
idDeclTypeInfo::~idDeclTypeInfo(this: &this->idDeclTypeInfo);
}
// ========================================================================
// __unwind$219375
// EA : 0x826184D8
// RVA : 0x006184D8
// PDB : w:\tech5\engine\decls\decldragjoints.cpp
// ========================================================================
void _unwind_219375()
{
int v0; // r12
idDeclTypeInfo::~idDeclTypeInfo(this: *(idDeclTypeInfo **)(v0 - 112 + 132));
}
// ========================================================================
// __unwind$219376
// EA : 0x82618500
// RVA : 0x00618500
// PDB : w:\tech5\engine\decls\decldragjoints.cpp
// ========================================================================
void _unwind_219376()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(*(_DWORD *)(v0 - 112 + 132) + 68));
}
// ========================================================================
// __unwind$219377
// EA : 0x8261852C
// RVA : 0x0061852C
// PDB : w:\tech5\engine\decls\decldragjoints.cpp
// ========================================================================
void _unwind_219377()
{
int v0; // r12
idList<idStr,99>::~idList<idStr,99>(this: (idList<idStr,5> *)(*(_DWORD *)(v0 - 112 + 132) + 100));
}
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetDeclInfo@idDeclDragJoints@@UBAPAVidDeclInfo@@XZ
// EA : 0x82618418
// RVA : 0x00618418
// PDB : w:\tech5\engine\decls\decldragjoints.h
// ========================================================================
idDeclInfoTemplate<idDeclDragJoints> *__fastcall idDeclDragJoints::GetDeclInfo(idDeclDragJoints *this)
{
return &idDeclDragJoints::resourceList;
}
@@ -0,0 +1,48 @@
// ========================================================================
// ??0idDeclElectricBolt@@QAA@XZ
// EA : 0x826185B8
// RVA : 0x006185B8
// PDB : w:\tech5\engine\decls\declelectricbolt.cpp
// ========================================================================
idDeclElectricBolt *__fastcall idDeclElectricBolt::idDeclElectricBolt(idDeclElectricBolt *this)
{
idDeclTypeInfo::idDeclTypeInfo(this: &this->idDeclTypeInfo);
this->__vftable = (idDeclElectricBolt_vtbl *)&idDeclElectricBolt::`vftable';
this->maxDeviation = 50.0;
this->startWidth = 10.0;
this->endWidth = 10.0;
this->material = nullptr;
this->applyGradient = false;
this->revealTime = 0;
this->color.x = 1.0;
this->color.y = 1.0;
this->color.z = 1.0;
this->color.w = 1.0;
this->subdivisions = 1;
this->brightness = 1.0;
this->maxBranchLevels = 0;
this->branchProbability = 0.2;
this->branchStartWidth = 5.0;
this->branchEndWidth = 5.0;
this->branchLength.y = 20.0;
this->branchLength.x = 10.0;
this->branchSubdivisions = 2;
this->jitterTable = nullptr;
this->jitterFalloffTable = nullptr;
this->maxBranchAngle = 10.0;
this->maxBranchDeviation = 15.0;
this->jitterDecay = 0.0;
this->jitterSpeed = 0.0099999998;
this->jitterLeftMag.x = 0.0;
this->jitterLeftMag.y = 0.0;
this->jitterUpMag.x = 0.0;
this->jitterUpMag.y = 0.0;
this->useBranchOverride = false;
this->branchOverride.material = nullptr;
this->branchOverride.frames = 1;
this->branchOverride.width = 10;
return this;
}
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetDeclInfo@idDeclElectricBolt@@UBAPAVidDeclInfo@@XZ
// EA : 0x826186D8
// RVA : 0x006186D8
// PDB : w:\tech5\engine\decls\declelectricbolt.h
// ========================================================================
idDeclInfoTemplate<idDeclElectricBolt> *__fastcall idDeclElectricBolt::GetDeclInfo(idDeclElectricBolt *this)
{
return &idDeclElectricBolt::resourceList;
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetDeclInfo@idDeclEntityDef@@UBAPAVidDeclInfo@@XZ
// EA : 0x82618B98
// RVA : 0x00618B98
// PDB : w:\tech5\engine\decls\declentitydef.h
// ========================================================================
idDeclInfoTemplate<idDeclEntityDef> *__fastcall idDeclEntityDef::GetDeclInfo(idDeclEntityDef *this)
{
return &idDeclEntityDef::resourceList;
}
@@ -0,0 +1,222 @@
// ========================================================================
// ?DefaultDefinition@idDeclEnv@@UBAPBDXZ
// EA : 0x8261B378
// RVA : 0x0061B378
// PDB : w:\tech5\engine\decls\declenv.cpp
// ========================================================================
const char *__fastcall idDeclEnv::DefaultDefinition(idDeclEnv *this)
{
return "{\n"
"\trenderParms {\n"
"\t\tenvBlendTime\t\t\t2.2\n"
"\t\tuserEnvMap\t\t\t\tenv/default_px\n"
"\t\tambientEnvMap\t\t\tenv/ambiTest_px\n"
"\t\tenvMapRotation\t\t\t{ 0, 0, 0 }\n"
"\t\tcbShadow\t\t\t\t{ 0, 0, 0 }\n"
"\t\tcbMidtone\t\t\t\t{ 0, 0, 0 }\n"
"\t\tcbHighlight\t\t\t\t{ 0, 0, 0 }\n"
"\t\tcbDesaturate\t\t\t0\n"
"\t\tcbBrightness\t\t\t{ 1, 1, 1, 1 }\n"
"\t\tcbColorDodge\t\t\t{ 0, 0, 0, 0 }\n"
"\t\tcbColorBurn\t\t\t\t{ 1, 1, 1, 1 }\n"
"\t\tcbColorMultiply\t\t\t{ 1, 1, 1, 1 }\n"
"\t\tcbColorScreen\t\t\t{ 0, 0, 0, 0 }\n"
"\t\tdepthBasedColorGrading\t{ 0, 0, 0, 0 }\n"
"\t\tfogColor\t\t\t\t{ 0.2, 0.43, 0.5, 0.0 }\n"
"\t\tfogScale\t\t\t\t0.00005\n"
"\t\tfogStart\t\t\t\t0.0\n"
"\t\tfogEnd\t\t\t\t\t32000.0\n"
"\t\tnewAmbientScale\t\t\t{ 0.3, 0.3, 0.3 }\n"
"\t\texposure\t\t\t\t1.0\n"
"\t\tglareScale\t\t\t\t0.3\n"
"\t\tdepthOfField\t\t\t{ 1.0, 1.0, 5500.0, 1.0 }\n"
"\t\tscreenOverlay\t\t\t_white\n"
"\t\toverlayOpacity\t\t\t0\n"
"\t\tgrainMap\t\t\t\ttextures/common/postgrain\n"
"\t\tgrainAmount\t\t\t\t0.03\n"
"\t\tgrainHz\t\t\t\t\t20\n"
"\t\tgrainLevelsMin\t\t\t0\n"
"\t\tgrainLevelsMax\t\t\t1\n"
"\t}\n"
"}\n";
}
// ========================================================================
// ?FreeData@idDeclEnv@@UAAXXZ
// EA : 0x8261B388
// RVA : 0x0061B388
// PDB : w:\tech5\engine\decls\declenv.cpp
// ========================================================================
void __fastcall idDeclEnv::FreeData(idDeclEnv *this)
{
idParmBlock::Clear(this: &this->parmBlock);
}
// ========================================================================
// ?Parse@idDeclEnv@@UAAXAAVidParser@@@Z
// EA : 0x8261B398
// RVA : 0x0061B398
// PDB : w:\tech5\engine\decls\declenv.cpp
// ========================================================================
void __fastcall idDeclEnv::Parse(idDeclEnv *this, idParser *src)
{
char *data; // r11
const idDecl *v5; // r30
const idDecl *v6; // r3
char v7; // r11
char *v8; // r4
idParmBlock v9; // [sp+50h] [-F0h] BYREF
idToken v10[2]; // [sp+80h] [-C0h] BYREF
v10[0].len = 0;
v10[0].allocedAndFlag = 20;
v10[0].floatvalue = -3.4028235e38;
v10[0].data = v10[0].baseBuffer;
v10[0].baseBuffer[0] = 0;
v10[0].intvalue = 0;
v10[0].whiteSpaceStart_p = nullptr;
v10[0].whiteSpaceEnd_p = nullptr;
v10[0].next = nullptr;
this->FreeData(this);
idParmBlock::idParmBlock(this: &v9, threadId: THREAD_MAIN);
if ( idParser::ReadToken(this: src, token: v10) )
{
while ( 1 )
{
if ( idStr::Cmp(s1: v10[0].data, s2: "}") == 0 )
{
idParmBlock::Append(this: &this->parmBlock, block: &v9);
this->blendDuration = idParmBlock::GetFloat(
this: &this->parmBlock,
parm: (const idDeclRenderParm *)rpBlendDuration.r);
idParmBlock::~idParmBlock(this: &v9);
goto LABEL_29;
}
if ( idStr::Icmp(s1: v10[0].data, s2: "inherit") == 0 )
{
if ( !idParser::ExpectTokenString(this: src, string: "{") )
goto _M219370;
if ( idParser::ExpectTokenType(this: src, type: 4, subtype: 0, token: v10) == 0 )
{
idParser::Error(this: src, str: "idDeclEnv::Parse Failed to parse inherit data\n");
idParmBlock::~idParmBlock(this: &v9);
goto LABEL_29;
}
if ( !idParser::ExpectTokenString(this: src, string: "}") )
{
idParser::Error(this: src, str: "idDeclEnv::Parse Unexpected token, missing '}'\n");
idParmBlock::~idParmBlock(this: &v9);
goto LABEL_29;
}
if ( v10[0].len != 0 )
break;
}
LABEL_18:
if ( idStr::Icmp(s1: v10[0].data, s2: "renderParms") == 0 )
{
if ( !idParser::ExpectTokenString(this: src, string: "{") )
{
_M219370:
idParser::Error(this: src, str: "idDeclEnv::Parse Unexpected token, missing '{'\n");
idParmBlock::~idParmBlock(this: &v9);
goto LABEL_29;
}
idParmBlock::Parse(this: &v9, src);
if ( idParser::HadWarning(this: src) )
{
idParmBlock::~idParmBlock(this: &v9);
goto LABEL_29;
}
}
if ( !idParser::ReadToken(this: src, token: v10) )
goto LABEL_22;
}
data = v10[0].data;
if ( v10[0].data != nullptr )
{
v6 = idDeclInfo::FindWithInheritance(this: &idDeclEnv::resourceList, name: v10[0].data, makeDefault: false);
v5 = v6;
if ( v6 != nullptr )
{
idParmBlock::Append(this: &this->parmBlock, block: (const idParmBlock *)&v6[1]);
v7 = 1;
goto LABEL_14;
}
data = v10[0].data;
}
else
{
v5 = nullptr;
}
idParser::Warning(this: src, str: "idDeclEnv::Parse - Invalid base decl '%s'", data);
v7 = 0;
LABEL_14:
if ( v7 != 0 )
{
declManager->AddDependency_2(this: declManager, a2: (idDecl *)this, a3: v5);
v8 = v10[0].data;
}
else
{
v8 = &byte_8200D768;
}
idAtomicString::Set(this: &this->parentDeclName, str_: v8);
goto LABEL_18;
}
LABEL_22:
idParser::Error(this: src, str: "idDeclEnv::Parse Unexpected End of File\n");
idParmBlock::~idParmBlock(this: &v9);
LABEL_29:
idStr::FreeData(this: &v10[0]);
}
// ========================================================================
// __unwind$219193
// EA : 0x8261B6AC
// RVA : 0x0061B6AC
// PDB : w:\tech5\engine\decls\declenv.cpp
// ========================================================================
void _unwind_219193()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 320 + 128));
}
// ========================================================================
// __unwind$219194
// EA : 0x8261B6D4
// RVA : 0x0061B6D4
// PDB : w:\tech5\engine\decls\declenv.cpp
// ========================================================================
void _unwind_219194()
{
int v0; // r12
idParmBlock::~idParmBlock(this: (idParmBlock *)(v0 - 320 + 80));
}
// ========================================================================
// `dynamic initializer for 'rpBlendDuration''
// EA : 0x83336668
// RVA : 0x01336668
// PDB : w:\tech5\engine\decls\declenv.cpp
// ========================================================================
void _dynamic_initializer_for__rpBlendDuration__()
{
rpBlendDuration.next = idBaseCodeResource::codeResourceList;
idBaseCodeResource::codeResourceList = (idBaseCodeResource *)&rpBlendDuration;
}
@@ -0,0 +1,46 @@
// ========================================================================
// ??0idDeclEnv@@QAA@XZ
// EA : 0x82620368
// RVA : 0x00620368
// PDB : w:\tech5\engine\decls\declenv.h
// ========================================================================
idDeclEnv *__fastcall idDeclEnv::idDeclEnv(idDeclEnv *this)
{
idDecl::idDecl(this: &this->idDecl);
this->__vftable = (idDeclEnv_vtbl *)&idDeclEnv::`vftable';
idParmBlock::idParmBlock(this: &this->parmBlock, threadId: THREAD_MAIN);
this->parentDeclName.str = &byte_8200D768;
this->blendDuration = 2.2;
return this;
}
// ========================================================================
// __unwind$221396
// EA : 0x826203E0
// RVA : 0x006203E0
// PDB : w:\tech5\engine\decls\declenv.h
// ========================================================================
void _unwind_221396()
{
int v0; // r12
idDecl::~idDecl(this: *(idDecl **)(v0 - 112 + 132));
}
// ========================================================================
// ?GetDeclInfo@idDeclEnv@@UBAPAVidDeclInfo@@XZ
// EA : 0x82620408
// RVA : 0x00620408
// PDB : w:\tech5\engine\decls\declenv.h
// ========================================================================
idDeclInfoTemplate<idDeclEnv> *__fastcall idDeclEnv::GetDeclInfo(idDeclEnv *this)
{
return &idDeclEnv::resourceList;
}
@@ -0,0 +1,70 @@
// ========================================================================
// ??1idCrosshairInfo@@QAA@XZ
// EA : 0x8261B700
// RVA : 0x0061B700
// PDB : w:\tech5\engine\decls\declflare.cpp
// ========================================================================
void __fastcall idCrosshairInfo::~idCrosshairInfo(idDeclFlare *this)
{
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->subflares);
}
// ========================================================================
// ??0idDeclFlare@@QAA@XZ
// EA : 0x8261B710
// RVA : 0x0061B710
// PDB : w:\tech5\engine\decls\declflare.cpp
// ========================================================================
idDeclFlare *__fastcall idDeclFlare::idDeclFlare(idDeclFlare *this)
{
idDeclTypeInfo::idDeclTypeInfo(this: &this->idDeclTypeInfo);
this->__vftable = (idDeclFlare_vtbl *)&idDeclFlare::`vftable';
this->subflares.list = nullptr;
this->subflares.granularity = 0;
this->subflares.memTag = 79;
this->subflares.listStatic = 0;
this->subflares.size = 0;
this->subflares.num = 0;
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->subflares);
*((_BYTE *)this + 80) &= ~0x80u;
this->viewAngleFade = 0.0;
this->invViewAngleFade = 1.0;
this->brightness = 1.0;
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->subflares);
return this;
}
// ========================================================================
// __unwind$219129
// EA : 0x8261B7A4
// RVA : 0x0061B7A4
// PDB : w:\tech5\engine\decls\declflare.cpp
// ========================================================================
void _unwind_219129()
{
int v0; // r12
idDeclTypeInfo::~idDeclTypeInfo(this: *(idDeclTypeInfo **)(v0 - 128 + 148));
}
// ========================================================================
// __unwind$219130
// EA : 0x8261B7CC
// RVA : 0x0061B7CC
// PDB : w:\tech5\engine\decls\declflare.cpp
// ========================================================================
void _unwind_219130()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: (idStaticList<idVehicleState *,4> *)(*(_DWORD *)(v0 - 128 + 148) + 64));
}
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetDeclInfo@idDeclFlare@@UBAPAVidDeclInfo@@XZ
// EA : 0x8261B7F8
// RVA : 0x0061B7F8
// PDB : w:\tech5\engine\decls\declflare.h
// ========================================================================
idDeclInfoTemplate<idDeclFlare> *__fastcall idDeclFlare::GetDeclInfo(idDeclFlare *this)
{
return &idDeclFlare::resourceList;
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetDeclInfo@idDeclFX@@UBAPAVidDeclInfo@@XZ
// EA : 0x8261FA90
// RVA : 0x0061FA90
// PDB : w:\tech5\engine\decls\declfx.h
// ========================================================================
idDeclInfoTemplate<idDeclFX> *__fastcall idDeclFX::GetDeclInfo(idDeclFX *this)
{
return &idDeclFX::resourceList;
}
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetDeclInfo@idDeclGameTime@@UBAPAVidDeclInfo@@XZ
// EA : 0x826202E8
// RVA : 0x006202E8
// PDB : w:\tech5\engine\decls\declgametime.h
// ========================================================================
idDeclInfoTemplate<idDeclGameTime> *__fastcall idDeclGameTime::GetDeclInfo(idDeclGameTime *this)
{
return &idDeclGameTime::resourceList;
}
@@ -0,0 +1,577 @@
// ========================================================================
// `dynamic initializer for 'idDeclRenderParm::resourceList''
// EA : 0x83336688
// RVA : 0x01336688
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclRenderParm::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclRenderParm::resourceList,
identifier: "renderParm",
classname: "idDeclRenderParm",
fileExt: "rpa");
idDeclRenderParm::resourceList.__vftable = (idDeclInfoTemplate<idDeclRenderParm>_vtbl *)&idDeclInfoTemplate<idDeclRenderParm>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclRenderParm::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclRenderProg::resourceList''
// EA : 0x833366E8
// RVA : 0x013366E8
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclRenderProg::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclRenderProg::resourceList,
identifier: "renderProg",
classname: "idDeclRenderProg",
fileExt: "rpr");
idDeclRenderProg::resourceList.__vftable = (idDeclInfoTemplate<idDeclRenderProg>_vtbl *)&idDeclInfoTemplate<idDeclRenderProg>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclRenderProg::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclEntityDef::resourceList''
// EA : 0x83336748
// RVA : 0x01336748
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclEntityDef::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclEntityDef::resourceList,
identifier: "entityDef",
classname: "idDeclEntityDef",
fileExt: "def");
idDeclEntityDef::resourceList.__vftable = (idDeclInfoTemplate<idDeclEntityDef>_vtbl *)&idDeclInfoTemplate<idDeclEntityDef>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclEntityDef::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idMaterial::resourceList''
// EA : 0x833367A8
// RVA : 0x013367A8
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idMaterial::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idMaterial::resourceList,
identifier: "material",
classname: "idMaterial",
fileExt: "m2");
idMaterial::resourceList.__vftable = (idDeclInfoTemplate<idMaterial>_vtbl *)&idDeclInfoTemplate<idMaterial>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idMaterial::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclParticle::resourceList''
// EA : 0x83336808
// RVA : 0x01336808
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclParticle::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclParticle::resourceList,
identifier: "particle",
classname: "idDeclParticle",
fileExt: "prt");
idDeclParticle::resourceList.__vftable = (idDeclInfoTemplate<idDeclParticle>_vtbl *)&idDeclInfoTemplate<idDeclParticle>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclParticle::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclCloth::resourceList''
// EA : 0x83336868
// RVA : 0x01336868
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclCloth::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclCloth::resourceList,
identifier: "cloth",
classname: "idDeclCloth",
fileExt: "cloth");
idDeclCloth::resourceList.__vftable = (idDeclInfoTemplate<idDeclCloth>_vtbl *)&idDeclInfoTemplate<idDeclCloth>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclCloth::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclMD6::resourceList''
// EA : 0x833368C8
// RVA : 0x013368C8
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclMD6::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclMD6::resourceList,
identifier: "md6Def",
classname: "idDeclMD6",
fileExt: "md6def");
idDeclMD6::resourceList.__vftable = (idDeclInfoTemplate<idDeclMD6>_vtbl *)&idDeclInfoTemplate<idDeclMD6>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclMD6::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclAF::resourceList''
// EA : 0x83336928
// RVA : 0x01336928
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclAF::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclAF::resourceList,
identifier: "articulatedFigure",
classname: "idDeclAF",
fileExt: "af");
idDeclAF::resourceList.__vftable = (idDeclInfoTemplate<idDeclAF>_vtbl *)&idDeclInfoTemplate<idDeclAF>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclAF::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclWalkIK::resourceList''
// EA : 0x83336988
// RVA : 0x01336988
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclWalkIK::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclWalkIK::resourceList,
identifier: "walkIK",
classname: "idDeclWalkIK",
fileExt: "walkik");
idDeclWalkIK::resourceList.__vftable = (idDeclInfoTemplate<idDeclWalkIK>_vtbl *)&idDeclInfoTemplate<idDeclWalkIK>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclWalkIK::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclReachIK::resourceList''
// EA : 0x833369E8
// RVA : 0x013369E8
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclReachIK::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclReachIK::resourceList,
identifier: "reachIK",
classname: "idDeclReachIK",
fileExt: "reachik");
idDeclReachIK::resourceList.__vftable = (idDeclInfoTemplate<idDeclReachIK>_vtbl *)&idDeclInfoTemplate<idDeclReachIK>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclReachIK::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclRollBones::resourceList''
// EA : 0x83336A48
// RVA : 0x01336A48
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclRollBones::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclRollBones::resourceList,
identifier: "rollBones",
classname: "idDeclRollBones",
fileExt: "rollbones");
idDeclRollBones::resourceList.__vftable = (idDeclInfoTemplate<idDeclRollBones>_vtbl *)&idDeclInfoTemplate<idDeclRollBones>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclRollBones::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclDragJoints::resourceList''
// EA : 0x83336AA8
// RVA : 0x01336AA8
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclDragJoints::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclDragJoints::resourceList,
identifier: "dragJoints",
classname: "idDeclDragJoints",
fileExt: "dragjoints");
idDeclDragJoints::resourceList.__vftable = (idDeclInfoTemplate<idDeclDragJoints>_vtbl *)&idDeclInfoTemplate<idDeclDragJoints>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclDragJoints::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclSkins::resourceList''
// EA : 0x83336B08
// RVA : 0x01336B08
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclSkins::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclSkins::resourceList,
identifier: "skins",
classname: "idDeclSkins",
fileExt: "skin");
idDeclSkins::resourceList.__vftable = (idDeclInfoTemplate<idDeclSkins>_vtbl *)&idDeclInfoTemplate<idDeclSkins>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclSkins::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclTable::resourceList''
// EA : 0x83336B68
// RVA : 0x01336B68
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclTable::resourceList__()
{
idDeclInfo::idDeclInfo(this: &idDeclTable::resourceList, identifier: "table", classname: "idDeclTable", fileExt: "m2");
idDeclTable::resourceList.__vftable = (idDeclInfoTemplate<idDeclTable>_vtbl *)&idDeclInfoTemplate<idDeclTable>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclTable::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclEnv::resourceList''
// EA : 0x83336BC8
// RVA : 0x01336BC8
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclEnv::resourceList__()
{
idDeclInfo::idDeclInfo(this: &idDeclEnv::resourceList, identifier: "env", classname: "idDeclEnv", fileExt: "env");
idDeclEnv::resourceList.__vftable = (idDeclInfoTemplate<idDeclEnv>_vtbl *)&idDeclInfoTemplate<idDeclEnv>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclEnv::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclFX::resourceList''
// EA : 0x83336C28
// RVA : 0x01336C28
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclFX::resourceList__()
{
idDeclInfo::idDeclInfo(this: &idDeclFX::resourceList, identifier: "fx", classname: "idDeclFX", fileExt: "fx");
idDeclFX::resourceList.__vftable = (idDeclInfoTemplate<idDeclFX>_vtbl *)&idDeclInfoTemplate<idDeclFX>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclFX::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclFoliage::resourceList''
// EA : 0x83336C88
// RVA : 0x01336C88
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclFoliage::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclFoliage::resourceList,
identifier: "foliage",
classname: "idDeclFoliage",
fileExt: "foliage");
idDeclFoliage::resourceList.__vftable = (idDeclInfoTemplate<idDeclFoliage>_vtbl *)&idDeclInfoTemplate<idDeclFoliage>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclFoliage::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclVisemeSet::resourceList''
// EA : 0x83336CE8
// RVA : 0x01336CE8
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclVisemeSet::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclVisemeSet::resourceList,
identifier: "visemeSet",
classname: "idDeclVisemeSet",
fileExt: "vset");
idDeclVisemeSet::resourceList.__vftable = (idDeclInfoTemplate<idDeclVisemeSet>_vtbl *)&idDeclInfoTemplate<idDeclVisemeSet>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclVisemeSet::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclVoiceOver::resourceList''
// EA : 0x83336D48
// RVA : 0x01336D48
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclVoiceOver::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclVoiceOver::resourceList,
identifier: "voiceover",
classname: "idDeclVoiceOver",
fileExt: "vo");
idDeclVoiceOver::resourceList.__vftable = (idDeclInfoTemplate<idDeclVoiceOver>_vtbl *)&idDeclInfoTemplate<idDeclVoiceOver>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclVoiceOver::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclAnimWeb::resourceList''
// EA : 0x83336DA8
// RVA : 0x01336DA8
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclAnimWeb::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclAnimWeb::resourceList,
identifier: "animWeb",
classname: "idDeclAnimWeb",
fileExt: "aweb");
idDeclAnimWeb::resourceList.__vftable = (idDeclInfoTemplate<idDeclAnimWeb>_vtbl *)&idDeclInfoTemplate<idDeclAnimWeb>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclAnimWeb::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclBreakable::resourceList''
// EA : 0x83336E08
// RVA : 0x01336E08
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclBreakable::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclBreakable::resourceList,
identifier: "breakable",
classname: "idDeclBreakable",
fileExt: "break");
idDeclBreakable::resourceList.__vftable = (idDeclInfoTemplate<idDeclBreakable>_vtbl *)&idDeclInfoTemplate<idDeclBreakable>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclBreakable::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclRibbon::resourceList''
// EA : 0x83336E68
// RVA : 0x01336E68
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclRibbon::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclRibbon::resourceList,
identifier: "ribbon",
classname: "idDeclRibbon",
fileExt: "ribbon");
idDeclRibbon::resourceList.__vftable = (idDeclInfoTemplate<idDeclRibbon>_vtbl *)&idDeclInfoTemplate<idDeclRibbon>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclRibbon::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclFlare::resourceList''
// EA : 0x83336EC8
// RVA : 0x01336EC8
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclFlare::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclFlare::resourceList,
identifier: "flare",
classname: "idDeclFlare",
fileExt: "flare");
idDeclFlare::resourceList.__vftable = (idDeclInfoTemplate<idDeclFlare>_vtbl *)&idDeclInfoTemplate<idDeclFlare>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclFlare::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclDetail::resourceList''
// EA : 0x83336F28
// RVA : 0x01336F28
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclDetail::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclDetail::resourceList,
identifier: "detail",
classname: "idDeclDetail",
fileExt: "detail");
idDeclDetail::resourceList.__vftable = (idDeclInfoTemplate<idDeclDetail>_vtbl *)&idDeclInfoTemplate<idDeclDetail>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclDetail::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclElectricBolt::resourceList''
// EA : 0x83336F88
// RVA : 0x01336F88
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclElectricBolt::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclElectricBolt::resourceList,
identifier: "ebolt",
classname: "idDeclElectricBolt",
fileExt: "ebolt");
idDeclElectricBolt::resourceList.__vftable = (idDeclInfoTemplate<idDeclElectricBolt>_vtbl *)&idDeclInfoTemplate<idDeclElectricBolt>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclElectricBolt::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclVehicleProps::resourceList''
// EA : 0x83336FE8
// RVA : 0x01336FE8
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclVehicleProps::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclVehicleProps::resourceList,
identifier: "vehicle",
classname: "idDeclVehicleProps",
fileExt: "vehicle");
idDeclVehicleProps::resourceList.__vftable = (idDeclInfoTemplate<idDeclVehicleProps>_vtbl *)&idDeclInfoTemplate<idDeclVehicleProps>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclVehicleProps::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclTypeInfo::resourceList''
// EA : 0x83337048
// RVA : 0x01337048
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclTypeInfo::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclTypeInfo::resourceList,
identifier: "typeinfo",
classname: "idDeclTypeInfo",
fileExt: "tdef");
idDeclTypeInfo::resourceList.__vftable = (idDeclInfoTemplate<idDeclTypeInfo>_vtbl *)&idDeclInfoTemplate<idDeclTypeInfo>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclTypeInfo::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclPonytail::resourceList''
// EA : 0x833370A8
// RVA : 0x013370A8
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclPonytail::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclPonytail::resourceList,
identifier: "ponytail",
classname: "idDeclPonytail",
fileExt: "tdef");
idDeclPonytail::resourceList.__vftable = (idDeclInfoTemplate<idDeclPonytail>_vtbl *)&idDeclInfoTemplate<idDeclPonytail>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclPonytail::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclGameTime::resourceList''
// EA : 0x83337108
// RVA : 0x01337108
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclGameTime::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclGameTime::resourceList,
identifier: "gameTime",
classname: "idDeclGameTime",
fileExt: "tdef");
idDeclGameTime::resourceList.__vftable = (idDeclInfoTemplate<idDeclGameTime>_vtbl *)&idDeclInfoTemplate<idDeclGameTime>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclGameTime::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclProductionFilter::resourceList''
// EA : 0x83337168
// RVA : 0x01337168
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclProductionFilter::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclProductionFilter::resourceList,
identifier: "productionfilter",
classname: "idDeclProductionFilter",
fileExt: "tdef");
idDeclProductionFilter::resourceList.__vftable = (idDeclInfoTemplate<idDeclProductionFilter>_vtbl *)&idDeclInfoTemplate<idDeclProductionFilter>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclProductionFilter::resourceList__);
}
// ========================================================================
// `dynamic initializer for 'idDeclDestructiblePieceInfo::resourceList''
// EA : 0x833371C8
// RVA : 0x013371C8
// PDB : w:\tech5\engine\decls\declholder.cpp
// ========================================================================
void __noreturn _dynamic_initializer_for__idDeclDestructiblePieceInfo::resourceList__()
{
idDeclInfo::idDeclInfo(
this: &idDeclDestructiblePieceInfo::resourceList,
identifier: "destructiblePiece",
classname: "idDeclDestructiblePieceInfo",
fileExt: "tdef");
idDeclDestructiblePieceInfo::resourceList.__vftable = (idDeclInfoTemplate<idDeclDestructiblePieceInfo>_vtbl *)&idDeclInfoTemplate<idDeclDestructiblePieceInfo>::`vftable';
atexit(func: (void (__fastcall *)())_dynamic_atexit_destructor_for__idDeclDestructiblePieceInfo::resourceList__);
}
@@ -0,0 +1,141 @@
// ========================================================================
// ??0idDeclImpactParticle@@QAA@XZ
// EA : 0x82623E88
// RVA : 0x00623E88
// PDB : w:\tech5\engine\decls\declimpactparticle.cpp
// ========================================================================
idDeclImpactParticle *__fastcall idDeclImpactParticle::idDeclImpactParticle(idDeclImpactParticle *this)
{
idDeclTypeInfo::idDeclTypeInfo(this: &this->idDeclTypeInfo);
this->defaultPrt = nullptr;
this->__vftable = (idDeclImpactParticle_vtbl *)&idDeclImpactParticle::`vftable';
this->metalPrt = nullptr;
this->stonePrt = nullptr;
this->fleshPrt = nullptr;
this->woodPrt = nullptr;
this->cardboardPrt = nullptr;
this->liquidPrt = nullptr;
this->glassPrt = nullptr;
this->plasticPrt = nullptr;
this->asphaltPrt = nullptr;
this->dirtPrt = nullptr;
this->concretePrt = nullptr;
this->foliagePrt = nullptr;
this->linoleumPrt = nullptr;
this->fabricPrt = nullptr;
this->rubberPrt = nullptr;
this->rockPrt = nullptr;
this->steamPipePrt = nullptr;
this->waterPipePrt = nullptr;
this->armorPrt = nullptr;
this->sludgePrt = nullptr;
this->shieldPrt = nullptr;
this->bloodPoolPrt = nullptr;
this->ashPrt = nullptr;
this->mutantFleshPrt = nullptr;
this->thickPaddingPrt = nullptr;
return this;
}
// ========================================================================
// ?GetImpactParticleForMaterial@idDeclImpactParticle@@QBAPBVidDeclParticle@@H@Z
// EA : 0x82623F30
// RVA : 0x00623F30
// PDB : w:\tech5\engine\decls\declimpactparticle.cpp
// ========================================================================
const idDeclParticle *__fastcall idDeclImpactParticle::GetImpactParticleForMaterial(
idDeclImpactParticle *this,
const int materialID)
{
const idDeclParticle *result; // r3
switch ( materialID )
{
case 1:
case 22:
case 29:
case 30:
case 32:
result = this->metalPrt;
break;
case 2:
result = this->stonePrt;
break;
case 3:
result = this->fleshPrt;
break;
case 4:
case 31:
result = this->woodPrt;
break;
case 5:
result = this->cardboardPrt;
break;
case 6:
result = this->liquidPrt;
break;
case 7:
result = this->glassPrt;
break;
case 8:
result = this->plasticPrt;
break;
case 9:
result = this->asphaltPrt;
break;
case 10:
result = this->dirtPrt;
break;
case 11:
result = this->concretePrt;
break;
case 12:
result = this->foliagePrt;
break;
case 13:
result = this->linoleumPrt;
break;
case 14:
result = this->fabricPrt;
break;
case 15:
result = this->rubberPrt;
break;
case 16:
result = this->rockPrt;
break;
case 17:
result = this->steamPipePrt;
break;
case 18:
result = this->waterPipePrt;
break;
case 19:
result = this->armorPrt;
break;
case 20:
result = this->sludgePrt;
break;
case 25:
result = this->bloodPoolPrt;
break;
case 26:
result = this->ashPrt;
break;
case 27:
result = this->mutantFleshPrt;
break;
case 28:
result = this->thickPaddingPrt;
break;
default:
result = this->defaultPrt;
break;
}
return result;
}
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetDeclInfo@idDeclImpactParticle@@UBAPAVidDeclInfo@@XZ
// EA : 0x826240A0
// RVA : 0x006240A0
// PDB : w:\tech5\engine\decls\declimpactparticle.h
// ========================================================================
idDeclInfoTemplate<idDeclImpactParticle> *__fastcall idDeclImpactParticle::GetDeclInfo(idDeclImpactParticle *this)
{
return &idDeclImpactParticle::resourceList;
}
@@ -0,0 +1,164 @@
// ========================================================================
// ??0idDeclImpactSound@@QAA@XZ
// EA : 0x82624118
// RVA : 0x00624118
// PDB : w:\tech5\engine\decls\declimpactsound.cpp
// ========================================================================
idDeclImpactSound *__fastcall idDeclImpactSound::idDeclImpactSound(idDeclImpactSound *this)
{
idDeclTypeInfo::idDeclTypeInfo(this: &this->idDeclTypeInfo);
this->defaultSound = nullptr;
this->__vftable = (idDeclImpactSound_vtbl *)&idDeclImpactSound::`vftable';
this->metalSound = nullptr;
this->stoneSound = nullptr;
this->fleshSound = nullptr;
this->woodSound = nullptr;
this->cardboardSound = nullptr;
this->liquidSound = nullptr;
this->glassSound = nullptr;
this->plasticSound = nullptr;
this->asphaltSound = nullptr;
this->dirtSound = nullptr;
this->concreteSound = nullptr;
this->foliageSound = nullptr;
this->linoleumSound = nullptr;
this->fabricSound = nullptr;
this->rubberSound = nullptr;
this->rockSound = nullptr;
this->steamPipeSound = nullptr;
this->waterPipeSound = nullptr;
this->armorSound = nullptr;
this->sludgeSound = nullptr;
this->impNestSound = nullptr;
this->hollowMetalSound = nullptr;
this->sheetMetalSound = nullptr;
this->fleshPlayerSound = nullptr;
this->bloodPoolSound = nullptr;
this->ashSound = nullptr;
this->mutantFleshSound = nullptr;
this->thickPaddingSound = nullptr;
this->playerAPCMetalSound = nullptr;
this->ricketyMetalSound = nullptr;
this->ricketyWoodSound = nullptr;
this->soundInterval = 100;
return this;
}
// ========================================================================
// ?GetImpactSoundForMaterial@idDeclImpactSound@@QBAPBVidSoundShader@@H@Z
// EA : 0x826241E0
// RVA : 0x006241E0
// PDB : w:\tech5\engine\decls\declimpactsound.cpp
// ========================================================================
const idSoundShader *__fastcall idDeclImpactSound::GetImpactSoundForMaterial(
idDeclImpactSound *this,
const int materialID)
{
const idSoundShader *result; // r3
switch ( materialID )
{
case 1:
result = this->metalSound;
break;
case 2:
result = this->stoneSound;
break;
case 3:
result = this->fleshSound;
break;
case 4:
result = this->woodSound;
break;
case 5:
result = this->cardboardSound;
break;
case 6:
result = this->liquidSound;
break;
case 7:
result = this->glassSound;
break;
case 8:
result = this->plasticSound;
break;
case 9:
result = this->asphaltSound;
break;
case 10:
result = this->dirtSound;
break;
case 11:
result = this->concreteSound;
break;
case 12:
result = this->foliageSound;
break;
case 13:
result = this->linoleumSound;
break;
case 14:
result = this->fabricSound;
break;
case 15:
result = this->rubberSound;
break;
case 16:
result = this->rockSound;
break;
case 17:
result = this->steamPipeSound;
break;
case 18:
result = this->waterPipeSound;
break;
case 19:
result = this->armorSound;
break;
case 20:
result = this->sludgeSound;
break;
case 21:
result = this->impNestSound;
break;
case 22:
result = this->hollowMetalSound;
break;
case 23:
result = this->fleshPlayerSound;
break;
case 25:
result = this->bloodPoolSound;
break;
case 26:
result = this->ashSound;
break;
case 27:
result = this->mutantFleshSound;
break;
case 28:
result = this->thickPaddingSound;
break;
case 29:
result = this->playerAPCMetalSound;
break;
case 30:
result = this->ricketyMetalSound;
break;
case 31:
result = this->ricketyWoodSound;
break;
case 32:
result = this->sheetMetalSound;
break;
default:
result = this->defaultSound;
break;
}
return result;
}
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetDeclInfo@idDeclImpactSound@@UBAPAVidDeclInfo@@XZ
// EA : 0x82624388
// RVA : 0x00624388
// PDB : w:\tech5\engine\decls\declimpactsound.h
// ========================================================================
idDeclInfoTemplate<idDeclImpactSound> *__fastcall idDeclImpactSound::GetDeclInfo(idDeclImpactSound *this)
{
return &idDeclImpactSound::resourceList;
}
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetDeclInfo@idDeclLayer@@UBAPAVidDeclInfo@@XZ
// EA : 0x82BCC3F0
// RVA : 0x00BCC3F0
// PDB : w:\tech5\engine\decls\decllayer.h
// ========================================================================
idDeclInfoTemplate<idDeclLayer> *__fastcall idDeclLayer::GetDeclInfo(idDeclLayer *this)
{
return &idDeclLayer::resourceList;
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,40 @@
// ========================================================================
// ??0idDeclMapInfo@@QAA@XZ
// EA : 0x82629070
// RVA : 0x00629070
// PDB : w:\tech5\engine\decls\declmapinfo.cpp
// ========================================================================
idDeclMapInfo *__fastcall idDeclMapInfo::idDeclMapInfo(idDeclMapInfo *this)
{
idDeclTypeInfo::idDeclTypeInfo(this);
this->__vftable = (idDeclMapInfo_vtbl *)&idDeclMapInfo::`vftable';
this->prettyMapName.index = -1;
this->discNumber = -1;
this->dlcId = 0;
this->loadingVideos.list = nullptr;
this->loadingVideos.granularity = 0;
this->loadingVideos.memTag = 5;
this->loadingVideos.listStatic = 0;
this->loadingVideos.size = 0;
this->loadingVideos.num = 0;
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->loadingVideos);
return this;
}
// ========================================================================
// __unwind$219173
// EA : 0x826290FC
// RVA : 0x006290FC
// PDB : w:\tech5\engine\decls\declmapinfo.cpp
// ========================================================================
void _unwind_219173()
{
int v0; // r12
idDeclTypeInfo::~idDeclTypeInfo(this: *(idDeclTypeInfo **)(v0 - 112 + 132));
}
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetDeclInfo@idDeclMapInfo@@UBAPAVidDeclInfo@@XZ
// EA : 0x82629128
// RVA : 0x00629128
// PDB : w:\tech5\engine\decls\declmapinfo.h
// ========================================================================
idDeclInfoTemplate<idDeclMapInfo> *__fastcall idDeclMapInfo::GetDeclInfo(idDeclMapInfo *this)
{
return &idDeclMapInfo::resourceList;
}
@@ -0,0 +1,73 @@
// ========================================================================
// ??0idDeclPonytail@@QAA@XZ
// EA : 0x82622FF8
// RVA : 0x00622FF8
// PDB : w:\tech5\engine\decls\declponytail.h
// ========================================================================
idDeclPonytail *__fastcall idDeclPonytail::idDeclPonytail(idDeclPonytail *this)
{
idDeclTypeInfo::idDeclTypeInfo(this: &this->idDeclTypeInfo);
this->modelDef = nullptr;
this->__vftable = (idDeclPonytail_vtbl *)&idDeclPonytail::`vftable';
this->tagName.str = &byte_8200D768;
this->jointInfo.granularity = 0;
this->jointInfo.memTag = 30;
this->jointInfo.listStatic = 0;
this->jointInfo.list = nullptr;
this->jointInfo.size = 0;
this->jointInfo.num = 0;
this->springInfo.list = nullptr;
this->springInfo.granularity = 0;
this->springInfo.memTag = 30;
this->springInfo.listStatic = 0;
this->springInfo.size = 0;
this->springInfo.num = 0;
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->springInfo);
return this;
}
// ========================================================================
// __unwind$224092
// EA : 0x826230A4
// RVA : 0x006230A4
// PDB : w:\tech5\engine\decls\declponytail.h
// ========================================================================
void _unwind_224092()
{
int v0; // r12
idDeclTypeInfo::~idDeclTypeInfo(this: *(idDeclTypeInfo **)(v0 - 112 + 132));
}
// ========================================================================
// __unwind$224093
// EA : 0x826230CC
// RVA : 0x006230CC
// PDB : w:\tech5\engine\decls\declponytail.h
// ========================================================================
void _unwind_224093()
{
int v0; // r12
idList<idDeclSpecialEvent_Area::jobStinger_t,5>::~idList<idDeclSpecialEvent_Area::jobStinger_t,5>(this: (idList<idDeclPonytail::idPonytailJointInfo,30> *)(*(_DWORD *)(v0 - 112 + 132) + 72));
}
// ========================================================================
// ?GetDeclInfo@idDeclPonytail@@UBAPAVidDeclInfo@@XZ
// EA : 0x826230F8
// RVA : 0x006230F8
// PDB : w:\tech5\engine\decls\declponytail.h
// ========================================================================
idDeclInfoTemplate<idDeclPonytail> *__fastcall idDeclPonytail::GetDeclInfo(idDeclPonytail *this)
{
return &idDeclPonytail::resourceList;
}
@@ -0,0 +1,195 @@
// ========================================================================
// ?Parse@idDeclProductionFilter@@UAAXAAVidParser@@@Z
// EA : 0x82629568
// RVA : 0x00629568
// PDB : w:\tech5\engine\decls\declproductionfilter.cpp
// ========================================================================
void __fastcall idDeclProductionFilter::Parse(idDeclProductionFilter *this, idParser *src)
{
__int64 v3; // r10
int v4; // r8
int v5; // r7
int v6; // r6
idStr *list; // r4
unsigned int num; // r5
idStr *v9; // r4
unsigned int v10; // r5
idSort_Quick<idStr,idSort_QuickDefault<idStr> > v11; // [sp+50h] [-30h] BYREF
idSort_Quick<idStr,idSort_QuickDefault<idStr> > v12; // [sp+54h] [-2Ch] BYREF
idStr *v13; // [sp+58h] [-28h]
idDeclTypeInfo::Parse(this, src);
v11.__vftable = (idSort_Quick<idStr,idSort_QuickDefault<idStr> >_vtbl *)&idSort_QuickDefault<idStr>::`vftable';
list = this->entityFilter.list;
if ( list != nullptr )
{
num = this->entityFilter.num;
v13 = this->entityFilter.list;
idSort_Quick<idStr,idSort_QuickDefault<idStr>>::Sort(this: &v11, base: list, num, a4: v6, a5: v5, a6: v4, a7: v3);
}
v12.__vftable = (idSort_Quick<idStr,idSort_QuickDefault<idStr> >_vtbl *)&idSort_QuickDefault<idStr>::`vftable';
LODWORD(v3) = &idSort<idStr>::`vftable';
v11.__vftable = (idSort_Quick<idStr,idSort_QuickDefault<idStr> >_vtbl *)&idSort<idStr>::`vftable';
v9 = this->entityRenderModelFilter.list;
if ( v9 != nullptr )
{
v10 = this->entityRenderModelFilter.num;
v13 = this->entityRenderModelFilter.list;
idSort_Quick<idStr,idSort_QuickDefault<idStr>>::Sort(this: &v12, base: v9, num: v10, a4: v6, a5: v5, a6: v4, a7: v3);
}
}
// ========================================================================
// __unwind$219569
// EA : 0x826295F0
// RVA : 0x006295F0
// PDB : w:\tech5\engine\decls\declproductionfilter.cpp
// ========================================================================
void _unwind_219569()
{
int v0; // r12
idSort_QuickDefault<idStr>::~idSort_QuickDefault<idStr>(this: (idSort_QuickDefault<idStr> *)(v0 - 128 + 80));
}
// ========================================================================
// __unwind$219570
// EA : 0x82629618
// RVA : 0x00629618
// PDB : w:\tech5\engine\decls\declproductionfilter.cpp
// ========================================================================
void _unwind_219570()
{
int v0; // r12
idSort_QuickDefault<idStr>::~idSort_QuickDefault<idStr>(this: (idSort_QuickDefault<idStr> *)(v0 - 128 + 84));
}
// ========================================================================
// ??0idDeclProductionFilter@@QAA@XZ
// EA : 0x82629648
// RVA : 0x00629648
// PDB : w:\tech5\engine\decls\declproductionfilter.cpp
// ========================================================================
idDeclProductionFilter *__fastcall idDeclProductionFilter::idDeclProductionFilter(idDeclProductionFilter *this)
{
idDeclTypeInfo::idDeclTypeInfo(this);
this->__vftable = (idDeclProductionFilter_vtbl *)&idDeclProductionFilter::`vftable';
this->entityFilter.granularity = 0;
this->entityFilter.memTag = 5;
this->entityFilter.listStatic = 0;
this->entityFilter.list = nullptr;
this->entityFilter.size = 0;
this->entityFilter.num = 0;
this->entityRenderModelFilter.granularity = 0;
this->entityRenderModelFilter.memTag = 5;
this->entityRenderModelFilter.listStatic = 0;
this->entityRenderModelFilter.list = nullptr;
this->entityRenderModelFilter.size = 0;
this->entityRenderModelFilter.num = 0;
return this;
}
// ========================================================================
// __unwind$219711
// EA : 0x826296D8
// RVA : 0x006296D8
// PDB : w:\tech5\engine\decls\declproductionfilter.cpp
// ========================================================================
void _unwind_219711()
{
int v0; // r12
idDeclTypeInfo::~idDeclTypeInfo(this: *(idDeclTypeInfo **)(v0 - 112 + 132));
}
// ========================================================================
// __unwind$219712
// EA : 0x82629700
// RVA : 0x00629700
// PDB : w:\tech5\engine\decls\declproductionfilter.cpp
// ========================================================================
void _unwind_219712()
{
int v0; // r12
idList<idStr,99>::~idList<idStr,99>(this: (idList<idStr,5> *)(*(_DWORD *)(v0 - 112 + 132) + 64));
}
// ========================================================================
// ??1idDeclProductionFilter@@UAA@XZ
// EA : 0x82629748
// RVA : 0x00629748
// PDB : w:\tech5\engine\decls\declproductionfilter.cpp
// ========================================================================
void __fastcall idDeclProductionFilter::~idDeclProductionFilter(idDeclProductionFilter *this)
{
idStr *list; // r3
idStr *v3; // r3
this->__vftable = (idDeclProductionFilter_vtbl *)&idDeclProductionFilter::`vftable';
if ( this->entityRenderModelFilter.listStatic == 0 || this->entityRenderModelFilter.listStatic == 2 )
{
list = this->entityRenderModelFilter.list;
if ( list != nullptr )
idListArrayDelete<idStr>(ptr: list, num: this->entityRenderModelFilter.size);
this->entityRenderModelFilter.list = nullptr;
this->entityRenderModelFilter.size = 0;
}
this->entityRenderModelFilter.num = 0;
if ( this->entityFilter.listStatic == 0 || this->entityFilter.listStatic == 2 )
{
v3 = this->entityFilter.list;
if ( v3 != nullptr )
idListArrayDelete<idStr>(ptr: v3, num: this->entityFilter.size);
this->entityFilter.list = nullptr;
this->entityFilter.size = 0;
}
this->entityFilter.num = 0;
idDeclTypeInfo::~idDeclTypeInfo(this);
}
// ========================================================================
// __unwind$219765
// EA : 0x826297E8
// RVA : 0x006297E8
// PDB : w:\tech5\engine\decls\declproductionfilter.cpp
// ========================================================================
void _unwind_219765()
{
int v0; // r12
idDeclTypeInfo::~idDeclTypeInfo(this: *(idDeclTypeInfo **)(v0 - 112 + 132));
}
// ========================================================================
// __unwind$219766
// EA : 0x82629810
// RVA : 0x00629810
// PDB : w:\tech5\engine\decls\declproductionfilter.cpp
// ========================================================================
void _unwind_219766()
{
int v0; // r12
idList<idStr,99>::~idList<idStr,99>(this: (idList<idStr,5> *)(*(_DWORD *)(v0 - 112 + 132) + 64));
}
@@ -0,0 +1,14 @@
// ========================================================================
// ?GetDeclInfo@idDeclProductionFilter@@UBAPAVidDeclInfo@@XZ
// EA : 0x82629730
// RVA : 0x00629730
// PDB : w:\tech5\engine\decls\declproductionfilter.h
// ========================================================================
idDeclInfoTemplate<idDeclProductionFilter> *__fastcall idDeclProductionFilter::GetDeclInfo(
idDeclProductionFilter *this)
{
return &idDeclProductionFilter::resourceList;
}
@@ -0,0 +1,94 @@
// ========================================================================
// ??0idDeclReachIK@@QAA@XZ
// EA : 0x826298A8
// RVA : 0x006298A8
// PDB : w:\tech5\engine\decls\declreachik.cpp
// ========================================================================
idDeclReachIK *__fastcall idDeclReachIK::idDeclReachIK(idDeclReachIK *this)
{
idDeclTypeInfo::idDeclTypeInfo(this: &this->idDeclTypeInfo);
this->__vftable = (idDeclReachIK_vtbl *)&idDeclReachIK::`vftable';
this->armInfo.granularity = 0;
this->armInfo.memTag = 83;
this->armInfo.listStatic = 0;
this->armInfo.list = nullptr;
this->armInfo.size = 0;
this->armInfo.num = 0;
return this;
}
// ========================================================================
// __unwind$219791
// EA : 0x82629918
// RVA : 0x00629918
// PDB : w:\tech5\engine\decls\declreachik.cpp
// ========================================================================
void _unwind_219791()
{
int v0; // r12
idDeclTypeInfo::~idDeclTypeInfo(this: *(idDeclTypeInfo **)(v0 - 112 + 132));
}
// ========================================================================
// ??1idDeclReachIK@@UAA@XZ
// EA : 0x82629958
// RVA : 0x00629958
// PDB : w:\tech5\engine\decls\declreachik.cpp
// ========================================================================
void __fastcall idDeclReachIK::~idDeclReachIK(idDeclReachIK *this)
{
idIKArm *list; // r3
this->__vftable = (idDeclReachIK_vtbl *)&idDeclReachIK::`vftable';
if ( this->armInfo.listStatic == 0 || this->armInfo.listStatic == 2 )
{
list = this->armInfo.list;
if ( list != nullptr )
idListArrayDelete<idPlaytestStorage::ai2FSMStateInfo_t>(ptr: (testReportField_t *)list, num: this->armInfo.size);
this->armInfo.list = nullptr;
this->armInfo.size = 0;
}
this->armInfo.num = 0;
idDeclTypeInfo::~idDeclTypeInfo(this: &this->idDeclTypeInfo);
}
// ========================================================================
// __unwind$219825
// EA : 0x826299C4
// RVA : 0x006299C4
// PDB : w:\tech5\engine\decls\declreachik.cpp
// ========================================================================
void _unwind_219825()
{
int v0; // r12
idDeclTypeInfo::~idDeclTypeInfo(this: *(idDeclTypeInfo **)(v0 - 112 + 132));
}
// ========================================================================
// ?FreeData@idDeclReachIK@@UAAXXZ
// EA : 0x82629A50
// RVA : 0x00629A50
// PDB : w:\tech5\engine\decls\declreachik.cpp
// ========================================================================
void __fastcall idDeclReachIK::FreeData(idDeclReachIK *this)
{
idList<idIKArm,83> *p_armInfo; // r31
p_armInfo = &this->armInfo;
if ( this->armInfo.size < 0 )
idList<idPlaytestStorage::ai2FSMStateInfo_t,5>::Clear(this: (idList<idPlaytestStorage::ai2FSMStateInfo_t,5> *)&this->armInfo);
p_armInfo->num = __CFADD__(-p_armInfo->size, p_armInfo->size ^ 0x80000000) ? 0 : p_armInfo->size;
}
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetDeclInfo@idDeclReachIK@@UBAPAVidDeclInfo@@XZ
// EA : 0x82629940
// RVA : 0x00629940
// PDB : w:\tech5\engine\decls\declreachik.h
// ========================================================================
idDeclInfoTemplate<idDeclReachIK> *__fastcall idDeclReachIK::GetDeclInfo(idDeclReachIK *this)
{
return &idDeclReachIK::resourceList;
}
@@ -0,0 +1,54 @@
// ========================================================================
// ??0idDeclRibbon@@QAA@XZ
// EA : 0x82629AB0
// RVA : 0x00629AB0
// PDB : w:\tech5\engine\decls\declribbon.cpp
// ========================================================================
idDeclRibbon *__fastcall idDeclRibbon::idDeclRibbon(idDeclRibbon *this)
{
idDeclTypeInfo::idDeclTypeInfo(this: &this->idDeclTypeInfo);
this->maxLength = 0.0;
this->fadeInFraction = 0.0;
this->__vftable = (idDeclRibbon_vtbl *)&idDeclRibbon::`vftable';
this->fadeOutFraction = 0.0;
this->material = nullptr;
this->duration = 0;
this->gravity.x = 0.0;
this->gravity.y = 0.0;
this->gravity.z = 0.0;
this->velocity.x = 0.0;
this->velocity.y = 0.0;
this->velocity.z = 0.0;
this->startWidth = 2.0;
this->endWidth = 32.0;
this->color.x = 1.0;
this->color.y = 1.0;
this->color.z = 1.0;
this->color.w = 1.0;
this->viewOriented = true;
this->textureTMin = 0.0;
this->reorientNodes = false;
this->nodeSubdivision = 0.0;
this->textureRepeat = false;
this->minNodeDistance = 0.0;
this->textureRepeatStretch = false;
this->helix.rotationScale = 0.0;
this->helix.radius = 0.0;
this->helix.velocity = 0.0;
this->textureTMax = 1.0;
this->helix.distortion0.x = 0.0;
this->helix.distortion0.y = 0.0;
this->helix.distortion1.x = 0.0;
this->helix.distortion1.y = 0.0;
this->turbulence.frequency = 0.0;
this->turbulence.magnitude = 0.0;
this->turbulence.velocity = 1.0;
this->turbulence.magic.x = 0.93000001;
this->turbulence.magic.y = 1.0;
this->turbulence.magic.z = 0.91000003;
this->turbulence.magic.w = 0.73000002;
return this;
}
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetDeclInfo@idDeclRibbon@@UBAPAVidDeclInfo@@XZ
// EA : 0x82629BC8
// RVA : 0x00629BC8
// PDB : w:\tech5\engine\decls\declribbon.h
// ========================================================================
idDeclInfoTemplate<idDeclRibbon> *__fastcall idDeclRibbon::GetDeclInfo(idDeclRibbon *this)
{
return &idDeclRibbon::resourceList;
}
@@ -0,0 +1,76 @@
// ========================================================================
// ??0idDeclRollBones@@QAA@XZ
// EA : 0x82629C48
// RVA : 0x00629C48
// PDB : w:\tech5\engine\decls\declrollbones.cpp
// ========================================================================
idDeclRollBones *__fastcall idDeclRollBones::idDeclRollBones(idDeclRollBones *this)
{
idDeclTypeInfo::idDeclTypeInfo(this: &this->idDeclTypeInfo);
this->__vftable = (idDeclRollBones_vtbl *)&idDeclRollBones::`vftable';
this->rollBones.granularity = 0;
this->rollBones.memTag = 5;
this->rollBones.listStatic = 0;
this->rollBones.list = nullptr;
this->rollBones.size = 0;
this->rollBones.num = 0;
return this;
}
// ========================================================================
// __unwind$219161
// EA : 0x82629CB8
// RVA : 0x00629CB8
// PDB : w:\tech5\engine\decls\declrollbones.cpp
// ========================================================================
void _unwind_219161()
{
int v0; // r12
idDeclTypeInfo::~idDeclTypeInfo(this: *(idDeclTypeInfo **)(v0 - 112 + 132));
}
// ========================================================================
// ??1idDeclRollBones@@UAA@XZ
// EA : 0x82629CF8
// RVA : 0x00629CF8
// PDB : w:\tech5\engine\decls\declrollbones.cpp
// ========================================================================
void __fastcall idDeclRollBones::~idDeclRollBones(idDeclRollBones *this)
{
idDeclRollBones::idDeclRollBoneInstance *list; // r3
this->__vftable = (idDeclRollBones_vtbl *)&idDeclRollBones::`vftable';
if ( this->rollBones.listStatic == 0 || this->rollBones.listStatic == 2 )
{
list = this->rollBones.list;
if ( list != nullptr )
idListArrayDelete<idDeclRollBones::idDeclRollBoneInstance>(ptr: list, num: this->rollBones.size);
this->rollBones.list = nullptr;
this->rollBones.size = 0;
}
this->rollBones.num = 0;
idDeclTypeInfo::~idDeclTypeInfo(this: &this->idDeclTypeInfo);
}
// ========================================================================
// __unwind$219195
// EA : 0x82629D64
// RVA : 0x00629D64
// PDB : w:\tech5\engine\decls\declrollbones.cpp
// ========================================================================
void _unwind_219195()
{
int v0; // r12
idDeclTypeInfo::~idDeclTypeInfo(this: *(idDeclTypeInfo **)(v0 - 112 + 132));
}
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetDeclInfo@idDeclRollBones@@UBAPAVidDeclInfo@@XZ
// EA : 0x82629CE0
// RVA : 0x00629CE0
// PDB : w:\tech5\engine\decls\declrollbones.h
// ========================================================================
idDeclInfoTemplate<idDeclRollBones> *__fastcall idDeclRollBones::GetDeclInfo(idDeclRollBones *this)
{
return &idDeclRollBones::resourceList;
}
@@ -0,0 +1,344 @@
// ========================================================================
// ?DefaultDefinition@idDeclSkins@@UBAPBDXZ
// EA : 0x82629DF0
// RVA : 0x00629DF0
// PDB : w:\tech5\engine\decls\declskins.cpp
// ========================================================================
const char *__fastcall idDeclSkins::DefaultDefinition(idDeclSkins *this)
{
return "{\n}\n";
}
// ========================================================================
// ?Remap@idSkin@@QBAPBVidMaterial@@PBV2@@Z
// EA : 0x82629E00
// RVA : 0x00629E00
// PDB : w:\tech5\engine\decls\declskins.cpp
// ========================================================================
const idMaterial *__fastcall idSkin::Remap(idSkin *this, const idMaterial *mtr)
{
int num; // r8
int v3; // r10
idSkinMapping *list; // r9
int i; // r11
num = this->mappings.num;
v3 = 0;
if ( num <= 0 )
return mtr;
list = this->mappings.list;
for ( i = 0; list[i].from != mtr; ++i )
{
if ( ++v3 >= num )
return mtr;
}
return list[v3].to;
}
// ========================================================================
// ?IndexForSkin@idDeclSkins@@QBAHPBD@Z
// EA : 0x82629E50
// RVA : 0x00629E50
// PDB : w:\tech5\engine\decls\declskins.cpp
// ========================================================================
int __fastcall idDeclSkins::IndexForSkin(idDeclSkins *this, const char *name)
{
int v4; // r29
int i; // r31
v4 = 0;
if ( this->skins.num <= 0 )
return -1;
for ( i = 0; idStr::Icmp(s1: this->skins.list[i].name.str, s2: name) != 0; ++i )
{
if ( ++v4 >= this->skins.num )
return -1;
}
return v4;
}
// ========================================================================
// ?RebuildTextSource@idDeclSkins@@UAA_NXZ
// EA : 0x82629EC8
// RVA : 0x00629EC8
// PDB : w:\tech5\engine\decls\declskins.cpp
// ========================================================================
int __fastcall idDeclSkins::RebuildTextSource(idDeclSkins *this)
{
__int64 v2; // r8
__int64 v3; // r6
int v4; // r24
__int64 v5; // r10
int v6; // r30
va *v7; // r3
__int64 v8; // r8
idSkin *list; // r11
int v10; // r28
__int64 v11; // r10
int v12; // r29
idSkin *v13; // r11
idSkinMapping *v14; // r11
const idMaterial *to; // r11
__int64 v16; // r6
va *v17; // r3
int v19; // [sp+8h] [-10B8h]
int v20; // [sp+Ch] [-10B4h]
int v21; // [sp+10h] [-10B0h]
int v22; // [sp+14h] [-10ACh]
int v23; // [sp+18h] [-10A8h]
int v24; // [sp+1Ch] [-10A4h]
idStr v25; // [sp+50h] [-1070h] BYREF
va v26; // [sp+70h] [-1050h] BYREF
idStr::idStr(this: &v25, text: "{\n");
v4 = 0;
if ( this->skins.num > 0 )
{
LODWORD(v5) = &unk_821C0000;
HIDWORD(v5) = &unk_821C0000;
v6 = 0;
do
{
HIDWORD(v3) = this->skins.list[v6].name.str;
v7 = va::va(
this: &v26,
fmt: "\t%s {\n",
a3: v3,
a4: v2,
a5: v5,
a6: v19,
a7: v20,
a8: v21,
a9: v22,
a10: v23,
a11: v24);
idStr::Append(this: &v25, text: v7);
list = this->skins.list;
v10 = 0;
HIDWORD(v11) = list[v6].mappings.num;
if ( SHIDWORD(v11) > 0 )
{
v12 = 0;
v13 = &list[v6];
do
{
v14 = &v13->mappings.list[v12];
LODWORD(v11) = v14->from;
if ( v14->from != nullptr )
{
to = v14->to;
if ( to != nullptr )
{
LODWORD(v16) = to->name.str;
HIDWORD(v16) = *(_DWORD *)(v11 + 8);
v17 = va::va(
this: &v26,
fmt: "\t\t\"%s\" \"%s\"\n",
a3: v16,
a4: v8,
a5: v11,
a6: v19,
a7: v20,
a8: v21,
a9: v22,
a10: v23,
a11: v24);
idStr::Append(this: &v25, text: v17);
}
}
++v10;
++v12;
v13 = &this->skins.list[v6];
HIDWORD(v11) = v13->mappings.num;
}
while ( v10 < SHIDWORD(v11) );
}
idStr::Append(this: &v25, text: "\t}\n");
++v4;
++v6;
}
while ( v4 < this->skins.num );
}
idStr::Append(this: &v25, text: "}\n");
idDecl::SetText(this: &this->idDecl, text: v25.data, length: v25.len);
idStr::FreeData(this: &v25);
return 1;
}
// ========================================================================
// __unwind$219940
// EA : 0x8262A010
// RVA : 0x0062A010
// PDB : w:\tech5\engine\decls\declskins.cpp
// ========================================================================
void _unwind_219940()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 4288 + 80));
}
// ========================================================================
// ?FreeData@idDeclSkins@@UAAXXZ
// EA : 0x8262A038
// RVA : 0x0062A038
// PDB : w:\tech5\engine\decls\declskins.cpp
// ========================================================================
void __fastcall idDeclSkins::FreeData(idDeclSkins *this)
{
char *list; // r3
if ( this->skins.listStatic == 0 || this->skins.listStatic == 2 )
{
list = (char *)this->skins.list;
if ( list != nullptr )
idListArrayDelete<idStateData::transition_t>(ptr: list, num: this->skins.size);
this->skins.list = nullptr;
this->skins.size = 0;
}
this->skins.num = 0;
}
// ========================================================================
// ?Parse@idDeclSkins@@UAAXAAVidParser@@@Z
// EA : 0x8262A2F0
// RVA : 0x0062A2F0
// PDB : w:\tech5\engine\decls\declskins.cpp
// ========================================================================
void __fastcall idDeclSkins::Parse(idDeclSkins *this, idParser *src)
{
const idMaterial *v4; // r3
const idMaterial *v5; // r3
idSkinMapping v6; // [sp+50h] [-D0h] BYREF
idSkin v7; // [sp+60h] [-C0h] BYREF
idToken v8[2]; // [sp+80h] [-A0h] BYREF
v8[0].len = 0;
v8[0].allocedAndFlag = 20;
v8[0].floatvalue = -3.4028235e38;
v8[0].data = v8[0].baseBuffer;
v8[0].baseBuffer[0] = 0;
v8[0].intvalue = 0;
v8[0].whiteSpaceStart_p = nullptr;
v8[0].whiteSpaceEnd_p = nullptr;
v8[0].next = nullptr;
if ( idParser::CheckTokenString(this: src, string: "}") == 0 )
{
while ( 1 )
{
v7.mappings.memTag = 46;
v7.mappings.listStatic = 0;
memset(&v7.mappings, 0, 14);
v7.name.str = &byte_8200D768;
idParser::ExpectAnyToken(this: src, token: v8);
idAtomicString::Set(this: &v7.name, str_: v8[0].data);
idParser::ExpectTokenString(this: src, string: "{");
if ( idParser::CheckTokenString(this: src, string: "}") == 0 )
break;
LABEL_12:
if ( v7.mappings.num != 0 )
idList<idSkin,46>::Append(this: &this->skins, obj: &v7);
if ( v7.mappings.listStatic == 0 || v7.mappings.listStatic == 2 )
{
if ( v7.mappings.list != nullptr )
idMem::Free(this: &mem, ptr: v7.mappings.list, align: ALIGN_16);
v7.mappings.list = nullptr;
v7.mappings.size = 0;
}
v7.mappings.num = 0;
if ( idParser::CheckTokenString(this: src, string: "}") != 0 )
goto LABEL_20;
}
while ( idParser::ReadToken(this: src, token: v8) )
{
if ( v8[0].data != nullptr )
v4 = (const idMaterial *)idDeclInfo::FindWithInheritance(
this: &idMaterial::resourceList,
name: v8[0].data,
makeDefault: true);
else
v4 = nullptr;
v6.from = v4;
if ( !idParser::ReadToken(this: src, token: v8) )
{
idParser::Warning(this: src, str: "Unexpected end of file");
if ( v7.mappings.listStatic == 0 || v7.mappings.listStatic == 2 )
{
if ( v7.mappings.list != nullptr )
idMem::Free(this: &mem, ptr: v7.mappings.list, align: ALIGN_16);
v7.mappings.list = nullptr;
v7.mappings.size = 0;
}
v7.mappings.num = 0;
goto LABEL_20;
}
if ( v8[0].data != nullptr )
v5 = (const idMaterial *)idDeclInfo::FindWithInheritance(
this: &idMaterial::resourceList,
name: v8[0].data,
makeDefault: true);
else
v5 = nullptr;
v6.to = v5;
idList<cachedPageFile_t,5>::Append(this: &v7.mappings, obj: &v6);
if ( idParser::CheckTokenString(this: src, string: "}") != 0 )
goto LABEL_12;
}
idParser::Warning(this: src, str: "Unexpected end of file");
if ( v7.mappings.listStatic == 0 || v7.mappings.listStatic == 2 )
{
if ( v7.mappings.list != nullptr )
idMem::Free(this: &mem, ptr: v7.mappings.list, align: ALIGN_16);
v7.mappings.list = nullptr;
v7.mappings.size = 0;
}
v7.mappings.num = 0;
}
LABEL_20:
idStr::FreeData(this: &v8[0]);
}
// ========================================================================
// __unwind$220341
// EA : 0x8262A580
// RVA : 0x0062A580
// PDB : w:\tech5\engine\decls\declskins.cpp
// ========================================================================
void _unwind_220341()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 288 + 128));
}
// ========================================================================
// __unwind$220342
// EA : 0x8262A5A8
// RVA : 0x0062A5A8
// PDB : w:\tech5\engine\decls\declskins.cpp
// ========================================================================
void _unwind_220342()
{
int v0; // r12
idLobby::migrationInfo_t::~migrationInfo_t(this: (idSkin *)(v0 - 288 + 96));
}
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetDeclInfo@idDeclSkins@@UBAPAVidDeclInfo@@XZ
// EA : 0x82623C40
// RVA : 0x00623C40
// PDB : w:\tech5\engine\decls\declskins.h
// ========================================================================
idDeclInfoTemplate<idDeclSkins> *__fastcall idDeclSkins::GetDeclInfo(idDeclSkins *this)
{
return &idDeclSkins::resourceList;
}
@@ -0,0 +1,16 @@
// ========================================================================
// ??0idDeclStaticImage@@QAA@XZ
// EA : 0x8262A5D0
// RVA : 0x0062A5D0
// PDB : w:\tech5\engine\decls\declstaticimage.cpp
// ========================================================================
idDeclStaticImage *__fastcall idDeclStaticImage::idDeclStaticImage(idDeclStaticImage *this)
{
idDeclTypeInfo::idDeclTypeInfo(this);
this->__vftable = (idDeclStaticImage_vtbl *)&idDeclStaticImage::`vftable';
this->fileName.str = &byte_8200D768;
return this;
}
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetDeclInfo@idDeclStaticImage@@UBAPAVidDeclInfo@@XZ
// EA : 0x8262A618
// RVA : 0x0062A618
// PDB : w:\tech5\engine\decls\declstaticimage.h
// ========================================================================
idDeclInfoTemplate<idDeclStaticImage> *__fastcall idDeclStaticImage::GetDeclInfo(idDeclStaticImage *this)
{
return &idDeclStaticImage::resourceList;
}
@@ -0,0 +1,309 @@
// ========================================================================
// ??1idDeclTable@@UAA@XZ
// EA : 0x8262A630
// RVA : 0x0062A630
// PDB : w:\tech5\engine\decls\decltable.cpp
// ========================================================================
void __fastcall idDeclTable::~idDeclTable(idDeclTable *this)
{
this->__vftable = (idDeclTable_vtbl *)&idDeclTable::`vftable';
idParmState::RemoveTable(this: renderThreadParmState, table: this);
idMem::Free(this: &mem, ptr: this->table, align: ALIGN_16);
idDecl::~idDecl(this: &this->idDecl);
}
// ========================================================================
// __unwind$219301
// EA : 0x8262A6A0
// RVA : 0x0062A6A0
// PDB : w:\tech5\engine\decls\decltable.cpp
// ========================================================================
void _unwind_219301()
{
int v0; // r12
idDecl::~idDecl(this: *(idDecl **)(v0 - 112 + 132));
}
// ========================================================================
// ?FreeData@idDeclTable@@UAAXXZ
// EA : 0x8262A6C8
// RVA : 0x0062A6C8
// PDB : w:\tech5\engine\decls\decltable.cpp
// ========================================================================
void __fastcall idDeclTable::FreeData(idDeclTable *this)
{
idLookupTable::Clear(this: this->table);
}
// ========================================================================
// ?DefaultDefinition@idDeclTable@@UBAPBDXZ
// EA : 0x8262A6D0
// RVA : 0x0062A6D0
// PDB : w:\tech5\engine\decls\decltable.cpp
// ========================================================================
const char *__fastcall idDeclTable::DefaultDefinition(idDeclTable *this)
{
return "{ { 0 } }\n";
}
// ========================================================================
// ??0idDeclTable@@QAA@XZ
// EA : 0x8262A758
// RVA : 0x0062A758
// PDB : w:\tech5\engine\decls\decltable.cpp
// ========================================================================
idDeclTable *__fastcall idDeclTable::idDeclTable(idDeclTable *this)
{
float *v2; // r3
idLookupTable *v3; // r10
idDecl::idDecl(this: &this->idDecl);
this->__vftable = (idDeclTable_vtbl *)&idDeclTable::`vftable';
this->left = 0.0;
this->right = 1.0;
v2 = (float *)idMem::AllocWithLocation(
this: &mem,
location: "w:\\tech5\\engine\\decls\\DeclTable.cpp(20) : TAG_TABLE",
size: 0x220u,
tag: TAG_TABLE,
zeroBuffer: false,
align: ALIGN_16,
heap: HEAP_DEFAULTHEAP);
if ( v2 != nullptr )
{
v2[1] = 0.0;
v2[2] = 1.0;
*(_BYTE *)v2 = 0;
*((_BYTE *)v2 + 1) = 0;
v3 = (idLookupTable *)v2;
*((_BYTE *)v2 + 2) = 0;
v2[135] = 0.0;
v2[131] = 0.0;
v2[132] = NAN;
*((_BYTE *)v2 + 532) = 0;
v2[134] = 0.0;
}
else
{
v3 = nullptr;
}
this->table = v3;
return this;
}
// ========================================================================
// __unwind$219672
// EA : 0x8262A844
// RVA : 0x0062A844
// PDB : w:\tech5\engine\decls\decltable.cpp
// ========================================================================
void _unwind_219672()
{
int v0; // r12
idDecl::~idDecl(this: *(idDecl **)(v0 - 128 + 148));
}
// ========================================================================
// ?Parse@idDeclTable@@UAAXAAVidParser@@@Z
// EA : 0x8262A878
// RVA : 0x0062A878
// PDB : w:\tech5\engine\decls\decltable.cpp
// ========================================================================
void __fastcall idDeclTable::Parse(idDeclTable *this, idParser *src)
{
bool v4; // r14
double v5; // fp29
double v6; // fp28
double v7; // fp30
int v8; // r9
int v9; // r10
idLookupTable *v10; // r11
idLookupTable *v11; // r11
double min; // fp0
idLookupTable *v13; // r10
double max; // fp11
idLookupTable *v15; // r11
double v16; // fp31
idLookupTable *table; // r3
bool v18; // [sp+50h] [-120h] BYREF
idLookupTable *v19; // [sp+54h] [-11Ch]
idToken v20; // [sp+60h] [-110h] BYREF
v20.len = 0;
v20.baseBuffer[0] = 0;
v20.floatvalue = -3.4028235e38;
v20.intvalue = 0;
memset(&v20.whiteSpaceStart_p, 0, 12);
v20.allocedAndFlag = 20;
v20.data = v20.baseBuffer;
v4 = false;
v5 = 1.0e30;
v6 = -1.0e30;
v7 = 0.0;
idLookupTable::Clear(this: this->table);
if ( idParser::ReadToken(this: src, token: &v20) )
{
while ( idStr::Cmp(s1: v20.data, s2: "}") != 0 )
{
if ( idStr::Icmp(s1: v20.data, s2: "snap") != 0 )
{
if ( idStr::Icmp(s1: v20.data, s2: "clamp") != 0 )
{
if ( idStr::Icmp(s1: v20.data, s2: "spline") != 0 )
{
if ( idStr::Icmp(s1: v20.data, s2: "max") != 0 )
{
if ( idStr::Icmp(s1: v20.data, s2: "min") != 0 )
{
if ( idStr::Icmp(s1: v20.data, s2: "left") != 0 )
{
if ( idStr::Icmp(s1: v20.data, s2: "right") != 0 )
{
if ( idStr::Icmp(s1: v20.data, s2: "{") != 0 )
{
idParser::Warning(this: src, str: "unknown token '%s'", v20.data);
}
else
{
while ( 1 )
{
v16 = idParser::ParseFloat(this: src, errorFlag: &v18);
if ( v18 )
break;
if ( idParser::CheckTokenString(this: src, string: ":") != 0 )
{
v7 = v16;
v16 = idParser::ParseFloat(this: src, errorFlag: &v18);
if ( v18 )
break;
}
table = this->table;
if ( table->values.numKnots >= 64 )
{
idParser::Warning(this: src, str: "more than %d points", 64);
goto _M220076;
}
if ( v16 < v5 )
v5 = v16;
if ( v16 > v6 )
v6 = v16;
idLookupTable::AddValue(this: table, t: v7, v: v16);
v7 = (float)((float)v7 + (float)1.0);
idParser::ReadToken(this: src, token: &v20);
if ( idStr::Cmp(s1: v20.data, s2: "}") == 0 )
goto LABEL_5;
if ( idStr::Cmp(s1: v20.data, s2: ",") != 0 )
{
idParser::Warning(this: src, str: "expected comma or brace");
goto _M220076;
}
}
}
goto _M220076;
}
this->right = idParser::ParseFloat(this: src, errorFlag: nullptr);
}
else
{
this->left = idParser::ParseFloat(this: src, errorFlag: nullptr);
}
}
else
{
this->table->_min = idParser::ParseFloat(this: src, errorFlag: nullptr);
}
}
else
{
this->table->_max = idParser::ParseFloat(this: src, errorFlag: nullptr);
}
}
else
{
idLookupTable::SetSpline(this: this->table, b: true);
}
}
else
{
v4 = true;
}
}
else
{
idLookupTable::SetSnap(this: this->table, b: true);
}
LABEL_5:
if ( !idParser::ReadToken(this: src, token: &v20) )
break;
}
}
if ( v5 < 0.0 || v6 > 1.0 )
{
v8 = 0;
if ( this->table->values.numKnots > 0 )
{
v9 = 64;
do
{
++v8;
v19 = this->table;
v10 = v19;
v19->values.times[v9] = (float)(v19->values.times[v9] - (float)v5)
* (float)((float)1.0 / (float)((float)v6 - (float)v5));
v10->values.changed = true;
++v9;
}
while ( v8 < this->table->values.numKnots );
}
v11 = this->table;
min = v11->_min;
v19 = v11;
v11->_min = (float)((float)min * (float)((float)v6 - (float)v5)) + (float)v5;
v13 = this->table;
max = v13->_max;
v19 = v13;
v13->_max = (float)((float)max * (float)((float)v6 - (float)v5)) + (float)v5;
}
v15 = this->table;
if ( v15->spline && v15->snap )
{
idParser::Warning(this: src, str: "both spline and snap specified, snap ignored");
idLookupTable::SetSnap(this: this->table, b: false);
}
idLookupTable::SetClamp(this: this->table, b: v4);
idLookupTable::Finalize(this: this->table);
_M220076:
idStr::FreeData(this: &v20);
}
// ========================================================================
// __unwind$219844
// EA : 0x8262ACC4
// RVA : 0x0062ACC4
// PDB : w:\tech5\engine\decls\decltable.cpp
// ========================================================================
void _unwind_219844()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 368 + 96));
}
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetDeclInfo@idDeclTable@@UBAPAVidDeclInfo@@XZ
// EA : 0x8262A6E0
// RVA : 0x0062A6E0
// PDB : w:\tech5\engine\decls\decltable.h
// ========================================================================
idDeclInfoTemplate<idDeclTable> *__fastcall idDeclTable::GetDeclInfo(idDeclTable *this)
{
return &idDeclTable::resourceList;
}
@@ -0,0 +1,518 @@
// ========================================================================
// ??0idDeclTypeInfo@@QAA@XZ
// EA : 0x8262ACF0
// RVA : 0x0062ACF0
// PDB : w:\tech5\engine\decls\decltypeinfo.cpp
// ========================================================================
idDeclTypeInfo *__fastcall idDeclTypeInfo::idDeclTypeInfo(idDeclTypeInfo *this)
{
idDecl::idDecl(this);
this->parent = nullptr;
this->__vftable = (idDeclTypeInfo_vtbl *)&idDeclTypeInfo::`vftable';
this->hasBeenParsedAtLeastOnce = false;
return this;
}
// ========================================================================
// ??1idDeclTypeInfo@@UAA@XZ
// EA : 0x8262AD38
// RVA : 0x0062AD38
// PDB : w:\tech5\engine\decls\decltypeinfo.cpp
// ========================================================================
void __fastcall idDeclTypeInfo::~idDeclTypeInfo(idDeclTypeInfo *this)
{
this->__vftable = (idDeclTypeInfo_vtbl *)&idDeclTypeInfo::`vftable';
idDecl::~idDecl(this);
}
// ========================================================================
// ?Parse@idDeclTypeInfo@@UAAXAAVidParser@@@Z
// EA : 0x8262ADC8
// RVA : 0x0062ADC8
// PDB : w:\tech5\engine\decls\decltypeinfo.cpp
// ========================================================================
void __fastcall idDeclTypeInfo::Parse(idDeclTypeInfo *this, idParser *src)
{
const char *v2; // r29
int v3; // r24
idParser *p_data; // r25
char *data; // r28
idDeclInfo *v7; // r3
idDeclTypeInfo *v8; // r3
const char *v9; // r23
int *v10; // r26
char *v11; // r28
const char *v12; // r27
idDeclTypeInfo *parent; // r3
idDeclInfo *v14; // r3
idDecl *v15; // r22
int v16; // r3
idArray<idResource *,32> *v17; // r27
idResource *v18; // r3
const char *str; // r28
const char *ResourceTypeName; // r4
const char *v21; // r3
idDeclTypeInfo_vtbl *v22; // r11
int v23; // r3
idDeclInfo *v24; // r3
idDeclInfo *v25; // r3
idDeclInfo *v26; // r3
idDeclInfo *v27; // r3
idStr v28; // [sp+50h] [-220h] BYREF
idDeclTypeInfo *v29; // [sp+70h] [-200h]
idToken v30; // [sp+80h] [-1F0h] BYREF
idTypeInfoFile v31; // [sp+D0h] [-1A0h] BYREF
idTypeInfoFile v32; // [sp+170h] [-100h] BYREF
v2 = nullptr;
v3 = 20;
v30.len = 0;
v30.allocedAndFlag = 20;
p_data = src;
v30.floatvalue = -3.4028235e38;
v30.data = v30.baseBuffer;
this->parent = nullptr;
v30.baseBuffer[0] = 0;
v30.intvalue = 0;
memset(&v30.whiteSpaceStart_p, 0, 12);
if ( idParser::PeekTokenString(this: src, string: "inherit") != 0 )
{
idParser::ExpectTokenString(this: p_data, string: "inherit");
idParser::ExpectTokenString(this: p_data, string: "=");
idParser::ExpectTokenType(this: p_data, type: 1, subtype: 0, token: &v30);
if ( v30.len != 0 )
{
data = v30.data;
v7 = this->GetDeclInfo(this);
v8 = (idDeclTypeInfo *)idResourceList::Load(this: v7, name: data, makeDefault: false, skipStaleCheck: false);
this->parent = v8;
declManager->AddDependency_2(this: declManager, a2: this, a3: v8);
}
idParser::ExpectTokenString(this: p_data, string: ";");
}
LOBYTE(v9) = 1;
v10 = &joystick.joyAxis[0][2];
v11 = &byte_8200D768;
v12 = "edit";
if ( this->parent != nullptr || this->hasBeenParsedAtLeastOnce )
{
idTypeInfoFile::idTypeInfoFile(this: &v31, indent_: 0);
v31.settings.writeModifier = WRITE_DEF_AND_EDIT_ONLY;
v31.settings.resolveEntityPointers = false;
v31.settings.resolveModelPointers = false;
idTypeInfoFile::WriteMemoryFile(this: &v31);
parent = this->parent;
if ( parent != nullptr )
{
if ( (*((_BYTE *)&parent->idResource + 32) & 0x20) != 0 )
{
p_data = (idParser *)&keyActions[3][4][214].binding.data;
if ( idResourceList::loadResourceRecursionLevel > 0 )
{
v17 = &idResourceList::recursiveLoads;
v10 = (int *)"%s::LoadResource( %s )\n";
v3 = (int)"<unknown type>";
v9 = "<null>";
do
{
v18 = v17->ptr[0];
if ( v17->ptr[0] != nullptr )
{
str = v18->name.str;
ResourceTypeName = idResource::GetResourceTypeName(this: v18);
}
else
{
str = "<null>";
ResourceTypeName = "<unknown type>";
}
idLib::Printf(fmt: "%s::LoadResource( %s )\n", ResourceTypeName, str);
++v2;
v17 = (idArray<idResource *,32> *)((char *)v17 + 4);
}
while ( (int)v2 < idResourceList::loadResourceRecursionLevel );
}
v2 = this->name.str;
v11 = (char *)this->parent->name.str;
v12 = idResource::GetResourceTypeName(this);
v21 = idResource::GetResourceTypeName(this: this->parent);
idLib::Error(
fmt: "Resource %s:%s is being used for parent inheritance for %s:%s before it is fully defined.",
v21,
v11,
v12,
v2);
}
v22 = parent->__vftable;
v29 = parent;
v23 = ((int (*)(void))v22->GetDeclInfo)();
idTypeInfoTools::WriteObject(
this: (idTypeInfoTools *)v10[5472],
file: &v31,
objectType: *(const char **)(v23 + 1048),
objectOps: v11,
objectName: v12,
objectPtr: this->parent);
}
else
{
v14 = this->GetDeclInfo(this);
v15 = v14->AllocDecl(this: v14);
v16 = (int)v15->GetDeclInfo(this: v15);
idTypeInfoTools::WriteObject(
this: typeInfoTools,
file: &v31,
objectType: *(const char **)(v16 + 1048),
objectOps: &byte_8200D768,
objectName: "edit",
objectPtr: v15);
((void (__fastcall *)(idDecl *, int))v15->dtr_idResource)(a1: v15, a2: 1);
}
idTypeInfoFile::ReadMemoryFile(this: &v31);
v24 = this->GetDeclInfo(this);
idTypeInfoTools::ReadObject(
this: (idTypeInfoTools *)v10[5472],
file: &v31,
objectType: v24->classname,
objectOps: v11,
objectName: v12,
objectPtr: this);
idTypeInfoFile::~idTypeInfoFile(this: &v31);
}
v28.allocedAndFlag = v3;
v28.len = (int)v2;
v28.data = v28.baseBuffer;
v28.baseBuffer[0] = (char)v2;
idParser::ParseBracedSectionExact(this: p_data, out: &v28, parseFirstBrace: false);
idTypeInfoFile::idTypeInfoFile(this: &v32, indent_: 0);
idTypeInfoFile::ReadMemory(this: &v32, data: v28.data, length: v28.len, name: this->name.str, startLine: 0);
v25 = this->GetDeclInfo(this);
if ( idTypeInfoFile::CheckType(this: &v32, type: v25->classname, ops: v11, name: v12)
|| (v26 = this->GetDeclInfo(this),
idTypeInfoFile::CheckType(this: &v32, type: v26->classname, ops: v11, name: "data")) )
{
v27 = this->GetDeclInfo(this);
idTypeInfoTools::ReadObject(
this: (idTypeInfoTools *)v10[5472],
file: &v32,
objectType: v27->classname,
objectOps: v11,
objectName: v12,
objectPtr: this);
}
this->hasBeenParsedAtLeastOnce = (char)v9;
idTypeInfoFile::~idTypeInfoFile(this: &v32);
idStr::FreeData(this: &v28);
idStr::FreeData(this: &v30);
}
// ========================================================================
// $LN114
// EA : 0x8262B1E4
// RVA : 0x0062B1E4
// PDB : w:\tech5\engine\decls\decltypeinfo.cpp
// ========================================================================
void _LN114()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 624 + 128));
}
// ========================================================================
// __unwind$221031
// EA : 0x8262B20C
// RVA : 0x0062B20C
// PDB : w:\tech5\engine\decls\decltypeinfo.cpp
// ========================================================================
void _unwind_221031()
{
int v0; // r12
idTypeInfoFile::~idTypeInfoFile(this: (idTypeInfoFile *)(v0 - 624 + 208));
}
// ========================================================================
// __unwind$221032
// EA : 0x8262B234
// RVA : 0x0062B234
// PDB : w:\tech5\engine\decls\decltypeinfo.cpp
// ========================================================================
void _unwind_221032()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 624 + 80));
}
// ========================================================================
// __unwind$221033
// EA : 0x8262B25C
// RVA : 0x0062B25C
// PDB : w:\tech5\engine\decls\decltypeinfo.cpp
// ========================================================================
void _unwind_221033()
{
int v0; // r12
idTypeInfoFile::~idTypeInfoFile(this: (idTypeInfoFile *)(v0 - 624 + 368));
}
// ========================================================================
// ?SetState@idDeclTypeInfo@@QAAXPBV1@@Z
// EA : 0x8262B290
// RVA : 0x0062B290
// PDB : w:\tech5\engine\decls\decltypeinfo.cpp
// ========================================================================
void __fastcall idDeclTypeInfo::SetState(idDeclTypeInfo *this, idDeclTypeInfo *empty)
{
idDeclTypeInfo *parent; // r27
idDeclTypeInfo_vtbl *v4; // r11
int v5; // r3
idDeclInfo *v6; // r3
idDeclInfo *v7; // r3
idDeclInfo *v8; // r3
__int64 v9; // r10
__int64 v10; // r8
__int64 v11; // r6
idDeclTypeInfo *v12; // r11
va *v13; // r3
char *TypeInfoString; // r3
int v15; // [sp+8h] [-12D8h]
int v16; // [sp+Ch] [-12D4h]
int v17; // [sp+10h] [-12D0h]
int v18; // [sp+14h] [-12CCh]
int v19; // [sp+18h] [-12C8h]
int v20; // [sp+1Ch] [-12C4h]
idTypeInfoTree v21; // [sp+50h] [-1290h] BYREF
idTypeInfoTree v22; // [sp+70h] [-1270h] BYREF
idStr v23; // [sp+90h] [-1250h] BYREF
idTypeInfoFile v24; // [sp+B0h] [-1230h] BYREF
idTypeInfoFile v25; // [sp+150h] [-1190h] BYREF
idTypeInfoFile v26; // [sp+1F0h] [-10F0h] BYREF
va v27; // [sp+290h] [-1050h] BYREF
parent = this->parent;
if ( parent == nullptr )
parent = empty;
idTypeInfoFile::idTypeInfoFile(this: &v24, indent_: 0);
idTypeInfoFile::WriteMemoryFile(this: &v24);
v4 = this->__vftable;
v24.settings.resolveEntityPointers = false;
v24.settings.writeModifier = WRITE_DEF_AND_EDIT_ONLY;
v24.settings.resolveModelPointers = false;
v24.settings.skipMarkedObjects = false;
v24.settings.writeComments = false;
v5 = (int)v4->GetDeclInfo(this);
idTypeInfoFile::WriteType(this: &v24, type: *(const char **)(v5 + 1048), ops: &byte_8200D768, name: "edit");
v6 = this->GetDeclInfo(this);
idTypeInfoTools::WriteObject(
this: typeInfoTools,
file: &v24,
objectType: v6->classname,
objectOps: &byte_8200D768,
objectName: "edit",
objectPtr: parent);
v22.nodeBlockAlloc.allowAllocs = true;
v22.nodeBlockAlloc.clearAllocs = false;
memset(&v22, 0, 20);
idTypeInfoFile::ReadMemoryFile(this: &v24);
idTypeInfoTree::Parse(this: &v22, file: &v24);
idTypeInfoFile::idTypeInfoFile(this: &v25, indent_: 0);
idTypeInfoFile::WriteMemoryFile(this: &v25);
v25.settings.writeModifier = WRITE_DEF_AND_EDIT_ONLY;
v25.settings.resolveEntityPointers = false;
v25.settings.resolveModelPointers = false;
v25.settings.skipMarkedObjects = false;
v25.settings.writeComments = false;
v7 = this->GetDeclInfo(this);
idTypeInfoFile::WriteType(this: &v25, type: v7->classname, ops: &byte_8200D768, name: "edit");
v8 = this->GetDeclInfo(this);
idTypeInfoTools::WriteObject(
this: typeInfoTools,
file: &v25,
objectType: v8->classname,
objectOps: &byte_8200D768,
objectName: "edit",
objectPtr: this);
v21.nodeBlockAlloc.allowAllocs = true;
v21.nodeBlockAlloc.clearAllocs = false;
memset(&v21, 0, 20);
idTypeInfoFile::ReadMemoryFile(this: &v25);
idTypeInfoTree::Parse(this: &v21, file: &v25);
idTypeInfoTree::ExtendListsWithDefaultsBasedOn(
this: &v22,
referenceTree: &v21,
settings: &v24.settings,
tit: typeInfoTools);
idTypeInfoTree::Diff(this: &v21, tree: &v22);
idTypeInfoFile::idTypeInfoFile(this: &v26, indent_: 1);
idTypeInfoFile::WriteMemoryFile(this: &v26);
v26.settings.writeComments = true;
v26.settings.resolveEntityPointers = false;
v26.settings.resolveModelPointers = false;
v26.settings.writeType = false;
idTypeInfoTree::Write(this: &v21, file: &v26, onlyDiff: true);
idStr::idStr(this: &v23, text: "{\n");
v12 = this->parent;
if ( v12 != nullptr )
{
LODWORD(v9) = &unk_821C0000;
HIDWORD(v11) = v12->name.str;
v13 = va::va(
this: &v27,
fmt: "\tinherit = \"%s\";\n",
a3: v11,
a4: v10,
a5: v9,
a6: v15,
a7: v16,
a8: v17,
a9: v18,
a10: v19,
a11: v20);
idStr::Append(this: &v23, text: v13);
}
TypeInfoString = (char *)idTypeInfoFile::GetTypeInfoString(this: &v26);
idStr::Append(this: &v23, text: TypeInfoString);
idStr::Append(this: &v23, text: "\n}");
idDecl::SetText(this, text: v23.data, length: 0);
idStr::FreeData(this: &v23);
idTypeInfoFile::~idTypeInfoFile(this: &v26);
idTypeInfoTree::~idTypeInfoTree(this: &v21);
idTypeInfoFile::~idTypeInfoFile(this: &v25);
idTypeInfoTree::~idTypeInfoTree(this: &v22);
idTypeInfoFile::~idTypeInfoFile(this: &v24);
}
// ========================================================================
// __unwind$221321
// EA : 0x8262B534
// RVA : 0x0062B534
// PDB : w:\tech5\engine\decls\decltypeinfo.cpp
// ========================================================================
void _unwind_221321()
{
int v0; // r12
idTypeInfoFile::~idTypeInfoFile(this: (idTypeInfoFile *)(v0 - 4832 + 176));
}
// ========================================================================
// __unwind$221322
// EA : 0x8262B55C
// RVA : 0x0062B55C
// PDB : w:\tech5\engine\decls\decltypeinfo.cpp
// ========================================================================
void _unwind_221322()
{
int v0; // r12
idTypeInfoTree::~idTypeInfoTree(this: (idTypeInfoTree *)(v0 - 4832 + 112));
}
// ========================================================================
// __unwind$221323
// EA : 0x8262B584
// RVA : 0x0062B584
// PDB : w:\tech5\engine\decls\decltypeinfo.cpp
// ========================================================================
void _unwind_221323()
{
int v0; // r12
idTypeInfoFile::~idTypeInfoFile(this: (idTypeInfoFile *)(v0 - 4832 + 336));
}
// ========================================================================
// __unwind$221324
// EA : 0x8262B5AC
// RVA : 0x0062B5AC
// PDB : w:\tech5\engine\decls\decltypeinfo.cpp
// ========================================================================
void _unwind_221324()
{
int v0; // r12
idTypeInfoTree::~idTypeInfoTree(this: (idTypeInfoTree *)(v0 - 4832 + 80));
}
// ========================================================================
// __unwind$221325
// EA : 0x8262B5D4
// RVA : 0x0062B5D4
// PDB : w:\tech5\engine\decls\decltypeinfo.cpp
// ========================================================================
void _unwind_221325()
{
int v0; // r12
idTypeInfoFile::~idTypeInfoFile(this: (idTypeInfoFile *)(v0 - 4832 + 496));
}
// ========================================================================
// __unwind$221326
// EA : 0x8262B5FC
// RVA : 0x0062B5FC
// PDB : w:\tech5\engine\decls\decltypeinfo.cpp
// ========================================================================
void _unwind_221326()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 4832 + 144));
}
// ========================================================================
// ?RebuildTextSource@idDeclTypeInfo@@UAA_NXZ
// EA : 0x8262B628
// RVA : 0x0062B628
// PDB : w:\tech5\engine\decls\decltypeinfo.cpp
// ========================================================================
int __fastcall idDeclTypeInfo::RebuildTextSource(idDeclTypeInfo *this)
{
idDeclTypeInfo *parent; // r31
idDeclInfo *v3; // r3
parent = this->parent;
if ( parent == nullptr )
{
v3 = this->GetDeclInfo(this);
parent = (idDeclTypeInfo *)v3->AllocDecl(this: v3);
}
idDeclTypeInfo::SetState(this, empty: parent);
if ( parent != this->parent && parent != nullptr )
((void (__fastcall *)(idDeclTypeInfo *, int))parent->dtr_idResource)(a1: parent, a2: 1);
return 1;
}
@@ -0,0 +1,32 @@
// ========================================================================
// ?GetDeclInfo@idDeclTypeInfo@@UBAPAVidDeclInfo@@XZ
// EA : 0x8262AD48
// RVA : 0x0062AD48
// PDB : w:\tech5\engine\decls\decltypeinfo.h
// ========================================================================
idDeclInfoTemplate<idDeclTypeInfo> *__fastcall idDeclTypeInfo::GetDeclInfo(idDeclTypeInfo *this)
{
return &idDeclTypeInfo::resourceList;
}
// ========================================================================
// ?GetInheritName@idDeclTypeInfo@@QBAPBDXZ
// EA : 0x82D78D88
// RVA : 0x00D78D88
// PDB : w:\tech5\engine\decls\decltypeinfo.h
// ========================================================================
char *__fastcall idDeclTypeInfo::GetInheritName(idDeclTypeInfo *this)
{
idDeclTypeInfo *parent; // r11
parent = this->parent;
if ( parent != nullptr )
return (char *)parent->name.str;
else
return &byte_8200D768;
}
@@ -0,0 +1,314 @@
// ========================================================================
// ?Parse@idDeclTypeInfoGraph@@UAAXAAVidParser@@@Z
// EA : 0x8262B6C8
// RVA : 0x0062B6C8
// PDB : w:\tech5\engine\decls\decltypeinfograph.cpp
// ========================================================================
void __fastcall idDeclTypeInfoGraph::Parse(idDeclTypeInfoGraph *this, idParser *src)
{
idDeclTypeInfo::Parse(this, src);
this->OnDeclParsed(this);
}
// ========================================================================
// ??0idDeclTypeInfoGraph@@QAA@XZ
// EA : 0x8262B828
// RVA : 0x0062B828
// PDB : w:\tech5\engine\decls\decltypeinfograph.cpp
// ========================================================================
idDeclTypeInfoGraph *__fastcall idDeclTypeInfoGraph::idDeclTypeInfoGraph(idDeclTypeInfoGraph *this)
{
idDeclTypeInfo::idDeclTypeInfo(this);
this->__vftable = (idDeclTypeInfoGraph_vtbl *)&idDeclTypeInfoGraph::`vftable';
this->subGraphs.list = nullptr;
this->subGraphs.granularity = 0;
this->subGraphs.memTag = 5;
this->subGraphs.listStatic = 0;
this->subGraphs.size = 0;
this->subGraphs.num = 0;
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->subGraphs);
this->nodes.list = nullptr;
this->nodes.granularity = 0;
this->nodes.memTag = 5;
this->nodes.listStatic = 0;
this->nodes.size = 0;
this->nodes.num = 0;
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->nodes);
this->links.list = nullptr;
this->links.granularity = 0;
this->links.memTag = 5;
this->links.listStatic = 0;
this->links.size = 0;
this->links.num = 0;
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->links);
return this;
}
// ========================================================================
// __unwind$224458
// EA : 0x8262B8C4
// RVA : 0x0062B8C4
// PDB : w:\tech5\engine\decls\decltypeinfograph.cpp
// ========================================================================
void _unwind_224458()
{
int v0; // r12
idDeclTypeInfo::~idDeclTypeInfo(this: *(idDeclTypeInfo **)(v0 - 128 + 148));
}
// ========================================================================
// __unwind$224459
// EA : 0x8262B8EC
// RVA : 0x0062B8EC
// PDB : w:\tech5\engine\decls\decltypeinfograph.cpp
// ========================================================================
void _unwind_224459()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: (idStaticList<idVehicleState *,4> *)(*(_DWORD *)(v0 - 128 + 148) + 64));
}
// ========================================================================
// __unwind$224460
// EA : 0x8262B918
// RVA : 0x0062B918
// PDB : w:\tech5\engine\decls\decltypeinfograph.cpp
// ========================================================================
void _unwind_224460()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: (idStaticList<idVehicleState *,4> *)(*(_DWORD *)(v0 - 128 + 148) + 80));
}
// ========================================================================
// ??1idDeclTypeInfoGraph@@UAA@XZ
// EA : 0x8262B9B0
// RVA : 0x0062B9B0
// PDB : w:\tech5\engine\decls\decltypeinfograph.cpp
// ========================================================================
void __fastcall idDeclTypeInfoGraph::~idDeclTypeInfoGraph(idDeclTypeInfoGraph *this)
{
idList<idVehicleState *,5> *p_subGraphs; // r29
this->__vftable = (idDeclTypeInfoGraph_vtbl *)&idDeclTypeInfoGraph::`vftable';
p_subGraphs = (idList<idVehicleState *,5> *)&this->subGraphs;
idList<idTypeInfoSubGraph *,5>::DeleteContents(this: (idList<idTypeInfoGraphLink *,5> *)&this->subGraphs);
idList<idTypeInfoSubGraph *,5>::DeleteContents(this: (idList<idTypeInfoGraphLink *,5> *)&this->nodes);
idList<idTypeInfoSubGraph *,5>::DeleteContents(this: &this->links);
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->links);
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->nodes);
idList<idThread *,58>::Clear(this: p_subGraphs);
idDeclTypeInfo::~idDeclTypeInfo(this);
}
// ========================================================================
// __unwind$224547
// EA : 0x8262BA20
// RVA : 0x0062BA20
// PDB : w:\tech5\engine\decls\decltypeinfograph.cpp
// ========================================================================
void _unwind_224547()
{
int v0; // r12
idDeclTypeInfo::~idDeclTypeInfo(this: *(idDeclTypeInfo **)(v0 - 128 + 148));
}
// ========================================================================
// __unwind$224548
// EA : 0x8262BA48
// RVA : 0x0062BA48
// PDB : w:\tech5\engine\decls\decltypeinfograph.cpp
// ========================================================================
void _unwind_224548()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: (idStaticList<idVehicleState *,4> *)(*(_DWORD *)(v0 - 128 + 148) + 64));
}
// ========================================================================
// __unwind$224549
// EA : 0x8262BA74
// RVA : 0x0062BA74
// PDB : w:\tech5\engine\decls\decltypeinfograph.cpp
// ========================================================================
void _unwind_224549()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: (idStaticList<idVehicleState *,4> *)(*(_DWORD *)(v0 - 128 + 148) + 80));
}
// ========================================================================
// __unwind$224550
// EA : 0x8262BAA0
// RVA : 0x0062BAA0
// PDB : w:\tech5\engine\decls\decltypeinfograph.cpp
// ========================================================================
void _unwind_224550()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: (idStaticList<idVehicleState *,4> *)(*(_DWORD *)(v0 - 128 + 148) + 96));
}
// ========================================================================
// ?GetLinksFrom@idDeclTypeInfoGraph@@QBAXPBVidTypeInfoGraphNode@@AAV?$idList@PBVidTypeInfoGraphLink@@$04@@@Z
// EA : 0x8262BB30
// RVA : 0x0062BB30
// PDB : w:\tech5\engine\decls\decltypeinfograph.cpp
// ========================================================================
void __fastcall idDeclTypeInfoGraph::GetLinksFrom(
idDeclTypeInfoGraph *this,
const idTypeInfoGraphNode *node,
idList<enum encounterGroupRole_t,5> *links_in)
{
int v6; // r29
int v7; // r30
const encounterGroupRole_t *v8; // r4
idTypeInfoGraphNode *v9; // r11
if ( node != nullptr )
{
v6 = 0;
if ( this->links.num > 0 )
{
v7 = 0;
do
{
v8 = (const encounterGroupRole_t *)&this->links.list[v7];
v9 = (idTypeInfoGraphNode *)*v8;
if ( *v8 != ROLE_NONE )
v9 = this->nodes.list[LODWORD(v9->position.x)];
if ( v9 == node )
idList<idAnimWebBlendTree *,5>::Append(this: links_in, obj: v8);
++v6;
++v7;
}
while ( v6 < this->links.num );
}
}
}
// ========================================================================
// ?GetSubGraphFactory@idDeclTypeInfoGraph@@SAAAV?$idGraphItemFactory@VidTypeInfoSubGraph@@@@XZ
// EA : 0x8262BE30
// RVA : 0x0062BE30
// PDB : w:\tech5\engine\decls\decltypeinfograph.cpp
// ========================================================================
idGraphItemFactory<idTypeInfoSubGraph> *__fastcall idDeclTypeInfoGraph::GetSubGraphFactory()
{
if ( (_S13 & 1) == 0 )
{
_S13 |= 1u;
idGraphItemFactory<idTypeInfoSubGraph>::idGraphItemFactory<idTypeInfoSubGraph>(this: &subGraphFactory);
atexit(func: (void (__fastcall *)())_idDeclTypeInfoGraph::GetSubGraphFactory_::_2_::_dynamic_atexit_destructor_for__subGraphFactory__);
}
return &subGraphFactory;
}
// ========================================================================
// __unwind$226282
// EA : 0x8262BEA8
// RVA : 0x0062BEA8
// PDB : w:\tech5\engine\decls\decltypeinfograph.cpp
// ========================================================================
void _unwind_226282()
{
_S13 &= ~1u;
}
// ========================================================================
// ?GetGraphNodeFactory@idDeclTypeInfoGraph@@SAAAV?$idGraphItemFactory@VidTypeInfoGraphNode@@@@XZ
// EA : 0x8262BED0
// RVA : 0x0062BED0
// PDB : w:\tech5\engine\decls\decltypeinfograph.cpp
// ========================================================================
idGraphItemFactory<idTypeInfoGraphNode> *__fastcall idDeclTypeInfoGraph::GetGraphNodeFactory()
{
if ( (_S14 & 1) == 0 )
{
_S14 |= 1u;
idGraphItemFactory<idTypeInfoGraphNode>::idGraphItemFactory<idTypeInfoGraphNode>(this: &nodeFactory);
atexit(func: (void (__fastcall *)())_idDeclTypeInfoGraph::GetGraphNodeFactory_::_2_::_dynamic_atexit_destructor_for__nodeFactory__);
}
return &nodeFactory;
}
// ========================================================================
// __unwind$226299
// EA : 0x8262BF48
// RVA : 0x0062BF48
// PDB : w:\tech5\engine\decls\decltypeinfograph.cpp
// ========================================================================
void _unwind_226299()
{
_S14 &= ~1u;
}
// ========================================================================
// ?GetGraphLinkFactory@idDeclTypeInfoGraph@@SAAAV?$idGraphItemFactory@VidTypeInfoGraphLink@@@@XZ
// EA : 0x8262BF70
// RVA : 0x0062BF70
// PDB : w:\tech5\engine\decls\decltypeinfograph.cpp
// ========================================================================
idGraphItemFactory<idTypeInfoGraphLink> *__fastcall idDeclTypeInfoGraph::GetGraphLinkFactory()
{
if ( (_S15 & 1) == 0 )
{
_S15 |= 1u;
idGraphItemFactory<idTypeInfoGraphLink>::idGraphItemFactory<idTypeInfoGraphLink>(this: &linkFactory);
atexit(func: (void (__fastcall *)())_idDeclTypeInfoGraph::GetGraphLinkFactory_::_2_::_dynamic_atexit_destructor_for__linkFactory__);
}
return &linkFactory;
}
// ========================================================================
// __unwind$226316
// EA : 0x8262BFE8
// RVA : 0x0062BFE8
// PDB : w:\tech5\engine\decls\decltypeinfograph.cpp
// ========================================================================
void _unwind_226316()
{
_S15 &= ~1u;
}
@@ -0,0 +1,816 @@
// ========================================================================
// ?Create@?$idGraphItemFactory@VidTypeInfoSubGraph@@@@QBAPAVidTypeInfoSubGraph@@PBD@Z
// EA : 0x8262B708
// RVA : 0x0062B708
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idTypeInfoGraphLink *__fastcall idGraphItemFactory<idTypeInfoSubGraph>::Create(
idGraphItemFactory<idTypeInfoGraphLink> *this,
const char *itemClassName)
{
int v4; // r30
int i; // r29
const char *str; // r3
int v7; // r3
char v8; // r11
idTypeInfoGraphLink *v10; // r3
idTypeInfoGraphLink *v11; // r31
v4 = 0;
if ( this->registry.num <= 0 )
return nullptr;
for ( i = 0; ; ++i )
{
str = this->registry.list[i].type.className.str;
if ( str == itemClassName || (v7 = idStr::Cmp(s1: str, s2: itemClassName), v8 = 0, v7 == 0) )
v8 = 1;
if ( v8 != 0 )
break;
if ( ++v4 >= this->registry.num )
return nullptr;
}
v10 = this->registry.list[v4].creationFunction();
v11 = v10;
if ( v10 != nullptr )
idAtomicString::Set(this: &v10->className, str_: itemClassName);
return v11;
}
// ========================================================================
// ?GetSubGraphColor@idDeclTypeInfoGraph@@UBA?AVidColor@@PBVidTypeInfoSubGraph@@@Z
// EA : 0x8262B948
// RVA : 0x0062B948
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idDeclTypeInfoGraph *__fastcall idDeclTypeInfoGraph::GetSubGraphColor(
idDeclTypeInfoGraph *this,
idColor *result,
idColor *link)
{
(*(void (__fastcall **)(idDeclTypeInfoGraph *, idColor *))(LODWORD(link->r) + 4))(a1: this, a2: link);
return this;
}
// ========================================================================
// ?GetNodeInfo@idDeclTypeInfoGraph@@UBAXPBVidTypeInfoGraphNode@@AAVidStr@@AA_N@Z
// EA : 0x8262B988
// RVA : 0x0062B988
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
void __fastcall idDeclTypeInfoGraph::GetNodeInfo(
idDeclTypeInfoGraph *this,
idTypeInfoGraphNode *node,
idStr *info,
bool *showSelected)
{
node->GetInfo(this: node, a2: info, a3: showSelected);
}
// ========================================================================
// ??0?$idGraphItemFactory@VidTypeInfoSubGraph@@@@QAA@XZ
// EA : 0x8262BBB8
// RVA : 0x0062BBB8
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idGraphItemFactory<idTypeInfoSubGraph> *__fastcall idGraphItemFactory<idTypeInfoSubGraph>::idGraphItemFactory<idTypeInfoSubGraph>(
idGraphItemFactory<idTypeInfoSubGraph> *this)
{
this->__vftable = (idGraphItemFactory<idTypeInfoSubGraph>_vtbl *)&idGraphItemFactory<idTypeInfoSubGraph>::`vftable';
this->registry.list = nullptr;
this->registry.granularity = 0;
this->registry.memTag = 87;
this->registry.listStatic = 0;
this->registry.size = 0;
this->registry.num = 0;
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->registry);
return this;
}
// ========================================================================
// ??0?$idGraphItemFactory@VidTypeInfoGraphNode@@@@QAA@XZ
// EA : 0x8262BC18
// RVA : 0x0062BC18
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idGraphItemFactory<idTypeInfoGraphNode> *__fastcall idGraphItemFactory<idTypeInfoGraphNode>::idGraphItemFactory<idTypeInfoGraphNode>(
idGraphItemFactory<idTypeInfoGraphNode> *this)
{
this->__vftable = (idGraphItemFactory<idTypeInfoGraphNode>_vtbl *)&idGraphItemFactory<idTypeInfoGraphNode>::`vftable';
this->registry.list = nullptr;
this->registry.granularity = 0;
this->registry.memTag = 87;
this->registry.listStatic = 0;
this->registry.size = 0;
this->registry.num = 0;
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->registry);
return this;
}
// ========================================================================
// ??0?$idGraphItemFactory@VidTypeInfoGraphLink@@@@QAA@XZ
// EA : 0x8262BC78
// RVA : 0x0062BC78
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idGraphItemFactory<idTypeInfoGraphLink> *__fastcall idGraphItemFactory<idTypeInfoGraphLink>::idGraphItemFactory<idTypeInfoGraphLink>(
idGraphItemFactory<idTypeInfoGraphLink> *this)
{
this->__vftable = (idGraphItemFactory<idTypeInfoGraphLink>_vtbl *)&idGraphItemFactory<idTypeInfoGraphLink>::`vftable';
this->registry.list = nullptr;
this->registry.granularity = 0;
this->registry.memTag = 87;
this->registry.listStatic = 0;
this->registry.size = 0;
this->registry.num = 0;
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->registry);
return this;
}
// ========================================================================
// ?GetMySubGraphFactory@idDeclTypeInfoGraph@@UBAAAV?$idGraphItemFactory@VidTypeInfoSubGraph@@@@XZ
// EA : 0x8262C008
// RVA : 0x0062C008
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
// attributes: thunk
idGraphItemFactory<idTypeInfoSubGraph> *__fastcall idDeclTypeInfoGraph::GetMySubGraphFactory(idDeclTypeInfoGraph *this)
{
return idDeclTypeInfoGraph::GetSubGraphFactory();
}
// ========================================================================
// ?GetMyGraphNodeFactory@idDeclTypeInfoGraph@@UBAAAV?$idGraphItemFactory@VidTypeInfoGraphNode@@@@XZ
// EA : 0x8262C010
// RVA : 0x0062C010
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
// attributes: thunk
idGraphItemFactory<idTypeInfoGraphNode> *__fastcall idDeclTypeInfoGraph::GetMyGraphNodeFactory(
idDeclTypeInfoGraph *this)
{
return idDeclTypeInfoGraph::GetGraphNodeFactory();
}
// ========================================================================
// ?GetMyGraphLinkFactory@idDeclTypeInfoGraph@@UBAAAV?$idGraphItemFactory@VidTypeInfoGraphLink@@@@XZ
// EA : 0x8262C018
// RVA : 0x0062C018
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
// attributes: thunk
idGraphItemFactory<idTypeInfoGraphLink> *__fastcall idDeclTypeInfoGraph::GetMyGraphLinkFactory(
idDeclTypeInfoGraph *this)
{
return idDeclTypeInfoGraph::GetGraphLinkFactory();
}
// ========================================================================
// ??1idTypeInfoGraphItem@@UAA@XZ
// EA : 0x82BBE900
// RVA : 0x00BBE900
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
void __fastcall idTypeInfoGraphItem::~idTypeInfoGraphItem(idTypeInfoGraphNode *this)
{
this->__vftable = (idTypeInfoGraphNode_vtbl *)&idTypeInfoGraphItem::`vftable';
}
// ========================================================================
// ?GetColor@idTypeInfoSubGraphTest2@@UBA?AVidColor@@XZ
// EA : 0x82BBE910
// RVA : 0x00BBE910
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idTypeInfoSubGraphTest2 *__fastcall idTypeInfoSubGraphTest2::GetColor(idTypeInfoSubGraphTest2 *this, idColor *result)
{
float g; // r8
float b; // r7
float a; // r6
g = idColor::colorWhite.g;
b = idColor::colorWhite.b;
a = idColor::colorWhite.a;
this->__vftable = (idTypeInfoSubGraphTest2_vtbl *)LODWORD(idColor::colorWhite.r);
*(float *)&this->name.str = g;
*(float *)&this->className.str = b;
*(float *)&this->subnodes.list = a;
return this;
}
// ========================================================================
// ?GetDisplayName@idTypeInfoGraphItem@@UBAXAAVidStr@@@Z
// EA : 0x82BBE940
// RVA : 0x00BBE940
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
void __fastcall idTypeInfoGraphItem::GetDisplayName(idTypeInfoGraphItem *this, idStr *displayName)
{
idStr::operator=(this: displayName, text: this->name.str);
}
// ========================================================================
// ?GetColor@idTypeInfoGraphNode@@UBA?AVidColor@@XZ
// EA : 0x82BBE950
// RVA : 0x00BBE950
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idTypeInfoGraphNode *__fastcall idTypeInfoGraphNode::GetColor(idTypeInfoGraphNode *this, idColor *result)
{
float g; // r8
float b; // r7
float a; // r6
g = idTypeInfoGraphNode::baseColor.g;
b = idTypeInfoGraphNode::baseColor.b;
a = idTypeInfoGraphNode::baseColor.a;
this->__vftable = (idTypeInfoGraphNode_vtbl *)LODWORD(idTypeInfoGraphNode::baseColor.r);
*(float *)&this->name.str = g;
*(float *)&this->className.str = b;
this->position.x = a;
return this;
}
// ========================================================================
// ?GetDisplayName@idTypeInfoGraphLink@@UBAXAAVidStr@@@Z
// EA : 0x82BBE980
// RVA : 0x00BBE980
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
void __fastcall idTypeInfoGraphLink::GetDisplayName(idTypeInfoGraphLink *this, idStr *displayName)
{
idStr::operator=(this: displayName, text: &byte_8200D768);
}
// ========================================================================
// ?CreateInstance@?$idRegisterInGraphItemFactory@VidTypeInfoGraphNodeTest@@VidTypeInfoGraphNode@@@@SAPAVidTypeInfoGraphNode@@XZ
// EA : 0x82BBED30
// RVA : 0x00BBED30
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idTypeInfoGraphNode *__fastcall idRegisterInGraphItemFactory<idTypeInfoGraphNodeTest,idTypeInfoGraphNode>::CreateInstance()
{
idTypeInfoGraphNode *result; // r3
result = (idTypeInfoGraphNode *)idMem::AllocWithLocation(
this: &mem,
location: "w:\\tech5\\shared\\idlib\\Heap.h(64) : tag",
size: 0x14u,
tag: TAG_DECL,
zeroBuffer: false,
align: ALIGN_16,
heap: HEAP_DEFAULTHEAP);
if ( result == nullptr )
return nullptr;
result->__vftable = (idTypeInfoGraphNode_vtbl *)&idTypeInfoGraphItem::`vftable';
result->name.str = &byte_8200D768;
result->className.str = &byte_8200D768;
result->position.x = 0.0;
result->position.y = 0.0;
result->__vftable = (idTypeInfoGraphNode_vtbl *)&idTypeInfoGraphNodeTest::`vftable';
return result;
}
// ========================================================================
// ?CreateInstance@?$idRegisterInGraphItemFactory@VidTypeInfoGraphNodeTest2@@VidTypeInfoGraphNode@@@@SAPAVidTypeInfoGraphNode@@XZ
// EA : 0x82BBEDD0
// RVA : 0x00BBEDD0
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idTypeInfoGraphNode *__fastcall idRegisterInGraphItemFactory<idTypeInfoGraphNodeTest2,idTypeInfoGraphNode>::CreateInstance()
{
idTypeInfoGraphNode *result; // r3
result = (idTypeInfoGraphNode *)idMem::AllocWithLocation(
this: &mem,
location: "w:\\tech5\\shared\\idlib\\Heap.h(64) : tag",
size: 0x34u,
tag: TAG_DECL,
zeroBuffer: false,
align: ALIGN_16,
heap: HEAP_DEFAULTHEAP);
if ( result == nullptr )
return nullptr;
result->__vftable = (idTypeInfoGraphNode_vtbl *)&idTypeInfoGraphItem::`vftable';
result->name.str = &byte_8200D768;
result->className.str = &byte_8200D768;
result->position.x = 0.0;
result->position.y = 0.0;
result->__vftable = (idTypeInfoGraphNode_vtbl *)&idTypeInfoGraphNodeTest2::`vftable';
result[1].className.str = (const char *)20;
result[1].name.str = (const char *)&result[1].position;
result[1].__vftable = nullptr;
HIBYTE(result[1].position.x) = 0;
return result;
}
// ========================================================================
// ?CreateInstance@?$idRegisterInGraphItemFactory@VidTypeInfoGraphLinkTest@@VidTypeInfoGraphLink@@@@SAPAVidTypeInfoGraphLink@@XZ
// EA : 0x82BBEE90
// RVA : 0x00BBEE90
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idTypeInfoGraphLink *__fastcall idRegisterInGraphItemFactory<idTypeInfoGraphLinkTest,idTypeInfoGraphLink>::CreateInstance()
{
idTypeInfoGraphLink *result; // r3
result = (idTypeInfoGraphLink *)idMem::AllocWithLocation(
this: &mem,
location: "w:\\tech5\\shared\\idlib\\Heap.h(64) : tag",
size: 0x18u,
tag: TAG_DECL,
zeroBuffer: false,
align: ALIGN_16,
heap: HEAP_DEFAULTHEAP);
if ( result == nullptr )
return nullptr;
result->__vftable = (idTypeInfoGraphLink_vtbl *)&idTypeInfoGraphItem::`vftable';
result->name.str = &byte_8200D768;
result->className.str = &byte_8200D768;
result->startNodeIndex = -1;
result->endNodeIndex = -1;
result->__vftable = (idTypeInfoGraphLink_vtbl *)&idTypeInfoGraphLinkTest::`vftable';
HIBYTE(result[1].__vftable) = 1;
return result;
}
// ========================================================================
// ?CreateInstance@?$idRegisterInGraphItemFactory@VidTypeInfoGraphLinkTest2@@VidTypeInfoGraphLink@@@@SAPAVidTypeInfoGraphLink@@XZ
// EA : 0x82BBF130
// RVA : 0x00BBF130
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idTypeInfoGraphLink *__fastcall idRegisterInGraphItemFactory<idTypeInfoGraphLinkTest2,idTypeInfoGraphLink>::CreateInstance()
{
idTypeInfoGraphLink *result; // r3
result = (idTypeInfoGraphLink *)idMem::AllocWithLocation(
this: &mem,
location: "w:\\tech5\\shared\\idlib\\Heap.h(64) : tag",
size: 0x14u,
tag: TAG_DECL,
zeroBuffer: false,
align: ALIGN_16,
heap: HEAP_DEFAULTHEAP);
if ( result == nullptr )
return nullptr;
result->__vftable = (idTypeInfoGraphLink_vtbl *)&idTypeInfoGraphItem::`vftable';
result->name.str = &byte_8200D768;
result->className.str = &byte_8200D768;
result->startNodeIndex = -1;
result->endNodeIndex = -1;
result->__vftable = (idTypeInfoGraphLink_vtbl *)&idTypeInfoGraphLinkTest2::`vftable';
return result;
}
// ========================================================================
// ??0idTypeInfoSubGraph@@QAA@XZ
// EA : 0x82BBF4D8
// RVA : 0x00BBF4D8
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idTypeInfoSubGraph *__fastcall idTypeInfoSubGraph::idTypeInfoSubGraph(idTypeInfoSubGraph *this)
{
this->__vftable = (idTypeInfoSubGraph_vtbl *)&idTypeInfoGraphItem::`vftable';
this->name.str = &byte_8200D768;
this->className.str = &byte_8200D768;
this->__vftable = (idTypeInfoSubGraph_vtbl *)&idTypeInfoSubGraph::`vftable';
this->subnodes.list = nullptr;
this->subnodes.granularity = 0;
this->subnodes.memTag = 5;
this->subnodes.listStatic = 0;
this->subnodes.size = 0;
this->subnodes.num = 0;
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->subnodes);
this->position.x = 0.0;
this->position.y = 0.0;
return this;
}
// ========================================================================
// __unwind$492022
// EA : 0x82BBF590
// RVA : 0x00BBF590
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
void _unwind_492022()
{
int v0; // r12
idTypeInfoGraphItem::~idTypeInfoGraphItem(this: *(idTypeInfoGraphNode **)(v0 - 112 + 132));
}
// ========================================================================
// ?GetColor@idTypeInfoSubGraph@@UBA?AVidColor@@XZ
// EA : 0x82BBF5B8
// RVA : 0x00BBF5B8
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idTypeInfoSubGraph *__fastcall idTypeInfoSubGraph::GetColor(idTypeInfoSubGraph *this, idColor *result)
{
float g; // r8
float b; // r7
float a; // r6
g = idTypeInfoSubGraph::baseColor.g;
b = idTypeInfoSubGraph::baseColor.b;
a = idTypeInfoSubGraph::baseColor.a;
this->__vftable = (idTypeInfoSubGraph_vtbl *)LODWORD(idTypeInfoSubGraph::baseColor.r);
*(float *)&this->name.str = g;
*(float *)&this->className.str = b;
*(float *)&this->subnodes.list = a;
return this;
}
// ========================================================================
// ??1idTypeInfoSubGraph@@UAA@XZ
// EA : 0x82BBF5F0
// RVA : 0x00BBF5F0
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
void __fastcall idTypeInfoSubGraph::~idTypeInfoSubGraph(idTypeInfoSubGraph *this)
{
this->__vftable = (idTypeInfoSubGraph_vtbl *)&idTypeInfoSubGraph::`vftable';
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->subnodes);
this->__vftable = (idTypeInfoSubGraph_vtbl *)&idTypeInfoGraphItem::`vftable';
}
// ========================================================================
// __unwind$492064
// EA : 0x82BBF648
// RVA : 0x00BBF648
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
void _unwind_492064()
{
int v0; // r12
idTypeInfoGraphItem::~idTypeInfoGraphItem(this: *(idTypeInfoGraphNode **)(v0 - 112 + 132));
}
// ========================================================================
// ?CreateInstance@?$idRegisterInGraphItemFactory@VidTypeInfoSubGraphTest@@VidTypeInfoSubGraph@@@@SAPAVidTypeInfoSubGraph@@XZ
// EA : 0x82BBF810
// RVA : 0x00BBF810
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idTypeInfoSubGraph *__fastcall idRegisterInGraphItemFactory<idTypeInfoSubGraphTest,idTypeInfoSubGraph>::CreateInstance()
{
idTypeInfoSubGraph *v0; // r3
idTypeInfoSubGraph *v1; // r30
v0 = (idTypeInfoSubGraph *)idMem::AllocWithLocation(
this: &mem,
location: "w:\\tech5\\shared\\idlib\\Heap.h(64) : tag",
size: 0x38u,
tag: TAG_DECL,
zeroBuffer: false,
align: ALIGN_16,
heap: HEAP_DEFAULTHEAP);
v1 = v0;
if ( v0 == nullptr )
return nullptr;
idTypeInfoSubGraph::idTypeInfoSubGraph(this: v0);
v1->__vftable = (idTypeInfoSubGraph_vtbl *)&idTypeInfoSubGraphTest::`vftable';
*(float *)&v1[1].subnodes.list = -1.0;
*(float *)&v1[1].className.str = -1.0;
*(float *)&v1[1].name.str = -1.0;
*(float *)&v1[1].__vftable = -1.0;
HIBYTE(v1[1].subnodes.num) = 0;
return v1;
}
// ========================================================================
// __unwind$492164
// EA : 0x82BBF8BC
// RVA : 0x00BBF8BC
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
void _unwind_492164()
{
int v0; // r12
operator delete(p: *(void **)(v0 - 112 + 80), tag: TAG_DECL);
}
// ========================================================================
// ?CreateInstance@?$idRegisterInGraphItemFactory@VidTypeInfoSubGraphTest2@@VidTypeInfoSubGraph@@@@SAPAVidTypeInfoSubGraph@@XZ
// EA : 0x82BBF8F0
// RVA : 0x00BBF8F0
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idTypeInfoSubGraph *__fastcall idRegisterInGraphItemFactory<idTypeInfoSubGraphTest2,idTypeInfoSubGraph>::CreateInstance()
{
idTypeInfoSubGraph *v0; // r3
_DWORD *v1; // r30
v0 = (idTypeInfoSubGraph *)idMem::AllocWithLocation(
this: &mem,
location: "w:\\tech5\\shared\\idlib\\Heap.h(64) : tag",
size: 0x24u,
tag: TAG_DECL,
zeroBuffer: false,
align: ALIGN_16,
heap: HEAP_DEFAULTHEAP);
v1 = &v0->__vftable;
if ( v0 == nullptr )
return nullptr;
idTypeInfoSubGraph::idTypeInfoSubGraph(this: v0);
*v1 = &idTypeInfoSubGraphTest2::`vftable';
return (idTypeInfoSubGraph *)v1;
}
// ========================================================================
// __unwind$492197_0
// EA : 0x82BBF974
// RVA : 0x00BBF974
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
void _unwind_492197_0()
{
int v0; // r12
operator delete(p: *(void **)(v0 - 112 + 80), tag: TAG_DECL);
}
// ========================================================================
// ??0?$idRegisterInGraphItemFactory@VidTypeInfoSubGraphTest@@VidTypeInfoSubGraph@@@@IAA@PBD0AAV?$idGraphItemFactory@VidTypeInfoSubGraph@@@@1@Z
// EA : 0x82BC06D8
// RVA : 0x00BC06D8
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idRegisterInGraphItemFactory<idTypeInfoSubGraphTest,idTypeInfoSubGraph> *__fastcall idRegisterInGraphItemFactory<idTypeInfoSubGraphTest,idTypeInfoSubGraph>::idRegisterInGraphItemFactory<idTypeInfoSubGraphTest,idTypeInfoSubGraph>(
idRegisterInGraphItemFactory<idTypeInfoSubGraphTest,idTypeInfoSubGraph> *this,
const char *className,
const char *diplayedName,
idGraphItemFactory<idTypeInfoSubGraph> *graphItemFactory,
idGraphItemFactory<idTypeInfoSubGraph> *globalItemFactory)
{
char v9; // r11
idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair *v10; // r3
idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair *v11; // r3
idAtomicString v13; // [sp+50h] [-30h] BYREF
idAtomicString v14; // [sp+54h] [-2Ch] BYREF
idAtomicString::Set(this: &v13, str_: className);
idAtomicString::Set(this: &v14, str_: diplayedName);
if ( v14.str == &byte_8200D768 || (v9 = 0, *v14.str == 0) )
v9 = 1;
if ( v9 != 0 )
v14.str = v13.str;
v10 = idList<idGraphItemFactory<idTypeInfoSubGraph>::idTypeCreationPair,87>::Alloc(this: (idList<idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair,87> *)&graphItemFactory->registry);
v10->type.className = v13;
v10->type.displayedName = v14;
v10->creationFunction = (idTypeInfoGraphLink *(__fastcall *)())idRegisterInGraphItemFactory<idTypeInfoSubGraphTest,idTypeInfoSubGraph>::CreateInstance;
v11 = idList<idGraphItemFactory<idTypeInfoSubGraph>::idTypeCreationPair,87>::Alloc(this: (idList<idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair,87> *)&globalItemFactory->registry);
v11->type.className = v13;
v11->type.displayedName = v14;
v11->creationFunction = (idTypeInfoGraphLink *(__fastcall *)())idRegisterInGraphItemFactory<idTypeInfoSubGraphTest,idTypeInfoSubGraph>::CreateInstance;
return this;
}
// ========================================================================
// ??0?$idRegisterInGraphItemFactory@VidTypeInfoSubGraphTest2@@VidTypeInfoSubGraph@@@@IAA@PBD0AAV?$idGraphItemFactory@VidTypeInfoSubGraph@@@@1@Z
// EA : 0x82BC07A0
// RVA : 0x00BC07A0
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idRegisterInGraphItemFactory<idTypeInfoSubGraphTest2,idTypeInfoSubGraph> *__fastcall idRegisterInGraphItemFactory<idTypeInfoSubGraphTest2,idTypeInfoSubGraph>::idRegisterInGraphItemFactory<idTypeInfoSubGraphTest2,idTypeInfoSubGraph>(
idRegisterInGraphItemFactory<idTypeInfoSubGraphTest2,idTypeInfoSubGraph> *this,
const char *className,
const char *diplayedName,
idGraphItemFactory<idTypeInfoSubGraph> *graphItemFactory,
idGraphItemFactory<idTypeInfoSubGraph> *globalItemFactory)
{
char v9; // r11
idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair *v10; // r3
idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair *v11; // r3
idAtomicString v13; // [sp+50h] [-30h] BYREF
idAtomicString v14; // [sp+54h] [-2Ch] BYREF
idAtomicString::Set(this: &v13, str_: className);
idAtomicString::Set(this: &v14, str_: diplayedName);
if ( v14.str == &byte_8200D768 || (v9 = 0, *v14.str == 0) )
v9 = 1;
if ( v9 != 0 )
v14.str = v13.str;
v10 = idList<idGraphItemFactory<idTypeInfoSubGraph>::idTypeCreationPair,87>::Alloc(this: (idList<idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair,87> *)&graphItemFactory->registry);
v10->type.className = v13;
v10->type.displayedName = v14;
v10->creationFunction = (idTypeInfoGraphLink *(__fastcall *)())idRegisterInGraphItemFactory<idTypeInfoSubGraphTest2,idTypeInfoSubGraph>::CreateInstance;
v11 = idList<idGraphItemFactory<idTypeInfoSubGraph>::idTypeCreationPair,87>::Alloc(this: (idList<idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair,87> *)&globalItemFactory->registry);
v11->type.className = v13;
v11->type.displayedName = v14;
v11->creationFunction = (idTypeInfoGraphLink *(__fastcall *)())idRegisterInGraphItemFactory<idTypeInfoSubGraphTest2,idTypeInfoSubGraph>::CreateInstance;
return this;
}
// ========================================================================
// ??0?$idRegisterInGraphItemFactory@VidTypeInfoGraphNodeTest@@VidTypeInfoGraphNode@@@@IAA@PBD0AAV?$idGraphItemFactory@VidTypeInfoGraphNode@@@@1@Z
// EA : 0x82BC0868
// RVA : 0x00BC0868
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idRegisterInGraphItemFactory<idTypeInfoGraphNodeTest,idTypeInfoGraphNode> *__fastcall idRegisterInGraphItemFactory<idTypeInfoGraphNodeTest,idTypeInfoGraphNode>::idRegisterInGraphItemFactory<idTypeInfoGraphNodeTest,idTypeInfoGraphNode>(
idRegisterInGraphItemFactory<idTypeInfoGraphNodeTest,idTypeInfoGraphNode> *this,
const char *className,
const char *diplayedName,
idGraphItemFactory<idTypeInfoGraphNode> *graphItemFactory,
idGraphItemFactory<idTypeInfoGraphNode> *globalItemFactory)
{
char v9; // r11
idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair *v10; // r3
idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair *v11; // r3
idAtomicString v13; // [sp+50h] [-30h] BYREF
idAtomicString v14; // [sp+54h] [-2Ch] BYREF
idAtomicString::Set(this: &v13, str_: className);
idAtomicString::Set(this: &v14, str_: diplayedName);
if ( v14.str == &byte_8200D768 || (v9 = 0, *v14.str == 0) )
v9 = 1;
if ( v9 != 0 )
v14.str = v13.str;
v10 = idList<idGraphItemFactory<idTypeInfoSubGraph>::idTypeCreationPair,87>::Alloc(this: (idList<idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair,87> *)&graphItemFactory->registry);
v10->type.className = v13;
v10->type.displayedName = v14;
v10->creationFunction = (idTypeInfoGraphLink *(__fastcall *)())idRegisterInGraphItemFactory<idTypeInfoGraphNodeTest,idTypeInfoGraphNode>::CreateInstance;
v11 = idList<idGraphItemFactory<idTypeInfoSubGraph>::idTypeCreationPair,87>::Alloc(this: (idList<idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair,87> *)&globalItemFactory->registry);
v11->type.className = v13;
v11->type.displayedName = v14;
v11->creationFunction = (idTypeInfoGraphLink *(__fastcall *)())idRegisterInGraphItemFactory<idTypeInfoGraphNodeTest,idTypeInfoGraphNode>::CreateInstance;
return this;
}
// ========================================================================
// ??0?$idRegisterInGraphItemFactory@VidTypeInfoGraphNodeTest2@@VidTypeInfoGraphNode@@@@IAA@PBD0AAV?$idGraphItemFactory@VidTypeInfoGraphNode@@@@1@Z
// EA : 0x82BC0930
// RVA : 0x00BC0930
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idRegisterInGraphItemFactory<idTypeInfoGraphNodeTest2,idTypeInfoGraphNode> *__fastcall idRegisterInGraphItemFactory<idTypeInfoGraphNodeTest2,idTypeInfoGraphNode>::idRegisterInGraphItemFactory<idTypeInfoGraphNodeTest2,idTypeInfoGraphNode>(
idRegisterInGraphItemFactory<idTypeInfoGraphNodeTest2,idTypeInfoGraphNode> *this,
const char *className,
const char *diplayedName,
idGraphItemFactory<idTypeInfoGraphNode> *graphItemFactory,
idGraphItemFactory<idTypeInfoGraphNode> *globalItemFactory)
{
char v9; // r11
idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair *v10; // r3
idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair *v11; // r3
idAtomicString v13; // [sp+50h] [-30h] BYREF
idAtomicString v14; // [sp+54h] [-2Ch] BYREF
idAtomicString::Set(this: &v13, str_: className);
idAtomicString::Set(this: &v14, str_: diplayedName);
if ( v14.str == &byte_8200D768 || (v9 = 0, *v14.str == 0) )
v9 = 1;
if ( v9 != 0 )
v14.str = v13.str;
v10 = idList<idGraphItemFactory<idTypeInfoSubGraph>::idTypeCreationPair,87>::Alloc(this: (idList<idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair,87> *)&graphItemFactory->registry);
v10->type.className = v13;
v10->type.displayedName = v14;
v10->creationFunction = (idTypeInfoGraphLink *(__fastcall *)())idRegisterInGraphItemFactory<idTypeInfoGraphNodeTest2,idTypeInfoGraphNode>::CreateInstance;
v11 = idList<idGraphItemFactory<idTypeInfoSubGraph>::idTypeCreationPair,87>::Alloc(this: (idList<idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair,87> *)&globalItemFactory->registry);
v11->type.className = v13;
v11->type.displayedName = v14;
v11->creationFunction = (idTypeInfoGraphLink *(__fastcall *)())idRegisterInGraphItemFactory<idTypeInfoGraphNodeTest2,idTypeInfoGraphNode>::CreateInstance;
return this;
}
// ========================================================================
// ??0?$idRegisterInGraphItemFactory@VidTypeInfoGraphLinkTest@@VidTypeInfoGraphLink@@@@IAA@PBD0AAV?$idGraphItemFactory@VidTypeInfoGraphLink@@@@1@Z
// EA : 0x82BC09F8
// RVA : 0x00BC09F8
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idRegisterInGraphItemFactory<idTypeInfoGraphLinkTest,idTypeInfoGraphLink> *__fastcall idRegisterInGraphItemFactory<idTypeInfoGraphLinkTest,idTypeInfoGraphLink>::idRegisterInGraphItemFactory<idTypeInfoGraphLinkTest,idTypeInfoGraphLink>(
idRegisterInGraphItemFactory<idTypeInfoGraphLinkTest,idTypeInfoGraphLink> *this,
const char *className,
const char *diplayedName,
idGraphItemFactory<idTypeInfoGraphLink> *graphItemFactory,
idGraphItemFactory<idTypeInfoGraphLink> *globalItemFactory)
{
char v9; // r11
idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair *v10; // r3
idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair *v11; // r3
idAtomicString v13; // [sp+50h] [-30h] BYREF
idAtomicString v14; // [sp+54h] [-2Ch] BYREF
idAtomicString::Set(this: &v13, str_: className);
idAtomicString::Set(this: &v14, str_: diplayedName);
if ( v14.str == &byte_8200D768 || (v9 = 0, *v14.str == 0) )
v9 = 1;
if ( v9 != 0 )
v14.str = v13.str;
v10 = idList<idGraphItemFactory<idTypeInfoSubGraph>::idTypeCreationPair,87>::Alloc(this: &graphItemFactory->registry);
v10->type.className = v13;
v10->type.displayedName = v14;
v10->creationFunction = idRegisterInGraphItemFactory<idTypeInfoGraphLinkTest,idTypeInfoGraphLink>::CreateInstance;
v11 = idList<idGraphItemFactory<idTypeInfoSubGraph>::idTypeCreationPair,87>::Alloc(this: &globalItemFactory->registry);
v11->type.className = v13;
v11->type.displayedName = v14;
v11->creationFunction = idRegisterInGraphItemFactory<idTypeInfoGraphLinkTest,idTypeInfoGraphLink>::CreateInstance;
return this;
}
// ========================================================================
// ??0?$idRegisterInGraphItemFactory@VidTypeInfoGraphLinkTest2@@VidTypeInfoGraphLink@@@@IAA@PBD0AAV?$idGraphItemFactory@VidTypeInfoGraphLink@@@@1@Z
// EA : 0x82BC0AC0
// RVA : 0x00BC0AC0
// PDB : w:\tech5\engine\decls\decltypeinfograph.h
// ========================================================================
idRegisterInGraphItemFactory<idTypeInfoGraphLinkTest2,idTypeInfoGraphLink> *__fastcall idRegisterInGraphItemFactory<idTypeInfoGraphLinkTest2,idTypeInfoGraphLink>::idRegisterInGraphItemFactory<idTypeInfoGraphLinkTest2,idTypeInfoGraphLink>(
idRegisterInGraphItemFactory<idTypeInfoGraphLinkTest2,idTypeInfoGraphLink> *this,
const char *className,
const char *diplayedName,
idGraphItemFactory<idTypeInfoGraphLink> *graphItemFactory,
idGraphItemFactory<idTypeInfoGraphLink> *globalItemFactory)
{
char v9; // r11
idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair *v10; // r3
idGraphItemFactory<idTypeInfoGraphLink>::idTypeCreationPair *v11; // r3
idAtomicString v13; // [sp+50h] [-30h] BYREF
idAtomicString v14; // [sp+54h] [-2Ch] BYREF
idAtomicString::Set(this: &v13, str_: className);
idAtomicString::Set(this: &v14, str_: diplayedName);
if ( v14.str == &byte_8200D768 || (v9 = 0, *v14.str == 0) )
v9 = 1;
if ( v9 != 0 )
v14.str = v13.str;
v10 = idList<idGraphItemFactory<idTypeInfoSubGraph>::idTypeCreationPair,87>::Alloc(this: &graphItemFactory->registry);
v10->type.className = v13;
v10->type.displayedName = v14;
v10->creationFunction = idRegisterInGraphItemFactory<idTypeInfoGraphLinkTest2,idTypeInfoGraphLink>::CreateInstance;
v11 = idList<idGraphItemFactory<idTypeInfoSubGraph>::idTypeCreationPair,87>::Alloc(this: &globalItemFactory->registry);
v11->type.className = v13;
v11->type.displayedName = v14;
v11->creationFunction = idRegisterInGraphItemFactory<idTypeInfoGraphLinkTest2,idTypeInfoGraphLink>::CreateInstance;
return this;
}
@@ -0,0 +1,535 @@
// ========================================================================
// ??0idVehicleEffectsDef@@QAA@XZ
// EA : 0x82622998
// RVA : 0x00622998
// PDB : w:\tech5\engine\decls\declvehicleprops.h
// ========================================================================
idVehicleEffectsDef *__fastcall idVehicleEffectsDef::idVehicleEffectsDef(idVehicleEffectsDef *this)
{
this->dustVelocityScale = 0.25;
this->tireKickup = nullptr;
this->tireKickup2 = nullptr;
this->tireKickupSpacing = 32.0;
this->tireInitialKickup = nullptr;
this->tireKickup2Spacing = 32.0;
this->rolloverKickup = nullptr;
this->tireSkidParms.fadeTime = 500;
this->tireSkidParms.halfLength = 32.0;
this->tireSkidParms.lifeTime = 2000;
this->tireSkidParms.halfWidth = 16.0;
this->tireSkidParms.material.metal = nullptr;
this->tireSkidParms.material.stone = nullptr;
this->tireSkidParms.material.wood = nullptr;
this->tireSkidParms.material.cardboard = nullptr;
this->tireSkidParms.material.liquid = nullptr;
this->tireSkidParms.material.glass = nullptr;
this->tireSkidParms.material.plastic = nullptr;
this->tireSkidParms.material.dirt = nullptr;
this->tireSkidParms.material.asphalt = nullptr;
this->tireSkidParms.material.concrete = nullptr;
this->tireSkidParms.material.linoleum = nullptr;
this->tireSkidParms.material.fabric = nullptr;
this->tireSkidParms.material.rubber = nullptr;
this->tireSkidParms.material.rock = nullptr;
this->tireSkidParms.material.foliage = nullptr;
this->tireTrackParms.halfWidth = 16.0;
this->tireTrackParms.fadeTime = 500;
this->tireTrackParms.halfLength = 32.0;
this->tireTrackParms.lifeTime = 2000;
this->tireTrackParms.material.metal = nullptr;
this->tireTrackParms.material.stone = nullptr;
this->tireTrackParms.material.wood = nullptr;
this->tireTrackParms.material.cardboard = nullptr;
this->tireTrackParms.material.liquid = nullptr;
this->tireTrackParms.material.glass = nullptr;
this->tireTrackParms.material.plastic = nullptr;
this->tireTrackParms.material.dirt = nullptr;
this->tireTrackParms.material.asphalt = nullptr;
this->tireTrackParms.material.concrete = nullptr;
this->tireTrackParms.material.linoleum = nullptr;
this->tireTrackParms.material.fabric = nullptr;
this->tireTrackParms.material.rubber = nullptr;
this->tireTrackParms.material.rock = nullptr;
this->tireTrackParms.material.foliage = nullptr;
this->particleImpact = nullptr;
this->particleExplode = nullptr;
this->particleRpmFlame = nullptr;
this->particleShotDamage = nullptr;
this->particleShotShield = nullptr;
this->breakable = nullptr;
this->particleAttachmentLost = nullptr;
this->particleViolentRoll = nullptr;
this->exhaustEmitterParticle_right = nullptr;
this->exhaustEmitterParticle_left = nullptr;
this->vehicleFX = nullptr;
return this;
}
// ========================================================================
// ??0idVehicleSoundDef@@QAA@XZ
// EA : 0x82622AA8
// RVA : 0x00622AA8
// PDB : w:\tech5\engine\decls\declvehicleprops.h
// ========================================================================
idVehicleSoundDef *__fastcall idVehicleSoundDef::idVehicleSoundDef(idVehicleSoundDef *this)
{
this->gears.list = nullptr;
this->gears.granularity = 0;
this->gears.memTag = 5;
this->gears.listStatic = 0;
this->gears.size = 0;
this->gears.num = 0;
idList<idThread *,58>::Clear((idList<idVehicleState *,5> *)this);
this->idle.sound = nullptr;
this->idle.engineSoundFadeInTimeMilliSec = 0;
this->idle.speedMPH = 10.0;
this->idle.outTime = 1.0;
this->idle.loadedUnloadedMPH = 5.0;
this->idle.loadedUnloadedInTime = 0.2;
this->idle.loadedUnloadedOutTime = 10.0;
this->idle.inTime = 4.0;
this->boostParms.boostOverlayDelay = 1.0;
this->boostParms.boost = nullptr;
this->boostParms.boostOverlay = nullptr;
this->boostParms.boostFull = nullptr;
this->boostParms.boostEmpty = nullptr;
this->boostParms.boostNotReady = nullptr;
this->boostParms.boostFadeOutTime = 1.5;
this->boostParms.boostPitchModifier = 1.5;
this->boostParms.minVolume = -60.0;
this->boostParms.maxVolume = -4.0;
this->boostParms.boostOverlayFadeInTime = 0.5;
this->shifting.engineShiftUp = nullptr;
this->shifting.engineShiftDown = nullptr;
this->shifting.shiftSilenceTime = 0.050000001;
this->shifting.playShiftDownDuringCoast = false;
this->shifting.shiftRampOutTime = 0.050000001;
this->shifting.playShiftUpOnShiftDown = true;
this->shifting.shiftUpPercent = 0.89999998;
this->shifting.shiftDownPercent = 0.69999999;
this->shifting.shiftRampInTime = 0.0;
this->revLimiter.delay = 500;
this->revLimiter.enabled = true;
this->revLimiter.pitchMultiplier = 1.5;
this->revLimiter.frequency = 20;
this->revLimiter.squareMinVolumeMultiplier = 0.25;
this->revLimiter.throttleMin = 0.5;
this->windParms.wind = nullptr;
this->windParms.windVolumeTable = nullptr;
this->windParms.windPitchTable = nullptr;
this->brakingReverse.maxReversePitch = 0.40000001;
this->brakingReverse.brakeWhine = nullptr;
this->brakingReverse.brakeWhineMPH = 35.0;
idVehicleSoundDef::surfaceSoundList_t::surfaceSoundList_t(this: &this->surfaceList);
this->crash.human = nullptr;
this->crash.vehicle = nullptr;
this->crash.generic = nullptr;
this->landing.easy = nullptr;
this->landing.medium = nullptr;
this->landing.hard = nullptr;
this->impact.maxEasyForce = 15000.0;
this->impact.easy = nullptr;
this->impact.medium = nullptr;
this->impact.maxMediumForce = 40000.0;
this->impact.hard = nullptr;
this->bumpSounds.delay = 100;
this->bumpSounds.easyCompression = 0.1;
this->bumpSounds.easy = nullptr;
this->tireWobble.minPitch = 0.0;
this->tireWobble.sound = nullptr;
this->tireWobble.maxPitch = 0.0;
this->tireWobble.minVolume = 0.0;
this->tireWobble.maxVolume = 0.0;
this->engineDamage.damagedEngine1 = nullptr;
this->engineDamage.minPitch = 0.0;
this->engineDamage.damagedEngine2 = nullptr;
this->engineDamage.maxPitch = 0.0;
this->engineDamage.damagedEngine3 = nullptr;
this->engineDamage.minVolume = 0.0;
this->engineDamage.EngineExplode = nullptr;
this->engineDamage.maxVolume = 0.0;
this->engineStop = nullptr;
this->explode = nullptr;
this->backfire = nullptr;
this->smokeburp = nullptr;
this->attachmentCollision = nullptr;
this->impactSpark = nullptr;
this->debris = nullptr;
this->steering = nullptr;
this->zooming = nullptr;
this->rcbombTriggered = nullptr;
this->lockOnWarningSound = nullptr;
this->nonCombatMusic = nullptr;
this->combatMusic = nullptr;
this->combatMusic2 = nullptr;
this->enterVehicle = nullptr;
this->exitVehicle = nullptr;
this->quickReverse = nullptr;
this->hornOnce = nullptr;
this->hornLoop = nullptr;
this->engineSmoke = nullptr;
this->engineFire = nullptr;
this->quickUseError = nullptr;
this->foliage = nullptr;
this->bodyToBody = nullptr;
this->tireToTire = nullptr;
this->projectileToBody = nullptr;
return this;
}
// ========================================================================
// ??0idDeclVehicleProps@@QAA@XZ
// EA : 0x826233E8
// RVA : 0x006233E8
// PDB : w:\tech5\engine\decls\declvehicleprops.h
// ========================================================================
idDeclVehicleProps *__fastcall idDeclVehicleProps::idDeclVehicleProps(idDeclVehicleProps *this)
{
idDeclTypeInfo::idDeclTypeInfo(this: &this->idDeclTypeInfo);
this->__vftable = (idDeclVehicleProps_vtbl *)&idDeclVehicleProps::`vftable';
this->camera.yaw = 0.0;
this->camera.pitch = 0.0;
this->camera.recovery = nullptr;
this->camera.height = 0.0;
this->camera.rotationOffset = nullptr;
this->camera.lateral = 0.0;
this->camera.minRange = 0.0;
this->camera.maxRange = 0.0;
this->camera2.recovery = nullptr;
this->camera2.yaw = 0.0;
this->camera2.rotationOffset = nullptr;
this->camera2.pitch = 0.0;
this->camera2.height = 0.0;
this->camera2.lateral = 0.0;
this->camera2.minRange = 0.0;
this->camera2.maxRange = 0.0;
this->steeringWheel.jointName.allocedAndFlag = 20;
this->steeringWheel.jointName.data = this->steeringWheel.jointName.baseBuffer;
this->steeringWheel.jointName.len = 0;
this->steeringWheel.jointName.baseBuffer[0] = 0;
this->steeringWheel.speed = 90.0;
this->steeringWheel.rotationAxis = 1;
this->steeringWheel.rotationDirection = ROTATE_LEFT;
this->steeringWheel.maxAngle = nullptr;
this->tachometer.jointName.allocedAndFlag = 20;
this->tachometer.jointName.len = 0;
this->tachometer.jointName.data = this->tachometer.jointName.baseBuffer;
this->tachometer.jointName.baseBuffer[0] = 0;
this->tachometer.axis = DIAL_AXIS_Y;
this->tachometer.direction = DIAL_ROTATE_LEFT;
this->tachometer.startValue = 0;
this->tachometer.endValue = 100;
this->tachometer.startAmount = 0;
this->tachometer.endAmount = 90;
this->tachometer.table = nullptr;
this->speedometer.jointName.allocedAndFlag = 20;
this->speedometer.jointName.len = 0;
this->speedometer.jointName.data = this->speedometer.jointName.baseBuffer;
this->speedometer.jointName.baseBuffer[0] = 0;
this->speedometer.axis = DIAL_AXIS_Y;
this->speedometer.direction = DIAL_ROTATE_LEFT;
this->speedometer.startValue = 0;
this->speedometer.endValue = 100;
this->speedometer.startAmount = 0;
this->speedometer.endAmount = 90;
this->speedometer.table = nullptr;
this->sheildModel.allocedAndFlag = 20;
this->sheildModel.len = 0;
this->sheildModel.data = this->sheildModel.baseBuffer;
this->sheildModel.baseBuffer[0] = 0;
this->hasEngineIdle = true;
this->removeOnExit = false;
this->jumpImpulse = 3250000.0;
this->influence.innerRadius = 32.0;
this->influence.outerRadius = 64.0;
this->influence.angle = 0.0;
this->influence.trailDist = 32.0;
this->influence.trailFadeInTime = 0.25;
this->influence.trailFadeOutTime = 2.0;
this->remoteControl = false;
this->raceRemoteControl = false;
this->wheels.granularity = 0;
this->wheels.memTag = 5;
this->wheels.listStatic = 0;
this->wheels.list = nullptr;
this->wheels.size = 0;
this->wheels.num = 0;
this->body.model = nullptr;
this->body.density = 0.00094;
this->body.linearFriction = 0.059999999;
this->body.angularFriction = 0.059999999;
this->body.contactFriction = 0.5;
this->body.bouncyness = 0.30000001;
idVehicleSoundDef::idVehicleSoundDef(this: &this->sounds);
idVehicleEffectsDef::idVehicleEffectsDef(this: &this->effects);
this->camera.yaw = 0.0;
this->camera.lateral = 0.0;
this->camera2.yaw = 0.0;
this->breakableDebris = nullptr;
this->steerControlInfluence = 0.55000001;
this->camera2.height = 8.0;
this->camera2.minRange = 8.0;
this->camera2.maxRange = 8.0;
this->camera.pitch = 5.0;
this->camera.height = 40.0;
this->camera.minRange = 300.0;
this->camera2.pitch = 10.0;
this->camera.maxRange = 500.0;
this->camera2.lateral = 7.0;
this->cgLocation.z = 0.0;
this->cgLocation.y = 0.0;
this->cgLocation.x = 0.0;
this->maxCgLocation.z = 0.0;
this->maxCgLocation.y = 0.0;
this->maxCgLocation.x = 0.0;
this->motorTorque = nullptr;
this->hasBoost = true;
this->boostBlurMaterial = nullptr;
this->maxSpeed = 100.0;
this->baseBoostUpgrade = 1;
this->boostMaxSpeedScalar = 1.0;
this->fpsStickYawTable = nullptr;
this->additionalRaceSpeed = 10.0;
this->fpsStickPitchTable = nullptr;
this->maxReverseSpeed = 40.0;
this->handbrakeMinThreshold = 1.0;
this->handbrakeFrictionScale = 0.30000001;
this->handBrakeForce = 3000.0;
this->brakeForce = 400.0;
this->frictionForce = 30.0;
this->pitchStabilization = 0.69999999;
this->rollStabilization = 0.69999999;
this->skidRoll = 0.00060000003;
this->skidRollBoostMult = 1.8;
return this;
}
// ========================================================================
// __unwind$224366
// EA : 0x82623744
// RVA : 0x00623744
// PDB : w:\tech5\engine\decls\declvehicleprops.h
// ========================================================================
void _unwind_224366()
{
int v0; // r12
idDeclTypeInfo::~idDeclTypeInfo(this: *(idDeclTypeInfo **)(v0 - 160 + 180));
}
// ========================================================================
// __unwind$224367
// EA : 0x8262376C
// RVA : 0x0062376C
// PDB : w:\tech5\engine\decls\declvehicleprops.h
// ========================================================================
void _unwind_224367()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(*(_DWORD *)(v0 - 160 + 180) + 136));
}
// ========================================================================
// __unwind$224368
// EA : 0x82623798
// RVA : 0x00623798
// PDB : w:\tech5\engine\decls\declvehicleprops.h
// ========================================================================
void _unwind_224368()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(*(_DWORD *)(v0 - 160 + 180) + 188));
}
// ========================================================================
// __unwind$224369
// EA : 0x826237C4
// RVA : 0x006237C4
// PDB : w:\tech5\engine\decls\declvehicleprops.h
// ========================================================================
void _unwind_224369()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(*(_DWORD *)(v0 - 160 + 180) + 248));
}
// ========================================================================
// __unwind$224370
// EA : 0x826237F0
// RVA : 0x006237F0
// PDB : w:\tech5\engine\decls\declvehicleprops.h
// ========================================================================
void _unwind_224370()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(*(_DWORD *)(v0 - 160 + 180) + 400));
}
// ========================================================================
// __unwind$224371
// EA : 0x8262381C
// RVA : 0x0062381C
// PDB : w:\tech5\engine\decls\declvehicleprops.h
// ========================================================================
void _unwind_224371()
{
int v0; // r12
idList<idWheelDef,5>::~idList<idWheelDef,5>(this: (idList<idWheelDef,5> *)(*(_DWORD *)(v0 - 160 + 180) + 468));
}
// ========================================================================
// ?GetDeclInfo@idDeclVehicleProps@@UBAPAVidDeclInfo@@XZ
// EA : 0x82623848
// RVA : 0x00623848
// PDB : w:\tech5\engine\decls\declvehicleprops.h
// ========================================================================
idDeclInfoTemplate<idDeclVehicleProps> *__fastcall idDeclVehicleProps::GetDeclInfo(idDeclVehicleProps *this)
{
return &idDeclVehicleProps::resourceList;
}
// ========================================================================
// ??1idDeclVehicleProps@@UAA@XZ
// EA : 0x82623860
// RVA : 0x00623860
// PDB : w:\tech5\engine\decls\declvehicleprops.h
// ========================================================================
void __fastcall idDeclVehicleProps::~idDeclVehicleProps(idDeclVehicleProps *this)
{
char *list; // r3
this->__vftable = (idDeclVehicleProps_vtbl *)&idDeclVehicleProps::`vftable';
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->sounds);
if ( this->wheels.listStatic == 0 || this->wheels.listStatic == 2 )
{
list = (char *)this->wheels.list;
if ( list != nullptr )
idListArrayDelete<idWheelDef>(ptr: list, num: this->wheels.size);
this->wheels.list = nullptr;
this->wheels.size = 0;
}
this->wheels.num = 0;
idStr::FreeData(this: &this->sheildModel);
idStr::FreeData(this: &this->speedometer.jointName);
idStr::FreeData(this: &this->tachometer.jointName);
idStr::FreeData(this: &this->steeringWheel.jointName);
idDeclTypeInfo::~idDeclTypeInfo(this: &this->idDeclTypeInfo);
}
// ========================================================================
// __unwind$224648
// EA : 0x826238F4
// RVA : 0x006238F4
// PDB : w:\tech5\engine\decls\declvehicleprops.h
// ========================================================================
void _unwind_224648()
{
int v0; // r12
idDeclTypeInfo::~idDeclTypeInfo(this: *(idDeclTypeInfo **)(v0 - 112 + 132));
}
// ========================================================================
// __unwind$224649
// EA : 0x8262391C
// RVA : 0x0062391C
// PDB : w:\tech5\engine\decls\declvehicleprops.h
// ========================================================================
void _unwind_224649()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(*(_DWORD *)(v0 - 112 + 132) + 136));
}
// ========================================================================
// __unwind$224650
// EA : 0x82623948
// RVA : 0x00623948
// PDB : w:\tech5\engine\decls\declvehicleprops.h
// ========================================================================
void _unwind_224650()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(*(_DWORD *)(v0 - 112 + 132) + 188));
}
// ========================================================================
// __unwind$224651
// EA : 0x82623974
// RVA : 0x00623974
// PDB : w:\tech5\engine\decls\declvehicleprops.h
// ========================================================================
void _unwind_224651()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(*(_DWORD *)(v0 - 112 + 132) + 248));
}
// ========================================================================
// __unwind$224652_0
// EA : 0x826239A0
// RVA : 0x006239A0
// PDB : w:\tech5\engine\decls\declvehicleprops.h
// ========================================================================
void _unwind_224652_0()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(*(_DWORD *)(v0 - 112 + 132) + 400));
}
// ========================================================================
// __unwind$224653
// EA : 0x826239CC
// RVA : 0x006239CC
// PDB : w:\tech5\engine\decls\declvehicleprops.h
// ========================================================================
void _unwind_224653()
{
int v0; // r12
idList<idWheelDef,5>::~idList<idWheelDef,5>(this: (idList<idWheelDef,5> *)(*(_DWORD *)(v0 - 112 + 132) + 468));
}
@@ -0,0 +1,123 @@
// ========================================================================
// ??1idDeclWalkIK@@UAA@XZ
// EA : 0x8262C028
// RVA : 0x0062C028
// PDB : w:\tech5\engine\decls\declwalkik.cpp
// ========================================================================
void __fastcall idDeclWalkIK::~idDeclWalkIK(idDeclWalkIK *this)
{
this->__vftable = (idDeclWalkIK_vtbl *)&idDeclWalkIK::`vftable';
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->legJoints);
idDeclTypeInfo::~idDeclTypeInfo(this: &this->idDeclTypeInfo);
}
// ========================================================================
// __unwind$219333
// EA : 0x8262C07C
// RVA : 0x0062C07C
// PDB : w:\tech5\engine\decls\declwalkik.cpp
// ========================================================================
void _unwind_219333()
{
int v0; // r12
idDeclTypeInfo::~idDeclTypeInfo(this: *(idDeclTypeInfo **)(v0 - 112 + 132));
}
// ========================================================================
// ?FreeData@idDeclWalkIK@@UAAXXZ
// EA : 0x8262C118
// RVA : 0x0062C118
// PDB : w:\tech5\engine\decls\declwalkik.cpp
// ========================================================================
void __fastcall idDeclWalkIK::FreeData(idDeclWalkIK *this)
{
idList<idIKLeg,83> *p_legJoints; // r30
p_legJoints = &this->legJoints;
if ( this->legJoints.size < 0 )
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->legJoints);
p_legJoints->num = __CFADD__(-p_legJoints->size, p_legJoints->size ^ 0x80000000) ? 0 : p_legJoints->size;
this->kneeDir.x = 1.0;
this->kneeDir.y = 0.0;
this->kneeDir.z = 0.0;
this->usePivot = false;
this->dirsFromBasePose = false;
this->restrictToBounds = false;
this->checkFeetForSolids = false;
this->smoothing = 0.75;
this->waistSmoothing = 0.5;
this->stairSmoothing = 0.85000002;
this->stairWaistSmoothing = 0.75;
this->footSmoothing = 0.0;
this->footShift = 0.0;
this->waistShift = 0.0;
this->minWaistFloorDist = 0.0;
this->minWaistAnkleDist = 0.0;
this->footSize = 4.0;
this->footUpTrace = 32.0;
this->footDownTrace = 32.0;
this->footDownTraceDead = 256.0;
this->restrictToBoundsTolerance = 0.0;
}
// ========================================================================
// ??0idDeclWalkIK@@QAA@XZ
// EA : 0x8262C220
// RVA : 0x0062C220
// PDB : w:\tech5\engine\decls\declwalkik.cpp
// ========================================================================
idDeclWalkIK *__fastcall idDeclWalkIK::idDeclWalkIK(idDeclWalkIK *this)
{
idDeclTypeInfo::idDeclTypeInfo(this: &this->idDeclTypeInfo);
this->__vftable = (idDeclWalkIK_vtbl *)&idDeclWalkIK::`vftable';
this->legJoints.list = nullptr;
this->legJoints.granularity = 0;
this->legJoints.memTag = 83;
this->legJoints.listStatic = 0;
this->legJoints.size = 0;
this->legJoints.num = 0;
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->legJoints);
this->waistJoint.str = &byte_8200D768;
idDeclWalkIK::FreeData(this);
return this;
}
// ========================================================================
// __unwind$219559
// EA : 0x8262C2B0
// RVA : 0x0062C2B0
// PDB : w:\tech5\engine\decls\declwalkik.cpp
// ========================================================================
void _unwind_219559()
{
int v0; // r12
idDeclTypeInfo::~idDeclTypeInfo(this: *(idDeclTypeInfo **)(v0 - 112 + 132));
}
// ========================================================================
// __unwind$219560
// EA : 0x8262C2D8
// RVA : 0x0062C2D8
// PDB : w:\tech5\engine\decls\declwalkik.cpp
// ========================================================================
void _unwind_219560()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: (idStaticList<idVehicleState *,4> *)(*(_DWORD *)(v0 - 112 + 132) + 64));
}
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetDeclInfo@idDeclWalkIK@@UBAPAVidDeclInfo@@XZ
// EA : 0x8262C0A8
// RVA : 0x0062C0A8
// PDB : w:\tech5\engine\decls\declwalkik.h
// ========================================================================
idDeclInfoTemplate<idDeclWalkIK> *__fastcall idDeclWalkIK::GetDeclInfo(idDeclWalkIK *this)
{
return &idDeclWalkIK::resourceList;
}
@@ -0,0 +1,517 @@
// ========================================================================
// ?DefaultDefinition@idDeclVisemeSet@@UBAPBDXZ
// EA : 0x8262C308
// RVA : 0x0062C308
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
const char *__fastcall idDeclVisemeSet::DefaultDefinition(idDeclVisemeSet *this)
{
return "{\n"
"\tphonemeSet \"\"\n"
"\tvisemeSilence viseme_REST\n"
"\tphonemeSilence x\n"
"\tvisemes {\n"
"\t}\n"
"\tphonemes {\n"
"\t}\n"
"}\n";
}
// ========================================================================
// ??0idViseme@@QAA@XZ
// EA : 0x8262C318
// RVA : 0x0062C318
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
idViseme *__fastcall idViseme::idViseme(idViseme *this)
{
this->name.str = &byte_8200D768;
this->aliasName.str = &byte_8200D768;
this->viseme = -1;
return this;
}
// ========================================================================
// ??0idPhoneme@@QAA@XZ
// EA : 0x8262C338
// RVA : 0x0062C338
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
idPhoneme *__fastcall idPhoneme::idPhoneme(idPhoneme *this)
{
this->phoneme = -1;
this->weightScale = 1.0;
this->viseme = -1;
this->durationScale = 1.0;
this->timeOffsetMS = 0;
this->name.str = &byte_8200D768;
return this;
}
// ========================================================================
// ?VisemeForName@idDeclVisemeSet@@QBAHPBD@Z
// EA : 0x8262C370
// RVA : 0x0062C370
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
int __fastcall idDeclVisemeSet::VisemeForName(idDeclVisemeSet *this, const char *name)
{
int v4; // r29
int i; // r31
v4 = 0;
if ( this->visemes.num <= 0 )
return -1;
for ( i = 0; idStr::Icmp(s1: this->visemes.list[i].name.str, s2: name) != 0; ++i )
{
if ( ++v4 >= this->visemes.num )
return -1;
}
return v4;
}
// ========================================================================
// ?PhonemeForName@idDeclVisemeSet@@QBAHPBD@Z
// EA : 0x8262C3E0
// RVA : 0x0062C3E0
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
int __fastcall idDeclVisemeSet::PhonemeForName(idDeclVisemeSet *this, const char *name)
{
int v4; // r29
int i; // r31
v4 = 0;
if ( this->phonemes.num <= 0 )
return -1;
for ( i = 0; idStr::Icmp(s1: this->phonemes.list[i].name.str, s2: name) != 0; ++i )
{
if ( ++v4 >= this->phonemes.num )
return -1;
}
return v4;
}
// ========================================================================
// ?FreeData@idDeclVisemeSet@@UAAXXZ
// EA : 0x8262C4F8
// RVA : 0x0062C4F8
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
void __fastcall idDeclVisemeSet::FreeData(idDeclVisemeSet *this)
{
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->visemes);
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->phonemes);
}
// ========================================================================
// ?Size@idDeclVisemeSet@@UBAIXZ
// EA : 0x8262C530
// RVA : 0x0062C530
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
int __fastcall idDeclVisemeSet::Size(idDeclVisemeSet *this)
{
return 12 * (2 * (this->phonemes.size + 4) + this->visemes.size);
}
// ========================================================================
// ??0idDeclVisemeSet@@QAA@XZ
// EA : 0x8262C608
// RVA : 0x0062C608
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
idDeclVisemeSet *__fastcall idDeclVisemeSet::idDeclVisemeSet(idDeclVisemeSet *this)
{
idDecl::idDecl(this: &this->idDecl);
this->__vftable = (idDeclVisemeSet_vtbl *)&idDeclVisemeSet::`vftable';
this->phonemeSet.len = 0;
this->phonemeSet.allocedAndFlag = 20;
this->phonemeSet.data = this->phonemeSet.baseBuffer;
this->phonemeSet.baseBuffer[0] = 0;
this->visemes.list = nullptr;
this->visemes.granularity = 0;
this->visemes.memTag = 69;
this->visemes.listStatic = 0;
this->visemes.size = 0;
this->visemes.num = 0;
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->visemes);
this->phonemes.list = nullptr;
this->phonemes.granularity = 0;
this->phonemes.memTag = 70;
this->phonemes.listStatic = 0;
this->phonemes.size = 0;
this->phonemes.num = 0;
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->phonemes);
this->silenceViseme = -1;
this->silencePhoneme = -1;
return this;
}
// ========================================================================
// __unwind$221146
// EA : 0x8262C6B0
// RVA : 0x0062C6B0
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
void _unwind_221146()
{
int v0; // r12
idDecl::~idDecl(this: *(idDecl **)(v0 - 112 + 132));
}
// ========================================================================
// __unwind$221147
// EA : 0x8262C6D8
// RVA : 0x0062C6D8
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
void _unwind_221147()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(*(_DWORD *)(v0 - 112 + 132) + 56));
}
// ========================================================================
// __unwind$221148
// EA : 0x8262C704
// RVA : 0x0062C704
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
void _unwind_221148()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: (idStaticList<idVehicleState *,4> *)(*(_DWORD *)(v0 - 112 + 132) + 88));
}
// ========================================================================
// ??1idDeclVisemeSet@@UAA@XZ
// EA : 0x8262C748
// RVA : 0x0062C748
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
void __fastcall idDeclVisemeSet::~idDeclVisemeSet(idDeclVisemeSet *this)
{
this->__vftable = (idDeclVisemeSet_vtbl *)&idDeclVisemeSet::`vftable';
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->phonemes);
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->visemes);
idStr::FreeData(this: &this->phonemeSet);
idDecl::~idDecl(this: &this->idDecl);
}
// ========================================================================
// __unwind$221210
// EA : 0x8262C7AC
// RVA : 0x0062C7AC
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
void _unwind_221210()
{
int v0; // r12
idDecl::~idDecl(this: *(idDecl **)(v0 - 112 + 132));
}
// ========================================================================
// __unwind$221211
// EA : 0x8262C7D4
// RVA : 0x0062C7D4
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
void _unwind_221211()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(*(_DWORD *)(v0 - 112 + 132) + 56));
}
// ========================================================================
// __unwind$221212
// EA : 0x8262C800
// RVA : 0x0062C800
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
void _unwind_221212()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: (idStaticList<idVehicleState *,4> *)(*(_DWORD *)(v0 - 112 + 132) + 88));
}
// ========================================================================
// ?Parse@idDeclVisemeSet@@UAAXAAVidParser@@@Z
// EA : 0x8262CD60
// RVA : 0x0062CD60
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
void __fastcall idDeclVisemeSet::Parse(idDeclVisemeSet *this, idParser *src)
{
int len; // r29
int num; // r26
char *data; // r25
double v7; // fp30
double v8; // fp31
int v9; // r29
int v10; // r28
int v11; // r3
int v12; // r16
idToken v13; // [sp+50h] [-1D0h] BYREF
idViseme v14[2]; // [sp+98h] [-188h] BYREF
idPhoneme v15; // [sp+B0h] [-170h] BYREF
idStr v16; // [sp+D0h] [-150h] BYREF
idStr v17; // [sp+F0h] [-130h] BYREF
idStr v18; // [sp+110h] [-110h] BYREF
idToken v19; // [sp+130h] [-F0h] BYREF
v13.len = 0;
v13.allocedAndFlag = 20;
v13.floatvalue = -3.4028235e38;
v13.data = v13.baseBuffer;
v13.baseBuffer[0] = 0;
v13.intvalue = 0;
memset(&v13.whiteSpaceStart_p, 0, 12);
idParser::ExpectTokenString(this: src, string: "phonemeSet");
idParser::ExpectTokenType(this: src, type: 1, subtype: 0, token: &v13);
len = v13.len;
idStr::EnsureAlloced(this: &this->phonemeSet, amount: v13.len + 1, keepold: false, geometricGrowth: false);
memcpy(Dst: this->phonemeSet.data, Src: v13.data, Size: len);
this->phonemeSet.data[len] = 0;
this->phonemeSet.len = len;
idParser::ExpectTokenString(this: src, string: "visemeSilence");
idParser::ExpectTokenType(this: src, type: 4, subtype: 0, token: &v13);
idStr::idStr(this: &v18, text: &v13);
idParser::ExpectTokenString(this: src, string: "phonemeSilence");
idParser::ExpectTokenType(this: src, type: 4, subtype: 0, token: &v13);
idStr::idStr(this: &v17, text: &v13);
idParser::ExpectTokenString(this: src, string: "visemes");
idParser::ExpectTokenType(this: src, type: 5, subtype: 46, token: &v13);
while ( idParser::ReadToken(this: src, token: &v13) )
{
if ( v13.type == 5 )
{
if ( v13.subtype == 47 )
break;
}
else if ( v13.type == 4 )
{
idToken::idToken(this: &v19, token: &v13);
idParser::ExpectTokenType(this: src, type: 5, subtype: 46, token: &v13);
idParser::ExpectTokenString(this: src, string: "alias");
idParser::ExpectTokenType(this: src, type: 1, subtype: 0, token: &v13);
num = this->visemes.num;
data = v13.data;
idAtomicString::Set(this: &v14[0].name, str_: v19.data);
idAtomicString::Set(this: &v14[0].aliasName, str_: data);
v14[0].viseme = num;
idList<idViseme,69>::Append(this: &this->visemes, obj: v14);
idParser::ExpectTokenType(this: src, type: 5, subtype: 47, token: &v13);
idStr::FreeData(this: &v19);
continue;
}
idParser::Error(this: src, str: "Expected a viseme name, read '%s'", v13.data);
}
idParser::ExpectTokenString(this: src, string: "phonemes");
idParser::ExpectTokenType(this: src, type: 5, subtype: 46, token: &v13);
while ( idParser::ReadToken(this: src, token: &v13) )
{
if ( v13.type == 5 )
{
if ( v13.subtype == 47 )
break;
}
else if ( v13.type == 4 )
{
idStr::idStr(this: &v16, text: &v13);
v7 = 1.0;
v8 = 1.0;
v9 = -1;
v10 = 0;
if ( idParser::CheckTokenType(this: src, type: 5, subtype: 46, token: &v13) != 0 )
{
while ( idParser::ReadToken(this: src, token: &v13) )
{
if ( v13.type == 5 && v13.subtype == 47 )
break;
if ( idStr::Icmp(s1: v13.data, s2: "weightScale") != 0 )
{
if ( idStr::Icmp(s1: v13.data, s2: "durationScale") != 0 )
{
if ( idStr::Icmp(s1: v13.data, s2: "timeOffsetMS") != 0 )
{
v11 = idDeclVisemeSet::VisemeForName(this, name: v13.data);
if ( v11 == -1 )
{
idParser::Error(
this: src,
str: "Unknown token '%s' in phoneme '%s', expected phoneme property.",
v13.data,
v16.data);
}
else if ( v9 == -1 )
{
v9 = v11;
}
else
{
idParser::Error(this: src, str: "Multiple visemes specified in phoneme '%s'", v16.data);
}
}
else
{
v10 = idParser::ParseInt(this: src);
}
}
else
{
v8 = idParser::ParseFloat(this: src, errorFlag: nullptr);
if ( v8 < 0.0 )
idParser::Error(this: src, str: "Negative duration scale in phoneme '%s'", v16.data);
}
}
else
{
v7 = idParser::ParseFloat(this: src, errorFlag: nullptr);
if ( v7 < 0.0 )
idParser::Error(this: src, str: "Negative weight scale in phoneme '%s'", v16.data);
}
}
}
else
{
idParser::ExpectTokenType(this: src, type: 5, subtype: 32, token: &v13);
idParser::ExpectTokenType(this: src, type: 4, subtype: 0, token: &v13);
v9 = idDeclVisemeSet::VisemeForName(this, name: v13.data);
if ( v9 == -1 )
idParser::Error(this: src, str: "Phoneme '%s' maps to viseme '%s', which does not exist.", v16.data, v13.data);
}
v12 = this->phonemes.num;
idAtomicString::Set(this: &v15.name, str_: v16.data);
v15.weightScale = v7;
v15.durationScale = v8;
v15.phoneme = v12;
v15.viseme = v9;
v15.timeOffsetMS = v10;
idList<idPhoneme,70>::Append(this: &this->phonemes, obj: &v15);
idStr::FreeData(this: &v16);
continue;
}
idParser::Error(this: src, str: "Expected a phoneme name, but read '%s'", v13.data);
}
idParser::ExpectTokenType(this: src, type: 5, subtype: 47, token: &v13);
this->silenceViseme = idDeclVisemeSet::VisemeForName(this, name: v18.data);
this->silencePhoneme = idDeclVisemeSet::PhonemeForName(this, name: v17.data);
idStr::FreeData(this: &v17);
idStr::FreeData(this: &v18);
idStr::FreeData(this: &v13);
}
// ========================================================================
// $M221537_0
// EA : 0x8262D2D0
// RVA : 0x0062D2D0
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
void _M221537_0()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 544 + 80));
}
// ========================================================================
// __unwind$221300
// EA : 0x8262D2F8
// RVA : 0x0062D2F8
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
void _unwind_221300()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 544 + 272));
}
// ========================================================================
// __unwind$221301
// EA : 0x8262D320
// RVA : 0x0062D320
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
void _unwind_221301()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 544 + 240));
}
// ========================================================================
// __unwind$221302
// EA : 0x8262D348
// RVA : 0x0062D348
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
void _unwind_221302()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 544 + 304));
}
// ========================================================================
// __unwind$221303
// EA : 0x8262D370
// RVA : 0x0062D370
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.cpp
// ========================================================================
void _unwind_221303()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 544 + 208));
}
@@ -0,0 +1,13 @@
// ========================================================================
// ?GetDeclInfo@idDeclVisemeSet@@UBAPAVidDeclInfo@@XZ
// EA : 0x8262C730
// RVA : 0x0062C730
// PDB : w:\tech5\engine\decls\voiceovers\declvisemeset.h
// ========================================================================
idDeclInfoTemplate<idDeclVisemeSet> *__fastcall idDeclVisemeSet::GetDeclInfo(idDeclVisemeSet *this)
{
return &idDeclVisemeSet::resourceList;
}
@@ -0,0 +1,955 @@
// ========================================================================
// ?Size@idDeclVoiceOver@@UBAIXZ
// EA : 0x8262D418
// RVA : 0x0062D418
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
unsigned int __fastcall idDeclVoiceOver::Size(idDeclVoiceOver *this)
{
int v2; // r31
unsigned int v3; // r28
int v4; // r29
v2 = 0;
v3 = 4 * (this->tracks.size + 21);
if ( this->tracks.num > 0 )
{
v4 = 0;
do
{
++v2;
v3 = idVoiceTrack::Memory(this: this->tracks.list[v4++]) + v3 - 292;
}
while ( v2 < this->tracks.num );
}
return v3;
}
// ========================================================================
// ?GetMaxLength@idDeclVoiceOver@@QBA?AV?$idTypesafeNumber@HW4millisecondUnique_t@@@@XZ
// EA : 0x8262D480
// RVA : 0x0062D480
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
idDeclVoiceOver *__fastcall idDeclVoiceOver::GetMaxLength(
idDeclVoiceOver *this,
idTypesafeNumber<int,enum millisecondUnique_t> *result)
{
int value; // r11
int v3; // r10
int v4; // r9
int i; // ctr
int v6; // r11
idDeclVoiceOver_vtbl *v7; // r11
value = result[18].value;
v3 = 0;
this->__vftable = nullptr;
if ( value > 0 )
{
v4 = result[17].value;
for ( i = value; i != 0; --i )
{
v6 = *(_DWORD *)(v3 + v4);
if ( v6 != 0 )
{
v7 = *(idDeclVoiceOver_vtbl **)(v6 + 288);
if ( (int)v7 > (int)this->__vftable )
this->__vftable = v7;
}
v3 += 4;
}
}
return this;
}
// ========================================================================
// ?reloadVoiceOvers_f@@YAXABVidCmdArgs@@@Z
// EA : 0x8262D4D0
// RVA : 0x0062D4D0
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
void __fastcall reloadVoiceOvers_f(const idCmdArgs *args)
{
bool v1; // r31
int v2; // r31
int num; // r29
idResource *v4; // r3
if ( args->argc <= 1 )
goto LABEL_6;
v1 = true;
if ( args->argc == 2 )
v1 = idStr::Icmp(s1: args->argv[1], s2: "-force") != 0;
if ( v1 )
{
idLib::Printf(fmt: "USAGE: reloadVoiceOvers [-force]\n");
}
else
{
LABEL_6:
v2 = 0;
num = idDeclVoiceOver::resourceList.num;
++idResourceList::staleCount;
if ( idDeclVoiceOver::resourceList.num > 0 )
{
do
{
v4 = idResourceList::Index(this: &idDeclVoiceOver::resourceList, index: v2);
v4->ReloadIfStale(this: v4);
++v2;
}
while ( v2 < num );
}
}
}
// ========================================================================
// ??0idDeclVoiceOver@@QAA@XZ
// EA : 0x8262D860
// RVA : 0x0062D860
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
idDeclVoiceOver *__fastcall idDeclVoiceOver::idDeclVoiceOver(idDeclVoiceOver *this)
{
idDeclTypeInfo::idDeclTypeInfo(this);
this->nextSampleToPlay = -1;
this->__vftable = (idDeclVoiceOver_vtbl *)&idDeclVoiceOver::`vftable';
this->tracks.list = nullptr;
this->tracks.granularity = 0;
this->tracks.memTag = 65;
this->tracks.listStatic = 0;
this->tracks.size = 0;
this->tracks.num = 0;
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->tracks);
return this;
}
// ========================================================================
// __unwind$220870
// EA : 0x8262D8DC
// RVA : 0x0062D8DC
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
void _unwind_220870()
{
int v0; // r12
idDeclTypeInfo::~idDeclTypeInfo(this: *(idDeclTypeInfo **)(v0 - 112 + 132));
}
// ========================================================================
// ??1idDeclVoiceOver@@UAA@XZ
// EA : 0x8262D920
// RVA : 0x0062D920
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
void __fastcall idDeclVoiceOver::~idDeclVoiceOver(idDeclVoiceOver *this)
{
idList<idVoiceTrack const *,65> *p_tracks; // r29
this->__vftable = (idDeclVoiceOver_vtbl *)&idDeclVoiceOver::`vftable';
p_tracks = &this->tracks;
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)&this->tracks);
idList<idThread *,58>::Clear(this: (idList<idVehicleState *,5> *)p_tracks);
idDeclTypeInfo::~idDeclTypeInfo(this);
}
// ========================================================================
// __unwind$220895
// EA : 0x8262D968
// RVA : 0x0062D968
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
void _unwind_220895()
{
int v0; // r12
idDeclTypeInfo::~idDeclTypeInfo(this: *(idDeclTypeInfo **)(v0 - 112 + 132));
}
// ========================================================================
// __unwind$220896
// EA : 0x8262D990
// RVA : 0x0062D990
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
void _unwind_220896()
{
int v0; // r12
idList<idDeclSecretType const *,5>::~idList<idDeclSecretType const *,5>(this: (idStaticList<idVehicleState *,4> *)(*(_DWORD *)(v0 - 112 + 132) + 68));
}
// ========================================================================
// ?listStaleVoiceTracks_f@@YAXABVidCmdArgs@@@Z
// EA : 0x8262D9C0
// RVA : 0x0062D9C0
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
void __fastcall listStaleVoiceTracks_f(const idCmdArgs *args)
{
int v1; // r24
int v2; // r27
int v3; // r26
int num; // r19
int v5; // r22
const char *str; // r4
const idDecl *v7; // r28
int resourceListPtr; // r11
int v9; // r30
int v10; // r29
idVoiceTrack *v11; // r31
BOOL IsCustomized; // r9
const char *v13; // r5
common->SetRefreshOnPrint(this: common, a2: true);
v1 = 0;
v2 = 0;
v3 = 0;
if ( idDeclVoiceOver::resourceList.declSources.num > 0 )
{
num = idDeclVoiceOver::resourceList.declSources.num;
v5 = 0;
do
{
str = idDeclVoiceOver::resourceList.declSources.list[v5]->name.str;
if ( str != nullptr )
v7 = idDeclInfo::FindWithInheritance(this: &idDeclVoiceOver::resourceList, name: str, makeDefault: false);
else
v7 = nullptr;
resourceListPtr = (int)v7[1].resourceListPtr;
v9 = 0;
v1 += resourceListPtr;
if ( resourceListPtr > 0 )
{
v10 = 0;
do
{
if ( v9 < 0 || v9 >= resourceListPtr )
v11 = nullptr;
else
v11 = *(idVoiceTrack **)((char *)&v7[1].nextOnHashChain->idResource::__vftable + v10);
if ( idVoiceTrack::IsStale(this: v11) )
{
v3 += idVoiceTrack::IsCustomized(this: v11);
IsCustomized = idVoiceTrack::IsCustomized(this: v11);
v13 = "^3 - customized";
if ( !IsCustomized )
v13 = &byte_8200D768;
idLib::Printf(fmt: "^7 %s%s\n", v11->name.str, v13);
++v2;
}
resourceListPtr = (int)v7[1].resourceListPtr;
++v9;
v10 += 4;
}
while ( v9 < resourceListPtr );
}
--num;
++v5;
}
while ( num != 0 );
}
idLib::Printf(fmt: "%d total referenced voice tracks.\n", v1);
idLib::Printf(fmt: "%d stale voice tracks found.\n", v2);
idLib::Printf(fmt: "%d stale voice tracks were customized.\n", v3);
common->SetRefreshOnPrint(this: common, a2: false);
}
// ========================================================================
// ?listCustomizedVoiceTracks_f@@YAXABVidCmdArgs@@@Z
// EA : 0x8262DC10
// RVA : 0x0062DC10
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
void __fastcall listCustomizedVoiceTracks_f(const idCmdArgs *args)
{
__int64 v1; // r10
const char **v2; // r8
int v3; // r7
int v4; // r6
signed int v5; // r27
idStr *list; // r20
int size; // r18
int v8; // r17
idStr *v9; // r23
int v10; // r19
signed int v11; // r26
idStr *v12; // r24
int v13; // r22
signed int v14; // r25
int num; // r25
const idDecl *v16; // r24
int resourceListPtr; // r11
int v18; // r29
int v19; // r28
int v20; // r30
int v21; // r3
char v22; // r11
idStr *v23; // r3
const char **p_data; // r29
signed int i; // r30
const char **v26; // r29
signed int j; // r30
const char **v28; // r29
signed int k; // r30
idStr *v30; // r29
int m; // r30
idStr *v32; // r29
int n; // r30
idStr *v34; // r29
int ii; // r30
idSort_Quick<idStr,idSort_vtr> v36; // [sp+54h] [-12Ch] BYREF
idSort_Quick<idStr,idSort_vtr> v37; // [sp+58h] [-128h] BYREF
idSort_Quick<idStr,idSort_vtr> v38; // [sp+5Ch] [-124h] BYREF
idList<idStr,5> v39; // [sp+60h] [-120h] BYREF
idList<idStr,5> v40; // [sp+70h] [-110h] BYREF
idList<idStr,5> v41; // [sp+80h] [-100h] BYREF
idStr v42; // [sp+90h] [-F0h] BYREF
idStr v43; // [sp+B0h] [-D0h] BYREF
idStr v44[5]; // [sp+D0h] [-B0h] BYREF
common->SetRefreshOnPrint(this: common, a2: true);
v5 = 0;
list = nullptr;
*(_WORD *)&v41.memTag = 1280;
size = 0;
memset(&v41, 0, 14);
v8 = 0;
v9 = nullptr;
v10 = 0;
*(_WORD *)&v40.memTag = 1280;
v11 = 0;
memset(&v40, 0, 14);
v12 = nullptr;
*(_WORD *)&v39.memTag = 1280;
v13 = 0;
v14 = 0;
memset(&v39, 0, 14);
if ( idDeclVoiceOver::resourceList.declSources.num > 0 )
{
num = idDeclVoiceOver::resourceList.declSources.num;
while ( 1 )
{
LODWORD(v1) = idDeclVoiceOver::resourceList.declSources.list;
HIDWORD(v1) = (char *)idDeclVoiceOver::resourceList.declSources.list + v11;
v2 = *(const char ***)((char *)idDeclVoiceOver::resourceList.declSources.list + v11);
v16 = *v2 != nullptr
? idDeclInfo::FindWithInheritance(this: &idDeclVoiceOver::resourceList, name: *v2, makeDefault: false)
: nullptr;
resourceListPtr = (int)v16[1].resourceListPtr;
v18 = 0;
v8 += resourceListPtr;
if ( resourceListPtr > 0 )
break;
LABEL_23:
--num;
v11 += 4;
if ( num == 0 )
{
size = v41.size;
v5 = v41.num;
list = v41.list;
v10 = v40.size;
v11 = v40.num;
v9 = v40.list;
v13 = v39.size;
v14 = v39.num;
v12 = v39.list;
goto LABEL_25;
}
}
v19 = 0;
while ( 1 )
{
if ( v18 < 0 || v18 >= resourceListPtr )
v20 = 0;
else
v20 = *(int *)((char *)&v16[1].nextOnHashChain->idResource::__vftable + v19);
if ( (*(_BYTE *)(v20 + 268) & 4) != 0
|| (v21 = idVoiceEventManager::NumEventType(this: (idVoiceEventManager *)(v20 + 52), type: VOICEEVENT_ANIM),
v22 = 0,
v21 > 0) )
{
v22 = 1;
}
if ( v22 != 0 )
break;
if ( **(_BYTE **)(v20 + 208) != 0 )
{
idStr::idStr(this: &v43, text: *(const char **)(v20 + 8));
idList<idStr,5>::Append(this: &v39, obj: &v43);
v23 = &v43;
goto _M221720_0;
}
if ( idVoiceTrack::IsCustomized(this: (idVoiceTrack *)v20) )
{
idStr::idStr(this: v44, text: *(const char **)(v20 + 8));
idList<idStr,5>::Append(this: &v41, obj: v44);
v23 = v44;
goto _M221720_0;
}
LABEL_22:
++v18;
v19 += 4;
resourceListPtr = (int)v16[1].resourceListPtr;
if ( v18 >= resourceListPtr )
goto LABEL_23;
}
idStr::idStr(this: &v42, text: *(const char **)(v20 + 8));
idList<idStr,5>::Append(this: &v40, obj: &v42);
v23 = &v42;
_M221720_0:
idStr::FreeData(this: v23);
goto LABEL_22;
}
LABEL_25:
v38.__vftable = (idSort_Quick<idStr,idSort_vtr>_vtbl *)&idSort_vtr::`vftable';
if ( list != nullptr )
idSort_Quick<idStr,idSort_vtr>::Sort(this: &v38, base: list, num: v5, a4: v4, a5: v3, a6: (int)v2, a7: v1);
v36.__vftable = (idSort_Quick<idStr,idSort_vtr>_vtbl *)&idSort_vtr::`vftable';
v38.__vftable = (idSort_Quick<idStr,idSort_vtr>_vtbl *)&idSort<idStr>::`vftable';
if ( v9 != nullptr )
idSort_Quick<idStr,idSort_vtr>::Sort(this: &v36, base: v9, num: v11, a4: v4, a5: v3, a6: (int)v2, a7: v1);
v36.__vftable = (idSort_Quick<idStr,idSort_vtr>_vtbl *)&idSort<idStr>::`vftable';
v37.__vftable = (idSort_Quick<idStr,idSort_vtr>_vtbl *)&idSort_vtr::`vftable';
if ( v12 != nullptr )
idSort_Quick<idStr,idSort_vtr>::Sort(this: &v37, base: v12, num: v14, a4: v4, a5: v3, a6: (int)v2, a7: v1);
v37.__vftable = (idSort_Quick<idStr,idSort_vtr>_vtbl *)&idSort<idStr>::`vftable';
if ( v5 > 0 )
{
p_data = (const char **)&list[-1].data;
for ( i = v5; i != 0; --i )
{
p_data += 8;
idLib::Printf(fmt: "%s - ^2customized\n", *p_data);
}
}
if ( v11 > 0 )
{
v26 = (const char **)&v9[-1].data;
for ( j = v11; j != 0; --j )
{
v26 += 8;
idLib::Printf(fmt: "%s - ^5edited\n", *v26);
}
}
if ( v14 > 0 )
{
v28 = (const char **)&v12[-1].data;
for ( k = v14; k != 0; --k )
{
v28 += 8;
idLib::Printf(fmt: "%s - ^4hand keyed\n", *v28);
}
}
idLib::Printf(fmt: "^7%d total referenced voice tracks.\n", v8);
idLib::Printf(fmt: "^3%d customized voice tracks found.\n", v5);
idLib::Printf(fmt: "^5%d edited voice tracks found.\n", v11);
idLib::Printf(fmt: "^4%d hand-keyed voice tracks found.\n", v14);
common->SetRefreshOnPrint(this: common, a2: false);
if ( (v39.listStatic == 0 || v39.listStatic == 2) && v12 != nullptr )
{
if ( v13 > 0 )
{
v30 = v12;
for ( m = v13; m != 0; --m )
idStr::FreeData(this: v30++);
}
idMem::Free(this: &mem, ptr: v12, align: ALIGN_16);
}
if ( (v40.listStatic == 0 || v40.listStatic == 2) && v9 != nullptr )
{
if ( v10 > 0 )
{
v32 = v9;
for ( n = v10; n != 0; --n )
idStr::FreeData(this: v32++);
}
idMem::Free(this: &mem, ptr: v9, align: ALIGN_16);
}
if ( (v41.listStatic == 0 || v41.listStatic == 2) && list != nullptr )
{
if ( size > 0 )
{
v34 = list;
for ( ii = size; ii != 0; --ii )
idStr::FreeData(this: v34++);
}
idMem::Free(this: &mem, ptr: list, align: ALIGN_16);
}
}
// ========================================================================
// __unwind$221100
// EA : 0x8262E0AC
// RVA : 0x0062E0AC
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
void _unwind_221100()
{
int v0; // r12
idList<idStr,99>::~idList<idStr,99>(this: (idList<idStr,5> *)(v0 - 384 + 128));
}
// ========================================================================
// __unwind$221101
// EA : 0x8262E0D4
// RVA : 0x0062E0D4
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
void _unwind_221101()
{
int v0; // r12
idList<idStr,99>::~idList<idStr,99>(this: (idList<idStr,5> *)(v0 - 384 + 112));
}
// ========================================================================
// __unwind$221102
// EA : 0x8262E0FC
// RVA : 0x0062E0FC
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
void _unwind_221102()
{
int v0; // r12
idList<idStr,99>::~idList<idStr,99>(this: (idList<idStr,5> *)(v0 - 384 + 96));
}
// ========================================================================
// __unwind$221103
// EA : 0x8262E124
// RVA : 0x0062E124
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
void _unwind_221103()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 384 + 144));
}
// ========================================================================
// __unwind$221104
// EA : 0x8262E14C
// RVA : 0x0062E14C
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
void _unwind_221104()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 384 + 176));
}
// ========================================================================
// __unwind$221105
// EA : 0x8262E174
// RVA : 0x0062E174
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
void _unwind_221105()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 384 + 208));
}
// ========================================================================
// __unwind$221106
// EA : 0x8262E19C
// RVA : 0x0062E19C
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
void _unwind_221106()
{
int v0; // r12
idSort_QuickDefault<idStr>::~idSort_QuickDefault<idStr>(this: (idSort_QuickDefault<idStr> *)(v0 - 384 + 92));
}
// ========================================================================
// __unwind$221107
// EA : 0x8262E1C4
// RVA : 0x0062E1C4
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
void _unwind_221107()
{
int v0; // r12
idSort_QuickDefault<idStr>::~idSort_QuickDefault<idStr>(this: (idSort_QuickDefault<idStr> *)(v0 - 384 + 84));
}
// ========================================================================
// __unwind$221108_0
// EA : 0x8262E1EC
// RVA : 0x0062E1EC
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
void _unwind_221108_0()
{
int v0; // r12
idSort_QuickDefault<idStr>::~idSort_QuickDefault<idStr>(this: (idSort_QuickDefault<idStr> *)(v0 - 384 + 88));
}
// ========================================================================
// ?removeUnreferencedVoiceTracks_f@@YAXABVidCmdArgs@@@Z
// EA : 0x8262E220
// RVA : 0x0062E220
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
void __fastcall removeUnreferencedVoiceTracks_f(const idCmdArgs *args)
{
idStr *list; // r21
int size; // r20
int v3; // r27
int num; // r25
const char *v5; // r4
const idDecl *v6; // r28
int resourceListPtr; // r11
int v8; // r30
int v9; // r29
int v10; // r11
idFileList *v11; // r25
int v12; // r23
int v13; // r24
int v14; // r26
int v15; // r30
const char *data; // r28
const char **p_data; // r29
idStr *v18; // r29
int i; // r30
idList<idStr,5> v20; // [sp+60h] [-B0h] BYREF
idStr v21[5]; // [sp+70h] [-A0h] BYREF
*(_WORD *)&v20.memTag = 1280;
list = nullptr;
size = 0;
v3 = 0;
memset(&v20, 0, 14);
common->SetRefreshOnPrint(this: common, a2: true);
if ( idDeclVoiceOver::resourceList.declSources.num > 0 )
{
num = idDeclVoiceOver::resourceList.declSources.num;
do
{
v5 = **(const char ***)((char *)idDeclVoiceOver::resourceList.declSources.list + v3);
if ( v5 != nullptr )
v6 = idDeclInfo::FindWithInheritance(this: &idDeclVoiceOver::resourceList, name: v5, makeDefault: false);
else
v6 = nullptr;
v8 = 0;
resourceListPtr = (int)v6[1].resourceListPtr;
if ( resourceListPtr > 0 )
{
v9 = 0;
do
{
if ( v8 < 0 || v8 >= resourceListPtr )
v10 = 0;
else
v10 = *(int *)((char *)&v6[1].nextOnHashChain->idResource::__vftable + v9);
idStr::idStr(this: v21, text: *(const char **)(v10 + 8));
if ( idList<idStr,5>::FindIndex(this: &v20, obj: v21, startIndex: 0) < 0 )
idList<idStr,5>::Append(this: &v20, obj: v21);
idStr::FreeData(this: v21);
++v8;
v9 += 4;
resourceListPtr = (int)v6[1].resourceListPtr;
}
while ( v8 < resourceListPtr );
}
--num;
v3 += 4;
}
while ( num != 0 );
v3 = v20.num;
size = v20.size;
list = v20.list;
}
v11 = fileSystem->ListFilesTree(this: fileSystem, a2: "voicetrack", a3: ".vtr", a4: 0);
v12 = 0;
v13 = 0;
if ( v11->list.num > 0 )
{
v14 = 0;
do
{
v15 = 0;
data = v11->list.list[v14].data;
if ( v3 <= 0 )
goto LABEL_25;
p_data = (const char **)&list->data;
while ( idStr::Icmp(s1: data, s2: *p_data) != 0 )
{
++v15;
p_data += 8;
if ( v15 >= v3 )
goto LABEL_25;
}
if ( v15 >= v3 )
{
LABEL_25:
idLib::Printf(fmt: "File '%s' is unreferenced. Deleting...\n", data);
++v12;
}
++v13;
++v14;
}
while ( v13 < v11->list.num );
}
idLib::Printf(fmt: "Removed %d unreferenced voice tracks.\n", v12);
common->SetRefreshOnPrint(this: common, a2: false);
if ( (v20.listStatic == 0 || v20.listStatic == 2) && list != nullptr )
{
if ( size > 0 )
{
v18 = list;
for ( i = size; i != 0; --i )
idStr::FreeData(this: v18++);
}
idMem::Free(this: &mem, ptr: list, align: ALIGN_16);
}
}
// ========================================================================
// __unwind$221775
// EA : 0x8262E4B0
// RVA : 0x0062E4B0
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
void _unwind_221775()
{
int v0; // r12
idList<idStr,99>::~idList<idStr,99>(this: (idList<idStr,5> *)(v0 - 272 + 96));
}
// ========================================================================
// __unwind$221776
// EA : 0x8262E4D8
// RVA : 0x0062E4D8
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
void _unwind_221776()
{
int v0; // r12
idStrStatic<260>::~idStrStatic<260>(this: (idStr *)(v0 - 272 + 112));
}
// ========================================================================
// ?AddTrack@idDeclVoiceOver@@QAA_NPAVidVoiceTrack@@@Z
// EA : 0x8262E500
// RVA : 0x0062E500
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
int __fastcall idDeclVoiceOver::AddTrack(idDeclVoiceOver *this, idSpawnArea::GeneratedPosition *vtrack)
{
int v4; // r29
int v5; // r30
idList<idSpawnArea::GeneratedPosition *,5> *p_tracks; // r31
int granularity; // r4
int size; // r11
bool v9; // cr58
signed int v11; // r10
int v12; // r4
int v13; // r11
int num; // r11
v4 = 0;
if ( this->tracks.num <= 0 )
{
LABEL_5:
p_tracks = (idList<idSpawnArea::GeneratedPosition *,5> *)&this->tracks;
if ( p_tracks->list != nullptr )
goto LABEL_9;
granularity = p_tracks->granularity;
if ( granularity <= 0 )
granularity = 1;
if ( idList<idNavSpline *,5>::Resize(this: p_tracks, newsize: granularity) )
{
LABEL_9:
size = p_tracks->size;
if ( p_tracks->num != size )
goto LABEL_21;
if ( forceIdListsToReallocateEveryAppend )
{
v9 = !idList<idNavSpline *,5>::Resize(this: p_tracks, newsize: size + 1);
}
else
{
v11 = p_tracks->granularity;
if ( p_tracks->granularity != 0 )
{
v13 = size + v11;
__twllei(v11, 0);
__twlgei(v11 & ~(__ROL4__(v13, 1) - 1), 0xFFFFFFFF);
v9 = !idList<idNavSpline *,5>::Resize(this: p_tracks, newsize: v13 - v13 % v11);
}
else
{
v12 = 2 * size;
if ( 2 * size >= size )
{
if ( v12 == 0 )
v12 = 1;
v9 = !idList<idNavSpline *,5>::Resize(this: p_tracks, newsize: v12);
}
else
{
v9 = !idList<idNavSpline *,5>::Resize(this: p_tracks, newsize: 0x7FFFFFFF);
}
}
}
if ( !v9 )
{
LABEL_21:
num = p_tracks->num;
if ( num < p_tracks->size )
{
p_tracks->list[num] = vtrack;
++p_tracks->num;
}
}
}
return 1;
}
else
{
v5 = 0;
while ( idStr::Icmp(s1: this->tracks.list[v5]->name.str, s2: (const char *)LODWORD(vtrack->position.z)) != 0 )
{
++v4;
++v5;
if ( v4 >= this->tracks.num )
goto LABEL_5;
}
return 0;
}
}
// ========================================================================
// `dynamic initializer for 'reloadVoiceOvers_v''
// EA : 0x833372E0
// RVA : 0x013372E0
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
idCommandLink *_dynamic_initializer_for__reloadVoiceOvers_v__()
{
return idCommandLink::idCommandLink(
this: &reloadVoiceOvers_v,
cmdName: "reloadVoiceOvers",
function: reloadVoiceOvers_f,
description: "reload changed voice overs, add 'force' as a parameter to force regeneration of all voice overs",
argCompletion: nullptr);
}
// ========================================================================
// `dynamic initializer for 'listCustomizedVoiceTracks_v''
// EA : 0x83337308
// RVA : 0x01337308
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
idCommandLink *_dynamic_initializer_for__listCustomizedVoiceTracks_v__()
{
return idCommandLink::idCommandLink(
this: &listCustomizedVoiceTracks_v,
cmdName: "listCustomizedVoiceTracks",
function: listCustomizedVoiceTracks_f,
description: "lists referenced voice tracks that have been modified since phoneme to viseme generation.",
argCompletion: nullptr);
}
// ========================================================================
// `dynamic initializer for 'listStaleVoiceTracks_v''
// EA : 0x83337330
// RVA : 0x01337330
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
idCommandLink *_dynamic_initializer_for__listStaleVoiceTracks_v__()
{
return idCommandLink::idCommandLink(
this: &listStaleVoiceTracks_v,
cmdName: "listStaleVoiceTracks",
function: listStaleVoiceTracks_f,
description: "lists voice tracks that have not been regenerated since their source text or sound shader were changed",
argCompletion: nullptr);
}
// ========================================================================
// `dynamic initializer for 'removeUnreferencedVoiceTracks_v''
// EA : 0x83337358
// RVA : 0x01337358
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.cpp
// ========================================================================
idCommandLink *_dynamic_initializer_for__removeUnreferencedVoiceTracks_v__()
{
return idCommandLink::idCommandLink(
this: &removeUnreferencedVoiceTracks_v,
cmdName: "removeUnreferencedVoiceTracks",
function: removeUnreferencedVoiceTracks_f,
description: "Deletes voice tracks (.vtr) files that are not referenced by any voice over decls",
argCompletion: nullptr);
}
@@ -0,0 +1,29 @@
// ========================================================================
// ?GetTrack@idDeclVoiceOver@@QBAPBVidVoiceTrack@@H@Z
// EA : 0x8262D3E8
// RVA : 0x0062D3E8
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.h
// ========================================================================
const idVoiceTrack *__fastcall idDeclVoiceOver::GetTrack(idDeclVoiceOver *this, int index)
{
if ( index < 0 || index >= this->tracks.num )
return nullptr;
else
return this->tracks.list[index];
}
// ========================================================================
// ?GetDeclInfo@idDeclVoiceOver@@UBAPAVidDeclInfo@@XZ
// EA : 0x8262D908
// RVA : 0x0062D908
// PDB : w:\tech5\engine\decls\voiceovers\declvoiceover.h
// ========================================================================
idDeclInfoTemplate<idDeclVoiceOver> *__fastcall idDeclVoiceOver::GetDeclInfo(idDeclVoiceOver *this)
{
return &idDeclVoiceOver::resourceList;
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More