Shipwright/soh/src/overlays/actors/ovl_En_GirlA/z_en_girla.c

1112 lines
43 KiB
C
Raw Normal View History

/*
* File: z_en_girla.c
* Overlay: En_GirlA
* Description: Shop Items
*/
#include "z_en_girla.h"
#include "vt.h"
#define FLAGS (ACTOR_FLAG_0 | ACTOR_FLAG_3 | ACTOR_FLAG_4)
void EnGirlA_Init(Actor* thisx, GlobalContext* globalCtx);
void EnGirlA_Destroy(Actor* thisx, GlobalContext* globalCtx);
void EnGirlA_Update(Actor* thisx, GlobalContext* globalCtx);
void EnGirlA_SetItemOutOfStock(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_UpdateStockedItem(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_InitializeItemAction(EnGirlA* this, GlobalContext* globalCtx);
void EnGirlA_Update2(EnGirlA* this, GlobalContext* globalCtx);
void func_80A3C498(Actor* thisx, GlobalContext* globalCtx, s32 flags);
void EnGirlA_Draw(Actor* thisx, GlobalContext* globalCtx);
s32 EnGirlA_CanBuy_Arrows(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_Bombs(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_DekuNuts(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_DekuSticks(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_Fish(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_RedPotion(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_GreenPotion(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_BluePotion(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_Longsword(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_HylianShield(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_DekuShield(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_GoronTunic(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_ZoraTunic(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_Health(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_MilkBottle(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_WeirdEgg(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_Unk19(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_Unk20(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_Bombchus(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_DekuSeeds(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_SoldOut(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_BlueFire(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_Bugs(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_Poe(GlobalContext* globalCtx, EnGirlA* this);
s32 EnGirlA_CanBuy_Fairy(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_ItemGive_DekuNuts(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_ItemGive_Arrows(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_ItemGive_Bombs(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_ItemGive_DekuSticks(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_ItemGive_BottledItem(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_ItemGive_Longsword(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_ItemGive_HylianShield(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_ItemGive_DekuShield(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_ItemGive_GoronTunic(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_ItemGive_ZoraTunic(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_ItemGive_Health(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_ItemGive_MilkBottle(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_ItemGive_WeirdEgg(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_ItemGive_Unk19(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_ItemGive_Unk20(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_ItemGive_DekuSeeds(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_BuyEvent_ShieldDiscount(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_BuyEvent_ObtainBombchuPack(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_BuyEvent_GoronTunic(GlobalContext* globalCtx, EnGirlA* this);
void EnGirlA_BuyEvent_ZoraTunic(GlobalContext* globalCtx, EnGirlA* this);
const ActorInit En_GirlA_InitVars = {
ACTOR_EN_GIRLA,
ACTORCAT_PROP,
FLAGS,
OBJECT_GAMEPLAY_KEEP,
sizeof(EnGirlA),
(ActorFunc)EnGirlA_Init,
(ActorFunc)EnGirlA_Destroy,
(ActorFunc)EnGirlA_Update,
NULL,
NULL,
};
static char* sShopItemDescriptions[] = {
"デクの実×5 ", // "Deku nut x5"
"×30 ", // "Arrow x30"
"×50 ", // "Arrow x50"
"爆弾×5 ", // "bomb"
"デクの実×10 ", // "Deku nut x10"
"デクの棒 ", // "Deku stick"
"爆弾×10 ", // "Bomb x10"
"さかな ", // "Fish"
"赤クスリ ", // "Red medicine"
"緑クスリ ", // "Green medicine"
"青クスリ ", // "Blue medicine"
"巨人のナイフ ", // "Giant knife"
"ハイリアの盾 ", // "Hyria Shield"
"デクの盾 ", // "Deku Shield"
"ゴロンの服 ", // "Goron's clothes"
"ゾ─ラの服 ", // "Zora's clothes"
"回復のハート ", // "Heart of recovery"
"ロンロン牛乳 ", // "Ron Ron milk"
"鶏の卵 ", // "Chicken egg"
"インゴー牛乳 ", // "Ingo milk"
"インゴー卵 ", // "Ingo egg"
"もだえ石 ", // "Modae stone"
"大人の財布 ", // "Adult wallet"
"ハートの欠片 ", // "Heart fragment"
"ボムチュウ ", // "Bombchu"
"ボムチュウ ", // "Bombchu"
"ボムチュウ ", // "Bombchu"
"ボムチュウ ", // "Bombchu"
"ボムチュウ ", // "Bombchu"
"デクのタネ ", // "Deku seeds"
"キータンのお面", // "Ketan's mask"
"こわそなお面 ", // "Scary face"
"ドクロのお面 ", // "Skull mask"
"ウサギずきん ", // "Rabbit hood"
"まことの仮面 ", // "True mask"
"ゾーラのお面 ", // "Zora's mask"
"ゴロンのお面 ", // "Goron's mask"
"ゲルドのお面 ", // "Gerd's mask"
"",
"", // "Flame"
"", // "Bugs"
"チョウチョ ", // "Butterfly"
"ポウ ", // "Poe"
"妖精の魂 ", // "Fairy soul"
"×10 ", // "Arrow"
"爆弾×20 ", // "Bomb x20"
"爆弾×30 ", // "Bomb x30"
"爆弾×5 ", // "Bomb x5"
"赤クスリ ", // "Red medicine"
"赤クスリ " // "Red medicine"
};
static s16 sMaskShopItems[8] = {
ITEM_MASK_KEATON, ITEM_MASK_SPOOKY, ITEM_MASK_SKULL, ITEM_MASK_BUNNY,
ITEM_MASK_TRUTH, ITEM_MASK_ZORA, ITEM_MASK_GORON, ITEM_MASK_GERUDO,
};
static u16 sMaskShopFreeToBorrowTextIds[5] = { 0x70B6, 0x70B5, 0x70B4, 0x70B7, 0x70BB };
typedef struct {
/* 0x00 */ s16 objID;
/* 0x02 */ s16 giDrawId;
/* 0x04 */ void (*hiliteFunc)(Actor*, GlobalContext*, s32);
/* 0x08 */ s16 price;
/* 0x0A */ s16 count;
/* 0x0C */ u16 itemDescTextId;
/* 0x0C */ u16 itemBuyPromptTextId;
/* 0x10 */ s32 getItemId;
/* 0x14 */ s32 (*canBuyFunc)(GlobalContext*, EnGirlA*);
/* 0x18 */ void (*itemGiveFunc)(GlobalContext*, EnGirlA*);
/* 0x1C */ void (*buyEventFunc)(GlobalContext*, EnGirlA*);
} ShopItemEntry; // size = 0x20
static ShopItemEntry shopItemEntries[] = {
// SI_DEKU_NUTS_5
{ OBJECT_GI_NUTS, GID_NUTS, func_8002ED80, 15, 5, 0x00B2, 0x007F, GI_NUTS_5_2, EnGirlA_CanBuy_DekuNuts,
EnGirlA_ItemGive_DekuNuts, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_ARROWS_30 */
{ OBJECT_GI_ARROW, GID_ARROWS_MEDIUM, func_8002EBCC, 60, 30, 0x00C1, 0x009B, GI_ARROWS_MEDIUM,
EnGirlA_CanBuy_Arrows, EnGirlA_ItemGive_Arrows, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_ARROWS_50 */
{ OBJECT_GI_ARROW, GID_ARROWS_LARGE, func_8002EBCC, 90, 50, 0x00B0, 0x007D, GI_ARROWS_LARGE, EnGirlA_CanBuy_Arrows,
EnGirlA_ItemGive_Arrows, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_BOMBS_5_R25 */
{ OBJECT_GI_BOMB_1, GID_BOMB, func_8002EBCC, 25, 5, 0x00A3, 0x008B, GI_BOMBS_5, EnGirlA_CanBuy_Bombs,
EnGirlA_ItemGive_Bombs, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_DEKU_NUTS_10 */
{ OBJECT_GI_NUTS, GID_NUTS, func_8002ED80, 30, 10, 0x00A2, 0x0087, GI_NUTS_10, EnGirlA_CanBuy_DekuNuts,
EnGirlA_ItemGive_DekuNuts, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_DEKU_STICK */
{ OBJECT_GI_STICK, GID_STICK, NULL, 10, 1, 0x00A1, 0x0088, GI_STICKS_1, EnGirlA_CanBuy_DekuSticks,
EnGirlA_ItemGive_DekuSticks, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_BOMBS_10 */
{ OBJECT_GI_BOMB_1, GID_BOMB, func_8002EBCC, 50, 10, 0x00B1, 0x007C, GI_BOMBS_10, EnGirlA_CanBuy_Bombs,
EnGirlA_ItemGive_Bombs, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_FISH */
{ OBJECT_GI_FISH, GID_FISH, func_8002ED80, 200, 1, 0x00B3, 0x007E, GI_FISH, EnGirlA_CanBuy_Fish, NULL,
EnGirlA_BuyEvent_ShieldDiscount },
/* SI_RED_POTION_R30 */
{ OBJECT_GI_LIQUID, GID_POTION_RED, func_8002EBCC, 30, 1, 0x00A5, 0x008E, GI_POTION_RED, EnGirlA_CanBuy_RedPotion,
EnGirlA_ItemGive_BottledItem, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_GREEN_POTION */
{ OBJECT_GI_LIQUID, GID_POTION_GREEN, func_8002EBCC, 30, 1, 0x00A6, 0x008F, GI_POTION_GREEN,
EnGirlA_CanBuy_GreenPotion, EnGirlA_ItemGive_BottledItem, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_BLUE_POTION */
{ OBJECT_GI_LIQUID, GID_POTION_BLUE, func_8002EBCC, 60, 1, 0x00A7, 0x0090, GI_POTION_BLUE,
EnGirlA_CanBuy_BluePotion, EnGirlA_ItemGive_BottledItem, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_LONGSWORD */
{ OBJECT_GI_LONGSWORD, GID_SWORD_BGS, func_8002EBCC, 1000, 1, 0x00A8, 0x0091, GI_SWORD_KNIFE,
EnGirlA_CanBuy_Longsword, EnGirlA_ItemGive_Longsword, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_HYLIAN_SHIELD */
{ OBJECT_GI_SHIELD_2, GID_SHIELD_HYLIAN, func_8002EBCC, 80, 1, 0x00A9, 0x0092, GI_SHIELD_HYLIAN,
EnGirlA_CanBuy_HylianShield, EnGirlA_ItemGive_HylianShield, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_DEKU_SHIELD */
{ OBJECT_GI_SHIELD_1, GID_SHIELD_DEKU, func_8002EBCC, 40, 1, 0x009F, 0x0089, GI_SHIELD_DEKU,
EnGirlA_CanBuy_DekuShield, EnGirlA_ItemGive_DekuShield, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_GORON_TUNIC */
{ OBJECT_GI_CLOTHES, GID_TUNIC_GORON, NULL, 200, 1, 0x00AA, 0x0093, GI_TUNIC_GORON, EnGirlA_CanBuy_GoronTunic,
EnGirlA_ItemGive_GoronTunic, EnGirlA_BuyEvent_GoronTunic },
/* SI_ZORA_TUNIC */
{ OBJECT_GI_CLOTHES, GID_TUNIC_ZORA, NULL, 300, 1, 0x00AB, 0x0094, GI_TUNIC_ZORA, EnGirlA_CanBuy_ZoraTunic,
EnGirlA_ItemGive_ZoraTunic, EnGirlA_BuyEvent_ZoraTunic },
/* SI_HEART */
{ OBJECT_GI_HEART, GID_HEART, NULL, 10, 16, 0x00AC, 0x0095, GI_HEART, EnGirlA_CanBuy_Health,
EnGirlA_ItemGive_Health, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_MILK_BOTTLE */
{ OBJECT_GI_MILK, GID_MILK, func_80A3C498, 100, 1, 0x00AD, 0x0097, GI_MILK_BOTTLE, EnGirlA_CanBuy_MilkBottle,
EnGirlA_ItemGive_MilkBottle, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_WEIRD_EGG */
{ OBJECT_GI_EGG, GID_EGG, func_8002EBCC, 100, 1, 0x00AE, 0x0099, GI_WEIRD_EGG, EnGirlA_CanBuy_WeirdEgg,
EnGirlA_ItemGive_WeirdEgg, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_19 */
{ OBJECT_GI_MILK, GID_MILK, func_80A3C498, 10000, 1, 0x00B4, 0x0085, GI_NONE, EnGirlA_CanBuy_Unk19,
EnGirlA_ItemGive_Unk19, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_20 */
{ OBJECT_GI_EGG, GID_EGG, func_8002EBCC, 10000, 1, 0x00B5, 0x0085, GI_NONE, EnGirlA_CanBuy_Unk20,
EnGirlA_ItemGive_Unk20, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_BOMBCHU_10_1 */
{ OBJECT_GI_BOMB_2, GID_BOMBCHU, func_8002EBCC, 100, 10, 0x00BC, 0x008C, GI_BOMBCHUS_10, EnGirlA_CanBuy_Bombchus,
NULL, EnGirlA_BuyEvent_ObtainBombchuPack },
/* SI_BOMBCHU_20_1 */
{ OBJECT_GI_BOMB_2, GID_BOMBCHU, func_8002EBCC, 180, 20, 0x0061, 0x002A, GI_BOMBCHUS_20, EnGirlA_CanBuy_Bombchus,
NULL, EnGirlA_BuyEvent_ObtainBombchuPack },
/* SI_BOMBCHU_20_2 */
{ OBJECT_GI_BOMB_2, GID_BOMBCHU, func_8002EBCC, 180, 20, 0x0061, 0x002A, GI_BOMBCHUS_20, EnGirlA_CanBuy_Bombchus,
NULL, EnGirlA_BuyEvent_ObtainBombchuPack },
/* SI_BOMBCHU_10_2 */
{ OBJECT_GI_BOMB_2, GID_BOMBCHU, func_8002EBCC, 100, 10, 0x00BC, 0x008C, GI_BOMBCHUS_10, EnGirlA_CanBuy_Bombchus,
NULL, EnGirlA_BuyEvent_ObtainBombchuPack },
/* SI_BOMBCHU_10_3 */
{ OBJECT_GI_BOMB_2, GID_BOMBCHU, func_8002EBCC, 100, 10, 0x00BC, 0x008C, GI_BOMBCHUS_10, EnGirlA_CanBuy_Bombchus,
NULL, EnGirlA_BuyEvent_ObtainBombchuPack },
/* SI_BOMBCHU_20_3 */
{ OBJECT_GI_BOMB_2, GID_BOMBCHU, func_8002EBCC, 180, 20, 0x0061, 0x002A, GI_BOMBCHUS_20, EnGirlA_CanBuy_Bombchus,
NULL, EnGirlA_BuyEvent_ObtainBombchuPack },
/* SI_BOMBCHU_20_4 */
{ OBJECT_GI_BOMB_2, GID_BOMBCHU, func_8002EBCC, 180, 20, 0x0061, 0x002A, GI_BOMBCHUS_20, EnGirlA_CanBuy_Bombchus,
NULL, EnGirlA_BuyEvent_ObtainBombchuPack },
/* SI_BOMBCHU_10_4 */
{ OBJECT_GI_BOMB_2, GID_BOMBCHU, func_8002EBCC, 100, 10, 0x00BC, 0x008C, GI_BOMBCHUS_10, EnGirlA_CanBuy_Bombchus,
NULL, EnGirlA_BuyEvent_ObtainBombchuPack },
/* SI_DEKU_SEEDS_30 */
{ OBJECT_GI_SEED, GID_SEEDS, func_8002EBCC, 30, 30, 0x00DF, 0x00DE, GI_SEEDS_30, EnGirlA_CanBuy_DekuSeeds,
EnGirlA_ItemGive_DekuSeeds, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_KEATON_MASK */
{ OBJECT_GI_KI_TAN_MASK, GID_MASK_KEATON, func_8002EBCC, 0, 1, 0x70B2, 0x70BE, GI_MASK_KEATON,
EnGirlA_CanBuy_DekuSeeds, EnGirlA_ItemGive_DekuSeeds, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_SPOOKY_MASK */
{ OBJECT_GI_REDEAD_MASK, GID_MASK_SPOOKY, func_8002EBCC, 0, 1, 0x70B1, 0x70BD, GI_MASK_SPOOKY,
EnGirlA_CanBuy_DekuSeeds, EnGirlA_ItemGive_DekuSeeds, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_SKULL_MASK */
{ OBJECT_GI_SKJ_MASK, GID_MASK_SKULL, func_8002EBCC, 0, 1, 0x70B0, 0x70BC, GI_MASK_SKULL, EnGirlA_CanBuy_DekuSeeds,
EnGirlA_ItemGive_DekuSeeds, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_BUNNY_HOOD */
{ OBJECT_GI_RABIT_MASK, GID_MASK_BUNNY, func_8002EBCC, 0, 1, 0x70B3, 0x70BF, GI_MASK_BUNNY,
EnGirlA_CanBuy_DekuSeeds, EnGirlA_ItemGive_DekuSeeds, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_MASK_OF_TRUTH */
{ OBJECT_GI_TRUTH_MASK, GID_MASK_TRUTH, func_80A3C498, 0, 1, 0x70AF, 0x70C3, GI_MASK_TRUTH,
EnGirlA_CanBuy_DekuSeeds, EnGirlA_ItemGive_DekuSeeds, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_ZORA_MASK */
{ OBJECT_GI_ZORAMASK, GID_MASK_ZORA, NULL, 0, 1, 0x70B9, 0x70C1, GI_MASK_ZORA, EnGirlA_CanBuy_DekuSeeds,
EnGirlA_ItemGive_DekuSeeds, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_GORON_MASK */
{ OBJECT_GI_GOLONMASK, GID_MASK_GORON, NULL, 0, 1, 0x70B8, 0x70C0, GI_MASK_GORON, EnGirlA_CanBuy_DekuSeeds,
EnGirlA_ItemGive_DekuSeeds, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_GERUDO_MASK */
{ OBJECT_GI_GERUDOMASK, GID_MASK_GERUDO, NULL, 0, 1, 0x70BA, 0x70C2, GI_MASK_GERUDO, EnGirlA_CanBuy_DekuSeeds,
EnGirlA_ItemGive_DekuSeeds, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_SOLD_OUT */
{ OBJECT_GI_SOLDOUT, GID_SOLDOUT, func_8002EBCC, 0, 0, 0x00BD, 0x70C2, GI_MASK_GERUDO, EnGirlA_CanBuy_SoldOut, NULL,
NULL },
/* SI_BLUE_FIRE */
{ OBJECT_GI_FIRE, GID_BLUE_FIRE, func_8002EBCC, 300, 1, 0x00B9, 0x00B8, GI_BLUE_FIRE, EnGirlA_CanBuy_BlueFire,
EnGirlA_ItemGive_BottledItem, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_BUGS */
{ OBJECT_GI_INSECT, GID_BUG, func_80A3C498, 50, 1, 0x00BB, 0x00BA, GI_BUGS, EnGirlA_CanBuy_Bugs,
EnGirlA_ItemGive_BottledItem, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_BIG_POE */
{ OBJECT_GI_GHOST, GID_BIG_POE, func_80A3C498, 50, 1, 0x506F, 0x5070, GI_BIG_POE, EnGirlA_CanBuy_Poe,
EnGirlA_ItemGive_BottledItem, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_POE */
{ OBJECT_GI_GHOST, GID_POE, func_80A3C498, 30, 1, 0x506D, 0x506E, GI_POE, EnGirlA_CanBuy_Poe,
EnGirlA_ItemGive_BottledItem, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_FAIRY */
{ OBJECT_GI_SOUL, GID_FAIRY, func_80A3C498, 50, 1, 0x00B7, 0x00B6, GI_FAIRY, EnGirlA_CanBuy_Fairy,
EnGirlA_ItemGive_BottledItem, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_ARROWS_10 */
{ OBJECT_GI_ARROW, GID_ARROWS_SMALL, func_8002EBCC, 20, 10, 0x00A0, 0x008A, GI_ARROWS_SMALL, EnGirlA_CanBuy_Arrows,
EnGirlA_ItemGive_Arrows, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_BOMBS_20 */
{ OBJECT_GI_BOMB_1, GID_BOMB, func_8002EBCC, 80, 20, 0x001C, 0x0006, GI_BOMBS_20, EnGirlA_CanBuy_Bombs,
EnGirlA_ItemGive_Bombs, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_BOMBS_30 */
{ OBJECT_GI_BOMB_1, GID_BOMB, func_8002EBCC, 120, 30, 0x001D, 0x001E, GI_BOMBS_30, EnGirlA_CanBuy_Bombs,
EnGirlA_ItemGive_Bombs, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_BOMBS_5_R35 */
{ OBJECT_GI_BOMB_1, GID_BOMB, func_8002EBCC, 35, 5, 0x00CB, 0x00CA, GI_BOMBS_5, EnGirlA_CanBuy_Bombs,
EnGirlA_ItemGive_Bombs, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_RED_POTION_R40 */
{ OBJECT_GI_LIQUID, GID_POTION_RED, func_8002EBCC, 40, 1, 0x0064, 0x0062, GI_POTION_RED, EnGirlA_CanBuy_RedPotion,
EnGirlA_ItemGive_BottledItem, EnGirlA_BuyEvent_ShieldDiscount },
/* SI_RED_POTION_R50 */
{ OBJECT_GI_LIQUID, GID_POTION_RED, func_8002EBCC, 50, 1, 0x0065, 0x0063, GI_POTION_RED, EnGirlA_CanBuy_RedPotion,
EnGirlA_ItemGive_BottledItem, EnGirlA_BuyEvent_ShieldDiscount }
};
// Defines the Hylian Shield discount amount
static s16 sShieldDiscounts[] = { 5, 10, 15, 20, 25, 30, 35, 40 };
void EnGirlA_SetupAction(EnGirlA* this, EnGirlAActionFunc func) {
this->actionFunc = func;
}
s32 EnGirlA_TryChangeShopItem(EnGirlA* this) {
switch (this->actor.params) {
case SI_MILK_BOTTLE:
if (gSaveContext.itemGetInf[0] & 0x4) {
this->actor.params = SI_HEART;
return true;
}
break;
case SI_BOMBCHU_10_2:
if (gSaveContext.itemGetInf[0] & 0x40) {
this->actor.params = SI_SOLD_OUT;
return true;
}
break;
case SI_BOMBCHU_10_3:
if (gSaveContext.itemGetInf[0] & 0x80) {
this->actor.params = SI_SOLD_OUT;
return true;
}
break;
case SI_BOMBCHU_20_3:
if (gSaveContext.itemGetInf[0] & 0x100) {
this->actor.params = SI_SOLD_OUT;
return true;
}
break;
case SI_BOMBCHU_20_4:
if (gSaveContext.itemGetInf[0] & 0x200) {
this->actor.params = SI_SOLD_OUT;
return true;
}
break;
case SI_BOMBCHU_10_4:
if (gSaveContext.itemGetInf[0] & 0x400) {
this->actor.params = SI_SOLD_OUT;
return true;
}
break;
case SI_BOMBCHU_10_1:
if (gSaveContext.itemGetInf[0] & 0x8) {
this->actor.params = SI_SOLD_OUT;
return true;
}
break;
case SI_BOMBCHU_20_1:
if (gSaveContext.itemGetInf[0] & 0x10) {
this->actor.params = SI_SOLD_OUT;
return true;
}
break;
case SI_BOMBCHU_20_2:
if (gSaveContext.itemGetInf[0] & 0x20) {
this->actor.params = SI_SOLD_OUT;
return true;
}
break;
}
return false;
}
void EnGirlA_InitItem(EnGirlA* this, GlobalContext* globalCtx) {
s16 params = this->actor.params;
osSyncPrintf("%s(%2d)初期設定\n", sShopItemDescriptions[params], params);
if ((params >= SI_MAX) && (params < 0)) {
Actor_Kill(&this->actor);
osSyncPrintf(VT_COL(RED, WHITE));
osSyncPrintf("引数がおかしいよ(arg_data=%d)\n", this->actor.params);
osSyncPrintf(VT_RST);
ASSERT(0, "0", "../z_en_girlA.c", 1421);
return;
}
this->objBankIndex = Object_GetIndex(&globalCtx->objectCtx, shopItemEntries[params].objID);
if (this->objBankIndex < 0) {
Actor_Kill(&this->actor);
osSyncPrintf(VT_COL(RED, WHITE));
osSyncPrintf("バンクが無いよ!!(%s)\n", sShopItemDescriptions[params]);
osSyncPrintf(VT_RST);
ASSERT(0, "0", "../z_en_girlA.c", 1434);
return;
}
this->actor.params = params;
this->actionFunc2 = EnGirlA_InitializeItemAction;
}
void EnGirlA_Init(Actor* thisx, GlobalContext* globalCtx) {
EnGirlA* this = (EnGirlA*)thisx;
EnGirlA_TryChangeShopItem(this);
EnGirlA_InitItem(this, globalCtx);
osSyncPrintf("%s(%2d)初期設定\n", sShopItemDescriptions[this->actor.params], this->actor.params);
}
void EnGirlA_Destroy(Actor* thisx, GlobalContext* globalCtx) {
EnGirlA* this = (EnGirlA*)thisx;
if (this->isInitialized) {
SkelAnime_Free(&this->skelAnime, globalCtx);
}
}
s32 EnGirlA_CanBuy_Arrows(GlobalContext* globalCtx, EnGirlA* this) {
if (Item_CheckObtainability(ITEM_BOW) == ITEM_NONE) {
return CANBUY_RESULT_CANT_GET_NOW_5;
}
if (AMMO(ITEM_BOW) >= CUR_CAPACITY(UPG_QUIVER)) {
return CANBUY_RESULT_CANT_GET_NOW;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_Bombs(GlobalContext* globalCtx, EnGirlA* this) {
if (!CHECK_QUEST_ITEM(QUEST_GORON_RUBY)) {
return CANBUY_RESULT_CANT_GET_NOW;
}
if (AMMO(ITEM_BOMB) >= CUR_CAPACITY(UPG_BOMB_BAG)) {
return CANBUY_RESULT_CANT_GET_NOW;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_DekuNuts(GlobalContext* globalCtx, EnGirlA* this) {
if ((CUR_CAPACITY(UPG_NUTS) != 0) && (AMMO(ITEM_NUT) >= CUR_CAPACITY(UPG_NUTS))) {
return CANBUY_RESULT_CANT_GET_NOW;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
if ((Item_CheckObtainability(ITEM_NUT) == ITEM_NONE) && !CVar_GetS32("gFastDrops", 0)) {
return CANBUY_RESULT_SUCCESS_FANFARE;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_DekuSticks(GlobalContext* globalCtx, EnGirlA* this) {
if ((CUR_CAPACITY(UPG_STICKS) != 0) && (AMMO(ITEM_STICK) >= CUR_CAPACITY(UPG_STICKS))) {
return CANBUY_RESULT_CANT_GET_NOW;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
if ((Item_CheckObtainability(ITEM_STICK) == ITEM_NONE) && !CVar_GetS32("gFastDrops", 0)) {
return CANBUY_RESULT_SUCCESS_FANFARE;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_Fish(GlobalContext* globalCtx, EnGirlA* this) {
if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_BOTTLE;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (Item_CheckObtainability(ITEM_FISH) == ITEM_NONE) {
return CANBUY_RESULT_SUCCESS_FANFARE;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_RedPotion(GlobalContext* globalCtx, EnGirlA* this) {
if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_BOTTLE;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (Item_CheckObtainability(ITEM_POTION_RED) == ITEM_NONE) {
return CANBUY_RESULT_SUCCESS_FANFARE;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_GreenPotion(GlobalContext* globalCtx, EnGirlA* this) {
if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_BOTTLE;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (Item_CheckObtainability(ITEM_POTION_GREEN) == ITEM_NONE) {
return CANBUY_RESULT_SUCCESS_FANFARE;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_BluePotion(GlobalContext* globalCtx, EnGirlA* this) {
if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_BOTTLE;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (Item_CheckObtainability(ITEM_POTION_BLUE) == ITEM_NONE) {
return CANBUY_RESULT_SUCCESS_FANFARE;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_Longsword(GlobalContext* globalCtx, EnGirlA* this) {
if ((gBitFlags[2] & gSaveContext.inventory.equipment) && !(gBitFlags[3] & gSaveContext.inventory.equipment)) {
return CANBUY_RESULT_CANT_GET_NOW;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (Item_CheckObtainability(ITEM_SWORD_BGS) == ITEM_NONE) {
return CANBUY_RESULT_SUCCESS_FANFARE;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_HylianShield(GlobalContext* globalCtx, EnGirlA* this) {
if (gBitFlags[5] & gSaveContext.inventory.equipment) {
return CANBUY_RESULT_CANT_GET_NOW;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (Item_CheckObtainability(ITEM_SHIELD_HYLIAN) == ITEM_NONE) {
return CANBUY_RESULT_SUCCESS_FANFARE;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_DekuShield(GlobalContext* globalCtx, EnGirlA* this) {
if (gBitFlags[4] & gSaveContext.inventory.equipment) {
return CANBUY_RESULT_CANT_GET_NOW;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (Item_CheckObtainability(ITEM_SHIELD_DEKU) == ITEM_NONE) {
return CANBUY_RESULT_SUCCESS_FANFARE;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_GoronTunic(GlobalContext* globalCtx, EnGirlA* this) {
if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
return CANBUY_RESULT_CANT_GET_NOW;
}
if (gBitFlags[9] & gSaveContext.inventory.equipment) {
return CANBUY_RESULT_CANT_GET_NOW;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (Item_CheckObtainability(ITEM_TUNIC_GORON) == ITEM_NONE) {
return CANBUY_RESULT_SUCCESS_FANFARE;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_ZoraTunic(GlobalContext* globalCtx, EnGirlA* this) {
if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
return CANBUY_RESULT_CANT_GET_NOW;
}
if (gBitFlags[10] & gSaveContext.inventory.equipment) {
return CANBUY_RESULT_CANT_GET_NOW;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (Item_CheckObtainability(ITEM_TUNIC_ZORA) == ITEM_NONE) {
return CANBUY_RESULT_SUCCESS_FANFARE;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_Health(GlobalContext* globalCtx, EnGirlA* this) {
if (gSaveContext.healthCapacity == gSaveContext.health) {
return CANBUY_RESULT_CANT_GET_NOW;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_MilkBottle(GlobalContext* globalCtx, EnGirlA* this) {
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (Item_CheckObtainability(ITEM_MILK_BOTTLE) == ITEM_NONE) {
return CANBUY_RESULT_SUCCESS_FANFARE;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_WeirdEgg(GlobalContext* globalCtx, EnGirlA* this) {
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (Item_CheckObtainability(ITEM_LETTER_ZELDA) == ITEM_NONE) {
return CANBUY_RESULT_SUCCESS_FANFARE;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_Unk19(GlobalContext* globalCtx, EnGirlA* this) {
return CANBUY_RESULT_NEED_RUPEES;
}
s32 EnGirlA_CanBuy_Unk20(GlobalContext* globalCtx, EnGirlA* this) {
return CANBUY_RESULT_NEED_RUPEES;
}
s32 EnGirlA_CanBuy_Bombchus(GlobalContext* globalCtx, EnGirlA* this) {
if (AMMO(ITEM_BOMBCHU) >= 50) {
return CANBUY_RESULT_CANT_GET_NOW;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (Item_CheckObtainability(ITEM_BOMBCHU) == ITEM_NONE) {
return CANBUY_RESULT_SUCCESS_FANFARE;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_DekuSeeds(GlobalContext* globalCtx, EnGirlA* this) {
if (AMMO(ITEM_SLINGSHOT) >= CUR_CAPACITY(UPG_BULLET_BAG)) {
return CANBUY_RESULT_CANT_GET_NOW;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
if ((Item_CheckObtainability(ITEM_SEEDS) == ITEM_NONE) && !CVar_GetS32("gFastDrops", 0)) {
return CANBUY_RESULT_SUCCESS_FANFARE;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_SoldOut(GlobalContext* globalCtx, EnGirlA* this) {
return CANBUY_RESULT_CANT_GET_NOW_5;
}
s32 EnGirlA_CanBuy_BlueFire(GlobalContext* globalCtx, EnGirlA* this) {
if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_BOTTLE;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (Item_CheckObtainability(ITEM_BLUE_FIRE) == ITEM_NONE) {
return CANBUY_RESULT_SUCCESS_FANFARE;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_Bugs(GlobalContext* globalCtx, EnGirlA* this) {
if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_BOTTLE;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (Item_CheckObtainability(ITEM_BUG) == ITEM_NONE) {
return CANBUY_RESULT_SUCCESS_FANFARE;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_Poe(GlobalContext* globalCtx, EnGirlA* this) {
if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_BOTTLE;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (Item_CheckObtainability(ITEM_POE) == ITEM_NONE) {
return CANBUY_RESULT_SUCCESS_FANFARE;
}
return CANBUY_RESULT_SUCCESS;
}
s32 EnGirlA_CanBuy_Fairy(GlobalContext* globalCtx, EnGirlA* this) {
if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_BOTTLE;
}
if (gSaveContext.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES;
}
if (Item_CheckObtainability(ITEM_FAIRY) == ITEM_NONE) {
return CANBUY_RESULT_SUCCESS_FANFARE;
}
return CANBUY_RESULT_SUCCESS;
}
void EnGirlA_ItemGive_Arrows(GlobalContext* globalCtx, EnGirlA* this) {
Inventory_ChangeAmmo(ITEM_BOW, this->itemCount);
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_ItemGive_Bombs(GlobalContext* globalCtx, EnGirlA* this) {
switch (this->itemCount) {
case 5:
Item_Give(globalCtx, ITEM_BOMBS_5);
break;
case 10:
Item_Give(globalCtx, ITEM_BOMBS_10);
break;
case 20:
Item_Give(globalCtx, ITEM_BOMBS_20);
break;
case 30:
Item_Give(globalCtx, ITEM_BOMBS_30);
break;
}
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_ItemGive_DekuNuts(GlobalContext* globalCtx, EnGirlA* this) {
switch (this->itemCount) {
case 5:
Item_Give(globalCtx, ITEM_NUTS_5);
break;
case 10:
Item_Give(globalCtx, ITEM_NUTS_10);
break;
}
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_ItemGive_DekuSticks(GlobalContext* globalCtx, EnGirlA* this) {
Item_Give(globalCtx, ITEM_STICK);
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_ItemGive_Longsword(GlobalContext* globalCtx, EnGirlA* this) {
func_800849EC(globalCtx);
gSaveContext.swordHealth = 8;
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_ItemGive_HylianShield(GlobalContext* globalCtx, EnGirlA* this) {
Item_Give(globalCtx, ITEM_SHIELD_HYLIAN);
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_ItemGive_DekuShield(GlobalContext* globalCtx, EnGirlA* this) {
Item_Give(globalCtx, ITEM_SHIELD_DEKU);
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_ItemGive_GoronTunic(GlobalContext* globalCtx, EnGirlA* this) {
Item_Give(globalCtx, ITEM_TUNIC_GORON);
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_ItemGive_ZoraTunic(GlobalContext* globalCtx, EnGirlA* this) {
Item_Give(globalCtx, ITEM_TUNIC_ZORA);
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_ItemGive_Health(GlobalContext* globalCtx, EnGirlA* this) {
Health_ChangeBy(globalCtx, this->itemCount);
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_ItemGive_MilkBottle(GlobalContext* globalCtx, EnGirlA* this) {
Item_Give(globalCtx, ITEM_MILK_BOTTLE);
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_ItemGive_WeirdEgg(GlobalContext* globalCtx, EnGirlA* this) {
Item_Give(globalCtx, ITEM_WEIRD_EGG);
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_ItemGive_Unk19(GlobalContext* globalCtx, EnGirlA* this) {
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_ItemGive_Unk20(GlobalContext* globalCtx, EnGirlA* this) {
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_ItemGive_DekuSeeds(GlobalContext* globalCtx, EnGirlA* this) {
Item_Give(globalCtx, ITEM_SEEDS_30);
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_ItemGive_BottledItem(GlobalContext* globalCtx, EnGirlA* this) {
switch (this->actor.params) {
case SI_FISH:
Item_Give(globalCtx, ITEM_FISH);
break;
case SI_RED_POTION_R30:
Item_Give(globalCtx, ITEM_POTION_RED);
break;
case SI_GREEN_POTION:
Item_Give(globalCtx, ITEM_POTION_GREEN);
break;
case SI_BLUE_POTION:
Item_Give(globalCtx, ITEM_POTION_BLUE);
break;
case SI_BLUE_FIRE:
Item_Give(globalCtx, ITEM_BLUE_FIRE);
break;
case SI_BUGS:
Item_Give(globalCtx, ITEM_BUG);
break;
case SI_BIG_POE:
Item_Give(globalCtx, ITEM_BIG_POE);
break;
case SI_POE:
Item_Give(globalCtx, ITEM_POE);
break;
case SI_FAIRY:
Item_Give(globalCtx, ITEM_FAIRY);
break;
}
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_BuyEvent_ShieldDiscount(GlobalContext* globalCtx, EnGirlA* this) {
if (this->actor.params == SI_HYLIAN_SHIELD) {
if (gSaveContext.infTable[7] & 0x40) {
Rupees_ChangeBy(-(this->basePrice - sShieldDiscounts[(s32)Rand_ZeroFloat(7.9f)]));
return;
}
}
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_BuyEvent_GoronTunic(GlobalContext* globalCtx, EnGirlA* this) {
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_BuyEvent_ZoraTunic(GlobalContext* globalCtx, EnGirlA* this) {
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_BuyEvent_ObtainBombchuPack(GlobalContext* globalCtx, EnGirlA* this) {
switch (this->actor.params) {
case SI_BOMBCHU_10_2:
gSaveContext.itemGetInf[0] |= 0x40;
break;
case SI_BOMBCHU_10_3:
gSaveContext.itemGetInf[0] |= 0x80;
break;
case SI_BOMBCHU_20_3:
gSaveContext.itemGetInf[0] |= 0x100;
break;
case SI_BOMBCHU_20_4:
gSaveContext.itemGetInf[0] |= 0x200;
break;
case SI_BOMBCHU_10_4:
gSaveContext.itemGetInf[0] |= 0x400;
break;
case SI_BOMBCHU_10_1:
gSaveContext.itemGetInf[0] |= 0x8;
break;
case SI_BOMBCHU_20_1:
gSaveContext.itemGetInf[0] |= 0x10;
break;
case SI_BOMBCHU_20_2:
gSaveContext.itemGetInf[0] |= 0x20;
break;
}
Rupees_ChangeBy(-this->basePrice);
}
void EnGirlA_Noop(EnGirlA* this, GlobalContext* globalCtx) {
}
void EnGirlA_SetItemDescription(GlobalContext* globalCtx, EnGirlA* this) {
ShopItemEntry* tmp = &shopItemEntries[this->actor.params];
s32 params = this->actor.params;
s32 maskId;
s32 isMaskFreeToBorrow;
if ((this->actor.params >= SI_KEATON_MASK) && (this->actor.params <= SI_MASK_OF_TRUTH)) {
maskId = this->actor.params - SI_KEATON_MASK;
isMaskFreeToBorrow = false;
switch (this->actor.params) {
case SI_KEATON_MASK:
if (gSaveContext.itemGetInf[3] & 0x100) {
isMaskFreeToBorrow = true;
}
break;
case SI_SPOOKY_MASK:
if (gSaveContext.itemGetInf[3] & 0x400) {
isMaskFreeToBorrow = true;
}
break;
case SI_SKULL_MASK:
if (gSaveContext.itemGetInf[3] & 0x200) {
isMaskFreeToBorrow = true;
}
break;
case SI_BUNNY_HOOD:
if (gSaveContext.itemGetInf[3] & 0x800) {
isMaskFreeToBorrow = true;
}
break;
case SI_MASK_OF_TRUTH:
if (gSaveContext.itemGetInf[3] & 0x800) {
isMaskFreeToBorrow = true;
}
break;
}
if (isMaskFreeToBorrow) {
this->actor.textId = sMaskShopFreeToBorrowTextIds[maskId];
} else {
this->actor.textId = tmp->itemDescTextId;
}
} else {
this->actor.textId = tmp->itemDescTextId;
}
this->isInvisible = false;
this->actor.draw = EnGirlA_Draw;
}
void EnGirlA_SetItemOutOfStock(GlobalContext* globalCtx, EnGirlA* this) {
this->isInvisible = true;
this->actor.draw = NULL;
if ((this->actor.params >= SI_KEATON_MASK) && (this->actor.params <= SI_GERUDO_MASK)) {
this->actor.textId = 0xBD;
}
}
void EnGirlA_UpdateStockedItem(GlobalContext* globalCtx, EnGirlA* this) {
ShopItemEntry* itemEntry;
if (EnGirlA_TryChangeShopItem(this)) {
EnGirlA_InitItem(this, globalCtx);
itemEntry = &shopItemEntries[this->actor.params];
this->actor.textId = itemEntry->itemDescTextId;
} else {
this->isInvisible = false;
this->actor.draw = EnGirlA_Draw;
}
}
s32 EnGirlA_TrySetMaskItemDescription(EnGirlA* this, GlobalContext* globalCtx) {
s32 params;
if ((this->actor.params >= SI_KEATON_MASK) && (this->actor.params <= SI_GERUDO_MASK)) {
params = this->actor.params - SI_KEATON_MASK;
if (INV_CONTENT(ITEM_TRADE_CHILD) == sMaskShopItems[params]) {
EnGirlA_SetItemOutOfStock(globalCtx, this);
} else {
EnGirlA_SetItemDescription(globalCtx, this);
}
return true;
}
return false;
}
void EnGirlA_InitializeItemAction(EnGirlA* this, GlobalContext* globalCtx) {
s16 params = this->actor.params;
ShopItemEntry* itemEntry = &shopItemEntries[params];
if (Object_IsLoaded(&globalCtx->objectCtx, this->objBankIndex)) {
this->actor.flags &= ~ACTOR_FLAG_4;
this->actor.objBankIndex = this->objBankIndex;
switch (this->actor.params) {
case SI_KEATON_MASK:
if (gSaveContext.itemGetInf[3] & 0x100) {
this->actor.textId = 0x70B6;
} else {
this->actor.textId = itemEntry->itemDescTextId;
}
this->itemBuyPromptTextId = itemEntry->itemBuyPromptTextId;
break;
case SI_SPOOKY_MASK:
if (gSaveContext.itemGetInf[3] & 0x400) {
this->actor.textId = 0x70B5;
} else {
this->actor.textId = itemEntry->itemDescTextId;
}
this->itemBuyPromptTextId = itemEntry->itemBuyPromptTextId;
break;
case SI_SKULL_MASK:
if (gSaveContext.itemGetInf[3] & 0x200) {
this->actor.textId = 0x70B4;
} else {
this->actor.textId = itemEntry->itemDescTextId;
}
this->itemBuyPromptTextId = itemEntry->itemBuyPromptTextId;
break;
case SI_BUNNY_HOOD:
if (gSaveContext.itemGetInf[3] & 0x800) {
this->actor.textId = 0x70B7;
} else {
this->actor.textId = itemEntry->itemDescTextId;
}
this->itemBuyPromptTextId = itemEntry->itemBuyPromptTextId;
break;
case SI_MASK_OF_TRUTH:
if (gSaveContext.itemGetInf[3] & 0x800) {
this->actor.textId = 0x70BB;
this->itemBuyPromptTextId = itemEntry->itemBuyPromptTextId;
} else {
this->actor.textId = itemEntry->itemDescTextId;
this->itemBuyPromptTextId = 0xEB;
}
break;
case SI_ZORA_MASK:
this->actor.textId = itemEntry->itemDescTextId;
this->itemBuyPromptTextId = itemEntry->itemBuyPromptTextId;
break;
case SI_GORON_MASK:
this->actor.textId = itemEntry->itemDescTextId;
this->itemBuyPromptTextId = itemEntry->itemBuyPromptTextId;
break;
case SI_GERUDO_MASK:
this->actor.textId = itemEntry->itemDescTextId;
this->itemBuyPromptTextId = itemEntry->itemBuyPromptTextId;
break;
default:
this->actor.textId = itemEntry->itemDescTextId;
this->itemBuyPromptTextId = itemEntry->itemBuyPromptTextId;
break;
}
if (!EnGirlA_TrySetMaskItemDescription(this, globalCtx)) {
EnGirlA_SetItemDescription(globalCtx, this);
}
this->setOutOfStockFunc = EnGirlA_SetItemOutOfStock;
this->updateStockedItemFunc = EnGirlA_UpdateStockedItem;
this->getItemId = itemEntry->getItemId;
this->canBuyFunc = itemEntry->canBuyFunc;
this->itemGiveFunc = itemEntry->itemGiveFunc;
this->buyEventFunc = itemEntry->buyEventFunc;
this->basePrice = itemEntry->price;
this->itemCount = itemEntry->count;
this->hiliteFunc = itemEntry->hiliteFunc;
this->giDrawId = itemEntry->giDrawId;
osSyncPrintf("%s(%2d)\n", sShopItemDescriptions[params], params);
this->actor.flags &= ~ACTOR_FLAG_0;
Actor_SetScale(&this->actor, 0.25f);
this->actor.shape.yOffset = 24.0f;
this->actor.shape.shadowScale = 4.0f;
this->actor.floorHeight = this->actor.home.pos.y;
this->actor.gravity = 0.0f;
EnGirlA_SetupAction(this, EnGirlA_Noop);
this->isInitialized = true;
this->actionFunc2 = EnGirlA_Update2;
this->isSelected = false;
this->yRotation = 0;
this->yRotationInit = this->actor.shape.rot.y;
}
}
void EnGirlA_Update2(EnGirlA* this, GlobalContext* globalCtx) {
Actor_SetScale(&this->actor, 0.25f);
this->actor.shape.yOffset = 24.0f;
this->actor.shape.shadowScale = 4.0f;
EnGirlA_TrySetMaskItemDescription(this, globalCtx);
this->actionFunc(this, globalCtx);
Actor_SetFocus(&this->actor, 5.0f);
this->actor.shape.rot.x = 0.0f;
if (this->actor.params != SI_SOLD_OUT) {
if (this->isSelected) {
this->yRotation += 0x1F4;
} else {
Math_SmoothStepToS(&this->yRotation, 0, 10, 0x7D0, 0);
}
}
}
void EnGirlA_Update(Actor* thisx, GlobalContext* globalCtx) {
EnGirlA* this = (EnGirlA*)thisx;
this->actionFunc2(this, globalCtx);
}
void func_80A3C498(Actor* thisx, GlobalContext* globalCtx, s32 flags) {
func_8002EBCC(thisx, globalCtx, 0);
func_8002ED80(thisx, globalCtx, 0);
}
void EnGirlA_Draw(Actor* thisx, GlobalContext* globalCtx) {
EnGirlA* this = (EnGirlA*)thisx;
Matrix_RotateY(((this->yRotation * 360.0f) / 65536.0f) * (M_PI / 180.0f), MTXMODE_APPLY);
if (this->hiliteFunc != NULL) {
this->hiliteFunc(thisx, globalCtx, 0);
}
GetItem_Draw(globalCtx, this->giDrawId);
}