Match CCubeModel constructor, symbol fixes

This commit is contained in:
Phillip Stephens
2026-01-14 16:50:25 -08:00
parent 26b9dfa58f
commit 4ec9ffc705
9 changed files with 198 additions and 50 deletions
+128 -1
View File
@@ -18146,7 +18146,134 @@ __vt__14CScriptCounter = .data:0x803DAEF0; // type:object size:0x20 scope:global
@290 = .data:0x803DAF10; // type:object size:0x24 scope:local
lbl_803DAF38 = .data:0x803DAF38; // type:object size:0x10
lbl_803DAF48 = .data:0x803DAF48; // type:object size:0x10
lbl_803DAF58 = .data:0x803DAF58; // type:object size:0xD74 data:4byte
...data.0 = .data:0x803DAF58; // type:label scope:local
gkStateNames = .data:0x803DAF58; // type:object size:0xDC data:4byte
lbl_803DB034 = .data:0x803DB034; // type:object size:0xC
lbl_803DB040 = .data:0x803DB040; // type:object size:0xC
lbl_803DB04C = .data:0x803DB04C; // type:object size:0xC
lbl_803DB058 = .data:0x803DB058; // type:object size:0xC
lbl_803DB064 = .data:0x803DB064; // type:object size:0xC
lbl_803DB070 = .data:0x803DB070; // type:object size:0xC
lbl_803DB07C = .data:0x803DB07C; // type:object size:0xC
lbl_803DB088 = .data:0x803DB088; // type:object size:0xC
lbl_803DB094 = .data:0x803DB094; // type:object size:0xC
lbl_803DB0A0 = .data:0x803DB0A0; // type:object size:0xC
lbl_803DB0AC = .data:0x803DB0AC; // type:object size:0xC
lbl_803DB0B8 = .data:0x803DB0B8; // type:object size:0xC
lbl_803DB0C4 = .data:0x803DB0C4; // type:object size:0xC
lbl_803DB0D0 = .data:0x803DB0D0; // type:object size:0xC
lbl_803DB0DC = .data:0x803DB0DC; // type:object size:0xC
lbl_803DB0E8 = .data:0x803DB0E8; // type:object size:0xC
lbl_803DB0F4 = .data:0x803DB0F4; // type:object size:0xC
lbl_803DB100 = .data:0x803DB100; // type:object size:0xC
lbl_803DB10C = .data:0x803DB10C; // type:object size:0xC
lbl_803DB118 = .data:0x803DB118; // type:object size:0xC
lbl_803DB124 = .data:0x803DB124; // type:object size:0xC
lbl_803DB130 = .data:0x803DB130; // type:object size:0xC
lbl_803DB13C = .data:0x803DB13C; // type:object size:0xC
lbl_803DB148 = .data:0x803DB148; // type:object size:0xC
lbl_803DB154 = .data:0x803DB154; // type:object size:0xC
lbl_803DB160 = .data:0x803DB160; // type:object size:0xC
lbl_803DB16C = .data:0x803DB16C; // type:object size:0xC
lbl_803DB178 = .data:0x803DB178; // type:object size:0xC
lbl_803DB184 = .data:0x803DB184; // type:object size:0xC
lbl_803DB190 = .data:0x803DB190; // type:object size:0xC
lbl_803DB19C = .data:0x803DB19C; // type:object size:0xC
lbl_803DB1A8 = .data:0x803DB1A8; // type:object size:0xC
lbl_803DB1B4 = .data:0x803DB1B4; // type:object size:0xC
lbl_803DB1C0 = .data:0x803DB1C0; // type:object size:0xC
lbl_803DB1CC = .data:0x803DB1CC; // type:object size:0xC
lbl_803DB1D8 = .data:0x803DB1D8; // type:object size:0xC
lbl_803DB1E4 = .data:0x803DB1E4; // type:object size:0xC
lbl_803DB1F0 = .data:0x803DB1F0; // type:object size:0xC
lbl_803DB1FC = .data:0x803DB1FC; // type:object size:0xC
lbl_803DB208 = .data:0x803DB208; // type:object size:0xC
lbl_803DB214 = .data:0x803DB214; // type:object size:0xC
lbl_803DB220 = .data:0x803DB220; // type:object size:0xC
lbl_803DB22C = .data:0x803DB22C; // type:object size:0xC
lbl_803DB238 = .data:0x803DB238; // type:object size:0xC
lbl_803DB244 = .data:0x803DB244; // type:object size:0xC
lbl_803DB250 = .data:0x803DB250; // type:object size:0xC
lbl_803DB25C = .data:0x803DB25C; // type:object size:0xC
lbl_803DB268 = .data:0x803DB268; // type:object size:0xC
lbl_803DB274 = .data:0x803DB274; // type:object size:0xC
lbl_803DB280 = .data:0x803DB280; // type:object size:0xC
lbl_803DB28C = .data:0x803DB28C; // type:object size:0xC
lbl_803DB298 = .data:0x803DB298; // type:object size:0xC
lbl_803DB2A4 = .data:0x803DB2A4; // type:object size:0xC
lbl_803DB2B0 = .data:0x803DB2B0; // type:object size:0xC
lbl_803DB2BC = .data:0x803DB2BC; // type:object size:0xC
gkStateFuncs = .data:0x803DB2C8; // type:object size:0x294
gkTriggerNames = .data:0x803DB55C; // type:object size:0x110
lbl_803DB66C = .data:0x803DB66C; // type:object size:0xC
lbl_803DB678 = .data:0x803DB678; // type:object size:0xC
lbl_803DB684 = .data:0x803DB684; // type:object size:0xC
lbl_803DB690 = .data:0x803DB690; // type:object size:0xC
lbl_803DB69C = .data:0x803DB69C; // type:object size:0xC
lbl_803DB6A8 = .data:0x803DB6A8; // type:object size:0xC
lbl_803DB6B4 = .data:0x803DB6B4; // type:object size:0xC
lbl_803DB6C0 = .data:0x803DB6C0; // type:object size:0xC
lbl_803DB6CC = .data:0x803DB6CC; // type:object size:0xC
lbl_803DB6D8 = .data:0x803DB6D8; // type:object size:0xC
lbl_803DB6E4 = .data:0x803DB6E4; // type:object size:0xC
lbl_803DB6F0 = .data:0x803DB6F0; // type:object size:0xC
lbl_803DB6FC = .data:0x803DB6FC; // type:object size:0xC
lbl_803DB708 = .data:0x803DB708; // type:object size:0xC
lbl_803DB714 = .data:0x803DB714; // type:object size:0xC
lbl_803DB720 = .data:0x803DB720; // type:object size:0xC
lbl_803DB72C = .data:0x803DB72C; // type:object size:0xC
lbl_803DB738 = .data:0x803DB738; // type:object size:0xC
lbl_803DB744 = .data:0x803DB744; // type:object size:0xC
lbl_803DB750 = .data:0x803DB750; // type:object size:0xC
lbl_803DB75C = .data:0x803DB75C; // type:object size:0xC
lbl_803DB768 = .data:0x803DB768; // type:object size:0xC
lbl_803DB774 = .data:0x803DB774; // type:object size:0xC
lbl_803DB780 = .data:0x803DB780; // type:object size:0xC
lbl_803DB78C = .data:0x803DB78C; // type:object size:0xC
lbl_803DB798 = .data:0x803DB798; // type:object size:0xC
lbl_803DB7A4 = .data:0x803DB7A4; // type:object size:0xC
lbl_803DB7B0 = .data:0x803DB7B0; // type:object size:0xC
lbl_803DB7BC = .data:0x803DB7BC; // type:object size:0xC
lbl_803DB7C8 = .data:0x803DB7C8; // type:object size:0xC
lbl_803DB7D4 = .data:0x803DB7D4; // type:object size:0xC
lbl_803DB7E0 = .data:0x803DB7E0; // type:object size:0xC
lbl_803DB7EC = .data:0x803DB7EC; // type:object size:0xC
lbl_803DB7F8 = .data:0x803DB7F8; // type:object size:0xC
lbl_803DB804 = .data:0x803DB804; // type:object size:0xC
lbl_803DB810 = .data:0x803DB810; // type:object size:0xC
lbl_803DB81C = .data:0x803DB81C; // type:object size:0xC
lbl_803DB828 = .data:0x803DB828; // type:object size:0xC
lbl_803DB834 = .data:0x803DB834; // type:object size:0xC
lbl_803DB840 = .data:0x803DB840; // type:object size:0xC
lbl_803DB84C = .data:0x803DB84C; // type:object size:0xC
lbl_803DB858 = .data:0x803DB858; // type:object size:0xC
lbl_803DB864 = .data:0x803DB864; // type:object size:0xC
lbl_803DB870 = .data:0x803DB870; // type:object size:0xC
lbl_803DB87C = .data:0x803DB87C; // type:object size:0xC
lbl_803DB888 = .data:0x803DB888; // type:object size:0xC
lbl_803DB894 = .data:0x803DB894; // type:object size:0xC
lbl_803DB8A0 = .data:0x803DB8A0; // type:object size:0xC
lbl_803DB8AC = .data:0x803DB8AC; // type:object size:0xC
lbl_803DB8B8 = .data:0x803DB8B8; // type:object size:0xC
lbl_803DB8C4 = .data:0x803DB8C4; // type:object size:0xC
lbl_803DB8D0 = .data:0x803DB8D0; // type:object size:0xC
lbl_803DB8DC = .data:0x803DB8DC; // type:object size:0xC
lbl_803DB8E8 = .data:0x803DB8E8; // type:object size:0xC
lbl_803DB8F4 = .data:0x803DB8F4; // type:object size:0xC
lbl_803DB900 = .data:0x803DB900; // type:object size:0xC
lbl_803DB90C = .data:0x803DB90C; // type:object size:0xC
lbl_803DB918 = .data:0x803DB918; // type:object size:0xC
lbl_803DB924 = .data:0x803DB924; // type:object size:0xC
lbl_803DB930 = .data:0x803DB930; // type:object size:0xC
lbl_803DB93C = .data:0x803DB93C; // type:object size:0xC
lbl_803DB948 = .data:0x803DB948; // type:object size:0xC
lbl_803DB954 = .data:0x803DB954; // type:object size:0xC
lbl_803DB960 = .data:0x803DB960; // type:object size:0xC
lbl_803DB96C = .data:0x803DB96C; // type:object size:0xC
lbl_803DB978 = .data:0x803DB978; // type:object size:0xC
lbl_803DB984 = .data:0x803DB984; // type:object size:0xC
lbl_803DB990 = .data:0x803DB990; // type:object size:0xC
gkTriggerFuncs = .data:0x803DB99C; // type:object size:0x330
__vt__3CAi = .data:0x803DBCCC; // type:object size:0x294
__vt__19TCastToPtr<6CActor> = .data:0x803DBF60; // type:object size:0xEC scope:weak
__vt__18TCastToPtr<5CBomb> = .data:0x803DC04C; // type:object size:0xEC scope:weak
+4 -2
View File
@@ -6,6 +6,7 @@ class CMaterialList;
class CCollisionInfoList;
class CVector3f;
class CSphere;
class CMRay;
namespace CollisionUtil {
@@ -18,11 +19,12 @@ bool AABoxAABoxIntersection(const CAABox& left, const CAABox& right);
bool AABoxAABoxIntersection(const CAABox& left, const CMaterialList& leftFilter,
const CAABox& right, const CMaterialList& rightFilter,
CCollisionInfoList& list);
int RayAABoxIntersection(const CMRay& ray, const CAABox& box, CVector3f& dir, float& penetration);
bool AABox_AABox_Moving(const CAABox& left, const CAABox& right, const CVector3f& dir, double& d,
CVector3f& point, CVector3f& normal);
bool MovingSphereAABox(const CSphere& sphere, const CAABox& aabb, const CVector3f& dir, double& dOut,
CVector3f& point, CVector3f& normal);
bool MovingSphereAABox(const CSphere& sphere, const CAABox& aabb, const CVector3f& dir,
double& dOut, CVector3f& point, CVector3f& normal);
} // namespace CollisionUtil
+24 -23
View File
@@ -52,7 +52,7 @@ void __insertion_sort(It first, It last, Cmp cmp) {
}
template < typename T, class Cmp >
void __sort3(T& a, T& b, T& c, Cmp comp) {
void __sort3(T& a, T& b, T& c, const Cmp comp) {
if (comp(b, a)) {
swap(a, b);
}
@@ -71,28 +71,29 @@ void __sort3(T& a, T& b, T& c, Cmp comp) {
template < typename It, class Cmp >
void sort(It first, It last, Cmp cmp) {
int count = last - first; // use distance?
if (count > 1) {
if (count > 20) {
__insertion_sort(first, last, cmp);
} else {
It pivot = first + count / 2;
It end = last;
__sort3(*first, *pivot, *--end, cmp);
typename iterator_traits< It >::value_type value = *pivot;
It it = first + 1;
--end;
while (true) {
while (cmp(*it, value))
++it;
while (cmp(value, *end))
--end;
if (it >= end)
break;
iter_swap(it++, end--);
}
sort(first, it, cmp);
sort(it, last, cmp);
if (count <= 1) {
return;
}
if (20 >= count) {
__insertion_sort(first, last, cmp);
} else {
It pivot = first + count / 2;
It end = last;
__sort3(*first, *pivot, *--end, cmp);
typename iterator_traits< It >::value_type value = *pivot;
It it = first + 1;
--end;
while (true) {
while (cmp(*it, value))
++it;
while (cmp(value, *end))
--end;
if (it >= end)
break;
iter_swap(it++, end--);
}
sort(first, it, cmp);
sort(it, last, cmp);
}
}
@@ -207,7 +208,7 @@ typename T::iterator inline find_by_key_nc(
}
template < typename T, class Cmp >
inline void sort_by_key(T& container, Cmp cmp) {
inline void sort_by_key(T& container, const Cmp& cmp) {
sort(container.begin(), container.end(), pair_sorter_finder< typename T::value_type, Cmp >(cmp));
}
+18 -7
View File
@@ -1,9 +1,14 @@
#include "Collision/COBBox.hpp"
#include "Kyoto/Streams/CInputStream.hpp"
#include "Collision/CMRay.hpp"
#include "Collision/CollisionUtil.hpp"
COBBox::COBBox(const CTransform4f& xf, const CVector3f& extents)
: mTransform(xf), mExtents(extents) {}
#include <Kyoto/Streams/CInputStream.hpp>
#include <Kyoto/Math/CMatrix3f.hpp>
#include <math.h>
COBBox::COBBox(const CTransform4f& xf, const CVector3f& mExtents)
: mTransform(xf), mExtents(mExtents) {}
COBBox::COBBox(CInputStream& in) : mTransform(in), mExtents(in) {}
@@ -13,15 +18,21 @@ CAABox COBBox::CalculateAABox(const CTransform4f& xf) const {
COBBox COBBox::FromAABox(const CAABox& box, const CTransform4f& xf) {
CVector3f center = box.GetCenterPoint();
CVector3f extents = box.GetMaxPoint() - center;
CVector3f mExtents = box.GetMaxPoint() - center;
CTransform4f finalTransform = xf * CTransform4f::Translate(center);
return COBBox(finalTransform, extents);
return COBBox(finalTransform, mExtents);
}
bool COBBox::LineIntersectsBox(const CMRay& ray, float& penetration) const { return false; }
bool COBBox::LineIntersectsBox(const CMRay& ray, float& penetration) const {
CAABox box(-mExtents, mExtents);
CMRay unscaledRay = ray.GetInvUnscaledTransformRay(mTransform);
CVector3f direction = CVector3f::Zero();
return CollisionUtil::RayAABoxIntersection(unscaledRay, box, direction, penetration) != 0;
}
bool COBBox::AABoxIntersectsBox(const CAABox& box) const {
return OBBIntersectsBox(FromAABox(box, CTransform4f::Identity()));
}
bool COBBox::OBBIntersectsBox(const COBBox& box) const { return false; }
bool COBBox::OBBIntersectsBox(const COBBox& other) const {
}
+13 -9
View File
@@ -27,18 +27,22 @@ CCubeModel::CCubeModel(rstl::vector< void* >* surfaces,
, x40_25_visible(false)
, x41_visorFlags(visorFlags)
, x44_idx(idx) {
for (AUTO(it, x0_instance.Surfaces().begin()); it != x0_instance.Surfaces().end(); ++it) {
static_cast< CCubeSurface::SSurfaceData* >(*it)->mParent = this;
rstl::vector< void* >& surf = x0_instance.Surfaces();
for (AUTO(it, surf.begin()); it != surf.end(); ++it) {
CCubeSurface::SSurfaceData* data = static_cast< CCubeSurface::SSurfaceData* >(*it);
data->mParent = this;
}
for (int i = x0_instance.Surfaces().size(); i > 0; i--) {
CCubeSurface surf(x0_instance.Surfaces()[i - 1]);
if (GetMaterialByIndex(surf.GetMaterialIndex()).IsFlagSet(kStateFlag_DepthSorting)) {
surf.x0_data->mNextSurface = x3c_firstSorted.x0_data;
x3c_firstSorted.x0_rawdata = surf.x0_rawdata;
for (int i = surf.size(); i > 0; i--) {
void*& data = surf[i - 1];
uint materialIndex = static_cast< CCubeSurface::SSurfaceData* >(data)->mMaterialIndex;
if (GetMaterialByIndex(materialIndex).IsFlagSet(kStateFlag_DepthSorting)) {
static_cast< CCubeSurface::SSurfaceData* >(data)->mNextSurface = x3c_firstSorted.x0_rawdata;
x3c_firstSorted.x0_rawdata = static_cast< uchar* >(data);
} else {
surf.x0_data->mNextSurface = x38_firstUnsorted.x0_data;
x38_firstUnsorted.x0_rawdata = surf.x0_rawdata;
static_cast< CCubeSurface::SSurfaceData* >(data)->mNextSurface =
x38_firstUnsorted.x0_rawdata;
x38_firstUnsorted.x0_rawdata = static_cast< uchar* >(data);
}
}
}
+8 -5
View File
@@ -45,17 +45,20 @@ private:
};
bool area_sorter::operator()(const CGameArea* a, const CGameArea* b) const {
if (a->GetId() == b->GetId()) {
TAreaId aId = a->GetId();
TAreaId bId = b->GetId();
if (aId == bId) {
return false;
}
if (visAreaId == a->GetId()) {
if (aId == visAreaId) {
return false;
}
if (visAreaId == b->GetId()) {
if (b->GetId() == visAreaId) {
return true;
}
return CVector3f::Dot(reference, a->GetAABB().GetCenterPoint()) >
CVector3f::Dot(reference, b->GetAABB().GetCenterPoint());
const float aDot = CVector3f::Dot(reference, a->GetAABB().GetCenterPoint());
const float bDot = CVector3f::Dot(reference, b->GetAABB().GetCenterPoint());
return aDot > bDot;
}
} // namespace
+1 -1
View File
@@ -16,7 +16,7 @@
namespace {
struct cstr_less {
const bool operator()(const char* a, const char* b) const { return (strcmp(a, b) < 0); }
bool operator()(const char* a, const char* b) const { return (strcmp(a, b) < 0); }
};
} // namespace
+1 -1
View File
@@ -19,7 +19,7 @@ public:
AssetIdSorter() {}
bool operator()(const rstl::pair< CAssetId, CAssetId >& a,
const rstl::pair< CAssetId, CAssetId >& b) {
const rstl::pair< CAssetId, CAssetId >& b) const {
return a.first < b.first;
}
};
@@ -211,7 +211,7 @@ public:
CRingSorter(CStateManager* mgr) : mgr(mgr) {}
bool operator()(const CScriptSpecialFunction::SRingController& a,
const CScriptSpecialFunction::SRingController& b) {
const CScriptSpecialFunction::SRingController& b) const {
const CActor* actA = TCastToConstPtr< CActor >(mgr->GetObjectById(a.x0_id));
const CActor* actB = TCastToConstPtr< CActor >(mgr->GetObjectById(b.x0_id));
if (actA && actB) {