1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-08-08 15:30:14 +00:00

Bongo Bongo (ovl_Boss_Sst) (#458)

* First pass

* Darkmeiro decompilation

Bg_Gnd_Darkmeiro decompiled, matched, and documented.

* give this a shot

* fix conflict

* one more try

* more matching fun

* fun with bongo

* clean this up later

* found the matching versions

* diff.py has escaped?

* now with more docs

* Now with floor and more docs

* one more thing

* incremental progress

* It's Bongo time

* one little thing

* merge ZAP

* update

* camera

* gfx now in their own file

* now with more object decomp

* name animations

* now shiftable

* missed some. also DECR

* opd merge

* start xml

* now with xml asset extraction

* format

* cleanup

* removed union

Co-authored-by: Kelebek1 <eeeedddccc@hotmail.co.uk>
Co-authored-by: petrie911 <pmontag@DESKTOP-LG8A167.localdomain>
This commit is contained in:
petrie911 2021-04-05 18:08:45 -05:00 committed by GitHub
parent b72ba754a2
commit d47528ee59
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
161 changed files with 3802 additions and 12897 deletions

File diff suppressed because it is too large Load diff

View file

@ -6,11 +6,59 @@
struct BossSst;
typedef void (*BossSstActionFunc)(struct BossSst*, GlobalContext*);
typedef struct {
/* 0x0000 */ Vec3f pos;
/* 0x0010 */ Vec3f vel;
/* 0x0018 */ Vec3s rot;
/* 0x001E */ u16 scale;
/* 0x0020 */ s16 move;
/* 0x0022 */ s16 status;
/* 0x0024 */ u8 alpha;
} BossSstEffect; // size = 0x28
typedef struct {
/* 0x0000 */ PosRot world;
/* 0x0014 */ f32 zPosMod;
/* 0x0018 */ s16 yRotMod;
} BossSstHandTrail; // size = 0x1C
typedef struct BossSst {
/* 0x0000 */ Actor actor;
/* 0x014C */ char unk_14C[0x94C];
/* 0x014C */ SkelAnime skelAnime;
/* 0x0190 */ BossSstActionFunc actionFunc;
/* 0x0194 */ s8 actionVar; // head: flag for visible without lens; hand: 1 for right, -1 for left
/* 0x0195 */ s8 ready;
/* 0x0196 */ u8 effectMode;
/* 0x0198 */ s16 timer;
/* 0x019A */ s16 handAngSpeed;
/* 0x019C */ s16 handMaxSpeed;
/* 0x019E */ s16 handZPosMod;
/* 0x01A0 */ s16 handYRotMod;
/* 0x01A2 */ s16 amplitude;
/* 0x01A4 */ s16 targetYaw;
/* 0x01A6 */ s16 targetRoll;
/* 0x01A8 */ Vec3s jointTable[45];
/* 0x02B6 */ Vec3s morphTable[45];
/* 0x03C4 */ f32 radius;
/* 0x03C8 */ Vec3f center;
/* 0x03D4 */ ColliderJntSph colliderJntSph;
/* 0x03F4 */ ColliderJntSphElement colliderItems[11];
/* 0x06B4 */ ColliderCylinder colliderCyl;
/* 0x0700 */ BossSstEffect effects[18];
/* 0x09D0 */ s16 trailIndex;
/* 0x09D2 */ s16 trailCount;
/* 0x09D4 */ BossSstHandTrail handTrails[7];
} BossSst; // size = 0x0A98
typedef enum {
/* -1 */ BONGO_HEAD = -1,
/* 0 */ BONGO_LEFT_HAND,
/* 1 */ BONGO_RIGHT_HAND
} BossSstType;
extern const ActorInit Boss_Sst_InitVars;
#endif

View file

@ -0,0 +1,352 @@
#include "z_boss_sst.h"
static ColliderJntSphElementInit sJntSphItemsInitHand[11] = {
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x00 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 2, { { 2000, -1500, 250 }, 65 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x00 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 10, { { 0, 0, 0 }, 22 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x00 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 11, { { 500, 0, 0 }, 22 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x00 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 15, { { -250, -250, 0 }, 25 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x00 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 16, { { 500, -250, 0 }, 25 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x00 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 20, { { 250, -250, 0 }, 25 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x00 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 21, { { 500, -250, 0 }, 25 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x00 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 25, { { 0, 0, 0 }, 27 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x00 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 26, { { 750, 0, 0 }, 26 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x00 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 5, { { 750, -150, 0 }, 21 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x00 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 6, { { 750, 0, 0 }, 20 }, 100 },
},
};
static ColliderJntSphInit sJntSphInitHand = {
{
COLTYPE_HIT0,
AT_TYPE_ENEMY,
AC_ON | AC_TYPE_PLAYER,
OC1_TYPE_ALL,
OC2_TYPE_1,
COLSHAPE_JNTSPH,
},
11,
sJntSphItemsInitHand,
};
static ColliderJntSphElementInit sJntSphItemsInitHead[11] = {
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x30 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 7, { { 1500, 0, 0 }, 70 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x30 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 6, { { 0, 0, 0 }, 75 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x30 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 4, { { 5000, 0, 0 }, 120 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x30 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 3, { { -2500, 0, 0 }, 150 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x30 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 43, { { 1500, 0, 0 }, 80 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x30 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 43, { { 7500, 0, 0 }, 70 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x30 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 44, { { 3000, 0, 0 }, 60 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x30 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 40, { { 1500, 0, 0 }, 80 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x30 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 40, { { 7500, 0, 0 }, 70 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x30 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_ON,
OCELEM_ON,
},
{ 41, { { 3000, 0, 0 }, 60 }, 100 },
},
{
{
ELEMTYPE_UNK1,
{ 0x20000000, 0x00, 0x30 },
{ 0x00000080, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NORMAL,
BUMP_NONE,
OCELEM_ON,
},
{ 8, { { 1500, 0, 0 }, 70 }, 100 },
},
};
static ColliderJntSphInit sJntSphInitHead = {
{
COLTYPE_HARD,
AT_TYPE_ENEMY,
AC_ON | AC_HARD | AC_TYPE_PLAYER,
OC1_TYPE_ALL,
OC2_TYPE_1,
COLSHAPE_JNTSPH,
},
11,
sJntSphItemsInitHead,
};
static ColliderCylinderInit sCylinderInitHead = {
{
COLTYPE_HIT0,
AT_NONE,
AC_NONE | AC_TYPE_PLAYER,
OC1_NONE,
OC2_TYPE_1,
COLSHAPE_CYLINDER,
},
{
ELEMTYPE_UNK0,
{ 0x00000000, 0x00, 0x00 },
{ 0xFFCFFFFF, 0x00, 0x00 },
TOUCH_NONE,
BUMP_ON,
OCELEM_NONE,
},
{ 85, 100, -50, { 0, 0, 0 } },
};
static ColliderCylinderInit sCylinderInitHand = {
{
COLTYPE_NONE,
AT_TYPE_ENEMY,
AC_NONE,
OC1_NONE,
OC2_TYPE_1,
COLSHAPE_CYLINDER,
},
{
ELEMTYPE_UNK0,
{ 0x20000000, 0x04, 0x10 },
{ 0x00000000, 0x00, 0x00 },
TOUCH_ON | TOUCH_SFX_NONE,
BUMP_NONE,
OCELEM_NONE,
},
{ 85, 1, 0, { 0, 0, 0 } },
};
static CollisionCheckInfoInit sColChkInfoInit = { 36, 100, 100, 200 };
static DamageTable sDamageTable = {
/* Deku nut */ DMG_ENTRY(0 , 0x0),
/* Deku stick */ DMG_ENTRY(2 , 0x0),
/* Slingshot */ DMG_ENTRY(1 , 0x0),
/* Explosive */ DMG_ENTRY(2 , 0x0),
/* Boomerang */ DMG_ENTRY(0 , 0x0),
/* Normal arrow */ DMG_ENTRY(2 , 0x0),
/* Hammer swing */ DMG_ENTRY(2 , 0x0),
/* Hookshot */ DMG_ENTRY(2 , 0x0),
/* Kokiri sword */ DMG_ENTRY(1 , 0x0),
/* Master sword */ DMG_ENTRY(2 , 0x0),
/* Giant's Knife */ DMG_ENTRY(4 , 0x0),
/* Fire arrow */ DMG_ENTRY(2 , 0x0),
/* Ice arrow */ DMG_ENTRY(4 , 0x3),
/* Light arrow */ DMG_ENTRY(2 , 0x0),
/* Unk arrow 1 */ DMG_ENTRY(4 , 0x0),
/* Unk arrow 2 */ DMG_ENTRY(2 , 0x0),
/* Unk arrow 3 */ DMG_ENTRY(2 , 0x0),
/* Fire magic */ DMG_ENTRY(0 , 0x0),
/* Ice magic */ DMG_ENTRY(4 , 0x3),
/* Light magic */ DMG_ENTRY(4 , 0x4),
/* Shield */ DMG_ENTRY(0 , 0x0),
/* Mirror Ray */ DMG_ENTRY(0 , 0x0),
/* Kokiri spin */ DMG_ENTRY(1 , 0x0),
/* Giant spin */ DMG_ENTRY(4 , 0x0),
/* Master spin */ DMG_ENTRY(2 , 0x0),
/* Kokiri jump */ DMG_ENTRY(2 , 0x0),
/* Giant jump */ DMG_ENTRY(8 , 0x0),
/* Master jump */ DMG_ENTRY(4 , 0x0),
/* Unknown 1 */ DMG_ENTRY(0 , 0x0),
/* Unblockable */ DMG_ENTRY(0 , 0x0),
/* Hammer jump */ DMG_ENTRY(4 , 0x0),
/* Unknown 2 */ DMG_ENTRY(0 , 0x0),
};