mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
Implement & link m_mark_room_ovl.c
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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" {
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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
@@ -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
Reference in New Issue
Block a user