Implement & link m_shop.c

This commit is contained in:
Cuyler36
2023-10-21 01:45:37 -04:00
parent e452460184
commit e52e060be7
15 changed files with 3236 additions and 45 deletions
+1
View File
@@ -181,6 +181,7 @@ extern void mCoBG_InitBoatCollision();
extern int mCoBG_CheckAttribute_BallRolling(s16* angles, const xyz_t* wpos);
extern f32 mCoBG_CheckBallRollingArea(s16 angle, const xyz_t* wpos);
extern int mCoBG_ExistHeightGap_KeepAndNow_Detail(xyz_t wpos);
extern int mCoBG_GetHoleNumber(xyz_t wpos);
extern void mCoBG_InitMoveBgData();
extern void mCoBG_InitBlockBgCheckMode();
+1 -1
View File
@@ -280,7 +280,7 @@ typedef struct common_data_s {
/* 0x028894 */ s16 balloon_state; /* balloon's current state */
/* 0x028896 */ s16 balloon_last_spawn_min; /* last minute the balloon was spawned */
/* 0x028898 */ f32 balloon_spawn_percent; /* chance that a balloon will spawn */
/* 0x02889C */ int nook_shop_state; /* adjusted based on any current events happening to Nook's shop */
/* 0x02889C */ int tanuki_shop_status; /* adjusted based on any current events happening to Nook's shop */
/* 0x0288A0 */ u8 pad_connected; /* is gamepad 0 connected? */
/* 0x0288A1 */ u8 _288a1[0x02DB40 - 0x0288A1];
/* 0x02DB40 */ u8 auto_nwrite_set; /* when true, saved nwrite time will be utilized. Seems to be used to keep same date for fishing tourney stuff. */
+5
View File
@@ -20,6 +20,9 @@ extern "C" {
#define mEv_SCHEDULE_MULTIDAY 0x40 /* event scheduled over more than a single day */
#define mEv_SCHEDULE_TODAY 0x80 /* event will be active on the day loaded */
#define mEv_TO_DAY(month_day) ((lbRTC_day_t)(month_day))
#define mEv_TO_MONTH(month_day) ((lbRTC_month_t)((month_day) >> 8))
typedef union event_monthday_s {
struct {
s8 month;
@@ -499,6 +502,8 @@ extern mEv_place_data_c* mEv_get_common_place(int type, s8 id);
extern void mEv_set_status(int event, s16 status);
extern void mEv_GetEventWeather(s16* weather, s16* intensity);
extern int mEv_CheckRealArbeit();
extern int mEv_CheckEvent(u32 event);
extern u16 mEv_get_bargain_day();
extern int mEv_weekday2day(lbRTC_month_t month, int week_type, lbRTC_weekday_t weekday);
extern void mEv_ClearEventInfo();
+41
View File
@@ -0,0 +1,41 @@
#ifndef M_ITEM_DEBUG_H
#define M_ITEM_DEBUG_H
#include "types.h"
#include "libu64/gfxprint.h"
#ifdef __cplusplus
extern "C" {
#endif
enum {
mItemDebug_CATEGORY_NONE,
mItemDebug_CATEGORY_FTR,
mItemDebug_CATEGORY_PPR,
mItemDebug_CATEGORY_MNY,
mItemDebug_CATEGORY_TOL,
mItemDebug_CATEGORY_FSH,
mItemDebug_CATEGORY_CLT,
mItemDebug_CATEGORY_ELS,
mItemDebug_CATEGORY_CPT,
mItemDebug_CATEGORY_WLL,
mItemDebug_CATEGORY_FOD,
mItemDebug_CATEGORY_PLT,
mItemDebug_CATEGORY_MSC,
mItemDebug_CATEGORY_DST,
mItemDebug_CATEGORY_LOT,
mItemDebug_CATEGORY_IST,
mItemDebug_CATEGORY_HPY,
mItemDebug_CATEGORY_KAB,
mItemDebug_CATEGORY_NUM
};
extern void mItemDebug_ItemDebugMain();
extern void mItemDebug_ItemDebugDraw(gfxprint_t* gfxprint);
#ifdef __cplusplus
}
#endif
#endif
+86 -18
View File
@@ -168,6 +168,13 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
#define HUKUBUKURO_NUM 2
#define KABU_NUM 4
#define PAPER_UNIQUE_NUM 64
#define PAINT_NUM 12
#define FLOWER_NUM 9
#define HANIWA_NUM 127
#define NOT_SECRET_MD_NUM 52
#define UMBRELLA_NUM 32
#define EMPTY_NO 0x0000
#define TREE_STUMP001 (EMPTY_NO + 1)
#define TREE_STUMP002 (EMPTY_NO + 2)
@@ -449,7 +456,7 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
#define SIGNBOARD7_PLR3 (SIGNBOARD6_PLR3 + 1)
#define FTR0_START 0x1000
#define FTR_CLASSIC_WARDROBE 0x1004
#define FTR_PAPA_BEAR 0x10E8
#define FTR_PAPA_BEAR_EAST 0x10E9
#define FTR_PAPA_BEAR_NORTH 0x10EA
@@ -504,10 +511,37 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
#define FTR_UMBRELLA31_WEST 0x1D87
#define FTR_FAMICOM_CLU_CLU_LAND 0x1DA8
#define FTR_FAMICOM_BALLOON_FIGHT 0x1DAC
#define FTR_FAMICOM_DONKEY_KONG 0x1DB0
#define FTR_FAMICOM_DK_JR_MATCH 0x1DB4
#define FTR_FAMICOM_PINBALL 0x1DB8
#define FTR_FAMICOM_TENNIS 0x1DBC
#define FTR_FAMICOM_GOLF 0x1DC0
#define FTR_FAMICOM_PUNCHOUT 0x1DC4
#define FTR_FAMICOM_BASEBALL 0x1DC8
#define FTR_FAMICOM_CLU_CLU_LAND_DISK 0x1DCC
#define FTR_FAMICOM_DONKEY_KONG_3 0x1DD0
#define FTR_FAMICOM_DONKEY_KONG_JR 0x1DD4
#define FTR_FAMICOM_SOCCER 0x1DD8
#define FTR_FAMICOM_EXCITEBIKE 0x1DDC
#define FTR_FAMICOM_WARIOS_WOODS 0x1DE0
#define FTR_FAMICOM_ICE_CLIMBERS 0x1DE4
#define FTR_FAMICOM_MARIO_BROS 0x1DE8
#define FTR_FAMICOM_SUPER_MARIO_BROS 0x1DEC
#define FTR_FAMICOM_LEGEND_OF_ZELDA 0x1DF0
#define FTR_FAMICOM 0x1DF4
#define FTR_TAPEDECK 0x1E58
#define FTR_BIG_FESTIVE_TREE 0x1E88
#define FTR_FESTIVE_TREE 0x1EBC
#define FTR_DINO_TRICERA_SKULL 0x1EEC
#define FTR_DINO_TREX_SKULL 0x1EF8
#define FTR_DINO_TRILOBITE_WEST 0x1F4F
#define FTR_DINO_DISP_TRICERA 0x1F7C
@@ -595,7 +629,7 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
#define ITM_PAPER_STACK_TWO_START 0x2040
#define ITM_PAPER_STACK_THREE_START 0x2080
#define ITM_PAPER_STACK_FOUR_START 0x20C0
#define ITM_PAPER_END 0x20FF
#define ITM_PAPER_END (ITM_PAPER_START + 256)
#define ITM_MONEY_START 0x2100
#define ITM_MONEY_1000 ITM_MONEY_START // 0x2100
@@ -993,15 +1027,17 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
#define ITM_FOSSIL (ITM_DUST2_OLD_TIRE + 1)
#define ITM_PITFALL (ITM_FOSSIL + 1)
#define ITM_FORTUNE_SLIP (ITM_PITFALL + 1)
#define ITM_SHELL0 (ITM_FORTUNE_SLIP + 1)
#define ITM_SHELL1 (ITM_SHELL0 + 1)
#define ITM_SHELL2 (ITM_SHELL1 + 1)
#define ITM_SHELL3 (ITM_SHELL2 + 1)
#define ITM_SHELL4 (ITM_SHELL3 + 1)
#define ITM_SHELL5 (ITM_SHELL4 + 1)
#define ITM_SHELL6 (ITM_SHELL5 + 1)
#define ITM_SHELL7 (ITM_SHELL6 + 1)
#define ITM_PRESENT (ITM_SHELL7 + 1)
#define ITM_SHELL_START (ITM_ETC_START + 20)
#define ITM_SHELL0 (ITM_SHELL_START + 0)
#define ITM_SHELL1 (ITM_SHELL_START + 1)
#define ITM_SHELL2 (ITM_SHELL_START + 2)
#define ITM_SHELL3 (ITM_SHELL_START + 3)
#define ITM_SHELL4 (ITM_SHELL_START + 4)
#define ITM_SHELL5 (ITM_SHELL_START + 5)
#define ITM_SHELL6 (ITM_SHELL_START + 6)
#define ITM_SHELL7 (ITM_SHELL_START + 7)
#define ITM_SHELL_END (ITM_SHELL_START + 8)
#define ITM_PRESENT (ITM_ETC_START + 28)
#define ITM_TOWN_MAP (ITM_PRESENT + 1)
#define ITM_SIGNBOARD (ITM_TOWN_MAP + 1)
#define ITM_GOLDEN_NET_PRESENT (ITM_SIGNBOARD + 1)
@@ -1025,8 +1061,12 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
#define ITM_ETC_END 0x2531
#define ITM_CARPET_START 0x2600
#define ITM_CARPET00 (ITM_CARPET_START + 0)
#define ITM_CARPET_END (ITM_CARPET_START + 71)
#define ITM_WALL_START 0x2700
#define ITM_WALL00 (ITM_WALL_START + 0)
#define ITM_WALL_END (ITM_WALL_START + 71)
#define ITM_FOOD_START 0x2800
#define ITM_FOOD_APPLE (ITM_FOOD_START + 0)
@@ -1055,9 +1095,23 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
#define ITM_MINIDISK_START 0x2A00
#define ITM_DIARY_START 0x2B00
#define ITM_COLLEGERULE ITM_DIARY_START
#define ITM_CALLIGRAPHY_PAD 0x2B0F
#define ITM_DIARY_END 0x2B10
#define ITM_DIARY00 (ITM_DIARY_START + 0)
#define ITM_DIARY01 (ITM_DIARY_START + 1)
#define ITM_DIARY02 (ITM_DIARY_START + 2)
#define ITM_DIARY03 (ITM_DIARY_START + 3)
#define ITM_DIARY04 (ITM_DIARY_START + 4)
#define ITM_DIARY05 (ITM_DIARY_START + 5)
#define ITM_DIARY06 (ITM_DIARY_START + 6)
#define ITM_DIARY07 (ITM_DIARY_START + 7)
#define ITM_DIARY08 (ITM_DIARY_START + 8)
#define ITM_DIARY09 (ITM_DIARY_START + 9)
#define ITM_DIARY10 (ITM_DIARY_START + 10)
#define ITM_DIARY11 (ITM_DIARY_START + 11)
#define ITM_DIARY12 (ITM_DIARY_START + 12)
#define ITM_DIARY13 (ITM_DIARY_START + 13)
#define ITM_DIARY14 (ITM_DIARY_START + 14)
#define ITM_DIARY15 (ITM_DIARY_START + 15)
#define ITM_DIARY_END (ITM_DIARY_START + 16)
#define ITM_TICKET_START 0x2C00
@@ -1109,10 +1163,17 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
#define ITM_SPIRIT4 (ITM_INSECT_START + 44)
#define ITM_INSECT_END (ITM_INSECT_START + 45)
#define ITM_KABU_10 0x2F00
#define ITM_KABU_50 0x2F01
#define ITM_KABU_100 0x2F02
#define ITM_KABU_SPOILED 0x2F03
#define ITM_HUKUBUKURO_START 0x2E00
#define ITM_HUKUBUKURO_BAG (ITM_HUKUBUKURO_START + 0)
#define ITM_HUKUBUKURO_PRESENT (ITM_HUKUBUKURO_START + 1)
#define ITM_HUKUBUKURO_END (ITM_HUKUBUKURO_START + 2)
#define ITM_KABU_START 0x2F00
#define ITM_KABU_10 (ITM_KABU_START + 0)
#define ITM_KABU_50 (ITM_KABU_START + 1)
#define ITM_KABU_100 (ITM_KABU_START + 2)
#define ITM_KABU_SPOILED (ITM_KABU_START + 3)
#define ITM_KABU_END (ITM_KABU_START + 4)
#define FTR1_START 0x3000
@@ -1122,13 +1183,19 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
#define FTR_POLICE_MODEL 0x302C
#define FTR_MUSEUM_MODEL 0x3030
#define FTR_LOCOMOTIVE_MODEL 0x30A0
#define FTR_TRAIN_CAR_MODEL 0x30F4
#define FTR_ORANGEBOX 0x30F8
#define FTR_COLLEGERULE 0x30FC
#define FTR_CALLIGRAPHY_PAD_WEST 0x313B
#define FTR_FESTIVE_FLAG 0x327C
#define FTR_MAILBOX 0x3294
#define FTR_FESTIVE_CANDLE 0x3298
#define FTR1_END 0x3000
@@ -1257,6 +1324,7 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
#define SNOWMAN7 (SNOWMAN6 + 1)
#define SNOWMAN8 (SNOWMAN7 + 1)
#define TRAIN_DOOR 0xA011
#define ACTOR_PROP_VILLAGER_SIGNBOARD 0xA012
#define SP_NPC_START 0xD000
#define SP_NPC_ARTIST (SP_NPC_START + 0) // D000
+1
View File
@@ -146,5 +146,6 @@ extern int mRmTp_Index2LightSwitchStatus(int index);
extern int mRmTp_NowSceneLightSwitchON();
extern int mRmTp_NowSceneLightSwitchOFF();
extern void mRmTp_MakeFtrNoTable(mActor_name_t* dst, mActor_name_t* src);
extern u8* mRmTp_CheckFtrBirthInfoTop();
#endif
+124 -21
View File
@@ -7,6 +7,7 @@
#include "m_personal_id.h"
#include "m_actor_type.h"
#include "game.h"
#include "m_item_debug.h"
#ifdef __cplusplus
extern "C" {
@@ -16,6 +17,17 @@ extern "C" {
#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 */
@@ -41,13 +53,6 @@ enum {
mSP_LIST_HARVEST,
mSP_LIST_MARIO,
mSP_LIST_TENT,
mSP_LIST_DUMMY23,
mSP_LIST_DUMMY24,
mSP_LIST_DUMMY25,
mSP_LIST_DUMMY26,
mSP_LIST_DUMMY27,
mSP_LIST_DUMMY28,
mSP_LIST_DUMMY29,
mSP_LIST_NUM
};
@@ -89,8 +94,10 @@ enum {
mSP_KIND_CLOTH,
mSP_KIND_CARPET,
mSP_KIND_WALLPAPER,
mSP_KIND_DIARY,
mSP_KIND_MAX
mSP_KIND_MAX = mSP_KIND_DIARY,
mSP_KIND_EXTENDED_MAX /* includes diary */
};
enum {
@@ -101,6 +108,63 @@ enum {
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 */
@@ -131,20 +195,59 @@ typedef struct shop_s {
/* 0x13C */ int visitor_flag; /* set when a foreign player enters Nook's shop, required for Nookington's */
} Shop_c;
extern void mSP_PrintNowShopSalesSum(gfxprint_t* gfxprint);
extern void mSP_SelectRandomItem_New(GAME* unused, mActor_name_t* item_tbl, int item_tbl_count, mActor_name_t* goods_exist_tbl, int goods_exist_tbl_count, int category, int list_type, int get_uncollected_item);
extern void mSP_RandomUmbSelect(mActor_name_t* item_buf, int item_buf_count);
extern int mSP_GetShopLevel();
extern u32 mSP_ItemNo2ItemPrice(mActor_name_t item_no);
extern int mSP_SearchItemCategoryPriority(mActor_name_t item_no, int category, int priority, GAME* unused); // not sure if it's actually a GAME*
extern mActor_name_t mSP_RandomOneFossilSelect(int multi_fossil);
extern mActor_name_t mSP_RandomHaniwaSelect(mActor_name_t* item_buf, int num);
extern mActor_name_t mSP_SelectFishginPresent(int player_no);
extern mActor_name_t mSP_GetNowShopFgNum();
extern mActor_name_t mSP_GetNowShopBgNum();
extern mActor_name_t mSP_gc_famicom_table[];
extern void mItemDebug_ItemDebugMain();
extern void mItemDebug_ItemDebugDraw(gfxprint_t* gfxprint);
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
}