From 5408eadb15b41950ef9236e38e24a19daca8f3ad Mon Sep 17 00:00:00 2001 From: Kevin <136357605+energydrink02@users.noreply.github.com> Date: Sun, 25 May 2025 21:29:42 +0200 Subject: [PATCH] Add remaining animation table functions --- src/SB/Game/zEntPlayer.cpp | 206 ++++++++++++++++++++++++++++ src/SB/Game/zNPCTypeBossSandy.cpp | 39 ++++-- src/SB/Game/zNPCTypeCommon.cpp | 27 +++- src/SB/Game/zNPCTypeVillager.cpp | 219 ++++++++++++++++++++++++------ 4 files changed, 439 insertions(+), 52 deletions(-) diff --git a/src/SB/Game/zEntPlayer.cpp b/src/SB/Game/zEntPlayer.cpp index 1f34675cf..6a6333026 100644 --- a/src/SB/Game/zEntPlayer.cpp +++ b/src/SB/Game/zEntPlayer.cpp @@ -1,3 +1,4 @@ +#include "xAnim.h" #include "zFX.h" #include #include @@ -6623,6 +6624,211 @@ S32 zEntPlayerDyingInGoo() return in_goo != 0; } +xAnimTable* zEntPlayer_BoulderVehicleAnimTable() +{ + xAnimTable* table = xAnimTableNew("BoulderVehicleTable", NULL, 0x0); + + xAnimTableNewState(table, "Idle01", 0x10, 0x0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Move01", 0x10, 0x0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + + xAnimTableNewTransition(table, "Idle01", "Move01", BoulderRollMoveCheck, NULL, 0x0, 0x0, 0.0f, + 0.0f, 1, 0, 0.45f, NULL); + xAnimTableNewTransition(table, "Move01", "Idle01", BoulderRollIdleCheck, NULL, 0x0, 0x0, 0.0f, + 0.0f, 1, 0, 0.45f, NULL); + + return table; +} + +xAnimTable* zEntPlayer_TreeDomeSBAnimTable() +{ + xAnimTable* table = xAnimTableNew("SB", NULL, 0x0); + + xAnimTableNewState(table, "Idle01", 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Idle02", 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Idle03", 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Idle04", 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Idle05", 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Idle06", 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Idle07", 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Idle08", 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Idle09", 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Idle10", 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Idle11", 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Idle12", 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Idle13", 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "SlipIdle01", 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Inactive01", 0x20, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Inactive02", 0x20, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Inactive03", 0x20, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Inactive04", 0x20, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Inactive05", 0x20, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Inactive06", 0x20, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Inactive07", 0x20, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Inactive08", 0x20, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Inactive09", 0x20, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Inactive10", 0x20, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Walk01", 0x10, 0x44, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Run01", 0x10, 0x46, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Run02", 0x10, 0x46, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Run03", 0x10, 0x46, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "RunOutOfWorld01", 0x10, 0x46, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "SlipRun01", 0x10, 0x46, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "JumpStart01", 0x20, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "JumpLift01", 0x10, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "JumpApex01", 0x20, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Fall01", 0x10, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Land01", 0x20, 0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "LandRun01", 0x20, 0x6, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "BounceStart01", 0x20, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "BounceLift01", 0x10, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "BounceApex01", 0x20, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "DJumpStart01", 0x20, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "DJumpLift01", 0x10, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "FallHigh01", 0x20, 0x0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "LandHigh01", 0x20, 0x0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Bspin01", 0x20, 0x80A, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "BbashAttack01", 0x10, 0x4000, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "BbashStart01", 0x20, 0x0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "BbashStrike01", 0x20, 0x4000, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "BbashMiss01", 0x20, 0x0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "BbounceAttack01", 0x10, 0x4000, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "BbounceStart01", 0x20, 0x0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "BbounceStrike01", 0x20, 0x0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Bbowl01", 0x20, 0x0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "BbowlStart01", 0x20, 0x0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "BbowlWindup01", 0x10, 0x0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "BbowlToss01", 0x20, 0x0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "BbowlRecover01", 0x20, 0x80, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "LedgeGrab01", 0x20, 0x80, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Hit01", 0x20, 0x80, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Hit02", 0x20, 0x80, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Hit03", 0x20, 0x80, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Hit04", 0x20, 0x80, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Hit05", 0x20, 0x80, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Defeated01", 0x0, 0x480, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Defeated02", 0x0, 0x480, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Defeated03", 0x0, 0x480, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Defeated04", 0x0, 0x480, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Defeated05", 0x0, 0x480, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "TongueSlide01", 0x10, 0x1840, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "TongueStart01", 0x20, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "TongueJump01", 0x20, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "TongueJumpXtra01", 0x20, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "TongueDJumpApex01", 0x20, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "TongueFall01", 0x10, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "TongueLand01", 0x20, 0x1800, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "TongueTumble01", 0x20, 0x1800, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Goo01", 0x10, 0x0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Goo02", 0x20, 0x0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "GooDefeated", 0x0, 0x480, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "WallLaunch01", 0x20, 0x8A, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "WallFlight01", 0x20, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "WallFlight02", 0x10, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "WallLand01", 0x20, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "WallFall01", 0x10, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "BoulderRoll01", 0x20, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "BoulderRoll02", 0x10, 0xA, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Talk04", 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Talk03", 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Talk02", 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Talk01", 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "SpatulaGrab01", 0x20, 0x80, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + + return table; +} + // TODO: Move these to their headers WEAK U32 xSndIsPlaying(U32 assetID) diff --git a/src/SB/Game/zNPCTypeBossSandy.cpp b/src/SB/Game/zNPCTypeBossSandy.cpp index c7f031241..423289e89 100644 --- a/src/SB/Game/zNPCTypeBossSandy.cpp +++ b/src/SB/Game/zNPCTypeBossSandy.cpp @@ -259,36 +259,51 @@ U32 HeadNotShocked(xAnimTransition*, xAnimSingle*, void*) return !(sSandyPtr->bossFlags & 0x100); } -#define str_SandyBossHead (bossSandyStrings + 0xff) -#define str_Idle01 (bossSandyStrings + 0x10d) -#define str_Carried01 (bossSandyStrings + 0x114) -#define str_Shocked01 (bossSandyStrings + 0x11e) xAnimTable* ZNPC_AnimTable_BossSandyHead() { xAnimTable* table; - table = xAnimTableNew(str_SandyBossHead, NULL, 0); + table = xAnimTableNew("SandyBossHead", NULL, 0); - xAnimTableNewState(table, str_Idle01, 0x10, 0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimTableNewState(table, "Idle01", 0x10, 0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); - xAnimTableNewState(table, str_Carried01, 0x10, 0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimTableNewState(table, "Carried01", 0x10, 0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); - xAnimTableNewState(table, str_Shocked01, 0x10, 0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimTableNewState(table, "Shocked01", 0x10, 0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); - xAnimTableNewTransition(table, str_Idle01, str_Carried01, HeadIsCarried, NULL, 0, 0, 0.0f, 0.0f, + xAnimTableNewTransition(table, "Idle01", "Carried01", HeadIsCarried, NULL, 0, 0, 0.0f, 0.0f, 0, 0, 0.25f, NULL); - xAnimTableNewTransition(table, str_Carried01, str_Idle01, HeadNotCarried, NULL, 0, 0, 0.0f, + xAnimTableNewTransition(table, "Carried01", "Idle01", HeadNotCarried, NULL, 0, 0, 0.0f, 0.0f, 0, 0, 0.25f, NULL); - xAnimTableNewTransition(table, str_Idle01, str_Shocked01, HeadIsShocked, NULL, 0, 0, 0.0f, 0.0f, + xAnimTableNewTransition(table, "Idle01", "Shocked01", HeadIsShocked, NULL, 0, 0, 0.0f, 0.0f, 0, 0, 0.25f, NULL); - xAnimTableNewTransition(table, str_Shocked01, str_Idle01, HeadNotShocked, NULL, 0, 0, 0.0f, + xAnimTableNewTransition(table, "Shocked01", "Idle01", HeadNotShocked, NULL, 0, 0, 0.0f, 0.0f, 0, 0, 0.25f, NULL); return table; } +xAnimTable* ZNPC_AnimTable_BossSandyScoreboard() +{ + xAnimTable* table; + + table = xAnimTableNew("SandyBossScoreboard", NULL, 0); + + xAnimTableNewState(table, "Idle01", 0x10, 0x0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, "Shocked01", 0x10, 0x0, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + + xAnimTableNewTransition(table, "Idle01", "Shocked01", HeadIsShocked, NULL, 0x0, 0x0, 0.0f, 0.0f, + 0, 0, 0.25f, NULL); + xAnimTableNewTransition(table, "Shocked01", "Idle01", HeadIsShocked, NULL, 0x0, 0x0, 0.0f, 0.0f, + 0, 0, 0.25f, NULL); + + return table; +} + void zNPCBSandy::Init(xEntAsset* asset) { S32 i; diff --git a/src/SB/Game/zNPCTypeCommon.cpp b/src/SB/Game/zNPCTypeCommon.cpp index c11fe9caa..baaa96d04 100644 --- a/src/SB/Game/zNPCTypeCommon.cpp +++ b/src/SB/Game/zNPCTypeCommon.cpp @@ -17,8 +17,12 @@ #include "xString.h" #include "xDebug.h" +#define Unknown 0 +#define LassoGuide_Grab01 1 +#define LassoGuide_Hold01 2 + extern char zNPCTypeCommon_strings[]; -extern char* g_strz_lassanim[3]; +static char* g_strz_lassanim[3] = {"Unknown", "LassoGuide_Grab01", "LassoGuide_Hold01"}; extern S32 g_hash_lassanim[3]; extern volatile S32 g_skipDescent; extern NPCConfig* g_ncfghead; @@ -336,6 +340,27 @@ void zNPCCommon::AddDEVGoals(xPsyche*) { } +xAnimTable* ZNPC_AnimTable_Common() +{ + xAnimTable* table = xAnimTableNew("zNPCCommon", NULL, 0x0); + + xAnimTableNewState(table, "Idle01", 0x110, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + + return table; +} + +xAnimTable* ZNPC_AnimTable_LassoGuide() +{ + xAnimTable* table = xAnimTableNew("LassoGuides", NULL, 0x0); + + xAnimTableNewState(table, g_strz_lassanim[LassoGuide_Grab01], 0x0, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_lassanim[LassoGuide_Hold01], 0x0, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + + xAnimTableNewTransition(table, g_strz_lassanim[LassoGuide_Grab01], g_strz_lassanim[LassoGuide_Hold01], NULL, NULL, 0x10, 0x0, 0.0f, 0.0f, 0, 0, 0.0f, NULL); + + return table; +} + U32 zNPCCommon::DBG_Name() { return 0; diff --git a/src/SB/Game/zNPCTypeVillager.cpp b/src/SB/Game/zNPCTypeVillager.cpp index 00ba67893..def81950b 100644 --- a/src/SB/Game/zNPCTypeVillager.cpp +++ b/src/SB/Game/zNPCTypeVillager.cpp @@ -3,19 +3,33 @@ #include "zNPCTypes.h" #include "zNPCGoals.h" -#define ANIM_Idle01 1 -#define ANIM_Move01 2 -#define ANIM_Hurt01 3 -#define ANIM_Yawn01 4 -#define ANIM_Talk01 5 -#define ANIM_Flee01 6 -#define ANIM_Fear01 7 -#define ANIM_Pray01 8 -#define ANIM_Clap01 9 -#define ANIM_Special01 10 -#define ANIM_Unknown 0 - -extern char* g_strz_folkanim[26]; +#define Unknown 0 +#define Idle01 1 +#define Move01 2 +#define Hurt01 3 +#define Yawn01 4 +#define Talk01 5 +#define Flee01 6 +#define Fear01 7 +#define Pray01 8 +#define Clap01 9 +#define Special01 10 +#define Ride01 11 +#define Bump01 12 +#define Fall01 13 +#define Land01 14 +#define Weep01 15 +#define Swim01 16 +#define Idle02 17 +#define Idle03 18 +#define Idle04 19 +#define Yawn02 20 +#define Yawn03 21 +#define Yawn04 22 +#define Talk02 23 +#define Talk03 24 +#define Talk04 25 + extern U32 g_hash_folkanim[26]; extern char* g_strz_platanim[2]; extern U32 g_hash_platanim[2]; @@ -23,34 +37,38 @@ extern zParEmitter* g_pemit_aqualeak; extern xParEmitterCustomSettings g_parf_aqualeak; extern const xVec3 g_O3; +static char* g_strz_folkanim[26] = +{ + "Unknown", + "Idle01", + "Move01", + "Hurt01", + "Yawn01", + "Talk01", + "Flee01", + "Fear01", + "Pray01", + "Clap01", + "Special01", + "Ride01", + "Bump01", + "Fall01", + "Land01", + "Weep01", + "Swim01", + "Idle02", + "Idle03", + "Idle04", + "Yawn02", + "Yawn03", + "Yawn04", + "Talk02", + "Talk03", + "Talk04", +}; + // Taken from zNPCTypeVillager.s // Defining these here makes the stringBase0 offsets match in the later functions. -static char* str1 = "Unknown"; -static char* str2 = "Idle01"; -static char* str3 = "Move01"; -static char* str4 = "Hurt01"; -static char* str5 = "Yawn01"; -static char* str6 = "Talk01"; -static char* str7 = "Flee01"; -static char* str8 = "Fear01"; -static char* str9 = "Pray01"; -static char* str10 = "Clap01"; -static char* str11 = "Special01"; -static char* str12 = "Ride01"; -static char* str13 = "Bump01"; -static char* str14 = "Fall01"; -static char* str15 = "Land01"; -static char* str16 = "Weep01"; -static char* str17 = "Swim01"; -static char* str18 = "Idle02"; -static char* str19 = "Idle03"; -static char* str20 = "Idle04"; -static char* str21 = "Yawn02"; -static char* str22 = "Yawn03"; -static char* str23 = "Yawn04"; -static char* str24 = "Talk02"; -static char* str25 = "Talk03"; -static char* str26 = "Talk04"; static char* str27 = "fish_d_balloon_move"; static char* str28 = "fish_d_balloon_hit"; static char* str29 = "zNPCVillager"; @@ -271,16 +289,139 @@ xAnimTable* ZNPC_AnimTable_Villager() return ZNPC_AnimTable_Villager(NULL); } +xAnimTable* ZNPC_AnimTable_Villager(xAnimTable* callerTable) +{ + S32 ourAnims[11] = { Idle01, Move01, Hurt01, Yawn01, Talk01, Flee01, + Fear01, Pray01, Clap01, Special01, Unknown }; + xAnimTable* table = callerTable; + char** names = g_strz_folkanim; + + if (table == NULL) + { + table = xAnimTableNew("zNPCVillager", NULL, 0x0); + } + + xAnimTableNewState(table, names[Idle01], 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Move01], 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Hurt01], 0x20, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Yawn01], 0x20, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Talk01], 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Flee01], 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Fear01], 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Pray01], 0x20, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Clap01], 0x120, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Special01], 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + + NPCC_BuildStandardAnimTran(table, names, ourAnims, 1, 0.2f); + + xAnimTableNewTransition(table, names[Pray01], names[Fear01], NULL, NULL, 0x10, 0x0, 0.0f, 0.0f, + 0, 0, 0.35f, NULL); + + return table; +} + xAnimTable* ZNPC_AnimTable_BalloonBoy() { return ZNPC_AnimTable_BalloonBoy(NULL); } +xAnimTable* ZNPC_AnimTableBalloonBoy(xAnimTable* callerTable) +{ + S32 ourAnims[7] = { Ride01, Bump01, Fall01, Land01, Weep01, Swim01, Unknown }; + xAnimTable* table = callerTable; + char** names = g_strz_folkanim; + + if (table == NULL) + { + table = xAnimTableNew("zNPCBallonBoy", NULL, 0x0); + } + + ZNPC_AnimTable_Villager(table); + + xAnimTableNewState(table, names[Ride01], 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Bump01], 0x20, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Fall01], 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Land01], 0x20, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Weep01], 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Swim01], 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + + NPCC_BuildStandardAnimTran(table, names, ourAnims, 1, 0.2f); + + xAnimTableNewTransition(table, names[Fall01], names[Bump01], NULL, NULL, 0x10, 0x0, 0.0f, 0.0f, + 0, 0, 0.35f, NULL); + xAnimTableNewTransition(table, names[Land01], names[Weep01], NULL, NULL, 0x10, 0x0, 0.0f, 0.0f, + 0, 0, 0.35f, NULL); + + return table; +} + xAnimTable* ZNPC_AnimTable_SuperFriend() { return ZNPC_AnimTable_SuperFriend(NULL); } +xAnimTable* ZNPC_AnimTableSuperFriend(xAnimTable* callerTable) +{ + S32 ourAnims[10] = { Idle02, Idle03, Idle04, Yawn02, Yawn03, + Yawn04, Talk02, Talk03, Talk04, Unknown }; + xAnimTable* table = callerTable; + char** names = g_strz_folkanim; + + if (table == NULL) + { + table = xAnimTableNew("zNPCSuperFriend", NULL, 0x0); + } + + ZNPC_AnimTable_Villager(table); + + xAnimTableNewState(table, names[Idle02], 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Idle03], 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Idle04], 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Yawn02], 0x20, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Yawn03], 0x20, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Yawn04], 0x20, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Talk02], 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Talk03], 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, names[Talk04], 0x10, 0x1, 1.0f, NULL, NULL, 0.0f, NULL, NULL, + xAnimDefaultBeforeEnter, NULL, NULL); + + NPCC_BuildStandardAnimTran(table, names, ourAnims, 1, 0.35f); + + xAnimTableNewTransition(table, names[Yawn02], names[Idle02], NULL, NULL, 0x10, 0x0, 0.0f, 0.0f, + 0, 0, 0.35f, NULL); + xAnimTableNewTransition(table, names[Yawn03], names[Idle03], NULL, NULL, 0x10, 0x0, 0.0f, 0.0f, + 0, 0, 0.35f, NULL); + xAnimTableNewTransition(table, names[Yawn04], names[Idle04], NULL, NULL, 0x10, 0x0, 0.0f, 0.0f, + 0, 0, 0.35f, NULL); + + return table; +} + + U8 zNPCVillager::PhysicsFlags() const { S32 flags = 0;