Implement & link m_room_type.c

This commit is contained in:
Cuyler36
2023-11-03 18:37:48 -04:00
parent 0722205afb
commit 2d90dcfd36
10 changed files with 3631 additions and 45 deletions
+5 -2
View File
@@ -229,8 +229,11 @@ m_rcp.c:
.text: [0x803E50E4, 0x803E5D04]
.data: [0x8065C588, 0x8065C910]
.bss: [0x8129F2E8, 0x8129F2F0]
m_room_type/mRmTp_FtrItemNo2FtrIdx.c:
.text: [0x803E7878, 0x803E78BC]
m_room_type.c:
.text: [0x803E5D04, 0x803E7998]
.rodata: [0x80643240, 0x80643270]
.data: [0x8065C910, 0x8065D690]
.bss: [0x8129F2F0, 0x8129F308]
m_scene_ftr.c:
.text: [0x803E7998, 0x803E7A7C]
m_shop.c:
+7 -5
View File
@@ -122,6 +122,12 @@ typedef struct home_layer_s {
/* 0x208 */ u32 unk_208[8]; /* Only referenced in mISL_gc_to_agb_layer */
} mHm_lyr_c;
typedef struct floor_bit_info_s {
u8 wall_original:1; /* is wallpaper a pattern (original)? */
u8 floor_original:1; /* is flooring a pattern (original)? */
u8 bit_2_7:6; /* unused? */
} mHm_fllot_bit_c;
/* sizeof(mHm_flr_c) == 0x8A8 */
typedef struct home_floor_s {
/* 0x000 */ mHm_lyr_c layer_main;
@@ -130,11 +136,7 @@ typedef struct home_floor_s {
/* 0x678 */ mHm_lyr_c layer_storage2;
/* 0x8A0 */ mHm_wf_c wall_floor;
/* 0x8A2 */ TempoBeat_c tempo_beat;
/* 0x8A4 */ struct {
u8 wall_original:1; /* is wallpaper a pattern (original)? */
u8 floor_original:1; /* is flooring a pattern (original)? */
u8 bit_2_7:6; /* unused? */
} fllot_bit; /* Name exposed? by mISL_gc_to_agb_fllot_bit, may also be floor_bit_info as 'mRmTp_GetNowSceneFloorBitInfoP' */
/* 0x8A4 */ mHm_fllot_bit_c floor_bit_info;
} mHm_flr_c;
/* sizeof(mHm_flg_c) == 1 */
+8 -1
View File
@@ -96,6 +96,7 @@ extern int mNT_check_unknown(mActor_name_t item_no);
extern int FGTreeType_check(mActor_name_t tree);
extern mActor_name_t bg_item_fg_sub_tree_grow(mActor_name_t tree, int past_days, int check_plant);
extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
extern mActor_name_t mNT_FishIdx2FishItemNo(int idx);
/* Retrieve the item actor's category */
#define ITEM_NAME_GET_TYPE(n) (((n) & 0xF000) >> 12)
@@ -676,6 +677,7 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
#define ITM_AXE 0x2201
#define ITM_SHOVEL 0x2202
#define ITM_ROD 0x2203
#define ITM_UMBRELLA_START (ITM_TOOL_START + 4)
#define ITM_GELATO_UMBRELLA 0x2204
#define ITM_DAFFODIL_PARASOL 0x2205
// TODO: other umbrellas
@@ -688,6 +690,7 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
#define ITM_MY_ORG_UMBRELLA5 0x2229
#define ITM_MY_ORG_UMBRELLA6 0x222A
#define ITM_MY_ORG_UMBRELLA7 0x222B
#define ITM_UMBRELLA_END (ITM_TOOL_START + 44)
#define ITM_SICKLE 0x222C
#define ITM_RED_PAINT 0x222D
#define ITM_ORANGE_PAINT 0x222E
@@ -712,6 +715,7 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
#define ITM_AXE_USE_5 0x2241
#define ITM_AXE_USE_6 0x2242
#define ITM_AXE_USE_7 0x2243
#define ITM_BALLOON_START (ITM_TOOL_START + 68)
#define ITM_RED_BALLOON 0x2244
#define ITM_YELLOW_BALLOON 0x2245
#define ITM_BLUE_BALLOON 0x2246
@@ -1245,12 +1249,13 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
#define ITM_INSECT37 (ITM_INSECT_START + 37)
#define ITM_INSECT38 (ITM_INSECT_START + 38)
#define ITM_INSECT39 (ITM_INSECT_START + 39)
#define ITM_INSECT_END (ITM_INSECT_START + 40)
#define ITM_SPIRIT0 (ITM_INSECT_START + 40)
#define ITM_SPIRIT1 (ITM_INSECT_START + 41)
#define ITM_SPIRIT2 (ITM_INSECT_START + 42)
#define ITM_SPIRIT3 (ITM_INSECT_START + 43)
#define ITM_SPIRIT4 (ITM_INSECT_START + 44)
#define ITM_INSECT_END (ITM_INSECT_START + 45)
#define ITM_INSECT_ALL_END (ITM_INSECT_START + 45)
#define ITM_HUKUBUKURO_START 0x2E00
#define ITM_HUKUBUKURO_BAG (ITM_HUKUBUKURO_START + 0)
@@ -1326,6 +1331,8 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
#define FTR_CALLIGRAPHY_PAD_WEST 0x313B
#define FTR_AXE 0x3190
#define FTR_BOTTLE_ROCKET 0x31F0
#define FTR_FISHING_TROPHY 0x3210
+1
View File
@@ -18,6 +18,7 @@ extern "C" {
#define mNW_TOTAL_DESIGN_NUM (mNW_CLOTH_DESIGN_NUM + mNW_UMBRELLA_DESIGN_NUM) /* total designs in Able Sisters' */
#define mNW_DESIGN_TEX_SIZE (mNW_ORIGINAL_DESIGN_HEIGHT * (mNW_ORIGINAL_DESIGN_WIDTH / 2)) /* total texture data size */
#define mNW_PALETTE_SIZE (16 * sizeof(u16))
#define mNW_PALETTE_COUNT 16 /* number of design palettes */
enum {
+48 -15
View File
@@ -4,6 +4,7 @@
#include "types.h"
#include "libu64/gfxprint.h"
#include "m_actor_type.h"
#include "m_play_h.h"
#define mRmTp_FTR_UNIT_MAX 4
@@ -68,6 +69,23 @@ enum {
mRmTp_DIRECT_NUM
};
enum {
mRmTp_FTR_SE_NONE,
mRmTp_FTR_SE_SOFT_CHAIR,
mRmTp_FTR_SE_HARD_CHAIR,
mRmTp_FTR_SE_BUBU_CHAIR,
mRmTp_FTR_SE_TOILET_CHAIR,
mRmTp_FTR_SE_NUM
};
enum {
mRmTp_CHAIR_ACTION_SIT,
mRmTp_CHAIR_ACTION_STAND,
mRmTp_CHAIR_ACTION_NUM
};
typedef struct room_type_place_info_one_s {
int exists;
int ut_x;
@@ -125,27 +143,42 @@ enum {
mRmTp_LIGHT_SWITCH_NUM
};
extern int mRmTp_ItemNo2FtrSize(mActor_name_t item_no);
extern int mRmTp_GetFurnitureData(mActor_name_t ftr, int ut_x, int ut_z, mRmTp_FtrPlaceInfoOne_t* place_info);
extern void mRmTp_MakeFtrNoTable(mActor_name_t* dst, mActor_name_t* src);
extern int mRmTp_GetFtrActionSE(int ftr_idx, int mode);
extern u8* mRmTp_CheckFtrBirthInfoTop();
extern int mRmTp_GetFloorIdx();
extern int mRmTp_GetWallIdx();
extern mActor_name_t mRmTp_Item1ItemNo2FtrItemNo_AtPlayerRoom(mActor_name_t item1_no, int no_convert_tools);
extern mActor_name_t mRmTp_FtrItemNo2Item1ItemNo(mActor_name_t ftr_no, int no_convert_tools);
extern void mRmTp_MakeMelodyData();
extern u8* mRmTp_GetMelodyData();
extern void mRmTp_DrawFamicomInfo(gfxprint_t* gfxprint);
extern void mRmTp_MakeFamicom_Fdebug();
extern mActor_name_t mRmTp_FtrItemNo2Item1ItemNo(mActor_name_t ftr_item_no, void* unused); /* second paramter is probably GAME*? */
extern int mRmTp_FtrItemNo2FtrIdx(mActor_name_t ftr_item_no);
extern mActor_name_t mRmTp_FtrIdx2FtrItemNo(int ftr_idx, int rotation);
extern int mRmTp_GetFurnitureData(mActor_name_t ftr, int ut_x, int ut_z, mRmTp_FtrPlaceInfoOne_t* place_info);
extern mActor_name_t mRmTp_GetPlayerRoomCollisionIdx(mActor_name_t field_id, mActor_name_t bg_idx);
extern int mRmTp_FurnitureIdx2FurnitureKind(int ftr_idx);
extern int mRmTp_PleaseDrawLightSwitch();
extern mActor_name_t mRmTp_Item1ItemNo2FtrItemNo_AtPlayerRoom(mActor_name_t item_no, int flag);
extern void mRmTp_SetDefaultLightSwitchData(int state);
extern void mRmTp_CopyWallData(u8* dst, int wall_no);
extern void mRmTp_CopyFloorData(u8* dst, int floor_no);
extern int mRmTp_CheckTalkAble(s16* rot, xyz_t* pos, f32 max_dist, int required_dir, GAME_PLAY* play);
extern int mRmTp_CheckWallIsMyOriginalInThisScene();
extern int mRmTp_CheckFloorIsMyOriginalInThisScene();
extern int mRmTp_GetEntranceBasePosition(xyz_t* pos);
extern mActor_name_t mRmTp_GetPlayerRoomCollisionIdx(mActor_name_t field_name, mActor_name_t bg_name);
extern u8 mRmTp_GetFloorIdx();
extern int mRmTp_GetNowSceneLightSwitchIndex();
extern void mRmTp_IndexLightSwitchOFF(int index);
extern void mRmTp_IndexLightSwitchON(int index);
extern int mRmTp_Index2LightSwitchStatus(int index);
extern int mRmTp_PleaseDrawLightSwitch();
extern int mRmTp_NowSceneLightSwitchON();
extern int mRmTp_IndexLightSwitchON(int switch_index);
extern int mRmTp_NowSceneLightSwitchOFF();
extern void mRmTp_MakeFtrNoTable(mActor_name_t* dst, mActor_name_t* src);
extern u8* mRmTp_CheckFtrBirthInfoTop();
extern int mRmTp_IndexLightSwitchOFF(int switch_index);
extern int mRmTp_Index2LightSwitchStatus(int switch_index);
extern int mRmTp_SetDefaultLightSwitchData(int state);
extern void mRmTp_DecideCottageDefaultLightSwitch();
extern int mRmTp_GetNowSceneOriginalWallStatus();
extern int mRmTp_GetNowSceneOriginalFloorStatus();
extern void mRmTp_SetNowSceneOriginalWallStatus(int enabled);
extern void mRmTp_SetNowSceneOriginalFloorStatus(int enabled);
extern int mRmTp_FtrItemNo2FtrIdx(mActor_name_t ftr_item_no);
extern mActor_name_t mRmTp_FtrIdx2FtrItemNo(int ftr_idx, int direct);
extern int mRmTp_SoundStepWalkSE(xyz_t* wpos);
#endif
+2 -2
View File
@@ -251,7 +251,7 @@ extern void mIN_copy_name_str(u8* dst, mActor_name_t item) {
u8 item_name[mIN_ITEM_NAME_LEN];
u32 itm = item;
mActor_name_t item_no = mRmTp_FtrItemNo2Item1ItemNo(item, NULL);
mActor_name_t item_no = mRmTp_FtrItemNo2Item1ItemNo(item, FALSE);
if (mNT_check_unknown(item_no) == TRUE) {
mem_copy(dst, unknown_item_str, mIN_ITEM_NAME_LEN);
@@ -321,7 +321,7 @@ extern int mIN_get_item_article(mActor_name_t item) {
};
int article = mIN_ARTICLE_NONE;
mActor_name_t item_no = mRmTp_FtrItemNo2Item1ItemNo(item, NULL);
mActor_name_t item_no = mRmTp_FtrItemNo2Item1ItemNo(item, FALSE);
int index = item_no & 0xFF;
switch (ITEM_NAME_GET_TYPE(item_no)) {
+3 -3
View File
@@ -1033,7 +1033,7 @@ extern int mMpswd_check_present_user(mActor_name_t item) {
case NAME_TYPE_FTR1:
{
if (item >= FTR_CLOTH_MANNIQUIN000_SOUTH && item <= FTR_CLOTH_MANNIQUIN254_WEST) {
item = mRmTp_FtrItemNo2Item1ItemNo(item, NULL);
item = mRmTp_FtrItemNo2Item1ItemNo(item, FALSE);
if (
mSP_SearchItemCategoryPriority(item, mSP_KIND_CLOTH, mSP_LISTTYPE_COMMON, NULL) ||
mSP_SearchItemCategoryPriority(item, mSP_KIND_CLOTH, mSP_LISTTYPE_UNCOMMON, NULL) ||
@@ -1043,7 +1043,7 @@ extern int mMpswd_check_present_user(mActor_name_t item) {
}
}
else if (item >= FTR_UMBRELLA00_SOUTH && item <= FTR_UMBRELLA31_WEST) {
price = mSP_ItemNo2ItemPrice(mRmTp_FtrItemNo2Item1ItemNo(item, NULL));
price = mSP_ItemNo2ItemPrice(mRmTp_FtrItemNo2Item1ItemNo(item, FALSE));
}
else if ( // TODO: furniture index values need to be declared in some header file as defines
(mRmTp_FtrItemNo2FtrIdx(item) >= 0x3FC && mRmTp_FtrItemNo2FtrIdx(item) <= 0x403) || // balloons
@@ -1054,7 +1054,7 @@ extern int mMpswd_check_present_user(mActor_name_t item) {
(mRmTp_FtrItemNo2FtrIdx(item) >= 0x463 && mRmTp_FtrItemNo2FtrIdx(item) <= 0x466) // regular tools
) {
/* Convert furniture to their item1 variants */
price = mSP_ItemNo2ItemPrice(mRmTp_FtrItemNo2Item1ItemNo(item, NULL));
price = mSP_ItemNo2ItemPrice(mRmTp_FtrItemNo2Item1ItemNo(item, FALSE));
}
else if (
mSP_SearchItemCategoryPriority(item, mSP_KIND_FURNITURE, mSP_LISTTYPE_COMMON, NULL) ||
+3556
View File
File diff suppressed because it is too large Load Diff
-16
View File
@@ -1,16 +0,0 @@
#include "m_room_type.h"
#include "m_name_table.h"
#define FTR_NO_2_FTR_IDX(f) ((f) >> 2)
#define NUM_FTR_IN_TYPE (FTR_NO_2_FTR_IDX(0x1000))
extern int mRmTp_FtrItemNo2FtrIdx(u16 ftr_no) {
if (ITEM_IS_FTR(ftr_no)) {
if (ITEM_NAME_GET_TYPE(ftr_no) == NAME_TYPE_FTR0) {
return FTR_NO_2_FTR_IDX(ftr_no - FTR0_NO_START);
}
return FTR_NO_2_FTR_IDX(ftr_no - FTR1_NO_START) + NUM_FTR_IN_TYPE;
}
return EMPTY_NO;
}
+1 -1
View File
@@ -745,7 +745,7 @@ extern u32 mSP_ItemNo2ItemPrice(mActor_name_t item_no) {
return year;
}
item_no = mRmTp_FtrItemNo2Item1ItemNo(item_no, NULL);
item_no = mRmTp_FtrItemNo2Item1ItemNo(item_no, FALSE);
if (item_no >= ITM_SHELL0 && item_no <= ITM_SHELL7) {
u32 idx = item_no - ITM_SHELL0;