Moved API to SWA submodule (#1326)

* Remove API sources

* Add SWA submodule
This commit is contained in:
Hyper 2025-03-29 18:25:24 +00:00 committed by GitHub
parent 3d38fc1799
commit 6a50f9fc1f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
155 changed files with 4 additions and 4826 deletions

3
.gitmodules vendored
View file

@ -58,3 +58,6 @@
[submodule "thirdparty/json"] [submodule "thirdparty/json"]
path = thirdparty/json path = thirdparty/json
url = https://github.com/nlohmann/json url = https://github.com/nlohmann/json
[submodule "UnleashedRecomp/api"]
path = UnleashedRecomp/api
url = https://github.com/hedge-dev/SWA.git

View file

@ -441,35 +441,6 @@ compile_pixel_shader(resolve_msaa_depth_2x)
compile_pixel_shader(resolve_msaa_depth_4x) compile_pixel_shader(resolve_msaa_depth_4x)
compile_pixel_shader(resolve_msaa_depth_8x) compile_pixel_shader(resolve_msaa_depth_8x)
function(generate_aggregate_header INPUT_DIRECTORY OUTPUT_FILE)
get_filename_component(ABS_OUTPUT_FILE "${OUTPUT_FILE}" ABSOLUTE)
file(GLOB_RECURSE HEADER_FILES "${INPUT_DIRECTORY}/*.h")
set(HEADER_CONTENT "#pragma once\n\n")
foreach(HEADER_FILE IN LISTS HEADER_FILES)
get_filename_component(ABS_HEADER_FILE "${HEADER_FILE}" ABSOLUTE)
if (ABS_HEADER_FILE STREQUAL ABS_OUTPUT_FILE)
continue()
endif()
file(RELATIVE_PATH RELATIVE_HEADER_FILE "${INPUT_DIRECTORY}" "${HEADER_FILE}")
string(APPEND HEADER_CONTENT "#include \"${RELATIVE_HEADER_FILE}\"\n")
endforeach()
if (EXISTS "${OUTPUT_FILE}")
file(READ "${OUTPUT_FILE}" EXISTING_CONTENT)
if (EXISTING_CONTENT STREQUAL HEADER_CONTENT)
return()
endif()
endif()
file(WRITE "${OUTPUT_FILE}" "${HEADER_CONTENT}")
endfunction()
generate_aggregate_header(
"${CMAKE_CURRENT_SOURCE_DIR}/api"
"${CMAKE_CURRENT_SOURCE_DIR}/api/SWA.h"
)
set(RESOURCES_SOURCE_PATH "${PROJECT_SOURCE_DIR}/../UnleashedRecompResources") set(RESOURCES_SOURCE_PATH "${PROJECT_SOURCE_DIR}/../UnleashedRecompResources")
set(RESOURCES_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/res") set(RESOURCES_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/res")

1
UnleashedRecomp/api Submodule

@ -0,0 +1 @@
Subproject commit f299dd8cf272a0110c91e54e2b6e308a2d897966

View file

@ -1,6 +0,0 @@
#pragma once
namespace Chao::CSD
{
class CBase {};
}

View file

@ -1,8 +0,0 @@
#pragma once
#include <SWA.inl>
namespace Chao::CSD
{
class CMotionPattern : CBase {};
}

View file

@ -1,34 +0,0 @@
#pragma once
#include <SWA.inl>
#include <CSD/Manager/csdmBase.h>
#include <CSD/Manager/csdmResourceBase.h>
#include <CSD/Manager/csdmNodeObserver.h>
#include <CSD/Manager/csdmSubjectBase.h>
#include <Hedgehog/Math/Vector.h>
namespace Chao::CSD
{
struct Node;
class CNode : public CResourceBase<Node>, SubjectBase<CNodeObserver, CNode>, CBase
{
public:
SWA_INSERT_PADDING(0x34);
xpointer<CMotionPattern> m_pMotionPattern;
SWA_INSERT_PADDING(0x18);
~CNode();
void SetText(const char* in_pText);
void SetText(const wchar_t* in_pText);
void GetPosition(Hedgehog::Math::CVector2& out_rResult) const;
void SetPosition(float in_X, float in_Y);
void SetHideFlag(uint32_t in_HideFlag);
void SetRotation(float in_Rotation);
void SetScale(float in_X, float in_Y);
void SetPatternIndex(uint32_t in_PatternIndex);
};
}
#include <CSD/Manager/csdmNode.inl>

View file

@ -1,49 +0,0 @@
#include "SWA.inl"
namespace Chao::CSD
{
inline CNode::~CNode()
{
SWA_VIRTUAL_FUNCTION(void, 0, this);
}
inline void CNode::SetText(const char* in_pText)
{
GuestToHostFunction<int>(sub_830BF640, this, in_pText);
}
inline void CNode::SetText(const wchar_t* in_pText)
{
GuestToHostFunction<int>(sub_830BF640, this, in_pText);
}
inline void CNode::GetPosition(Hedgehog::Math::CVector2& out_rResult) const
{
GuestToHostFunction<void>(sub_830BF008, &out_rResult, this);
}
inline void CNode::SetPosition(float in_X, float in_Y)
{
GuestToHostFunction<int>(sub_830BF078, this, in_X, in_Y);
}
inline void CNode::SetHideFlag(uint32_t in_HideFlag)
{
GuestToHostFunction<int>(sub_830BF080, this, in_HideFlag);
}
inline void CNode::SetRotation(float in_Rotation)
{
GuestToHostFunction<int>(sub_830BF088, this, in_Rotation);
}
inline void CNode::SetScale(float in_X, float in_Y)
{
GuestToHostFunction<int>(sub_830BF090, this, in_X, in_Y);
}
inline void CNode::SetPatternIndex(uint32_t in_PatternIndex)
{
GuestToHostFunction<int>(sub_830BF300, this, in_PatternIndex);
}
}

View file

@ -1,10 +0,0 @@
#pragma once
#include "CSD/Manager/csdmObserverBase.h"
namespace Chao::CSD
{
class CNode;
class CNodeObserver : public CObserverBase<CNode> {};
}

View file

@ -1,23 +0,0 @@
#pragma once
#include "SWA.inl"
namespace Chao::CSD
{
template<typename TObservee>
class CObserverBase
{
public:
struct Vftable
{
be<uint32_t> m_fpDtor;
};
xpointer<Vftable> m_pVftable;
SWA_INSERT_PADDING(0x08);
~CObserverBase();
};
}
#include "CSD/Manager/csdmObserverBase.inl"

View file

@ -1,8 +0,0 @@
namespace Chao::CSD
{
template<typename TObservee>
inline CObserverBase<TObservee>::~CObserverBase()
{
GuestToHostFunction<void>(m_pVftable->m_fpDtor, this);
}
}

View file

@ -1,31 +0,0 @@
#pragma once
#include "SWA.inl"
#include "CSD/Manager/csdmBase.h"
#include "CSD/Manager/csdmResourceBase.h"
namespace Chao::CSD
{
struct Project;
class CProject;
class CScene;
class CTexList;
class CProject : public CResourceBase<Project>, CBase
{
public:
SWA_INSERT_PADDING(0x1C);
RCPtr<CTexList> m_rcTexList;
SWA_INSERT_PADDING(0x1C);
RCPtr<CScene> CreateScene(const char* in_pName) const;
RCPtr<CScene> CreateScene(const char* in_pName, const char* in_pMotionName) const;
void DestroyScene(CScene* in_pScene);
void DestroyScene(RCPtr<CScene>& inout_rcScene);
static void DestroyScene(CProject* in_pProject, RCPtr<CScene>& inout_rcScene);
};
}
#include "CSD/Manager/csdmProject.inl"

View file

@ -1,40 +0,0 @@
#include "kernel/function.h"
namespace Chao::CSD
{
inline RCPtr<CScene> CProject::CreateScene(const char* in_pName) const
{
RCPtr<CScene> rcScene;
GuestToHostFunction<void>(sub_830BEE00, this, rcScene, in_pName, nullptr);
return rcScene;
}
inline RCPtr<CScene> CProject::CreateScene(const char* in_pName, const char* in_pMotionName) const
{
RCPtr<CScene> rcScene;
GuestToHostFunction<void>(sub_830BECE0, this, rcScene, in_pName, in_pMotionName, nullptr);
return rcScene;
}
inline void CProject::DestroyScene(CScene* in_pScene)
{
GuestToHostFunction<void>(sub_830BE298, this, in_pScene);
}
inline void CProject::DestroyScene(RCPtr<CScene>& inout_rcScene)
{
if (!inout_rcScene)
return;
DestroyScene(inout_rcScene.Get());
inout_rcScene = nullptr;
}
inline void CProject::DestroyScene(CProject* in_pProject, RCPtr<CScene>& inout_rcScene)
{
if (in_pProject)
in_pProject->DestroyScene(inout_rcScene);
else
inout_rcScene = nullptr;
}
}

View file

@ -1,28 +0,0 @@
#pragma once
#include "CSD/Manager/csdmRCPtrAbs.h"
namespace Chao::CSD
{
class RCPtrAbs::RCObject
{
public:
struct Vftable
{
be<uint32_t> m_fpDtor;
be<uint32_t> m_fpDeallocate;
};
xpointer<Vftable> m_pVftable;
xpointer<void> m_pMemory;
be<uint32_t> m_RefCount;
xpointer<void> m_pDealloctor;
be<uint32_t> m_eDealloctor;
~RCObject();
void Deallocate(void* in_pMemory);
void Release();
};
}
#include "CSD/Manager/csdmRCObject.inl"

View file

@ -1,35 +0,0 @@
namespace Chao::CSD
{
inline RCPtrAbs::RCObject::~RCObject()
{
GuestToHostFunction<void>(m_pVftable->m_fpDtor, this);
}
inline RCPtrAbs::~RCPtrAbs()
{
RCPtrAbs::RCObject* pObj = m_pObject;
m_pObject = nullptr;
if (pObj)
pObj->Release();
}
inline void* RCPtrAbs::GetAbs() const
{
if (!m_pObject)
return nullptr;
return m_pObject->m_pMemory;
}
inline void RCPtrAbs::RCObject::Deallocate(void* in_pMemory)
{
GuestToHostFunction<void>(m_pVftable->m_fpDeallocate, this, in_pMemory);
}
inline void RCPtrAbs::RCObject::Release()
{
GuestToHostFunction<void>(sub_830BA068, this);
}
}

View file

@ -1,9 +0,0 @@
#pragma once
#include "CSD/Manager/csdmRCPtr.h"
namespace Chao::CSD
{
template<typename T>
class RCPtr<T>::RCObjectImp : public RCObject {};
}

View file

@ -1,14 +0,0 @@
namespace Chao::CSD
{
template<typename T>
void RCPtr<T>::RCObjectImp::Deallocate(void* in_pMemory)
{
// delete static_cast<T*>(in_pMemory);
}
template<typename T>
RCPtrAbs::RCObject* RCPtr<T>::CreateRCObject()
{
return new RCObjectImp();
}
}

View file

@ -1,32 +0,0 @@
#pragma once
#include "CSD/Manager/csdmRCPtrAbs.h"
namespace Chao::CSD
{
template<typename T>
class RCPtr : RCPtrAbs
{
public:
class RCObjectImp;
RCPtr() : RCPtrAbs() {}
RCPtr(T* in_pMemory) : RCPtrAbs(in_pMemory) {}
RCPtr(const RCPtr& in_rOther) : RCPtrAbs(in_rOther) {}
RCPtr(RCPtr&& in_rOther) : RCPtrAbs(std::move(in_rOther)) {}
void Attach(T* in_pObject);
T* Get() const;
void Set(const RCPtr& in_rOther);
T* operator*() const;
T* operator->() const;
RCPtr& operator=(const RCPtr& in_rOther);
operator bool() const;
};
}
#include "CSD/Manager/csdmRCPtr.inl"

View file

@ -1,45 +0,0 @@
namespace Chao::CSD
{
template<typename T>
void RCPtr<T>::Attach(T* in_pObject)
{
RCPtrAbs::AttachAbs(in_pObject);
}
template<typename T>
T* RCPtr<T>::Get() const
{
return static_cast<T*>(RCPtrAbs::GetAbs());
}
template<typename T>
void RCPtr<T>::Set(const RCPtr& in_rOther)
{
RCPtrAbs::SetAbs(in_rOther);
}
template<typename T>
T* RCPtr<T>::operator*() const
{
return Get();
}
template<typename T>
T* RCPtr<T>::operator->() const
{
return Get();
}
template<typename T>
RCPtr<T>& RCPtr<T>::operator=(const RCPtr& in_rOther)
{
Set(in_rOther);
return *this;
}
template<typename T>
RCPtr<T>::operator bool() const
{
return m_pObject != nullptr;
}
}

View file

@ -1,42 +0,0 @@
#pragma once
#include "SWA.inl"
namespace Chao::CSD
{
class RCPtrAbs
{
public:
class RCObject;
struct Vftable
{
be<uint32_t> m_fpDtor;
be<uint32_t> m_fpCreateRCObject;
};
xpointer<Vftable> m_pVftable;
xpointer<RCObject> m_pObject;
RCPtrAbs();
RCPtrAbs(void* in_pMemory);
RCPtrAbs(const RCPtrAbs& in_rOther);
RCPtrAbs(RCPtrAbs&& in_rPtr);
~RCPtrAbs();
RCObject* CreateRCObject();
void AttachAbs(void* in_pMemory);
void* GetAbs() const;
void SetAbs(const RCPtrAbs& in_rPtr);
void* operator*() const;
void* operator->() const;
RCPtrAbs& operator=(const RCPtrAbs& in_rPtr);
operator bool() const;
};
}
#include "CSD/Manager/csdmRCPtrAbs.inl"

View file

@ -1,58 +0,0 @@
namespace Chao::CSD
{
inline RCPtrAbs::RCPtrAbs()
{
AttachAbs(nullptr);
}
inline RCPtrAbs::RCPtrAbs(void* in_pMemory)
{
AttachAbs(in_pMemory);
}
inline RCPtrAbs::RCPtrAbs(const RCPtrAbs& in_rOther)
{
SetAbs(in_rOther);
}
inline RCPtrAbs::RCPtrAbs(RCPtrAbs&& in_rPtr) : m_pObject(in_rPtr.m_pObject)
{
in_rPtr.m_pObject = nullptr;
}
inline RCPtrAbs::RCObject* RCPtrAbs::CreateRCObject()
{
return GuestToHostFunction<RCPtrAbs::RCObject*>(m_pVftable->m_fpCreateRCObject, this);
}
inline void RCPtrAbs::AttachAbs(void* in_pMemory)
{
GuestToHostFunction<void>(sub_830BA298, this, in_pMemory);
}
inline void RCPtrAbs::SetAbs(const RCPtrAbs& in_rPtr)
{
GuestToHostFunction<void>(sub_830BA328, this, in_rPtr);
}
inline void* RCPtrAbs::operator*() const
{
return GetAbs();
}
inline void* RCPtrAbs::operator->() const
{
return GetAbs();
}
inline RCPtrAbs& RCPtrAbs::operator=(const RCPtrAbs& in_rPtr)
{
SetAbs(in_rPtr);
return *this;
}
inline RCPtrAbs::operator bool() const
{
return m_pObject != nullptr;
}
}

View file

@ -1,26 +0,0 @@
#pragma once
#include "CSD/Manager/csdmRCPtr.h"
namespace Chao::CSD
{
template<typename T>
class CResourceBase
{
public:
struct Vftable
{
be<uint32_t> m_fpDtor;
be<uint32_t> m_fpCopyResource;
};
xpointer<Vftable> m_pVftable;
RCPtr<uint8_t> m_rcResourceHolder;
xpointer<T> m_pResource;
~CResourceBase();
void CopyResource(const CResourceBase& in_rOther);
};
}
#include "CSD/Manager/csdmResourceBase.h"

View file

@ -1,15 +0,0 @@
namespace Chao::CSD
{
template<typename T>
inline CResourceBase<T>::~CResourceBase()
{
GuestToHostFunction<void>(m_pVftable->m_fpDtor, this);
}
template<typename T>
inline void CResourceBase<T>::CopyResource(const CResourceBase& in_rOther)
{
m_rcResourceHolder = in_rOther.m_rcResourceHolder;
m_pResource = in_rOther.m_pResource;
}
}

View file

@ -1,53 +0,0 @@
#pragma once
#include "SWA.inl"
#include "CSD/Manager/csdmBase.h"
#include "CSD/Manager/csdmResourceBase.h"
#include "CSD/Manager/csdmSceneObserver.h"
#include "CSD/Manager/csdmSubjectBase.h"
namespace Chao::CSD
{
struct Scene;
class CScene;
class CNode;
enum EMotionRepeatType : uint32_t
{
eMotionRepeatType_PlayOnce = 0,
eMotionRepeatType_Loop = 1,
eMotionRepeatType_PingPong = 2,
eMotionRepeatType_PlayThenDestroy = 3
};
class CScene : public CResourceBase<Scene>, SubjectBase<CSceneObserver, CScene>, CBase
{
public:
SWA_INSERT_PADDING(0x60);
be<float> m_PrevMotionFrame;
be<float> m_MotionFrame;
be<float> m_MotionSpeed;
be<float> m_MotionStartFrame;
be<float> m_MotionEndFrame;
SWA_INSERT_PADDING(0x0C);
be<uint32_t> m_MotionDisableFlag;
SWA_INSERT_PADDING(0x10);
be<EMotionRepeatType> m_MotionRepeatType;
SWA_INSERT_PADDING(0x2C);
~CScene();
void Update(float in_DeltaTime = 0.0f);
void Render(void* in_pUnk);
void GetNode(RCPtr<CNode>& out_rResult, const char* in_pName);
bool SetMotion(const char* in_pName);
void SetMotionFrame(float in_MotionFrame);
void SetPosition(float in_X, float in_Y);
void SetHideFlag(uint32_t in_HideFlag);
void SetRotation(float in_Angle);
void SetScale(float in_X, float in_Y);
};
}
#include "CSD/Manager/csdmScene.inl"

View file

@ -1,53 +0,0 @@
namespace Chao::CSD
{
inline CScene::~CScene()
{
SWA_VIRTUAL_FUNCTION(void, 0, this);
}
inline void CScene::Update(float in_DeltaTime)
{
SWA_VIRTUAL_FUNCTION(void, 2, this, in_DeltaTime);
}
inline void CScene::Render(void* in_pUnk)
{
SWA_VIRTUAL_FUNCTION(void, 3, this, in_pUnk);
}
inline void CScene::GetNode(RCPtr<CNode>& out_rResult, const char* in_pName)
{
GuestToHostFunction<void>(sub_830BCCA8, &out_rResult, this, in_pName);
}
inline bool CScene::SetMotion(const char* in_pName)
{
return GuestToHostFunction<bool>(sub_830BA760, this, in_pName);
}
inline void CScene::SetMotionFrame(float in_MotionFrame)
{
m_PrevMotionFrame = in_MotionFrame;
m_MotionFrame = in_MotionFrame;
}
inline void CScene::SetPosition(float in_X, float in_Y)
{
GuestToHostFunction<void>(sub_830BB550, this, in_X, in_Y);
}
inline void CScene::SetHideFlag(uint32_t in_HideFlag)
{
GuestToHostFunction<void>(sub_830BB378, this, in_HideFlag);
}
inline void CScene::SetRotation(float in_Angle)
{
GuestToHostFunction<void>(sub_830BB5F8, this, in_Angle);
}
inline void CScene::SetScale(float in_X, float in_Y)
{
GuestToHostFunction<void>(sub_830BB650, this, in_X, in_Y);
}
}

View file

@ -1,10 +0,0 @@
#pragma once
#include "CSD/Manager/csdmObserverBase.h"
namespace Chao::CSD
{
class CScene;
class CSceneObserver : public CObserverBase<CScene> {};
}

View file

@ -1,25 +0,0 @@
#pragma once
#include "SWA.inl"
namespace Chao::CSD
{
template<typename TObserver, typename TObservee>
class SubjectBase
{
public:
struct Vftable
{
be<uint32_t> m_fpDtor;
be<uint32_t> m_fpGetObservee;
};
xpointer<Vftable> m_pVftable;
SWA_INSERT_PADDING(0x0C);
~SubjectBase();
TObservee* GetObservee() const;
};
}
#include "CSD/Manager/csdmSubjectBase.inl"

View file

@ -1,14 +0,0 @@
namespace Chao::CSD
{
template<typename TObserver, typename TObservee>
inline SubjectBase<TObserver, TObservee>::~SubjectBase()
{
GuestToHostFunction<void>(m_pVftable->m_fpDtor, this);
}
template<typename TObserver, typename TObservee>
inline TObservee* SubjectBase<TObserver, TObservee>::GetObservee() const
{
return nullptr;
}
}

View file

@ -1,23 +0,0 @@
#pragma once
#include "CSD/Manager/csdmBase.h"
#include "CSD/Manager/csdmRCPtr.h"
namespace Chao::CSD
{
class CTexList : public CBase
{
public:
struct Vftable
{
be<uint32_t> m_fpDtor;
};
xpointer<Vftable> m_pVftable;
RCPtr<uint8_t> m_rcData;
~CTexList();
};
}
#include "CSD/Platform/csdTexList.inl"

View file

@ -1,7 +0,0 @@
namespace Chao::CSD
{
inline CTexList::~CTexList()
{
GuestToHostFunction<void>(m_pVftable->m_fpDtor, this);
}
}

View file

@ -1,378 +0,0 @@
#pragma once
#include <Hedgehog/Base/System/hhAllocator.h>
namespace hh
{
template<
class Key,
class T,
class Compare = std::less<Key>,
class Allocator = Hedgehog::Base::TAllocator<std::pair<const Key, T>>>
class map
{
protected:
enum EColor
{
eColor_Red,
eColor_Black
};
struct SNode
{
using allocator_type = typename std::allocator_traits<Allocator>::template rebind_alloc<SNode>;
xpointer<SNode> pLeft;
xpointer<SNode> pParent;
xpointer<SNode> pRight;
std::pair<const Key, T> Value;
uint8_t Color;
bool IsNil;
};
Compare m_Comp;
typename SNode::allocator_type m_Alloc;
xpointer<SNode> m_pHead;
be<uint32_t> m_Count;
struct SFindResult
{
SNode* pParent;
bool IsRight;
SNode* pBound;
};
bool LowerBoundDuplicate(const SNode* pBound, const Key& in_rKey) const
{
return !pBound->IsNil && !m_Comp(in_rKey, pBound->Value.first);
}
SFindResult FindLowerBound(const Key& in_rKey) const
{
SFindResult result{ m_pHead->pParent, true, m_pHead };
SNode* pNode = result.pParent;
while (!pNode->IsNil)
{
result.pParent = pNode;
if (m_Comp(pNode->Value.first, in_rKey))
{
result.IsRight = true;
pNode = pNode->pRight;
}
else
{
result.IsRight = false;
result.pBound = pNode;
pNode = pNode->pLeft;
}
}
return result;
}
SNode* Find(const Key& in_rKey) const
{
const SFindResult result = FindLowerBound(in_rKey);
return LowerBoundDuplicate(result.pBound, in_rKey) ? result.pBound : m_pHead.get();
}
static SNode* Max(SNode* pNode)
{
while (!pNode->pRight->IsNil)
pNode = pNode->pRight;
return pNode;
}
static SNode* Min(SNode* pNode)
{
while (!pNode->pLeft->IsNil)
pNode = pNode->pLeft;
return pNode;
}
public:
using key_type = Key;
using mapped_type = T;
using value_type = std::pair<const Key, T>;
using size_type = std::size_t;
using difference_type = std::ptrdiff_t;
using key_compare = Compare;
using allocator_type = Allocator;
using reference = value_type&;
using const_reference = const value_type&;
using pointer = typename std::allocator_traits<Allocator>::pointer;
using const_pointer = typename std::allocator_traits<Allocator>::const_pointer;
class iterator
{
public:
using iterator_category = std::bidirectional_iterator_tag;
using value_type = std::pair<const Key, T>;
using difference_type = std::ptrdiff_t;
using pointer = value_type*;
using reference = value_type&;
iterator(const std::nullptr_t&) = delete;
iterator(SNode* pNode) : m_pNode(pNode) {}
reference operator*() const { return m_pNode->Value; }
pointer operator->() const { return &m_pNode->Value; }
iterator& operator++()
{
if (m_pNode->pRight->IsNil)
{
SNode* pNode;
while (!(pNode = m_pNode->pParent)->IsNil && m_pNode == pNode->pRight)
m_pNode = pNode;
m_pNode = pNode;
}
else
{
m_pNode = map::Min(m_pNode->pRight);
}
return *this;
}
iterator operator++(int)
{
iterator temp(*this);
++(*this);
return temp;
}
iterator& operator--()
{
if (m_pNode->IsNil)
{
m_pNode = m_pNode->pRight;
}
else if (m_pNode->pLeft->IsNil)
{
SNode* pNode;
while (!(pNode = m_pNode->pParent)->IsNil && m_pNode == pNode->pLeft)
m_pNode = pNode;
if (!m_pNode->IsNil)
m_pNode = pNode;
}
else
{
m_pNode = map::Max(m_pNode->pLeft);
}
return *this;
}
iterator operator--(int)
{
iterator temp(*this);
--(*this);
return temp;
}
bool operator==(const iterator& rhs) const { return m_pNode == rhs.m_pNode; }
bool operator!=(const iterator& rhs) const { return !(*this == rhs); }
private:
SNode* m_pNode;
friend class iterator;
friend class map;
};
class const_iterator
{
public:
using iterator_category = std::bidirectional_iterator_tag;
using value_type = std::pair<const Key, T>;
using difference_type = std::ptrdiff_t;
using pointer = const value_type*;
using reference = const value_type&;
const_iterator(const std::nullptr_t&) = delete;
const_iterator(SNode* pNode) : m_pNode(pNode) {}
const_iterator(const iterator& iterator) : m_pNode(iterator.m_pNode) {}
reference operator*() const { return m_pNode->Value; }
pointer operator->() const { return &m_pNode->Value; }
const_iterator& operator++()
{
if (m_pNode->pRight->IsNil)
{
SNode* pNode;
while (!(pNode = m_pNode->pParent)->IsNil && m_pNode == pNode->pRight)
m_pNode = pNode;
m_pNode = pNode;
}
else
{
m_pNode = map::Min(m_pNode->pRight);
}
return *this;
}
const_iterator operator++(int)
{
const_iterator temp(*this);
++(*this);
return temp;
}
const_iterator& operator--()
{
if (m_pNode->IsNil)
{
m_pNode = m_pNode->pRight;
}
else if (m_pNode->pLeft->IsNil)
{
SNode* pNode;
while (!(pNode = m_pNode->pParent)->IsNil && m_pNode == pNode->pLeft)
m_pNode = pNode;
if (!m_pNode->IsNil)
m_pNode = pNode;
}
else
{
m_pNode = map::Max(m_pNode->pLeft);
}
return *this;
}
const_iterator operator--(int)
{
const_iterator temp(*this);
--(*this);
return temp;
}
bool operator==(const const_iterator& rhs) const { return m_pNode == rhs.m_pNode; }
bool operator!=(const const_iterator& rhs) const { return !(*this == rhs); }
private:
SNode* m_pNode;
friend class map;
};
using reverse_iterator = std::reverse_iterator<iterator>;
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
public:
allocator_type get_allocator() const
{
return m_Alloc;
}
T& at(const Key& key)
{
return Find(key)->Value.second;
}
const T& at(const Key& key) const
{
return Find(key)->Value.second;
}
iterator begin()
{
return iterator(m_pHead->pLeft);
}
const_iterator begin() const
{
return const_iterator(m_pHead->pLeft);
}
const_iterator cbegin() const
{
return const_iterator(m_pHead->pLeft);
}
iterator end()
{
return iterator(m_pHead);
}
const_iterator end() const
{
return const_iterator(m_pHead);
}
const_iterator cend() const
{
return const_iterator(m_pHead);
}
reverse_iterator rbegin()
{
return reverse_iterator(end());
}
const_reverse_iterator rbegin() const
{
return const_reverse_iterator(end());
}
const_reverse_iterator crbegin() const
{
return const_reverse_iterator(cend());
}
reverse_iterator rend()
{
return reverse_iterator(begin());
}
const_reverse_iterator rend() const
{
return const_reverse_iterator(begin());
}
const_reverse_iterator crend() const
{
return const_reverse_iterator(cbegin());
}
bool empty() const
{
return m_Count == 0;
}
size_type size() const
{
return m_Count;
}
size_type max_size() const
{
return ~0u;
}
size_type count(const Key& key) const
{
return LowerBoundDuplicate(FindLowerBound(key).pBound, key) ? 1u : 0u;
}
iterator find(const Key& key)
{
return iterator(Find(key));
}
const_iterator find(const Key& key) const
{
return const_iterator(Find(key));
}
};
static_assert(sizeof(map<int, int>) == 0xC);
}

View file

@ -1,255 +0,0 @@
#pragma once
#include <Hedgehog/Base/System/hhAllocator.h>
namespace hh
{
template<typename T, typename Allocator = Hedgehog::Base::TAllocator<T>>
class vector
{
protected:
Allocator m_Alloc;
xpointer<T> m_pFirst;
xpointer<T> m_pLast;
xpointer<T> m_pEnd;
public:
using value_type = T;
using allocator_type = Allocator;
using size_type = std::size_t;
using difference_type = std::ptrdiff_t;
using reference = value_type&;
using const_reference = const value_type&;
using pointer = typename std::allocator_traits<Allocator>::pointer;
using const_pointer = typename std::allocator_traits<Allocator>::const_pointer;
class iterator
{
public:
using iterator_category = std::random_access_iterator_tag;
using value_type = T;
using difference_type = std::ptrdiff_t;
using pointer = T*;
using reference = T&;
iterator() : m_pPtr(nullptr) {}
iterator(T* p) : m_pPtr(p) {}
reference operator*() const { return *m_pPtr; }
pointer operator->() const { return m_pPtr; }
iterator& operator++() { ++m_pPtr; return *this; }
iterator operator++(int) { iterator tmp = *this; ++(*this); return tmp; }
iterator& operator--() { --m_pPtr; return *this; }
iterator operator--(int) { iterator tmp = *this; --(*this); return tmp; }
iterator& operator+=(difference_type n) { m_pPtr += n; return *this; }
iterator operator+(difference_type n) const { iterator tmp = *this; return tmp += n; }
friend iterator operator+(difference_type n, iterator it) { return it + n; }
iterator& operator-=(difference_type n) { return *this += -n; }
iterator operator-(difference_type n) const { iterator tmp = *this; return tmp -= n; }
difference_type operator-(const iterator& other) const { return m_pPtr - other.m_pPtr; }
reference operator[](difference_type n) const { return *(*this + n); }
bool operator==(const iterator& other) const { return m_pPtr == other.m_pPtr; }
bool operator!=(const iterator& other) const { return !(*this == other); }
bool operator<(const iterator& other) const { return m_pPtr < other.m_pPtr; }
bool operator<=(const iterator& other) const { return !(other < *this); }
bool operator>(const iterator& other) const { return other < *this; }
bool operator>=(const iterator& other) const { return !(*this < other); }
private:
T* m_pPtr;
friend class vector;
friend class const_iterator;
};
class const_iterator
{
public:
using iterator_category = std::random_access_iterator_tag;
using value_type = T;
using difference_type = std::ptrdiff_t;
using pointer = const T*;
using reference = const T&;
const_iterator() : m_pPtr(nullptr) {}
const_iterator(T* p) : m_pPtr(p) {}
const_iterator(const iterator& other) : m_pPtr(other.m_pPtr) {}
reference operator*() const { return *m_pPtr; }
pointer operator->() const { return m_pPtr; }
const_iterator& operator++() { ++m_pPtr; return *this; }
const_iterator operator++(int) { const_iterator tmp = *this; ++(*this); return tmp; }
const_iterator& operator--() { --m_pPtr; return *this; }
const_iterator operator--(int) { const_iterator tmp = *this; --(*this); return tmp; }
const_iterator& operator+=(difference_type n) { m_pPtr += n; return *this; }
const_iterator operator+(difference_type n) const { const_iterator tmp = *this; return tmp += n; }
friend const_iterator operator+(difference_type n, const_iterator it) { return it + n; }
const_iterator& operator-=(difference_type n) { return *this += -n; }
const_iterator operator-(difference_type n) const { const_iterator tmp = *this; return tmp -= n; }
difference_type operator-(const const_iterator& other) const { return m_pPtr - other.m_pPtr; }
reference operator[](difference_type n) const { return *(*this + n); }
bool operator==(const const_iterator& other) const { return m_pPtr == other.m_pPtr; }
bool operator!=(const const_iterator& other) const { return !(*this == other); }
bool operator<(const const_iterator& other) const { return m_pPtr < other.m_pPtr; }
bool operator<=(const const_iterator& other) const { return !(other < *this); }
bool operator>(const const_iterator& other) const { return other < *this; }
bool operator>=(const const_iterator& other) const { return !(*this < other); }
private:
T* m_pPtr;
friend class vector;
};
using reverse_iterator = std::reverse_iterator<iterator>;
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
allocator_type get_allocator() const
{
return m_Alloc;
}
reference at(size_type pos)
{
return m_pFirst[pos];
}
const_reference at(size_type pos) const
{
return m_pFirst[pos];
}
reference operator[](size_type pos)
{
return m_pFirst[pos];
}
const_reference operator[](size_type pos) const
{
return m_pFirst[pos];
}
reference front()
{
return m_pFirst[0];
}
const_reference front() const
{
return m_pFirst[0];
}
reference back()
{
return m_pLast[-1];
}
const_reference back() const
{
return m_pLast[-1];
}
T* data()
{
return m_pFirst;
}
const T* data() const
{
return m_pFirst;
}
iterator begin()
{
return iterator(m_pFirst);
}
const_iterator begin() const
{
return const_iterator(m_pFirst);
}
const_iterator cbegin() const
{
return const_iterator(m_pFirst);
}
iterator end()
{
return iterator(m_pLast);
}
const_iterator end() const
{
return const_iterator(m_pLast);
}
const_iterator cend() const
{
return const_iterator(m_pLast);
}
reverse_iterator rbegin()
{
return reverse_iterator(end());
}
const_reverse_iterator rbegin() const
{
return const_reverse_iterator(end());
}
const_reverse_iterator crbegin() const
{
return const_reverse_iterator(cend());
}
reverse_iterator rend()
{
return reverse_iterator(begin());
}
const_reverse_iterator rend() const
{
return const_reverse_iterator(begin());
}
const_reverse_iterator crend() const
{
return const_reverse_iterator(cbegin());
}
bool empty() const
{
return m_pFirst == m_pLast;
}
size_type size() const
{
return m_pLast - m_pFirst;
}
size_type max_size() const
{
return ~0u;
}
size_type capacity() const
{
return m_pEnd - m_pFirst;
}
};
SWA_ASSERT_SIZEOF(vector<int>, 0x10);
}

View file

@ -1,36 +0,0 @@
#pragma once
#include "SWA.inl"
inline void* __HH_ALLOC(const uint32_t in_Size)
{
return GuestToHostFunction<void*>(sub_822C0988, in_Size);
}
inline void __HH_FREE(const void* in_pData)
{
GuestToHostFunction<void>(sub_822C0270, in_pData);
}
namespace Hedgehog::Base
{
template<class T>
class TAllocator
{
public:
using value_type = T;
TAllocator() noexcept {}
template<class U> TAllocator(TAllocator<U> const&) noexcept {}
value_type* allocate(std::size_t n)
{
return reinterpret_cast<value_type*>(__HH_ALLOC(n * sizeof(value_type)));
}
void deallocate(value_type* p, std::size_t) noexcept
{
__HH_FREE(p);
}
};
}

View file

@ -1,27 +0,0 @@
#pragma once
#include <SWA.inl>
namespace Hedgehog::Base
{
class CSharedString;
class CStringSymbol
{
public:
be<uint32_t> m_Index;
CStringSymbol();
CStringSymbol(const char* in_pName);
CStringSymbol(const CSharedString& in_rName);
bool operator==(const CStringSymbol& in_rOther) const;
bool operator!=(const CStringSymbol& in_rOther) const;
bool operator<(const CStringSymbol& in_rOther) const;
};
SWA_ASSERT_OFFSETOF(CStringSymbol, m_Index, 0);
SWA_ASSERT_SIZEOF(CStringSymbol, 4);
}
#include <Hedgehog/Base/System/hhSymbol.inl>

View file

@ -1,31 +0,0 @@
namespace Hedgehog::Base
{
inline CStringSymbol::CStringSymbol()
{
}
inline CStringSymbol::CStringSymbol(const char* in_pName)
{
GuestToHostFunction<void>(sub_82E014D8, this, in_pName);
}
inline CStringSymbol::CStringSymbol(const CSharedString& in_rName)
{
GuestToHostFunction<void>(sub_82E013B0, this, &in_rName);
}
inline bool CStringSymbol::operator==(const CStringSymbol& in_rOther) const
{
return m_Index == in_rOther.m_Index;
}
inline bool CStringSymbol::operator!=(const CStringSymbol& in_rOther) const
{
return m_Index != in_rOther.m_Index;
}
inline bool CStringSymbol::operator<(const CStringSymbol& in_rOther) const
{
return m_Index < in_rOther.m_Index;
}
}

View file

@ -1,20 +0,0 @@
#pragma once
#include "Hedgehog/Base/Thread/hhHolderBase.h"
#define HH_BASE_HOLDER(x) \
Hedgehog::Base::THolder(x)
namespace Hedgehog::Base
{
template<typename T, bool ForceSync = true>
class THolder : public CHolderBase
{
public:
THolder(T* in_pObject) : CHolderBase(in_pObject, ForceSync) {}
T* get() const;
T* operator->() const;
T* operator*() const;
};
}

View file

@ -1,28 +0,0 @@
#pragma once
#include "SWA.inl"
namespace Hedgehog::Base
{
class CSynchronizedObject;
class CHolderBase
{
protected:
xpointer<CSynchronizedObject> m_pSynchronizedObject;
bool m_Locked;
public:
CHolderBase() : m_pSynchronizedObject(nullptr), m_Locked(false) {}
CHolderBase(CSynchronizedObject* in_pSynchronizedObject, bool in_ForceSync = false);
CHolderBase(CHolderBase&& io_rOther);
CHolderBase(const CHolderBase& in_rOther);
~CHolderBase();
CSynchronizedObject* get() const;
CSynchronizedObject* operator->() const;
CSynchronizedObject* operator*() const;
explicit operator bool() const;
};
}

View file

@ -1,12 +0,0 @@
#pragma once
#include "SWA.inl"
namespace Hedgehog::Base
{
class CSynchronizedObject
{
public:
SWA_INSERT_PADDING(0x04);
};
}

View file

@ -1,27 +0,0 @@
#pragma once
#include "SWA.inl"
#include "Hedgehog/Base/Thread/hhHolder.h"
namespace Hedgehog::Base
{
template<typename T, bool ForceSync = false>
class TSynchronizedPtr
{
xpointer<T> m_pObject;
public:
TSynchronizedPtr(T* in_pObject);
TSynchronizedPtr();
TSynchronizedPtr(const TSynchronizedPtr& in_rOther);
TSynchronizedPtr(TSynchronizedPtr&& io_rOther);
TSynchronizedPtr<T, ForceSync>& operator=(T* const in_pObject);
THolder<T, ForceSync> get() const;
THolder<T, ForceSync> operator->() const;
THolder<T, ForceSync> operator*() const;
explicit operator bool() const;
};
}

View file

@ -1,22 +0,0 @@
#pragma once
#include <SWA.inl>
namespace Hedgehog::Base
{
struct SStringHolder
{
be<uint32_t> RefCount;
char aStr[];
static SStringHolder* GetHolder(const char* in_pStr);
static SStringHolder* Make(const char* in_pStr);
void AddRef();
void Release();
bool IsUnique() const;
};
}
#include <Hedgehog/Base/Type/detail/hhStringHolder.inl>

View file

@ -1,47 +0,0 @@
namespace Hedgehog::Base
{
inline SStringHolder* SStringHolder::GetHolder(const char* in_pStr)
{
return (SStringHolder*)((size_t)in_pStr - sizeof(RefCount));
}
inline SStringHolder* SStringHolder::Make(const char* in_pStr)
{
auto pHolder = (SStringHolder*)__HH_ALLOC(sizeof(RefCount) + strlen(in_pStr) + 1);
pHolder->RefCount = 1;
strcpy(pHolder->aStr, in_pStr);
return pHolder;
}
inline void SStringHolder::AddRef()
{
std::atomic_ref refCount(RefCount.value);
be<uint32_t> original, incremented;
do
{
original = RefCount;
incremented = original + 1;
} while (!refCount.compare_exchange_weak(original.value, incremented.value));
}
inline void SStringHolder::Release()
{
std::atomic_ref refCount(RefCount.value);
be<uint32_t> original, decremented;
do
{
original = RefCount;
decremented = original - 1;
} while (!refCount.compare_exchange_weak(original.value, decremented.value));
if (decremented == 0)
__HH_FREE(this);
}
inline bool SStringHolder::IsUnique() const
{
return RefCount == 1;
}
}

View file

@ -1,38 +0,0 @@
#pragma once
#include <Hedgehog/Base/Type/detail/hhStringHolder.h>
namespace Hedgehog::Base
{
class CSharedString
{
private:
xpointer<const char> m_pStr;
SStringHolder* GetHolder() const;
CSharedString(SStringHolder* in_pHolder);
public:
static constexpr size_t npos = ~0u;
CSharedString();
CSharedString(const char* in_pStr);
CSharedString(const CSharedString& in_rOther);
CSharedString(CSharedString&& io_rOther);
~CSharedString();
const char* get() const;
const char* c_str() const;
const char* data() const;
size_t size() const;
size_t length() const;
bool empty() const;
const char* begin() const;
const char* end() const;
};
}
#include <Hedgehog/Base/Type/hhSharedString.inl>

View file

@ -1,78 +0,0 @@
namespace Hedgehog::Base
{
inline SStringHolder* CSharedString::GetHolder() const
{
return SStringHolder::GetHolder(m_pStr);
}
inline CSharedString::CSharedString(SStringHolder* in_pHolder) : m_pStr(in_pHolder->aStr)
{
}
inline CSharedString::CSharedString() : m_pStr(nullptr)
{
}
inline CSharedString::CSharedString(const char* in_pStr) : m_pStr(nullptr)
{
size_t length;
if (in_pStr && (length = strlen(in_pStr)) != 0)
m_pStr.ptr = g_memory.MapVirtual(SStringHolder::Make(in_pStr)->aStr);
}
inline CSharedString::CSharedString(const CSharedString& in_rOther) : m_pStr(in_rOther.m_pStr)
{
GetHolder()->AddRef();
}
inline CSharedString::CSharedString(CSharedString&& io_rOther) : m_pStr(io_rOther.m_pStr)
{
io_rOther.m_pStr = nullptr;
}
inline CSharedString::~CSharedString()
{
GetHolder()->Release();
}
inline const char* CSharedString::get() const
{
return m_pStr;
}
inline const char* CSharedString::c_str() const
{
return get();
}
inline const char* CSharedString::data() const
{
return get();
}
inline size_t CSharedString::size() const
{
return strlen(m_pStr);
}
inline size_t CSharedString::length() const
{
return size();
}
inline bool CSharedString::empty() const
{
return size() == 0;
}
inline const char* CSharedString::begin() const
{
return get();
}
inline const char* CSharedString::end() const
{
return &m_pStr[size()];
}
}

View file

@ -1,23 +0,0 @@
#pragma once
#include "SWA.inl"
namespace Hedgehog::Base
{
class CObject
{
public:
CObject();
CObject(const swa_null_ctor&);
void* operator new(const size_t in_Size);
void* operator new(const size_t in_Size, const size_t in_Align);
void operator delete(void* in_pMem);
void* operator new(const size_t in_Size, void* in_pObj);
void* operator new(const size_t in_Size, const size_t in_Align, void* in_pObj);
void operator delete(void* in_pMem, void* in_pObj);
};
}

View file

@ -1,40 +0,0 @@
#pragma once
#include <Hedgehog/Base/hhObject.h>
#include <Hedgehog/Base/Type/hhSharedString.h>
namespace Hedgehog::Database
{
enum EDatabaseDataFlags : uint8_t
{
eDatabaseDataFlags_IsMadeOne = 0x1,
eDatabaseDataFlags_IsMadeAll = 0x2,
eDatabaseDataFlags_CreatedFromArchive = 0x4,
eDatabaseDataFlags_IsMadeMakingOne = 0x8
};
class CDatabaseData : public Base::CObject
{
public:
struct Vftable
{
be<uint32_t> m_fpDtor;
be<uint32_t> m_fpCheckMadeAll;
};
xpointer<Vftable> m_pVftable;
uint8_t m_Flags;
Base::CSharedString m_TypeAndName;
~CDatabaseData();
bool CheckMadeAll();
bool IsMadeOne() const;
void SetMadeOne();
bool IsMadeAllInternal();
bool IsMadeAll();
};
}
#include "Hedgehog/Database/System/hhDatabaseData.inl"

View file

@ -1,36 +0,0 @@
namespace Hedgehog::Database
{
inline CDatabaseData::~CDatabaseData()
{
GuestToHostFunction<void>(m_pVftable->m_fpDtor, this);
}
inline bool CDatabaseData::CheckMadeAll()
{
return GuestToHostFunction<bool>(m_pVftable->m_fpCheckMadeAll, this);
}
inline bool CDatabaseData::IsMadeOne() const
{
return (m_Flags & eDatabaseDataFlags_IsMadeOne) != 0;
}
inline void CDatabaseData::SetMadeOne()
{
m_Flags |= eDatabaseDataFlags_IsMadeOne;
}
inline bool CDatabaseData::IsMadeAllInternal()
{
if ((m_Flags & eDatabaseDataFlags_IsMadeOne) == 0 || !CheckMadeAll())
return false;
m_Flags |= eDatabaseDataFlags_IsMadeAll;
return true;
}
inline bool CDatabaseData::IsMadeAll()
{
return (m_Flags & eDatabaseDataFlags_IsMadeAll) != 0 || IsMadeAllInternal();
}
}

View file

@ -1,27 +0,0 @@
#pragma once
#include <SWA.inl>
namespace Hedgehog::Math
{
class CMatrix
{
public:
be<float> m_M00;
be<float> m_M01;
be<float> m_M02;
be<float> m_M03;
be<float> m_M10;
be<float> m_M11;
be<float> m_M12;
be<float> m_M13;
be<float> m_M20;
be<float> m_M21;
be<float> m_M22;
be<float> m_M23;
be<float> m_M30;
be<float> m_M31;
be<float> m_M32;
be<float> m_M33;
};
}

View file

@ -1,15 +0,0 @@
#pragma once
#include <SWA.inl>
namespace Hedgehog::Math
{
class CQuaternion
{
public:
be<float> X;
be<float> Y;
be<float> Z;
be<float> W;
};
}

View file

@ -1,31 +0,0 @@
#pragma once
#include "SWA.inl"
namespace Hedgehog::Math
{
class CVector2
{
public:
be<float> X;
be<float> Y;
};
class CVector
{
public:
be<float> X;
be<float> Y;
be<float> Z;
be<float> W;
};
class CVector4
{
public:
be<float> X;
be<float> Y;
be<float> Z;
be<float> W;
};
}

View file

@ -1,16 +0,0 @@
#pragma once
#include <SWA.inl>
namespace Hedgehog::Mirage
{
class CMatrixNodeListener;
class CMatrixNode : public Base::CObject
{
public:
SWA_INSERT_PADDING(0x60);
};
SWA_ASSERT_SIZEOF(CMatrixNode, 0x60);
}

View file

@ -1,19 +0,0 @@
#pragma once
#include <SWA.inl>
namespace Hedgehog::Mirage
{
class CTransform
{
public:
Math::CQuaternion m_Rotation;
Math::CVector m_Position;
Math::CMatrix m_Matrix;
};
SWA_ASSERT_OFFSETOF(CTransform, m_Rotation, 0x00);
SWA_ASSERT_OFFSETOF(CTransform, m_Position, 0x10);
SWA_ASSERT_OFFSETOF(CTransform, m_Matrix, 0x20);
SWA_ASSERT_SIZEOF(CTransform, 0x60);
}

View file

@ -1,19 +0,0 @@
#pragma once
#include <SWA.inl>
namespace Hedgehog::Mirage
{
class CRenderingInfrastructure;
class CVertexDeclarationPtr
{
public:
xpointer<void> m_pD3DVertexDeclaration;
xpointer<CRenderingInfrastructure> m_pRenderingInfrastructure;
};
SWA_ASSERT_OFFSETOF(CVertexDeclarationPtr, m_pD3DVertexDeclaration, 0x0);
SWA_ASSERT_OFFSETOF(CVertexDeclarationPtr, m_pRenderingInfrastructure, 0x4);
SWA_ASSERT_SIZEOF(CVertexDeclarationPtr, 0x8);
}

View file

@ -1,39 +0,0 @@
#pragma once
#include <boost/smart_ptr/shared_ptr.h>
#include <Hedgehog/Base/Container/hhVector.h>
#include <Hedgehog/Database/System/hhDatabaseData.h>
namespace Hedgehog::Mirage
{
class CMaterialData;
class CTexsetData;
class CShaderListData;
class CParameterFloat4Element;
class CParameterInt4Element;
class CParameterBoolElement;
class CMaterialData : public Database::CDatabaseData
{
public:
boost::shared_ptr<CShaderListData> m_spShaderListData;
boost::shared_ptr<CTexsetData> m_spTexsetData;
hh::vector<boost::shared_ptr<CParameterFloat4Element>> m_Float4Params;
hh::vector<boost::shared_ptr<CParameterInt4Element>> m_Int4Params;
hh::vector<boost::shared_ptr<CParameterBoolElement>> m_Bool4Params;
uint8_t m_AlphaThreshold;
bool m_DoubleSided;
bool m_Additive;
};
SWA_ASSERT_OFFSETOF(CMaterialData, m_spShaderListData, 0xC);
SWA_ASSERT_OFFSETOF(CMaterialData, m_spTexsetData, 0x14);
SWA_ASSERT_OFFSETOF(CMaterialData, m_Float4Params, 0x1C);
SWA_ASSERT_OFFSETOF(CMaterialData, m_Int4Params, 0x2C);
SWA_ASSERT_OFFSETOF(CMaterialData, m_Bool4Params, 0x3C);
SWA_ASSERT_OFFSETOF(CMaterialData, m_AlphaThreshold, 0x4C);
SWA_ASSERT_OFFSETOF(CMaterialData, m_DoubleSided, 0x4D);
SWA_ASSERT_OFFSETOF(CMaterialData, m_Additive, 0x4E);
SWA_ASSERT_SIZEOF(CMaterialData, 0x50);
}

View file

@ -1,43 +0,0 @@
#pragma once
#include <boost/smart_ptr/shared_ptr.h>
#include <Hedgehog/Base/Type/hhSharedString.h>
#include <Hedgehog/Database/System/hhDatabaseData.h>
#include <Hedgehog/MirageCore/Misc/hhVertexDeclarationPtr.h>
namespace Hedgehog::Mirage
{
class CMaterialData;
class CMeshData : public Database::CDatabaseData
{
public:
be<uint32_t> m_IndexNum;
be<uint32_t> m_VertexNum;
be<uint32_t> m_VertexSize;
be<uint32_t> m_NodeNum;
xpointer<uint8_t> m_pNodeIndices;
be<uint32_t> m_VertexOffset;
be<uint32_t> m_IndexOffset;
xpointer<void> m_pD3DIndexBuffer;
xpointer<void> m_pD3DVertexBuffer;
CVertexDeclarationPtr m_VertexDeclarationPtr;
SWA_INSERT_PADDING(0x4);
boost::shared_ptr<CMaterialData> m_spMaterial;
SWA_INSERT_PADDING(0xC);
};
SWA_ASSERT_OFFSETOF(CMeshData, m_IndexNum, 0xC);
SWA_ASSERT_OFFSETOF(CMeshData, m_VertexNum, 0x10);
SWA_ASSERT_OFFSETOF(CMeshData, m_VertexSize, 0x14);
SWA_ASSERT_OFFSETOF(CMeshData, m_NodeNum, 0x18);
SWA_ASSERT_OFFSETOF(CMeshData, m_pNodeIndices, 0x1C);
SWA_ASSERT_OFFSETOF(CMeshData, m_VertexOffset, 0x20);
SWA_ASSERT_OFFSETOF(CMeshData, m_IndexOffset, 0x24);
SWA_ASSERT_OFFSETOF(CMeshData, m_pD3DIndexBuffer, 0x28);
SWA_ASSERT_OFFSETOF(CMeshData, m_pD3DVertexBuffer, 0x2C);
SWA_ASSERT_OFFSETOF(CMeshData, m_VertexDeclarationPtr, 0x30);
SWA_ASSERT_OFFSETOF(CMeshData, m_spMaterial, 0x3C);
SWA_ASSERT_SIZEOF(CMeshData, 0x50);
}

View file

@ -1,26 +0,0 @@
#pragma once
#include <boost/smart_ptr/shared_ptr.h>
#include <Hedgehog/Database/System/hhDatabaseData.h>
namespace Hedgehog::Mirage
{
class CMaterialData;
class CMeshIndexData : public Hedgehog::Database::CDatabaseData
{
public:
be<uint32_t> m_IndexNum;
be<uint32_t> m_NodeNum;
xpointer<uint8_t> m_pNodeIndices;
xpointer<void> m_pD3DIndexBuffer;
boost::shared_ptr<CMaterialData> m_spMaterial;
};
SWA_ASSERT_OFFSETOF(CMeshIndexData, m_IndexNum, 0xC);
SWA_ASSERT_OFFSETOF(CMeshIndexData, m_NodeNum, 0x10);
SWA_ASSERT_OFFSETOF(CMeshIndexData, m_pNodeIndices, 0x14);
SWA_ASSERT_OFFSETOF(CMeshIndexData, m_pD3DIndexBuffer, 0x18);
SWA_ASSERT_OFFSETOF(CMeshIndexData, m_spMaterial, 0x1C);
SWA_ASSERT_SIZEOF(CMeshIndexData, 0x24);
}

View file

@ -1,46 +0,0 @@
#pragma once
#include <Hedgehog/Base/Container/hhVector.h>
#include <Hedgehog/Database/System/hhDatabaseData.h>
namespace Hedgehog::Mirage
{
class CNodeGroupModelData;
class CMeshData;
class CModelNodeData;
class CMatrixData;
class CAabbData;
class CSphereData;
class CMorphModelData;
class CModelData : public Database::CDatabaseData
{
public:
be<uint32_t> m_NodeGroupModelNum;
hh::vector<boost::shared_ptr<CNodeGroupModelData>> m_NodeGroupModels;
hh::vector<boost::shared_ptr<CMeshData>> m_OpaqueMeshes;
hh::vector<boost::shared_ptr<CMeshData>> m_TransparentMeshes;
hh::vector<boost::shared_ptr<CMeshData>> m_PunchThroughMeshes;
be<uint32_t> m_NodeNum;
boost::shared_ptr<uint8_t[]> m_spNodeParentIndices;
boost::shared_ptr<CModelNodeData[]> m_spNodes;
boost::shared_ptr<CMatrixData[]> m_spNodeMatrices;
boost::shared_ptr<CAabbData> m_spAabb;
boost::shared_ptr<CSphereData> m_spSphere;
hh::vector<boost::shared_ptr<CMorphModelData>> m_MorphModels;
};
SWA_ASSERT_OFFSETOF(CModelData, m_NodeGroupModelNum, 0xC);
SWA_ASSERT_OFFSETOF(CModelData, m_NodeGroupModels, 0x10);
SWA_ASSERT_OFFSETOF(CModelData, m_OpaqueMeshes, 0x20);
SWA_ASSERT_OFFSETOF(CModelData, m_TransparentMeshes, 0x30);
SWA_ASSERT_OFFSETOF(CModelData, m_PunchThroughMeshes, 0x40);
SWA_ASSERT_OFFSETOF(CModelData, m_NodeNum, 0x50);
SWA_ASSERT_OFFSETOF(CModelData, m_spNodeParentIndices, 0x54);
SWA_ASSERT_OFFSETOF(CModelData, m_spNodes, 0x5C);
SWA_ASSERT_OFFSETOF(CModelData, m_spNodeMatrices, 0x64);
SWA_ASSERT_OFFSETOF(CModelData, m_spAabb, 0x6C);
SWA_ASSERT_OFFSETOF(CModelData, m_spSphere, 0x74);
SWA_ASSERT_OFFSETOF(CModelData, m_MorphModels, 0x7C);
SWA_ASSERT_SIZEOF(CModelData, 0x8C);
}

View file

@ -1,38 +0,0 @@
#pragma once
#include <boost/smart_ptr/shared_ptr.h>
#include <Hedgehog/Base/Container/hhVector.h>
#include <Hedgehog/Database/System/hhDatabaseData.h>
#include <Hedgehog/MirageCore/Misc/hhVertexDeclarationPtr.h>
namespace Hedgehog::Mirage
{
class CMorphTargetData;
class CMeshIndexData;
class CMorphModelData : public Hedgehog::Database::CDatabaseData
{
public:
be<uint32_t> m_VertexNum;
be<uint32_t> m_VertexSize;
be<uint32_t> m_MorphTargetVertexSize;
xpointer<void> m_pD3DVertexBuffer;
CVertexDeclarationPtr m_VertexDeclarationPtr;
hh::vector<boost::shared_ptr<CMorphTargetData>> m_MorphTargetList;
hh::vector<boost::shared_ptr<CMeshIndexData>> m_OpaqueMeshList;
hh::vector<boost::shared_ptr<CMeshIndexData>> m_TransparentMeshList;
hh::vector<boost::shared_ptr<CMeshIndexData>> m_PunchThroughMeshList;
};
SWA_ASSERT_OFFSETOF(CMorphModelData, m_VertexNum, 0xC);
SWA_ASSERT_OFFSETOF(CMorphModelData, m_VertexSize, 0x10);
SWA_ASSERT_OFFSETOF(CMorphModelData, m_MorphTargetVertexSize, 0x14);
SWA_ASSERT_OFFSETOF(CMorphModelData, m_pD3DVertexBuffer, 0x18);
SWA_ASSERT_OFFSETOF(CMorphModelData, m_VertexDeclarationPtr, 0x1C);
SWA_ASSERT_OFFSETOF(CMorphModelData, m_MorphTargetList, 0x24);
SWA_ASSERT_OFFSETOF(CMorphModelData, m_OpaqueMeshList, 0x34);
SWA_ASSERT_OFFSETOF(CMorphModelData, m_TransparentMeshList, 0x44);
SWA_ASSERT_OFFSETOF(CMorphModelData, m_PunchThroughMeshList, 0x54);
SWA_ASSERT_SIZEOF(CMorphModelData, 0x64);
}

View file

@ -1,30 +0,0 @@
#pragma once
#include <Hedgehog/Base/Container/hhVector.h>
#include <Hedgehog/Database/System/hhDatabaseData.h>
namespace Hedgehog::Mirage
{
class CMeshData;
class CNodeGroupModelData : public Database::CDatabaseData
{
public:
hh::vector<boost::shared_ptr<CMeshData>> m_OpaqueMeshes;
hh::vector<boost::shared_ptr<CMeshData>> m_TransparentMeshes;
hh::vector<boost::shared_ptr<CMeshData>> m_PunchThroughMeshes;
be<uint32_t> m_SpecialMeshGroupNum;
boost::shared_ptr<be<uint32_t>> m_SpecialMeshGroupModes;
hh::vector<hh::vector<boost::shared_ptr<CMeshData>>> m_SpecialMeshGroups;
Base::CSharedString m_Name;
};
SWA_ASSERT_OFFSETOF(CNodeGroupModelData, m_OpaqueMeshes, 0xC);
SWA_ASSERT_OFFSETOF(CNodeGroupModelData, m_TransparentMeshes, 0x1C);
SWA_ASSERT_OFFSETOF(CNodeGroupModelData, m_PunchThroughMeshes, 0x2C);
SWA_ASSERT_OFFSETOF(CNodeGroupModelData, m_SpecialMeshGroupNum, 0x3C);
SWA_ASSERT_OFFSETOF(CNodeGroupModelData, m_SpecialMeshGroupModes, 0x40);
SWA_ASSERT_OFFSETOF(CNodeGroupModelData, m_SpecialMeshGroups, 0x48);
SWA_ASSERT_OFFSETOF(CNodeGroupModelData, m_Name, 0x58);
SWA_ASSERT_SIZEOF(CNodeGroupModelData, 0x5C);
}

View file

@ -1,30 +0,0 @@
#pragma once
#include <boost/smart_ptr/shared_ptr.h>
#include <Hedgehog/Database/System/hhDatabaseData.h>
namespace Hedgehog::Base
{
class CCriticalSectionD3D9;
}
namespace Hedgehog::Mirage
{
class CRenderingInfrastructure;
class CPixelShaderCodeData : public Database::CDatabaseData
{
public:
xpointer<void> m_pD3DPixelShader;
xpointer<uint8_t> m_spFunction;
boost::shared_ptr<Base::CCriticalSectionD3D9> m_spCriticalSection;
xpointer<CRenderingInfrastructure> m_pRenderingInfrastructure;
};
SWA_ASSERT_OFFSETOF(CPixelShaderCodeData, m_pD3DPixelShader, 0xC);
SWA_ASSERT_OFFSETOF(CPixelShaderCodeData, m_spFunction, 0x10);
SWA_ASSERT_OFFSETOF(CPixelShaderCodeData, m_spCriticalSection, 0x14);
SWA_ASSERT_OFFSETOF(CPixelShaderCodeData, m_pRenderingInfrastructure, 0x1C);
SWA_ASSERT_SIZEOF(CPixelShaderCodeData, 0x20);
}

View file

@ -1,22 +0,0 @@
#pragma once
#include <Hedgehog/Base/Container/hhVector.h>
#include <Hedgehog/Database/System/hhDatabaseData.h>
namespace Hedgehog::Mirage
{
class CPixelShaderCodeData;
class CPixelShaderParameterData;
class CPixelShaderData : public Hedgehog::Database::CDatabaseData
{
public:
boost::shared_ptr<CPixelShaderCodeData> m_spCode;
SWA_INSERT_PADDING(0x4);
hh::vector<boost::shared_ptr<CPixelShaderParameterData>> m_ParameterList;
};
SWA_ASSERT_OFFSETOF(CPixelShaderData, m_spCode, 0xC);
SWA_ASSERT_OFFSETOF(CPixelShaderData, m_ParameterList, 0x18);
SWA_ASSERT_SIZEOF(CPixelShaderData, 0x28);
}

View file

@ -1,46 +0,0 @@
#pragma once
#include <boost/smart_ptr/shared_ptr.h>
#include <Hedgehog/Base/Container/hhMap.h>
#include <Hedgehog/Base/System/hhSymbol.h>
#include <Hedgehog/Database/System/hhDatabaseData.h>
namespace Hedgehog::Mirage
{
class CVertexShaderData;
class CPixelShaderData;
class CVertexShaderPermutationData
{
public:
hh::map<be<uint32_t>, boost::shared_ptr<CVertexShaderData>> m_VertexShaders;
be<uint32_t> m_SubPermutations;
};
SWA_ASSERT_OFFSETOF(CVertexShaderPermutationData, m_VertexShaders, 0x0);
SWA_ASSERT_OFFSETOF(CVertexShaderPermutationData, m_SubPermutations, 0xC);
SWA_ASSERT_SIZEOF(CVertexShaderPermutationData, 0x10);
class CPixelShaderPermutationData
{
public:
hh::map<Base::CStringSymbol, boost::shared_ptr<CVertexShaderPermutationData>> m_VertexShaderPermutations;
hh::map<be<uint32_t>, boost::shared_ptr<CPixelShaderData>> m_PixelShaders;
be<uint32_t> m_SubPermutations;
};
SWA_ASSERT_OFFSETOF(CPixelShaderPermutationData, m_VertexShaderPermutations, 0x0);
SWA_ASSERT_OFFSETOF(CPixelShaderPermutationData, m_PixelShaders, 0xC);
SWA_ASSERT_OFFSETOF(CPixelShaderPermutationData, m_SubPermutations, 0x18);
SWA_ASSERT_SIZEOF(CPixelShaderPermutationData, 0x1C);
class CShaderListData : public Database::CDatabaseData
{
public:
hh::map<Base::CStringSymbol, CPixelShaderPermutationData> m_PixelShaderPermutations;
};
SWA_ASSERT_OFFSETOF(CShaderListData, m_PixelShaderPermutations, 0xC);
SWA_ASSERT_SIZEOF(CShaderListData, 0x18);
}

View file

@ -1,29 +0,0 @@
#pragma once
#include <Hedgehog/Base/Container/hhVector.h>
#include <Hedgehog/Database/System/hhDatabaseData.h>
namespace Hedgehog::Mirage
{
class CSphereData;
class CNodeGroupModelData;
class CMeshData;
class CTerrainModelData : public Database::CDatabaseData
{
public:
SWA_INSERT_PADDING(0x4);
hh::vector<boost::shared_ptr<CNodeGroupModelData>> m_NodeGroupModels;
hh::vector<boost::shared_ptr<CMeshData>> m_OpaqueMeshes;
hh::vector<boost::shared_ptr<CMeshData>> m_TransparentMeshes;
hh::vector<boost::shared_ptr<CMeshData>> m_PunchThroughMeshes;
boost::shared_ptr<CSphereData> m_spSphere;
};
SWA_ASSERT_OFFSETOF(CTerrainModelData, m_NodeGroupModels, 0x10);
SWA_ASSERT_OFFSETOF(CTerrainModelData, m_OpaqueMeshes, 0x20);
SWA_ASSERT_OFFSETOF(CTerrainModelData, m_TransparentMeshes, 0x30);
SWA_ASSERT_OFFSETOF(CTerrainModelData, m_PunchThroughMeshes, 0x40);
SWA_ASSERT_OFFSETOF(CTerrainModelData, m_spSphere, 0x50);
SWA_ASSERT_SIZEOF(CTerrainModelData, 0x58);
}

View file

@ -1,24 +0,0 @@
#pragma once
#include <boost/smart_ptr/shared_ptr.h>
#include <Hedgehog/Base/Container/hhVector.h>
#include <Hedgehog/Database/System/hhDatabaseData.h>
namespace Hedgehog::Mirage
{
class CTextureData;
class CTexsetData : public Database::CDatabaseData
{
public:
hh::vector<boost::shared_ptr<CTextureData>> m_TextureList;
hh::vector<Base::CSharedString> m_TextureNameList;
bool m_ConstTexCoord;
};
SWA_ASSERT_OFFSETOF(CTexsetData, m_TextureList, 0xC);
SWA_ASSERT_OFFSETOF(CTexsetData, m_TextureNameList, 0x1C);
SWA_ASSERT_OFFSETOF(CTexsetData, m_ConstTexCoord, 0x2C);
SWA_ASSERT_SIZEOF(CTexsetData, 0x30);
}

View file

@ -1,17 +0,0 @@
#pragma once
#include <Hedgehog/Database/System/hhDatabaseData.h>
namespace Hedgehog::Mirage
{
class CTextureData : public Database::CDatabaseData
{
public:
SWA_INSERT_PADDING(0x8);
uint8_t m_TexcoordIndex;
SWA_INSERT_PADDING(0x1B);
};
SWA_ASSERT_OFFSETOF(CTextureData, m_TexcoordIndex, 0x14);
SWA_ASSERT_SIZEOF(CTextureData, 0x30);
}

View file

@ -1,30 +0,0 @@
#pragma once
#include <boost/smart_ptr/shared_ptr.h>
#include <Hedgehog/Database/System/hhDatabaseData.h>
namespace Hedgehog::Base
{
class CCriticalSectionD3D9;
}
namespace Hedgehog::Mirage
{
class CRenderingInfrastructure;
class CVertexShaderCodeData : public Database::CDatabaseData
{
public:
xpointer<void> m_pD3DVertexShader;
xpointer<uint8_t> m_spFunction;
boost::shared_ptr<Base::CCriticalSectionD3D9> m_spCriticalSection;
xpointer<CRenderingInfrastructure> m_pRenderingInfrastructure;
};
SWA_ASSERT_OFFSETOF(CVertexShaderCodeData, m_pD3DVertexShader, 0xC);
SWA_ASSERT_OFFSETOF(CVertexShaderCodeData, m_spFunction, 0x10);
SWA_ASSERT_OFFSETOF(CVertexShaderCodeData, m_spCriticalSection, 0x14);
SWA_ASSERT_OFFSETOF(CVertexShaderCodeData, m_pRenderingInfrastructure, 0x1C);
SWA_ASSERT_SIZEOF(CVertexShaderCodeData, 0x20);
}

View file

@ -1,22 +0,0 @@
#pragma once
#include <Hedgehog/Base/Container/hhVector.h>
#include <Hedgehog/Database/System/hhDatabaseData.h>
namespace Hedgehog::Mirage
{
class CVertexShaderCodeData;
class CVertexShaderParameterData;
class CVertexShaderData : public Hedgehog::Database::CDatabaseData
{
public:
boost::shared_ptr<CVertexShaderCodeData> m_spCode;
SWA_INSERT_PADDING(0x4);
hh::vector<boost::shared_ptr<CVertexShaderParameterData>> m_ParameterList;
};
SWA_ASSERT_OFFSETOF(CVertexShaderData, m_spCode, 0xC);
SWA_ASSERT_OFFSETOF(CVertexShaderData, m_ParameterList, 0x18);
SWA_ASSERT_SIZEOF(CVertexShaderData, 0x28);
}

View file

@ -1,14 +0,0 @@
#pragma once
#include "SWA.inl"
#include "Hedgehog/Base/hhObject.h"
namespace Hedgehog::Mirage
{
class CRenderable : public Base::CObject
{
public:
xpointer<void> m_pVftable;
bool m_Enabled;
};
}

View file

@ -1,41 +0,0 @@
#pragma once
#include <boost/smart_ptr/shared_ptr.h>
#include <Hedgehog/Base/Container/hhVector.h>
#include <Hedgehog/Database/System/hhDatabaseData.h>
namespace Hedgehog::Mirage
{
class CShaderListData;
}
namespace Hedgehog::Sparkle
{
class CParticleMaterial : public Hedgehog::Database::CDatabaseData
{
public:
enum EBlendMode
{
eBlendMode_Zero,
eBlendMode_Typical,
eBlendMode_Add,
eBlendMode_Subtract
};
hh::vector<boost::anonymous_shared_ptr> m_spFieldC;
boost::shared_ptr<Hedgehog::Mirage::CShaderListData> m_spDefaultShaderListData; // BillboardParticle_d[v]
boost::shared_ptr<Hedgehog::Mirage::CShaderListData> m_spShaderListData;
bool m_Field2C;
be<uint32_t> m_BlendMode;
be<uint32_t> m_AddressMode;
Hedgehog::Base::CSharedString m_MaterialName;
Hedgehog::Base::CSharedString m_TextureName;
Hedgehog::Base::CSharedString m_DeflectionTextureName;
Hedgehog::Base::CSharedString m_ShaderName;
be<float> m_Field48;
be<float> m_Field4C;
};
SWA_ASSERT_SIZEOF(CParticleMaterial, 0x50);
}

View file

@ -1,14 +0,0 @@
#pragma once
#include "SWA.inl"
#include "Hedgehog/Universe/Engine/hhMessageProcess.h"
#include "Hedgehog/Universe/Thread/hhParallelJob.h"
namespace Hedgehog::Universe
{
class CMessageActor : public IMessageProcess, public IParallelJob
{
public:
SWA_INSERT_PADDING(0x88);
};
}

View file

@ -1,14 +0,0 @@
#pragma once
#include "SWA.inl"
#include "Hedgehog/Base/hhObject.h"
namespace Hedgehog::Universe
{
class IMessageProcess : public Base::CObject
{
public:
IMessageProcess() {}
IMessageProcess(const swa_null_ctor& nil) : CObject(nil) {}
};
}

View file

@ -1,32 +0,0 @@
#pragma once
#include <SWA.inl>
#include <Hedgehog/Base/hhObject.h>
#include <Hedgehog/Universe/Engine/hhMessageProcess.h>
#include <Hedgehog/Universe/Engine/hhStateMachineMessageReceiver.h>
namespace Hedgehog::Universe
{
class CStateMachineBase : public IStateMachineMessageReceiver, public Base::CObject
{
public:
class CStateBase : public IMessageProcess
{
public:
SWA_INSERT_PADDING(0x08);
xpointer<void> m_pContext;
xpointer<CStateMachineBase> m_pStateMachine;
be<float> m_Time;
SWA_INSERT_PADDING(0x4C);
void* GetContextBase() const;
template<typename T>
T* GetContextBase() const;
};
SWA_INSERT_PADDING(0x60);
};
}
#include <Hedgehog/Universe/Engine/hhStateMachineBase.inl>

View file

@ -1,13 +0,0 @@
namespace Hedgehog::Universe
{
inline void* CStateMachineBase::CStateBase::GetContextBase() const
{
return m_pContext;
}
template<typename T>
inline T* CStateMachineBase::CStateBase::GetContextBase() const
{
return (T*)m_pContext.get();
}
}

View file

@ -1,12 +0,0 @@
#pragma once
#include <SWA.inl>
namespace Hedgehog::Universe
{
class IStateMachineMessageReceiver
{
public:
IStateMachineMessageReceiver(const swa_null_ctor&) {}
};
}

View file

@ -1,13 +0,0 @@
#pragma once
#include "SWA.inl"
namespace Hedgehog::Universe
{
struct SUpdateInfo
{
be<float> DeltaTime;
be<uint32_t> Frame;
Base::CSharedString Category;
};
}

View file

@ -1,25 +0,0 @@
#pragma once
#include "SWA.inl"
#include "Hedgehog/Universe/Thread/hhParallelJob.h"
namespace Hedgehog::Universe
{
class CUpdateUnit : public Base::CObject, public IParallelJob
{
public:
xpointer<void> m_pVftable;
SWA_INSERT_PADDING(0x20);
CUpdateUnit(const swa_null_ctor& nil) : CObject(nil), IParallelJob(nil) {}
CUpdateUnit();
// TODO: implement virtual functions.
// virtual ~CUpdateUnit();
//
// virtual void ExecuteParallelJob(const SUpdateInfo& in_rUpdateInfo) override;
//
// virtual void UpdateParallel(const SUpdateInfo& in_rUpdateInfo) {}
// virtual void UpdateSerial(const SUpdateInfo& in_rUpdateInfo) {}
};
}

View file

@ -1,21 +0,0 @@
#pragma once
#include "SWA.inl"
#include "Hedgehog/Universe/Engine/hhUpdateInfo.h"
namespace Hedgehog::Universe
{
class IParallelJob
{
public:
xpointer<void> m_pVftable;
IParallelJob() {}
IParallelJob(const swa_null_ctor&) {}
// TODO: implement virtual functions.
// virtual ~IParallelJob() = default;
//
// virtual void ExecuteParallelJob(const SUpdateInfo& in_rUpdateInfo) = 0;
};
}

View file

@ -1,47 +0,0 @@
# SWA
## Contribution Guide
### Naming Conventions
- Use `camelCase` for local variables, `SNAKE_CASE` for preprocessor macros, and `PascalCase` for everything else. SWA-specific types that don't exist in the game should use `snake_case` for better differentiation.
- Class names should be prefixed with `C`, e.g., `CSonicContext`.
- Struct names should be prefixed with `S`, e.g., `SUpdateInfo`.
- Class members should be prefixed with `m_`, e.g., `m_Time`. Do not use this prefix for struct members.
- Enum names should be prefixed with `E`, e.g., `ELightType`.
- Enum members should start with `e`, followed by the enum name and an underscore, e.g., `eLightType_Point`.
- For enum members indicating the count of elements, prefix with `n`, followed by the name, e.g., `nLightType`.
- Pointers should be prefixed with `p`, e.g., `pSonicContext`.
- Shared pointers should be prefixed with `sp`, e.g., `spDatabase`.
- References should be prefixed with `r`, e.g., `rMessage`.
- Input function arguments should be prefixed with `in_`, e.g., `in_Name`.
- Output function arguments should be prefixed with `out_`, e.g., `out_Value`.
- Static class members should be prefixed with `ms_`, e.g., `ms_Instance`.
- Static members outside a class should be prefixed with `g_`, e.g., `g_AllocationTracker`.
- SWA-specific preprocessor macros should start with `SWA_`, e.g., `SWA_INSERT_PADDING`.
- Hedgehog namespace-specific preprocessor macros should start with `HH_` along with the library's shorthand, e.g., `HH_FND_MSG_MAKE_TYPE`.
- Function pointers should be prefixed with `fp`, e.g., `fpCGameObjectConstructor`.
Combine prefixes as necessary, e.g., `m_sp` for a shared pointer as a class member or `in_r` for a const reference as a function argument.
### Coding Style
- Always place curly brackets on a new line.
- Prefer forward declaring types over including their respective headers.
- Use <> includes relative to the project's root directory path.
- Use C++17's nested namespace feature instead of defining multiple namespaces on separate lines.
- Enum classes are prohibited as they were not available when the game was developed.
- Avoid placing function definitions in .h files, instead, implement functions in the header's respective .inl file, similar to a .cpp file.
- Ensure that all class members are declared as public. Even if you suspect that a class member was private in the original code, having it public is more convenient in a modding API.
- Avoid placing multiple class definitions in a single header file unless you have a good reason to do so.
- Keep function pointers or addresses outside functions, define them as global variables in the corresponding .inl file. Mark these global variables as `inline` and never nest them within class definitions. You do not need to use the `g_` prefix for function pointers, `fp` is sufficient.
- Use primitive types defined in `cstdint` instead of using types that come with the language, e.g., use `uint32_t` instead of `unsigned int`. Using `float`, `double` and `bool` is okay.
### Mapping Rules
- Always include the corresponding `offsetof`/`sizeof` assertions for mapped classes/structs. If you are uncertain about the type's size, you can omit the `sizeof` assertion.
- Use the exact type name from the game if it's available through RTTI, otherwise, you can look for shared pointers that may reveal the original type name.
- If you are unsure about the name of a class/struct member, use `Field` followed by the hexadecimal byte offset (e.g., `m_Field194`). Avoid names like `m_StoresThisThingMaybe`, you can write comments next to the definition for speculations.
- If a portion of the byte range is irrelevant to your research or not mapped yet, use the `SWA_INSERT_PADDING` macro to align class/struct members correctly.
- When the class has a virtual function table, if you don't want to map every function in it, you can map only the virtual destructor.
- The original file locations are likely available in the executable file as assertion file paths. If you cannot find the file path, use your intuition to place the file in a sensible place.

View file

@ -1,129 +0,0 @@
#pragma once
#include "CSD/Manager/csdmBase.h"
#include "CSD/Manager/csdmMotionPattern.h"
#include "CSD/Manager/csdmNode.h"
#include "CSD/Manager/csdmNodeObserver.h"
#include "CSD/Manager/csdmObserverBase.h"
#include "CSD/Manager/csdmProject.h"
#include "CSD/Manager/csdmRCObject.h"
#include "CSD/Manager/csdmRCObjectImp.h"
#include "CSD/Manager/csdmRCPtr.h"
#include "CSD/Manager/csdmRCPtrAbs.h"
#include "CSD/Manager/csdmResourceBase.h"
#include "CSD/Manager/csdmScene.h"
#include "CSD/Manager/csdmSceneObserver.h"
#include "CSD/Manager/csdmSubjectBase.h"
#include "CSD/Platform/csdTexList.h"
#include "Hedgehog/Base/Container/hhMap.h"
#include "Hedgehog/Base/Container/hhVector.h"
#include "Hedgehog/Base/System/hhAllocator.h"
#include "Hedgehog/Base/System/hhSymbol.h"
#include "Hedgehog/Base/Thread/hhHolder.h"
#include "Hedgehog/Base/Thread/hhHolderBase.h"
#include "Hedgehog/Base/Thread/hhSynchronizedObject.h"
#include "Hedgehog/Base/Thread/hhSynchronizedPtr.h"
#include "Hedgehog/Base/Type/detail/hhStringHolder.h"
#include "Hedgehog/Base/Type/hhSharedString.h"
#include "Hedgehog/Base/hhObject.h"
#include "Hedgehog/Database/System/hhDatabaseData.h"
#include "Hedgehog/Math/Matrix.h"
#include "Hedgehog/Math/Quaternion.h"
#include "Hedgehog/Math/Vector.h"
#include "Hedgehog/MirageCore/MatrixNode/hhMatrixNode.h"
#include "Hedgehog/MirageCore/Misc/hhTransform.h"
#include "Hedgehog/MirageCore/Misc/hhVertexDeclarationPtr.h"
#include "Hedgehog/MirageCore/RenderData/hhMaterialData.h"
#include "Hedgehog/MirageCore/RenderData/hhMeshData.h"
#include "Hedgehog/MirageCore/RenderData/hhMeshIndexData.h"
#include "Hedgehog/MirageCore/RenderData/hhModelData.h"
#include "Hedgehog/MirageCore/RenderData/hhMorphModelData.h"
#include "Hedgehog/MirageCore/RenderData/hhNodeGroupModelData.h"
#include "Hedgehog/MirageCore/RenderData/hhPixelShaderCodeData.h"
#include "Hedgehog/MirageCore/RenderData/hhPixelShaderData.h"
#include "Hedgehog/MirageCore/RenderData/hhShaderListData.h"
#include "Hedgehog/MirageCore/RenderData/hhTerrainModelData.h"
#include "Hedgehog/MirageCore/RenderData/hhTexsetData.h"
#include "Hedgehog/MirageCore/RenderData/hhTextureData.h"
#include "Hedgehog/MirageCore/RenderData/hhVertexShaderCodeData.h"
#include "Hedgehog/MirageCore/RenderData/hhVertexShaderData.h"
#include "Hedgehog/MirageCore/Renderable/hhRenderable.h"
#include "Hedgehog/Sparkle/hhParticleMaterial.h"
#include "Hedgehog/Universe/Engine/hhMessageActor.h"
#include "Hedgehog/Universe/Engine/hhMessageProcess.h"
#include "Hedgehog/Universe/Engine/hhStateMachineBase.h"
#include "Hedgehog/Universe/Engine/hhStateMachineMessageReceiver.h"
#include "Hedgehog/Universe/Engine/hhUpdateInfo.h"
#include "Hedgehog/Universe/Engine/hhUpdateUnit.h"
#include "Hedgehog/Universe/Thread/hhParallelJob.h"
#include "SWA/Achievement/AchievementID.h"
#include "SWA/Achievement/AchievementManager.h"
#include "SWA/Achievement/AchievementTest.h"
#include "SWA/Boss/EggDragoon/Object/BossEggDragoonDrillMissile.h"
#include "SWA/CSD/CsdDatabaseWrapper.h"
#include "SWA/CSD/CsdProject.h"
#include "SWA/CSD/CsdTexListMirage.h"
#include "SWA/CSD/GameObjectCSD.h"
#include "SWA/Camera/Camera.h"
#include "SWA/Camera/CameraController.h"
#include "SWA/CharacterUtility/CharacterProxy.h"
#include "SWA/ExtraStage/Tails/Enemy/Boss/ExStageBoss.h"
#include "SWA/ExtraStage/Tails/Enemy/Boss/State/StateBase.h"
#include "SWA/ExtraStage/Tails/Enemy/Boss/State/StateBattle.h"
#include "SWA/ExtraStage/Tails/Player/ExPlayerTails.h"
#include "SWA/Globals.h"
#include "SWA/HUD/GeneralWindow/GeneralWindow.h"
#include "SWA/HUD/Loading/Loading.h"
#include "SWA/HUD/Pause/HudPause.h"
#include "SWA/HUD/SaveIcon/SaveIcon.h"
#include "SWA/HUD/Sonic/HudSonicStage.h"
#include "SWA/Inspire/InspireMovieOverlay.h"
#include "SWA/Inspire/InspireMovieOverlayInfo.h"
#include "SWA/Inspire/InspireOpacityAnimationInfo.h"
#include "SWA/Inspire/InspireScene.h"
#include "SWA/Inspire/InspireSceneData.h"
#include "SWA/Inspire/InspireSceneInfo.h"
#include "SWA/Inspire/InspireTextureAnimationInfo.h"
#include "SWA/Inspire/InspireTextureOverlay.h"
#include "SWA/Inspire/InspireTextureOverlayInfo.h"
#include "SWA/Menu/MenuWindowBase.h"
#include "SWA/Message/MsgRequestHelp.h"
#include "SWA/Movie/MovieDisplayer.h"
#include "SWA/Movie/MovieManager.h"
#include "SWA/Object/Common/DashPanel/ObjDashPanel.h"
#include "SWA/Object/SonicStage/EU/RollingBarrel/ObjRollingBarrel.h"
#include "SWA/Player/Character/EvilSonic/EvilSonic.h"
#include "SWA/Player/Character/EvilSonic/EvilSonicContext.h"
#include "SWA/Player/Character/EvilSonic/Hud/EvilHudGuide.h"
#include "SWA/Sequence/Unit/SequenceUnitBase.h"
#include "SWA/Sequence/Unit/SequenceUnitPlayMovie.h"
#include "SWA/Sequence/Utility/SequencePlayMovieWrapper.h"
#include "SWA/Sound/Sound.h"
#include "SWA/Sound/SoundBGMActSonic.h"
#include "SWA/Sound/SoundBGMBase.h"
#include "SWA/System/Application.h"
#include "SWA/System/ApplicationD3D9.h"
#include "SWA/System/ApplicationDocument.h"
#include "SWA/System/ApplicationXenon.h"
#include "SWA/System/Game.h"
#include "SWA/System/GameDocument.h"
#include "SWA/System/GameMode/GameMode.h"
#include "SWA/System/GameMode/GameModeStage.h"
#include "SWA/System/GameMode/GameModeStageMovie.h"
#include "SWA/System/GameMode/GameModeStageTitle.h"
#include "SWA/System/GameMode/Title/TitleMenu.h"
#include "SWA/System/GameMode/Title/TitleStateBase.h"
#include "SWA/System/GameMode/Title/TitleStateIntro.h"
#include "SWA/System/GameMode/Title/TitleStateMenu.h"
#include "SWA/System/GameMode/Title/TitleStateWorldMap.h"
#include "SWA/System/GameMode/WorldMap/WorldMapCamera.h"
#include "SWA/System/GameMode/WorldMap/WorldMapCursor.h"
#include "SWA/System/GameObject.h"
#include "SWA/System/GameParameter.h"
#include "SWA/System/GammaController.h"
#include "SWA/System/InputState.h"
#include "SWA/System/MatrixNodeTransform.h"
#include "SWA/System/PadState.h"
#include "SWA/System/World.h"
#include "boost/smart_ptr/make_shared_object.h"
#include "boost/smart_ptr/shared_ptr.h"

View file

@ -1,21 +0,0 @@
#pragma once
#include <cpu/guest_stack_var.h>
#include <kernel/function.h>
#define SWA_CONCAT2(x, y) x##y
#define SWA_CONCAT(x, y) SWA_CONCAT2(x, y)
#define SWA_INSERT_PADDING(length) \
uint8_t SWA_CONCAT(pad, __LINE__)[length]
#define SWA_ASSERT_OFFSETOF(type, field, offset) \
static_assert(offsetof(type, field) == offset)
#define SWA_ASSERT_SIZEOF(type, size) \
static_assert(sizeof(type) == size)
#define SWA_VIRTUAL_FUNCTION(returnType, virtualIndex, ...) \
GuestToHostFunction<returnType>(*(be<uint32_t>*)(g_memory.Translate(*(be<uint32_t>*)(this) + (4 * virtualIndex))), __VA_ARGS__)
struct swa_null_ctor {};

View file

@ -1,55 +0,0 @@
#pragma once
enum EAchievementID : uint32_t
{
eAchievementID_StillBroken = 24,
eAchievementID_LookingBetter,
eAchievementID_StillAJigsawPuzzle,
eAchievementID_PickingUpThePieces,
eAchievementID_AlmostThere,
eAchievementID_OneMoreToGo,
eAchievementID_WorldSavior = 31,
eAchievementID_PartlyCloudy,
eAchievementID_Sunny,
eAchievementID_HalfMoon,
eAchievementID_FullMoon,
eAchievementID_BlueStreak,
eAchievementID_PowerOverwhelming,
eAchievementID_GettingTheHangOfThings,
eAchievementID_CreatureOfTheNight,
eAchievementID_HelpingHand,
eAchievementID_LayTheSmackdown,
eAchievementID_WallCrawler,
eAchievementID_Airdevil,
eAchievementID_Hyperdrive,
eAchievementID_Basher,
eAchievementID_Smasher,
eAchievementID_Crasher,
eAchievementID_Thrasher,
eAchievementID_SocialButterfly,
eAchievementID_HungryHungryHedgehog,
eAchievementID_AcePilot,
eAchievementID_DayTripper,
eAchievementID_HardDaysNight,
eAchievementID_GetOnTheExorciseBandwagon,
eAchievementID_GyroWithRelish = 64,
eAchievementID_PigInABlanket,
eAchievementID_ExoticToppings,
eAchievementID_SausageFriedRice,
eAchievementID_IcedHotdog,
eAchievementID_KebabOnABun,
eAchievementID_KetchupAndMustard,
eAchievementID_HardBoiled,
eAchievementID_FriedClamRoll,
eAchievementID_FirstTimeCustomer,
eAchievementID_OhYouShouldntHave,
eAchievementID_ThatsEnoughSeriously,
eAchievementID_Hedgehunk,
eAchievementID_IAintAfraidOfNoGhost,
eAchievementID_BFFs,
eAchievementID_SpeedingTicket,
eAchievementID_ComboKing,
eAchievementID_RingLeader,
eAchievementID_KnockoutBrawler,
eAchievementID_BlueMeteor
};

View file

@ -1,23 +0,0 @@
#pragma once
#include <SWA.inl>
#include <SWA/Achievement/AchievementID.h>
namespace SWA::Achievement
{
class CManager : public Hedgehog::Universe::CUpdateUnit
{
public:
class CMember
{
public:
SWA_INSERT_PADDING(0x08);
be<EAchievementID> m_AchievementID;
};
SWA_INSERT_PADDING(0x98);
xpointer<CMember> m_pMember;
be<uint32_t> m_IsUnlocked;
SWA_INSERT_PADDING(0x10);
};
}

View file

@ -1,16 +0,0 @@
#pragma once
#include <SWA.inl>
#include <SWA/Achievement/AchievementID.h>
namespace SWA
{
class CAchievementTest
{
public:
SWA_INSERT_PADDING(0x38);
be<uint32_t> m_Unk1;
be<EAchievementID> m_AchievementID;
uint8_t m_Unk2;
};
}

View file

@ -1,16 +0,0 @@
#pragma once
#include <SWA.inl>
#include "SWA/System/MatrixNodeTransform.h"
namespace SWA::Boss::EggDragoon::DrillMissile
{
class CMissile
{
public:
SWA_INSERT_PADDING(0xC4);
xpointer<CMatrixNodeTransform> m_pMatrixNodeTransform;
SWA_INSERT_PADDING(0x68);
be<float> m_Speed;
};
}

View file

@ -1,25 +0,0 @@
#pragma once
#include "boost/smart_ptr/shared_ptr.h"
namespace Hedgehog::Database
{
class CDatabase;
}
namespace SWA
{
class CCsdProject;
class CCsdDatabaseWrapper
{
public:
Hedgehog::Database::CDatabase* m_pDatabase;
CCsdDatabaseWrapper(Hedgehog::Database::CDatabase* in_pDatabase) : m_pDatabase(in_pDatabase) {}
boost::shared_ptr<CCsdProject> GetCsdProject(const Hedgehog::Base::CSharedString& in_rName);
};
}
#include "SWA/CSD/CsdDatabaseWrapper.inl"

View file

@ -1,9 +0,0 @@
namespace SWA
{
inline boost::shared_ptr<CCsdProject> CCsdDatabaseWrapper::GetCsdProject(const Hedgehog::Base::CSharedString& in_rName)
{
boost::shared_ptr<CCsdProject> spCsdProject;
GuestToHostFunction<void>(sub_825E2B40, &in_rName, this, &spCsdProject, 0);
return spCsdProject;
}
}

View file

@ -1,18 +0,0 @@
#pragma once
#include "CSD/Manager/csdmRCPtr.h"
#include "Hedgehog/Database/System/hhDatabaseData.h"
namespace Chao::CSD
{
class CProject;
}
namespace SWA
{
class CCsdProject : public Hedgehog::Database::CDatabaseData
{
public:
Chao::CSD::RCPtr<Chao::CSD::CProject> m_rcProject;
};
}

View file

@ -1,18 +0,0 @@
#pragma once
#include "CSD/Platform/csdTexList.h"
namespace Hedgehog::Mirage
{
class CTexsetData;
}
namespace SWA
{
class CCsdTexListMirage : public Chao::CSD::CTexList
{
public:
boost::shared_ptr<Hedgehog::Mirage::CTexsetData> m_spTexsetData;
SWA_INSERT_PADDING(0x04);
};
}

View file

@ -1,20 +0,0 @@
#pragma once
#include "SWA.inl"
#include "CSD/Manager/csdmRCPtr.h"
#include "SWA/System/GameObject.h"
namespace Chao::CSD
{
class CProject;
}
namespace SWA
{
class CGameObjectCSD : public CGameObject
{
public:
xpointer<void> m_pVftable;
Chao::CSD::RCPtr<Chao::CSD::CProject> m_rcProject;
};
}

View file

@ -1,24 +0,0 @@
#pragma once
#include <SWA.inl>
#include <SWA/System/GameObject.h>
namespace SWA
{
class CCamera : public CGameObject // , public Hedgehog::Universe::TStateMachine<CCamera>
{
public:
xpointer<void> m_pVftable;
SWA_INSERT_PADDING(0xC4);
be<float> m_VertAspectRatio;
SWA_INSERT_PADDING(0x48);
be<float> m_HorzAspectRatio;
SWA_INSERT_PADDING(0x178);
be<float> m_FieldOfView;
be<float> m_VertFieldOfView;
be<float> m_HorzFieldOfView;
SWA_INSERT_PADDING(0x18);
bool m_InvertY;
bool m_InvertX;
};
}

View file

@ -1,17 +0,0 @@
#pragma once
#include <SWA.inl>
namespace SWA
{
class CCameraController : public Hedgehog::Universe::CStateMachineBase::CStateBase
{
public:
SWA_INSERT_PADDING(0x04);
be<float> m_FieldOfView;
SWA_INSERT_PADDING(0x68);
};
SWA_ASSERT_OFFSETOF(CCameraController, m_FieldOfView, 0x64);
SWA_ASSERT_SIZEOF(CCameraController, 0xD0);
}

View file

@ -1,14 +0,0 @@
#pragma once
#include <Hedgehog/Math/Vector.h>
namespace SWA
{
class CCharacterProxy
{
public:
SWA_INSERT_PADDING(0x120);
Hedgehog::Math::CVector m_Position;
Hedgehog::Math::CVector m_Velocity;
};
}

View file

@ -1,36 +0,0 @@
#pragma once
#include <SWA.inl>
namespace SWA
{
class CExStageBoss
{
public:
class CStateBase;
class CStateBattle;
class CExStageBossStateContext
{
public:
SWA_INSERT_PADDING(0x14C);
be<float> m_SplineProgress;
SWA_INSERT_PADDING(0x0C);
be<float> m_SplineSpeed;
SWA_INSERT_PADDING(0x28);
be<float> m_Field188;
be<float> m_Field18C;
SWA_INSERT_PADDING(0x21);
bool m_IsBattleStart;
SWA_INSERT_PADDING(0x36E);
be<float> m_Field520;
};
};
SWA_ASSERT_OFFSETOF(CExStageBoss::CExStageBossStateContext, m_SplineProgress, 0x14C);
SWA_ASSERT_OFFSETOF(CExStageBoss::CExStageBossStateContext, m_SplineSpeed, 0x15C);
SWA_ASSERT_OFFSETOF(CExStageBoss::CExStageBossStateContext, m_Field188, 0x188);
SWA_ASSERT_OFFSETOF(CExStageBoss::CExStageBossStateContext, m_Field18C, 0x18C);
SWA_ASSERT_OFFSETOF(CExStageBoss::CExStageBossStateContext, m_IsBattleStart, 0x1B1);
SWA_ASSERT_OFFSETOF(CExStageBoss::CExStageBossStateContext, m_Field520, 0x520);
}

View file

@ -1,9 +0,0 @@
#pragma once
#include <SWA.inl>
#include "SWA/ExtraStage/Tails/Enemy/Boss/ExStageBoss.h"
namespace SWA
{
class CExStageBoss::CStateBase : public Hedgehog::Universe::CStateMachineBase::CStateBase {};
}

View file

@ -1,18 +0,0 @@
#pragma once
#include <SWA.inl>
#include "SWA/ExtraStage/Tails/Enemy/Boss/ExStageBoss.h"
namespace SWA
{
class CExStageBoss::CStateBattle : public CExStageBoss::CStateBase
{
public:
SWA_INSERT_PADDING(0x08);
be<float> m_Field68;
be<float> m_FramesSinceLastMissile;
};
SWA_ASSERT_OFFSETOF(CExStageBoss::CStateBattle, m_Field68, 0x68);
SWA_ASSERT_OFFSETOF(CExStageBoss::CStateBattle, m_FramesSinceLastMissile, 0x6C);
}

View file

@ -1,35 +0,0 @@
#pragma once
#include <SWA.inl>
namespace SWA
{
class CExPlayerTails
{
public:
class CExPlayerTailsStateContext
{
public:
SWA_INSERT_PADDING(0x1F8);
be<float> m_SplineBossStart;
be<float> m_SplineEnd;
SWA_INSERT_PADDING(0x30);
be<float> m_SplineProgress;
SWA_INSERT_PADDING(0x10);
xpointer<void> m_Field244;
SWA_INSERT_PADDING(0x18);
be<float> m_SplineSpeed;
SWA_INSERT_PADDING(0x0C);
be<uint32_t> m_State; // 0 - Intro; 1 - Boss Intro; 3 - Boss
};
class CStateBase : public Hedgehog::Universe::CStateMachineBase::CStateBase {};
};
SWA_ASSERT_OFFSETOF(CExPlayerTails::CExPlayerTailsStateContext, m_SplineBossStart, 0x1F8);
SWA_ASSERT_OFFSETOF(CExPlayerTails::CExPlayerTailsStateContext, m_SplineEnd, 0x1FC);
SWA_ASSERT_OFFSETOF(CExPlayerTails::CExPlayerTailsStateContext, m_SplineProgress, 0x230);
SWA_ASSERT_OFFSETOF(CExPlayerTails::CExPlayerTailsStateContext, m_Field244, 0x244);
SWA_ASSERT_OFFSETOF(CExPlayerTails::CExPlayerTailsStateContext, m_SplineSpeed, 0x260);
SWA_ASSERT_OFFSETOF(CExPlayerTails::CExPlayerTailsStateContext, m_State, 0x270);
}

View file

@ -1,77 +0,0 @@
#pragma once
#include <SWA.inl>
namespace SWA
{
struct SGlobals
{
// ms_DrawLightFieldSamplingPoint: サンプリング点をデバッグ表示
static inline bool* ms_DrawLightFieldSamplingPoint;
// N/A
static inline bool* ms_IsAutoSaveWarningShown;
// ms_IgnoreLightFieldData: データを無視する
static inline bool* ms_IgnoreLightFieldData;
// IsCollisionRender
static inline bool* ms_IsCollisionRender;
// N/A
static inline bool* ms_IsLoading;
// IsObjectCollisionRender
static inline bool* ms_IsObjectCollisionRender;
// ms_IsRenderDebugDraw: デバッグ描画
static inline bool* ms_IsRenderDebugDraw;
// ms_IsRenderDebugDrawText: デバッグ文字描画
static inline bool* ms_IsRenderDebugDrawText;
// ms_IsRenderDebugPositionDraw: デバッグ位置描画
static inline bool* ms_IsRenderDebugPositionDraw;
// ms_IsRenderGameMainHud: ゲームメインHUD 描画
static inline bool* ms_IsRenderGameMainHud;
// ms_IsRenderHud: 全 HUD 描画
static inline bool* ms_IsRenderHud;
// ms_IsRenderHudPause: ポーズメニュー 描画
static inline bool* ms_IsRenderHudPause;
// N/A
static inline bool* ms_IsTitleStateMenu;
// IsTriggerRender
static inline bool* ms_IsTriggerRender;
// ms_LightFieldDebug: 値をデバッグ表示
static inline bool* ms_LightFieldDebug;
// VisualizeLoadedLevel: ミップレベルを視覚化 赤=0, 緑=1, 青=2, 黄=未ロード
static inline bool* ms_VisualizeLoadedLevel;
static void Init()
{
ms_DrawLightFieldSamplingPoint = (bool*)MmGetHostAddress(0x83367BCE);
ms_IgnoreLightFieldData = (bool*)MmGetHostAddress(0x83367BCF);
ms_IsAutoSaveWarningShown = (bool*)MmGetHostAddress(0x83367BC1);
ms_IsCollisionRender = (bool*)MmGetHostAddress(0x833678A6);
ms_IsLoading = (bool*)MmGetHostAddress(0x83367A4C);
ms_IsObjectCollisionRender = (bool*)MmGetHostAddress(0x83367905);
ms_IsRenderDebugDraw = (bool*)MmGetHostAddress(0x8328BB23);
ms_IsRenderDebugDrawText = (bool*)MmGetHostAddress(0x8328BB25);
ms_IsRenderDebugPositionDraw = (bool*)MmGetHostAddress(0x8328BB24);
ms_IsRenderGameMainHud = (bool*)MmGetHostAddress(0x8328BB27);
ms_IsRenderHud = (bool*)MmGetHostAddress(0x8328BB26);
ms_IsRenderHudPause = (bool*)MmGetHostAddress(0x8328BB28);
ms_IsTitleStateMenu = (bool*)MmGetHostAddress(0x83367BC0);
ms_IsTriggerRender = (bool*)MmGetHostAddress(0x83367904);
ms_LightFieldDebug = (bool*)MmGetHostAddress(0x83367BCD);
ms_VisualizeLoadedLevel = (bool*)MmGetHostAddress(0x833678C1);
}
};
}

View file

@ -1,42 +0,0 @@
#pragma once
#include <SWA.inl>
namespace SWA
{
enum EWindowStatus : uint32_t
{
eWindowStatus_Closed,
eWindowStatus_OpeningMessage = 2,
eWindowStatus_DisplayingMessage,
eWindowStatus_OpeningControls,
eWindowStatus_DisplayingControls
};
class CGeneralWindow
{
public:
SWA_INSERT_PADDING(0xD0);
Chao::CSD::RCPtr<Chao::CSD::CProject> m_rcGeneral;
Chao::CSD::RCPtr<Chao::CSD::CScene> m_rcBg;
Chao::CSD::RCPtr<Chao::CSD::CScene> m_rcWindow;
Chao::CSD::RCPtr<Chao::CSD::CScene> m_rcWindow_2;
Chao::CSD::RCPtr<Chao::CSD::CScene> m_rcWindowSelect;
Chao::CSD::RCPtr<Chao::CSD::CScene> m_rcFooter;
SWA_INSERT_PADDING(0x58);
be<EWindowStatus> m_Status;
be<uint32_t> m_CursorIndex;
SWA_INSERT_PADDING(0x04);
be<uint32_t> m_SelectedIndex;
};
SWA_ASSERT_OFFSETOF(CGeneralWindow, m_rcGeneral, 0xD0);
SWA_ASSERT_OFFSETOF(CGeneralWindow, m_rcBg, 0xD8);
SWA_ASSERT_OFFSETOF(CGeneralWindow, m_rcWindow, 0xE0);
SWA_ASSERT_OFFSETOF(CGeneralWindow, m_rcWindow_2, 0xE8);
SWA_ASSERT_OFFSETOF(CGeneralWindow, m_rcWindowSelect, 0xF0);
SWA_ASSERT_OFFSETOF(CGeneralWindow, m_rcFooter, 0xF8);
SWA_ASSERT_OFFSETOF(CGeneralWindow, m_Status, 0x158);
SWA_ASSERT_OFFSETOF(CGeneralWindow, m_CursorIndex, 0x15C);
SWA_ASSERT_OFFSETOF(CGeneralWindow, m_SelectedIndex, 0x164);
}

View file

@ -1,40 +0,0 @@
#pragma once
#include <SWA.inl>
namespace SWA
{
enum ELoadingDisplayType
{
eLoadingDisplayType_MilesElectric,
eLoadingDisplayType_None,
eLoadingDisplayType_WerehogMovie,
eLoadingDisplayType_MilesElectricContext,
eLoadingDisplayType_Arrows,
eLoadingDisplayType_NowLoading,
eLoadingDisplayType_EventGallery,
eLoadingDisplayType_ChangeTimeOfDay,
eLoadingDisplayType_Blank
};
class CLoading
{
public:
SWA_INSERT_PADDING(0xD8);
be<uint32_t> m_FieldD8;
SWA_INSERT_PADDING(0x3C);
Chao::CSD::RCPtr<Chao::CSD::CScene> m_rcNightToDay;
SWA_INSERT_PADDING(0x0C);
be<uint32_t> m_IsVisible;
SWA_INSERT_PADDING(0x0C);
be<ELoadingDisplayType> m_LoadingDisplayType;
SWA_INSERT_PADDING(0x61);
bool m_IsNightToDay;
};
SWA_ASSERT_OFFSETOF(CLoading, m_FieldD8, 0xD8);
SWA_ASSERT_OFFSETOF(CLoading, m_rcNightToDay, 0x118);
SWA_ASSERT_OFFSETOF(CLoading, m_IsVisible, 0x12C);
SWA_ASSERT_OFFSETOF(CLoading, m_LoadingDisplayType, 0x13C);
SWA_ASSERT_OFFSETOF(CLoading, m_IsNightToDay, 0x1A1);
}

View file

@ -1,88 +0,0 @@
#pragma once
#include <SWA.inl>
using namespace Chao::CSD;
namespace SWA
{
enum EActionType : uint32_t
{
eActionType_Undefined,
eActionType_Status,
eActionType_Return,
eActionType_Inventory,
eActionType_Skills,
eActionType_Lab,
eActionType_Wait,
eActionType_Restart = 8,
eActionType_Continue
};
enum EMenuType : uint32_t
{
eMenuType_WorldMap,
eMenuType_Village,
eMenuType_Stage,
eMenuType_Hub,
eMenuType_Misc
};
enum EStatusType : uint32_t
{
eStatusType_Idle,
eStatusType_Accept,
eStatusType_Decline
};
enum ETransitionType : uint32_t
{
eTransitionType_Undefined,
eTransitionType_Quit = 2,
eTransitionType_Dialog = 5,
eTransitionType_Hide,
eTransitionType_Abort,
eTransitionType_SubMenu
};
class CHudPause : public CGameObject
{
public:
SWA_INSERT_PADDING(0x30);
RCPtr<CProject> m_rcPause;
RCPtr<CScene> m_rcBg;
RCPtr<CScene> m_rcBg1;
RCPtr<CScene> m_rcBg1_2;
RCPtr<CScene> m_rcBg1Select;
RCPtr<CScene> m_rcBg1Select_2;
RCPtr<CScene> m_rcStatusTitle;
RCPtr<CScene> m_rcFooterA;
SWA_INSERT_PADDING(0x59);
bool m_IsVisible;
SWA_INSERT_PADDING(0x02);
be<EActionType> m_Action;
be<EMenuType> m_Menu;
be<EStatusType> m_Status;
be<ETransitionType> m_Transition;
SWA_INSERT_PADDING(0x04);
be<uint32_t> m_Submenu;
SWA_INSERT_PADDING(0x18);
bool m_IsShown;
};
SWA_ASSERT_OFFSETOF(CHudPause, m_rcPause, 0xEC);
SWA_ASSERT_OFFSETOF(CHudPause, m_rcBg, 0xF4);
SWA_ASSERT_OFFSETOF(CHudPause, m_rcBg1, 0xFC);
SWA_ASSERT_OFFSETOF(CHudPause, m_rcBg1_2, 0x104);
SWA_ASSERT_OFFSETOF(CHudPause, m_rcBg1Select, 0x10C);
SWA_ASSERT_OFFSETOF(CHudPause, m_rcBg1Select_2, 0x114);
SWA_ASSERT_OFFSETOF(CHudPause, m_rcStatusTitle, 0x11C);
SWA_ASSERT_OFFSETOF(CHudPause, m_rcFooterA, 0x124);
SWA_ASSERT_OFFSETOF(CHudPause, m_IsVisible, 0x185);
SWA_ASSERT_OFFSETOF(CHudPause, m_Action, 0x188);
SWA_ASSERT_OFFSETOF(CHudPause, m_Menu, 0x18C);
SWA_ASSERT_OFFSETOF(CHudPause, m_Status, 0x190);
SWA_ASSERT_OFFSETOF(CHudPause, m_Transition, 0x194);
SWA_ASSERT_OFFSETOF(CHudPause, m_Submenu, 0x19C);
SWA_ASSERT_OFFSETOF(CHudPause, m_IsShown, 0x1B8);
}

View file

@ -1,13 +0,0 @@
#pragma once
#include <SWA.inl>
namespace SWA
{
class CSaveIcon : Hedgehog::Universe::CUpdateUnit
{
public:
SWA_INSERT_PADDING(0xD8);
bool m_IsVisible;
};
}

View file

@ -1,22 +0,0 @@
#pragma once
#include <SWA.inl>
namespace SWA
{
class CHudSonicStage
{
public:
SWA_INSERT_PADDING(0xE0);
Chao::CSD::RCPtr<Chao::CSD::CProject> m_rcPlayScreen;
Chao::CSD::RCPtr<Chao::CSD::CScene> m_rcSpeedGauge;
Chao::CSD::RCPtr<Chao::CSD::CScene> m_rcRingEnergyGauge;
Chao::CSD::RCPtr<Chao::CSD::CScene> m_rcGaugeFrame;
SWA_INSERT_PADDING(0x28);
Chao::CSD::RCPtr<Chao::CSD::CNode> m_rcScoreCount;
Chao::CSD::RCPtr<Chao::CSD::CNode> m_rcTimeCount;
Chao::CSD::RCPtr<Chao::CSD::CNode> m_rcTimeCount2;
Chao::CSD::RCPtr<Chao::CSD::CNode> m_rcTimeCount3;
Chao::CSD::RCPtr<Chao::CSD::CNode> m_rcPlayerCount;
};
}

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