Files
ac-decomp/include/m_shop.h
T
2023-10-21 01:45:37 -04:00

257 lines
8.4 KiB
C

#ifndef M_SHOP_H
#define M_SHOP_H
#include "types.h"
#include "libu64/gfxprint.h"
#include "lb_rtc.h"
#include "m_personal_id.h"
#include "m_actor_type.h"
#include "game.h"
#include "m_item_debug.h"
#ifdef __cplusplus
extern "C" {
#endif
#define mSP_PERSONAL_ID_COUNT 10
#define mSP_GOODS_COUNT 39
#define mSP_LOTTERY_ITEM_COUNT 3
#define mSP_SIGNBOARD_PRICE 500
#define mSP_FORIEGN_FRUIT_PRICE 2000
#define mSP_NET_SALES_SUM 3000 // minimum sales sum before net appears (Nook's Cranny only)
#define mSP_ROD_SALES_SUM 8000 // minimum sales sum before rod appears (Nook's Cranny only)
#define mSP_AXE_SALES_SUM 12000 // minimum sales sum before axe appears (Nook's Cranny only)
#define mSP_COMBINI_SUM 25000 // sales sum for upgrading to Nook 'n' Go
#define mSP_SUPER_SUM 90000 // sales sum for upgrading to Nookway
#define mSP_DSUPER_SUM 240000 // sales sum for upgrading to Nookington's
/* item list groups */
enum {
mSP_LIST_A, /* A priority list */
mSP_LIST_B, /* B priority list */
mSP_LIST_C, /* C priority list */
mSP_LIST_EVENT, /* event list */
mSP_LIST_TRAIN, /* */
mSP_LIST_LOTTERY, /* lottery list */
mSP_LIST_HALLOWEEN, /* halloween theme list */
mSP_LIST_PRESENT, /* */
mSP_LIST_CHRISTMAS,
mSP_LIST_SNOW,
mSP_LIST_HALLOWEEN2,
mSP_LIST_JONASON,
mSP_LIST_POSTOFFICE,
mSP_LIST_NINTENDO64,
mSP_LIST_SPECIALPRESENT,
mSP_LIST_ISLAND,
mSP_LIST_HOMEPAGE,
mSP_LIST_EVENTPRESENTCHUMON,
mSP_LIST_KAMAKURA,
mSP_LIST_ISLANDFAMICOM,
mSP_LIST_HARVEST,
mSP_LIST_MARIO,
mSP_LIST_TENT,
mSP_LIST_NUM
};
/* item List types */
enum {
mSP_LISTTYPE_COMMON, /* common ABC priority list */
mSP_LISTTYPE_UNCOMMON, /* uncommon ABC priority list */
mSP_LISTTYPE_RARE, /* rare ABC priority list */
mSP_LISTTYPE_EVENT, /* event list */
mSP_LISTTYPE_TRAIN, /* */
mSP_LISTTYPE_LOTTERY, /* lottery list */
mSP_LISTTYPE_HALLOWEEN, /* halloween theme list */
mSP_LISTTYPE_PRESENT, /* */
mSP_LISTTYPE_ABC, /* ABC */
mSP_LISTTYPE_CHRISTMAS,
mSP_LISTTYPE_SNOW,
mSP_LISTTYPE_HALLOWEEN2,
mSP_LISTTYPE_JONASON,
mSP_LISTTYPE_POSTOFFICE,
mSP_LISTTYPE_NINTENDO64,
mSP_LISTTYPE_SPECIALPRESENT,
mSP_LISTTYPE_ISLAND,
mSP_LISTTYPE_HOMEPAGE,
mSP_LISTTYPE_EVENTPRESENTCHUMON,
mSP_LISTTYPE_KAMAKURA,
mSP_LISTTYPE_ISLANDFAMICOM,
mSP_LISTTYPE_HARVEST,
mSP_LISTTYPE_MARIO,
mSP_LISTTYPE_TENT,
mSP_LISTTYPE_NUM
};
/* item list kinds */
enum {
mSP_KIND_FURNITURE,
mSP_KIND_PAPER,
mSP_KIND_CLOTH,
mSP_KIND_CARPET,
mSP_KIND_WALLPAPER,
mSP_KIND_DIARY,
mSP_KIND_MAX = mSP_KIND_DIARY,
mSP_KIND_EXTENDED_MAX /* includes diary */
};
enum {
mSP_PRIORITY_COMMON,
mSP_PRIORITY_UNCOMMON,
mSP_PRIORITY_RARE,
mSP_PRIORITY_NUM
};
enum {
mSP_CLOTH_SEASON_ANY,
mSP_CLOTH_SEASON_SPRING,
mSP_CLOTH_SEASON_SUMMER,
mSP_CLOTH_SEASON_AUTUMN,
mSP_CLOTH_SEASON_WINTER,
mSP_CLOTH_SEASON_NUM
};
enum {
mSP_GOODS_TYPE_PAPER,
mSP_GOODS_TYPE_CLOTH,
mSP_GOODS_TYPE_FTR,
mSP_GOODS_TYPE_RARE_FTR,
mSP_GOODS_TYPE_CARPET,
mSP_GOODS_TYPE_WALL,
mSP_GOODS_TYPE_6,
mSP_GOODS_TYPE_7,
mSP_GOODS_TYPE_SAPLING,
mSP_GOODS_TYPE_TOOL,
mSP_GOODS_TYPE_PLANT,
mSP_GOODS_TYPE_NUM
};
enum {
mSP_SHOP_TYPE_ZAKKA,
mSP_SHOP_TYPE_COMBINI,
mSP_SHOP_TYPE_SUPER,
mSP_SHOP_TYPE_DSUPER,
mSP_SHOP_TYPE_NUM
};
enum {
mSP_SHOP_STATUS_PRE,
mSP_SHOP_STATUS_END,
mSP_SHOP_STATUS_OPEN,
mSP_SHOP_STATUS_RENEW,
mSP_SHOP_STATUS_PREEVENT,
mSP_SHOP_STATUS_ENDEVENT,
mSP_SHOP_STATUS_OPENEVENT,
mSP_SHOP_STATUS_NUM
};
enum {
mSP_TANUKI_SHOP_STATUS_NORMAL,
mSP_TANUKI_SHOP_STATUS_EVENT,
mSP_TANUKI_SHOP_STATUS_HALLOWEEN,
mSP_TANUKI_SHOP_STATUS_FUKUBIKI,
mSP_TANUKI_SHOP_STATUS_HUKUBUKURO_SALE,
mSP_TANUKI_SHOP_STATUS_NUM
};
/* sizeof(mSP_goods_priority_list_c) == 1 */
typedef struct shop_goods_priority_list_s {
u8 a:2; /* list A rarity */
u8 b:2; /* list B rarity */
u8 c:2; /* list C rarity */
u8 pad:2;
} mSP_goods_priority_list_c;
/* sizeof(Shop_c) == 0x140 */
typedef struct shop_s {
/* 0x000 */ mSP_goods_priority_list_c priority_lists[mSP_KIND_MAX]; /* ABC list rarity (known internally as priority) */
/* 0x006 */ PersonalID_c unused_ids[mSP_PERSONAL_ID_COUNT]; /* unused personal ids */
/* 0x0CE */ mActor_name_t items[mSP_GOODS_COUNT]; /* standard shop items */
/* 0x11C */ mActor_name_t rare_item; /* spotlight rare item taken from rare furniture ABC list */
/* 0x11E */ mActor_name_t lottery_items[mSP_LOTTERY_ITEM_COUNT]; /* lottery items */
/* 0x124 */ s8 flowers_candy_grab_bag_count; /* count of items that are flowers, candy, or grab bags */
/* 0x126 */ struct {
/* 0x126 */ u16 shop_level:2; /* shop type, 0 = Cranny, 1 = Nook 'n Go, 2 = Nookway, 3 = Nookington's */
/* 0x126 */ u16 upgrading_today:1; /* enabled when the shop is 'undergoing renovations' */
/* 0x126 */ u16 send_upgrade_notice:1; /* triggers the upgrade letter to be sent out */
/* 0x126 */ u16 not_loaded_before:1; /* cleared when the shop actor has loaded for the first time in a play session */
/* 0x126/0x127 */ u16 paint_color:4; /* paint bucket color being sold */
/* 0x127 */ u16 unused:7; /* seems to be unused */
} shop_info;
/* 0x128 */ u32 sales_sum; /* current money towards upgrading shop */
/* 0x12C */ lbRTC_time_c exchange_time; /* last time the shop's items were updated */
/* 0x134 */ lbRTC_time_c renewal_time; /* last time the shop was 'renewed' which includes upgrading its 'level' */
/* 0x13C */ int visitor_flag; /* set when a foreign player enters Nook's shop, required for Nookington's */
} Shop_c;
extern mActor_name_t mSP_gc_famicom_table[];
extern int mSP_CollectCheck(mActor_name_t item);
extern void mSP_SelectRandomItem_New(GAME* game, mActor_name_t* goods_table, int goods_count, mActor_name_t* goods_exist_table, int goods_exist_count, int category, int list_type, int uncollected_only);
extern int mSP_ShopSaleReport(mActor_name_t sold_item, mActor_name_t* goods_table, int goods_count, mActor_name_t rsv_item);
extern u32 mSP_ItemNo2ItemPrice(mActor_name_t item_no);
extern int mSP_SearchItemCategoryPriority(mActor_name_t item_no, int category, int list_type, GAME* game);
extern int mSP_CountElementInGoodsList();
extern int mSP_CheckExchangeDay2();
extern int mSP_CheckExchangeMonth();
extern void mSP_NewExchangeDay();
extern void mSP_ShopItsumoChirashi(int house_no, int shop_level, mActor_name_t item, int type, int send_proc);
extern void mSP_SetShopRareFurnitureChirashi(int player_no, mActor_name_t* goods_list, int goods_count, GAME* game);
extern void mSP_SetRenewalChiraswhi_AppoDay();
extern void mSP_ExchangeLineUp_InGame(GAME* game);
extern void mSP_PlusSales(u32 sum);
extern int mSP_SetNewVisitor();
extern u32 mSP_GetSalesSum();
extern int mSP_GetShopLevel();
extern int mSP_RenewShopLevel();
extern int mSP_GetRealShopLevel();
extern int mSP_GetGoodsPercent(int priority);
extern void mSP_PrintNowShopSalesSum(gfxprint_t* gfxprint);
extern void mSP_GetGoodsPriority(u8* abc_priorities, int category);
extern void mSP_ExchangeLineUp_ZeldaMalloc();
extern void mSP_LotteryLineUp_ZeldaMalloc();
extern void mSP_ExchangeLineUp_GameAlloc(GAME* game);
extern void mSP_LotteryLineUp_GameAlloc(GAME* game);
extern void mSP_InitShopSaveData();
extern void mSP_ShopGameStartCt(GAME* game);
extern mActor_name_t mSP_GetNowShopBgNum();
extern int mSP_WhatSpecialSale();
extern mActor_name_t mSP_GetNowShopFgNum();
extern lbRTC_hour_t mSP_GetShopOpenTime();
extern lbRTC_hour_t mSP_GetShopCloseTime();
extern lbRTC_hour_t mSP_GetShopCloseTime_Bgm();
extern int mSP_InRenewal();
extern int mSP_ShopOpen();
extern void mSP_RandomHaniwaSelect(mActor_name_t* haniwa_list, int count);
extern void mSP_RandomMDSelect(mActor_name_t* md_list, int count);
extern void mSP_RandomUmbSelect(mActor_name_t* umb_list, int count);
extern mActor_name_t mSP_RandomOneFossilSelect(int multi_fossil);
extern int mSP_Chk_HukubukuroSail();
extern int mSP_CheckFukubikiDay();
extern int mSP_SetGoods2ReservedPoint(mActor_name_t goods, mActor_name_t reserved_no);
extern int mSP_CheckHallowinDay();
extern void mSP_SetTanukiShopStatus();
extern int mSP_money_check(u32 amount);
extern void mSP_get_sell_price(u32 amount);
extern mActor_name_t mSP_SelectFishginPresent(int player_no);
extern void mSP_SelectRandomItemToAGB();
extern const char* mSP_ShopStatus2String(int status);
extern mActor_name_t mSP_GetRandomStationToyItemNo();
#ifdef __cplusplus
}
#endif
#endif