En_Ginko_Man (Bank Teller) (#118)

* EnGinkoMan: init

* EnGinkoMan: more matches

* EnGinkoMan: that's closer at least

* EnGinkoMan: better control flow at least...

* EnGinkoMan: docs

* EnGinkoMan: more docs

* EnGinkoMan: more docs 2

* EnGinkoMan: cleaning

* EnGinkoMan: missed something in savecontext

* EnGinko: requested changes and further docs

Co-authored-by: isghj8 <isghj8@gmail.com>
This commit is contained in:
Isghj
2021-05-09 22:20:47 -04:00
committed by GitHub
co-authored by isghj8
parent d98e9dfb01
commit fec0c38768
8 changed files with 779 additions and 51 deletions
+2 -2
View File
@@ -897,7 +897,7 @@ void func_800BCC68(Vec3f* param_1, GlobalContext* ctxt);
// void func_800BD9E0(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE2 param_6);
// void func_800BDAA0(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE2 param_6);
// void func_800BDB6C(void);
void func_800BDC5C(SkelAnime* skelAnime, UNK_PTR animation, UNK_TYPE param_3);
void func_800BDC5C(SkelAnime* skelAnime, ActorAnimationEntry animation[], s16 index);
// void func_800BDCF4(void);
void func_800BDFB0(void);
void func_800BDFC0(GlobalContext* ctxt, UNK_TYPE4 uParm2);
@@ -3836,7 +3836,7 @@ void func_8019F128(u16 param_1);
// void func_8019F170(void);
void func_8019F1C0(Vec3f* pos, u16 sfxId);
// void func_8019F208(void);
// void func_8019F230(void);
void func_8019F230(void);
// void func_8019F258(void);
// void func_8019F300(void);
// void func_8019F420(void);
+15 -6
View File
@@ -354,7 +354,8 @@ typedef struct {
/* 0x00 */ u8 items[24];
/* 0x18 */ u8 masks[24];
/* 0x30 */ u8 quantities[24];
/* 0x48 */ UNK_TYPE1 pad48[0x40];
/* 0x48 */ s32 unk48; // some bits are wallet upgrades
/* 0x4C */ UNK_TYPE1 pad4C[0x3C];
} SaveContextInventory; // size = 0x88
// Save Context that is only stored in an owl save
@@ -376,8 +377,8 @@ typedef struct {
/* 0x12 */ s16 currentLife;
/* 0x14 */ s8 unk14;
/* 0x15 */ s8 currentMagic;
/* 0x16 */ s16 unk16;
/* 0x16 */ UNK_TYPE1 pad17[0x10];
/* 0x16 */ s16 currentRupees;
/* 0x18 */ UNK_TYPE1 pad18[0x10];
} SaveContext_struct1; // size = 0x28
typedef struct {
@@ -658,7 +659,9 @@ typedef struct {
/* 0x0E18 */ UNK_TYPE1 padE18[0x60];
/* 0x0E78 */ u32 pictoFlags0;
/* 0x0E7C */ u32 pictoFlags1;
/* 0x0E80 */ UNK_TYPE1 padE80[0x78];
/* 0x0E80 */ UNK_TYPE1 padE80[0x5C];
/* 0x0EDC */ u32 bankRupees;
/* 0x0EE0 */ UNK_TYPE1 padEE0[0x18];
/* 0x0EF8 */ u8 weekEventReg[100];
/* 0x0F5C */ u32 mapsVisited;
/* 0x0F60 */ UNK_TYPE1 padF60[0x8C];
@@ -1025,11 +1028,17 @@ typedef struct {
/* 0x11F22 */ u8 unk11F22;
/* 0x11F23 */ UNK_TYPE1 pad11F23[0xFD];
/* 0x12020 */ u8 unk12020;
/* 0x12021 */ UNK_TYPE1 pad12021[0x23];
/* 0x12021 */ u8 unk12021;
/* 0x12022 */ u8 choiceIndex;
/* 0x12023 */ UNK_TYPE1 pad12023[0x21];
/* 0x12044 */ s16 unk12044;
/* 0x12046 */ UNK_TYPE1 pad12046[0x24];
/* 0x1206A */ s16 unk1206A;
/* 0x1206C */ UNK_TYPE1 pad1206C[0x6C];
/* 0x1206C */ s32 unk1206C;
/* 0x12070 */ UNK_TYPE1 pad12070[0x8];
/* 0x12078 */ s32 bankRupeesSelected;
/* 0x1207C */ s32 bankRupees;
/* 0x12080 */ UNK_TYPE1 pad12080[0x58];
} MessageContext; // size = 0x120D8
// Full save context
+1 -1
View File
@@ -4955,7 +4955,7 @@ SECTIONS
ovl_En_Ginko_Man : AT(RomLocation)
{
build/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.o(.text)
build/asm/overlays/ovl_En_Ginko_Man_data.o(.data)
build/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.o(.data)
build/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.o(.rodata)
build/asm/overlays/ovl_En_Ginko_Man_rodata.o(.rodata)
}
+9
View File
@@ -91,6 +91,15 @@ D_06009120 = 0x06009120;
D_06005458 = 0x06005458;
D_0600788C = 0x0600788C;
/* en_ginko_man */
object_ginko_skeleton = 0x0600C240;
object_ginko_limb15_dlist = 0x0600B1D8;
object_ginko_sitting_anim = 0x060043F0;
object_ginko_stamp_reach_anim = 0x06004F40;
object_ginko_floorsmacking_anim = 0x060008C0;
object_ginko_amazed_anim = 0x06004A7C;
object_ginko_advertising_anim = 0x06000AC4;
/* z_bg_lbfshot */
D_060014D8 = 0x060014D8;
D_06000228 = 0x06000228;
File diff suppressed because it is too large Load Diff
@@ -3,13 +3,57 @@
#include <global.h>
typedef void (*EnGinkoManActionFunc)(struct EnGinkoMan*, GlobalContext*);
struct EnGinkoMan;
typedef struct EnGinkoMan {
/* 0x000 */ Actor actor;
/* 0x144 */ char unk_144[0x124];
/* 0x144 */ SkelAnime skelAnime;
/* 0x188 */ EnGinkoManActionFunc actionFunc;
/* 0x18C */ Vec3s limbDrawTbl[0x10];
/* 0x1EC */ Vec3s transitionDrawTbl[0x10];
/* 0x24C */ Vec3s limb15Rot;
/* 0x252 */ Vec3s limb8Rot;
/* 0x258 */ s16 curTextId;
/* 0x25A */ s16 serviceFee;
/* 0x25C */ s16 choiceDepositWithdrawl;
/* 0x25E */ s16 newAccountFlag;
/* 0x260 */ s16 stampChecked;
/* 0x262 */ s16 previousBankValue;
/* 0x264 */ s16 animTimer;
} EnGinkoMan; // size = 0x268
extern const ActorInit En_Ginko_Man_InitVars;
#define GINKOMAN_CHOICE_DEPOSIT 0
#define GINKOMAN_CHOICE_WITHDRAWL 1
#define GINKOMAN_CHOICE_CANCEL 2
#define GINKOMAN_CHOICE_RESET 0
#define GINKOMAN_CHOICE_YES 0
#define GINKOMAN_CHOICE_NO 1
extern SkeletonHeader object_ginko_skeleton[];
extern Gfx object_ginko_limb15_dlist[];
extern AnimationHeader object_ginko_floorsmacking_anim[];
extern AnimationHeader object_ginko_sitting_anim[];
extern AnimationHeader object_ginko_amazed_anim[];
extern AnimationHeader object_ginko_stamp_reach_anim[];
extern AnimationHeader object_ginko_advertising_anim[];
typedef enum {
/* 0 */ GINKO_FLOORSMACKING,
/* 1 */ GINKO_SITTING,
/* 2 */ GINKO_REACHING,
/* 3 */ GINKO_AMAZED,
/* 4 */ GINKO_ADVERTISING,
} GinkoAnimationIndex;
// values to get wallet capacity
extern u16 D_801C1E2C[]; // wallet capacities
extern u32 D_801C1DD0; // bit mask for wallet size in savecontext
extern u8 D_801C1E08; // bit shift on index to align
#endif // Z_EN_GINKO_MAN_H
+17 -17
View File
@@ -10810,24 +10810,24 @@
0x80A63BEC:("EnBal_Draw",),
0x80A644A0:("EnGinkoMan_Init",),
0x80A64544:("EnGinkoMan_Destroy",),
0x80A64554:("func_80A64554",),
0x80A645A4:("func_80A645A4",),
0x80A646F4:("func_80A646F4",),
0x80A64DC4:("func_80A64DC4",),
0x80A65364:("func_80A65364",),
0x80A65490:("func_80A65490",),
0x80A654A4:("func_80A654A4",),
0x80A6557C:("func_80A6557C",),
0x80A65590:("func_80A65590",),
0x80A656C4:("func_80A656C4",),
0x80A656D8:("func_80A656D8",),
0x80A65800:("func_80A65800",),
0x80A65844:("func_80A65844",),
0x80A65988:("func_80A65988",),
0x80A65A5C:("func_80A65A5C",),
0x80A64554:("EnGinkoMan_SetupIdle",),
0x80A645A4:("EnGinkoMan_Idle",),
0x80A646F4:("EnGinkoMan_DepositDialogue",),
0x80A64DC4:("EnGinkoMan_WaitForDialogueInput",),
0x80A65364:("EnGinkoMan_WaitForRupeeCount",),
0x80A65490:("EnGinkoMan_SetupDialogue",),
0x80A654A4:("EnGinkoMan_Dialogue",),
0x80A6557C:("EnGinkoMan_SetupBankAward",),
0x80A65590:("EnGinkoMan_BankAward",),
0x80A656C4:("EnGinkoMan_SetupBankAward2",),
0x80A656D8:("EnGinkoMan_BankAward2",),
0x80A65800:("EnGinkoMan_SetupStamp",),
0x80A65844:("EnGinkoMan_Stamp",),
0x80A65988:("EnGinkoMan_SwitchAnimation",),
0x80A65A5C:("EnGinkoMan_FacePlayer",),
0x80A65ADC:("EnGinkoMan_Update",),
0x80A65B44:("func_80A65B44",),
0x80A65C18:("func_80A65C18",),
0x80A65B44:("EnGinkoMan_LimbDraw",),
0x80A65C18:("EnGinkoMan_PostLimbDraw",),
0x80A65C30:("EnGinkoMan_Draw",),
0x80A66180:("EnWarpUzu_Init",),
0x80A661DC:("EnWarpUzu_Destroy",),
+1 -1
View File
@@ -13255,7 +13255,7 @@
0x80A64044:("enBalOverlayRelocations","u32","[277]",0x454),
0x80A6449C:("enBalOverlayInfoOffset","u32","",0x4),
0x80A65D40:("En_Ginko_Man_InitVars","UNK_TYPE1","",0x1),
0x80A65D60:("D_80A65D60","UNK_PTR","",0x4),
0x80A65D60:("animations","UNK_PTR","",0x4),
0x80A65DE0:("jtbl_D_80A65DE0","UNK_PTR","",0x4),
0x80A65EAC:("jtbl_D_80A65EAC","UNK_PTR","",0x4),
0x80A65EE8:("D_80A65EE8","f32","",0x4),