From ce4e1aed9f3ee1235b1166f026fc598155a503c8 Mon Sep 17 00:00:00 2001 From: Kevyn Date: Sun, 13 Apr 2025 01:39:07 -0400 Subject: [PATCH 01/12] Fix zNPCFXCinematic implementation --- src/SB/Game/zNPCFXCinematic.cpp | 15 ++++++++++ src/SB/Game/zNPCFXCinematic.h | 52 +++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/src/SB/Game/zNPCFXCinematic.cpp b/src/SB/Game/zNPCFXCinematic.cpp index ab3ca25c4..84e8edfa9 100644 --- a/src/SB/Game/zNPCFXCinematic.cpp +++ b/src/SB/Game/zNPCFXCinematic.cpp @@ -10,6 +10,16 @@ void zNPCFXShutdown() { } +static S32 init = 0; +void zNPCFXCinematic_Init() +{ + if (!init) + { + init = 1; + } + //g_noz_ncin = &nozey_npc_cinematics; +} + void clamp_bone_index(NCINEntry*, RpAtomic*) { } @@ -23,3 +33,8 @@ void NPCCone::RadiusSet(F32 conefloat) { rad_cone = conefloat; } + +void NPARMgmt::KillAll() +{ + this->cnt_active = 0; +} \ No newline at end of file diff --git a/src/SB/Game/zNPCFXCinematic.h b/src/SB/Game/zNPCFXCinematic.h index 9a520b442..2fd61cf8e 100644 --- a/src/SB/Game/zNPCFXCinematic.h +++ b/src/SB/Game/zNPCFXCinematic.h @@ -15,6 +15,58 @@ S32 zNPCFXCutscenePrep(const xScene*, F32, const zCutsceneMgr* csnmgr); void zNPCFXCutscene(const xScene*, F32, const zCutsceneMgr* csnmgr); void zNPCFXCutsceneDone(const xScene*, F32, const zCutsceneMgr* csnmgr); +enum en_nparptyp +{ + NPAR_TYP_UNKNOWN, + NPAR_TYP_OILBUB, + NPAR_TYP_TUBESPIRAL, + NPAR_TYP_TUBECONFETTI, + NPAR_TYP_GLOVEDUST , + NPAR_TYP_MONSOONRAIN, + NPAR_TYP_SLEEPYZEEZ, + NPAR_TYP_CHUCKSPLASH, + NPAR_TYP_TARTARGUNK, + NPAR_TYP_DOGBREATH, + NPAR_TYP_VISSPLASH, + NPAR_TYP_FIREWORKS, + NPAR_TYP_NOMORE, + NPAR_TYP_FORCE = 2147483647 +}; + +struct NPARData +{ +public: + xVec3 pos; + F32 xy_size[2]; + F32 uv_tl[2]; + F32 uv_br[2]; + RwRGBA color; + F32 tmr_remain; + F32 tym_exist; + F32 fac_abuse; + xVec3 vel; + S32 flg_popts : 24; + S32 nparmode : 8; + F32 unused[3]; +}; + +struct NPARXtraData +{ + +}; + +struct NPARMgmt +{ + en_nparptyp typ_npar; + S32 flg_npar; + NPARData * par_buf; + S32 cnt_active; + S32 num_max; + RwTexture * txtr; + NPARXtraData * xtra_data; + void KillAll(); +}; + struct NCINLyt { zLightning* lyt_zap; From ed0c49d6955855bc3ad9e8a8d57982af099006e5 Mon Sep 17 00:00:00 2001 From: Kevyn Date: Sun, 13 Apr 2025 03:41:43 -0400 Subject: [PATCH 02/12] All NPCCone functions 100% --- src/SB/Game/zNPCFXCinematic.cpp | 27 ++++++++++++++++++++++++++- src/SB/Game/zNPCFXCinematic.h | 8 +++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/SB/Game/zNPCFXCinematic.cpp b/src/SB/Game/zNPCFXCinematic.cpp index 84e8edfa9..5bceceb70 100644 --- a/src/SB/Game/zNPCFXCinematic.cpp +++ b/src/SB/Game/zNPCFXCinematic.cpp @@ -29,6 +29,24 @@ void NPCCone::TextureSet(RwRaster* raster) rast_cone = raster; } +void NPCCone::UVSliceSet(F32 u, F32 v) +{ + this->uv_tip[2] = u; + this->uv_slice[1] = v; +} + +void NPCCone::UVBaseSet(F32 u, F32 v) +{ + this->uv_tip[0] = u; + this->uv_tip[1] = v; +} + +void NPCCone::ColorSet(RwRGBA top, RwRGBA bot) +{ + this->rgba_top = top; + this->rgba_bot = bot; +} + void NPCCone::RadiusSet(F32 conefloat) { rad_cone = conefloat; @@ -37,4 +55,11 @@ void NPCCone::RadiusSet(F32 conefloat) void NPARMgmt::KillAll() { this->cnt_active = 0; -} \ No newline at end of file +} + +//zNPCB_SB2* zNPCB_SB2::singleton() +//{ + //return _singleton__9zNPCB_SB2; +//} + + diff --git a/src/SB/Game/zNPCFXCinematic.h b/src/SB/Game/zNPCFXCinematic.h index 2fd61cf8e..09e47bb32 100644 --- a/src/SB/Game/zNPCFXCinematic.h +++ b/src/SB/Game/zNPCFXCinematic.h @@ -8,6 +8,10 @@ #include "zNPCHazard.h" #include "zParEmitter.h" #include "zShrapnel.h" +#include "rwcore.h" + + +//#include "iColor.h" void zNPCFXStartup(); void zNPCFXShutdown(); @@ -35,7 +39,6 @@ enum en_nparptyp struct NPARData { -public: xVec3 pos; F32 xy_size[2]; F32 uv_tl[2]; @@ -242,6 +245,9 @@ struct NPCCone F32 uv_tip[2]; F32 uv_slice[2]; void TextureSet(RwRaster* raster); + void UVSliceSet(F32, F32); + void UVBaseSet(F32, F32); + void ColorSet(RwRGBA, RwRGBA); void RadiusSet(F32); }; From 6a792967e7ebdd3121b5e36440fc6d3c360e4255 Mon Sep 17 00:00:00 2001 From: Kevyn Date: Sun, 13 Apr 2025 03:43:54 -0400 Subject: [PATCH 03/12] forgot one change. --- git | 0 src/SB/Game/zNPCFXCinematic.cpp | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 git diff --git a/git b/git new file mode 100644 index 000000000..e69de29bb diff --git a/src/SB/Game/zNPCFXCinematic.cpp b/src/SB/Game/zNPCFXCinematic.cpp index 5bceceb70..0d79d9bfe 100644 --- a/src/SB/Game/zNPCFXCinematic.cpp +++ b/src/SB/Game/zNPCFXCinematic.cpp @@ -32,13 +32,13 @@ void NPCCone::TextureSet(RwRaster* raster) void NPCCone::UVSliceSet(F32 u, F32 v) { this->uv_tip[2] = u; - this->uv_slice[1] = v; + this->uv_slice[1] = v; } void NPCCone::UVBaseSet(F32 u, F32 v) { this->uv_tip[0] = u; - this->uv_tip[1] = v; + this->uv_tip[1] = v; } void NPCCone::ColorSet(RwRGBA top, RwRGBA bot) From d382c2e9d27528285921923642f9a6ff7d26b8b1 Mon Sep 17 00:00:00 2001 From: Red <53205920+Redberd36@users.noreply.github.com> Date: Sun, 13 Apr 2025 15:43:08 -0400 Subject: [PATCH 04/12] Moved Static S32 init to the top of file in zNPCFXCinematic.cpp --- src/SB/Game/zNPCFXCinematic.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/SB/Game/zNPCFXCinematic.cpp b/src/SB/Game/zNPCFXCinematic.cpp index 0d79d9bfe..c872b08c1 100644 --- a/src/SB/Game/zNPCFXCinematic.cpp +++ b/src/SB/Game/zNPCFXCinematic.cpp @@ -6,11 +6,12 @@ #include #include "xCutscene.h" +static S32 init = 0; + void zNPCFXShutdown() { } -static S32 init = 0; void zNPCFXCinematic_Init() { if (!init) From 684981bd8e96846a3e7460a653fdc5fe388125c2 Mon Sep 17 00:00:00 2001 From: Red <53205920+Redberd36@users.noreply.github.com> Date: Sun, 13 Apr 2025 15:44:05 -0400 Subject: [PATCH 05/12] Removed commented code in zNPCFXCinematic.cpp --- src/SB/Game/zNPCFXCinematic.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/SB/Game/zNPCFXCinematic.cpp b/src/SB/Game/zNPCFXCinematic.cpp index c872b08c1..0e6820031 100644 --- a/src/SB/Game/zNPCFXCinematic.cpp +++ b/src/SB/Game/zNPCFXCinematic.cpp @@ -18,7 +18,6 @@ void zNPCFXCinematic_Init() { init = 1; } - //g_noz_ncin = &nozey_npc_cinematics; } void clamp_bone_index(NCINEntry*, RpAtomic*) From cbe27cc29b742f6a11a64ef01443581117cf9d90 Mon Sep 17 00:00:00 2001 From: Red <53205920+Redberd36@users.noreply.github.com> Date: Sun, 13 Apr 2025 15:45:24 -0400 Subject: [PATCH 06/12] Removed commented code at the bottom of zNPCFXCinematic.cpp --- src/SB/Game/zNPCFXCinematic.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/SB/Game/zNPCFXCinematic.cpp b/src/SB/Game/zNPCFXCinematic.cpp index 0e6820031..47d64ad7e 100644 --- a/src/SB/Game/zNPCFXCinematic.cpp +++ b/src/SB/Game/zNPCFXCinematic.cpp @@ -57,9 +57,3 @@ void NPARMgmt::KillAll() this->cnt_active = 0; } -//zNPCB_SB2* zNPCB_SB2::singleton() -//{ - //return _singleton__9zNPCB_SB2; -//} - - From 4ff0424459398832b557a44f7efb2d4df1660bcf Mon Sep 17 00:00:00 2001 From: Red <53205920+Redberd36@users.noreply.github.com> Date: Sun, 13 Apr 2025 15:46:43 -0400 Subject: [PATCH 07/12] Removed commented code at the top of zNPCFXCinematic.h --- src/SB/Game/zNPCFXCinematic.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/SB/Game/zNPCFXCinematic.h b/src/SB/Game/zNPCFXCinematic.h index 09e47bb32..798b14735 100644 --- a/src/SB/Game/zNPCFXCinematic.h +++ b/src/SB/Game/zNPCFXCinematic.h @@ -11,8 +11,6 @@ #include "rwcore.h" -//#include "iColor.h" - void zNPCFXStartup(); void zNPCFXShutdown(); S32 zNPCFXCutscenePrep(const xScene*, F32, const zCutsceneMgr* csnmgr); From c6a9785a765655258149781d59ed1773c3efc899 Mon Sep 17 00:00:00 2001 From: Kevyn Date: Sun, 13 Apr 2025 16:27:23 -0400 Subject: [PATCH 08/12] Added parameter names for UVSliceSet, UVBaseSet, ColorSet --- src/SB/Game/zNPCFXCinematic.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/SB/Game/zNPCFXCinematic.h b/src/SB/Game/zNPCFXCinematic.h index 798b14735..8cc5e0b09 100644 --- a/src/SB/Game/zNPCFXCinematic.h +++ b/src/SB/Game/zNPCFXCinematic.h @@ -243,9 +243,9 @@ struct NPCCone F32 uv_tip[2]; F32 uv_slice[2]; void TextureSet(RwRaster* raster); - void UVSliceSet(F32, F32); - void UVBaseSet(F32, F32); - void ColorSet(RwRGBA, RwRGBA); + void UVSliceSet(F32 u, F32 v); + void UVBaseSet(F32 u, F32 v); + void ColorSet(RwRGBA top, RwRGBA bot); void RadiusSet(F32); }; From 04bf2d39a13ee52ca5cd32b06194bb2c38bf3efc Mon Sep 17 00:00:00 2001 From: Kevyn Date: Sun, 13 Apr 2025 16:38:10 -0400 Subject: [PATCH 09/12] Removed the blank git file --- git | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 git diff --git a/git b/git deleted file mode 100644 index e69de29bb..000000000 From c4fc36e46f85f664d5db9d0b9e1543f577d55e0e Mon Sep 17 00:00:00 2001 From: Kevyn Date: Mon, 14 Apr 2025 02:19:36 -0400 Subject: [PATCH 10/12] 40% - 92% for some NCIN_Par functions in zNPCFXCinematic --- src/SB/Game/zNPCFXCinematic.cpp | 548 +++++++++++++++++++++++++++++++- src/SB/Game/zNPCFXCinematic.h | 1 - 2 files changed, 547 insertions(+), 2 deletions(-) diff --git a/src/SB/Game/zNPCFXCinematic.cpp b/src/SB/Game/zNPCFXCinematic.cpp index 47d64ad7e..b23ff1037 100644 --- a/src/SB/Game/zNPCFXCinematic.cpp +++ b/src/SB/Game/zNPCFXCinematic.cpp @@ -1,13 +1,18 @@ #include "xVec3.h" #include "xMath3.h" +#include "xParEmitter.h" #include "zNPCFXCinematic.h" #include -#include "xCutscene.h" static S32 init = 0; +static const F32 zero = 0.0f; +static const F32 addVal = 20.0f; +static const F32 fillVec3Val = 5.0f; + + void zNPCFXShutdown() { } @@ -20,6 +25,547 @@ void zNPCFXCinematic_Init() } } +void NCIN_Par_BPLANK_JET_1_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) +{ + if (param != 0) + { + fxrec->flg_stat |= 4; + return; + } + + if (fxrec->flg_stat & 2) + { + fxrec->fxdata.pardata.emitter = zParEmitterFind("PAREMIT_BPLANK_JET_1"); + + if (fxrec->fxdata.pardata.emitter->tasset) + { + if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + { + fxrec->fxdata.pardata.emitter = NULL; + } + } + } + + if (fxrec->fxdata.pardata.emitter == NULL) + { + fxrec->flg_stat |= 4; + return; + } + + F32 & float_accum = *(F32*)((U8*)fxrec + 40); + + if (float_accum < zero) + { + U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; + float_accum = addVal + (F32)(val); + } + + *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; +} + +void NCIN_Par_BPLANK_JET_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) +{ + if (param != 0) + { + fxrec->flg_stat |= 4; + return; + } + + if (fxrec->flg_stat & 2) + { + fxrec->fxdata.pardata.emitter = zParEmitterFind("PAREMIT_BPLANK_JET_2"); + + if (fxrec->fxdata.pardata.emitter->tasset) + { + if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + { + fxrec->fxdata.pardata.emitter = NULL; + } + } + } + + if (fxrec->fxdata.pardata.emitter == NULL) + { + fxrec->flg_stat |= 4; + return; + } + + F32 & float_accum = *(F32*)((U8*)fxrec + 40); + + if (float_accum < zero) + { + U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; + float_accum = addVal + val; + } + + *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; +} + +void NCIN_Par_BPLANK_SBB_FLAMES_1_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) +{ + if (param != 0) + { + fxrec->flg_stat |= 4; + return; + } + + if (fxrec->flg_stat & 2) + { + fxrec->fxdata.pardata.emitter = zParEmitterFind("PAREMIT_SBB_FLAMES_1"); + + if (fxrec->fxdata.pardata.emitter->tasset) + { + if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + { + fxrec->fxdata.pardata.emitter = NULL; + } + } + } + + if (fxrec->fxdata.pardata.emitter == NULL) + { + fxrec->flg_stat |= 4; + return; + } + + F32 & float_accum = *(F32*)((U8*)fxrec + 40); + + if (float_accum < zero) + { + U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; + float_accum = addVal + val; + } + + *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; +} + +void NCIN_Par_BPLANK_SBB_FLAMES_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) +{ + if (param != 0) + { + fxrec->flg_stat |= 4; + return; + } + + if (fxrec->flg_stat & 2) + { + fxrec->fxdata.pardata.emitter = zParEmitterFind("PAREMIT_SBB_FLAMES_2"); + + if (fxrec->fxdata.pardata.emitter->tasset) + { + if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + { + fxrec->fxdata.pardata.emitter = NULL; + } + } + } + + if (fxrec->fxdata.pardata.emitter == NULL) + { + fxrec->flg_stat |= 4; + return; + } + + F32 & float_accum = *(F32*)((U8*)fxrec + 40); + + if (float_accum < zero) + { + U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; + float_accum = addVal + val; + } + + *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; +} + +void NCIN_Par_BPLANK_SBB_JET_1_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) +{ + if (param != 0) + { + fxrec->flg_stat |= 4; + return; + } + + if (fxrec->flg_stat & 2) + { + fxrec->fxdata.pardata.emitter = zParEmitterFind("PAREMIT_SBB_JET_1"); + + if (fxrec->fxdata.pardata.emitter->tasset) + { + if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + { + fxrec->fxdata.pardata.emitter = NULL; + } + } + } + + if (fxrec->fxdata.pardata.emitter == NULL) + { + fxrec->flg_stat |= 4; + return; + } + + F32 & float_accum = *(F32*)((U8*)fxrec + 40); + + if (float_accum < zero) + { + U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; + float_accum = addVal + val; + } + + *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; +} + +void NCIN_Par_BPLANK_SBB_JET_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) +{ + if (param != 0) + { + fxrec->flg_stat |= 4; + return; + } + + if (fxrec->flg_stat & 2) + { + fxrec->fxdata.pardata.emitter = zParEmitterFind("PAREMIT_SBB_JET_2"); + + if (fxrec->fxdata.pardata.emitter->tasset) + { + if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + { + fxrec->fxdata.pardata.emitter = NULL; + } + } + } + + if (fxrec->fxdata.pardata.emitter == NULL) + { + fxrec->flg_stat |= 4; + return; + } + + F32 & float_accum = *(F32*)((U8*)fxrec + 40); + + if (float_accum < zero) + { + U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; + float_accum = addVal + val; + } + + *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; +} + +void NCIN_Par_BPLANK_SBB_SMOKE_1_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) +{ + if (param != 0) + { + fxrec->flg_stat |= 4; + return; + } + + if (fxrec->flg_stat & 2) + { + fxrec->fxdata.pardata.emitter = zParEmitterFind("PAREMIT_SBB_SMOKE_1"); + + if (fxrec->fxdata.pardata.emitter->tasset) + { + if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + { + fxrec->fxdata.pardata.emitter = NULL; + } + } + } + + if (fxrec->fxdata.pardata.emitter == NULL) + { + fxrec->flg_stat |= 4; + return; + } + + F32 & float_accum = *(F32*)((U8*)fxrec + 40); + + if (float_accum < zero) + { + U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; + float_accum = addVal + val; + } + + *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; +} + +void NCIN_Par_BPLANK_SBB_SMOKE_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) +{ + if (param != 0) + { + fxrec->flg_stat |= 4; + return; + } + + if (fxrec->flg_stat & 2) + { + fxrec->fxdata.pardata.emitter = zParEmitterFind("PAREMIT_SBB_SMOKE_2"); + + if (fxrec->fxdata.pardata.emitter->tasset) + { + if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + { + fxrec->fxdata.pardata.emitter = NULL; + } + } + } + + if (fxrec->fxdata.pardata.emitter == NULL) + { + fxrec->flg_stat |= 4; + return; + } + + F32 & float_accum = *(F32*)((U8*)fxrec + 40); + + if (float_accum < zero) + { + U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; + float_accum = addVal + val; + } + + *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; +} + +void NCIN_Par_CIN_BIGDUP_SMOKE_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) +{ + if (param != 0) + { + fxrec->flg_stat |= 4; + return; + } + + if (fxrec->flg_stat & 2) + { + fxrec->fxdata.pardata.emitter = zParEmitterFind("PAREMIT_CIN_BIGUP_SMOKE"); + + if (fxrec->fxdata.pardata.emitter->tasset) + { + if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + { + fxrec->fxdata.pardata.emitter = NULL; + } + } + } + + if (fxrec->fxdata.pardata.emitter == NULL) + { + fxrec->flg_stat |= 4; + return; + } + + F32 & float_accum = *(F32*)((U8*)fxrec + 40); + + if (float_accum < zero) + { + U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; + float_accum = addVal + val; + } + + *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; +} + +void NCIN_Par_CIN_BIGDUP_SPAWN_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) +{ + if (param != 0) + { + fxrec->flg_stat |= 4; + return; + } + + if (fxrec->flg_stat & 2) + { + fxrec->fxdata.pardata.emitter = zParEmitterFind("PAREMIT_CIN_BIGUP_SPAWN"); + + if (fxrec->fxdata.pardata.emitter->tasset) + { + if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + { + fxrec->fxdata.pardata.emitter = NULL; + } + } + } + + if (fxrec->fxdata.pardata.emitter == NULL) + { + fxrec->flg_stat |= 4; + return; + } + + F32 & float_accum = *(F32*)((U8*)fxrec + 40); + + if (float_accum < zero) + { + U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; + float_accum = addVal + val; + } + + *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; +} + +void NCIN_Par_CIN_PLATFORM_JETS_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) +{ + if (param != 0) + { + fxrec->flg_stat |= 4; + return; + } + + if (fxrec->flg_stat & 2) + { + fxrec->fxdata.pardata.emitter = zParEmitterFind("PAREMIT_CIN_PLATFORM_JETS"); + + if (fxrec->fxdata.pardata.emitter->tasset) + { + if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + { + fxrec->fxdata.pardata.emitter = NULL; + } + } + } + + if (fxrec->fxdata.pardata.emitter == NULL) + { + fxrec->flg_stat |= 4; + return; + } + + F32 & float_accum = *(F32*)((U8*)fxrec + 40); + + if (float_accum < zero) + { + U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; + float_accum = addVal + val; + } + + *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; +} + +void NCIN_Generic_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) +{ + if (param != 0) + { + fxrec->flg_stat |= 4; + return; + } +} + +void NCIN_BubSlam(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) +{ + if (param != 0) + { + fxrec->flg_stat |= 4; + return; + } + + if (!(fxrec->flg_stat & 2)) + { + return; + } + + switch (fxrec->typ_ncinfx) + { + case 3: + zFX_SpawnBubbleSlam(&fxrec->pos_A[0], (U32)64, fxrec->tym_beg, fxrec->tym_end, fxrec->tym_end); + break; + case 2: + zFX_SpawnBubbleSlam(&fxrec->pos_A[0], (U32)128, fxrec->tym_beg, fxrec->tym_end, fxrec->tym_end); + break; + default: + break; + } +} + +void NCIN_BubTrailBone_AR(const zCutsceneMgr*, NCINEntry* fxrec, RpAtomic*, RwMatrixTag*, U32 num_1, U32 num_2) +{ + F32 fx = *(F32*)((S8*)fxrec + 36); + F32 fy = *(F32*)((S8*)fxrec + 40); + + S32 ifx = fx; + S32 ify = fy; + + if (num_1 != ifx) + { + return; + } + + xVec3 pos = *(xVec3*)((S8*)fxrec + 48); + + if (ify > 0) + { + xVec3& offset = *(xVec3*)((S8*)fxrec + 48 + (ify << 6)); + pos += offset; + } + + zFX_SpawnBubbleTrail(&pos, 1); +} + +void NCIN_BubHit(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) +{ + if (param != 0) + { + fxrec->flg_stat |= 4; + return; + } + + else + { + if (fxrec->flg_stat & 2) + { + zFX_SpawnBubbleHit((xVec3*)&fxrec->pos_A[0], 0x10); + } + + zFX_SpawnBubbleHit((xVec3*)&fxrec->pos_A[0], 3); + } +} + +void NCIN_Zapper(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) +{ + if (param != 0) + { + fxrec->flg_stat |= 4; + + if (fxrec->idx_anim == 29 || fxrec->idx_anim == 8) + { + if (fxrec->fxdata.lytdata.lyt_zap != NULL) + { + zLightningKill(fxrec->fxdata.lytdata.lyt_zap); + } + + fxrec->fxdata.lytdata.lyt_zap = NULL; + } + return; + } + + if (fxrec->flg_stat & 2) + { + memset(&fxrec->fxdata.arcdata.lightning, 0, sizeof(fxrec->fxdata.arcdata.lightning)); + } + + if (fxrec->fxdata.lytdata.lyt_zap == NULL) + { + fxrec->flg_stat |= 4; + } +} + +void NCIN_HammerShock(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) +{ + if (param != 0) + { + fxrec->flg_stat |= 4; + return; + } + + if (fxrec->flg_stat & 2) + { + zFXHammer(&fxrec->pos_A[0]); + fxrec->flg_stat |= 4; + } +} + + void clamp_bone_index(NCINEntry*, RpAtomic*) { } diff --git a/src/SB/Game/zNPCFXCinematic.h b/src/SB/Game/zNPCFXCinematic.h index 8cc5e0b09..bca187829 100644 --- a/src/SB/Game/zNPCFXCinematic.h +++ b/src/SB/Game/zNPCFXCinematic.h @@ -53,7 +53,6 @@ struct NPARData struct NPARXtraData { - }; struct NPARMgmt From 5ab6dfae09cddf30ed1d802c49477e1e5734accc Mon Sep 17 00:00:00 2001 From: Kevyn Date: Tue, 15 Apr 2025 02:31:59 -0400 Subject: [PATCH 11/12] Pointer name fixes for NCIN_Par functions in zNPCFXCinematic + one 100% zTalkBox function --- src/SB/Game/zNPCFXCinematic.cpp | 151 ++++++++++++++++---------------- src/SB/Game/zTalkBox.cpp | 16 ++++ src/SB/Game/zTalkBox.h | 2 + 3 files changed, 92 insertions(+), 77 deletions(-) diff --git a/src/SB/Game/zNPCFXCinematic.cpp b/src/SB/Game/zNPCFXCinematic.cpp index b23ff1037..66d1c6060 100644 --- a/src/SB/Game/zNPCFXCinematic.cpp +++ b/src/SB/Game/zNPCFXCinematic.cpp @@ -39,7 +39,7 @@ void NCIN_Par_BPLANK_JET_1_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) if (fxrec->fxdata.pardata.emitter->tasset) { - if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + if (fxrec->fxdata.pardata.emitter->tasset->emit_type != 15) { fxrec->fxdata.pardata.emitter = NULL; } @@ -52,15 +52,15 @@ void NCIN_Par_BPLANK_JET_1_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) return; } - F32 & float_accum = *(F32*)((U8*)fxrec + 40); + F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < zero) + if (float_accum < 0.0f) { - U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; - float_accum = addVal + (F32)(val); + U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; + float_accum = 20.0f + val; } - *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; + fxrec->pos_B[0] = 5.0f; } void NCIN_Par_BPLANK_JET_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) @@ -77,7 +77,7 @@ void NCIN_Par_BPLANK_JET_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) if (fxrec->fxdata.pardata.emitter->tasset) { - if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + if (fxrec->fxdata.pardata.emitter->tasset->emit_type != 15) { fxrec->fxdata.pardata.emitter = NULL; } @@ -90,15 +90,15 @@ void NCIN_Par_BPLANK_JET_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) return; } - F32 & float_accum = *(F32*)((U8*)fxrec + 40); + F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < zero) + if (float_accum < 0.0f) { - U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; - float_accum = addVal + val; + U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; + float_accum = 20.0f + val; } - *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; + fxrec->pos_B[0] = 5.0f; } void NCIN_Par_BPLANK_SBB_FLAMES_1_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) @@ -115,7 +115,7 @@ void NCIN_Par_BPLANK_SBB_FLAMES_1_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 if (fxrec->fxdata.pardata.emitter->tasset) { - if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + if (fxrec->fxdata.pardata.emitter->tasset->emit_type != 15) { fxrec->fxdata.pardata.emitter = NULL; } @@ -128,15 +128,15 @@ void NCIN_Par_BPLANK_SBB_FLAMES_1_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 return; } - F32 & float_accum = *(F32*)((U8*)fxrec + 40); + F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < zero) + if (float_accum < 0.0f) { - U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; - float_accum = addVal + val; + U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; + float_accum = 20.0f + val; } - *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; + fxrec->pos_B[0] = 5.0f; } void NCIN_Par_BPLANK_SBB_FLAMES_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) @@ -153,7 +153,7 @@ void NCIN_Par_BPLANK_SBB_FLAMES_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 if (fxrec->fxdata.pardata.emitter->tasset) { - if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + if (fxrec->fxdata.pardata.emitter->tasset->emit_type != 15) { fxrec->fxdata.pardata.emitter = NULL; } @@ -166,15 +166,15 @@ void NCIN_Par_BPLANK_SBB_FLAMES_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 return; } - F32 & float_accum = *(F32*)((U8*)fxrec + 40); + F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < zero) + if (float_accum < 0.0f) { - U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; - float_accum = addVal + val; + U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; + float_accum = 20.0f + val; } - *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; + fxrec->pos_B[0] = 5.0f; } void NCIN_Par_BPLANK_SBB_JET_1_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) @@ -191,7 +191,7 @@ void NCIN_Par_BPLANK_SBB_JET_1_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 pa if (fxrec->fxdata.pardata.emitter->tasset) { - if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + if (fxrec->fxdata.pardata.emitter->tasset->emit_type != 15) { fxrec->fxdata.pardata.emitter = NULL; } @@ -204,15 +204,15 @@ void NCIN_Par_BPLANK_SBB_JET_1_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 pa return; } - F32 & float_accum = *(F32*)((U8*)fxrec + 40); + F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < zero) + if (float_accum < 0.0f) { - U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; - float_accum = addVal + val; + U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; + float_accum = 20.0f + val; } - *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; + fxrec->pos_B[0] = 5.0f; } void NCIN_Par_BPLANK_SBB_JET_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) @@ -229,7 +229,7 @@ void NCIN_Par_BPLANK_SBB_JET_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 pa if (fxrec->fxdata.pardata.emitter->tasset) { - if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + if (fxrec->fxdata.pardata.emitter->tasset->emit_type != 15) { fxrec->fxdata.pardata.emitter = NULL; } @@ -242,15 +242,15 @@ void NCIN_Par_BPLANK_SBB_JET_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 pa return; } - F32 & float_accum = *(F32*)((U8*)fxrec + 40); + F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < zero) + if (float_accum < 0.0f) { - U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; - float_accum = addVal + val; + U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; + float_accum = 20.0f + val; } - *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; + fxrec->pos_B[0] = 5.0f; } void NCIN_Par_BPLANK_SBB_SMOKE_1_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) @@ -267,7 +267,7 @@ void NCIN_Par_BPLANK_SBB_SMOKE_1_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 if (fxrec->fxdata.pardata.emitter->tasset) { - if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + if (fxrec->fxdata.pardata.emitter->tasset->emit_type != 15) { fxrec->fxdata.pardata.emitter = NULL; } @@ -280,15 +280,15 @@ void NCIN_Par_BPLANK_SBB_SMOKE_1_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 return; } - F32 & float_accum = *(F32*)((U8*)fxrec + 40); + F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < zero) + if (float_accum < 0.0f) { - U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; - float_accum = addVal + val; + U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; + float_accum = 20.0f + val; } - *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; + fxrec->pos_B[0] = 5.0f; } void NCIN_Par_BPLANK_SBB_SMOKE_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) @@ -305,7 +305,7 @@ void NCIN_Par_BPLANK_SBB_SMOKE_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 if (fxrec->fxdata.pardata.emitter->tasset) { - if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + if (fxrec->fxdata.pardata.emitter->tasset->emit_type != 15) { fxrec->fxdata.pardata.emitter = NULL; } @@ -318,15 +318,15 @@ void NCIN_Par_BPLANK_SBB_SMOKE_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 return; } - F32 & float_accum = *(F32*)((U8*)fxrec + 40); + F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < zero) + if (float_accum < 0.0f) { - U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; - float_accum = addVal + val; + U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; + float_accum = 20.0f + val; } - *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; + fxrec->pos_B[0] = 5.0f; } void NCIN_Par_CIN_BIGDUP_SMOKE_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) @@ -343,7 +343,7 @@ void NCIN_Par_CIN_BIGDUP_SMOKE_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 pa if (fxrec->fxdata.pardata.emitter->tasset) { - if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + if (fxrec->fxdata.pardata.emitter->tasset->emit_type != 15) { fxrec->fxdata.pardata.emitter = NULL; } @@ -356,15 +356,15 @@ void NCIN_Par_CIN_BIGDUP_SMOKE_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 pa return; } - F32 & float_accum = *(F32*)((U8*)fxrec + 40); + F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < zero) + if (float_accum < 0.0f) { - U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; - float_accum = addVal + val; + U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; + float_accum = 20.0f + val; } - *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; + fxrec->pos_B[0] = 5.0f; } void NCIN_Par_CIN_BIGDUP_SPAWN_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) @@ -381,7 +381,7 @@ void NCIN_Par_CIN_BIGDUP_SPAWN_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 pa if (fxrec->fxdata.pardata.emitter->tasset) { - if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + if (fxrec->fxdata.pardata.emitter->tasset->emit_type != 15) { fxrec->fxdata.pardata.emitter = NULL; } @@ -394,15 +394,15 @@ void NCIN_Par_CIN_BIGDUP_SPAWN_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 pa return; } - F32 & float_accum = *(F32*)((U8*)fxrec + 40); + F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < zero) + if (float_accum < 0.0f) { - U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; - float_accum = addVal + val; + U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; + float_accum = 20.0f + val; } - *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; + fxrec->pos_B[0] = 5.0f; } void NCIN_Par_CIN_PLATFORM_JETS_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) @@ -419,7 +419,7 @@ void NCIN_Par_CIN_PLATFORM_JETS_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 p if (fxrec->fxdata.pardata.emitter->tasset) { - if (((U8*)fxrec->fxdata.pardata.emitter->tasset)[9] != 15) + if (fxrec->fxdata.pardata.emitter->tasset->emit_type != 15) { fxrec->fxdata.pardata.emitter = NULL; } @@ -432,15 +432,15 @@ void NCIN_Par_CIN_PLATFORM_JETS_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 p return; } - F32 & float_accum = *(F32*)((U8*)fxrec + 40); + F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < zero) + if (float_accum < 0.0f) { - U8 val = ((U8*)fxrec->fxdata.pardata.emitter)[18]; - float_accum = addVal + val; + U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; + float_accum = 20.0f + val; } - *((xVec3*)((U8*)fxrec + 48)) = fillVec3Val; + fxrec->pos_B[0] = 5.0f; } void NCIN_Generic_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) @@ -468,10 +468,10 @@ void NCIN_BubSlam(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) switch (fxrec->typ_ncinfx) { case 3: - zFX_SpawnBubbleSlam(&fxrec->pos_A[0], (U32)64, fxrec->tym_beg, fxrec->tym_end, fxrec->tym_end); + zFX_SpawnBubbleSlam(&fxrec->pos_A[0], 64, fxrec->tym_beg, fxrec->tym_end, fxrec->tym_end); break; case 2: - zFX_SpawnBubbleSlam(&fxrec->pos_A[0], (U32)128, fxrec->tym_beg, fxrec->tym_end, fxrec->tym_end); + zFX_SpawnBubbleSlam(&fxrec->pos_A[0], 128, fxrec->tym_beg, fxrec->tym_end, fxrec->tym_end); break; default: break; @@ -480,22 +480,19 @@ void NCIN_BubSlam(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) void NCIN_BubTrailBone_AR(const zCutsceneMgr*, NCINEntry* fxrec, RpAtomic*, RwMatrixTag*, U32 num_1, U32 num_2) { - F32 fx = *(F32*)((S8*)fxrec + 36); - F32 fy = *(F32*)((S8*)fxrec + 40); - - S32 ifx = fx; - S32 ify = fy; + S32 ifx = fxrec->pos_A[1].x; + S32 ify = fxrec->pos_A[1].y; if (num_1 != ifx) { return; } - xVec3 pos = *(xVec3*)((S8*)fxrec + 48); + xVec3 pos = fxrec->pos_A[2]; if (ify > 0) { - xVec3& offset = *(xVec3*)((S8*)fxrec + 48 + (ify << 6)); + xVec3& offset = fxrec->pos_B[ify]; pos += offset; } @@ -514,10 +511,10 @@ void NCIN_BubHit(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) { if (fxrec->flg_stat & 2) { - zFX_SpawnBubbleHit((xVec3*)&fxrec->pos_A[0], 0x10); + zFX_SpawnBubbleHit(&fxrec->pos_A[0], 16); } - zFX_SpawnBubbleHit((xVec3*)&fxrec->pos_A[0], 3); + zFX_SpawnBubbleHit(&fxrec->pos_A[0], 3); } } diff --git a/src/SB/Game/zTalkBox.cpp b/src/SB/Game/zTalkBox.cpp index f39f00241..dc984e90e 100644 --- a/src/SB/Game/zTalkBox.cpp +++ b/src/SB/Game/zTalkBox.cpp @@ -1,3 +1,19 @@ #include "zTalkBox.h" #include + +namespace +{ + struct SharedTalkboxState + { + void* padding[2]; // FIXME: variables not verified + ztalkbox* active; + }; + + SharedTalkboxState ztalkbox_shared; +} + +ztalkbox* ztalkbox::get_active() +{ + return ztalkbox_shared.active; +} diff --git a/src/SB/Game/zTalkBox.h b/src/SB/Game/zTalkBox.h index 776ecb790..7772d2aed 100644 --- a/src/SB/Game/zTalkBox.h +++ b/src/SB/Game/zTalkBox.h @@ -86,6 +86,8 @@ struct ztalkbox : xBase static void reset_all(); static void permit(U32 add_flags, U32 remove_flags); + + static ztalkbox* get_active(); void start_talk(U32 textID, callback*, zNPCCommon*); // FIXME: params not verified void stop_talk(); From 3830707f2ffc97a1905089350f4b4cf0a3570381 Mon Sep 17 00:00:00 2001 From: Kevyn Date: Tue, 15 Apr 2025 02:41:23 -0400 Subject: [PATCH 12/12] Deleted static variables top of script --- src/SB/Game/zNPCFXCinematic.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/SB/Game/zNPCFXCinematic.cpp b/src/SB/Game/zNPCFXCinematic.cpp index 66d1c6060..1cd92f044 100644 --- a/src/SB/Game/zNPCFXCinematic.cpp +++ b/src/SB/Game/zNPCFXCinematic.cpp @@ -8,11 +8,6 @@ static S32 init = 0; -static const F32 zero = 0.0f; -static const F32 addVal = 20.0f; -static const F32 fillVec3Val = 5.0f; - - void zNPCFXShutdown() { }