En_Talk_Gibud (Gibdos in the well) OK and somewhat documented (#486)

* Good start

* More progress

* More progress, need to try importing data now

* Import data to C

* Match a tricky item function

* Matched another item function

* Improve definition of EnTalkGibudUnkStruct

* func_80AFFD3C OK

* Draw functions done

* EnTalkGibud_Init OK

* EnTalkGibud OK

* Document item and switch flag stuff

* Name all static variables

* Enum for animations

* Document type

* Document limb stuff

* Tons of documentation

* Document effect stuff

* Document most unknown struct vars

* Name most functions

* Name final function + document text IDs

* Organize forward declarations

* Name stack variables

* Document damage effects

* Document limbs

* One final pass

* Respond to Anghelo's review

* Respond to Anghelo's second review

* Add space to force Jenkins to rerun (testing PR dashboard, please ignore)

* Removing previously added space

* Fix limb enum to add LIMB_NONE

* Run ./format.sh, whoops

* Respond to hensldm review + small cleanup

* Respond to engineer's review

* Fix item enum

* This is a legacy PR, so using autogenned object symbols

* Fix merge conflict

* Move Talk_Gibud specific enums to .c
This commit is contained in:
Tom Overton 2021-12-27 18:15:32 -08:00 committed by GitHub
parent 527c54b66e
commit 44ccdbe0d5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 1190 additions and 162 deletions

View File

@ -2064,7 +2064,7 @@ void func_801149A0(s32 arg0, s16 arg1);
// void func_80114B84(void);
// void func_80114CA0(void);
UNK_TYPE func_80114E90(void);
UNK_TYPE func_80114F2C(UNK_TYPE arg0);
UNK_TYPE func_80114F2C(u8 arg0);
// void func_80114FD0(void);
// void func_80115130(void);
// void func_801152B8(void);
@ -2077,7 +2077,7 @@ void func_80115844(GlobalContext* globalCtx, s16 param_2);
s32 func_80115908(GlobalContext* globalCtx, u8 param_2);
void func_801159c0(s16 param_1);
void func_801159EC(s16 arg0);
void func_80115A14(s32 arg0, s16 arg1);
void func_80115A14(s16 arg0, s16 arg1);
void Parameter_AddMagic(GlobalContext* globalCtx, s16 arg1);
void func_80115D5C(GameState* gamestate);
// void func_80115DB4(void);

3
spec
View File

@ -3852,8 +3852,7 @@ beginseg
name "ovl_En_Talk_Gibud"
compress
include "build/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.o"
include "build/data/ovl_En_Talk_Gibud/ovl_En_Talk_Gibud.data.o"
include "build/data/ovl_En_Talk_Gibud/ovl_En_Talk_Gibud.reloc.o"
include "build/src/overlays/actors/ovl_En_Talk_Gibud/ovl_En_Talk_Gibud_reloc.o"
endseg
beginseg

File diff suppressed because it is too large Load Diff

View File

@ -3,15 +3,86 @@
#include "global.h"
#define EN_TALK_GIBUD_REQUESTED_ITEM_INDEX(thisx) ((thisx)->params & 0xF)
#define EN_TALK_GIBUD_SWITCH_FLAG(thisx) (((thisx)->params & 0xFF0) >> 4)
typedef enum {
/* 0 */ EN_TALK_GIBUD_TYPE_GIBDO,
/* 1 */ EN_TALK_GIBUD_TYPE_REDEAD,
} EnTalkGibudType;
typedef enum {
/* 0 */ EN_TALK_GIBUD_GRAB_START,
/* 1 */ EN_TALK_GIBUD_GRAB_ATTACK,
/* 2 */ EN_TALK_GIBUD_GRAB_RELEASE,
} EnTalkGibudGrabState;
typedef enum {
/* 0 */ EN_TALK_GIBUD_LIMB_NONE,
/* 1 */ EN_TALK_GIBUD_LIMB_ROOT, // Root of Left Leg Root, Right Leg Root, Upper Body Root, and Pelvis
/* 2 */ EN_TALK_GIBUD_LIMB_LEFT_LEG_ROOT,
/* 3 */ EN_TALK_GIBUD_LIMB_LEFT_THIGH,
/* 4 */ EN_TALK_GIBUD_LIMB_LEFT_LOWER_LEG,
/* 5 */ EN_TALK_GIBUD_LIMB_LEFT_FOOT_ROOT,
/* 6 */ EN_TALK_GIBUD_LIMB_LEFT_FOOT,
/* 7 */ EN_TALK_GIBUD_LIMB_RIGHT_LEG_ROOT,
/* 8 */ EN_TALK_GIBUD_LIMB_RIGHT_THIGH,
/* 9 */ EN_TALK_GIBUD_LIMB_RIGHT_LOWER_LEG,
/* 10 */ EN_TALK_GIBUD_LIMB_RIGHT_FOOT_ROOT,
/* 11 */ EN_TALK_GIBUD_LIMB_RIGHT_FOOT,
/* 12 */ EN_TALK_GIBUD_LIMB_UPPER_BODY_ROOT,
/* 13 */ EN_TALK_GIBUD_LIMB_UPPER_BODY, // Root of Torso
/* 14 */ EN_TALK_GIBUD_LIMB_TORSO, // Root of Left Arm Root, Right Arm Root, and Head Root
/* 15 */ EN_TALK_GIBUD_LIMB_LEFT_ARM_ROOT,
/* 16 */ EN_TALK_GIBUD_LIMB_LEFT_SHOULDER_AND_UPPER_ARM,
/* 17 */ EN_TALK_GIBUD_LIMB_LEFT_FOREARM,
/* 18 */ EN_TALK_GIBUD_LIMB_LEFT_HAND,
/* 19 */ EN_TALK_GIBUD_LIMB_RIGHT_ARM_ROOT,
/* 20 */ EN_TALK_GIBUD_LIMB_RIGHT_SHOULDER_AND_UPPER_ARM,
/* 21 */ EN_TALK_GIBUD_LIMB_RIGHT_FOREARM,
/* 22 */ EN_TALK_GIBUD_LIMB_RIGHT_HAND,
/* 23 */ EN_TALK_GIBUD_LIMB_HEAD_ROOT,
/* 24 */ EN_TALK_GIBUD_LIMB_HEAD,
/* 25 */ EN_TALK_GIBUD_LIMB_PELVIS,
/* 26 */ EN_TALK_GIBUD_LIMB_MAX,
} EnTalkGibudLimbs;
struct EnTalkGibud;
typedef void (*EnTalkGibudActionFunc)(struct EnTalkGibud*, GlobalContext*);
typedef struct EnTalkGibud {
/* 0x0000 */ Actor actor;
/* 0x0144 */ char unk_144[0x90];
/* 0x01D4 */ EnTalkGibudActionFunc actionFunc;
/* 0x01D8 */ char unk_1D8[0x220];
/* 0x000 */ Actor actor;
/* 0x144 */ ColliderCylinder collider;
/* 0x190 */ SkelAnime skelAnime;
/* 0x1D4 */ EnTalkGibudActionFunc actionFunc;
/* 0x1D8 */ Vec3f limbPos[15];
/* 0x28C */ s32 limbIndex;
/* 0x290 */ s32 requestedItemIndex;
/* 0x294 */ s32 itemActionParam;
/* 0x298 */ s32 switchFlag;
/* 0x29C */ f32 effectAlpha;
/* 0x2A0 */ f32 effectScale;
/* 0x2A4 */ Vec3s jointTable[EN_TALK_GIBUD_LIMB_MAX];
/* 0x340 */ Vec3s morphTable[EN_TALK_GIBUD_LIMB_MAX];
/* 0x3DC */ s16 textId;
/* 0x3DE */ Vec3s headRotation;
/* 0x3E4 */ Vec3s upperBodyRotation;
/* 0x3EA */ union {
s16 playerStunWaitTimer; // Cannot stun the player if this is non-zero
s16 grabDamageTimer;
s16 headShakeTimer;
s16 stunTimer;
s16 deathTimer;
s16 disappearanceTimer;
};
/* 0x3EC */ s16 grabState;
/* 0x3EE */ s16 grabWaitTimer; // Cannot grab the player if this is non-zero
/* 0x3F0 */ s16 effectTimer;
/* 0x3F2 */ s16 type;
/* 0x3F4 */ s16 isTalking;
/* 0x3F6 */ u8 effectType;
/* 0x3F7 */ s8 unk_3F7; // related to player->unk_ADD
} EnTalkGibud; // size = 0x3F8
extern const ActorInit En_Talk_Gibud_InitVars;

View File

@ -12817,53 +12817,53 @@
0x80AFE650:("func_80AFE650",),
0x80AFE8A0:("EnTalkGibud_Init",),
0x80AFEB0C:("EnTalkGibud_Destroy",),
0x80AFEB38:("func_80AFEB38",),
0x80AFEB7C:("func_80AFEB7C",),
0x80AFEC08:("func_80AFEC08",),
0x80AFEC4C:("func_80AFEC4C",),
0x80AFED08:("func_80AFED08",),
0x80AFED7C:("func_80AFED7C",),
0x80AFEFD4:("func_80AFEFD4",),
0x80AFF030:("func_80AFF030",),
0x80AFF22C:("func_80AFF22C",),
0x80AFF288:("func_80AFF288",),
0x80AFF330:("func_80AFF330",),
0x80AFF378:("func_80AFF378",),
0x80AFF45C:("func_80AFF45C",),
0x80AFF4AC:("func_80AFF4AC",),
0x80AFF618:("func_80AFF618",),
0x80AFF6A0:("func_80AFF6A0",),
0x80AFF700:("func_80AFF700",),
0x80AFF76C:("func_80AFF76C",),
0x80AFF880:("func_80AFF880",),
0x80AFF8E4:("func_80AFF8E4",),
0x80AFF9CC:("func_80AFF9CC",),
0x80AFFA68:("func_80AFFA68",),
0x80AFFAB0:("func_80AFFAB0",),
0x80AFFC10:("func_80AFFC10",),
0x80AFFC9C:("func_80AFFC9C",),
0x80AFFD3C:("func_80AFFD3C",),
0x80AFFE3C:("func_80AFFE3C",),
0x80AFFE94:("func_80AFFE94",),
0x80AFFFA4:("func_80AFFFA4",),
0x80AFFFBC:("func_80AFFFBC",),
0x80B000FC:("func_80B000FC",),
0x80B00158:("func_80B00158",),
0x80B00384:("func_80B00384",),
0x80B0040C:("func_80B0040C",),
0x80B00484:("func_80B00484",),
0x80B004D0:("func_80B004D0",),
0x80B005EC:("func_80B005EC",),
0x80B00760:("func_80B00760",),
0x80B008BC:("func_80B008BC",),
0x80B008FC:("func_80B008FC",),
0x80B0094C:("func_80B0094C",),
0x80B00B8C:("func_80B00B8C",),
0x80B00C94:("func_80B00C94",),
0x80B00D9C:("func_80B00D9C",),
0x80AFEB38:("EnTalkGibud_SetupIdle",),
0x80AFEB7C:("EnTalkGibud_Idle",),
0x80AFEC08:("EnTalkGibud_SetupAttemptPlayerStun",),
0x80AFEC4C:("EnTalkGibud_AttemptStun",),
0x80AFED08:("EnTalkGibud_SetupWalkToPlayer",),
0x80AFED7C:("EnTalkGibud_WalkToPlayer",),
0x80AFEFD4:("EnTalkGibud_SetupGrab",),
0x80AFF030:("EnTalkGibud_Grab",),
0x80AFF22C:("EnTalkGibud_SetupGrabFail",),
0x80AFF288:("EnTalkGibud_GrabFail",),
0x80AFF330:("EnTalkGibud_SetupTurnAwayAndShakeHead",),
0x80AFF378:("EnTalkGibud_TurnAwayAndShakeHead",),
0x80AFF45C:("EnTalkGibud_SetupWalkToHome",),
0x80AFF4AC:("EnTalkGibud_WalkToHome",),
0x80AFF618:("EnTalkGibud_SetupStunned",),
0x80AFF6A0:("EnTalkGibud_Stunned",),
0x80AFF700:("EnTalkGibud_SetupDamage",),
0x80AFF76C:("EnTalkGibud_Damage",),
0x80AFF880:("EnTalkGibud_SetupDead",),
0x80AFF8E4:("EnTalkGibud_Dead",),
0x80AFF9CC:("EnTalkGibud_SetupRevive",),
0x80AFFA68:("EnTalkGibud_Revive",),
0x80AFFAB0:("EnTalkGibud_GetTextIdForRequestedItem",),
0x80AFFC10:("EnTalkGibud_GetNextTextBoxId",),
0x80AFFC9C:("EnTalkGibud_PresentedItemMatchesRequest",),
0x80AFFD3C:("EnTalkGibud_CheckPresentedItem",),
0x80AFFE3C:("EnTalkGibud_SetupPassiveIdle",),
0x80AFFE94:("EnTalkGibud_PassiveIdle",),
0x80AFFFA4:("EnTalkGibud_SetupTalk",),
0x80AFFFBC:("EnTalkGibud_Talk",),
0x80B000FC:("EnTalkGibud_SetupDisappear",),
0x80B00158:("EnTalkGibud_Disappear",),
0x80B00384:("EnTalkGibud_FacePlayerWhenTalking",),
0x80B0040C:("EnTalkGibud_PlayerInRangeWithCorrectState",),
0x80B00484:("EnTalkGibud_PlayerOutOfRange",),
0x80B004D0:("EnTalkGibud_CheckForGibdoMask",),
0x80B005EC:("EnTalkGibud_TurnTowardsPlayer",),
0x80B00760:("EnTalkGibud_MoveToIdealGrabPositionAndRotation",),
0x80B008BC:("EnTalkGibud_PlayAnimation",),
0x80B008FC:("EnTalkGibud_MoveWithGravity",),
0x80B0094C:("EnTalkGibud_CheckDamageEffect",),
0x80B00B8C:("EnTalkGibud_CheckCollision",),
0x80B00C94:("EnTalkGibud_MoveGrabbedPlayerAwayFromWall",),
0x80B00D9C:("EnTalkGibud_UpdateEffect",),
0x80B00E48:("EnTalkGibud_Update",),
0x80B00F08:("func_80B00F08",),
0x80B00F64:("func_80B00F64",),
0x80B00F08:("EnTalkGibud_OverrideLimbDraw",),
0x80B00F64:("EnTalkGibud_PostLimbDraw",),
0x80B01040:("EnTalkGibud_Draw",),
0x80B01990:("EnGiant_ChangeAnimation",),
0x80B01A74:("EnGiant_IsImprisoned",),

View File

@ -3617,13 +3617,6 @@ D_06009890 = 0x06009890;
D_0600A280 = 0x0600A280;
D_0600AD98 = 0x0600AD98;
// ovl_En_Talk_Gibud
D_060053E8 = 0x060053E8;
D_06009298 = 0x06009298;
D_0600ABE0 = 0x0600ABE0;
D_06010B88 = 0x06010B88;
// ovl_En_Tanron2
D_06003450 = 0x06003450;