Ovl_En_Fsn Ok and Documented (#204)

* First decomp pass: Matched everything w/ data

* Minor cleanup of func_80AE2F78

* Documented

* Format

* Some cleanup and PR suggestions

* Format

* Add the word player to a few functions to specify it is the player trying to buy

* Add controller macros

* Move common shopkeeper defines

* name unk274 and add note to unk27A

* Remove macros and just use flag defines

* Convert Controller Macros to take globalCtx

* Fix merge conflicts
This commit is contained in:
Derek Hensley 2021-07-19 16:26:47 -07:00 committed by GitHub
parent b5c931e432
commit 594a3ceaff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 1846 additions and 191 deletions

View File

@ -824,7 +824,7 @@ s32 func_800B8708(GlobalContext* globalCtx);
// void func_800B8804(void);
// void func_800B882C(void);
// void func_800B886C(void);
void func_800B8898(GlobalContext* globalCtx, Actor* actor, UNK_PTR param_3, UNK_PTR param_4);
void func_800B8898(GlobalContext* globalCtx, Actor* actor, s16* arg2, s16* arg3);
s32 func_800B8934(GlobalContext* globalCtx, Actor* actor);
u32 Actor_HasParent(Actor* actor, GlobalContext* globalCtx);
UNK_TYPE4 func_800B8A1C(Actor* actor, GlobalContext* globalCtx, s32 iParm3, f32 fParm4, f32 param_5);
@ -2164,7 +2164,7 @@ UNK_TYPE func_80114E90(void);
// void func_801152B8(void);
// void func_801153C8(void);
// void func_80115428(void);
// void func_8011552C(void);
void func_8011552C(GlobalContext* globalCtx, s16 arg1);
// void func_801155B4(void);
// void func_80115764(void);
void func_80115844(GlobalContext* globalCtx, s16 param_2);
@ -2238,14 +2238,14 @@ u32 func_801233E4(GlobalContext* globalCtx);
// void func_801234D4(void);
s32 func_80123590(GlobalContext* globalCtx, Actor* actor);
// void func_8012364C(void);
// void func_80123810(void);
s32 func_80123810(GlobalContext* globalCtx);
// void func_80123960(void);
// void func_801239AC(void);
// void func_80123AA4(void);
// void func_80123BD4(void);
// void func_80123C58(void);
// void func_80123C90(void);
// void func_80123D50(void);
void func_80123D50(GlobalContext* globalCtx, Player* player, UNK_TYPE arg2, UNK_TYPE arg3);
void func_80123DA4(Player* player);
// void func_80123DC0(void);
// void func_80123E90(void);
@ -2706,7 +2706,7 @@ void func_8013AED4(u16* param_1, u16 param_2, u16 param_3);
// void func_8013B878(void);
// void func_8013BB34(void);
// void func_8013BB7C(void);
UNK_TYPE func_8013BC6C(SkelAnime* skelAnime, UNK_PTR arg1, s32 arg2);
UNK_TYPE func_8013BC6C(SkelAnime* skelAnime, ActorAnimationEntryS* arg1, s32 arg2);
// void func_8013BD40(void);
// void func_8013BEDC(void);
// void func_8013C068(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
@ -2888,7 +2888,7 @@ void func_8014ADBC(GlobalContext* globalCtx, UNK_PTR puParm2);
// void func_80150A84(void);
void func_80150D08(GlobalContext* globalCtx, u32 uParm2);
// void func_801514B0(void);
void func_801518B0(GlobalContext* globalCtx, u32 uParm2, Actor* uParm3);
void func_801518B0(GlobalContext* globalCtx, u16 textId, Actor* Actor);
void func_80151938(GlobalContext* globalCtx, u16 textId);
void func_80151A68(GlobalContext* globalCtx, u16 param_2);
void func_80151BB4(GlobalContext* globalCtx, u32 uParm2);
@ -2896,7 +2896,7 @@ void func_80151BB4(GlobalContext* globalCtx, u32 uParm2);
// void func_80151DA4(void);
void func_80152434(GlobalContext* globalCtx, u16 arg2);
// void func_80152464(void);
s32 func_80152498(MessageContext* msgCtx);
u8 func_80152498(MessageContext* msgCtx);
// void func_8015268C(void);
// void func_80152C64(void);
// void func_80152CAC(void);

View File

@ -52,6 +52,11 @@
#define CAPACITY(upg, value) gUpgradeCapacities[upg][value]
#define CUR_CAPACITY(upg) CAPACITY(upg, CUR_UPG_VALUE(upg) - 4)
#define CONTROLLER1(globalCtx) (&(globalCtx)->state.input[0])
#define CONTROLLER2(globalCtx) (&(globalCtx)->state.input[1])
#define CONTROLLER3(globalCtx) (&(globalCtx)->state.input[2])
#define CONTROLLER4(globalCtx) (&(globalCtx)->state.input[3])
#define CHECK_BTN_ALL(state, combo) (~((state) | ~(combo)) == 0)
#define CHECK_BTN_ANY(state, combo) (((state) & (combo)) != 0)

View File

@ -1403,7 +1403,7 @@ extern u32 gGsFlagsMask[];
extern u32 gGsFlagsShift[];
extern void* gItemIcons[];
extern u8 gItemSlots[];
extern u16 gItemPrices[];
extern s16 gItemPrices[];
extern u16 gScenesPerRegion[11][27];
extern u32 D_801C2410[];
extern s16 gLinkFormObjectIndexes[8];

View File

@ -949,7 +949,8 @@ typedef struct {
/* 0x11F10 */ s32 unk11F10;
/* 0x11F14 */ UNK_TYPE1 pad11F14[0xE];
/* 0x11F22 */ u8 unk11F22;
/* 0x11F23 */ UNK_TYPE1 pad11F23[0xFE];
/* 0x11F23 */ UNK_TYPE1 pad11F23[0xFD];
/* 0x12020 */ u8 unk12020;
/* 0x12021 */ u8 choiceIndex;
/* 0x12022 */ UNK_TYPE1 unk12022;
/* 0x12023 */ s8 unk12023;

View File

@ -31,7 +31,8 @@ typedef enum {
/* 0x15 */ ITEM_POTION_BLUE,
/* 0x16 */ ITEM_FAIRY,
/* 0x38 */ ITEM_MASK_ALL_NIGHT = 0x38,
/* 0x3B */ ITEM_MASK_GARO = 0x3B,
/* 0x3A */ ITEM_MASK_KEATON = 0x3A,
/* 0x3B */ ITEM_MASK_GARO,
/* 0x46 */ ITEM_MASK_BREMEN = 0x46,
/* 0x4D */ ITEM_SWORD_KOKIRI = 0x4D,
/* 0x4E */ ITEM_SWORD_RAZOR,
@ -68,6 +69,13 @@ typedef enum {
typedef enum {
/* 0x00 */ GI_NONE,
/* 0x01 */ GI_RUPEE_GREEN,
/* 0x02 */ GI_RUPEE_BLUE,
/* 0x03 */ GI_RUPEE_10,
/* 0x04 */ GI_RUPEE_RED,
/* 0x05 */ GI_RUPEE_PURPLE,
/* 0x06 */ GI_RUPEE_SILVER,
/* 0x07 */ GI_RUPEE_GOLD,
/* 0x0C */ GI_HEART_PIECE = 0x0C,
/* 0x0D */ GI_HEART_CONTAINER,
/* 0x16 */ GI_BOMBS_10 = 0x16,
@ -92,12 +100,14 @@ typedef enum {
/* 0x5E */ GI_FAIRY,
/* 0x60 */ GI_MILK_BOTTLE = 0x60,
/* 0x7E */ GI_MASK_ALL_NIGHT = 0x7E,
/* 0x80 */ GI_MASK_KEATON = 0x80,
/* 0x8C */ GI_MASK_BREMEN = 0x8C,
/* 0x9B */ GI_SWORD_GREAT_FAIRY = 0x9B,
/* 0x9C */ GI_SWORD_KOKIRI,
/* 0x9D */ GI_SWORD_RAZOR,
/* 0x9E */ GI_SWORD_GILDED,
/* 0x9F */ GI_SHIELD_HERO_2, // Code that treats this as hero's shield is unused, so take with a grain of salt
/* 0xA1 */ GI_LETTER_TO_MAMA = 0xA1,
/* 0xA9 */ GI_BOTTLE = 0xA9
} GetItemID;

View File

@ -6119,9 +6119,9 @@ SECTIONS
ovl_En_Fsn : AT(RomLocation)
{
build/src/overlays/actors/ovl_En_Fsn/z_en_fsn.o(.text)
build/asm/overlays/ovl_En_Fsn_data.o(.data)
build/src/overlays/actors/ovl_En_Fsn/z_en_fsn.o(.data)
build/src/overlays/actors/ovl_En_Fsn/z_en_fsn.o(.rodata)
build/asm/overlays/ovl_En_Fsn_rodata.o(.rodata)
build/src/overlays/actors/ovl_En_Fsn/z_en_fsn_overlay.o(.ovl)
}
SegmentEnd = .;
SegmentSize = SegmentEnd - SegmentStart;

View File

@ -43,6 +43,9 @@ D_0408EBE0 = 0x0408EBE0;
D_0408EFE0 = 0x0408EFE0;
D_0408F3E0 = 0x0408F3E0;
D_0408F7E0 = 0x0408F7E0;
D_0401F740 = 0x0401F740;
D_0401F7C0 = 0x0401F7C0;
D_0401F8C0 = 0x0401F8C0;
/* gameplay_dangeon_keep (segment 05) */
@ -288,6 +291,26 @@ D_060018B8 = 0x060018B8;
D_0600017C = 0x0600017C;
D_06001678 = 0x06001678;
/* z_en_fsn */
D_06012C34 = 0x06012C34;
D_06013320 = 0x06013320;
D_060131FC = 0x060131FC;
D_0600C58C = 0x0600C58C;
D_0600E3EC = 0x0600E3EC;
D_0600F00C = 0x0600F00C;
D_0600CB3C = 0x0600CB3C;
D_0600D354 = 0x0600D354;
D_060138B0 = 0x060138B0;
D_0601430C = 0x0601430C;
D_0600B9D8 = 0x0600B9D8;
D_0600C26C = 0x0600C26C;
D_0600DE34 = 0x0600DE34;
D_06005BC0 = 0x06005BC0;
D_06006D40 = 0x06006D40;
D_06007140 = 0x06007140;
D_0600F180 = 0x0600F180;
D_0600F218 = 0x0600F218;
/* z_en_ginko_man */
object_ginko_skeleton = 0x0600C240;
object_ginko_limb15_dlist = 0x0600B1D8;

View File

@ -37,19 +37,19 @@ s32 func_800E8FA4(Actor* actor, Vec3f* param_2, Vec3s* param_3, Vec3s* param_4)
targetYaw = Math_Vec3f_Yaw(&actor->focus.pos, param_2) - actor->world.rot.y;
Math_SmoothStepToS(&param_3->x, targetPitch, 6, 2000, 1);
param_3->x = (param_3->x < -6000) ? -6000 : ((6000 < param_3->x) ? 6000 : param_3->x);
param_3->x = CLAMP(param_3->x, -6000, 6000);
yawDiffFromTarget = Math_SmoothStepToS(&param_3->y, targetYaw, 6, 2000, 1);
param_3->y = (param_3->y < -8000) ? -8000 : ((8000 < param_3->y) ? 8000 : param_3->y);
param_3->y = CLAMP(param_3->y, -8000, 8000);
if (yawDiffFromTarget != 0) {
if ((param_3->y < 0 ? -param_3->y : param_3->y) < 8000) {
if (ABS_ALT(param_3->y) < 8000) {
return 0;
}
}
Math_SmoothStepToS(&param_4->y, targetYaw - param_3->y, 4, 2000, 1);
param_4->y = (param_4->y < -12000) ? -12000 : ((12000 < param_4->y) ? 12000 : param_4->y);
param_4->y = CLAMP(param_4->y, -12000, 12000);
return 1;
}
@ -58,14 +58,15 @@ s32 func_800E9138(GlobalContext* globalCtx, Actor* actor, Vec3s* param_3, Vec3s*
Player* player = PLAYER;
s16 sVar3;
Vec3f local_14;
s16 sVar3A;
actor->focus.pos = actor->world.pos;
actor->focus.pos.y += param_5;
if (((globalCtx->csCtx).state == 0) && (D_801D0D50 == 0)) {
sVar3 = actor->yawTowardsPlayer - actor->shape.rot.y;
// TODO is this shifting because of a missing cast?
if (0x42ff < (sVar3 < 0 ? ((-sVar3 << 0x10) >> 0x10) : ((sVar3 << 0x10) >> 0x10))) {
sVar3A = ABS_ALT(sVar3);
if (sVar3A >= 0x4300) {
func_800E8F08(param_3, param_4);
return 0;
}
@ -86,13 +87,14 @@ s32 func_800E9250(GlobalContext* globalCtx, Actor* actor, Vec3s* param_3, Vec3s*
Player* player = PLAYER;
s16 sVar3;
Vec3f local_14;
s16 sVar3A;
actor->focus.pos = param_5;
if (((globalCtx->csCtx).state == 0) && (D_801D0D50 == 0)) {
sVar3 = actor->yawTowardsPlayer - actor->shape.rot.y;
// TODO is this shifting because of a missing cast?
if (0x42ff < (sVar3 < 0 ? ((-sVar3 << 0x10) >> 0x10) : ((sVar3 << 0x10) >> 0x10))) {
sVar3A = ABS_ALT(sVar3);
if (sVar3A >= 0x4300) {
func_800E8F08(param_3, param_4);
return 0;
}

View File

@ -61,7 +61,7 @@ u8 gItemSlots[] = {
0x1C, 0x2B, 0x21, 0x2A, 0x2D, 0x1B, 0x1F, 0x1A, 0x22, 0x2E, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
};
u16 gItemPrices[] = {
s16 gItemPrices[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 20, 0, 20,
5, 20, 20, 50, 50, 200, 20, 20, 20, 200, 5, 0, 200, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};

View File

@ -262,7 +262,7 @@ void ArmsHook_Shoot(ArmsHook* this, GlobalContext* globalCtx) {
func_8019F1C0(&this->actor.projectedPos, NA_SE_IT_HOOKSHOT_REFLECT);
}
} else {
if (CHECK_BTN_ANY(globalCtx->state.input[0].press.button,
if (CHECK_BTN_ANY(CONTROLLER1(globalCtx)->press.button,
BTN_A | BTN_B | BTN_R | BTN_CUP | BTN_CLEFT | BTN_CRIGHT | BTN_CDOWN)) {
s32 pad;
this->timer = 1;

View File

@ -27,19 +27,19 @@ const ActorInit Dm_Nb_InitVars = {
(ActorFunc)DmNb_Draw,
};
extern UNK_TYPE D_06000990;
extern AnimationHeader D_06000990;
extern FlexSkeletonHeader D_06008C40;
// Probably the same struct as ActorAnimationEntryS, need more info from func_8013BC6C
static UNK_TYPE D_80C1E200[] = { &D_06000990, 0x3F800000, 0x0000FFFF, 0x00000000 };
static ActorAnimationEntryS D_80C1E200[] = { &D_06000990, 1.0f, 0, -1, 0, 0};
s32 func_80C1DED0(DmNb* this, s32 arg1) {
s32 ret = 0;
if (arg1 != this->unk1F0) {
this->unk1F0 = arg1;
ret = func_8013BC6C(&this->skelAnime, &D_80C1E200, arg1);
ret = func_8013BC6C(&this->skelAnime, D_80C1E200, arg1);
}
return ret;
}

File diff suppressed because it is too large Load Diff

View File

@ -2,12 +2,74 @@
#define Z_EN_FSN_H
#include <global.h>
#include "overlays/actors/ovl_En_GirlA/z_en_girla.h"
#define ENFSN_IS_BACKROOM(thisx) ((thisx)->params & 1)
#define ENFSN_IS_SHOP(thisx) (!((thisx)->params & 1))
#define ENFSN_OFFER_FINAL_PRICE (1 << 6)
#define ENFSN_HAGGLE (1 << 7)
#define ENFSN_ANGRY (1 << 8)
#define ENFSN_CALM_DOWN (1 << 9)
struct EnFsn;
typedef void (*EnFsnActionFunc)(struct EnFsn*, GlobalContext*);
typedef struct EnFsn {
/* 0x000 */ Actor actor;
/* 0x144 */ char unk_144[0x30C];
/* 0x144 */ UNK_TYPE1 pad144[0x4C];
/* 0x190 */ SkelAnime skelAnime;
/* 0x1D4 */ EnFsnActionFunc actionFunc;
/* 0x1D8 */ EnFsnActionFunc tmpActionFunc; // Used to return to correct browsing function
/* 0x1DC */ ColliderCylinder collider;
/* 0x228 */ s16 limbRotYTable[19];
/* 0x24E */ s16 limbRotZTable[19];
/* 0x274 */ Vec3s headRot;
/* 0x27A */ Vec3s unk27A; // Set but never used
/* 0x280 */ Vec3s limbDrawTable[19];
/* 0x2F2 */ Vec3s transitionDrawTable[19];
/* 0x364 */ s16 eyeTextureIdx;
/* 0x366 */ s16 blinkTimer;
/* 0x368 */ s16 cutsceneState;
/* 0x36A */ s16 cutscene;
/* 0x36C */ s16 lookToShopkeeperCutscene;
/* 0x36E */ s16 lookToShelfCutscene;
/* 0x370 */ s16 lookToShopkeeperFromShelfCutscene;
/* 0x372 */ s16 lookToShopkeeperBuyingCutscene;
/* 0x374 */ s16 price;
/* 0x376 */ u16 textId;
/* 0x378 */ u8 isSelling;
/* 0x379 */ u8 cursorIdx;
/* 0x37C */ s32 getItemId;
/* 0x380 */ s16 stolenItem1;
/* 0x382 */ s16 stolenItem2;
/* 0x384 */ s16 itemIds[3];
/* 0x38A */ s16 totalSellingItems;
/* 0x38C */ s16 numSellingItems;
/* 0x390 */ EnGirlA* items[3];
/* 0x39C */ s16 delayTimer;
/* 0x3A0 */ s32 stickAccumX;
/* 0x3A4 */ s32 stickAccumY;
/* 0x3A8 */ f32 cursorX;
/* 0x3AC */ f32 cursorY;
/* 0x3B0 */ f32 cursorZ;
/* 0x3B4 */ s32 cursorColorR;
/* 0x3B8 */ s32 cursorColorG;
/* 0x3BC */ s32 cursorColorB;
/* 0x3C0 */ s32 cursorColorA;
/* 0x3C4 */ f32 cursorAnimTween;
/* 0x3C8 */ u8 cursorAnimState;
/* 0x3C9 */ u8 drawCursor;
/* 0x3CC */ StickDirectionPrompt stickLeftPrompt;
/* 0x404 */ StickDirectionPrompt stickRightPrompt;
/* 0x43C */ f32 arrowAnimTween;
/* 0x440 */ f32 stickAnimTween;
/* 0x444 */ u8 arrowAnimState;
/* 0x445 */ u8 stickAnimState;
/* 0x448 */ f32 shopItemSelectedTween;
/* 0x44C */ s16 animationIdx;
/* 0x44E */ u16 flags;
} EnFsn; // size = 0x450
extern const ActorInit En_Fsn_InitVars;

View File

@ -191,7 +191,7 @@ s32 EnGirlA_CanBuyPotionRed(GlobalContext* globalCtx, EnGirlA* this) {
if (gSaveContext.rupees < globalCtx->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS;
return CANBUY_RESULT_SUCCESS_2;
}
s32 EnGirlA_CanBuyPotionGreen(GlobalContext* globalCtx, EnGirlA* this) {
@ -201,36 +201,36 @@ s32 EnGirlA_CanBuyPotionGreen(GlobalContext* globalCtx, EnGirlA* this) {
if (gSaveContext.rupees < globalCtx->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS;
return CANBUY_RESULT_SUCCESS_2;
}
s32 EnGirlA_CanBuyPotionBlue(GlobalContext* globalCtx, EnGirlA* this) {
if (!(gSaveContext.weekEventReg[53] & 8)) {
return CANBUY_RESULT_CANT_GET_NOW;
return CANBUY_RESULT_CANNOT_GET_NOW;
}
if (!func_80114E90()) {
return CANBUY_RESULT_NEED_EMPTY_BOTTLE;
}
if (!(gSaveContext.weekEventReg[53] & 0x10)) {
return CANBUY_RESULT_SUCCESS;
return CANBUY_RESULT_SUCCESS_2;
}
if (gSaveContext.rupees < globalCtx->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS;
return CANBUY_RESULT_SUCCESS_2;
}
s32 EnGirlA_CanBuyArrows(GlobalContext* globalCtx, EnGirlA* this) {
if (CUR_UPG_VALUE_VOID(UPG_QUIVER) == 0) {
return CANBUY_RESULT_NO_ROOM_2;
return CANBUY_RESULT_CANNOT_GET_NOW_2;
}
if (AMMO(ITEM_BOW) >= CUR_CAPACITY(UPG_QUIVER)) {
return CANBUY_RESULT_NO_ROOM_3;
return CANBUY_RESULT_NO_ROOM_2;
}
if (gSaveContext.rupees < globalCtx->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS;
return CANBUY_RESULT_SUCCESS_2;
}
s32 EnGirlA_CanBuyNuts(GlobalContext* globalCtx, EnGirlA* this) {
@ -241,9 +241,9 @@ s32 EnGirlA_CanBuyNuts(GlobalContext* globalCtx, EnGirlA* this) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (func_80114978(ITEM_NUT) == ITEM_NONE) {
return CANBUY_RESULT_SUCCESS_FANFARE;
return CANBUY_RESULT_SUCCESS_1;
}
return CANBUY_RESULT_SUCCESS;
return CANBUY_RESULT_SUCCESS_2;
}
s32 EnGirlA_CanBuyShieldHero(GlobalContext* globalCtx, EnGirlA* this) {
@ -253,7 +253,7 @@ s32 EnGirlA_CanBuyShieldHero(GlobalContext* globalCtx, EnGirlA* this) {
if (gSaveContext.rupees < globalCtx->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_FANFARE;
return CANBUY_RESULT_SUCCESS_1;
}
s32 EnGirlA_CanBuyStick(GlobalContext* globalCtx, EnGirlA* this) {
@ -264,26 +264,26 @@ s32 EnGirlA_CanBuyStick(GlobalContext* globalCtx, EnGirlA* this) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (func_80114978(ITEM_STICK) == ITEM_NONE) {
return CANBUY_RESULT_SUCCESS_FANFARE;
return CANBUY_RESULT_SUCCESS_1;
}
return CANBUY_RESULT_SUCCESS;
return CANBUY_RESULT_SUCCESS_2;
}
s32 EnGirlA_CanBuyMaskAllNight(GlobalContext* globalCtx, EnGirlA* this) {
if (gSaveContext.rupees < globalCtx->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS;
return CANBUY_RESULT_SUCCESS_2;
}
s32 EnGirlA_CanBuyBombBagCuriosityShop(GlobalContext* globalCtx, EnGirlA* this) {
if (CUR_UPG_VALUE_VOID(UPG_BOMB_BAG) >= 2) {
return CANBUY_RESULT_CANT_GET_NOW;
return CANBUY_RESULT_CANNOT_GET_NOW;
}
if (gSaveContext.rupees < globalCtx->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS;
return CANBUY_RESULT_SUCCESS_2;
}
s32 EnGirlA_CanBuyBombBag20BombShop(GlobalContext* globalCtx, EnGirlA* this) {
@ -296,7 +296,7 @@ s32 EnGirlA_CanBuyBombBag20BombShop(GlobalContext* globalCtx, EnGirlA* this) {
if (gSaveContext.rupees < globalCtx->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_FANFARE;
return CANBUY_RESULT_SUCCESS_1;
}
s32 EnGirlA_CanBuyBombBag30BombShop(GlobalContext* globalCtx, EnGirlA* this) {
@ -309,12 +309,12 @@ s32 EnGirlA_CanBuyBombBag30BombShop(GlobalContext* globalCtx, EnGirlA* this) {
if (gSaveContext.rupees < globalCtx->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_FANFARE;
return CANBUY_RESULT_SUCCESS_1;
}
s32 EnGirlA_CanBuyBombchus(GlobalContext* globalCtx, EnGirlA* this) {
if (CUR_UPG_VALUE_VOID(UPG_BOMB_BAG) == 0) {
return CANBUY_RESULT_CANT_GET_NOW;
return CANBUY_RESULT_CANNOT_GET_NOW;
}
if (AMMO(ITEM_BOMBCHU) >= CUR_CAPACITY(UPG_BOMB_BAG)) {
return CANBUY_RESULT_NO_ROOM;
@ -323,14 +323,14 @@ s32 EnGirlA_CanBuyBombchus(GlobalContext* globalCtx, EnGirlA* this) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (func_80114978(ITEM_BOMBCHU) == ITEM_NONE) {
return CANBUY_RESULT_SUCCESS_FANFARE;
return CANBUY_RESULT_SUCCESS_1;
}
return CANBUY_RESULT_SUCCESS;
return CANBUY_RESULT_SUCCESS_2;
}
s32 EnGirlA_CanBuyBombs(GlobalContext* globalCtx, EnGirlA* this) {
if (CUR_UPG_VALUE_VOID(UPG_BOMB_BAG) == 0) {
return CANBUY_RESULT_CANT_GET_NOW;
return CANBUY_RESULT_CANNOT_GET_NOW;
}
if (AMMO(ITEM_BOMB) >= CUR_CAPACITY(UPG_BOMB_BAG)) {
return CANBUY_RESULT_NO_ROOM;
@ -338,21 +338,21 @@ s32 EnGirlA_CanBuyBombs(GlobalContext* globalCtx, EnGirlA* this) {
if (gSaveContext.rupees < globalCtx->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS;
return CANBUY_RESULT_SUCCESS_2;
}
s32 EnGirlA_CanBuyBottle(GlobalContext* globalCtx, EnGirlA* this) {
if (gSaveContext.rupees < globalCtx->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_FANFARE;
return CANBUY_RESULT_SUCCESS_1;
}
s32 EnGirlA_CanBuySword(GlobalContext* globalCtx, EnGirlA* this) {
if (gSaveContext.rupees < globalCtx->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_FANFARE;
return CANBUY_RESULT_SUCCESS_1;
}
s32 EnGirlA_CanBuyShieldMirror(GlobalContext* globalCtx, EnGirlA* this) {
@ -362,7 +362,7 @@ s32 EnGirlA_CanBuyShieldMirror(GlobalContext* globalCtx, EnGirlA* this) {
if (gSaveContext.rupees < globalCtx->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS_FANFARE;
return CANBUY_RESULT_SUCCESS_1;
}
s32 EnGirlA_CanBuyFairy(GlobalContext* globalCtx, EnGirlA* this) {
@ -372,7 +372,7 @@ s32 EnGirlA_CanBuyFairy(GlobalContext* globalCtx, EnGirlA* this) {
if (gSaveContext.rupees < globalCtx->msgCtx.unk1206C) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS;
return CANBUY_RESULT_SUCCESS_2;
}
void EnGirlA_BuyBottleItem(GlobalContext* globalCtx, EnGirlA* this) {

View File

@ -48,18 +48,87 @@ typedef struct EnGirlA {
} EnGirlA; // size = 0x1CC
typedef enum {
/* 0 */ CANBUY_RESULT_SUCCESS_FANFARE,
/* 1 */ CANBUY_RESULT_SUCCESS,
/* 0 */ CANBUY_RESULT_SUCCESS_1,
/* 1 */ CANBUY_RESULT_SUCCESS_2,
/* 2 */ CANBUY_RESULT_NO_ROOM,
/* 3 */ CANBUY_RESULT_NEED_EMPTY_BOTTLE,
/* 4 */ CANBUY_RESULT_NEED_RUPEES,
/* 5 */ CANBUY_RESULT_CANT_GET_NOW,
/* 6 */ CANBUY_RESULT_NO_ROOM_2,
/* 7 */ CANBUY_RESULT_NO_ROOM_3,
/* 5 */ CANBUY_RESULT_CANNOT_GET_NOW,
/* 6 */ CANBUY_RESULT_CANNOT_GET_NOW_2,
/* 7 */ CANBUY_RESULT_NO_ROOM_2,
/* 8 */ CANBUY_RESULT_ALREADY_HAVE,
/* 9 */ CANBUY_RESULT_HAVE_BETTER
} EnGirlACanBuyResult;
typedef enum {
/* 00 */ SI_POTION_RED_1,
/* 01 */ SI_POTION_GREEN_1,
/* 02 */ SI_POTION_BLUE,
/* 03 */ SI_FAIRY_1,
/* 04 */ SI_ARROWS_LARGE_1,
/* 05 */ SI_POTION_GREEN_2,
/* 06 */ SI_SHIELD_HERO_1,
/* 07 */ SI_STICK_1,
/* 08 */ SI_ARROWS_MEDIUM_1,
/* 09 */ SI_NUTS_1,
/* 10 */ SI_POTION_RED_2,
/* 11 */ SI_FAIRY_2,
/* 12 */ SI_ARROWS_MEDIUM_2,
/* 13 */ SI_ARROWS_LARGE_2,
/* 14 */ SI_POTION_GREEN_3,
/* 15 */ SI_NUTS_2,
/* 16 */ SI_STICK_2,
/* 17 */ SI_SHIELD_HERO_2,
/* 18 */ SI_POTION_RED_3,
/* 19 */ SI_MASK_ALL_NIGHT,
/* 20 */ SI_BOMB_BAG_20_1,
/* 21 */ SI_BOMB_BAG_30_1,
/* 22 */ SI_BOMB_BAG_40,
/* 23 */ SI_BOMB_BAG_20_2,
/* 24 */ SI_BOMB_BAG_30_2,
/* 25 */ SI_BOMBCHU,
/* 26 */ SI_BOMB_1,
/* 27 */ SI_SHIELD_HERO_3,
/* 28 */ SI_ARROWS_SMALL_1,
/* 29 */ SI_POTION_RED_4,
/* 30 */ SI_BOMB_2,
/* 31 */ SI_ARROWS_SMALL_2,
/* 32 */ SI_POTION_RED_5,
/* 33 */ SI_BOMB_3,
/* 34 */ SI_ARROWS_SMALL_3,
/* 35 */ SI_POTION_RED_6,
/* 36 */ SI_BOTTLE,
/* 37 */ SI_SWORD_GREAT_FAIRY,
/* 38 */ SI_SWORD_KOKIRI,
/* 39 */ SI_SWORD_RAZOR,
/* 40 */ SI_SWORD_GILDED,
/* 41 */ SI_SHIELD_HERO_4,
/* 42 */ SI_SHIELD_MIRROR,
} EnGirlAShopItemId;
extern const ActorInit En_GirlA_InitVars;
/*
* Shopkeeper Common Defines
*/
#define CURSOR_INVALID 0xFF
#define COL_CHAN_MIX(c1, c2, m) (c1 - (s32)(c2 * m)) & 0xFF
typedef struct {
/* 0x00 */ u32 stickColorR;
/* 0x04 */ u32 stickColorG;
/* 0x08 */ u32 stickColorB;
/* 0x0C */ u32 stickColorA;
/* 0x10 */ f32 stickTexX;
/* 0x14 */ f32 stickTexY;
/* 0x18 */ u32 arrowColorR;
/* 0x1C */ u32 arrowColorG;
/* 0x20 */ u32 arrowColorB;
/* 0x24 */ u32 arrowColorA;
/* 0x28 */ f32 arrowTexX;
/* 0x2C */ f32 arrowTexY;
/* 0x30 */ f32 texZ; // Used for both stickTexZ and arrowTexZ
/* 0x34 */ s32 isEnabled;
} StickDirectionPrompt; // size = 0x38
#endif // Z_EN_GIRLA_H

View File

@ -1400,7 +1400,7 @@ s32 func_80B45550(EnInvadepoh* this, GlobalContext* globalCtx, f32 range, s32 ar
void EnInvadepoh_SetTextID(EnInvadepoh* this, GlobalContext* globalCtx, u16 arg2) {
this->textId = arg2;
func_801518B0(globalCtx, arg2 & 0xFFFF, &this->actor);
func_801518B0(globalCtx, arg2, &this->actor);
}
void func_80B45648(EnInvadepoh* this) {

View File

@ -465,7 +465,7 @@ s32 func_80BA4204(EnToto* this, GlobalContext* globalCtx) {
if (DECR(this->unk2B1) == 0) {
if (!ENTOTO_WEEK_EVENT_FLAGS) {
temp_v1_2 = &D_80BA50DC[gSaveContext.playerForm - 1];
func_801518B0(globalCtx, (this->text->unk0 == 6 ? temp_v1_2->unk0 : temp_v1_2->unk4) & 0xFFFF, NULL);
func_801518B0(globalCtx, (this->text->unk0 == 6 ? temp_v1_2->unk0 : temp_v1_2->unk4), NULL);
}
return 1;
}

View File

@ -97,16 +97,15 @@ void func_80B3C39C(ObjGhaka* this, GlobalContext* globalCtx) {
}
void func_80B3C4E0(ObjGhaka* this, GlobalContext* globalCtx) {
s32 temp_v0 = func_80152498(&globalCtx->msgCtx);
s32 talkState = func_80152498(&globalCtx->msgCtx);
if (temp_v0 == 5) {
if (talkState == 5) {
if (func_80147624(globalCtx)) {
globalCtx->msgCtx.unk11F22 = 0x43;
globalCtx->msgCtx.unk12023 = 4;
func_80B3C260(this);
}
// Could be fake, but helps match
} else if ((temp_v0 & 0xFFFFFFFF) == 4) {
} else if (talkState == 4) {
if (func_80147624(globalCtx)) {
switch (globalCtx->msgCtx.choiceIndex) {
case 0:

View File

@ -12409,68 +12409,68 @@
0x80AE1874:("func_80AE1874",),
0x80AE18B4:("func_80AE18B4",),
0x80AE19B8:("EnDs2n_Draw",),
0x80AE1B70:("func_80AE1B70",),
0x80AE1BF0:("func_80AE1BF0",),
0x80AE1C54:("func_80AE1C54",),
0x80AE1E58:("func_80AE1E58",),
0x80AE1EF4:("func_80AE1EF4",),
0x80AE1F5C:("func_80AE1F5C",),
0x80AE2028:("func_80AE2028",),
0x80AE2074:("func_80AE2074",),
0x80AE21C8:("func_80AE21C8",),
0x80AE2234:("func_80AE2234",),
0x80AE2298:("func_80AE2298",),
0x80AE2340:("func_80AE2340",),
0x80AE2438:("func_80AE2438",),
0x80AE2524:("func_80AE2524",),
0x80AE25D4:("func_80AE25D4",),
0x80AE2670:("func_80AE2670",),
0x80AE26D4:("func_80AE26D4",),
0x80AE2760:("func_80AE2760",),
0x80AE28B0:("func_80AE28B0",),
0x80AE2974:("func_80AE2974",),
0x80AE2A98:("func_80AE2A98",),
0x80AE2B44:("func_80AE2B44",),
0x80AE2BE0:("func_80AE2BE0",),
0x80AE2C6C:("func_80AE2C6C",),
0x80AE2CFC:("func_80AE2CFC",),
0x80AE2DC8:("func_80AE2DC8",),
0x80AE2F78:("func_80AE2F78",),
0x80AE30F8:("func_80AE30F8",),
0x80AE32D4:("func_80AE32D4",),
0x80AE3474:("func_80AE3474",),
0x80AE352C:("func_80AE352C",),
0x80AE3644:("func_80AE3644",),
0x80AE3880:("func_80AE3880",),
0x80AE38E0:("func_80AE38E0",),
0x80AE3A68:("func_80AE3A68",),
0x80AE3BC4:("func_80AE3BC4",),
0x80AE3CF0:("func_80AE3CF0",),
0x80AE3D50:("func_80AE3D50",),
0x80AE3E4C:("func_80AE3E4C",),
0x80AE3F40:("func_80AE3F40",),
0x80AE4028:("func_80AE4028",),
0x80AE4120:("func_80AE4120",),
0x80AE41FC:("func_80AE41FC",),
0x80AE4424:("func_80AE4424",),
0x80AE44DC:("func_80AE44DC",),
0x80AE45C4:("func_80AE45C4",),
0x80AE4638:("func_80AE4638",),
0x80AE4828:("func_80AE4828",),
0x80AE4A1C:("func_80AE4A1C",),
0x80AE4B20:("func_80AE4B20",),
0x80AE4B70:("func_80AE4B70",),
0x80AE4BF4:("func_80AE4BF4",),
0x80AE4CD8:("func_80AE4CD8",),
0x80AE4D28:("func_80AE4D28",),
0x80AE1B70:("EnFsn_TestItemSelected",),
0x80AE1BF0:("EnFsn_GetWelcome",),
0x80AE1C54:("EnFsn_HandleConversationBackroom",),
0x80AE1E58:("EnFsn_HandleSetupResumeInteraction",),
0x80AE1EF4:("EnFsn_UpdateCollider",),
0x80AE1F5C:("EnFsn_HandleLookToShopkeeperBuyingCutscene",),
0x80AE2028:("EnFsn_SetCursorIndexFromNeutral",),
0x80AE2074:("EnFsn_CursorLeftRight",),
0x80AE21C8:("EnFsn_GetThirdDayItemId",),
0x80AE2234:("EnFsn_GetStolenItemId",),
0x80AE2298:("EnFsn_HasItemsToSell",),
0x80AE2340:("EnFsn_GetShopItemIds",),
0x80AE2438:("EnFsn_SpawnShopItems",),
0x80AE2524:("EnFsn_EndInteraction",),
0x80AE25D4:("EnFsn_TestEndInteraction",),
0x80AE2670:("EnFsn_TestCancelOption",),
0x80AE26D4:("EnFsn_UpdateCursorPos",),
0x80AE2760:("EnFsn_FacingShopkeeperDialogResult",),
0x80AE28B0:("EnFsn_HasPlayerSelectedItem",),
0x80AE2974:("EnFsn_UpdateJoystickInputState",),
0x80AE2A98:("EnFsn_PositionSelectedItem",),
0x80AE2B44:("EnFsn_TakeItemOffShelf",),
0x80AE2BE0:("EnFsn_ReturnItemToShelf",),
0x80AE2C6C:("EnFsn_UpdateItemSelectedProperty",),
0x80AE2CFC:("EnFsn_UpdateCursorAnim",),
0x80AE2DC8:("EnFsn_UpdateStickDirectionPromptAnim",),
0x80AE2F78:("EnFsn_InitShop",),
0x80AE30F8:("EnFsn_Idle",),
0x80AE32D4:("EnFsn_Haggle",),
0x80AE3474:("EnFsn_BeginInteraction",),
0x80AE352C:("EnFsn_StartBuying",),
0x80AE3644:("EnFsn_AskBuyOrSell",),
0x80AE3880:("EnFsn_SetupDeterminePrice",),
0x80AE38E0:("EnFsn_DeterminePrice",),
0x80AE3A68:("EnFsn_MakeOffer",),
0x80AE3BC4:("EnFsn_GiveItem",),
0x80AE3CF0:("EnFsn_SetupResumeInteraction",),
0x80AE3D50:("EnFsn_ResumeInteraction",),
0x80AE3E4C:("EnFsn_ResumeShoppingInteraction",),
0x80AE3F40:("EnFsn_LookToShelf",),
0x80AE4028:("EnFsn_BrowseShelf",),
0x80AE4120:("EnFsn_LookToShopkeeperFromShelf",),
0x80AE41FC:("EnFsn_HandleCanPlayerBuyItem",),
0x80AE4424:("EnFsn_SetupEndInteraction",),
0x80AE44DC:("EnFsn_SelectItem",),
0x80AE45C4:("EnFsn_PlayerCannotBuy",),
0x80AE4638:("EnFsn_AskCanBuyMore",),
0x80AE4828:("EnFsn_AskCanBuyAterRunningOutOfItems",),
0x80AE4A1C:("EnFsn_FaceShopkeeperSelling",),
0x80AE4B20:("EnFsn_SetupEndInteractionImmediately",),
0x80AE4B70:("EnFsn_IdleBackroom",),
0x80AE4BF4:("EnFsn_ConverseBackroom",),
0x80AE4CD8:("EnFsn_GetCutscenes",),
0x80AE4D28:("EnFsn_Blink",),
0x80AE4DB0:("EnFsn_Init",),
0x80AE4F10:("EnFsn_Destroy",),
0x80AE4F3C:("EnFsn_Update",),
0x80AE502C:("func_80AE502C",),
0x80AE52A4:("func_80AE52A4",),
0x80AE5440:("func_80AE5440",),
0x80AE57E8:("func_80AE57E8",),
0x80AE5910:("func_80AE5910",),
0x80AE502C:("EnFsn_DrawCursor",),
0x80AE52A4:("EnFsn_DrawTextRec",),
0x80AE5440:("EnFsn_DrawStickDirectionPrompts",),
0x80AE57E8:("EnFsn_OverrideLimbDraw",),
0x80AE5910:("EnFsn_PostLimbDraw",),
0x80AE5990:("EnFsn_Draw",),
0x80AE6130:("func_80AE6130",),
0x80AE615C:("func_80AE615C",),

View File

@ -14679,11 +14679,11 @@
0x80AE1B14:("enDs2nOverlayRelocations","u32","[20]",0x50),
0x80AE1B6C:("enDs2nOverlayInfoOffset","u32","",0x4),
0x80AE5B00:("En_Fsn_InitVars","UNK_TYPE1","",0x1),
0x80AE5B20:("D_80AE5B20","UNK_TYPE1","",0x1),
0x80AE5B20:("sAnimations","UNK_TYPE1","",0x1),
0x80AE5BF0:("D_80AE5BF0","UNK_TYPE1","",0x1),
0x80AE5C1C:("D_80AE5C1C","UNK_TYPE4","",0x4),
0x80AE5C1C:("sShopItemPositions","UNK_TYPE4","",0x4),
0x80AE5C40:("D_80AE5C40","UNK_TYPE4","",0x4),
0x80AE5C4C:("D_80AE5C4C","UNK_TYPE1","",0x1),
0x80AE5C4C:("sEyeTextures","UNK_TYPE1","",0x1),
0x80AE5C60:("jtbl_D_80AE5C60","UNK_PTR","",0x4),
0x80AE5CC4:("jtbl_D_80AE5CC4","UNK_PTR","",0x4),
0x80AE5D0C:("D_80AE5D0C","f32","",0x4),