diff --git a/src/SB/Core/x/xBehaveMgr.h b/src/SB/Core/x/xBehaveMgr.h index e111398cd..f68b8b913 100644 --- a/src/SB/Core/x/xBehaveMgr.h +++ b/src/SB/Core/x/xBehaveMgr.h @@ -31,6 +31,7 @@ void xBehaveMgr_ScenePrepare(); void xBehaveMgr_SceneReset(); void xBehaveMgr_Startup(); void xBehaveMgr_Shutdown(); +void xBehaveMgr_SceneFinish(); xBehaveMgr* xBehaveMgr_GetSelf(); #endif diff --git a/src/SB/Game/zNPCMgr.cpp b/src/SB/Game/zNPCMgr.cpp index f13481289..c9c260faa 100644 --- a/src/SB/Game/zNPCMgr.cpp +++ b/src/SB/Game/zNPCMgr.cpp @@ -224,6 +224,25 @@ void zNPCMgr::ScenePrepare(S32 npccnt) g_firstFrameUpdateAllNPC = 1; } +void zNPCMgr::SceneFinish() +{ + for (int i = 0; i < npclist.cnt; i++) + { + ((zNPCCommon*)npclist.list[i])->Destroy(); + } + XOrdDone(&npclist, 0); + npcFactory->DestroyAll(); + zNPCBoss_SceneFinish(); + zNPCSubBoss_SceneFinish(); + zNPCDuplotron_SceneFinish(); + zNPCRobot_SceneFinish(); + zNPCVillager_SceneFinish(); + zNPCCommon_SceneFinish(); + zNPCSpawner_SceneFinish(); + zNPCMsg_SceneFinish(); + xBehaveMgr_SceneFinish(); +} + S32 zNPCMgr_OrdComp_npcid(void* vkey, void* vitem) { S32 rc; diff --git a/src/SB/Game/zNPCMgr.h b/src/SB/Game/zNPCMgr.h index f49dc8ada..044fcb3bc 100644 --- a/src/SB/Game/zNPCMgr.h +++ b/src/SB/Game/zNPCMgr.h @@ -53,6 +53,7 @@ void zNPCMgr_scenePostSetup(); void zNPCMgr_sceneTimestep(xScene* xscn, F32 dt); void zNPCMgr_scenePostRender(); void zNPCMgr_scenePostParticleRender(); +void zNPCMsg_SceneFinish(); xEnt* zNPCMgr_createNPCInst(S32, xEntAsset* assdat); S32 zNPCMgr_OrdComp_npcid(void* vkey, void* vitem); diff --git a/src/SB/Game/zNPCTypeBoss.h b/src/SB/Game/zNPCTypeBoss.h index 9965935b7..5839f9476 100644 --- a/src/SB/Game/zNPCTypeBoss.h +++ b/src/SB/Game/zNPCTypeBoss.h @@ -30,6 +30,7 @@ void ZNPC_Boss_Startup(); void ZNPC_Boss_Shutdown(); xFactoryInst* ZNPC_Create_Boss(S32 who, RyzMemGrow* grow, void*); void ZNPC_Destroy_Boss(xFactoryInst* inst); +void zNPCBoss_SceneFinish(); xAnimTable* ZNPC_AnimTable_BossSBobbyArm(); diff --git a/src/SB/Game/zNPCTypeDuplotron.h b/src/SB/Game/zNPCTypeDuplotron.h index 7c9e85f09..a116fd997 100644 --- a/src/SB/Game/zNPCTypeDuplotron.h +++ b/src/SB/Game/zNPCTypeDuplotron.h @@ -43,5 +43,6 @@ void ZNPC_Destroy_Duplotron(xFactoryInst* inst); xAnimTable* ZNPC_AnimTable_Duplotron(); void DUPO_KillEffects(); void DUPO_InitEffects(); +void zNPCDuplotron_SceneFinish(); #endif diff --git a/src/SB/Game/zNPCTypeVillager.h b/src/SB/Game/zNPCTypeVillager.h index 89ad80795..1f9ad3232 100644 --- a/src/SB/Game/zNPCTypeVillager.h +++ b/src/SB/Game/zNPCTypeVillager.h @@ -225,6 +225,7 @@ void ZNPC_Destroy_Villager(xFactoryInst* inst); NPCSndTrax g_sndTrax_Villager; S32 zParamGetFloatList(xModelAssetParam* parmdata, U32 pdatsize, const char* str32, S32 found, F32* non_choices, F32 len_mvptspline); +void zNPCVillager_SceneFinish(); extern NPCSndTrax g_sndTrax_VillagerMale; extern NPCSndTrax g_sndTrax_VillagerFemale;