From 4f301eef9de2a9746fb1903ac2e1d9a5e516f03d Mon Sep 17 00:00:00 2001 From: Matt P <5638426+mattbruv@users.noreply.github.com> Date: Wed, 23 Apr 2025 21:55:00 -0500 Subject: [PATCH 01/10] first fn --- src/SB/Game/zEntHangable.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/SB/Game/zEntHangable.cpp b/src/SB/Game/zEntHangable.cpp index 30999a894..7009c83de 100644 --- a/src/SB/Game/zEntHangable.cpp +++ b/src/SB/Game/zEntHangable.cpp @@ -3,3 +3,10 @@ #include "zEntHangable.h" #include + +// zEntHangable_Load__FP12zEntHangableP7xSerial + +void zEntHangable_Load(zEntHangable* ent, xSerial* s) +{ + zEntLoad(ent, s); +} From 03242342e2ad8b5aa2e57378acf454b177770298 Mon Sep 17 00:00:00 2001 From: Matt P <5638426+mattbruv@users.noreply.github.com> Date: Wed, 23 Apr 2025 21:56:01 -0500 Subject: [PATCH 02/10] save --- src/SB/Game/zEntHangable.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/SB/Game/zEntHangable.cpp b/src/SB/Game/zEntHangable.cpp index 7009c83de..19baf03f5 100644 --- a/src/SB/Game/zEntHangable.cpp +++ b/src/SB/Game/zEntHangable.cpp @@ -4,7 +4,10 @@ #include -// zEntHangable_Load__FP12zEntHangableP7xSerial +void zEntHangable_Save(zEntHangable* ent, xSerial* s) +{ + zEntSave(ent, s); +} void zEntHangable_Load(zEntHangable* ent, xSerial* s) { From 49e64ca514d305a0c1216201f2da611e0f30d329 Mon Sep 17 00:00:00 2001 From: Matt P <5638426+mattbruv@users.noreply.github.com> Date: Wed, 23 Apr 2025 23:18:51 -0500 Subject: [PATCH 03/10] moreo prrogress --- src/SB/Game/zEnt.h | 13 +++++++------ src/SB/Game/zEntHangable.cpp | 34 +++++++++++++++++++++++++++++++--- src/SB/Game/zEntHangable.h | 1 + 3 files changed, 39 insertions(+), 9 deletions(-) diff --git a/src/SB/Game/zEnt.h b/src/SB/Game/zEnt.h index 71673cef3..fe2106bab 100644 --- a/src/SB/Game/zEnt.h +++ b/src/SB/Game/zEnt.h @@ -4,6 +4,7 @@ #include "xEnt.h" #include "xAnim.h" +#include "zEntHangable.h" #include "zScene.h" #include "zEvent.h" @@ -26,15 +27,15 @@ struct zEnt : xEnt void checkpoint_collision_hack(zEnt* ent); char* zParamGetString(xModelAssetParam* param, U32 size, char* tok, char* def); -S32 zParamGetFloatList(xModelAssetParam* param, U32 size, const char* tok, S32 count, - F32* def, F32* result); +S32 zParamGetFloatList(xModelAssetParam* param, U32 size, const char* tok, S32 count, F32* def, + F32* result); void zEntGetShadowParams(xEnt* ent, xVec3* center, F32* radius, xEntShadow::radius_enum rtype); S32 zParamGetVector(xModelAssetParam* param, U32 size, const char* tok, xVec3 result, xVec3*); S32 zParamGetVector(xModelAssetParam* param, U32 size, char* tok, xVec3 result, xVec3*); S32 zParamGetFloatList(xModelAssetParam* param, U32 size, char* tok, S32 count, F32* def, - F32* result); + F32* result); S32 zParamGetFloatList(xModelAssetParam* param, U32 size, char* tok, S32 count, F32* def, - F32* result); + F32* result); F32 zParamGetFloat(xModelAssetParam* param, U32 size, const char* tok, F32 def); F32 zParamGetFloat(xModelAssetParam* param, U32 size, char* tok, F32 def); S32 zParamGetInt(xModelAssetParam* param, U32 size, const char* tok, S32 def); @@ -57,7 +58,7 @@ void zEntInit(zEnt* ent, xEntAsset* asset, U32 type); // TODO: Misplaced Inlines/Weak functions WEAK void xModelAnimCollStop(xModelInstance& m); WEAK xMat4x3* xEntGetFrame(const xEnt* ent); -WEAK void xSndPlay3D(U32 id, F32 vol, F32 pitch, U32 priority, U32 flags, - const xVec3* pos, F32 radius, sound_category category, F32 delay); +WEAK void xSndPlay3D(U32 id, F32 vol, F32 pitch, U32 priority, U32 flags, const xVec3* pos, + F32 radius, sound_category category, F32 delay); #endif diff --git a/src/SB/Game/zEntHangable.cpp b/src/SB/Game/zEntHangable.cpp index 19baf03f5..70f28e263 100644 --- a/src/SB/Game/zEntHangable.cpp +++ b/src/SB/Game/zEntHangable.cpp @@ -1,8 +1,36 @@ -#include "xMath3.h" -#include "xVec3.h" +#include "xLinkAsset.h" +#include + #include "zEntHangable.h" -#include +static void HangableSetup(zEntHangable* ent, xEntAsset* asset) +{ + xEntHangableAsset* hangAsset; + xVec3* center; + xMat3x3 hackMat; +} + +void zEntHangable_Init(void* a, void* b) +{ + zEntHangable_Init((zEntHangable*)a, (xEntAsset*)b); +} + +void zEntHangable_Init(zEntHangable* ent, xEntAsset* asset) +{ + zEntInit(ent, asset, 'HANG'); + + if (ent->linkCount) + { + // TODO: Not quite correct + ent->link = (xLinkAsset*)(ent->asset + 1); + } + else + { + ent->link = NULL; + } + + HangableSetup(ent, asset); +} void zEntHangable_Save(zEntHangable* ent, xSerial* s) { diff --git a/src/SB/Game/zEntHangable.h b/src/SB/Game/zEntHangable.h index 5335607db..09eb8f4f7 100644 --- a/src/SB/Game/zEntHangable.h +++ b/src/SB/Game/zEntHangable.h @@ -35,6 +35,7 @@ struct zEntHangable : zEnt void zEntHangable_SetupFX(); void zEntHangable_Init(void* ent, void* asset); +void zEntHangable_Init(zEntHangable*, xEntAsset*); void zEntHangable_Save(zEntHangable* ent, xSerial* s); void zEntHangable_Load(zEntHangable* ent, xSerial* s); void zEntHangable_Reset(zEntHangable* ent); From f2ff1ae37b674697a105659dc076c09803697d5a Mon Sep 17 00:00:00 2001 From: Matt P <5638426+mattbruv@users.noreply.github.com> Date: Wed, 23 Apr 2025 23:20:20 -0500 Subject: [PATCH 04/10] static vars --- src/SB/Game/zEntHangable.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/SB/Game/zEntHangable.cpp b/src/SB/Game/zEntHangable.cpp index 70f28e263..4dc291cc2 100644 --- a/src/SB/Game/zEntHangable.cpp +++ b/src/SB/Game/zEntHangable.cpp @@ -3,6 +3,11 @@ #include "zEntHangable.h" +static zParEmitter* sCandleEmitter; +static zParEmitter* sCandleSmokeEmitter; +static U32 sChandelierHash; +static zParEmitter* sMountEmitter; + static void HangableSetup(zEntHangable* ent, xEntAsset* asset) { xEntHangableAsset* hangAsset; From 1a8e440af01e6f1c847e76434f6d4df01b73f0f3 Mon Sep 17 00:00:00 2001 From: Matt P <5638426+mattbruv@users.noreply.github.com> Date: Wed, 23 Apr 2025 23:26:29 -0500 Subject: [PATCH 05/10] hangable_reset --- src/SB/Game/zEntHangable.cpp | 17 +++++++++++++++++ src/SB/Game/zEntHangable.h | 2 ++ 2 files changed, 19 insertions(+) diff --git a/src/SB/Game/zEntHangable.cpp b/src/SB/Game/zEntHangable.cpp index 4dc291cc2..fcabcb2c5 100644 --- a/src/SB/Game/zEntHangable.cpp +++ b/src/SB/Game/zEntHangable.cpp @@ -1,3 +1,4 @@ +#include "xEnt.h" #include "xLinkAsset.h" #include @@ -46,3 +47,19 @@ void zEntHangable_Load(zEntHangable* ent, xSerial* s) { zEntLoad(ent, s); } + +void zEntHangable_Reset(zEntHangable* ent) +{ + zEntHangable_SetShaggy(ent, NULL); + zEntHangable_SetFollow(ent, NULL); + xEntReset(ent); + HangableSetup(ent, ent->asset); +} + +void zEntHangable_SetShaggy(zEntHangable* ent, zEnt* b) +{ +} + +void zEntHangable_SetFollow(zEntHangable* ent, zEnt* b) +{ +} diff --git a/src/SB/Game/zEntHangable.h b/src/SB/Game/zEntHangable.h index 09eb8f4f7..afa9702a8 100644 --- a/src/SB/Game/zEntHangable.h +++ b/src/SB/Game/zEntHangable.h @@ -39,5 +39,7 @@ void zEntHangable_Init(zEntHangable*, xEntAsset*); void zEntHangable_Save(zEntHangable* ent, xSerial* s); void zEntHangable_Load(zEntHangable* ent, xSerial* s); void zEntHangable_Reset(zEntHangable* ent); +void zEntHangable_SetShaggy(zEntHangable* ent, zEnt* b); +void zEntHangable_SetFollow(zEntHangable* ent, zEnt* b); #endif From 7e0dea9cac14ba89d2f086110a9e24e66386d989 Mon Sep 17 00:00:00 2001 From: Matt P <5638426+mattbruv@users.noreply.github.com> Date: Wed, 23 Apr 2025 23:36:01 -0500 Subject: [PATCH 06/10] setfollow --- src/SB/Game/zEntHangable.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/SB/Game/zEntHangable.cpp b/src/SB/Game/zEntHangable.cpp index fcabcb2c5..2e2aa5360 100644 --- a/src/SB/Game/zEntHangable.cpp +++ b/src/SB/Game/zEntHangable.cpp @@ -60,6 +60,24 @@ void zEntHangable_SetShaggy(zEntHangable* ent, zEnt* b) { } +void zEntHangable_FollowUpdate(class zEntHangable* ent /* r2 */) +{ + // Blocks + /* anonymous block */ { + // Range: 0x136EE0 -> 0x137058 + class xVec3* center; // r2 + } +} + void zEntHangable_SetFollow(zEntHangable* ent, zEnt* b) { + if (b) + { + ent->follow = b; + zEntHangable_FollowUpdate(ent); + } + else if (ent->follow) + { + ent->follow = NULL; + } } From 8e2434b321741af8f3a2e2fddfe605960465bdb3 Mon Sep 17 00:00:00 2001 From: Matt P <5638426+mattbruv@users.noreply.github.com> Date: Wed, 23 Apr 2025 23:42:42 -0500 Subject: [PATCH 07/10] setupfx --- src/SB/Game/zEntHangable.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/SB/Game/zEntHangable.cpp b/src/SB/Game/zEntHangable.cpp index 2e2aa5360..20c198753 100644 --- a/src/SB/Game/zEntHangable.cpp +++ b/src/SB/Game/zEntHangable.cpp @@ -1,5 +1,7 @@ #include "xEnt.h" #include "xLinkAsset.h" +#include "xString.h" +#include "zParEmitter.h" #include #include "zEntHangable.h" @@ -9,6 +11,14 @@ static zParEmitter* sCandleSmokeEmitter; static U32 sChandelierHash; static zParEmitter* sMountEmitter; +void zEntHangable_SetupFX() +{ + sCandleEmitter = zParEmitterFind("PAREMIT_CHAND_CANDLE"); + sCandleSmokeEmitter = zParEmitterFind("PAREMIT_CHAND_CANDLE_SMOKE"); + sChandelierHash = xStrHash("rlii0006"); + sMountEmitter = zParEmitterFind("PAREMIT_HANGABLE_MOUNT"); +} + static void HangableSetup(zEntHangable* ent, xEntAsset* asset) { xEntHangableAsset* hangAsset; From b6a9d8772bc6dfe8fabae73bc3fb980f7692fbda Mon Sep 17 00:00:00 2001 From: Matt P <5638426+mattbruv@users.noreply.github.com> Date: Thu, 24 Apr 2025 00:00:27 -0500 Subject: [PATCH 08/10] stub fns --- src/SB/Game/zEntHangable.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/SB/Game/zEntHangable.cpp b/src/SB/Game/zEntHangable.cpp index 20c198753..1d96cdcaa 100644 --- a/src/SB/Game/zEntHangable.cpp +++ b/src/SB/Game/zEntHangable.cpp @@ -1,3 +1,4 @@ +#include "xBase.h" #include "xEnt.h" #include "xLinkAsset.h" #include "xString.h" @@ -48,6 +49,41 @@ void zEntHangable_Init(zEntHangable* ent, xEntAsset* asset) HangableSetup(ent, asset); } +static void zEntHangable_UpdateFX(class zEntHangable* ent) +{ + xVec3 offset_rlii0006[8]; + xVec3* local_offset; + xParEmitterCustomSettings info; + zParEmitter* emitter; + S32 i; +} + +void zEntHangable_Update(zEntHangable* ent, xScene*, F32 dt) +{ + xVec3 unitHang; +} + +static void zEntHangableMountFX(zEntHangable*) +{ +} + +S32 zEntHangableEventCB(xBase* from, xBase* to, U32 toEvent, const F32* toParam, xBase*) +{ + zEntHangable* ent; // r20 + zEnt* follow; // r2 + // FloatAndVoid dist; // r29+0x20C + return 0; +} + +static bool HangableIsMovingTooMuch(xVec3* a, xVec3* b, xVec3* c, xVec3* d) +{ + return false; +} + +void zEntHangable_SetMatrix(zEntHangable* ent, F32 f) +{ +} + void zEntHangable_Save(zEntHangable* ent, xSerial* s) { zEntSave(ent, s); From 09cba763c1f91ea6702c942e31dba6711ed19a88 Mon Sep 17 00:00:00 2001 From: Matt P <5638426+mattbruv@users.noreply.github.com> Date: Thu, 24 Apr 2025 00:05:03 -0500 Subject: [PATCH 09/10] cleanup --- src/SB/Game/zEntHangable.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/SB/Game/zEntHangable.cpp b/src/SB/Game/zEntHangable.cpp index 1d96cdcaa..3e8192212 100644 --- a/src/SB/Game/zEntHangable.cpp +++ b/src/SB/Game/zEntHangable.cpp @@ -49,7 +49,7 @@ void zEntHangable_Init(zEntHangable* ent, xEntAsset* asset) HangableSetup(ent, asset); } -static void zEntHangable_UpdateFX(class zEntHangable* ent) +static void zEntHangable_UpdateFX(zEntHangable* ent) { xVec3 offset_rlii0006[8]; xVec3* local_offset; @@ -106,13 +106,9 @@ void zEntHangable_SetShaggy(zEntHangable* ent, zEnt* b) { } -void zEntHangable_FollowUpdate(class zEntHangable* ent /* r2 */) +void zEntHangable_FollowUpdate(zEntHangable* ent) { - // Blocks - /* anonymous block */ { - // Range: 0x136EE0 -> 0x137058 - class xVec3* center; // r2 - } + xVec3* center; } void zEntHangable_SetFollow(zEntHangable* ent, zEnt* b) From ccced5ff1459f7605efadec0b1657745b17decb4 Mon Sep 17 00:00:00 2001 From: Matt P <5638426+mattbruv@users.noreply.github.com> Date: Thu, 24 Apr 2025 00:07:50 -0500 Subject: [PATCH 10/10] fix build --- src/SB/Game/zEnt.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/SB/Game/zEnt.h b/src/SB/Game/zEnt.h index fe2106bab..48edaa307 100644 --- a/src/SB/Game/zEnt.h +++ b/src/SB/Game/zEnt.h @@ -4,7 +4,6 @@ #include "xEnt.h" #include "xAnim.h" -#include "zEntHangable.h" #include "zScene.h" #include "zEvent.h"