Implement & link m_mark_room_ovl.c

This commit is contained in:
Cuyler36
2023-10-14 19:34:59 -04:00
parent 666160172d
commit 62b19601d3
9 changed files with 2819 additions and 18 deletions
+5
View File
@@ -428,6 +428,11 @@ m_huusui_room_ovl.c:
.text: [0x804D1BBC, 0x804D2164]
.rodata: [0x80646558, 0x806465C8]
.data: [0x8069C0F0, 0x8069CAF0]
m_mark_room_ovl.c:
.text: [0x804D2164, 0x804D3B24]
.rodata: [0x806465C8, 0x806465D0]
.data: [0x8069CAF0, 0x8069E580]
.bss: [0x81300BD8, 0x813010D0]
m_random_field/mRF_MakePerfectBit.c:
.text: [0x8050B1AC, 0x8050B1D4]
m_random_field/mRF_GetRandomStepMode.c:
+1
View File
@@ -4,6 +4,7 @@
#include "types.h"
#include "m_mail.h"
#include "m_item_name.h"
#include "m_handbill_data.h"
#ifdef __cplusplus
extern "C" {
+17
View File
@@ -0,0 +1,17 @@
#ifndef M_HANDBILL_DATA_H
#define M_HANDBILL_DATA_H
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif
#define mHandbill_HRA_REWARD0 0x221
#define mHandbill_HRA_REWARD1 0x222
#ifdef __cplusplus
}
#endif
#endif
+2 -2
View File
@@ -143,8 +143,8 @@ typedef struct home_flags_s {
u8 has_saved:1; /* whether or not the player has saved at this house before */
u8 hra_member:1; /* whether or not the house has been setup for HRA membership */
u8 has_basement:1; /* set when the basement is built */
u8 bit_4:1; /* unused */
u8 bit_5:1; /* unused */
u8 hra_reward0:1; /* earned 70k HRA points reward */
u8 hra_reward1:1; /* earned 100k HRA points reward */
u8 bit_6:1; /* unused */
u8 bit_7:1; /* unused */
} mHm_flg_c;
+157
View File
@@ -10,6 +10,163 @@ extern "C" {
#endif
#define mMkRm_HINT_NUM 19
#define mMkRm_REWARD0_POINTS 70000
#define mMkRm_REWARD1_POINTS 100000
#define mMkRm_LETTER_BIT_NECESSITIES_COMPLETE (1ull << 0)
#define mMkRm_LETTER_BIT_NECESSITIES_COMPLETE_SAME_SERIES (1ull << 1)
#define mMkRm_LETTER_BIT_BASE_SERIES_FTR_COMPLETE (1ull << 2)
#define mMkRm_LETTER_BIT_BASE_SERIES_WALL_OR_FLOOR_MATCH (1ull << 3)
#define mMkRm_LETTER_BIT_BASE_SERIES_MATCHING_WALL_AND_FLOOR (1ull << 4)
#define mMkRm_LETTER_BIT_THEME_SERIES_WALL_AND_FLOOR_MATCH (1ull << 5)
#define mMkRm_LETTER_BIT_THEME_SERIES_COMPLETE (1ull << 6)
#define mMkRm_LETTER_BIT_THEME_OBSTACLE (1ull << 7)
#define mMkRm_LETTER_BIT_BAD_DIRECTION (1ull << 16)
#define mMkRm_LETTER_BIT_LETS_CLEAN (1ull << 17)
#define mMkRm_LETTER_BIT_SET_SERIES_COMPLETE (1ull << 32)
#define mMkRm_LETTER_BIT_SERIES_STARTED (1ull << 33) // at least 6 items in the theme series exist
#define mMkRm_LETTER_BIT_BASE_SERIES_FTR_ALMOST_COMPLETE (1ull << 34)
#define mMkRm_LETTER_BIT_SERIES_ALMOST_COMPLETE (1ull << 35)
#define mMkRm_EVALUATE_BASE_POINT (1u << 0)
#define mMkRm_EVALUATE_NECESSITY (1u << 1)
#define mMkRm_EVALUATE_BASE_SERIES (1u << 2)
#define mMkRm_EVALUATE_THEME_SERIES (1u << 3)
#define mMkRm_EVALUATE_SET_SERIES (1u << 4)
#define mMkRm_EVALUATE_LUCKY_FTR (1u << 5)
#define mMkRm_EVALUATE_DIRECTION (1u << 6)
#define mMkRm_EVALUATE_LETS_CLEAN (1u << 7)
#define mMkRm_FULL_EVALUATION ( \
mMkRm_EVALUATE_BASE_POINT | mMkRm_EVALUATE_NECESSITY | mMkRm_EVALUATE_BASE_SERIES | \
mMkRm_EVALUATE_THEME_SERIES | mMkRm_EVALUATE_SET_SERIES | mMkRm_EVALUATE_LUCKY_FTR | \
mMkRm_EVALUATE_DIRECTION | mMkRm_EVALUATE_LETS_CLEAN \
)
#define mMkRm_UPPER_EVALUATION ( \
mMkRm_EVALUATE_BASE_POINT | mMkRm_EVALUATE_SET_SERIES | mMkRm_EVALUATE_LUCKY_FTR | \
mMkRm_EVALUATE_DIRECTION | mMkRm_EVALUATE_LETS_CLEAN \
)
#define mMkRm_THEME_OBSTACLE_PENALTY 4000
#define mMkRm_FACING_WALL_PENALTY 800
#define mMkRm_LUCKY_BONUS 777
#define mMkRm_SET_SERIES_COMPLETE_BONUS 3000
#define mMkRm_THEME_SERIES_COMPLETE_FTR_BONUS 7000
#define mMkRm_THEME_SERIES_COMPLETE_BONUS_WALL_OR_FLOOR 10000
#define mMkRm_THEME_SERIES_COMPLETE_BONUS_WALL_AND_FLOOR 15000
#define mMkRm_BASE_SERIES_COMPLETE_FTR_BONUS 48000
#define mMkRm_BASE_SERIES_MATCHING_WALL_OR_FLOOR_BONUS 4800
#define mMkRm_BASE_SERIES_MATCHING_WALL_AND_FLOOR_BONUS 10000
#define mMkRm_NECESSITY_COMPLETE_SAME_SERIES_BONUS 16000
#define mMkRm_NECESSITY_COMPLETE_DIFF_SERIES_BONUS 4400
enum {
mMkRm_SERIES_EXOTIC,
mMkRm_SERIES_LOVELY,
mMkRm_SERIES_CLASSIC,
mMkRm_SERIES_RANCH,
mMkRm_SERIES_CABANA,
mMkRm_SERIES_BLUE,
mMkRm_SERIES_MODERN,
mMkRm_SERIES_REGAL,
mMkRm_SERIES_GREEN,
mMkRm_SERIES_CABIN,
mMkRm_SERIES_SPOOKY,
mMkRm_SERIES_JINGLE,
mMkRm_SERIES_KIDDIE,
mMkRm_SERIES_GARDEN,
mMkRm_SERIES_ROCKGARDEN,
mMkRm_SERIES_JAPANESE,
mMkRm_SERIES_CONSTRUCTION,
mMkRm_SERIES_SPACE,
mMkRm_SERIES_PUBLICBATH,
mMkRm_SERIES_SCHOOL,
mMkRm_SERIES_CHESS,
mMkRm_SERIES_BONSAI,
mMkRm_SERIES_WRITING,
mMkRm_SERIES_VASE,
mMkRm_SERIES_VENDING,
mMkRm_SERIES_NINTENDO,
mMkRm_SERIES_DARUMA,
mMkRm_SERIES_CACTUS,
mMkRm_SERIES_BEAR,
mMkRm_SERIES_FIGURE,
mMkRm_SERIES_TOTEMPOLE,
mMkRm_SERIES_GUITAR,
mMkRm_SERIES_DRUM,
mMkRm_SERIES_STRINGS,
mMkRm_SERIES_OFFICE,
mMkRm_SERIES_TRICERA,
mMkRm_SERIES_TREX,
mMkRm_SERIES_BRONT,
mMkRm_SERIES_STEGO,
mMkRm_SERIES_PTERA,
mMkRm_SERIES_PLESIO, /* HUBATA was a mistranslation of futabasaurus */
mMkRm_SERIES_MAMMOTH,
mMkRm_SERIES_ROBOT,
mMkRm_SERIES_APPLE,
mMkRm_SERIES_CITRUS,
mMkRm_SERIES_MELON,
mMkRm_SERIES_PEAR,
mMkRm_SERIES_LUCKY,
mMkRm_SERIES_PINE,
mMkRm_SERIES_FROGGY,
mMkRm_SERIES_IRIS,
mMkRm_SERIES_TULIP,
mMkRm_SERIES_DAFFODIL,
mMkRm_SERIES_OTHER,
mMkRm_SERIES_SNOWMAN,
mMkRm_SERIES_WESTERN,
mMkRm_SERIES_BACKYARD,
mMkRm_SERIES_HARVEST,
mMkRm_SERIES_BOXING,
mMkRm_SERIES_MARIO,
mMkRm_SERIES_NUM
};
enum {
mMkRm_SERIES_TYPE_ONE,
mMkRm_SERIES_TYPE_BASE,
mMkRm_SERIES_TYPE_THEME,
mMkRm_SERIES_TYPE_SET,
mMkRm_SERIES_TYPE_NUM
};
enum {
mMkRm_NECESSITY_CHAIR,
mMkRm_NECESSITY_DRESSER,
mMkRm_NECESSITY_WARDROBE,
mMkRm_NECESSITY_TABLE,
mMkRm_NECESSITY_BED,
mMkRm_NOT_NECESSITY,
mMkRm_NECESSITY_NUM
};
enum {
mMkRm_SURFACE_TYPE_NONE,
mMkRm_SURFACE_TYPE_SURFACE,
mMkRm_SURFACE_TYPE_PLACEABLE,
mMkRm_SURFACE_TYPE_NUM
};
enum {
mMkRm_LUCK_TYPE_NOT_LUCKY,
mMkRm_LUCK_TYPE_LUCKY,
mMkRm_LUCK_TYPE_NUM
};
enum {
mMkRm_FACE_TYPE_NO_FACE,
mMkRm_FACE_TYPE_HAS_FACE,
mMkRm_FACE_TYPE_NUM
};
extern void mMkRm_ReportChangePlayerRoom();
extern void mMkRm_MarkRoom(GAME* game);
+7 -1
View File
@@ -144,6 +144,8 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
#define IS_ITEM_HANIWA(item) ((item) >= HANIWA_START && (item) <= HANIWA_END)
#define IS_ITEM_DIARY(item) ((item) >= ITM_DIARY_START && (item) <= (ITM_DIARY_END-1))
#define BG_CATEGORY 0
#define ENV_CATEGORY 8
@@ -1115,7 +1117,9 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
#define FTR1_START 0x3000
#define FTR_POST_MODEL 0x3020
#define FTR_HOUSE_MODEL 0x3024
#define FTR_MANOR_MODEL 0x3028
#define FTR_POLICE_MODEL 0x302C
#define FTR_MUSEUM_MODEL 0x3030
#define FTR_ORANGEBOX 0x30F8
@@ -1355,6 +1359,8 @@ extern mActor_name_t bg_item_fg_sub_dig2take_conv(mActor_name_t item);
#define DUMMY_DOUZOU 0xF11D
#define RSV_DOOR 0xFE1B
#define RSV_FE1C 0xFE1C
#define RSV_FE1F 0xFE1F
#define RSV_CLOTH 0xFE20
#define RSV_WALL_NO 0xFFFE /* interior wall item, no collision */
#define RSV_NO 0xFFFF /* reserved space, can't interact but no collision */
+2 -5
View File
@@ -74,10 +74,6 @@ typedef struct room_type_place_info_one_s {
int ut_z;
} mRmTp_FtrPlaceInfoOne_t;
typedef struct room_type_place_info_s {
mRmTp_FtrPlaceInfoOne_t units[mRmTp_FTR_UNIT_MAX];
} mRmTp_FtrPlaceInfo_t;
#define FTR_NUM 1266
#define FTR_GET_ROTATION(f) ((f) & 3)
@@ -135,7 +131,7 @@ 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_FtrPlaceInfo_t* place_info);
extern int mRmTp_GetFurnitureData(mActor_name_t ftr, int ut_x, int ut_z, mRmTp_FtrPlaceInfoOne_t* place_info);
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);
@@ -149,5 +145,6 @@ extern void mRmTp_IndexLightSwitchON(int index);
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);
#endif
+10 -10
View File
@@ -100,7 +100,7 @@ static void mHsRm_EvaluateHuusuiPoint_Single(mActor_name_t ftr, int ut_x, int ut
int huusui_type;
int room_side_tbl[mHsRm_DIRECTION_NUM];
int rotation_tbl[mHsRm_DIRECTION_NUM];
mRmTp_FtrPlaceInfo_t place_info;
mRmTp_FtrPlaceInfoOne_t place_info[mRmTp_FTR_UNIT_MAX];
int ftr_rot;
int has_face;
int start_ut;
@@ -112,7 +112,7 @@ static void mHsRm_EvaluateHuusuiPoint_Single(mActor_name_t ftr, int ut_x, int ut
ftr_rot = FTR_GET_ROTATION(ftr);
huusui_type = mMkRm_ftr_info[ftr_idx].huusui_type;
has_face = mMkRm_ftr_info[ftr_idx].has_face;
ut_value = mHsRm_unit_value[mRmTp_GetFurnitureData(ftr, ut_x, ut_z, &place_info)]; /* number of units occupied by this furniture */
ut_value = mHsRm_unit_value[mRmTp_GetFurnitureData(ftr, ut_x, ut_z, place_info)]; /* number of units occupied by this furniture */
/* maximum top/left position for feng shui */
if (ut_max == mHsRm_UNIT_MAX_S && ut_value == 1) {
@@ -129,32 +129,32 @@ static void mHsRm_EvaluateHuusuiPoint_Single(mActor_name_t ftr, int ut_x, int ut
/* loop through all units occupied by the furniture and check feng shui parameters on each unit */
for (i = 0; i < ut_value; i++) {
if (place_info.units[i].ut_z <= start_ut) {
if (place_info[i].ut_z <= start_ut) {
room_side_tbl[mHsRm_DIRECTION_NORTH]++;
if (place_info.units[i].ut_z <= 1) {
if (place_info[i].ut_z <= 1) {
rotation_tbl[mHsRm_DIRECTION_NORTH]++;
}
}
else if (place_info.units[i].ut_z >= ((ut_max - start_ut) - 1)) {
else if (place_info[i].ut_z >= ((ut_max - start_ut) - 1)) {
room_side_tbl[mHsRm_DIRECTION_SOUTH]++;
if (place_info.units[i].ut_z >= ut_max - 2) {
if (place_info[i].ut_z >= ut_max - 2) {
rotation_tbl[mHsRm_DIRECTION_SOUTH]++;
}
}
if (place_info.units[i].ut_x <= start_ut) {
if (place_info[i].ut_x <= start_ut) {
room_side_tbl[mHsRm_DIRECTION_WEST]++;
if (place_info.units[i].ut_x <= 1) {
if (place_info[i].ut_x <= 1) {
rotation_tbl[mHsRm_DIRECTION_WEST]++;
}
}
else if (place_info.units[i].ut_x >= ((ut_max - start_ut) - 1)) {
else if (place_info[i].ut_x >= ((ut_max - start_ut) - 1)) {
room_side_tbl[mHsRm_DIRECTION_EAST]++;
if (place_info.units[i].ut_x >= ut_max - 2) {
if (place_info[i].ut_x >= ut_max - 2) {
rotation_tbl[mHsRm_DIRECTION_EAST]++;
}
}
File diff suppressed because it is too large Load Diff