diff --git a/src/SB/Game/zEnt.h b/src/SB/Game/zEnt.h index 71673cef3..48edaa307 100644 --- a/src/SB/Game/zEnt.h +++ b/src/SB/Game/zEnt.h @@ -26,15 +26,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 +57,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 30999a894..3e8192212 100644 --- a/src/SB/Game/zEntHangable.cpp +++ b/src/SB/Game/zEntHangable.cpp @@ -1,5 +1,125 @@ -#include "xMath3.h" -#include "xVec3.h" +#include "xBase.h" +#include "xEnt.h" +#include "xLinkAsset.h" +#include "xString.h" +#include "zParEmitter.h" +#include + #include "zEntHangable.h" -#include +static zParEmitter* sCandleEmitter; +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; + 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); +} + +static void zEntHangable_UpdateFX(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); +} + +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_FollowUpdate(zEntHangable* ent) +{ + xVec3* center; +} + +void zEntHangable_SetFollow(zEntHangable* ent, zEnt* b) +{ + if (b) + { + ent->follow = b; + zEntHangable_FollowUpdate(ent); + } + else if (ent->follow) + { + ent->follow = NULL; + } +} diff --git a/src/SB/Game/zEntHangable.h b/src/SB/Game/zEntHangable.h index 5335607db..afa9702a8 100644 --- a/src/SB/Game/zEntHangable.h +++ b/src/SB/Game/zEntHangable.h @@ -35,8 +35,11 @@ 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); +void zEntHangable_SetShaggy(zEntHangable* ent, zEnt* b); +void zEntHangable_SetFollow(zEntHangable* ent, zEnt* b); #endif