From ce4e1aed9f3ee1235b1166f026fc598155a503c8 Mon Sep 17 00:00:00 2001 From: Kevyn Date: Sun, 13 Apr 2025 01:39:07 -0400 Subject: [PATCH 01/18] 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/18] 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/18] 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/18] 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/18] 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/18] 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/18] 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/18] 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/18] 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/18] 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/18] 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/18] 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() { } From 1f4a4da708db95be2e92d724363fe8788379d8ec Mon Sep 17 00:00:00 2001 From: Kevyn Date: Wed, 16 Apr 2025 21:19:56 -0400 Subject: [PATCH 13/18] Working more on zNPCFXCinematic with one 100% and started some others. --- src/SB/Game/zNPCFXCinematic.cpp | 135 +++++++++++++++++++++++++++++++- src/SB/Game/zNPCFXCinematic.h | 50 +----------- src/SB/Game/zNPCSupplement.h | 1 + src/SB/Game/zTalkBox.cpp | 17 ++++ src/SB/Game/zTalkBox.h | 4 +- 5 files changed, 155 insertions(+), 52 deletions(-) diff --git a/src/SB/Game/zNPCFXCinematic.cpp b/src/SB/Game/zNPCFXCinematic.cpp index 1cd92f044..1016ad98c 100644 --- a/src/SB/Game/zNPCFXCinematic.cpp +++ b/src/SB/Game/zNPCFXCinematic.cpp @@ -460,7 +460,8 @@ void NCIN_BubSlam(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) return; } - switch (fxrec->typ_ncinfx) + en_nparptyp type = NPAR_TYP_UNKNOWN; //FIXME: Unsure of what type goes here + switch (type) { case 3: zFX_SpawnBubbleSlam(&fxrec->pos_A[0], 64, fxrec->tym_beg, fxrec->tym_end, fxrec->tym_end); @@ -557,6 +558,138 @@ void NCIN_HammerShock(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) } } +void NCIN_HammerStreak_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) +{ + if (param != 0) + { + fxrec->flg_stat |= 4; + + xFXStreakStop(fxrec->fxdata.strkdata.sid_horz); + xFXStreakStop(fxrec->fxdata.strkdata.sid_vert); + + fxrec->fxdata.strkdata.sid_horz = 57005; + fxrec->fxdata.strkdata.sid_vert = 57005; + + return; + } + + if (fxrec->flg_stat & 2) + { + en_npcstreak styp_h = NPC_STRK_HAMMERSMASH_HORZ; + en_npcstreak styp_v = NPC_STRK_HAMMERSMASH_VERT; + + fxrec->fxdata.strkdata.sid_horz = NPCC_StreakCreate(styp_h); + fxrec->fxdata.strkdata.sid_vert = NPCC_StreakCreate(styp_v); + } +} + +void NCIN_HammerStreak_AR(const zCutsceneMgr*, NCINEntry* fxrec, RpAtomic*, RwMatrixTag*, U32 num_1, U32 num_2) +{ + if (num_2 != 2) + { + return; + } + + U32 sid_vert = fxrec->fxdata.strkdata.sid_vert; + U32 sid_horz = fxrec->fxdata.strkdata.sid_horz; + +} + +void NCIN_WaterSplash(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) +{ + if (param != 0) + { + fxrec->flg_stat |= 4; + return; + } + + if (fxrec->flg_stat & 2) + { + const F32 splash_radius = -1.0f; + + NPCC_MakeASplash(&fxrec->pos_A[0], splash_radius); + fxrec->flg_stat |= 4; + } +} + +void NCIN_HazProjShoot(const zCutsceneMgr* mgr, NCINEntry* fxrec, S32 param) +{ + if (param != 0) + { + fxrec->flg_stat |= 4; + + if (fxrec->fxdata.hazdata.npchaz->flg_hazard) + { + fxrec->fxdata.hazdata.npchaz->MarkForRecycle(); + } + return; + } + + if (fxrec->flg_stat & 2) + { + S32 type = fxrec->fxdata.hazdata.npchaz->typ_hazard; + S32 haztype = 10; + + if (type == 11) + { + haztype = 18; + } + else if (type >= 10 && type < 13) + { + haztype = (type == 12) ? 16 : 10; + } + + NPCHazard* haz = HAZ_Acquire(); + + if (!haz) + { + return; + } + + if (!haz->ConfigHelper((en_npchaz)haztype)) + { + return; + } + + haz->SetNPCOwner(NULL); + fxrec->fxdata.hazdata.npchaz = haz; + haz->flg_hazard &= ~128; + + xVec3 delta = fxrec->pos_B[0] - fxrec->pos_A[0]; + F32 len = delta.length(); + + F32 height = fxrec->tym_beg - fxrec->tym_end; + + if (height < 0.01f) + { + height = 1.0f; + } + + haz->pos_hazard = delta; + haz->Start(&fxrec->pos_A[0], height); + } + + if (fxrec->fxdata.hazdata.npchaz) + { + if (fxrec->fxdata.hazdata.npchaz->typ_hazard != 11) + { + fxrec->fxdata.hazdata.npchaz->flg_hazard &= ~0xF000; + } + else + { + fxrec->flg_stat |= 4; + } + } +} + +void NCIN_HazTTSteam_Upd(const zCutsceneMgr* manager, NCINEntry* fxrec, S32 param) +{ +} + +void NCIN_HazTTSteam_AR(const zCutsceneMgr* cutsceneMgr, NCINEntry* fxrec, RpAtomic* atomic, RwMatrixTag* matrix, U32 num_1, U32 num_2) +{ +} + void clamp_bone_index(NCINEntry*, RpAtomic*) { diff --git a/src/SB/Game/zNPCFXCinematic.h b/src/SB/Game/zNPCFXCinematic.h index bca187829..361788736 100644 --- a/src/SB/Game/zNPCFXCinematic.h +++ b/src/SB/Game/zNPCFXCinematic.h @@ -3,6 +3,7 @@ #include #include "zCutsceneMgr.h" +#include "zNPCSupplement.h" #include "xVec3.h" #include "zLightning.h" #include "zNPCHazard.h" @@ -17,55 +18,6 @@ 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 -{ - 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 { diff --git a/src/SB/Game/zNPCSupplement.h b/src/SB/Game/zNPCSupplement.h index 0530486a8..55873a3c6 100644 --- a/src/SB/Game/zNPCSupplement.h +++ b/src/SB/Game/zNPCSupplement.h @@ -76,6 +76,7 @@ struct NPARMgmt RwTexture* txtr; NPARXtraData* xtra_data; void** user_data; + void KillAll(); void Init(en_nparptyp parType, void** userData, NPARXtraData* xtraData); void Clear(); diff --git a/src/SB/Game/zTalkBox.cpp b/src/SB/Game/zTalkBox.cpp index dc984e90e..fe049edc0 100644 --- a/src/SB/Game/zTalkBox.cpp +++ b/src/SB/Game/zTalkBox.cpp @@ -13,7 +13,24 @@ namespace SharedTalkboxState ztalkbox_shared; } +void ztalkbox::reset_all() +{ + volatile int* sharedMemory = reinterpret_cast(ztalkbox_shared.active); + + int value = 0; + *sharedMemory = value; + *(sharedMemory + 8) = value; + *(sharedMemory + 9) = 0; + *(sharedMemory + 10) = 0; + *(sharedMemory + 11) = 0; + *(sharedMemory + 12) = 0; + + clear_layout(); //FIXME: Find and replace with xtextbox::layout::clear() + return; +} + ztalkbox* ztalkbox::get_active() { return ztalkbox_shared.active; } + diff --git a/src/SB/Game/zTalkBox.h b/src/SB/Game/zTalkBox.h index 7772d2aed..e769fd961 100644 --- a/src/SB/Game/zTalkBox.h +++ b/src/SB/Game/zTalkBox.h @@ -84,10 +84,10 @@ struct ztalkbox : xBase static void update_all(xScene& s, F32 dt); static void render_all(); static void reset_all(); + static void clear_layout(); 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 a94bdd357a4cdf0a6a4e6729dccda66b028c0d40 Mon Sep 17 00:00:00 2001 From: Kevyn Date: Wed, 16 Apr 2025 21:29:45 -0400 Subject: [PATCH 14/18] Working more on zNPCFXCinematic with one 100% and started some others. --- src/SB/Game/zNPCFXCinematic.cpp | 5 ---- src/SB/Game/zNPCFXCinematic.h | 52 --------------------------------- 2 files changed, 57 deletions(-) diff --git a/src/SB/Game/zNPCFXCinematic.cpp b/src/SB/Game/zNPCFXCinematic.cpp index ed74129cf..67d67c486 100644 --- a/src/SB/Game/zNPCFXCinematic.cpp +++ b/src/SB/Game/zNPCFXCinematic.cpp @@ -460,12 +460,8 @@ void NCIN_BubSlam(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) return; } -<<<<<<< HEAD en_nparptyp type = NPAR_TYP_UNKNOWN; //FIXME: Unsure of what type goes here switch (type) -======= - switch (fxrec->typ_ncinfx) ->>>>>>> ad7d5ecc7f38e247ec6ca1eef14e833ac41801aa { case 3: zFX_SpawnBubbleSlam(&fxrec->pos_A[0], 64, fxrec->tym_beg, fxrec->tym_end, fxrec->tym_end); @@ -562,7 +558,6 @@ void NCIN_HammerShock(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) } } -<<<<<<< HEAD void NCIN_HammerStreak_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) { if (param != 0) diff --git a/src/SB/Game/zNPCFXCinematic.h b/src/SB/Game/zNPCFXCinematic.h index 2a6e7656f..361788736 100644 --- a/src/SB/Game/zNPCFXCinematic.h +++ b/src/SB/Game/zNPCFXCinematic.h @@ -18,58 +18,6 @@ S32 zNPCFXCutscenePrep(const xScene*, F32, const zCutsceneMgr* csnmgr); void zNPCFXCutscene(const xScene*, F32, const zCutsceneMgr* csnmgr); void zNPCFXCutsceneDone(const xScene*, F32, const zCutsceneMgr* csnmgr); -<<<<<<< HEAD -======= -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 -{ - 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(); -}; ->>>>>>> ad7d5ecc7f38e247ec6ca1eef14e833ac41801aa struct NCINLyt { From 9e4998d08ea1ecee2b9831c1d5ddd4c894542394 Mon Sep 17 00:00:00 2001 From: Kevyn Date: Wed, 16 Apr 2025 21:37:35 -0400 Subject: [PATCH 15/18] Fixed a minor error in zNPCFXCinematic --- src/SB/Game/zNPCFXCinematic.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/SB/Game/zNPCFXCinematic.cpp b/src/SB/Game/zNPCFXCinematic.cpp index 67d67c486..c561b788b 100644 --- a/src/SB/Game/zNPCFXCinematic.cpp +++ b/src/SB/Game/zNPCFXCinematic.cpp @@ -460,8 +460,7 @@ void NCIN_BubSlam(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) return; } - en_nparptyp type = NPAR_TYP_UNKNOWN; //FIXME: Unsure of what type goes here - switch (type) + switch(fxrec->typ_ncinfx) { case 3: zFX_SpawnBubbleSlam(&fxrec->pos_A[0], 64, fxrec->tym_beg, fxrec->tym_end, fxrec->tym_end); From 53c19791fce7695a79a0a492744f77cd216f4c08 Mon Sep 17 00:00:00 2001 From: Kevyn Date: Wed, 16 Apr 2025 21:39:53 -0400 Subject: [PATCH 16/18] Fixed a minor error in zTalkBox --- src/SB/Game/zTalkBox.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/SB/Game/zTalkBox.cpp b/src/SB/Game/zTalkBox.cpp index 69f890ad5..6018a2035 100644 --- a/src/SB/Game/zTalkBox.cpp +++ b/src/SB/Game/zTalkBox.cpp @@ -13,7 +13,6 @@ namespace SharedTalkboxState ztalkbox_shared; } -<<<<<<< HEAD void ztalkbox::reset_all() { volatile int* sharedMemory = reinterpret_cast(ztalkbox_shared.active); @@ -30,13 +29,7 @@ void ztalkbox::reset_all() return; } -======= ->>>>>>> ad7d5ecc7f38e247ec6ca1eef14e833ac41801aa ztalkbox* ztalkbox::get_active() { return ztalkbox_shared.active; } -<<<<<<< HEAD - -======= ->>>>>>> ad7d5ecc7f38e247ec6ca1eef14e833ac41801aa From 2c005bd68ff306a45b41d0465f277faa01d4744e Mon Sep 17 00:00:00 2001 From: Kevyn Date: Wed, 16 Apr 2025 21:41:15 -0400 Subject: [PATCH 17/18] Fixed another minor error in zTalkBox --- src/SB/Game/zTalkBox.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/SB/Game/zTalkBox.h b/src/SB/Game/zTalkBox.h index 5d0069723..b7ae4c526 100644 --- a/src/SB/Game/zTalkBox.h +++ b/src/SB/Game/zTalkBox.h @@ -89,7 +89,6 @@ struct ztalkbox : xBase static ztalkbox* get_active(); - static ztalkbox* get_active(); void start_talk(U32 textID, callback*, zNPCCommon*); // FIXME: params not verified void stop_talk(); From d7fd37b291f5d92fce89a6107734377eb9514d30 Mon Sep 17 00:00:00 2001 From: Kevyn Date: Fri, 18 Apr 2025 19:47:28 -0400 Subject: [PATCH 18/18] Fixed formatting and removed a zTalkBox function --- src/SB/Game/zNPCFXCinematic.cpp | 40 ++++++++++++++++----------------- src/SB/Game/zTalkBox.cpp | 16 ------------- 2 files changed, 20 insertions(+), 36 deletions(-) diff --git a/src/SB/Game/zNPCFXCinematic.cpp b/src/SB/Game/zNPCFXCinematic.cpp index c561b788b..55d859e50 100644 --- a/src/SB/Game/zNPCFXCinematic.cpp +++ b/src/SB/Game/zNPCFXCinematic.cpp @@ -49,7 +49,7 @@ void NCIN_Par_BPLANK_JET_1_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < 0.0f) + if (float_accum < 0.0f) { U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; float_accum = 20.0f + val; @@ -87,7 +87,7 @@ void NCIN_Par_BPLANK_JET_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < 0.0f) + if (float_accum < 0.0f) { U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; float_accum = 20.0f + val; @@ -125,7 +125,7 @@ void NCIN_Par_BPLANK_SBB_FLAMES_1_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < 0.0f) + if (float_accum < 0.0f) { U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; float_accum = 20.0f + val; @@ -163,7 +163,7 @@ void NCIN_Par_BPLANK_SBB_FLAMES_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < 0.0f) + if (float_accum < 0.0f) { U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; float_accum = 20.0f + val; @@ -201,7 +201,7 @@ void NCIN_Par_BPLANK_SBB_JET_1_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 pa F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < 0.0f) + if (float_accum < 0.0f) { U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; float_accum = 20.0f + val; @@ -239,7 +239,7 @@ void NCIN_Par_BPLANK_SBB_JET_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 pa F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < 0.0f) + if (float_accum < 0.0f) { U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; float_accum = 20.0f + val; @@ -277,7 +277,7 @@ void NCIN_Par_BPLANK_SBB_SMOKE_1_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < 0.0f) + if (float_accum < 0.0f) { U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; float_accum = 20.0f + val; @@ -315,7 +315,7 @@ void NCIN_Par_BPLANK_SBB_SMOKE_2_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < 0.0f) + if (float_accum < 0.0f) { U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; float_accum = 20.0f + val; @@ -353,7 +353,7 @@ void NCIN_Par_CIN_BIGDUP_SMOKE_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 pa F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < 0.0f) + if (float_accum < 0.0f) { U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; float_accum = 20.0f + val; @@ -391,7 +391,7 @@ void NCIN_Par_CIN_BIGDUP_SPAWN_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 pa F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < 0.0f) + if (float_accum < 0.0f) { U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; float_accum = 20.0f + val; @@ -429,7 +429,7 @@ void NCIN_Par_CIN_PLATFORM_JETS_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 p F32& float_accum = fxrec->pos_A[1].y; - if (float_accum < 0.0f) + if (float_accum < 0.0f) { U8 val = fxrec->fxdata.pardata.emitter->emit_pad[0]; float_accum = 20.0f + val; @@ -457,10 +457,10 @@ void NCIN_BubSlam(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) if (!(fxrec->flg_stat & 2)) { - return; + return; } - switch(fxrec->typ_ncinfx) + switch (fxrec->typ_ncinfx) { case 3: zFX_SpawnBubbleSlam(&fxrec->pos_A[0], 64, fxrec->tym_beg, fxrec->tym_end, fxrec->tym_end); @@ -563,9 +563,9 @@ void NCIN_HammerStreak_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) { fxrec->flg_stat |= 4; - xFXStreakStop(fxrec->fxdata.strkdata.sid_horz); + xFXStreakStop(fxrec->fxdata.strkdata.sid_horz); xFXStreakStop(fxrec->fxdata.strkdata.sid_vert); - + fxrec->fxdata.strkdata.sid_horz = 57005; fxrec->fxdata.strkdata.sid_vert = 57005; @@ -582,7 +582,8 @@ void NCIN_HammerStreak_Upd(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) } } -void NCIN_HammerStreak_AR(const zCutsceneMgr*, NCINEntry* fxrec, RpAtomic*, RwMatrixTag*, U32 num_1, U32 num_2) +void NCIN_HammerStreak_AR(const zCutsceneMgr*, NCINEntry* fxrec, RpAtomic*, RwMatrixTag*, U32 num_1, + U32 num_2) { if (num_2 != 2) { @@ -591,7 +592,6 @@ void NCIN_HammerStreak_AR(const zCutsceneMgr*, NCINEntry* fxrec, RpAtomic*, RwMa U32 sid_vert = fxrec->fxdata.strkdata.sid_vert; U32 sid_horz = fxrec->fxdata.strkdata.sid_horz; - } void NCIN_WaterSplash(const zCutsceneMgr*, NCINEntry* fxrec, S32 param) @@ -685,7 +685,8 @@ void NCIN_HazTTSteam_Upd(const zCutsceneMgr* manager, NCINEntry* fxrec, S32 para { } -void NCIN_HazTTSteam_AR(const zCutsceneMgr* cutsceneMgr, NCINEntry* fxrec, RpAtomic* atomic, RwMatrixTag* matrix, U32 num_1, U32 num_2) +void NCIN_HazTTSteam_AR(const zCutsceneMgr* cutsceneMgr, NCINEntry* fxrec, RpAtomic* atomic, + RwMatrixTag* matrix, U32 num_1, U32 num_2) { } @@ -701,7 +702,7 @@ 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) @@ -725,4 +726,3 @@ void NPARMgmt::KillAll() { this->cnt_active = 0; } - diff --git a/src/SB/Game/zTalkBox.cpp b/src/SB/Game/zTalkBox.cpp index 6018a2035..dc984e90e 100644 --- a/src/SB/Game/zTalkBox.cpp +++ b/src/SB/Game/zTalkBox.cpp @@ -13,22 +13,6 @@ namespace SharedTalkboxState ztalkbox_shared; } -void ztalkbox::reset_all() -{ - volatile int* sharedMemory = reinterpret_cast(ztalkbox_shared.active); - - int value = 0; - *sharedMemory = value; - *(sharedMemory + 8) = value; - *(sharedMemory + 9) = 0; - *(sharedMemory + 10) = 0; - *(sharedMemory + 11) = 0; - *(sharedMemory + 12) = 0; - - clear_layout(); //FIXME: Find and replace with xtextbox::layout::clear() - return; -} - ztalkbox* ztalkbox::get_active() { return ztalkbox_shared.active;