diff --git a/src/SB/Game/zNPCTypeBossPlankton.cpp b/src/SB/Game/zNPCTypeBossPlankton.cpp index 1f67bbe92..78cf10362 100644 --- a/src/SB/Game/zNPCTypeBossPlankton.cpp +++ b/src/SB/Game/zNPCTypeBossPlankton.cpp @@ -2,6 +2,134 @@ #include +#define f1585 1.0f +#define f1586 0.0f +#define f1657 0.2f +#define f1658 0.1f + +#define ANIM_Unknown 0 +#define ANIM_Idle01 1 // 0x4 +#define ANIM_Taunt01 3 // 0xC +#define ANIM_move 66 // 0x42 +#define ANIM_stun_begin 67 //0x43 +#define ANIM_stun_loop 68 //0x44 +#define ANIM_stun_end 69 //0x45 +#define ANIM_attack_beam_begin 70 //0x46 +#define ANIM_attack_beam_loop 71 //0x47 +#define ANIM_attack_beam_end 72 //0x48 +#define ANIM_attack_wall_begin 73 //0x49 +#define ANIM_attack_wall_loop 74 //0x4a +#define ANIM_attack_wall_end 75 //0x4b +#define ANIM_attack_missle 76 //0x4c +#define ANIM_attack_bomb 77 //0x4d + +xAnimTable* ZNPC_AnimTable_BossPlankton() +{ + // clang-format off + S32 ourAnims[32] = { //dwarf says it should be 32, matches less with 15 + ANIM_Idle01, + ANIM_Taunt01, + ANIM_move, + ANIM_stun_begin, + ANIM_stun_loop, + ANIM_stun_end, + ANIM_attack_beam_begin, + ANIM_attack_beam_loop, + ANIM_attack_beam_end, + ANIM_attack_wall_begin, + ANIM_attack_wall_loop, + ANIM_attack_wall_end, + ANIM_attack_missle, + ANIM_attack_bomb, + ANIM_Unknown, + }; + // clang-format on + + xAnimTable* table = xAnimTableNew("zNPCBPlankton", NULL, 0); + + xAnimTableNewState(table, g_strz_bossanim[ANIM_Idle01], 0x10, 0, 1.0f, NULL, NULL, 0.0f, NULL, + NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_bossanim[ANIM_Taunt01], 0x20, 0, 1.0f, NULL, NULL, 0.0f, NULL, + NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_bossanim[ANIM_move], 0x10, 0, f1585, NULL, NULL, f1586, NULL, + NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_bossanim[ANIM_stun_begin], 0x20, 0, f1585, NULL, NULL, f1586, + NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_bossanim[ANIM_stun_loop], 0x10, 0, f1585, NULL, NULL, f1586, + NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_bossanim[ANIM_stun_end], 0x20, 0, f1585, NULL, NULL, f1586, + NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_bossanim[ANIM_attack_beam_begin], 0x20, 0, f1585, NULL, NULL, + f1586, NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_bossanim[ANIM_attack_beam_loop], 0x10, 0, f1585, NULL, NULL, + f1586, NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_bossanim[ANIM_attack_beam_end], 0x20, 0, f1585, NULL, NULL, + f1586, NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_bossanim[ANIM_attack_wall_begin], 0x20, 0, f1585, NULL, NULL, + f1586, NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_bossanim[ANIM_attack_wall_loop], 0x10, 0, f1585, NULL, NULL, + f1586, NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_bossanim[ANIM_attack_wall_end], 0x20, 0, f1585, NULL, NULL, + f1586, NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_bossanim[ANIM_attack_missle], 0x20, 0, f1585, NULL, NULL, + f1586, NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_bossanim[ANIM_attack_bomb], 0x20, 0, f1585, NULL, NULL, f1586, + NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + + NPCC_BuildStandardAnimTran(table, g_strz_bossanim, ourAnims, 1, f1657); + + xAnimTableNewTransition(table, g_strz_bossanim[ANIM_stun_begin], + g_strz_bossanim[ANIM_stun_loop], 0, 0, 0x10, 0, f1586, f1586, 0, 0, + f1658, 0); + xAnimTableNewTransition(table, g_strz_bossanim[ANIM_stun_loop], g_strz_bossanim[ANIM_stun_end], + 0, 0, 0, 0, f1586, f1586, 0, 0, f1658, 0); + xAnimTableNewTransition(table, g_strz_bossanim[ANIM_attack_beam_begin], + g_strz_bossanim[ANIM_attack_beam_loop], 0, 0, 0x10, 0, f1586, f1586, 0, + 0, f1658, 0); + xAnimTableNewTransition(table, g_strz_bossanim[ANIM_attack_beam_begin], + g_strz_bossanim[ANIM_attack_beam_end], 0, 0, 0, 0, f1586, f1586, 0, 0, + f1658, 0); + xAnimTableNewTransition(table, g_strz_bossanim[ANIM_attack_beam_loop], + g_strz_bossanim[ANIM_attack_beam_end], 0, 0, 0, 0, f1586, f1586, 0, 0, + f1658, 0); + xAnimTableNewTransition(table, g_strz_bossanim[ANIM_attack_wall_begin], + g_strz_bossanim[ANIM_attack_wall_loop], 0, 0, 0x10, 0, f1586, f1586, 0, + 0, f1658, 0); + xAnimTableNewTransition(table, g_strz_bossanim[ANIM_attack_wall_loop], + g_strz_bossanim[ANIM_attack_wall_end], 0, 0, 0, 0, f1586, f1586, 0, 0, + f1658, 0); + xAnimTableNewTransition(table, g_strz_bossanim[ANIM_Taunt01], g_strz_bossanim[ANIM_stun_begin], + 0, 0, 0, 0, f1586, f1586, 0, 0, f1658, 0); + xAnimTableNewTransition(table, g_strz_bossanim[ANIM_move], g_strz_bossanim[ANIM_stun_begin], 0, + 0, 0, 0, f1586, f1586, 0, 0, f1658, 0); + xAnimTableNewTransition(table, g_strz_bossanim[ANIM_attack_beam_begin], + g_strz_bossanim[ANIM_stun_begin], 0, 0, 0, 0, f1586, f1586, 0, 0, f1658, + 0); + xAnimTableNewTransition(table, g_strz_bossanim[ANIM_attack_beam_loop], + g_strz_bossanim[ANIM_stun_begin], 0, 0, 0, 0, f1586, f1586, 0, 0, f1658, + 0); + xAnimTableNewTransition(table, g_strz_bossanim[ANIM_attack_beam_end], + g_strz_bossanim[ANIM_stun_begin], 0, 0, 0, 0, f1586, f1586, 0, 0, f1658, + 0); + xAnimTableNewTransition(table, g_strz_bossanim[ANIM_attack_wall_begin], + g_strz_bossanim[ANIM_stun_begin], 0, 0, 0, 0, f1586, f1586, 0, 0, f1658, + 0); + xAnimTableNewTransition(table, g_strz_bossanim[ANIM_attack_wall_loop], + g_strz_bossanim[ANIM_stun_begin], 0, 0, 0, 0, f1586, f1586, 0, 0, f1658, + 0); + xAnimTableNewTransition(table, g_strz_bossanim[ANIM_attack_wall_end], + g_strz_bossanim[ANIM_stun_begin], 0, 0, 0, 0, f1586, f1586, 0, 0, f1658, + 0); + xAnimTableNewTransition(table, g_strz_bossanim[ANIM_attack_missle], + g_strz_bossanim[ANIM_stun_begin], 0, 0, 0, 0, f1586, f1586, 0, 0, f1658, + 0); + xAnimTableNewTransition(table, g_strz_bossanim[ANIM_attack_bomb], + g_strz_bossanim[ANIM_stun_begin], 0, 0, 0, 0, f1586, f1586, 0, 0, f1658, + 0); + + return table; +} + void zNPCBPlankton::render_debug() { } diff --git a/src/SB/Game/zNPCTypeBossSB2.cpp b/src/SB/Game/zNPCTypeBossSB2.cpp index b8e74e975..4999aafe6 100644 --- a/src/SB/Game/zNPCTypeBossSB2.cpp +++ b/src/SB/Game/zNPCTypeBossSB2.cpp @@ -68,7 +68,7 @@ xAnimTable* ZNPC_AnimTable_BossSB2() // ANIM_ChopLeftLoop, // ANIM_ChopLeftEnd, // ANIM_ChopRightBegin, No longer needed? - // ANIM_ChopRightLoop, Was used instead of "ANIM_xxxxx;" right about new state + // ANIM_ChopRightLoop, Was used instead of "ANIM_xxxxx;" right before new state // ANIM_ChopRightEnd, // ANIM_SwipeLeftBegin, // ANIM_SwipeLeftLoop, diff --git a/src/SB/Game/zNPCTypePrawn.cpp b/src/SB/Game/zNPCTypePrawn.cpp index 7c38bf85e..80c053efa 100644 --- a/src/SB/Game/zNPCTypePrawn.cpp +++ b/src/SB/Game/zNPCTypePrawn.cpp @@ -2,6 +2,32 @@ #include +#define f1052 1.0f +#define f1053 0.0f +#define f1454 0.2f +#define f1455 0.1f + +#define ANIM_Unknown 0 // 0x0 +#define ANIM_Idle01 1 // 0x04 +#define ANIM_Idle02 2 // 0x08 animtable new state +#define ANIM_Idle03 3 // 0xC +#define ANIM_Fidget01 4 // +#define ANIM_Fidget02 5 +#define ANIM_Fidget03 6 +#define ANIM_Taunt01 7 // 0x1c +#define ANIM_Attack01 8 //0x20 +#define ANIM_Damage01 9 //0x24 +#define ANIM_Damage02 10 //0x28 +#define ANIM_Death01 11 //0x2c +#define ANIM_AttackWindup01 12 //0x30 +#define ANIM_AttackLoop01 13 //0x34 +#define ANIM_AttackEnd01 14 //0x38 +#define ANIM_SpawnKids01 15 //0x3C +#define ANIM_Attack02Windup01 16 +#define ANIM_Attack02Loop01 17 +#define ANIM_Attack02End01 18 +#define ANIM_LassoGrab01 19 + namespace { sound_data_type sound_data[4]; @@ -246,6 +272,57 @@ void aqua_beam::render() { } +xAnimTable* ZNPC_AnimTable_Prawn() +{ + // clang-format off + S32 ourAnims[10] = { + ANIM_Idle01, + ANIM_Fidget01, + ANIM_Fidget02, + ANIM_Taunt01, + ANIM_AttackWindup01, + ANIM_AttackLoop01, + ANIM_AttackLoop01, + ANIM_AttackEnd01, + ANIM_Damage01, + ANIM_Damage02, + + }; + // clang-format on + xAnimTable* table = xAnimTableNew("zNPCPrawn", NULL, 0); + + xAnimTableNewState(table, g_strz_subbanim[ANIM_Idle01], 0x10, 0, f1052, NULL, NULL, f1053, NULL, + NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_subbanim[ANIM_Fidget01], 0x20, 0, f1052, NULL, NULL, f1053, + NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_subbanim[ANIM_Fidget02], 0x20, 0, f1052, NULL, NULL, f1053, + NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_subbanim[ANIM_Taunt01], 0x20, 0, f1052, NULL, NULL, f1053, + NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_subbanim[ANIM_AttackWindup01], 0x20, 0, f1052, NULL, NULL, + f1053, NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_subbanim[ANIM_AttackLoop01], 0x10, 0, f1052, NULL, NULL, f1053, + NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_subbanim[ANIM_AttackEnd01], 0x20, 0, f1052, NULL, NULL, f1053, + NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_subbanim[ANIM_Damage01], 0x20, 0, f1052, NULL, NULL, f1053, + NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + xAnimTableNewState(table, g_strz_subbanim[ANIM_Damage02], 0x20, 0, f1052, NULL, NULL, f1053, + NULL, NULL, xAnimDefaultBeforeEnter, NULL, NULL); + + NPCC_BuildStandardAnimTran(table, g_strz_subbanim, ourAnims, 1, f1454); + + xAnimTableNewTransition(table, g_strz_subbanim[ANIM_AttackWindup01], + g_strz_subbanim[ANIM_AttackLoop01], 0, 0, 0x10, 0, 0, 0, 0, 0, f1455, + 0); + xAnimTableNewTransition(table, g_strz_subbanim[ANIM_AttackLoop01], + g_strz_subbanim[ANIM_AttackEnd01], 0, 0, 0, 0, 0, 0, 0, 0, f1455, 0); + xAnimTableNewTransition(table, g_strz_subbanim[ANIM_AttackEnd01], g_strz_subbanim[ANIM_Idle01], + 0, 0, 0x10, 0, 0, 0, 0, 0, f1455, 0); + + return table; +} + void zNPCPrawn::NewTime(xScene* xscn, float dt) { zNPCCommon::NewTime(xscn, dt);