Improve ac_train_door, ac_train_window & rename private

This commit is contained in:
Cuyler36
2024-07-04 17:52:37 -04:00
parent 8ae5a30c9f
commit bfea3513e6
39 changed files with 9460 additions and 10620 deletions
+9 -11
View File
@@ -9,18 +9,17 @@
extern "C" {
#endif
#define aTRD_JOINT_NUM 5
typedef struct traindoor_s {
ACTOR actor_class;
u8 pad [0x17C - 0x174];
cKF_SkeletonInfo_R_c keyframe;
u8 pad2 [0x210 - 0x1ed];
s_xyz work;
u8 pad3 [0x22e - 0x216];
s_xyz target;
u8 pad4[0x24c - 0x234];
int idle;
}TRAINDOOR_ACTOR;
/* 0x000 */ ACTOR actor_class;
/* 0x178 */ u8 pad[0x17C - 0x174];
/* 0x17C */ cKF_SkeletonInfo_R_c keyframe;
/* 0x1EC */ u8 pad2[0x210 - 0x1EC];
/* 0x210 */ s_xyz work[aTRD_JOINT_NUM];
/* 0x22E */ s_xyz target[aTRD_JOINT_NUM];
/* 0x24C */ int open_flag;
} TRAINDOOR_ACTOR;
extern ACTOR_PROFILE TrainDoor_Profile;
@@ -29,4 +28,3 @@ extern ACTOR_PROFILE TrainDoor_Profile;
#endif
#endif
+2 -4
View File
@@ -15,8 +15,7 @@ typedef int (*TRAIN_WINDOW_DRAW_TYPE)(ACTOR*, GAME*);
#define CRV_DEBUG_GREEN_VALUE 89
#define CRV_DEBUG_BLUE_VALUE 90
typedef struct train_window_s{
typedef struct train_window_s {
ACTOR actor_class;
TRAIN_WINDOW_DRAW_TYPE draw_type;
s16 pallete_id;
@@ -34,7 +33,7 @@ typedef struct train_window_s{
f32 scroll_speed;
s_xyz pos;
f32 lod_factor;
}TRAIN_WINDOW_ACTOR;
} TRAIN_WINDOW_ACTOR;
extern ACTOR_PROFILE Train_Window_Profile;
@@ -43,4 +42,3 @@ extern ACTOR_PROFILE Train_Window_Profile;
#endif
#endif
+3
View File
@@ -115,6 +115,9 @@ typedef enum audio_sound_effects {
NA_SE_TOILE_CHAIR_SIT = 0x410,
NA_SE_TRAINDOOR0 = 0x412,
NA_SE_TRAINDOOR1,
NA_SE_BED_IN = 0x415,
NA_SE_BED_NEGAERI,
NA_SE_BED_OUT,
+1 -1
View File
@@ -86,7 +86,7 @@ typedef struct Save_s {
/* 0x00001A */ u16
copy_protect; /* 'unique' value between [1, 65520] used for copy protection (see mCD_get_land_copyProtect) */
/* 0x00001C */ u8 pad_1C[4];
/* 0x000020 */ Private_c private[PLAYER_NUM]; /* player data */
/* 0x000020 */ Private_c private_data[PLAYER_NUM]; /* player data */
/* 0x009120 */ mLd_land_info_c land_info; /* town name & id */
/* 0x00912C */ mNtc_board_post_c noticeboard[mNtc_BOARD_POST_COUNT]; /* noticeboard posts */
/* 0x009CE4 */ u8 pad_9CE4[4];
+2 -2
View File
@@ -21,7 +21,7 @@ extern void flash_rom_and_player_info_clear() {
bzero(save, sizeof(Save));
mFRm_ClearSaveCheckData(Save_GetPointer(save_check));
priv_p = Save_GetPointer(private[0]);
priv_p = Save_GetPointer(private_data[0]);
for (i = 0; i < PLAYER_NUM; i++) {
mPr_ClearPrivateInfo(priv_p);
priv_p++;
@@ -96,7 +96,7 @@ extern void title_action_data_init_start_select(GAME_PLAY* play) {
mCD_LoadLand();
mCPk_InitPak(0);
Common_Set(now_private, Save_GetPointer(private[0]));
Common_Set(now_private, Save_GetPointer(private_data[0]));
Common_Set(player_no, 0);
mTD_rtc_reserve();
+2 -2
View File
@@ -15,7 +15,7 @@
static int aDOU_set_check(int house_no) {
int player_no = mHS_get_pl_no(house_no);
Private_c* priv = Save_GetPointer(private[player_no]);
Private_c* priv = Save_GetPointer(private_data[player_no]);
mHm_hs_c* house = Save_GetPointer(homes[house_no]);
if (mEv_CheckTitleDemo() != 0 && mEv_CheckTitleDemo() != -1 && mEv_CheckTitleDemo() != -9) {
@@ -35,7 +35,7 @@ static int aDOU_get_color(int house_no) {
static int aDOU_get_douzou_type(int house_no) {
int player_no = mHS_get_pl_no(house_no);
Private_c* priv = Save_GetPointer(private[player_no]);
Private_c* priv = Save_GetPointer(private_data[player_no]);
s8 sex = mPr_SEX_MALE;
s8 face = mPr_FACE_TYPE0;
+1 -1
View File
@@ -9,7 +9,7 @@ static int aHNW_set_save_permission() {
if (player_no < PLAYER_NUM) {
int arrange_idx = mHS_get_arrange_idx(player_no);
house = Save_GetPointer(homes[arrange_idx]);
pid = &Save_Get(private[player_no]).player_ID;
pid = &Save_Get(private_data[player_no]).player_ID;
if (mPr_NullCheckPersonalID(pid) != TRUE && mPr_CheckCmpPersonalID(pid, &house->ownerID) == TRUE) {
res = TRUE;
+4 -3
View File
@@ -119,9 +119,10 @@ static void Museum_Fossil_Actor_move(ACTOR* actorx, GAME* game) {
/* If the donator still lives in town we need to copy their name */
if (mMmd_DONATOR_EXISTS(donator)) {
mMsg_Set_free_str(mMsg_Get_base_window_p(), mMsg_FREE_STR0,
Save_Get(private[mMmd_DONATOR_PLR_IDX(donator)]).player_ID.player_name,
PLAYER_NAME_LEN);
mMsg_Set_free_str(
mMsg_Get_base_window_p(), mMsg_FREE_STR0,
Save_Get(private_data[mMmd_DONATOR_PLR_IDX(donator)]).player_ID.player_name,
PLAYER_NAME_LEN);
}
}
+1 -1
View File
@@ -194,7 +194,7 @@ static void Museum_Picture_Actor_move(ACTOR* actorx, GAME* game) {
/* If the donator still lives in town we need to copy their name */
if (mMmd_DONATOR_EXISTS(donator)) {
mMsg_Set_free_str(mMsg_Get_base_window_p(), mMsg_FREE_STR0,
Save_Get(private[mMmd_DONATOR_PLR_IDX(donator)]).player_ID.player_name,
Save_Get(private_data[mMmd_DONATOR_PLR_IDX(donator)]).player_ID.player_name,
PLAYER_NAME_LEN);
}
}
+2 -2
View File
@@ -239,8 +239,8 @@ static void aMHS_actor_draw(ACTOR* actorx, GAME* game) {
gSPSegment(gfx++, G_MWO_SEGMENT_A, obj_myhome_mark_pal);
} else {
int org_idx = door_original & 7;
u16* pal = mNW_PaletteIdx2Palette(Save_Get(private[pl_no]).my_org[org_idx].palette);
u8* tex = Save_Get(private[pl_no]).my_org[org_idx].design.data;
u16* pal = mNW_PaletteIdx2Palette(Save_Get(private_data[pl_no]).my_org[org_idx].palette);
u8* tex = Save_Get(private_data[pl_no]).my_org[org_idx].design.data;
gSPSegment(gfx++, G_MWO_SEGMENT_9, tex);
gSPSegment(gfx++, G_MWO_SEGMENT_A, pal);
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -19,7 +19,7 @@ static int aNRG_set_request_act(NPC_RCN_GUIDE_ACTOR* rcn_guide, u8 act_prio, u8
}
static void aNRG_set_house_master_name(int house_idx) {
mMsg_SET_FREE_STR(mMsg_FREE_STR0, Save_Get(private[mHS_get_pl_no(house_idx)]).player_ID.player_name,
mMsg_SET_FREE_STR(mMsg_FREE_STR0, Save_Get(private_data[mHS_get_pl_no(house_idx)]).player_ID.player_name,
PLAYER_NAME_LEN);
}
+22 -25
View File
@@ -20,72 +20,69 @@ ACTOR_PROFILE TrainDoor_Profile = {
&aTRD_actor_dt,
&aTRD_actor_move,
&aTRD_actor_draw,
NULL
NULL,
};
extern cKF_Skeleton_R_c cKF_bs_r_obj_romtrain_door;
extern cKF_Animation_R_c cKF_ba_r_obj_romtrain_door;
static void aTRD_actor_ct(ACTOR* actor, GAME* game){
static void aTRD_actor_ct(ACTOR* actor, GAME* game) {
TRAINDOOR_ACTOR* traindoor = (TRAINDOOR_ACTOR*)actor;
cKF_SkeletonInfo_R_ct(&traindoor->keyframe, &cKF_bs_r_obj_romtrain_door, NULL, &traindoor->work, &traindoor->target);
cKF_SkeletonInfo_R_init(&traindoor->keyframe,traindoor->keyframe.skeleton, &cKF_ba_r_obj_romtrain_door,1.0f,51.0f,1.0f,
0.0f,0.0f,0,NULL);
cKF_SkeletonInfo_R_ct(&traindoor->keyframe, &cKF_bs_r_obj_romtrain_door, NULL, traindoor->work, traindoor->target);
cKF_SkeletonInfo_R_init(&traindoor->keyframe, traindoor->keyframe.skeleton, &cKF_ba_r_obj_romtrain_door, 1.0f,
51.0f, 1.0f, 0.0f, 0.0f, 0, NULL);
traindoor->keyframe.morph_counter = 0.0f;
cKF_SkeletonInfo_R_play(&traindoor->keyframe);
}
static void aTRD_actor_dt(ACTOR* actor, GAME* game){
static void aTRD_actor_dt(ACTOR* actor, GAME* game) {
TRAINDOOR_ACTOR* traindoor = (TRAINDOOR_ACTOR*)actor;
cKF_SkeletonInfo_R_dt(&traindoor->keyframe);
}
static void aTRD_set_door_SE(ACTOR* actor){
static void aTRD_set_door_SE(ACTOR* actor) {
TRAINDOOR_ACTOR* traindoor = (TRAINDOOR_ACTOR*)actor;
static f32 chk_pat[] = {2.0f, 27.0f};
static u16 se_no[] = {1042, 1043,0, 0,0,0, 0,0,0};
static f32 chk_pat[] = { 2.0f, 27.0f };
static u16 se_no[] = { NA_SE_TRAINDOOR0, NA_SE_TRAINDOOR1 };
int i;
for(i = 0; i < 2; i++){
if(cKF_FrameControl_passCheck_now(&traindoor->keyframe.frame_control,chk_pat[i]) != 0){
for (i = 0; i < 2; i++) {
if (cKF_FrameControl_passCheck_now(&traindoor->keyframe.frame_control, chk_pat[i])) {
sAdo_OngenTrgStart(se_no[i], &traindoor->actor_class.world.position);
return;
break;
}
}
}
static void aTRD_actor_move(ACTOR* actor, GAME* game){
static void aTRD_actor_move(ACTOR* actor, GAME* game) {
TRAINDOOR_ACTOR* traindoor = (TRAINDOOR_ACTOR*)actor;
if(traindoor->idle == 1){
traindoor->idle = 0;
if (traindoor->open_flag == TRUE) {
traindoor->open_flag = FALSE;
traindoor->keyframe.frame_control.speed = 0.5f;
}
if(cKF_SkeletonInfo_R_play(&traindoor->keyframe) == 1){
if (cKF_SkeletonInfo_R_play(&traindoor->keyframe) == cKF_FRAMECONTROL_REPEAT) {
traindoor->keyframe.frame_control.current_frame = traindoor->keyframe.frame_control.start_frame;
traindoor->keyframe.frame_control.speed = 0.0f;
}
aTRD_set_door_SE(actor);
}
static void aTRD_actor_draw(ACTOR* actor, GAME* game){
static void aTRD_actor_draw(ACTOR* actor, GAME* game) {
TRAINDOOR_ACTOR* traindoor = (TRAINDOOR_ACTOR*)actor;
cKF_SkeletonInfo_R_c* keyf = &traindoor->keyframe;
Gfx* mtx;
Mtx* mtxp;
mtx = GRAPH_ALLOC(game->graph, (u32) keyf->skeleton->num_shown_joints * 64);
mtxp = (Mtx*)mtx;
if(mtxp != NULL){
mtxp = GRAPH_ALLOC_TYPE(game->graph, Mtx, (u32)keyf->skeleton->num_shown_joints);
if (mtxp != NULL) {
_texture_z_light_fog_prim(game->graph);
texture_z_light_prim_xlu_disp(game->graph);
cKF_Si3_draw_R_SV(game,keyf, mtxp, NULL,NULL,NULL);
cKF_Si3_draw_R_SV(game, keyf, mtxp, NULL, NULL, NULL);
}
}
}
+286 -352
View File
@@ -7,175 +7,170 @@
#include "m_play.h"
#include "sys_matrix.h"
u16 aTrainWindow_tree_pal_table[15][16]= {
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0545,
0x9885,0xA0C5,
0xAD05,0xBD66,
0xCDE8,0xD2FA,
0xE77C,0xF3BE
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0655,
0x98C5,0xA105,
0xB165,0xC1E6,
0xD268,0xD2FA,
0xE77C,0xF3BE
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0464,
0x90C3,0x9504,
0xA184,0xAA05,
0xB287,0xD2FA,
0xE77C,0xF3BE
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0164,
0x80E5,0x8145,
0x89A4,0x9A60,
0xB300,0xD380,
0xEFE8,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0C37,
0xB086,0xC8A7,
0xE0C7,0xF109,
0xF98C,0xFE10,
0xFF18,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0066,
0x80C9,0x8127,
0x8186,0x8202,
0x82C1,0x9380,
0xCBE8,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0058,
0x80C9,0x80E8,
0x8148,0x81C8,
0x8268,0x9326,
0xC3EB,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0353,
0x8CC2,0x9102,
0x9963,0xA5C4,
0xB242,0xC6E4,
0xDB88,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0564,
0x90C5,0x9924,
0xA984,0xBA03,
0xD2A3,0xE304,
0xEF6A,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0842,
0xA463,0xB4A2,
0xC502,0xD961,
0xE9E1,0xF682,
0xFF26,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0814,
0xB024,0xC044,
0xCC85,0xE0C6,
0xF128,0xFE0B,
0xFEEB,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0734,
0xA484,0xAC83,
0xBCC4,0xD503,
0xE985,0xF629,
0xFF0E,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0635,
0xA085,0xA8C5,
0xB505,0xC566,
0xD5E8,0xEE8A,
0xFF2C,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0545,
0x9885,0xA0C5,
0xAD05,0xBD66,
0xCDE8,0xD2FA,
0xE77C,0xF3BE
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0545,
0x9885,0xA0C5,
0xAD05,0xBD66,
0xCDE8,0xD2FA,
0xE77C,0xF3BE
}
// clang-format off
static u16 aTrainWindow_tree_pal_table[15][16] ATTRIBUTE_ALIGN(32) = {
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0545,
0x9885,0xA0C5,
0xAD05,0xBD66,
0xCDE8,0xD2FA,
0xE77C,0xF3BE
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0655,
0x98C5,0xA105,
0xB165,0xC1E6,
0xD268,0xD2FA,
0xE77C,0xF3BE
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0464,
0x90C3,0x9504,
0xA184,0xAA05,
0xB287,0xD2FA,
0xE77C,0xF3BE
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0164,
0x80E5,0x8145,
0x89A4,0x9A60,
0xB300,0xD380,
0xEFE8,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0C37,
0xB086,0xC8A7,
0xE0C7,0xF109,
0xF98C,0xFE10,
0xFF18,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0066,
0x80C9,0x8127,
0x8186,0x8202,
0x82C1,0x9380,
0xCBE8,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0058,
0x80C9,0x80E8,
0x8148,0x81C8,
0x8268,0x9326,
0xC3EB,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0353,
0x8CC2,0x9102,
0x9963,0xA5C4,
0xB242,0xC6E4,
0xDB88,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0564,
0x90C5,0x9924,
0xA984,0xBA03,
0xD2A3,0xE304,
0xEF6A,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0842,
0xA463,0xB4A2,
0xC502,0xD961,
0xE9E1,0xF682,
0xFF26,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0814,
0xB024,0xC044,
0xCC85,0xE0C6,
0xF128,0xFE0B,
0xFEEB,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0734,
0xA484,0xAC83,
0xBCC4,0xD503,
0xE985,0xF629,
0xFF0E,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0635,
0xA085,0xA8C5,
0xB505,0xC566,
0xD5E8,0xEE8A,
0xFF2C,0x8000
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0545,
0x9885,0xA0C5,
0xAD05,0xBD66,
0xCDE8,0xD2FA,
0xE77C,0xF3BE
},
{
0x0724,0xA443,
0xBCA4,0xDD25,
0xF5E7,0xF209,
0xFECD,0x0545,
0x9885,0xA0C5,
0xAD05,0xBD66,
0xCDE8,0xD2FA,
0xE77C,0xF3BE
},
};
// clang-format on
EVW_ANIME_SCROLL aTrainWindow_out_cloud = {
0, -2,
64, 64
};
static EVW_ANIME_SCROLL aTrainWindow_out_cloud = { 0, -2, 64, 64 };
EVW_ANIME_DATA aTrainWindow_evw_anime_data = {
-2, EVW_ANIME_TYPE_SCROLL1, &aTrainWindow_out_cloud
};
static EVW_ANIME_DATA aTrainWindow_evw_anime_data = { -2, EVW_ANIME_TYPE_SCROLL1, &aTrainWindow_out_cloud };
static void Train_Window_Actor_ct(ACTOR*, GAME*);
static void Train_Window_Actor_dt(ACTOR*, GAME*);
static void Train_Window_Actor_move(ACTOR*, GAME*);
static void Train_Window_Actor_draw(ACTOR*, GAME*);
ACTOR_PROFILE Train_Window_Profile = {
mAc_PROFILE_TRAIN_WINDOW,
ACTOR_PART_ITEM,
@@ -187,10 +182,9 @@ ACTOR_PROFILE Train_Window_Profile = {
&Train_Window_Actor_dt,
&Train_Window_Actor_move,
&Train_Window_Actor_draw,
NULL
NULL,
};
static int aTrainWindow_NoDraw(ACTOR*, GAME*);
static int aTrainWindow_DrawGoneOutTunnel(ACTOR*, GAME*);
static int aTrainWindow_DrawInTunnel(ACTOR*, GAME*);
@@ -201,83 +195,37 @@ extern Gfx rom_train_out_bgcloud_modelT[];
extern Gfx rom_train_out_bgtree_modelT[];
extern Gfx rom_train_out_shineglass_modelT[];
static int aTrainWindow_GetTreePalletIdx(){
static int aTrainWindow_GetTreePalletIdx() {
static u8 till_data[15][2] = {
{
0x02,0x03
},
{
0x02,0x11
},
{
0x02,0x18
},
{
0x04,0x03
},
{
0x04,0x08
},
{
0x07,0x16
},
{
0x09,0x0F
},
{
0x0A,0x05
},
{
0x0A,0x17
},
{
0x0B,0x07
},
{
0x0B,0x0E
},
{
0x0B,0x1C
},
{
0x0C,0x0A
},
{
0x0C,0x11
},
{
0x0C,0x1F
}
{ 0x02, 0x03 }, { 0x02, 0x11 }, { 0x02, 0x18 }, { 0x04, 0x03 }, { 0x04, 0x08 },
{ 0x07, 0x16 }, { 0x09, 0x0F }, { 0x0A, 0x05 }, { 0x0A, 0x17 }, { 0x0B, 0x07 },
{ 0x0B, 0x0E }, { 0x0B, 0x1C }, { 0x0C, 0x0A }, { 0x0C, 0x11 }, { 0x0C, 0x1F },
};
int i;
lbRTC_month_t month = Common_Get(time.rtc_time.month);
lbRTC_day_t day = Common_Get(time.rtc_time.day);
for(i = 0; i < 15; i++){
for (i = 0; i < 15; i++) {
if (month < till_data[i][0]) {
return i;
}
if (month == till_data[i][0] && day <= till_data[i][1]) {
return i;
}
}
return 0;
}
static void Train_Window_Actor_ct(ACTOR* actor, GAME* game) {
TRAIN_WINDOW_ACTOR* window = (TRAIN_WINDOW_ACTOR*)actor;
static void Train_Window_Actor_ct(ACTOR* actor, GAME* game){
TRAIN_WINDOW_ACTOR* window = (TRAIN_WINDOW_ACTOR* )actor;
switch(Save_Get(scene_no)){
case 49:
case 15:
window->draw_type = aTrainWindow_NoDraw;
switch (Save_Get(scene_no)) {
case SCENE_START_DEMO:
case SCENE_START_DEMO3:
window->draw_type = &aTrainWindow_NoDraw;
window->Single_Scrollx = 0;
window->Single_Scrolly = 0;
window->Two_Scrollx1 = 0;
@@ -285,10 +233,10 @@ static void Train_Window_Actor_ct(ACTOR* actor, GAME* game){
window->Two_Scrollx2 = 0;
window->Two_Scrolly2 = 0;
window->scroll_speed = 0.07f;
break;
break;
case 16:
window->draw_type = aTrainWindow_DrawGoneOutTunnel;
case SCENE_START_DEMO2:
window->draw_type = &aTrainWindow_DrawGoneOutTunnel;
window->Single_Scrollx = 1000;
window->Single_Scrolly = 0;
window->Two_Scrollx1 = 1000;
@@ -296,7 +244,7 @@ static void Train_Window_Actor_ct(ACTOR* actor, GAME* game){
window->Two_Scrollx2 = 0;
window->Two_Scrolly2 = 0;
window->scroll_speed = 1.0f;
break;
break;
}
window->pallete_id = aTrainWindow_GetTreePalletIdx();
window->current_pallete = aTrainWindow_tree_pal_table[window->pallete_id];
@@ -304,72 +252,66 @@ static void Train_Window_Actor_ct(ACTOR* actor, GAME* game){
window->TreeScrolly = 0;
window->pos.x = 0;
window->pos.y = 0;
window->pos.z = 0;
window->pos.z = 0;
window->xlu_alpha = 254.0f;
}
static void Train_Window_Actor_dt(ACTOR* actor, GAME* game){
static void Train_Window_Actor_dt(ACTOR* actor, GAME* game) {
}
static u8 aTW_GetNowAlpha(){
if((Common_Get(time.now_sec) >= 14400) && (Common_Get(time.now_sec) < 72000)){
if(Common_Get(time.now_sec) < 43200){
static u8 aTW_GetNowAlpha() {
if ((Common_Get(time.now_sec) >= 14400) && (Common_Get(time.now_sec) < 72000)) {
if (Common_Get(time.now_sec) < 43200) {
return 255.0f * ((f32)(Common_Get(time.now_sec) - 14400) / 28800.0f);
}
return 255.0f * (1.0f - ((f32)(Common_Get(time.now_sec) - 43200) / 28800.0f));
}
else if(Common_Get(time.now_sec) < 14400) {
} else if (Common_Get(time.now_sec) < 14400) {
return 200.0f * (1.0f - (0.5f + ((f32)Common_Get(time.now_sec) / 28800.0f)));
}
else{
return 200.0f * ((f32)Common_Get(time.now_sec - 72000) / 28800.0f);
} else {
return 200.0f * ((f32)Common_Get(time.now_sec - 72000) / 28800.0f);
}
}
static void Train_Window_Actor_move(ACTOR* actor, GAME* game){
TRAIN_WINDOW_ACTOR* window = (TRAIN_WINDOW_ACTOR* )actor;
static void Train_Window_Actor_move(ACTOR* actor, GAME* game) {
TRAIN_WINDOW_ACTOR* window = (TRAIN_WINDOW_ACTOR*)actor;
f32 alpha;
window->TreeScrollx += 5;
add_calc(&window->xlu_alpha, aTW_GetNowAlpha(), window->scroll_speed, 50.0f, 1.0f);
if((Common_Get(time.now_sec) < 14400) || (Common_Get(time.now_sec) >= 72000)){
if ((Common_Get(time.now_sec) < 14400) || (Common_Get(time.now_sec) >= 72000)) {
alpha = 0.0f;
}
else if(Common_Get(time.now_sec) >= 43200){
} else if (Common_Get(time.now_sec) >= 43200) {
alpha = 160.0f + (-160.0f * ((f32)(Common_Get(time.now_sec) - 43200) / 28800.0f));
}
else{
alpha = 160.0f * ((f32)(Common_Get(time.now_sec) -14400) / 28800.0f);
} else {
alpha = 160.0f * ((f32)(Common_Get(time.now_sec) - 14400) / 28800.0f);
}
add_calc(&window->lod_factor, alpha, 0.3f, 50.0f, 1.0f);
}
static int aTrainWindow_OperateScrollLimit(int a, int b, int c){
b >>= 1;
if(b != 0){
if(b > 0){
if(a+b > c){
static int aTrainWindow_OperateScrollLimit(int a, int b, int c) {
b >>= 1;
if (b != 0) {
if (b > 0) {
if (a + b > c) {
return c;
}
return a+b;
return a + b;
}
if(b >= 0){
return a;
if (b >= 0) {
return a;
}
if(a+b < c){
if (a + b < c) {
return c;
}
return a+b;
return a + b;
}
return a;
}
static Gfx* aTrainWindow_TileScroll(u32* x, u32* y, int xamt,int yamt, int xend, int yend,
int width, int height, GRAPH** graph){
static Gfx* aTrainWindow_TileScroll(u32* x, u32* y, int xamt, int yamt, int xend, int yend, int width, int height,
GRAPH** graph) {
*x = aTrainWindow_OperateScrollLimit(*x, xamt, xend);
*y = aTrainWindow_OperateScrollLimit(*y, yamt, yend);
@@ -377,9 +319,9 @@ int width, int height, GRAPH** graph){
return tex_scroll2(*graph, *x, *y, width, height);
}
static Gfx* aTrainWindow_TileScroll2(u32* x1, u32* y1, int x1amt, int y1amt, int x1end, int y1end, int width1, int height1,
u32* x2, u32* y2, int x2amt, int y2amt, int x2end, int y2end, int width2, int height2, GRAPH** graph){
static Gfx* aTrainWindow_TileScroll2(u32* x1, u32* y1, int x1amt, int y1amt, int x1end, int y1end, int width1,
int height1, u32* x2, u32* y2, int x2amt, int y2amt, int x2end, int y2end,
int width2, int height2, GRAPH** graph) {
*x1 = aTrainWindow_OperateScrollLimit(*x1, x1amt, x1end);
*y1 = aTrainWindow_OperateScrollLimit(*y1, y1amt, y1end);
@@ -389,22 +331,20 @@ u32* x2, u32* y2, int x2amt, int y2amt, int x2end, int y2end, int width2, int he
return two_tex_scroll(*graph, 0, *x1, *y1, width1, height1, 1, *x2, *y2, width2, height2);
}
static int aTrainWindow_DrawGoneOutTunnel(ACTOR* actor, GAME* game){
TRAIN_WINDOW_ACTOR* window = (TRAIN_WINDOW_ACTOR* )actor;
static int aTrainWindow_DrawGoneOutTunnel(ACTOR* actor, GAME* game) {
TRAIN_WINDOW_ACTOR* window = (TRAIN_WINDOW_ACTOR*)actor;
GRAPH** graph = &game->graph;
Gfx* ssc;
Gfx* tsc;
ssc = aTrainWindow_TileScroll(&window->Single_Scrollx,&window->Single_Scrolly,
0,0,1000,0, 64, 32, graph);
tsc = aTrainWindow_TileScroll2(&window->Two_Scrollx1, &window->Two_Scrolly1, 0,0,1000, 0, 64, 8,
&window->Two_Scrollx2, &window->Two_Scrolly2, 0,0,0,0,16,16,graph);
if((ssc == NULL) || (tsc == NULL)){
ssc = aTrainWindow_TileScroll(&window->Single_Scrollx, &window->Single_Scrolly, 0, 0, 1000, 0, 64, 32, graph);
tsc = aTrainWindow_TileScroll2(&window->Two_Scrollx1, &window->Two_Scrolly1, 0, 0, 1000, 0, 64, 8,
&window->Two_Scrollx2, &window->Two_Scrolly2, 0, 0, 0, 0, 16, 16, graph);
if ((ssc == NULL) || (tsc == NULL)) {
return 0;
}
else{
} else {
OPEN_DISP(*graph);
gSPSegment(NOW_POLY_OPA_DISP++, 11, ssc);
@@ -412,7 +352,7 @@ static int aTrainWindow_DrawGoneOutTunnel(ACTOR* actor, GAME* game){
gSPSegment(NOW_POLY_OPA_DISP++, 12, tsc);
gSPSegment(NOW_POLY_XLU_DISP++, 12, tsc);
CLOSE_DISP(*graph);
return 1;
@@ -420,21 +360,19 @@ static int aTrainWindow_DrawGoneOutTunnel(ACTOR* actor, GAME* game){
}
static int aTrainWindow_DrawGoingOutTunnel(ACTOR* actor, GAME* game) {
TRAIN_WINDOW_ACTOR* window = (TRAIN_WINDOW_ACTOR* )actor;
TRAIN_WINDOW_ACTOR* window = (TRAIN_WINDOW_ACTOR*)actor;
Gfx* tsc;
Gfx* ssc;
GRAPH** graph = &game->graph;
ssc = aTrainWindow_TileScroll(&window->Single_Scrollx,&window->Single_Scrolly,
30,0,1000,0, 64, 32, graph);
tsc = aTrainWindow_TileScroll2(&window->Two_Scrollx1, &window->Two_Scrolly1, 30,0,1000, 0, 64, 8,
&window->Two_Scrollx2, &window->Two_Scrolly2, 0,0,0,0,16,16,graph);
if((ssc == NULL) || (tsc == NULL)){
ssc = aTrainWindow_TileScroll(&window->Single_Scrollx, &window->Single_Scrolly, 30, 0, 1000, 0, 64, 32, graph);
tsc = aTrainWindow_TileScroll2(&window->Two_Scrollx1, &window->Two_Scrolly1, 30, 0, 1000, 0, 64, 8,
&window->Two_Scrollx2, &window->Two_Scrolly2, 0, 0, 0, 0, 16, 16, graph);
if ((ssc == NULL) || (tsc == NULL)) {
return 0;
}
else{
} else {
OPEN_DISP(*graph);
gSPSegment(NOW_POLY_OPA_DISP++, 11, ssc);
@@ -442,10 +380,10 @@ static int aTrainWindow_DrawGoingOutTunnel(ACTOR* actor, GAME* game) {
gSPSegment(NOW_POLY_OPA_DISP++, 12, tsc);
gSPSegment(NOW_POLY_XLU_DISP++, 12, tsc);
CLOSE_DISP(*graph);
if(((int)window->Single_Scrollx == 1000) && ((int)window->Two_Scrollx1 == 1000)){
if (((int)window->Single_Scrollx == 1000) && ((int)window->Two_Scrollx1 == 1000)) {
window->draw_type = aTrainWindow_DrawGoneOutTunnel;
window->pallete_id = aTrainWindow_GetTreePalletIdx();
window->current_pallete = aTrainWindow_tree_pal_table[window->pallete_id];
@@ -455,28 +393,26 @@ static int aTrainWindow_DrawGoingOutTunnel(ACTOR* actor, GAME* game) {
}
}
static int aTrainWindow_NoDraw(ACTOR* actor, GAME* game){
TRAIN_WINDOW_ACTOR* window = (TRAIN_WINDOW_ACTOR* )actor;
static int aTrainWindow_NoDraw(ACTOR* actor, GAME* game) {
TRAIN_WINDOW_ACTOR* window = (TRAIN_WINDOW_ACTOR*)actor;
window->draw_type = aTrainWindow_DrawInTunnel;
return 0;
}
static int aTrainWindow_DrawInTunnel(ACTOR* actor, GAME* game){
TRAIN_WINDOW_ACTOR* window = (TRAIN_WINDOW_ACTOR* )actor;
static int aTrainWindow_DrawInTunnel(ACTOR* actor, GAME* game) {
TRAIN_WINDOW_ACTOR* window = (TRAIN_WINDOW_ACTOR*)actor;
Gfx* tsc;
Gfx* ssc;
GRAPH** graph = &game->graph;
ssc = aTrainWindow_TileScroll(&window->Single_Scrollx,&window->Single_Scrolly,
0,0,1000,0, 64, 32, graph);
tsc = aTrainWindow_TileScroll2(&window->Two_Scrollx1, &window->Two_Scrolly1, 0,0,1000, 0, 64, 8,
&window->Two_Scrollx2, &window->Two_Scrolly2, 0,0,0,0,16,16,graph);
if((ssc == NULL) || (tsc == NULL)){
ssc = aTrainWindow_TileScroll(&window->Single_Scrollx, &window->Single_Scrolly, 0, 0, 1000, 0, 64, 32, graph);
tsc = aTrainWindow_TileScroll2(&window->Two_Scrollx1, &window->Two_Scrolly1, 0, 0, 1000, 0, 64, 8,
&window->Two_Scrollx2, &window->Two_Scrolly2, 0, 0, 0, 0, 16, 16, graph);
if ((ssc == NULL) || (tsc == NULL)) {
return 0;
}
else{
} else {
OPEN_DISP(*graph);
gSPSegment(NOW_POLY_OPA_DISP++, 11, ssc);
@@ -484,96 +420,94 @@ static int aTrainWindow_DrawInTunnel(ACTOR* actor, GAME* game){
gSPSegment(NOW_POLY_OPA_DISP++, 12, tsc);
gSPSegment(NOW_POLY_XLU_DISP++, 12, tsc);
CLOSE_DISP(*graph);
if(Common_Get(sunlight_flag) != 0){
if (Common_Get(sunlight_flag) != 0) {
window->pallete_id = aTrainWindow_GetTreePalletIdx();
window->current_pallete = aTrainWindow_tree_pal_table[window->pallete_id];
window->draw_type = aTrainWindow_DrawGoingOutTunnel;
}
return 1;
}
}
static void aTrainWindow_SetLightPrimColorDetail(GAME* game, u32 r, u32 g, u32 b, int l, int poly_a, int xlu_a){
static void aTrainWindow_SetLightPrimColorDetail(GAME* game, u32 r, u32 g, u32 b, int l, int poly_a, int xlu_a) {
GAME_PLAY* play = (GAME_PLAY*)game;
int i;
int current_color;
u8 color[3];
GRAPH* graph;
for(i = 0; i < 3; i++){
for (i = 0; i < 3; i++) {
current_color = play->global_light.ambientColor[i] + play->kankyo.base_light.sun_color[i];
switch(i){
switch (i) {
case 0:
current_color += r;
break;
break;
case 1:
current_color += g;
break;
break;
case 2:
current_color += b;
break;
break;
}
if(current_color < 0){
if (current_color < 0) {
current_color = 0;
}else if(current_color >= 256){
} else if (current_color >= 256) {
current_color = 255;
}
color[i] = current_color;
}
if(l < 0){
if (l < 0) {
l = 0;
}else if(l > 255){
} else if (l > 255) {
l = 255;
}
if(poly_a < 0){
if (poly_a < 0) {
poly_a = 0;
}else if(poly_a > 255){
} else if (poly_a > 255) {
poly_a = 255;
}
if(xlu_a < 0){
if (xlu_a < 0) {
xlu_a = 0;
}else if(xlu_a > 255){
} else if (xlu_a > 255) {
xlu_a = 255;
}
graph = play->game.graph;
OPEN_DISP(graph);
OPEN_DISP(graph);
gDPSetPrimColor(NOW_POLY_OPA_DISP++, 0, l, color[0], color[1], color[2], poly_a);
gDPSetPrimColor(NOW_POLY_XLU_DISP++, 0, l, color[0], color[1], color[2], xlu_a);
gDPSetPrimColor(NOW_POLY_XLU_DISP++, 0, l, color[0], color[1], color[2], xlu_a);
CLOSE_DISP(graph);
}
static void aTrainWindow_SetTreeTextureScroll(ACTOR* actor, GAME* game){
TRAIN_WINDOW_ACTOR* window = (TRAIN_WINDOW_ACTOR* )actor;
static void aTrainWindow_SetTreeTextureScroll(ACTOR* actor, GAME* game) {
TRAIN_WINDOW_ACTOR* window = (TRAIN_WINDOW_ACTOR*)actor;
Gfx* tree;
GRAPH** graph = &game->graph;
tree = tex_scroll2(*graph, window->TreeScrollx, window->TreeScrolly, 128, 32);
OPEN_DISP(*graph);
OPEN_DISP(*graph);
gSPSegment(NOW_POLY_OPA_DISP++, 8, tree);
gSPSegment(NOW_POLY_XLU_DISP++, 8, tree);
gSPSegment(NOW_POLY_OPA_DISP++,8, tree);
gSPSegment(NOW_POLY_XLU_DISP++,8, tree);
CLOSE_DISP(*graph);
}
static void Train_Window_Actor_draw(ACTOR* actor, GAME* game){
static void Train_Window_Actor_draw(ACTOR* actor, GAME* game) {
GAME_PLAY* play = (GAME_PLAY*)game;
TRAIN_WINDOW_ACTOR* window = (TRAIN_WINDOW_ACTOR* )actor;
TRAIN_WINDOW_ACTOR* window = (TRAIN_WINDOW_ACTOR*)actor;
GRAPH* graph = game->graph;
Matrix_translate(0.0f,0.0f,0.0f,FALSE);
Matrix_translate(0.0f, 0.0f, 0.0f, FALSE);
Matrix_scale(0.05f, 0.05f, 0.05f, TRUE);
OPEN_DISP(graph);
gSPMatrix(NOW_POLY_OPA_DISP++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
@@ -582,23 +516,23 @@ static void Train_Window_Actor_draw(ACTOR* actor, GAME* game){
_texture_z_light_fog_prim(game->graph);
_texture_z_light_fog_prim_xlu(game->graph);
if(window->draw_type(actor,game) != 0){
aTrainWindow_SetLightPrimColorDetail(game, 0,0,0,127,255,(u8)window->xlu_alpha);
gSPSegment(NOW_POLY_XLU_DISP++,10, window->current_pallete);
Evw_Anime_Set(play, &aTrainWindow_evw_anime_data);
aTrainWindow_SetLightPrimColorDetail(game,0,0,0,43,255,window->xlu_alpha);
gSPDisplayList(NOW_POLY_OPA_DISP++,rom_train_out_tunnel_model);
aTrainWindow_SetLightPrimColorDetail(game,0,0,0,127,255,window->xlu_alpha);
gSPDisplayList(NOW_POLY_OPA_DISP++,rom_train_out_bgsky_model);
aTrainWindow_SetLightPrimColorDetail(game,0,0,0,127,255,window->xlu_alpha);
gSPDisplayList(NOW_POLY_XLU_DISP++,rom_train_out_bgcloud_modelT);
if (window->draw_type(actor, game) != 0) {
aTrainWindow_SetLightPrimColorDetail(game, 0, 0, 0, 127, 255, (u8)window->xlu_alpha);
gSPSegment(NOW_POLY_XLU_DISP++, 10, window->current_pallete);
Evw_Anime_Set(play, &aTrainWindow_evw_anime_data);
aTrainWindow_SetLightPrimColorDetail(game, 0, 0, 0, 43, 255, window->xlu_alpha);
gSPDisplayList(NOW_POLY_OPA_DISP++, rom_train_out_tunnel_model);
aTrainWindow_SetLightPrimColorDetail(game, 0, 0, 0, 127, 255, window->xlu_alpha);
gSPDisplayList(NOW_POLY_OPA_DISP++, rom_train_out_bgsky_model);
aTrainWindow_SetLightPrimColorDetail(game, 0, 0, 0, 127, 255, window->xlu_alpha);
gSPDisplayList(NOW_POLY_XLU_DISP++, rom_train_out_bgcloud_modelT);
aTrainWindow_SetTreeTextureScroll(actor, game);
aTrainWindow_SetLightPrimColorDetail(game, GETREG(CRV, CRV_DEBUG_RED_VALUE) -80 ,GETREG(CRV, CRV_DEBUG_GREEN_VALUE) -70 ,GETREG(CRV, CRV_DEBUG_BLUE_VALUE) -160, GETREG(CRV,CRV_DEBUG_LOD_VALUE) + 27,255, window->xlu_alpha);
gSPDisplayList(NOW_POLY_XLU_DISP++,rom_train_out_bgtree_modelT);
aTrainWindow_SetLightPrimColorDetail(game,0,0,0,window->lod_factor,255,window->xlu_alpha);
gSPDisplayList(NOW_POLY_XLU_DISP++,rom_train_out_shineglass_modelT);
aTrainWindow_SetLightPrimColorDetail(
game, GETREG(CRV, CRV_DEBUG_RED_VALUE) - 80, GETREG(CRV, CRV_DEBUG_GREEN_VALUE) - 70,
GETREG(CRV, CRV_DEBUG_BLUE_VALUE) - 160, GETREG(CRV, CRV_DEBUG_LOD_VALUE) + 27, 255, window->xlu_alpha);
gSPDisplayList(NOW_POLY_XLU_DISP++, rom_train_out_bgtree_modelT);
aTrainWindow_SetLightPrimColorDetail(game, 0, 0, 0, window->lod_factor, 255, window->xlu_alpha);
gSPDisplayList(NOW_POLY_XLU_DISP++, rom_train_out_shineglass_modelT);
}
CLOSE_DISP(graph);
}
}
+2 -2
View File
@@ -27,8 +27,8 @@ static void aMyfmanekin_dma(mActor_name_t ftr_name, u8* data) {
int player_no = mHS_get_pl_no(house_no);
u32 manekin_no = ((ftr_name - FTR_CLOTH_MANNIQUIN_MY_ORIGINAL0) >> 2);
mNW_CopyOriginalTexture(data, &Save_Get(private[player_no]).my_org[manekin_no & 7]);
mNW_CopyOriginalPalette(data + mNW_DESIGN_TEX_SIZE, &Save_Get(private[player_no]).my_org[manekin_no & 7]);
mNW_CopyOriginalTexture(data, &Save_Get(private_data[player_no]).my_org[manekin_no & 7]);
mNW_CopyOriginalPalette(data + mNW_DESIGN_TEX_SIZE, &Save_Get(private_data[player_no]).my_org[manekin_no & 7]);
}
static aFTR_vtable_c aMyfmanekin_func = {
+2 -2
View File
@@ -27,8 +27,8 @@ static void aMFU_dma(mActor_name_t ftr_name, u8* data) {
int player_no = mHS_get_pl_no(house_no);
u32 manekin_no = ((ftr_name - FTR_MYUMBRELLA_START) >> 2);
mNW_CopyOriginalTexture(data, &Save_Get(private[player_no]).my_org[manekin_no & 7]);
mNW_CopyOriginalPalette(data + mNW_DESIGN_TEX_SIZE, &Save_Get(private[player_no]).my_org[manekin_no & 7]);
mNW_CopyOriginalTexture(data, &Save_Get(private_data[player_no]).my_org[manekin_no & 7]);
mNW_CopyOriginalPalette(data + mNW_DESIGN_TEX_SIZE, &Save_Get(private_data[player_no]).my_org[manekin_no & 7]);
}
static aFTR_vtable_c aMFU_func = {
+1 -1
View File
@@ -2499,7 +2499,7 @@ static void mAGrw_SpoilAllPossession(int spoil_kabu) {
int k;
if (spoil_kabu == TRUE) {
priv = Save_Get(private);
priv = Save_Get(private_data);
for (i = 0; i < PLAYER_NUM; i++) {
mAGrw_SpoilPossession(priv->inventory.pockets, mPr_POCKETS_SLOT_COUNT);
+293 -320
View File
@@ -4,387 +4,360 @@
#include "m_common_data.h"
static void mCD_calendar_clear_interval(mCD_player_calendar_c* calendar, int interval) {
u8 months[lbRTC_MONTHS_MAX];
int i;
u8 months[lbRTC_MONTHS_MAX];
int i;
for (i = 0; i < lbRTC_MONTHS_MAX; i++) {
months[i] = 0;
}
for (i = 0; i < interval; i++) {
months[(calendar->month + i) % lbRTC_MONTHS_MAX] = 1;
}
for (i = 0; i > interval; i--) {
months[(calendar->month + (lbRTC_MONTHS_MAX - 1) + i) % lbRTC_MONTHS_MAX] = 1;
}
for (i = 0; i < lbRTC_MONTHS_MAX; i++) {
if (months[i] == 1) {
calendar->played_days[i] = 0;
calendar->event_days[i] = 0;
for (i = 0; i < lbRTC_MONTHS_MAX; i++) {
months[i] = 0;
}
}
if (months[lbRTC_JUNE - 1] == 1) {
calendar->event_flags &= ~mCD_FLAG_MOTHERS_DAY; // 1
}
for (i = 0; i < interval; i++) {
months[(calendar->month + i) % lbRTC_MONTHS_MAX] = 1;
}
if (months[lbRTC_JULY - 1] == 1) {
calendar->event_flags &= ~mCD_FLAG_TOWN_DAY; // 2
}
for (i = 0; i > interval; i--) {
months[(calendar->month + (lbRTC_MONTHS_MAX - 1) + i) % lbRTC_MONTHS_MAX] = 1;
}
if (months[lbRTC_AUGUST - 1] == 1) {
calendar->event_flags &= ~(mCD_FLAG_METEOR_SHOWER | mCD_FLAG_FOUNDERS_DAY); // 12 (4 | 8)
}
for (i = 0; i < lbRTC_MONTHS_MAX; i++) {
if (months[i] == 1) {
calendar->played_days[i] = 0;
calendar->event_days[i] = 0;
}
}
if (months[lbRTC_SEPTEMBER - 1] == 1) {
calendar->event_flags &= ~mCD_FLAG_HARVEST_MOON_9; // 16
}
if (months[lbRTC_JUNE - 1] == 1) {
calendar->event_flags &= ~mCD_FLAG_MOTHERS_DAY; // 1
}
if (months[lbRTC_OCTOBER - 1] == 1) {
calendar->event_flags &= ~mCD_FLAG_HARVEST_MOON_10; // 32
}
if (months[lbRTC_JULY - 1] == 1) {
calendar->event_flags &= ~mCD_FLAG_TOWN_DAY; // 2
}
if (months[lbRTC_NOVEMBER - 1] == 1) {
calendar->event_flags &= ~mCD_FLAG_OFFICERS_DAY; // 64
}
if (months[lbRTC_AUGUST - 1] == 1) {
calendar->event_flags &= ~(mCD_FLAG_METEOR_SHOWER | mCD_FLAG_FOUNDERS_DAY); // 12 (4 | 8)
}
if (months[lbRTC_SEPTEMBER - 1] == 1) {
calendar->event_flags &= ~mCD_FLAG_HARVEST_MOON_9; // 16
}
if (months[lbRTC_OCTOBER - 1] == 1) {
calendar->event_flags &= ~mCD_FLAG_HARVEST_MOON_10; // 32
}
if (months[lbRTC_NOVEMBER - 1] == 1) {
calendar->event_flags &= ~mCD_FLAG_OFFICERS_DAY; // 64
}
}
static void mCD_calendar_clear_day(mCD_player_calendar_c* calendar, lbRTC_year_t year, lbRTC_month_t month, lbRTC_day_t day) {
lbRTC_day_t days = lbRTC_GetDaysByMonth(year, month);
int i;
static void mCD_calendar_clear_day(mCD_player_calendar_c* calendar, lbRTC_year_t year, lbRTC_month_t month,
lbRTC_day_t day) {
lbRTC_day_t days = lbRTC_GetDaysByMonth(year, month);
int i;
if (days != day) {
u32 days_bitfield = 0;
for (i = day; i < 31; i++) {
days_bitfield |= (1 << i);
if (days != day) {
u32 days_bitfield = 0;
for (i = day; i < 31; i++) {
days_bitfield |= (1 << i);
}
calendar->played_days[month - 1] &= ~days_bitfield;
calendar->event_days[month - 1] &= ~days_bitfield;
switch (month) {
case lbRTC_JUNE: {
lbRTC_weekday_t weekday = lbRTC_Week(year, month, day + 1);
/* Calculate the current week and verify it's not the last week */
if ((day - weekday) / lbRTC_WEEK + 1 < 3) {
calendar->event_flags &= ~mCD_FLAG_MOTHERS_DAY;
}
break;
}
case lbRTC_JULY: {
if (day < Save_Get(town_day)) {
calendar->event_flags &= ~mCD_FLAG_TOWN_DAY;
}
break;
}
case lbRTC_AUGUST: {
if (day < 12) {
calendar->event_flags &= ~mCD_FLAG_METEOR_SHOWER;
}
if (day < 21) {
calendar->event_flags &= ~mCD_FLAG_FOUNDERS_DAY;
}
break;
}
case lbRTC_SEPTEMBER: {
lbRTC_ymd_c harvest_moon_day;
lbRk_HarvestMoonDay(&harvest_moon_day, year);
if (month == harvest_moon_day.month && day < harvest_moon_day.day) {
calendar->event_flags &= ~mCD_FLAG_HARVEST_MOON_9;
}
break;
}
case lbRTC_OCTOBER: {
lbRTC_ymd_c harvest_moon_day;
lbRk_HarvestMoonDay(&harvest_moon_day, year);
if (month == harvest_moon_day.month && day < harvest_moon_day.day) {
calendar->event_flags &= ~mCD_FLAG_HARVEST_MOON_10;
}
break;
}
case lbRTC_NOVEMBER: {
if (day < 11) {
calendar->event_flags &= ~mCD_FLAG_OFFICERS_DAY;
}
break;
}
}
}
calendar->played_days[month - 1] &= ~days_bitfield;
calendar->event_days[month - 1] &= ~days_bitfield;
switch (month) {
case lbRTC_JUNE:
{
lbRTC_weekday_t weekday = lbRTC_Week(year, month, day + 1);
/* Calculate the current week and verify it's not the last week */
if ((day - weekday) / lbRTC_WEEK + 1 < 3) {
calendar->event_flags &= ~mCD_FLAG_MOTHERS_DAY;
}
break;
}
case lbRTC_JULY:
{
if (day < Save_Get(town_day)) {
calendar->event_flags &= ~mCD_FLAG_TOWN_DAY;
}
break;
}
case lbRTC_AUGUST:
{
if (day < 12) {
calendar->event_flags &= ~mCD_FLAG_METEOR_SHOWER;
}
if (day < 21) {
calendar->event_flags &= ~mCD_FLAG_FOUNDERS_DAY;
}
break;
}
case lbRTC_SEPTEMBER:
{
lbRTC_ymd_c harvest_moon_day;
lbRk_HarvestMoonDay(&harvest_moon_day, year);
if (month == harvest_moon_day.month && day < harvest_moon_day.day) {
calendar->event_flags &= ~mCD_FLAG_HARVEST_MOON_9;
}
break;
}
case lbRTC_OCTOBER:
{
lbRTC_ymd_c harvest_moon_day;
lbRk_HarvestMoonDay(&harvest_moon_day, year);
if (month == harvest_moon_day.month && day < harvest_moon_day.day) {
calendar->event_flags &= ~mCD_FLAG_HARVEST_MOON_10;
}
break;
}
case lbRTC_NOVEMBER:
{
if (day < 11) {
calendar->event_flags &= ~mCD_FLAG_OFFICERS_DAY;
}
break;
}
}
}
}
static int mCD_GetIntervalMonths(lbRTC_year_t y0, lbRTC_month_t m0, lbRTC_year_t y1, lbRTC_month_t m1) {
return (m1 - m0) + (y1 - y0) * lbRTC_MONTHS_MAX;
return (m1 - m0) + (y1 - y0) * lbRTC_MONTHS_MAX;
}
extern void mCD_calendar_clear(int player_no) {
Private_c* priv = Save_Get(private);
Private_c* priv = Save_Get(private_data);
if (player_no == -1) {
player_no = Common_Get(player_no);
}
if (player_no == -1) {
player_no = Common_Get(player_no);
}
if (player_no != mPr_FOREIGNER) {
mem_clear((u8*)&priv[player_no].calendar, sizeof(mCD_player_calendar_c), 0);
}
if (player_no != mPr_FOREIGNER) {
mem_clear((u8*)&priv[player_no].calendar, sizeof(mCD_player_calendar_c), 0);
}
}
static int mCD_calendar_check_harvest_moon_viewing(mCD_player_calendar_c* calendar, lbRTC_month_t month) {
int res = FALSE;
int res = FALSE;
switch (month) {
case lbRTC_SEPTEMBER:
{
if ((calendar->event_flags & mCD_FLAG_HARVEST_MOON_9) != 0) {
res = TRUE;
}
switch (month) {
case lbRTC_SEPTEMBER: {
if ((calendar->event_flags & mCD_FLAG_HARVEST_MOON_9) != 0) {
res = TRUE;
}
break;
break;
}
case lbRTC_OCTOBER: {
if ((calendar->event_flags & mCD_FLAG_HARVEST_MOON_10) != 0) {
res = TRUE;
}
break;
}
}
case lbRTC_OCTOBER:
{
if ((calendar->event_flags & mCD_FLAG_HARVEST_MOON_10) != 0) {
res = TRUE;
}
break;
}
}
return res;
return res;
}
extern void mCD_calendar_check_delete(int player_no, lbRTC_year_t year, lbRTC_month_t month, lbRTC_day_t day) {
if (player_no == -1) {
player_no = Common_Get(player_no);
}
if (player_no != mPr_FOREIGNER) {
mCD_player_calendar_c* calendar = &Save_Get(private[player_no]).calendar;
if (calendar->year == 0) {
mCD_calendar_clear(-1);
if (player_no == -1) {
player_no = Common_Get(player_no);
}
else {
int interval = mCD_GetIntervalMonths(calendar->year, calendar->month, year, month);
if (interval >= lbRTC_MONTHS_MAX || interval <= -lbRTC_MONTHS_MAX) {
mCD_calendar_clear(-1); // clear entire calendar since interval is >= 1 year
}
else {
if (interval != 0) {
mCD_calendar_clear_interval(calendar, interval); // clear only interval months
if (player_no != mPr_FOREIGNER) {
mCD_player_calendar_c* calendar = &Save_Get(private_data[player_no]).calendar;
if (calendar->year == 0) {
mCD_calendar_clear(-1);
} else {
int interval = mCD_GetIntervalMonths(calendar->year, calendar->month, year, month);
if (interval >= lbRTC_MONTHS_MAX || interval <= -lbRTC_MONTHS_MAX) {
mCD_calendar_clear(-1); // clear entire calendar since interval is >= 1 year
} else {
if (interval != 0) {
mCD_calendar_clear_interval(calendar, interval); // clear only interval months
}
mCD_calendar_clear_day(calendar, year, month, day); // clear days
}
}
mCD_calendar_clear_day(calendar, year, month, day); // clear days
}
}
}
}
extern void mCD_calendar_wellcome_on() {
mCD_player_calendar_c* calendar = &Common_Get(now_private)->calendar;
mCD_player_calendar_c* calendar = &Common_Get(now_private)->calendar;
if (Common_Get(player_no) != mPr_FOREIGNER) {
lbRTC_time_c* rtc_time = Common_GetPointer(time.rtc_time);
if (Common_Get(player_no) != mPr_FOREIGNER) {
lbRTC_time_c* rtc_time = Common_GetPointer(time.rtc_time);
mCD_calendar_check_delete(-1, rtc_time->year, rtc_time->month, rtc_time->day);
calendar->played_days[rtc_time->month - 1] |= (1 << (rtc_time->day - 1));
calendar->year = rtc_time->year;
calendar->month = rtc_time->month;
}
mCD_calendar_check_delete(-1, rtc_time->year, rtc_time->month, rtc_time->day);
calendar->played_days[rtc_time->month - 1] |= (1 << (rtc_time->day - 1));
calendar->year = rtc_time->year;
calendar->month = rtc_time->month;
}
}
extern void mCD_calendar_event_on(lbRTC_year_t year, lbRTC_month_t month, lbRTC_day_t day, u8 event) {
if (Common_Get(player_no) != mPr_FOREIGNER) {
mCD_player_calendar_c* calendar;
if (Common_Get(player_no) != mPr_FOREIGNER) {
mCD_player_calendar_c* calendar;
mCD_calendar_check_delete(-1, year, month, day);
calendar = &Save_Get(private[Common_Get(player_no)]).calendar;
mCD_calendar_check_delete(-1, year, month, day);
calendar = &Save_Get(private_data[Common_Get(player_no)]).calendar;
switch (event) {
case 11:
{
calendar->event_flags |= mCD_FLAG_MOTHERS_DAY;
switch (event) {
case 11: {
calendar->event_flags |= mCD_FLAG_MOTHERS_DAY;
break;
}
break;
}
case 4:
{
calendar->event_flags |= mCD_FLAG_TOWN_DAY;
case 4: {
calendar->event_flags |= mCD_FLAG_TOWN_DAY;
break;
}
break;
}
case 16:
{
calendar->event_flags |= mCD_FLAG_METEOR_SHOWER;
case 16: {
calendar->event_flags |= mCD_FLAG_METEOR_SHOWER;
break;
}
break;
}
case 1:
{
calendar->event_flags |= mCD_FLAG_FOUNDERS_DAY;
case 1: {
calendar->event_flags |= mCD_FLAG_FOUNDERS_DAY;
break;
}
break;
}
case 17:
{
switch (month) {
case lbRTC_SEPTEMBER:
{
calendar->event_flags |= mCD_FLAG_HARVEST_MOON_9;
case 17: {
switch (month) {
case lbRTC_SEPTEMBER: {
calendar->event_flags |= mCD_FLAG_HARVEST_MOON_9;
break;
}
break;
}
case lbRTC_OCTOBER:
{
calendar->event_flags |= mCD_FLAG_HARVEST_MOON_10;
case lbRTC_OCTOBER: {
calendar->event_flags |= mCD_FLAG_HARVEST_MOON_10;
break;
}
break;
}
}
break;
}
case 19: {
calendar->event_flags |= mCD_FLAG_OFFICERS_DAY;
break;
}
case 255: {
break;
}
default: {
calendar->event_days[month - 1] |= (1 << (day - 1));
break;
}
}
break;
}
case 19:
{
calendar->event_flags |= mCD_FLAG_OFFICERS_DAY;
break;
}
case 255:
{
break;
}
default:
{
calendar->event_days[month - 1] |= (1 << (day - 1));
break;
}
}
}
}
extern int mCD_calendar_event_check(lbRTC_year_t year, lbRTC_month_t month, lbRTC_day_t day, int player_no, u8 event) {
int res = FALSE;
int res = FALSE;
if (player_no == -1) {
player_no = Common_Get(player_no);
}
if (player_no != mPr_FOREIGNER) {
lbRTC_time_c* rtc_time = Common_GetPointer(time.rtc_time);
int interval = (rtc_time->month - month) + (rtc_time->year - year) * lbRTC_MONTHS_MAX;
if (interval >= 0 && interval < lbRTC_MONTHS_MAX) {
mCD_player_calendar_c* calendar = &Save_Get(private[player_no]).calendar;
switch (event) {
case 11:
{
if (calendar->event_flags & mCD_FLAG_MOTHERS_DAY) {
res = TRUE;
}
break;
}
case 4:
{
if (calendar->event_flags & mCD_FLAG_TOWN_DAY) {
res = TRUE;
}
break;
}
case 16:
{
if (calendar->event_flags & mCD_FLAG_METEOR_SHOWER) {
res = TRUE;
}
break;
}
case 1:
{
if (calendar->event_flags & mCD_FLAG_FOUNDERS_DAY) {
res = TRUE;
}
break;
}
case 17:
{
if (mCD_calendar_check_harvest_moon_viewing(calendar, month) == TRUE) {
res = TRUE;
}
break;
}
case 19:
{
if (calendar->event_flags & mCD_FLAG_OFFICERS_DAY) {
res = TRUE;
}
break;
}
case 255:
{
break;
}
default:
{
if (calendar->event_days[month - 1] & (1 << (day - 1))) {
res = TRUE;
}
break;
}
}
if (player_no == -1) {
player_no = Common_Get(player_no);
}
}
return res;
if (player_no != mPr_FOREIGNER) {
lbRTC_time_c* rtc_time = Common_GetPointer(time.rtc_time);
int interval = (rtc_time->month - month) + (rtc_time->year - year) * lbRTC_MONTHS_MAX;
if (interval >= 0 && interval < lbRTC_MONTHS_MAX) {
mCD_player_calendar_c* calendar = &Save_Get(private_data[player_no]).calendar;
switch (event) {
case 11: {
if (calendar->event_flags & mCD_FLAG_MOTHERS_DAY) {
res = TRUE;
}
break;
}
case 4: {
if (calendar->event_flags & mCD_FLAG_TOWN_DAY) {
res = TRUE;
}
break;
}
case 16: {
if (calendar->event_flags & mCD_FLAG_METEOR_SHOWER) {
res = TRUE;
}
break;
}
case 1: {
if (calendar->event_flags & mCD_FLAG_FOUNDERS_DAY) {
res = TRUE;
}
break;
}
case 17: {
if (mCD_calendar_check_harvest_moon_viewing(calendar, month) == TRUE) {
res = TRUE;
}
break;
}
case 19: {
if (calendar->event_flags & mCD_FLAG_OFFICERS_DAY) {
res = TRUE;
}
break;
}
case 255: {
break;
}
default: {
if (calendar->event_days[month - 1] & (1 << (day - 1))) {
res = TRUE;
}
break;
}
}
}
}
return res;
}
+2011 -2196
View File
File diff suppressed because it is too large Load Diff
+396 -318
View File
@@ -15,504 +15,582 @@
/* upstairs room base unit layout */
static mActor_name_t l_player_room_2_utinfo[UT_X_NUM * UT_Z_NUM] = {
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
DOOR0, RSV_WALL_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, DOOR0, RSV_WALL_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR,
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR, RSV_WALL_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO
};
/* basement room base unit layout */
static mActor_name_t l_player_room_bm_utinfo[UT_X_NUM * UT_Z_NUM] = {
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR, RSV_WALL_NO, RSV_WALL_NO, DOOR0, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR, RSV_WALL_NO, RSV_WALL_NO, DOOR0,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO,
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO
};
/* small main room base unit layout */
static mActor_name_t l_proom_s_tmp[UT_X_NUM * UT_Z_NUM] = {
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR, RSV_WALL_NO, RSV_WALL_NO, DOOR0, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, RSV_WALL_NO, EXIT_DOOR, EXIT_DOOR, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO,
RSV_WALL_NO, RSV_DOOR, RSV_DOOR, RSV_WALL_NO, RSV_WALL_NO, DOOR0, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, RSV_DOOR,
RSV_DOOR, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EXIT_DOOR, EXIT_DOOR, RSV_WALL_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO
};
/* medium main room base unit layout */
static mActor_name_t l_proom_m_tmp[UT_X_NUM * UT_Z_NUM] = {
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR, RSV_WALL_NO, RSV_WALL_NO, DOOR0, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EXIT_DOOR, EXIT_DOOR, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR,
RSV_WALL_NO, RSV_WALL_NO, DOOR0, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR, RSV_WALL_NO, RSV_WALL_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EXIT_DOOR, EXIT_DOOR, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO
};
/* large main room base unit layout */
static mActor_name_t l_proom_l_tmp[UT_X_NUM * UT_Z_NUM] = {
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, DOOR1, RSV_WALL_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR, RSV_WALL_NO, RSV_WALL_NO, DOOR0, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EXIT_DOOR, EXIT_DOOR, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, DOOR1, RSV_WALL_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR, RSV_WALL_NO, RSV_WALL_NO, DOOR0,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, RSV_WALL_NO,
RSV_WALL_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO,
EXIT_DOOR, EXIT_DOOR, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO
};
/* island cottage base unit layout */
static mActor_name_t l_proom_cottage_tmp[UT_X_NUM * UT_Z_NUM] = {
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EXIT_DOOR, EXIT_DOOR, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, RSV_DOOR, RSV_DOOR, RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO,
RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, RSV_WALL_NO, EXIT_DOOR, EXIT_DOOR, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, RSV_WALL_NO,
RSV_WALL_NO, RSV_WALL_NO, RSV_WALL_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO,
EMPTY_NO, EMPTY_NO, EMPTY_NO, EMPTY_NO
};
#define HANIWA_MSG_LINES 4
// TODO: fix me
/**
* @brief Clears the save data for a given home.
*
*
* @param home_no Index of the home which will be cleared (0-3).
**/
extern void mHm_ClearHomeInfo(int home_no) {
static int haniwa_msg[HANIWA_MSG_LINES] = { 0x76A, 0x76B, 0x76C, 0x76D }; /* These are probably defines somewhere from auto-gen */
static int haniwa_msg[HANIWA_MSG_LINES] = { 0x76A, 0x76B, 0x76C,
0x76D }; /* These are probably defines somewhere from auto-gen */
int no;
mHm_hs_c* home;
u8 haniwa_msg_buf[HANIWA_MESSAGE_LEN];
u16* item_p;
u16* src_p;
int i;
u8* haniwa_msg_p;
int j;
int no;
mHm_hs_c* home;
u8 haniwa_msg_buf[HANIWA_MESSAGE_LEN];
u16* item_p;
u16* src_p;
int i;
u8* haniwa_msg_p;
int j;
no = home_no & 3;
home = Save_GetPointer(homes[no]);
bzero(home, sizeof(mHm_hs_c));
mPr_ClearPersonalID(&home->ownerID);
bcopy(l_proom_s_tmp, home->floors[mHm_ROOM_MAIN].layer_main.items, (UT_X_NUM * UT_Z_NUM) * sizeof(u16));
home->floors[mHm_ROOM_MAIN].layer_main.ftr_switch = 0;
*((u32*)&home->floors[mHm_ROOM_MAIN].layer_main.ftr_switch + 1) = 0; /* ftr_switch might be a union? */
*((u32*)&home->floors[mHm_ROOM_MAIN].layer_main.ftr_switch + 0) = 0;
no = home_no & 3;
home = Save_GetPointer(homes[no]);
bzero(home, sizeof(mHm_hs_c));
mPr_ClearPersonalID(&home->ownerID);
bcopy(l_proom_s_tmp, home->floors[mHm_ROOM_MAIN].layer_main.items, (UT_X_NUM * UT_Z_NUM) * sizeof(u16));
home->floors[mHm_ROOM_MAIN].layer_main.ftr_switch = 0;
*((u32*)&home->floors[mHm_ROOM_MAIN].layer_main.ftr_switch + 1) = 0; /* ftr_switch might be a union? */
*((u32*)&home->floors[mHm_ROOM_MAIN].layer_main.ftr_switch + 0) = 0;
item_p = (u16*)home->floors[mHm_ROOM_BASEMENT].layer_main.items;
src_p = l_player_room_bm_utinfo;
for (i = 0; i < UT_X_NUM * UT_Z_NUM; i++) {
*item_p++ = *src_p++;
}
item_p = (u16*)home->floors[mHm_ROOM_BASEMENT].layer_main.items;
src_p = l_player_room_bm_utinfo;
for (i = 0; i < UT_X_NUM * UT_Z_NUM; i++) {
*item_p++ = *src_p++;
}
item_p = ((u16*)home->floors[mHm_ROOM_UPPER].layer_main.items);
src_p = l_player_room_2_utinfo;
for (i = 0; i < UT_X_NUM * UT_Z_NUM; i++) {
*item_p++ = *src_p++;
}
item_p = ((u16*)home->floors[mHm_ROOM_UPPER].layer_main.items);
src_p = l_player_room_2_utinfo;
for (i = 0; i < UT_X_NUM * UT_Z_NUM; i++) {
*item_p++ = *src_p++;
}
mMl_clear_mail_box(home->mailbox, HOME_MAILBOX_SIZE);
Save_Set(homes[no].outlook_pal, no);
Save_Set(homes[no].next_outlook_pal, no);
mCkRh_InitGokiSaveData_1Room_ByHomeData(home);
mHm_SetDefaultPlayerRoomData(no);
mMl_clear_mail_box(home->mailbox, HOME_MAILBOX_SIZE);
Save_Set(homes[no].outlook_pal, no);
Save_Set(homes[no].next_outlook_pal, no);
mCkRh_InitGokiSaveData_1Room_ByHomeData(home);
mHm_SetDefaultPlayerRoomData(no);
haniwa_msg_p = home->haniwa.message;
for (j = 0; j < HANIWA_MSG_LINES; j++) {
int len;
haniwa_msg_p = home->haniwa.message;
for (j = 0; j < HANIWA_MSG_LINES; j++) {
int len;
mString_Load_StringFromRom(haniwa_msg_buf, HANIWA_MESSAGE_LEN, haniwa_msg[j]);
len = mMl_strlen(haniwa_msg_buf, HANIWA_MESSAGE_LEN, CHAR_SPACE);
haniwa_msg_buf[len] = CHAR_NEW_LINE;
mem_copy(haniwa_msg_p, haniwa_msg_buf, len + 1);
haniwa_msg_p += len + 1;
}
mString_Load_StringFromRom(haniwa_msg_buf, HANIWA_MESSAGE_LEN, haniwa_msg[j]);
len = mMl_strlen(haniwa_msg_buf, HANIWA_MESSAGE_LEN, CHAR_SPACE);
haniwa_msg_buf[len] = CHAR_NEW_LINE;
mem_copy(haniwa_msg_p, haniwa_msg_buf, len + 1);
haniwa_msg_p += len + 1;
}
Save_Set(keep_house_size[no], 0);
Save_Set(homes[no].door_original, 0xFF);
Save_Set(keep_house_size[no], 0);
Save_Set(homes[no].door_original, 0xFF);
}
/**
* @brief Clears save data for all homes.
**/
extern void mHm_ClearAllHomeInfo() {
int i;
int i;
for (i = 0; i < PLAYER_NUM; i++) {
mHm_ClearHomeInfo(i);
}
for (i = 0; i < PLAYER_NUM; i++) {
mHm_ClearHomeInfo(i);
}
}
/**
* @brief Sets common_data's 'now_home' pointer to the current player's home.
**/
extern void mHm_SetNowHome() {
mHm_hs_c* now_home = NULL;
mHm_hs_c* now_home = NULL;
if (Common_Get(player_no) < PLAYER_NUM) {
now_home = Save_GetPointer(homes[mHS_get_arrange_idx(Common_Get(player_no))]);
}
if (Common_Get(player_no) < PLAYER_NUM) {
now_home = Save_GetPointer(homes[mHS_get_arrange_idx(Common_Get(player_no))]);
}
Common_Set(now_home, now_home);
Common_Set(now_home, now_home);
}
/* sizeof(mHm_player_room_default_data_c) == 0x10 */
typedef struct {
/* 0x00 */ u8 wall_num;
/* 0x01 */ u8 floor_num;
/* 0x04 */ int item_ut_x;
/* 0x08 */ int item_ut_z;
/* 0x0C */ mActor_name_t item;
/* 0x00 */ u8 wall_num;
/* 0x01 */ u8 floor_num;
/* 0x04 */ int item_ut_x;
/* 0x08 */ int item_ut_z;
/* 0x0C */ mActor_name_t item;
} mHm_player_room_default_data_c;
/* list of default properties for each house */
static mHm_player_room_default_data_c l_mHm_player_room_default_data[PLAYER_NUM] = {
{ 3, 38, 4, 1, FTR_TAPEDECK }, /* Top-left house, stone wall & old flooring */
{ 41, 42, 4, 1, FTR_TAPEDECK }, /* Top-right house, wood panelling & steel flooring */
{ 55, 5, 4, 1, FTR_TAPEDECK }, /* Bottom-left house, shanty wall & birch flooring */
{ 42, 34, 4, 1, FTR_TAPEDECK } /* Bottom-right house, concrete wall & charcoal tile */
{ 3, 38, 4, 1, FTR_TAPEDECK }, /* Top-left house, stone wall & old flooring */
{ 41, 42, 4, 1, FTR_TAPEDECK }, /* Top-right house, wood panelling & steel flooring */
{ 55, 5, 4, 1, FTR_TAPEDECK }, /* Bottom-left house, shanty wall & birch flooring */
{ 42, 34, 4, 1, FTR_TAPEDECK } /* Bottom-right house, concrete wall & charcoal tile */
};
/**
* @brief Sets the default data for a given home.
*
*
* @param home_no Index of the home which will receive the default data
**/
extern void mHm_SetDefaultPlayerRoomData(int home_no) {
int i;
int i;
int ut_x = l_mHm_player_room_default_data[home_no & 3].item_ut_x;
int ut_z = l_mHm_player_room_default_data[home_no & 3].item_ut_z;
int ut_x = l_mHm_player_room_default_data[home_no & 3].item_ut_x;
int ut_z = l_mHm_player_room_default_data[home_no & 3].item_ut_z;
Save_Set(homes[home_no & 3].floors[mHm_ROOM_MAIN].layer_main.items[ut_z][ut_x], l_mHm_player_room_default_data[home_no & 3].item);
Save_Set(homes[home_no & 3].floors[mHm_ROOM_MAIN].layer_main.items[1][1], FTR_ORANGEBOX);
Save_Set(homes[home_no & 3].floors[mHm_ROOM_MAIN].layer_secondary.items[1][1], ITM_DIARY00);
Save_Set(homes[home_no & 3].floors[mHm_ROOM_MAIN].layer_main.items[ut_z][ut_x],
l_mHm_player_room_default_data[home_no & 3].item);
Save_Set(homes[home_no & 3].floors[mHm_ROOM_MAIN].layer_main.items[1][1], FTR_ORANGEBOX);
Save_Set(homes[home_no & 3].floors[mHm_ROOM_MAIN].layer_secondary.items[1][1], ITM_DIARY00);
for (i = 0; i < mHm_ROOM_NUM; i++) {
Save_Set(homes[home_no & 3].floors[i].wall_floor.flooring_idx, l_mHm_player_room_default_data[home_no & 3].floor_num);
Save_Set(homes[home_no & 3].floors[i].wall_floor.wallpaper_idx, l_mHm_player_room_default_data[home_no & 3].wall_num);
}
for (i = 0; i < mHm_ROOM_NUM; i++) {
Save_Set(homes[home_no & 3].floors[i].wall_floor.flooring_idx,
l_mHm_player_room_default_data[home_no & 3].floor_num);
Save_Set(homes[home_no & 3].floors[i].wall_floor.wallpaper_idx,
l_mHm_player_room_default_data[home_no & 3].wall_num);
}
}
/**
* @brief Initializes the home's owner id to the given player's id.
*
*
* @param home Pointer to the mHm_hs_c home which will be updated
* @param player_no Index of the player whose id will be used
**/
extern void mHm_InitHomeInfo(mHm_hs_c* home, int player_no) {
mPr_CopyPersonalID(&home->ownerID, Save_GetPointer(private[player_no].player_ID));
mPr_CopyPersonalID(&home->ownerID, Save_GetPointer(private_data[player_no].player_ID));
}
/**
* @brief Sets/clears the wall and door layout for a given room.
*
*
* @param dst Pointer to the room item actor data
* @param roomtype Type of room to select correct room data (0-3)
* @param set when TRUE copy data, when FALSE clear data
**/
static void mHm_ChangeWallDoorFG(mActor_name_t* dst, int roomtype, int set) {
static mActor_name_t* player_room_tmp_table[mHm_ROOMTYPE_NUM] = {
l_proom_s_tmp, /* small room layout (default) */
l_proom_m_tmp, /* medium room layout */
l_proom_l_tmp, /* large room layout */
l_proom_cottage_tmp /* island cottage layout */
};
static mActor_name_t* player_room_tmp_table[mHm_ROOMTYPE_NUM] = {
l_proom_s_tmp, /* small room layout (default) */
l_proom_m_tmp, /* medium room layout */
l_proom_l_tmp, /* large room layout */
l_proom_cottage_tmp /* island cottage layout */
};
mActor_name_t* src;
int i;
mActor_name_t* src;
int i;
if (roomtype < mHm_ROOMTYPE_SMALL || roomtype >= mHm_ROOMTYPE_NUM) {
roomtype = mHm_ROOMTYPE_SMALL;
}
src = player_room_tmp_table[roomtype];
for (i = 0; i < UT_X_NUM * UT_Z_NUM; i++) {
if (*src != EMPTY_NO) {
if (set == FALSE) {
*dst = EMPTY_NO; /* clear */
}
else {
*dst = *src; /* set */
}
if (roomtype < mHm_ROOMTYPE_SMALL || roomtype >= mHm_ROOMTYPE_NUM) {
roomtype = mHm_ROOMTYPE_SMALL;
}
src++;
dst++;
}
src = player_room_tmp_table[roomtype];
for (i = 0; i < UT_X_NUM * UT_Z_NUM; i++) {
if (*src != EMPTY_NO) {
if (set == FALSE) {
*dst = EMPTY_NO; /* clear */
} else {
*dst = *src; /* set */
}
}
src++;
dst++;
}
}
/**
* @brief Clears the wall & door data for a room.
*
*
* @param items Pointer to the room actor items
* @param roomtype Type of room to clear
**/
static void mHm_EraseWallDoor(mActor_name_t* items, int roomtype) {
mHm_ChangeWallDoorFG(items, roomtype, FALSE);
mHm_ChangeWallDoorFG(items, roomtype, FALSE);
}
/**
* @brief Sets the wall & door data for a room.
*
*
* @param items Pointer to the room actor items
* @param roomtype Type of room to clear
**/
static void mHm_SetWallDoor(mActor_name_t* items, int roomtype) {
mHm_ChangeWallDoorFG(items, roomtype, TRUE);
mHm_ChangeWallDoorFG(items, roomtype, TRUE);
}
/**
* @brief Updates the wall & door data for the main room.
*
*
* @param home Pointer to the mHm_hs_c home to update
* @param home_size Size of the home (0-4, but only 1-4 should be used for this function)
**/
static void mHm_RehouseWallDoor(mHm_hs_c* home, int home_size) {
static int room_size[mHm_HOMESIZE_NUM] = {
mHm_ROOMTYPE_SMALL, /* mHm_HOMESIZE_SMALL */
mHm_ROOMTYPE_MEDIUM, /* mHm_HOMESIZE_MEDIUM */
mHm_ROOMTYPE_LARGE, /* mHm_HOMESIZE_LARGE */
mHm_ROOMTYPE_LARGE, /* mHm_HOMESIZE_UPPER */
mHm_ROOMTYPE_SMALL /* mHm_HOMESIZE_STATUE */
};
static int room_size[mHm_HOMESIZE_NUM] = {
mHm_ROOMTYPE_SMALL, /* mHm_HOMESIZE_SMALL */
mHm_ROOMTYPE_MEDIUM, /* mHm_HOMESIZE_MEDIUM */
mHm_ROOMTYPE_LARGE, /* mHm_HOMESIZE_LARGE */
mHm_ROOMTYPE_LARGE, /* mHm_HOMESIZE_UPPER */
mHm_ROOMTYPE_SMALL /* mHm_HOMESIZE_STATUE */
};
int new_size;
int old_size;
int new_size;
int old_size;
if (home_size < mHm_HOMESIZE_MEDIUM || home_size >= mHm_HOMESIZE_NUM) {
home_size = mHm_HOMESIZE_MEDIUM;
}
if (home_size < mHm_HOMESIZE_MEDIUM || home_size >= mHm_HOMESIZE_NUM) {
home_size = mHm_HOMESIZE_MEDIUM;
}
old_size = room_size[home_size - 1];
new_size = room_size[home_size];
old_size = room_size[home_size - 1];
new_size = room_size[home_size];
mHm_EraseWallDoor((u16*)home->floors[mHm_ROOM_MAIN].layer_main.items, old_size);
mHm_EraseWallDoor((u16*)home->floors[mHm_ROOM_MAIN].layer_secondary.items, old_size);
mHm_SetWallDoor((u16*)home->floors[mHm_ROOM_MAIN].layer_main.items, new_size);
mHm_SetWallDoor((u16*)home->floors[mHm_ROOM_MAIN].layer_secondary.items, new_size);
mHm_EraseWallDoor((u16*)home->floors[mHm_ROOM_MAIN].layer_main.items, old_size);
mHm_EraseWallDoor((u16*)home->floors[mHm_ROOM_MAIN].layer_secondary.items, old_size);
mHm_SetWallDoor((u16*)home->floors[mHm_ROOM_MAIN].layer_main.items, new_size);
mHm_SetWallDoor((u16*)home->floors[mHm_ROOM_MAIN].layer_secondary.items, new_size);
}
#define CHECK_ORDER_DATE(home, rtc_time) \
((home)->size_info.upgrade_order_date.day != (rtc_time)->day || \
(home)->size_info.upgrade_order_date.month != (rtc_time)->month || \
(home)->size_info.upgrade_order_date.year != (rtc_time)->year)
#define CHECK_ORDER_DATE(home, rtc_time) \
((home)->size_info.upgrade_order_date.day != (rtc_time)->day || \
(home)->size_info.upgrade_order_date.month != (rtc_time)->month || \
(home)->size_info.upgrade_order_date.year != (rtc_time)->year)
/**
* @brief Check if any house should be updated, and if so, update it.
**/
extern void mHm_CheckRehouseOrder() {
mHm_hs_c* home = Save_Get(homes);
lbRTC_time_c* rtc_time = Common_GetPointer(time.rtc_time);
int i;
mHm_hs_c* home = Save_Get(homes);
lbRTC_time_c* rtc_time = Common_GetPointer(time.rtc_time);
int i;
for (i = 0; i < PLAYER_NUM; i++) {
if (mPr_NullCheckPersonalID(&home->ownerID) == FALSE) {
if (home->outlook_pal != home->next_outlook_pal) {
home->outlook_pal = home->next_outlook_pal;
}
for (i = 0; i < PLAYER_NUM; i++) {
if (mPr_NullCheckPersonalID(&home->ownerID) == FALSE) {
if (home->outlook_pal != home->next_outlook_pal) {
home->outlook_pal = home->next_outlook_pal;
}
if (home->size_info.size != home->size_info.next_size && home->size_info.next_size < mHm_HOMESIZE_STATUE) {
if (CHECK_ORDER_DATE(home, rtc_time)) {
home->outlook_pal = home->ordered_outlook_pal;
home->next_outlook_pal = home->ordered_outlook_pal;
home->size_info.size = home->size_info.next_size;
home->size_info.renew = TRUE;
mHm_RehouseWallDoor(home, home->size_info.size);
if (home->size_info.size != home->size_info.next_size && home->size_info.next_size < mHm_HOMESIZE_STATUE) {
if (CHECK_ORDER_DATE(home, rtc_time)) {
home->outlook_pal = home->ordered_outlook_pal;
home->next_outlook_pal = home->ordered_outlook_pal;
home->size_info.size = home->size_info.next_size;
home->size_info.renew = TRUE;
mHm_RehouseWallDoor(home, home->size_info.size);
}
} else {
if (home->size_info.basement_ordered) {
if (CHECK_ORDER_DATE(home, rtc_time)) {
mHm_SetBasement(i);
home->size_info.renew = TRUE;
}
} else if (home->size_info.statue_ordered == TRUE) {
if (CHECK_ORDER_DATE(home, rtc_time)) {
home->size_info.next_size = mHm_HOMESIZE_STATUE;
}
}
}
}
}
else {
if (home->size_info.basement_ordered) {
if (CHECK_ORDER_DATE(home, rtc_time)) {
mHm_SetBasement(i);
home->size_info.renew = TRUE;
}
}
else if (home->size_info.statue_ordered == TRUE) {
if (CHECK_ORDER_DATE(home, rtc_time)) {
home->size_info.next_size = mHm_HOMESIZE_STATUE;
}
}
}
home++;
}
home++;
}
for (i = 0; i < PLAYER_NUM; i++) {
u32* state_flags = Save_GetPointer(private[i].state_flags);
*state_flags &= (~0x200); /* TODO: these need an enum/defines */
}
for (i = 0; i < PLAYER_NUM; i++) {
u32* state_flags = Save_GetPointer(private_data[i].state_flags);
*state_flags &= (~0x200); /* TODO: these need an enum/defines */
}
}
/**
* @brief Stores the player's current house size for later.
*
*
* @param player_no Index of the player whose house size will be saved
* @return TRUE/FALSE house size was kept
**/
extern int mHm_KeepHouseSize(u8 player_no) {
int arrange_idx;
mHm_hs_c* home;
u8* keep_house_size;
int res = FALSE;
int arrange_idx;
mHm_hs_c* home;
u8* keep_house_size;
int res = FALSE;
if (player_no < PLAYER_NUM) {
arrange_idx = mHS_get_arrange_idx(player_no);
home = Save_GetPointer(homes[arrange_idx]);
keep_house_size = Save_GetPointer(keep_house_size[arrange_idx]);
res = TRUE;
if (player_no < PLAYER_NUM) {
arrange_idx = mHS_get_arrange_idx(player_no);
home = Save_GetPointer(homes[arrange_idx]);
keep_house_size = Save_GetPointer(keep_house_size[arrange_idx]);
/* I don't think this is a union or struct due to the unused first bit */
/* But maybe... perhaps they used a pad bit for the topmost bit unlike other structs */
*keep_house_size = 0;
*keep_house_size |= home->size_info.size;
*keep_house_size |= home->size_info.next_size << 3;
*keep_house_size |= home->size_info.renew << 6;
}
res = TRUE;
return res;
/* I don't think this is a union or struct due to the unused first bit */
/* But maybe... perhaps they used a pad bit for the topmost bit unlike other structs */
*keep_house_size = 0;
*keep_house_size |= home->size_info.size;
*keep_house_size |= home->size_info.next_size << 3;
*keep_house_size |= home->size_info.renew << 6;
}
return res;
}
/**
* @brief Checks whether the kept house size for a player is the same as the actual size.
*
*
* @param player_no The index of the player whose house will be checked
* @returns TRUE/FALSE house size and keep house size are the same
**/
extern int mHm_CheckKeepHouseSize(u8 player_no) {
int arrange_idx;
mHm_hs_c* home;
u8* keep_house_size;
int res = FALSE;
int arrange_idx;
mHm_hs_c* home;
u8* keep_house_size;
int res = FALSE;
if (player_no < PLAYER_NUM) {
arrange_idx = mHS_get_arrange_idx(player_no);
keep_house_size = Save_GetPointer(keep_house_size[arrange_idx]);
home = Save_Get(homes + arrange_idx);
if (player_no < PLAYER_NUM) {
arrange_idx = mHS_get_arrange_idx(player_no);
keep_house_size = Save_GetPointer(keep_house_size[arrange_idx]);
home = Save_Get(homes + arrange_idx);
if ((*keep_house_size & 7) == home->size_info.size &&
((*keep_house_size >> 3) & 7) == home->size_info.next_size &&
((*keep_house_size >> 6) & 1) == home->size_info.renew) {
res = TRUE;
if ((*keep_house_size & 7) == home->size_info.size &&
((*keep_house_size >> 3) & 7) == home->size_info.next_size &&
((*keep_house_size >> 6) & 1) == home->size_info.renew) {
res = TRUE;
}
}
}
return res;
return res;
}
/**
* @brief Updates player house flags to include basement
*
*
* @param home_no Index of the house whose basement flag will be enabled
* @return TRUE/FALSE was flag set
**/
extern int mHm_SetBasement(u8 home_no) {
if (home_no < PLAYER_NUM) {
mHm_flg_c* flags = Save_GetPointer(homes[home_no].flags);
if (flags->has_basement == FALSE) {
flags->has_basement = TRUE;
return TRUE;
if (home_no < PLAYER_NUM) {
mHm_flg_c* flags = Save_GetPointer(homes[home_no].flags);
if (flags->has_basement == FALSE) {
flags->has_basement = TRUE;
return TRUE;
}
}
}
return FALSE;
return FALSE;
}
/**
* @brief Sets the default island cottage data
*
*
* @param cottage Pointer to the mHm_cottage_c cottage which will receive the default data
**/
static void mHm_SetDefaultCottageData(mHm_cottage_c* cottage) {
if (cottage == NULL) {
return;
}
if (cottage == NULL) {
return;
}
cottage->room.wall_floor.flooring_idx = 13;
cottage->room.wall_floor.wallpaper_idx = 13;
cottage->room.wall_floor.flooring_idx = 13;
cottage->room.wall_floor.wallpaper_idx = 13;
cottage->room.layer_main.items[3][3] = FTR_REDALOHASHIRT;
cottage->room.layer_main.items[3][6] = FTR_BLUEALOHASHIRT;
cottage->room.layer_main.items[6][3] = FTR_REDALOHASHIRT;
cottage->room.layer_main.items[6][6] = FTR_BLUEALOHASHIRT;
cottage->room.layer_main.items[3][3] = FTR_REDALOHASHIRT;
cottage->room.layer_main.items[3][6] = FTR_BLUEALOHASHIRT;
cottage->room.layer_main.items[6][3] = FTR_REDALOHASHIRT;
cottage->room.layer_main.items[6][6] = FTR_BLUEALOHASHIRT;
}
/**
* @brief Initialize an mHm_cottage_c cottage.
*
*
* @param cottage Pointer to the mHm_cottage_c which will be initialized
**/
extern void mHm_InitCottage(mHm_cottage_c* cottage) {
if (cottage != NULL) {
bzero(cottage, sizeof(mHm_cottage_c));
mHm_SetWallDoor((u16*)cottage->room.layer_main.items, mHm_ROOMTYPE_COTTAGE);
mCkRh_InitGokiSaveData_IslandPlayerRoom();
mHm_SetDefaultCottageData(cottage);
}
if (cottage != NULL) {
bzero(cottage, sizeof(mHm_cottage_c));
mHm_SetWallDoor((u16*)cottage->room.layer_main.items, mHm_ROOMTYPE_COTTAGE);
mCkRh_InitGokiSaveData_IslandPlayerRoom();
mHm_SetDefaultCottageData(cottage);
}
}
+55 -53
View File
@@ -11,7 +11,7 @@
/**
* @brief Initializes the `house_arrangement` variable to its default state.
*
*
* The default state is:
* Player0: House0
* Player1: House1
@@ -19,98 +19,100 @@
* Player3: House3
**/
extern void mHS_house_init() {
Save_Set(house_arrangement, DEFAULT_ARRANGEMENT);
Save_Set(house_arrangement, DEFAULT_ARRANGEMENT);
}
/**
* @brief Retrieves the house arrangement value for a given player index.
*
*
* @return The house index for the player.
**/
extern int mHS_get_arrange_idx(int player_no) {
return ARRANGE_GET(player_no);
return ARRANGE_GET(player_no);
}
/**
* @brief Returns the index of the player who owns the house index from `house_arrangement`.
*
*
* @return The owning player index for the house.
**/
extern int mHS_get_pl_no(int house_no) {
int i;
u32 arrangement = Save_Get(house_arrangement);
int i;
u32 arrangement = Save_Get(house_arrangement);
for (i = 0; i < PLAYER_NUM; i++) {
if ((arrangement & 3) == house_no) {
break;
for (i = 0; i < PLAYER_NUM; i++) {
if ((arrangement & 3) == house_no) {
break;
}
arrangement >>= 2;
}
arrangement >>= 2;
}
return i;
return i;
}
/**
* @brief Returns the index of the player who owns a house by checking house owner IDs.
*
*
* @return The owning player index for the house.
**/
extern int mHS_get_pl_no_detail(int home_no) {
mHm_hs_c* home = Save_Get(homes + (home_no & 3));
mHm_hs_c* home = Save_Get(homes + (home_no & 3));
if (mPr_NullCheckPersonalID(&home->ownerID) == FALSE) {
int i;
for (i = 0; i < PLAYER_NUM; i++) {
if (mPr_CheckCmpPersonalID(&home->ownerID, Save_GetPointer(private[i].player_ID))) {
return i;
}
if (mPr_NullCheckPersonalID(&home->ownerID) == FALSE) {
int i;
for (i = 0; i < PLAYER_NUM; i++) {
if (mPr_CheckCmpPersonalID(&home->ownerID, Save_GetPointer(private_data[i].player_ID))) {
return i;
}
}
}
}
return -1;
return -1;
}
/* TODO: this probably had some macro.. maybe refactor? */
/**
* @brief Sets the house arrangement value for `player_no` to `house_no`.
*
*
* This function also swaps houses with whichever player is set in house_arrangement
* with the house currently assigned to `player_no`.
*
*
* @return TRUE when successfully set, FALSE otherwise.
**/
extern int mHS_set_use(int player_no, int house_no) {
int now_player_no;
u32 house_arrangement;
int mask;
int plr_shift;
int new_shift;
int res = FALSE;
int now_player_no;
u32 house_arrangement;
int mask;
int plr_shift;
int new_shift;
int res = FALSE;
if (player_no < PLAYER_NUM && house_no < PLAYER_NUM) {
now_player_no = mHS_get_pl_no(house_no);
if (mPr_NullCheckPersonalID(Save_GetPointer(homes[house_no].ownerID)) == TRUE) {
if (now_player_no != player_no) {
plr_shift = player_no * 2;
new_shift = now_player_no * 2;
house_arrangement = Save_Get(house_arrangement);
/* create bitmask to clear previous saved indices */
mask = 0xffffffff;
mask ^= (3 << plr_shift) | (3 << new_shift); /* Remove the bits relating to both player indicies */
if (player_no < PLAYER_NUM && house_no < PLAYER_NUM) {
now_player_no = mHS_get_pl_no(house_no);
if (mPr_NullCheckPersonalID(Save_GetPointer(homes[house_no].ownerID)) == TRUE) {
if (now_player_no != player_no) {
plr_shift = player_no * 2;
new_shift = now_player_no * 2;
house_arrangement = Save_Get(house_arrangement);
/* Swap the player who currently owns our selected house with whatever house our player "owns" currently */
Save_Set(house_arrangement, (
((house_arrangement & mask) | /* Clear old values */
(((house_arrangement >> plr_shift) & 3)) << new_shift) | /* move current player house idx to old player house idx */
(house_no << plr_shift))); /* set current player new house idx */
}
/* create bitmask to clear previous saved indices */
mask = 0xffffffff;
mask ^= (3 << plr_shift) | (3 << new_shift); /* Remove the bits relating to both player indicies */
mHm_InitHomeInfo(Save_Get(homes + house_no), player_no);
res = TRUE;
/* Swap the player who currently owns our selected house with whatever house our player "owns" currently
*/
Save_Set(house_arrangement,
(((house_arrangement & mask) | /* Clear old values */
(((house_arrangement >> plr_shift) & 3))
<< new_shift) | /* move current player house idx to old player house idx */
(house_no << plr_shift))); /* set current player new house idx */
}
mHm_InitHomeInfo(Save_Get(homes + house_no), player_no);
res = TRUE;
}
}
}
return res;
return res;
}
+220 -231
View File
@@ -16,365 +16,354 @@ static u8 footer[MAIL_FOOTER2_LEN];
static u8 header[MAIL_HEADER2_LEN];
extern int mMl_strlen(u8* str, int size, u8 end_char) {
u32 end_p = size + (u32)str;
int i;
u32 end_p = size + (u32)str;
int i;
end_p--;
for (size; size != 0; size--) {
if (*(u8*)end_p != end_char) {
return size;
}
end_p--;
}
for (size; size != 0; size--) {
return 0;
if (*(u8*)end_p != end_char) {
return size;
}
end_p--;
}
return 0;
}
extern int mMl_strlen2(int* found, u8* str, int size, u8 end_char) {
int len = 0;
int len = 0;
if (found != NULL) {
*found = FALSE;
}
for (size; size != 0; size--) {
len++;
if (*str == end_char) {
if (found != NULL) {
*found = TRUE;
}
break;
if (found != NULL) {
*found = FALSE;
}
str++;
}
for (size; size != 0; size--) {
len++;
if (*str == end_char) {
if (found != NULL) {
*found = TRUE;
}
break;
}
return len;
str++;
}
return len;
}
extern void mMl_clear_mail_header(Mail_hdr_c* header) {
mPr_ClearPersonalID(&header->recipient.personalID);
header->recipient.type = mMl_NAME_TYPE_CLEAR;
mPr_ClearPersonalID(&header->recipient.personalID);
header->recipient.type = mMl_NAME_TYPE_CLEAR;
mPr_ClearPersonalID(&header->sender.personalID);
header->sender.type = mMl_NAME_TYPE_CLEAR;
mPr_ClearPersonalID(&header->sender.personalID);
header->sender.type = mMl_NAME_TYPE_CLEAR;
}
extern void mMl_clear_mail(Mail_c* mail) {
bzero(mail, sizeof(Mail_c));
mMl_clear_mail_header(&mail->header);
mem_clear(mail->content.header, MAIL_HEADER_LEN + MAIL_BODY_LEN + MAIL_FOOTER_LEN, CHAR_SPACE);
mail->content.font = -1;
bzero(mail, sizeof(Mail_c));
mMl_clear_mail_header(&mail->header);
mem_clear(mail->content.header, MAIL_HEADER_LEN + MAIL_BODY_LEN + MAIL_FOOTER_LEN, CHAR_SPACE);
mail->content.font = -1;
}
extern void mMl_clear_mail_box(Mail_c* mail, int num) {
while (num != 0) {
num--;
mMl_clear_mail(mail);
mail++;
}
while (num != 0) {
num--;
mMl_clear_mail(mail);
mail++;
}
}
extern int mMl_check_not_used_mail(Mail_c* mail) {
int res = FALSE;
if (mail->content.font == 0xFF) {
res = TRUE;
}
int res = FALSE;
if (mail->content.font == 0xFF) {
res = TRUE;
}
return res;
return res;
}
extern void mMl_copy_header_name(Mail_c* dst, Mail_c* src) {
dst->header.recipient.type = src->header.recipient.type;
mPr_CopyPersonalID(&dst->header.recipient.personalID, &src->header.recipient.personalID);
dst->header.recipient.type = src->header.recipient.type;
mPr_CopyPersonalID(&dst->header.recipient.personalID, &src->header.recipient.personalID);
}
extern void mMl_set_to_plname(Mail_c* mail, PersonalID_c* pid) {
mPr_CopyPersonalID(&mail->header.recipient.personalID, pid);
mail->header.recipient.type = mMl_NAME_TYPE_PLAYER;
mPr_CopyPersonalID(&mail->header.recipient.personalID, pid);
mail->header.recipient.type = mMl_NAME_TYPE_PLAYER;
}
extern void mMl_set_playername(Mail_c* mail, PersonalID_c* pid) {
mPr_CopyPersonalID(&mail->header.sender.personalID, pid);
mail->header.sender.type = mMl_NAME_TYPE_PLAYER;
mPr_CopyPersonalID(&mail->header.sender.personalID, pid);
mail->header.sender.type = mMl_NAME_TYPE_PLAYER;
}
extern void mMl_init_mail(Mail_c* mail, PersonalID_c* pid) {
mMl_clear_mail(mail);
mMl_set_playername(mail, pid);
mail->content.font = mMl_FONT_SEND;
mail->content.mail_type = 0;
mail->content.paper_type = 0;
mMl_clear_mail(mail);
mMl_set_playername(mail, pid);
mail->content.font = mMl_FONT_SEND;
mail->content.mail_type = 0;
mail->content.paper_type = 0;
}
extern int mMl_chk_mail_free_space(Mail_c* mail, int num) {
int free_idx;
int free_idx;
for (free_idx = 0; free_idx < num; free_idx++) {
if (mMl_check_not_used_mail(mail) == TRUE) {
return free_idx;
for (free_idx = 0; free_idx < num; free_idx++) {
if (mMl_check_not_used_mail(mail) == TRUE) {
return free_idx;
}
mail++;
}
mail++;
}
return -1;
return -1;
}
extern int mMl_count_use_mail_space(Mail_c* mail, int num) {
int used = 0;
int i;
int used = 0;
int i;
for (i = 0; i < num; i++) {
if (mMl_check_not_used_mail(mail) != TRUE) {
used++;
for (i = 0; i < num; i++) {
if (mMl_check_not_used_mail(mail) != TRUE) {
used++;
}
mail++;
}
mail++;
}
return used;
return used;
}
extern void mMl_copy_mail(Mail_c* dst, Mail_c* src) {
mem_copy((u8*)dst, (u8*)src, sizeof(Mail_c));
mem_copy((u8*)dst, (u8*)src, sizeof(Mail_c));
}
extern void mMl_clear_mail_header_common(Mail_hs_c* header) {
header->header_back_start = -1;
header->unknown = 0;
mem_clear(header->header, MAIL_HEADER_LEN, CHAR_SPACE);
mem_clear(header->footer, MAIL_FOOTER_LEN, CHAR_SPACE);
header->header_back_start = -1;
header->unknown = 0;
mem_clear(header->header, MAIL_HEADER_LEN, CHAR_SPACE);
mem_clear(header->footer, MAIL_FOOTER_LEN, CHAR_SPACE);
}
extern void mMl_set_mail_name_npcinfo(Mail_nm_c* name, AnmPersonalID_c* anm_pid) {
u8 animal_name[PLAYER_NAME_LEN];
name->type = mMl_NAME_TYPE_NPC;
mNpc_GetNpcWorldNameAnm(animal_name, anm_pid);
mPr_CopyPlayerName(name->personalID.player_name, animal_name);
name->personalID.land_id = anm_pid->land_id;
mLd_CopyLandName(name->personalID.land_name, anm_pid->land_name);
name->personalID.player_id = (((anm_pid->npc_id & 0xFF) << 8) | anm_pid->name_id);
u8 animal_name[PLAYER_NAME_LEN];
name->type = mMl_NAME_TYPE_NPC;
mNpc_GetNpcWorldNameAnm(animal_name, anm_pid);
mPr_CopyPlayerName(name->personalID.player_name, animal_name);
name->personalID.land_id = anm_pid->land_id;
mLd_CopyLandName(name->personalID.land_name, anm_pid->land_name);
name->personalID.player_id = (((anm_pid->npc_id & 0xFF) << 8) | anm_pid->name_id);
}
extern int mMl_get_npcinfo_from_mail_name(AnmPersonalID_c* anm_pid, Mail_nm_c* name) {
int res = FALSE;
int res = FALSE;
if (name->type == mMl_NAME_TYPE_NPC) {
anm_pid->npc_id = ((name->personalID.player_id & 0xFF00) >> 8) | NPC_START;
anm_pid->land_id = name->personalID.land_id;
mLd_CopyLandName(anm_pid->land_name, name->personalID.land_name);
anm_pid->name_id = name->personalID.player_id;
anm_pid->looks = mNpc_GetLooks(anm_pid->npc_id);
if (name->type == mMl_NAME_TYPE_NPC) {
anm_pid->npc_id = ((name->personalID.player_id & 0xFF00) >> 8) | NPC_START;
anm_pid->land_id = name->personalID.land_id;
mLd_CopyLandName(anm_pid->land_name, name->personalID.land_name);
anm_pid->name_id = name->personalID.player_id;
anm_pid->looks = mNpc_GetLooks(anm_pid->npc_id);
res = TRUE;
}
res = TRUE;
}
return res;
return res;
}
extern int mMl_hunt_for_send_address(Mail_c* mail) {
int i;
int i;
if (mail->header.recipient.type != mMl_NAME_TYPE_PLAYER) {
return -1;
}
for (i = 0; i < mHS_HOUSE_NUM; i++) {
if (mPr_CheckCmpPersonalID(&Save_Get(homes[i]).ownerID, &mail->header.recipient.personalID) == TRUE) {
return i;
if (mail->header.recipient.type != mMl_NAME_TYPE_PLAYER) {
return -1;
}
}
return -1;
for (i = 0; i < mHS_HOUSE_NUM; i++) {
if (mPr_CheckCmpPersonalID(&Save_Get(homes[i]).ownerID, &mail->header.recipient.personalID) == TRUE) {
return i;
}
}
return -1;
}
extern int mMl_check_send_mail(Mail_c* mail) {
return mail->content.font == mMl_FONT_SEND;
return mail->content.font == mMl_FONT_SEND;
}
extern int mMl_check_set_present_myself(Mail_c* mail) {
u8 font = mail->content.font;
u8 font = mail->content.font;
if (font == mMl_FONT_SEND || font == mMl_FONT_3 || font == mMl_FONT_4) {
return TRUE;
}
if (font == mMl_FONT_SEND || font == mMl_FONT_3 || font == mMl_FONT_4) {
return TRUE;
}
return FALSE;
return FALSE;
}
static void mMl_load_mail_data(Mail_c* mail, int mail_no) {
int header_back_start;
int header_back_start;
mHandbill_Load_HandbillFromRom(mail->content.header, &header_back_start, mail->content.footer, mail->content.body, mail_no);
mail->content.header_back_start = header_back_start;
mHandbill_Load_HandbillFromRom(mail->content.header, &header_back_start, mail->content.footer, mail->content.body,
mail_no);
mail->content.header_back_start = header_back_start;
}
/* TODO: fix bss ordering */
static void mMl_load_mail_data2(Mail_c* mail, int mail_no) {
//static u8 header[MAIL_HEADER2_LEN];
//static u8 footer[MAIL_FOOTER2_LEN];
int header_back_start;
// static u8 header[MAIL_HEADER2_LEN];
// static u8 footer[MAIL_FOOTER2_LEN];
int header_back_start;
mHandbill_Load_HandbillFromRom2(header, MAIL_HEADER2_LEN, &header_back_start, footer, MAIL_FOOTER2_LEN, mail->content.body, mail_no);
mHandbill_Load_HandbillFromRom2(header, MAIL_HEADER2_LEN, &header_back_start, footer, MAIL_FOOTER2_LEN,
mail->content.body, mail_no);
bcopy(header, mail->content.header, MAIL_HEADER_LEN);
bcopy(footer, mail->content.footer, MAIL_FOOTER_LEN);
mail->content.header_back_start = header_back_start;
bcopy(header, mail->content.header, MAIL_HEADER_LEN);
bcopy(footer, mail->content.footer, MAIL_FOOTER_LEN);
mail->content.header_back_start = header_back_start;
}
static void mMl_get_mail_to_player_com(Mail_c* mail, PersonalID_c* recipient_pid, mActor_name_t present, mActor_name_t paper, u8* sender_name, int mail_no, u32 proc_type, u8 mail_type) {
static void (*get_proc[2])(Mail_c*, int) = { &mMl_load_mail_data, &mMl_load_mail_data2 };
proc_type %= 2;
mMl_clear_mail(mail);
(*get_proc[proc_type])(mail, mail_no);
mail->content.font = mMl_FONT_0;
mail->content.mail_type = mail_type;
mPr_CopyPersonalID(&mail->header.recipient.personalID, recipient_pid);
mail->header.recipient.type = mMl_NAME_TYPE_PLAYER;
static void mMl_get_mail_to_player_com(Mail_c* mail, PersonalID_c* recipient_pid, mActor_name_t present,
mActor_name_t paper, u8* sender_name, int mail_no, u32 proc_type, u8 mail_type) {
static void (*get_proc[2])(Mail_c*, int) = { &mMl_load_mail_data, &mMl_load_mail_data2 };
proc_type %= 2;
mPr_ClearPersonalID(&mail->header.sender.personalID);
mPr_CopyPlayerName(mail->header.sender.personalID.player_name, sender_name);
mail->header.sender.type = mMl_NAME_TYPE_MUSEUM;
mail->present = present;
mail->content.paper_type = (paper - ITM_PAPER_START) % PAPER_UNIQUE_NUM;
mMl_clear_mail(mail);
(*get_proc[proc_type])(mail, mail_no);
mail->content.font = mMl_FONT_0;
mail->content.mail_type = mail_type;
mPr_CopyPersonalID(&mail->header.recipient.personalID, recipient_pid);
mail->header.recipient.type = mMl_NAME_TYPE_PLAYER;
mPr_ClearPersonalID(&mail->header.sender.personalID);
mPr_CopyPlayerName(mail->header.sender.personalID.player_name, sender_name);
mail->header.sender.type = mMl_NAME_TYPE_MUSEUM;
mail->present = present;
mail->content.paper_type = (paper - ITM_PAPER_START) % PAPER_UNIQUE_NUM;
}
static int mMl_send_mail_box_com(PersonalID_c* recipient_pid, int player_no, Mail_c* mail, mActor_name_t present, mActor_name_t paper, int mail_no, u8* sender_name, u32 proc_type, u8 mail_type) {
mHm_hs_c* house;
int res = FALSE;
static int mMl_send_mail_box_com(PersonalID_c* recipient_pid, int player_no, Mail_c* mail, mActor_name_t present,
mActor_name_t paper, int mail_no, u8* sender_name, u32 proc_type, u8 mail_type) {
mHm_hs_c* house;
int res = FALSE;
house = Save_GetPointer(homes[mHS_get_arrange_idx(player_no)]);
house = Save_GetPointer(homes[mHS_get_arrange_idx(player_no)]);
if (mPr_CheckCmpPersonalID(recipient_pid, &house->ownerID) == TRUE) {
int free_idx = mMl_chk_mail_free_space(house->mailbox, HOME_MAILBOX_SIZE);
if (free_idx != -1) {
mMl_get_mail_to_player_com(mail, recipient_pid, present, paper, sender_name, mail_no, proc_type, mail_type);
mMl_copy_mail(house->mailbox + free_idx, mail);
res = TRUE;
if (mPr_CheckCmpPersonalID(recipient_pid, &house->ownerID) == TRUE) {
int free_idx = mMl_chk_mail_free_space(house->mailbox, HOME_MAILBOX_SIZE);
if (free_idx != -1) {
mMl_get_mail_to_player_com(mail, recipient_pid, present, paper, sender_name, mail_no, proc_type, mail_type);
mMl_copy_mail(house->mailbox + free_idx, mail);
res = TRUE;
}
}
}
return res;
return res;
}
extern int mMl_send_mail_box(PersonalID_c* recipient_pid, int player_no, Mail_c* mail, mActor_name_t present, mActor_name_t paper, int mail_no, u8* sender_name, u32 proc_type) {
return mMl_send_mail_box_com(recipient_pid, player_no, mail, present, paper, mail_no, sender_name, proc_type, 0);
extern int mMl_send_mail_box(PersonalID_c* recipient_pid, int player_no, Mail_c* mail, mActor_name_t present,
mActor_name_t paper, int mail_no, u8* sender_name, u32 proc_type) {
return mMl_send_mail_box_com(recipient_pid, player_no, mail, present, paper, mail_no, sender_name, proc_type, 0);
}
static int mMl_send_mail_postoffice_com(Mail_c* mail, PersonalID_c* recipient_pid, int player_no, mActor_name_t present, mActor_name_t paper, int mail_no, u8* sender_name, u32 proc_type, u8 mail_type) {
int res = FALSE;
static int mMl_send_mail_postoffice_com(Mail_c* mail, PersonalID_c* recipient_pid, int player_no, mActor_name_t present,
mActor_name_t paper, int mail_no, u8* sender_name, u32 proc_type,
u8 mail_type) {
int res = FALSE;
if (mPO_get_keep_mail_sum() < mPO_MAIL_STORAGE_SIZE) {
mMl_get_mail_to_player_com(mail, recipient_pid, present, paper, sender_name, mail_no, proc_type, mail_type);
res = mPO_receipt_proc(mail, mPO_SENDTYPE_MAIL);
}
if (mPO_get_keep_mail_sum() < mPO_MAIL_STORAGE_SIZE) {
mMl_get_mail_to_player_com(mail, recipient_pid, present, paper, sender_name, mail_no, proc_type, mail_type);
res = mPO_receipt_proc(mail, mPO_SENDTYPE_MAIL);
}
return res;
return res;
}
extern int mMl_send_mail_postoffice(PersonalID_c* recipient_pid, int player_no, mActor_name_t present, mActor_name_t paper, int mail_no, u8* sender_name, u32 proc_type, u8 mail_type) {
return mMl_send_mail_postoffice_com(&l_ml_mail, recipient_pid, player_no, present, paper, mail_no, sender_name, proc_type, mail_type);
extern int mMl_send_mail_postoffice(PersonalID_c* recipient_pid, int player_no, mActor_name_t present,
mActor_name_t paper, int mail_no, u8* sender_name, u32 proc_type, u8 mail_type) {
return mMl_send_mail_postoffice_com(&l_ml_mail, recipient_pid, player_no, present, paper, mail_no, sender_name,
proc_type, mail_type);
}
static int mMl_send_mail_com(PersonalID_c* recipient_pid, int player_no, mActor_name_t present, mActor_name_t paper, int mail_no, u8* sender_name, u32 proc_type, u8 mail_type) {
Mail_c* mail = &l_ml_mail;
int res = mMl_send_mail_box_com(recipient_pid, player_no, mail, present, paper, mail_no, sender_name, proc_type, mail_type);
if (res != TRUE) {
res = mMl_send_mail_postoffice_com(mail, recipient_pid, player_no, present, paper, mail_no, sender_name, proc_type, mail_type);
}
static int mMl_send_mail_com(PersonalID_c* recipient_pid, int player_no, mActor_name_t present, mActor_name_t paper,
int mail_no, u8* sender_name, u32 proc_type, u8 mail_type) {
Mail_c* mail = &l_ml_mail;
int res = mMl_send_mail_box_com(recipient_pid, player_no, mail, present, paper, mail_no, sender_name, proc_type,
mail_type);
if (res != TRUE) {
res = mMl_send_mail_postoffice_com(mail, recipient_pid, player_no, present, paper, mail_no, sender_name,
proc_type, mail_type);
}
return res;
return res;
}
extern int mMl_send_mail(PersonalID_c* recipient_pid, int player_no, mActor_name_t present, mActor_name_t paper, int mail_no, u8* sender_name, u32 proc_type) {
return mMl_send_mail_com(recipient_pid, player_no, present, paper, mail_no, sender_name, proc_type, 0);
extern int mMl_send_mail(PersonalID_c* recipient_pid, int player_no, mActor_name_t present, mActor_name_t paper,
int mail_no, u8* sender_name, u32 proc_type) {
return mMl_send_mail_com(recipient_pid, player_no, present, paper, mail_no, sender_name, proc_type, 0);
}
typedef struct post_office_gift_info_s {
int mail_no;
mActor_name_t present;
mActor_name_t paper;
int player_received_flag;
u32 required_balance;
int mail_no;
mActor_name_t present;
mActor_name_t paper;
int player_received_flag;
u32 required_balance;
} mMl_PostOffice_Info_c;
static mMl_PostOffice_Info_c l_mml_postoffice_info[mMl_POSTOFFICE_GIFT_NUM] = {
{
0x0246,
FTR_TISSUE,
ITM_PAPER00,
mPr_FLAG_POSTOFFICE_GIFT0,
1000000
},
{
0x0247,
FTR_PIGGY_BANK,
ITM_PAPER00,
mPr_FLAG_POSTOFFICE_GIFT1,
10000000
},
{
0x0248,
FTR_MAILBOX,
ITM_PAPER00,
mPr_FLAG_POSTOFFICE_GIFT2,
100000000
},
{
0x0249,
FTR_POST_MODEL,
ITM_PAPER00,
mPr_FLAG_POSTOFFICE_GIFT3,
999999999
}
{ 0x0246, FTR_TISSUE, ITM_PAPER00, mPr_FLAG_POSTOFFICE_GIFT0, 1000000 },
{ 0x0247, FTR_PIGGY_BANK, ITM_PAPER00, mPr_FLAG_POSTOFFICE_GIFT1, 10000000 },
{ 0x0248, FTR_MAILBOX, ITM_PAPER00, mPr_FLAG_POSTOFFICE_GIFT2, 100000000 },
{ 0x0249, FTR_POST_MODEL, ITM_PAPER00, mPr_FLAG_POSTOFFICE_GIFT3, 999999999 }
};
static void mMl_send_postoffice_mail() {
//static u8 free_str[16]; // TODO: fix bss ordering
static u8 debug_name[PLAYER_NAME_LEN] = { 0x91, 0x92, 0x93, 0x94, 0x95, 0x91, 0x00, 0x00 };
// static u8 free_str[16]; // TODO: fix bss ordering
static u8 debug_name[PLAYER_NAME_LEN] = { 0x91, 0x92, 0x93, 0x94, 0x95, 0x91, 0x00, 0x00 };
Private_c* priv = Save_Get(private);
mMl_PostOffice_Info_c* po_info;
int town_name_len;
int i;
Private_c* priv = Save_Get(private_data);
mMl_PostOffice_Info_c* po_info;
int town_name_len;
int i;
town_name_len = mLd_GetLandNameStringAddMura(free_str);
mHandbill_Set_free_str(0, free_str, town_name_len);
town_name_len = mLd_GetLandNameStringAddMura(free_str);
mHandbill_Set_free_str(0, free_str, town_name_len);
for (i = 0; i < PLAYER_NUM; i++) {
if (mPr_NullCheckPersonalID(&priv->player_ID) == FALSE) {
int j;
for (i = 0; i < PLAYER_NUM; i++) {
if (mPr_NullCheckPersonalID(&priv->player_ID) == FALSE) {
int j;
mHandbill_Set_free_str(1, priv->player_ID.player_name, PLAYER_NAME_LEN);
po_info = l_mml_postoffice_info;
for (j = 0; j < mMl_POSTOFFICE_GIFT_NUM; j++) {
if ((priv->bank_account >= po_info->required_balance) &&
(priv->state_flags & po_info->player_received_flag) == FALSE
) {
int res = mMl_send_mail_com(&priv->player_ID, i, po_info->present, po_info->paper, po_info->mail_no, debug_name, 0, 10);
mHandbill_Set_free_str(1, priv->player_ID.player_name, PLAYER_NAME_LEN);
po_info = l_mml_postoffice_info;
for (j = 0; j < mMl_POSTOFFICE_GIFT_NUM; j++) {
if ((priv->bank_account >= po_info->required_balance) &&
(priv->state_flags & po_info->player_received_flag) == FALSE) {
int res = mMl_send_mail_com(&priv->player_ID, i, po_info->present, po_info->paper, po_info->mail_no,
debug_name, 0, 10);
if (res == TRUE) {
priv->state_flags |= po_info->player_received_flag;
}
if (res == TRUE) {
priv->state_flags |= po_info->player_received_flag;
}
break;
break;
}
po_info++;
}
}
po_info++;
}
priv++;
}
priv++;
}
}
extern void mMl_start_send_mail() {
mMl_send_postoffice_mail();
mMl_send_postoffice_mail();
}
+657 -957
View File
File diff suppressed because it is too large Load Diff
+485 -498
View File
File diff suppressed because it is too large Load Diff
+176 -196
View File
@@ -9,371 +9,351 @@
/**
* @brief Initializes all designs' palette indexes for a player.
*
*
* @param player_no The index of the player whose designs will be updated
**/
static void mNW_InitMyOriginalPallet(int player_no) {
static u8 pal_table[mPr_ORIGINAL_DESIGN_COUNT] = {
0, 8, 7, 7,
0, 0, 0, 0
};
static u8 pal_table[mPr_ORIGINAL_DESIGN_COUNT] = { 0, 8, 7, 7, 0, 0, 0, 0 };
int i;
int i;
for (i = 0; i < mPr_ORIGINAL_DESIGN_COUNT; i++) {
Save_Set(private[player_no & 3].my_org[i & 7].palette, pal_table[i]);
}
for (i = 0; i < mPr_ORIGINAL_DESIGN_COUNT; i++) {
Save_Set(private_data[player_no & 3].my_org[i & 7].palette, pal_table[i]);
}
}
/**
* @brief Initializes all designs' names for a player.
*
*
* @param player_no The index of the player whose designs will be renamed
**/
static void mNW_InitMyOriginalName(int player_no) {
int i;
int i;
player_no &= 3;
for (i = 0; i < mPr_ORIGINAL_DESIGN_COUNT; i++) {
/* TODO: define for the string index? */
mString_Load_StringFromRom(
Save_Get(private[player_no].my_org[i & 7].name),
mNW_ORIGINAL_DESIGN_NAME_LEN,
0x6DF + i
);
}
player_no &= 3;
for (i = 0; i < mPr_ORIGINAL_DESIGN_COUNT; i++) {
/* TODO: define for the string index? */
mString_Load_StringFromRom(Save_Get(private_data[player_no].my_org[i & 7].name), mNW_ORIGINAL_DESIGN_NAME_LEN,
0x6DF + i);
}
}
/**
* @brief Initializes all designs' textures for a player.
*
*
* @param player_no The index of the player whose designs will be updated
**/
static void mNW_InitMyOriginalTexture(int player_no) {
int i;
int i;
player_no &= 3;
for (i = 0; i < mNW_DEFAULT_ORIGINAL_TEX_NUM; i++) {
_JW_GetResourceAram(
JW_GetAramAddress(27) + i * mNW_DESIGN_TEX_SIZE,
Save_Get(private[player_no].my_org[i & 7].design.data),
mNW_DESIGN_TEX_SIZE
);
}
player_no &= 3;
for (i = 0; i < mNW_DEFAULT_ORIGINAL_TEX_NUM; i++) {
_JW_GetResourceAram(JW_GetAramAddress(27) + i * mNW_DESIGN_TEX_SIZE,
Save_Get(private_data[player_no].my_org[i & 7].design.data), mNW_DESIGN_TEX_SIZE);
}
}
/**
* @brief Initializes all designs for all players.
**/
extern void mNW_InitMyOriginal() {
int i;
int i;
for (i = 0; i < PLAYER_NUM; i++) {
mNW_InitOneMyOriginal(i);
}
for (i = 0; i < PLAYER_NUM; i++) {
mNW_InitOneMyOriginal(i);
}
}
/**
* @brief Initializes a single player's designs.
*
*
* @param player_no The index of the player whose designs will be initialized.
**/
extern void mNW_InitOneMyOriginal(int player_no) {
int i;
int i;
mNW_InitMyOriginalPallet(player_no & 3);
mNW_InitMyOriginalName(player_no & 3);
mNW_InitMyOriginalTexture(player_no & 3);
mNW_InitMyOriginalPallet(player_no & 3);
mNW_InitMyOriginalName(player_no & 3);
mNW_InitMyOriginalTexture(player_no & 3);
for (i = mNW_DEFAULT_ORIGINAL_TEX_NUM; i < mPr_ORIGINAL_DESIGN_COUNT; i++) {
mNW_InitOriginalData(Save_Get(private[player_no].my_org + (i & 7)));
}
for (i = mNW_DEFAULT_ORIGINAL_TEX_NUM; i < mPr_ORIGINAL_DESIGN_COUNT; i++) {
mNW_InitOriginalData(Save_Get(private_data[player_no].my_org + (i & 7)));
}
}
/**
* @brief Copies a default design texture into the supplied buffer.
*
*
* @param dst The destination design texture buffer
* @param tex_no The index of the texture to retrieve (0-7)
**/
static void mNW_CopyNeedleworkDefaultTexture(u8* dst, int tex_no) {
u32 addr = JW_GetAramAddress(28);
_JW_GetResourceAram(
addr + (tex_no & 7) * mNW_DESIGN_TEX_SIZE,
dst,
mNW_DESIGN_TEX_SIZE
);
u32 addr = JW_GetAramAddress(28);
_JW_GetResourceAram(addr + (tex_no & 7) * mNW_DESIGN_TEX_SIZE, dst, mNW_DESIGN_TEX_SIZE);
}
/**
* @brief Initializes all Able Sisters' designs to their default textures.
**/
static void mNW_InitNeedleworkTexture() {
int i;
int i;
for (i = 0; i < mNW_TOTAL_DESIGN_NUM; i++) {
mNW_CopyNeedleworkDefaultTexture(Save_Get(needlework.original_design[i & 7].design.data), i);
}
for (i = 0; i < mNW_TOTAL_DESIGN_NUM; i++) {
mNW_CopyNeedleworkDefaultTexture(Save_Get(needlework.original_design[i & 7].design.data), i);
}
}
/**
* @brief Initializes all Able Sisters' designs to their default palettes.
**/
static void mNW_InitNeedleworkPelatteNo() {
static u8 pal_table[mNW_TOTAL_DESIGN_NUM] = {
7, 1, 10, 3,
6, 0, 6, 7
};
static u8 pal_table[mNW_TOTAL_DESIGN_NUM] = { 7, 1, 10, 3, 6, 0, 6, 7 };
int i;
int i;
for (i = 0; i < mNW_TOTAL_DESIGN_NUM; i++) {
Save_Set(needlework.original_design[i & 7].palette, pal_table[i]);
}
for (i = 0; i < mNW_TOTAL_DESIGN_NUM; i++) {
Save_Set(needlework.original_design[i & 7].palette, pal_table[i]);
}
}
/**
* @brief Initializes all Able Sisters' designs to their default names.
**/
static void mNW_InitNeedleworkTextureName() {
int i;
int i;
for (i = 0; i < mNW_TOTAL_DESIGN_NUM; i++) {
mString_Load_StringFromRom(
Save_Get(needlework.original_design[i & 7].name),
mNW_ORIGINAL_DESIGN_NAME_LEN,
0x6E7 + i
);
}
for (i = 0; i < mNW_TOTAL_DESIGN_NUM; i++) {
mString_Load_StringFromRom(Save_Get(needlework.original_design[i & 7].name), mNW_ORIGINAL_DESIGN_NAME_LEN,
0x6E7 + i);
}
}
/**
* @brief Initializes all Able Sisters' designs to their default data.
**/
extern void mNW_InitNeedleworkData() {
mNW_InitNeedleworkTexture();
mNW_InitNeedleworkPelatteNo();
mNW_InitNeedleworkTextureName();
mNW_InitNeedleworkTexture();
mNW_InitNeedleworkPelatteNo();
mNW_InitNeedleworkTextureName();
}
/**
* @brief Converts a design texture from GBA format to GC format.
*
*
* @param agb Pointer to the source GBA texture
* @param gc Pointer to the destination GC texture
**/
extern void mNW_AGB_to_GC_texture(u8* agb, u8* gc) {
int i;
int i;
for (i = 0; i < mNW_DESIGN_TEX_SIZE; i++) {
u8 src = *agb++;
*gc++ = (((src >> 4) & 0xF) | ((src & 0xF) << 4));
}
for (i = 0; i < mNW_DESIGN_TEX_SIZE; i++) {
u8 src = *agb++;
*gc++ = (((src >> 4) & 0xF) | ((src & 0xF) << 4));
}
}
/**
* @brief Converts a design texture from GC format to GBA format.
*
*
* @param gc Pointer to the source GC texture
* @param agb Pointer to the destination GBA texture
**/
extern void mNW_GC_to_Agb_texture(u8* gc, u8* agb) {
mNW_AGB_to_GC_texture(gc, agb);
mNW_AGB_to_GC_texture(gc, agb);
}
/* RGB5A3 color palettes for each pattern palette aligned to 32 bytes */
/* These are aligned to 32 bytes for transfering to-and-from ARAM */
static u16 needlework0_pal[16] ATTRIBUTE_ALIGN(32) = {
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFCE4A4A), ARGB8_to_RGB5A3(0xFFDE8442), ARGB8_to_RGB5A3(0xFFE7AD18),
ARGB8_to_RGB5A3(0xFFE7C621), ARGB8_to_RGB5A3(0xFFD6DE18), ARGB8_to_RGB5A3(0xFFB5E718), ARGB8_to_RGB5A3(0xFF84D652),
ARGB8_to_RGB5A3(0xFF39C66B), ARGB8_to_RGB5A3(0xFF29ADC6), ARGB8_to_RGB5A3(0xFF427BEF), ARGB8_to_RGB5A3(0xFF6B4AE7),
ARGB8_to_RGB5A3(0xFF945ACE), ARGB8_to_RGB5A3(0xFFBD42B5), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFCE4A4A), ARGB8_to_RGB5A3(0xFFDE8442), ARGB8_to_RGB5A3(0xFFE7AD18),
ARGB8_to_RGB5A3(0xFFE7C621), ARGB8_to_RGB5A3(0xFFD6DE18), ARGB8_to_RGB5A3(0xFFB5E718), ARGB8_to_RGB5A3(0xFF84D652),
ARGB8_to_RGB5A3(0xFF39C66B), ARGB8_to_RGB5A3(0xFF29ADC6), ARGB8_to_RGB5A3(0xFF427BEF), ARGB8_to_RGB5A3(0xFF6B4AE7),
ARGB8_to_RGB5A3(0xFF945ACE), ARGB8_to_RGB5A3(0xFFBD42B5), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
};
static u16 needlework1_pal[16] ATTRIBUTE_ALIGN(32) = {
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFFF8C8C), ARGB8_to_RGB5A3(0xFFFFCE84), ARGB8_to_RGB5A3(0xFFFFE75A),
ARGB8_to_RGB5A3(0xFFFFF763), ARGB8_to_RGB5A3(0xFFFFFF84), ARGB8_to_RGB5A3(0xFFDEFF52), ARGB8_to_RGB5A3(0xFFB5FF84),
ARGB8_to_RGB5A3(0xFF7BF7AD), ARGB8_to_RGB5A3(0xFF63E7F7), ARGB8_to_RGB5A3(0xFF84C6FF), ARGB8_to_RGB5A3(0xFFA59CFF),
ARGB8_to_RGB5A3(0xFFD69CFF), ARGB8_to_RGB5A3(0xFFFF9CF7), ARGB8_to_RGB5A3(0xFF8C8C8C), ARGB8_to_RGB5A3(0xFFFFFFFF),
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFFF8C8C), ARGB8_to_RGB5A3(0xFFFFCE84), ARGB8_to_RGB5A3(0xFFFFE75A),
ARGB8_to_RGB5A3(0xFFFFF763), ARGB8_to_RGB5A3(0xFFFFFF84), ARGB8_to_RGB5A3(0xFFDEFF52), ARGB8_to_RGB5A3(0xFFB5FF84),
ARGB8_to_RGB5A3(0xFF7BF7AD), ARGB8_to_RGB5A3(0xFF63E7F7), ARGB8_to_RGB5A3(0xFF84C6FF), ARGB8_to_RGB5A3(0xFFA59CFF),
ARGB8_to_RGB5A3(0xFFD69CFF), ARGB8_to_RGB5A3(0xFFFF9CF7), ARGB8_to_RGB5A3(0xFF8C8C8C), ARGB8_to_RGB5A3(0xFFFFFFFF),
};
static u16 needlework2_pal[16] ATTRIBUTE_ALIGN(32) = {
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF9C1818), ARGB8_to_RGB5A3(0xFFAD5208), ARGB8_to_RGB5A3(0xFFB57B00),
ARGB8_to_RGB5A3(0xFFB59400), ARGB8_to_RGB5A3(0xFFA5AD00), ARGB8_to_RGB5A3(0xFF84B500), ARGB8_to_RGB5A3(0xFF52A531),
ARGB8_to_RGB5A3(0xFF089439), ARGB8_to_RGB5A3(0xFF007B94), ARGB8_to_RGB5A3(0xFF104ABD), ARGB8_to_RGB5A3(0xFF3918AD),
ARGB8_to_RGB5A3(0xFF5A2994), ARGB8_to_RGB5A3(0xFF8C087B), ARGB8_to_RGB5A3(0xFF080808), ARGB8_to_RGB5A3(0xFFFFFFFF),
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF9C1818), ARGB8_to_RGB5A3(0xFFAD5208), ARGB8_to_RGB5A3(0xFFB57B00),
ARGB8_to_RGB5A3(0xFFB59400), ARGB8_to_RGB5A3(0xFFA5AD00), ARGB8_to_RGB5A3(0xFF84B500), ARGB8_to_RGB5A3(0xFF52A531),
ARGB8_to_RGB5A3(0xFF089439), ARGB8_to_RGB5A3(0xFF007B94), ARGB8_to_RGB5A3(0xFF104ABD), ARGB8_to_RGB5A3(0xFF3918AD),
ARGB8_to_RGB5A3(0xFF5A2994), ARGB8_to_RGB5A3(0xFF8C087B), ARGB8_to_RGB5A3(0xFF080808), ARGB8_to_RGB5A3(0xFFFFFFFF),
};
static u16 needlework3_pal[16] ATTRIBUTE_ALIGN(32) = {
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF42945A), ARGB8_to_RGB5A3(0xFF73C68C), ARGB8_to_RGB5A3(0xFF94E7AD),
ARGB8_to_RGB5A3(0xFF008C7B), ARGB8_to_RGB5A3(0xFF5AB5AD), ARGB8_to_RGB5A3(0xFF84C6C6), ARGB8_to_RGB5A3(0xFF2173A5),
ARGB8_to_RGB5A3(0xFF4A9CCE), ARGB8_to_RGB5A3(0xFF6BADDE), ARGB8_to_RGB5A3(0xFF7384BD), ARGB8_to_RGB5A3(0xFF6B73AD),
ARGB8_to_RGB5A3(0xFF525294), ARGB8_to_RGB5A3(0xFF39397B), ARGB8_to_RGB5A3(0xFF181863), ARGB8_to_RGB5A3(0xFFFFFFFF),
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF42945A), ARGB8_to_RGB5A3(0xFF73C68C), ARGB8_to_RGB5A3(0xFF94E7AD),
ARGB8_to_RGB5A3(0xFF008C7B), ARGB8_to_RGB5A3(0xFF5AB5AD), ARGB8_to_RGB5A3(0xFF84C6C6), ARGB8_to_RGB5A3(0xFF2173A5),
ARGB8_to_RGB5A3(0xFF4A9CCE), ARGB8_to_RGB5A3(0xFF6BADDE), ARGB8_to_RGB5A3(0xFF7384BD), ARGB8_to_RGB5A3(0xFF6B73AD),
ARGB8_to_RGB5A3(0xFF525294), ARGB8_to_RGB5A3(0xFF39397B), ARGB8_to_RGB5A3(0xFF181863), ARGB8_to_RGB5A3(0xFFFFFFFF),
};
static u16 needlework4_pal[16] ATTRIBUTE_ALIGN(32) = {
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF9C8452), ARGB8_to_RGB5A3(0xFFBD945A), ARGB8_to_RGB5A3(0xFFD6BD84),
ARGB8_to_RGB5A3(0xFF9C5252), ARGB8_to_RGB5A3(0xFFCE7363), ARGB8_to_RGB5A3(0xFFEF9C8C), ARGB8_to_RGB5A3(0xFF8C6384),
ARGB8_to_RGB5A3(0xFFA584B5), ARGB8_to_RGB5A3(0xFFDEB5DE), ARGB8_to_RGB5A3(0xFFBD8484), ARGB8_to_RGB5A3(0xFFAD736B),
ARGB8_to_RGB5A3(0xFF945252), ARGB8_to_RGB5A3(0xFF7B3939), ARGB8_to_RGB5A3(0xFF631810), ARGB8_to_RGB5A3(0xFFFFFFFF),
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF9C8452), ARGB8_to_RGB5A3(0xFFBD945A), ARGB8_to_RGB5A3(0xFFD6BD84),
ARGB8_to_RGB5A3(0xFF9C5252), ARGB8_to_RGB5A3(0xFFCE7363), ARGB8_to_RGB5A3(0xFFEF9C8C), ARGB8_to_RGB5A3(0xFF8C6384),
ARGB8_to_RGB5A3(0xFFA584B5), ARGB8_to_RGB5A3(0xFFDEB5DE), ARGB8_to_RGB5A3(0xFFBD8484), ARGB8_to_RGB5A3(0xFFAD736B),
ARGB8_to_RGB5A3(0xFF945252), ARGB8_to_RGB5A3(0xFF7B3939), ARGB8_to_RGB5A3(0xFF631810), ARGB8_to_RGB5A3(0xFFFFFFFF),
};
static u16 needlework5_pal[16] ATTRIBUTE_ALIGN(32) = {
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFEF5A00), ARGB8_to_RGB5A3(0xFFFF9C42), ARGB8_to_RGB5A3(0xFFFFCE84),
ARGB8_to_RGB5A3(0xFFFFEFA5), ARGB8_to_RGB5A3(0xFF8C4A29), ARGB8_to_RGB5A3(0xFFB57B5A), ARGB8_to_RGB5A3(0xFFE7AD8C),
ARGB8_to_RGB5A3(0xFFFFDEBD), ARGB8_to_RGB5A3(0xFF318CFF), ARGB8_to_RGB5A3(0xFF63B5FF), ARGB8_to_RGB5A3(0xFF9CDEFF),
ARGB8_to_RGB5A3(0xFFC6E7FF), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFEF5A00), ARGB8_to_RGB5A3(0xFFFF9C42), ARGB8_to_RGB5A3(0xFFFFCE84),
ARGB8_to_RGB5A3(0xFFFFEFA5), ARGB8_to_RGB5A3(0xFF8C4A29), ARGB8_to_RGB5A3(0xFFB57B5A), ARGB8_to_RGB5A3(0xFFE7AD8C),
ARGB8_to_RGB5A3(0xFFFFDEBD), ARGB8_to_RGB5A3(0xFF318CFF), ARGB8_to_RGB5A3(0xFF63B5FF), ARGB8_to_RGB5A3(0xFF9CDEFF),
ARGB8_to_RGB5A3(0xFFC6E7FF), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
};
static u16 needlework6_pal[16] ATTRIBUTE_ALIGN(32) = {
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF39B542), ARGB8_to_RGB5A3(0xFF63DE5A), ARGB8_to_RGB5A3(0xFF8CEF84),
ARGB8_to_RGB5A3(0xFFB5FFAD), ARGB8_to_RGB5A3(0xFF2121C6), ARGB8_to_RGB5A3(0xFF5252F7), ARGB8_to_RGB5A3(0xFF8484FF),
ARGB8_to_RGB5A3(0xFFB5B5FF), ARGB8_to_RGB5A3(0xFFCE3939), ARGB8_to_RGB5A3(0xFFDE6B6B), ARGB8_to_RGB5A3(0xFFE78C9C),
ARGB8_to_RGB5A3(0xFFEFBDBD), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF39B542), ARGB8_to_RGB5A3(0xFF63DE5A), ARGB8_to_RGB5A3(0xFF8CEF84),
ARGB8_to_RGB5A3(0xFFB5FFAD), ARGB8_to_RGB5A3(0xFF2121C6), ARGB8_to_RGB5A3(0xFF5252F7), ARGB8_to_RGB5A3(0xFF8484FF),
ARGB8_to_RGB5A3(0xFFB5B5FF), ARGB8_to_RGB5A3(0xFFCE3939), ARGB8_to_RGB5A3(0xFFDE6B6B), ARGB8_to_RGB5A3(0xFFE78C9C),
ARGB8_to_RGB5A3(0xFFEFBDBD), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
};
static u16 needlework7_pal[16] ATTRIBUTE_ALIGN(32) = {
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF082100), ARGB8_to_RGB5A3(0xFF425A39), ARGB8_to_RGB5A3(0xFF6B8463),
ARGB8_to_RGB5A3(0xFF9CB594), ARGB8_to_RGB5A3(0xFF5A2900), ARGB8_to_RGB5A3(0xFF7B4A21), ARGB8_to_RGB5A3(0xFFA5734A),
ARGB8_to_RGB5A3(0xFFD6A57B), ARGB8_to_RGB5A3(0xFF947B00), ARGB8_to_RGB5A3(0xFFB59439), ARGB8_to_RGB5A3(0xFFCEB56B),
ARGB8_to_RGB5A3(0xFFDED69C), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF082100), ARGB8_to_RGB5A3(0xFF425A39), ARGB8_to_RGB5A3(0xFF6B8463),
ARGB8_to_RGB5A3(0xFF9CB594), ARGB8_to_RGB5A3(0xFF5A2900), ARGB8_to_RGB5A3(0xFF7B4A21), ARGB8_to_RGB5A3(0xFFA5734A),
ARGB8_to_RGB5A3(0xFFD6A57B), ARGB8_to_RGB5A3(0xFF947B00), ARGB8_to_RGB5A3(0xFFB59439), ARGB8_to_RGB5A3(0xFFCEB56B),
ARGB8_to_RGB5A3(0xFFDED69C), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
};
static u16 needlework8_pal[16] ATTRIBUTE_ALIGN(32) = {
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF2121FF), ARGB8_to_RGB5A3(0xFFFF2121), ARGB8_to_RGB5A3(0xFFD6D600),
ARGB8_to_RGB5A3(0xFF6363FF), ARGB8_to_RGB5A3(0xFFFF6363), ARGB8_to_RGB5A3(0xFFD6D663), ARGB8_to_RGB5A3(0xFF9494FF),
ARGB8_to_RGB5A3(0xFFFF9494), ARGB8_to_RGB5A3(0xFFD6D694), ARGB8_to_RGB5A3(0xFFADADFF), ARGB8_to_RGB5A3(0xFFFFADAD),
ARGB8_to_RGB5A3(0xFFE7E7AD), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF2121FF), ARGB8_to_RGB5A3(0xFFFF2121), ARGB8_to_RGB5A3(0xFFD6D600),
ARGB8_to_RGB5A3(0xFF6363FF), ARGB8_to_RGB5A3(0xFFFF6363), ARGB8_to_RGB5A3(0xFFD6D663), ARGB8_to_RGB5A3(0xFF9494FF),
ARGB8_to_RGB5A3(0xFFFF9494), ARGB8_to_RGB5A3(0xFFD6D694), ARGB8_to_RGB5A3(0xFFADADFF), ARGB8_to_RGB5A3(0xFFFFADAD),
ARGB8_to_RGB5A3(0xFFE7E7AD), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
};
static u16 needlework9_pal[16] ATTRIBUTE_ALIGN(32) = {
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF21A521), ARGB8_to_RGB5A3(0xFF39ADFF), ARGB8_to_RGB5A3(0xFF9C52EF),
ARGB8_to_RGB5A3(0xFF52BD52), ARGB8_to_RGB5A3(0xFF5AC6FF), ARGB8_to_RGB5A3(0xFFB59CFF), ARGB8_to_RGB5A3(0xFF6BD673),
ARGB8_to_RGB5A3(0xFF8CE7FF), ARGB8_to_RGB5A3(0xFFCEB5FF), ARGB8_to_RGB5A3(0xFF94DEAD), ARGB8_to_RGB5A3(0xFFBDF7FF),
ARGB8_to_RGB5A3(0xFFD6CEFF), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFF21A521), ARGB8_to_RGB5A3(0xFF39ADFF), ARGB8_to_RGB5A3(0xFF9C52EF),
ARGB8_to_RGB5A3(0xFF52BD52), ARGB8_to_RGB5A3(0xFF5AC6FF), ARGB8_to_RGB5A3(0xFFB59CFF), ARGB8_to_RGB5A3(0xFF6BD673),
ARGB8_to_RGB5A3(0xFF8CE7FF), ARGB8_to_RGB5A3(0xFFCEB5FF), ARGB8_to_RGB5A3(0xFF94DEAD), ARGB8_to_RGB5A3(0xFFBDF7FF),
ARGB8_to_RGB5A3(0xFFD6CEFF), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
};
static u16 needlework10_pal[16] ATTRIBUTE_ALIGN(32) = {
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFD60000), ARGB8_to_RGB5A3(0xFFFFBD00), ARGB8_to_RGB5A3(0xFFEFF731),
ARGB8_to_RGB5A3(0xFF4ACE42), ARGB8_to_RGB5A3(0xFF299C29), ARGB8_to_RGB5A3(0xFF528CBD), ARGB8_to_RGB5A3(0xFF424AAD),
ARGB8_to_RGB5A3(0xFF9452D6), ARGB8_to_RGB5A3(0xFFF77BDE), ARGB8_to_RGB5A3(0xFFA59439), ARGB8_to_RGB5A3(0xFF9C4242),
ARGB8_to_RGB5A3(0xFF5A3139), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFD60000), ARGB8_to_RGB5A3(0xFFFFBD00), ARGB8_to_RGB5A3(0xFFEFF731),
ARGB8_to_RGB5A3(0xFF4ACE42), ARGB8_to_RGB5A3(0xFF299C29), ARGB8_to_RGB5A3(0xFF528CBD), ARGB8_to_RGB5A3(0xFF424AAD),
ARGB8_to_RGB5A3(0xFF9452D6), ARGB8_to_RGB5A3(0xFFF77BDE), ARGB8_to_RGB5A3(0xFFA59439), ARGB8_to_RGB5A3(0xFF9C4242),
ARGB8_to_RGB5A3(0xFF5A3139), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
};
static u16 needlework11_pal[16] ATTRIBUTE_ALIGN(32) = {
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFE7CE18), ARGB8_to_RGB5A3(0xFF21C618), ARGB8_to_RGB5A3(0xFFFF6B00),
ARGB8_to_RGB5A3(0xFF0000FF), ARGB8_to_RGB5A3(0xFF9400BD), ARGB8_to_RGB5A3(0xFFE7CE18), ARGB8_to_RGB5A3(0xFF00A500),
ARGB8_to_RGB5A3(0xFFCE4200), ARGB8_to_RGB5A3(0xFF0000D6), ARGB8_to_RGB5A3(0xFF5A008C), ARGB8_to_RGB5A3(0xFF9C8C18),
ARGB8_to_RGB5A3(0xFF008400), ARGB8_to_RGB5A3(0xFFA52100), ARGB8_to_RGB5A3(0xFF0000A5), ARGB8_to_RGB5A3(0xFF4A005A),
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFE7CE18), ARGB8_to_RGB5A3(0xFF21C618), ARGB8_to_RGB5A3(0xFFFF6B00),
ARGB8_to_RGB5A3(0xFF0000FF), ARGB8_to_RGB5A3(0xFF9400BD), ARGB8_to_RGB5A3(0xFFE7CE18), ARGB8_to_RGB5A3(0xFF00A500),
ARGB8_to_RGB5A3(0xFFCE4200), ARGB8_to_RGB5A3(0xFF0000D6), ARGB8_to_RGB5A3(0xFF5A008C), ARGB8_to_RGB5A3(0xFF9C8C18),
ARGB8_to_RGB5A3(0xFF008400), ARGB8_to_RGB5A3(0xFFA52100), ARGB8_to_RGB5A3(0xFF0000A5), ARGB8_to_RGB5A3(0xFF4A005A),
};
static u16 needlework12_pal[16] ATTRIBUTE_ALIGN(32) = {
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFFF2121), ARGB8_to_RGB5A3(0xFFE7D600), ARGB8_to_RGB5A3(0xFFF739BD),
ARGB8_to_RGB5A3(0xFF00D69C), ARGB8_to_RGB5A3(0xFF107310), ARGB8_to_RGB5A3(0xFFC62121), ARGB8_to_RGB5A3(0xFFBDA500),
ARGB8_to_RGB5A3(0xFFCE3994), ARGB8_to_RGB5A3(0xFF009C6B), ARGB8_to_RGB5A3(0xFF214A21), ARGB8_to_RGB5A3(0xFF8C2121),
ARGB8_to_RGB5A3(0xFF846B00), ARGB8_to_RGB5A3(0xFF941863), ARGB8_to_RGB5A3(0xFF00734A), ARGB8_to_RGB5A3(0xFF183918),
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFFF2121), ARGB8_to_RGB5A3(0xFFE7D600), ARGB8_to_RGB5A3(0xFFF739BD),
ARGB8_to_RGB5A3(0xFF00D69C), ARGB8_to_RGB5A3(0xFF107310), ARGB8_to_RGB5A3(0xFFC62121), ARGB8_to_RGB5A3(0xFFBDA500),
ARGB8_to_RGB5A3(0xFFCE3994), ARGB8_to_RGB5A3(0xFF009C6B), ARGB8_to_RGB5A3(0xFF214A21), ARGB8_to_RGB5A3(0xFF8C2121),
ARGB8_to_RGB5A3(0xFF846B00), ARGB8_to_RGB5A3(0xFF941863), ARGB8_to_RGB5A3(0xFF00734A), ARGB8_to_RGB5A3(0xFF183918),
};
static u16 needlework13_pal[16] ATTRIBUTE_ALIGN(32) = {
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFEFD6D6), ARGB8_to_RGB5A3(0xFFDEC6C6), ARGB8_to_RGB5A3(0xFFCEB5B5),
ARGB8_to_RGB5A3(0xFFBDA5A5), ARGB8_to_RGB5A3(0xFFAD9494), ARGB8_to_RGB5A3(0xFF9C8484), ARGB8_to_RGB5A3(0xFF8C7373),
ARGB8_to_RGB5A3(0xFF7B6363), ARGB8_to_RGB5A3(0xFF6B5252), ARGB8_to_RGB5A3(0xFF5A4242), ARGB8_to_RGB5A3(0xFF4A3131),
ARGB8_to_RGB5A3(0xFF392121), ARGB8_to_RGB5A3(0xFF291010), ARGB8_to_RGB5A3(0xFF180000), ARGB8_to_RGB5A3(0xFF100000),
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFEFD6D6), ARGB8_to_RGB5A3(0xFFDEC6C6), ARGB8_to_RGB5A3(0xFFCEB5B5),
ARGB8_to_RGB5A3(0xFFBDA5A5), ARGB8_to_RGB5A3(0xFFAD9494), ARGB8_to_RGB5A3(0xFF9C8484), ARGB8_to_RGB5A3(0xFF8C7373),
ARGB8_to_RGB5A3(0xFF7B6363), ARGB8_to_RGB5A3(0xFF6B5252), ARGB8_to_RGB5A3(0xFF5A4242), ARGB8_to_RGB5A3(0xFF4A3131),
ARGB8_to_RGB5A3(0xFF392121), ARGB8_to_RGB5A3(0xFF291010), ARGB8_to_RGB5A3(0xFF180000), ARGB8_to_RGB5A3(0xFF100000),
};
static u16 needlework14_pal[16] ATTRIBUTE_ALIGN(32) = {
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFEFEFEF), ARGB8_to_RGB5A3(0xFFDEDEDE), ARGB8_to_RGB5A3(0xFFCECECE),
ARGB8_to_RGB5A3(0xFFBDBDBD), ARGB8_to_RGB5A3(0xFFADADAD), ARGB8_to_RGB5A3(0xFF9C9C9C), ARGB8_to_RGB5A3(0xFF8C8C8C),
ARGB8_to_RGB5A3(0xFF7B7B7B), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF5A5A5A), ARGB8_to_RGB5A3(0xFF4A4A4A),
ARGB8_to_RGB5A3(0xFF393939), ARGB8_to_RGB5A3(0xFF292929), ARGB8_to_RGB5A3(0xFF181818), ARGB8_to_RGB5A3(0xFF101010),
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFEFEFEF), ARGB8_to_RGB5A3(0xFFDEDEDE), ARGB8_to_RGB5A3(0xFFCECECE),
ARGB8_to_RGB5A3(0xFFBDBDBD), ARGB8_to_RGB5A3(0xFFADADAD), ARGB8_to_RGB5A3(0xFF9C9C9C), ARGB8_to_RGB5A3(0xFF8C8C8C),
ARGB8_to_RGB5A3(0xFF7B7B7B), ARGB8_to_RGB5A3(0xFF6B6B6B), ARGB8_to_RGB5A3(0xFF5A5A5A), ARGB8_to_RGB5A3(0xFF4A4A4A),
ARGB8_to_RGB5A3(0xFF393939), ARGB8_to_RGB5A3(0xFF292929), ARGB8_to_RGB5A3(0xFF181818), ARGB8_to_RGB5A3(0xFF101010),
};
static u16 needlework15_pal[16] ATTRIBUTE_ALIGN(32) = {
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFEF7B7B), ARGB8_to_RGB5A3(0xFFD61818), ARGB8_to_RGB5A3(0xFFF79418),
ARGB8_to_RGB5A3(0xFFE7E752), ARGB8_to_RGB5A3(0xFF006B00), ARGB8_to_RGB5A3(0xFF39B539), ARGB8_to_RGB5A3(0xFF0039B5),
ARGB8_to_RGB5A3(0xFF399CFF), ARGB8_to_RGB5A3(0xFF940094), ARGB8_to_RGB5A3(0xFFFF6BFF), ARGB8_to_RGB5A3(0xFF944208),
ARGB8_to_RGB5A3(0xFFEF9C5A), ARGB8_to_RGB5A3(0xFFFFC694), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
ARGB8_to_RGB5A3(0xFF525252), ARGB8_to_RGB5A3(0xFFEF7B7B), ARGB8_to_RGB5A3(0xFFD61818), ARGB8_to_RGB5A3(0xFFF79418),
ARGB8_to_RGB5A3(0xFFE7E752), ARGB8_to_RGB5A3(0xFF006B00), ARGB8_to_RGB5A3(0xFF39B539), ARGB8_to_RGB5A3(0xFF0039B5),
ARGB8_to_RGB5A3(0xFF399CFF), ARGB8_to_RGB5A3(0xFF940094), ARGB8_to_RGB5A3(0xFFFF6BFF), ARGB8_to_RGB5A3(0xFF944208),
ARGB8_to_RGB5A3(0xFFEF9C5A), ARGB8_to_RGB5A3(0xFFFFC694), ARGB8_to_RGB5A3(0xFF000000), ARGB8_to_RGB5A3(0xFFFFFFFF),
};
static u16* mNW_needlework_pallet_table[mNW_PALETTE_COUNT] = {
needlework0_pal, needlework1_pal, needlework2_pal, needlework3_pal,
needlework4_pal, needlework5_pal, needlework6_pal, needlework7_pal,
needlework8_pal, needlework9_pal, needlework10_pal, needlework11_pal,
needlework12_pal, needlework13_pal, needlework14_pal, needlework15_pal
needlework0_pal, needlework1_pal, needlework2_pal, needlework3_pal, needlework4_pal, needlework5_pal,
needlework6_pal, needlework7_pal, needlework8_pal, needlework9_pal, needlework10_pal, needlework11_pal,
needlework12_pal, needlework13_pal, needlework14_pal, needlework15_pal
};
/**
* @brief Gets a pointer to the requested palette color data.
*
*
* @param palette_idx Index of the palette to retrieve (0-15)
* @return Palette color data pointer
**/
extern u16* mNW_PaletteIdx2Palette(int palette_idx) {
return mNW_needlework_pallet_table[palette_idx & 15];
return mNW_needlework_pallet_table[palette_idx & 15];
}
/**
* @brief Copies one design class to another and updates data cache.
*
*
* @param dst Destination design class
* @param src Source design class
**/
extern void mNW_CopyOriginalTextureClass(mNW_original_design_c* dst, mNW_original_design_c* src) {
bcopy(src, dst, sizeof(mNW_original_design_c));
DCStoreRangeNoSync(dst->design.data, mNW_DESIGN_TEX_SIZE);
bcopy(src, dst, sizeof(mNW_original_design_c));
DCStoreRangeNoSync(dst->design.data, mNW_DESIGN_TEX_SIZE);
}
/**
* @brief Copies a design's texture data to a block of memory and updates data cache.
*
*
* @param dst Destination pointer
* @param src Source design class
**/
extern void mNW_CopyOriginalTexture(void* dst, mNW_original_design_c* src) {
if (dst != NULL) {
bcopy(src->design.data, dst, mNW_DESIGN_TEX_SIZE);
DCStoreRangeNoSync(dst, mNW_DESIGN_TEX_SIZE);
}
if (dst != NULL) {
bcopy(src->design.data, dst, mNW_DESIGN_TEX_SIZE);
DCStoreRangeNoSync(dst, mNW_DESIGN_TEX_SIZE);
}
}
/**
* @brief Copies a design's palette colors to a block of memory and updates data cache.
*
*
* @param dst Destination pointer
* @param src Source design class
**/
extern void mNW_CopyOriginalPalette(void* dst, mNW_original_design_c* src) {
if (dst != NULL) {
bcopy(mNW_PaletteIdx2Palette(src->palette), dst, 16 * sizeof(u16));
DCStoreRangeNoSync(dst, 16 * sizeof(u16));
}
if (dst != NULL) {
bcopy(mNW_PaletteIdx2Palette(src->palette), dst, 16 * sizeof(u16));
DCStoreRangeNoSync(dst, 16 * sizeof(u16));
}
}
/**
* @brief Copies a block of memory to a design's texture data and updates data cache.
*
*
* @param dst The destination design class
* @param src Source data pointer
**/
extern void mNW_OverWriteOriginalTexture(mNW_original_design_c* dst, u8* src) {
if (src != NULL) {
u8* tex = dst->design.data;
bcopy(src, tex, mNW_DESIGN_TEX_SIZE);
DCStoreRangeNoSync(tex, mNW_DESIGN_TEX_SIZE);
}
if (src != NULL) {
u8* tex = dst->design.data;
bcopy(src, tex, mNW_DESIGN_TEX_SIZE);
DCStoreRangeNoSync(tex, mNW_DESIGN_TEX_SIZE);
}
}
/**
* @brief Copies a block of memory to a design's name.
*
*
* @param dst The destination design class
* @param src Source name pointer
**/
extern void mNW_OverWriteOriginalName(mNW_original_design_c* dst, u8* src) {
if (src != NULL) {
bcopy(src, dst->name, mNW_ORIGINAL_DESIGN_NAME_LEN);
}
if (src != NULL) {
bcopy(src, dst->name, mNW_ORIGINAL_DESIGN_NAME_LEN);
}
}
/* swap buffer for original design */
@@ -381,48 +361,48 @@ static mNW_original_design_c mNW_swap_work;
/**
* @brief Swaps two design classes' data in memory and updates data cache.
*
*
* @param org0 First design class
* @param org1 Second design class
**/
extern void mNW_SwapOriginalData(mNW_original_design_c* org0, mNW_original_design_c* org1) {
bcopy(org0, &mNW_swap_work, sizeof(mNW_original_design_c));
bcopy(org1, org0, sizeof(mNW_original_design_c));
bcopy(&mNW_swap_work, org1, sizeof(mNW_original_design_c));
DCStoreRangeNoSync(org0->design.data, mNW_DESIGN_TEX_SIZE);
DCStoreRangeNoSync(org1->design.data, mNW_DESIGN_TEX_SIZE);
bcopy(org0, &mNW_swap_work, sizeof(mNW_original_design_c));
bcopy(org1, org0, sizeof(mNW_original_design_c));
bcopy(&mNW_swap_work, org1, sizeof(mNW_original_design_c));
DCStoreRangeNoSync(org0->design.data, mNW_DESIGN_TEX_SIZE);
DCStoreRangeNoSync(org1->design.data, mNW_DESIGN_TEX_SIZE);
}
/**
* @brief Initializes a design class to 'blank' data.
*
*
* @param design The design which will be initialized
**/
extern void mNW_InitOriginalData(mNW_original_design_c* design) {
static u8 name[mNW_ORIGINAL_DESIGN_NAME_LEN] = "blank ";
static u8 name[mNW_ORIGINAL_DESIGN_NAME_LEN] = "blank ";
u8* tex;
mNW_OverWriteOriginalName(design, name);
tex = design->design.data;
mem_clear(tex, mNW_DESIGN_TEX_SIZE, 0xFF);
DCStoreRangeNoSync(tex, mNW_DESIGN_TEX_SIZE);
design->palette = 0;
u8* tex;
mNW_OverWriteOriginalName(design, name);
tex = design->design.data;
mem_clear(tex, mNW_DESIGN_TEX_SIZE, 0xFF);
DCStoreRangeNoSync(tex, mNW_DESIGN_TEX_SIZE);
design->palette = 0;
}
/**
* @brief Initializes a player's design related data to the default state.
*
*
* @param player_no The index of the player whose design data will be initialized
**/
extern void mNW_InitPrivateOriginalData(int player_no) {
int i;
Private_c* private = Save_Get(private + player_no);
int i;
Private_c* private = Save_Get(private_data + player_no);
for (i = 0; i < mPr_ORIGINAL_DESIGN_COUNT; i++) {
private->my_org_no_table[i] = i;
}
for (i = 0; i < mPr_ORIGINAL_DESIGN_COUNT; i++) {
private->my_org_no_table[i] = i;
}
for (i = 0; i < mPr_ORIGINAL_DESIGN_COUNT; i++) {
mNW_InitOriginalData(private->my_org + i);
}
for (i = 0; i < mPr_ORIGINAL_DESIGN_COUNT; i++) {
mNW_InitOriginalData(private->my_org + i);
}
}
+8 -8
View File
@@ -410,7 +410,7 @@ extern void mNpc_RenewalAnimalMemory() {
for (j = 0; j < ANIMAL_MEMORY_NUM; j++) {
if (mNpc_CheckFreeAnimalMemory(memory) == FALSE &&
mLd_CheckThisLand(memory->memory_player_id.land_name, memory->memory_player_id.land_id) == TRUE) {
priv = Save_Get(private);
priv = Save_Get(private_data);
for (k = 0; k < PLAYER_NUM; k++) {
if (mPr_NullCheckPersonalID(&priv->player_ID) == FALSE &&
@@ -481,7 +481,7 @@ extern int mNpc_GetOldPlayerAnimalMemoryIdx(Anmmem_c* memory, int num) {
for (i = 0; i < num; i++) {
if (mNpc_CheckFreeAnimalMemory(memory) == FALSE &&
mLd_CheckThisLand(memory->memory_player_id.land_name, memory->memory_player_id.land_id) == TRUE) {
priv = Save_Get(private);
priv = Save_Get(private_data);
for (j = 0; j < PLAYER_NUM; j++) {
if (mPr_NullCheckPersonalID(&priv->player_ID) == FALSE &&
@@ -756,7 +756,7 @@ static int mNpc_GetAnimalMemoryFriend_Land_Sex(Anmmem_c* memory, int num, int se
if (mNpc_CheckFreeAnimalMemory(memory) == FALSE) {
priv_idx = mPr_GetPrivateIdx(&memory->memory_player_id);
if (priv_idx != -1 && Save_Get(private[priv_idx]).gender == sex &&
if (priv_idx != -1 && Save_Get(private_data[priv_idx]).gender == sex &&
mNpc_SelectBestFriend(&best_friend, memory, &best_friendship) == TRUE) {
res = i;
}
@@ -3176,7 +3176,7 @@ static int mNpc_DecideRemoveAnimalNo_Friend(Animal_c* animal, int ignored_idx, i
n_players = 0;
num_possible = 0;
remove_bitfield = 0;
priv_p = Save_Get(private);
priv_p = Save_Get(private_data);
for (i = 0; i < PLAYER_NUM; i++) {
if (mPr_NullCheckPersonalID(&priv_p->player_ID) == FALSE) {
@@ -3190,7 +3190,7 @@ static int mNpc_DecideRemoveAnimalNo_Friend(Animal_c* animal, int ignored_idx, i
for (i = 0; i < ANIMAL_NUM_MAX; i++) {
if (mNpc_CheckFreeAnimalInfo(animal) == FALSE && i != ignored_idx) {
met = 0;
priv_p = Save_Get(private);
priv_p = Save_Get(private_data);
for (j = 0; j < PLAYER_NUM; j++) {
if (mPr_NullCheckPersonalID(&priv_p->player_ID) == FALSE) {
@@ -3456,7 +3456,7 @@ extern void mNpc_FirstClearGoodbyMail() {
}
static void mNpc_SetGoodbyAnimalMail(Anm_GoodbyMail_c* goodby_mail, AnmPersonalID_c* anm_id) {
Private_c* priv = Save_Get(private);
Private_c* priv = Save_Get(private_data);
int i;
if (anm_id != NULL && mNpc_CheckFreeAnimalPersonalID(anm_id) == FALSE) {
@@ -3519,7 +3519,7 @@ static int mNpc_SendGoodbyAnimalMailOne(Mail_c* mail, PersonalID_c* pid, int pla
}
static void mNpc_SendGoodbyAnimalMail(Anm_GoodbyMail_c* goodby_mail) {
Private_c* priv = Save_Get(private);
Private_c* priv = Save_Get(private_data);
int i;
if (mNpc_CheckFreeAnimalPersonalID(&goodby_mail->id) == FALSE) {
@@ -7083,7 +7083,7 @@ static int mNpc_SendHPMail_analysis(PersonalID_c* pid, AnmPersonalID_c* anm_id,
}
extern void mNpc_SendHPMail() {
Private_c* priv = Save_Get(private);
Private_c* priv = Save_Get(private_data);
Private_c* priv_p;
Animal_c* animal = Save_Get(animals);
AnmHPMail_c* hp_mail;
+406 -413
View File
@@ -17,524 +17,517 @@
#include "m_scene_table.h"
static int mPO_keep_contents(Mail_c* mail) {
int res = FALSE;
int res = FALSE;
int free_idx = mMl_chk_mail_free_space(Save_Get(post_office).mail, mPO_MAIL_STORAGE_SIZE);
if (free_idx >= 0) {
mMl_copy_mail(Save_Get(post_office).mail + free_idx, mail);
mMl_clear_mail(mail);
res = TRUE;
}
int free_idx = mMl_chk_mail_free_space(Save_Get(post_office).mail, mPO_MAIL_STORAGE_SIZE);
if (free_idx >= 0) {
mMl_copy_mail(Save_Get(post_office).mail + free_idx, mail);
mMl_clear_mail(mail);
res = TRUE;
}
return res;
return res;
}
extern int mPO_count_mail(int house_no) {
int used = mMl_count_use_mail_space(Save_Get(homes[house_no]).mailbox, HOME_MAILBOX_SIZE);
Mail_c* mail = Save_Get(post_office).mail;
int i;
int used = mMl_count_use_mail_space(Save_Get(homes[house_no]).mailbox, HOME_MAILBOX_SIZE);
Mail_c* mail = Save_Get(post_office).mail;
int i;
for (i = 0; i < mPO_MAIL_STORAGE_SIZE; i++) {
if (house_no == mMl_hunt_for_send_address(mail)) {
used++;
for (i = 0; i < mPO_MAIL_STORAGE_SIZE; i++) {
if (house_no == mMl_hunt_for_send_address(mail)) {
used++;
}
mail++;
}
mail++;
}
return used;
return used;
}
extern int mPO_get_keep_mail_sum() {
PostOffice_c* post_office = Save_GetPointer(post_office);
PostOffice_c* post_office = Save_GetPointer(post_office);
return post_office->keep_mail_sum_players + post_office->keep_mail_sum_npcs;
return post_office->keep_mail_sum_players + post_office->keep_mail_sum_npcs;
}
static void mPO_adjust_keep_mail() {
Mail_c* mail = Save_Get(post_office).mail;
int i;
s16 recipient_flags = 0;
s16 keep_mail_player_num = 0;
Mail_c* mail = Save_Get(post_office).mail;
int i;
s16 recipient_flags = 0;
s16 keep_mail_player_num = 0;
for (i = 0; i < mPO_MAIL_STORAGE_SIZE; i++) {
if (mMl_check_not_used_mail(mail) == FALSE) {
int house_idx = mMl_hunt_for_send_address(mail);
if (house_idx != -1) {
keep_mail_player_num++;
recipient_flags |= (1 << house_idx);
}
else {
mMl_clear_mail(mail);
}
for (i = 0; i < mPO_MAIL_STORAGE_SIZE; i++) {
if (mMl_check_not_used_mail(mail) == FALSE) {
int house_idx = mMl_hunt_for_send_address(mail);
if (house_idx != -1) {
keep_mail_player_num++;
recipient_flags |= (1 << house_idx);
} else {
mMl_clear_mail(mail);
}
}
mail++;
}
mail++;
}
Save_Set(post_office.mail_recipient_flags, recipient_flags);
Save_Set(post_office.keep_mail_sum_players, keep_mail_player_num);
Save_Set(post_office.keep_mail_sum_npcs, 0);
Save_Set(post_office.mail_recipient_flags, recipient_flags);
Save_Set(post_office.keep_mail_sum_players, keep_mail_player_num);
Save_Set(post_office.keep_mail_sum_npcs, 0);
}
static int mPO_receipt_check_mail(Mail_c* mail) {
int res = FALSE;
int res = FALSE;
switch (mail->header.recipient.type) {
case mMl_NAME_TYPE_PLAYER:
{
int house_idx = mMl_hunt_for_send_address(mail);
if (house_idx != -1 && mPO_count_mail(house_idx) < HOME_MAILBOX_SIZE) {
res = mPO_keep_contents(mail);
if (res == TRUE) {
Save_Get(post_office.mail_recipient_flags) |= (1 << house_idx);
Save_Get(post_office.keep_mail_sum_players)++;
}
}
switch (mail->header.recipient.type) {
case mMl_NAME_TYPE_PLAYER: {
int house_idx = mMl_hunt_for_send_address(mail);
if (house_idx != -1 && mPO_count_mail(house_idx) < HOME_MAILBOX_SIZE) {
res = mPO_keep_contents(mail);
if (res == TRUE) {
Save_Get(post_office.mail_recipient_flags) |= (1 << house_idx);
Save_Get(post_office.keep_mail_sum_players)++;
}
}
break;
}
case mMl_NAME_TYPE_NPC:
{
if (mNpc_ReceiveHPMail(mail) == FALSE) {
mNpc_SendMailtoNpc(mail);
}
res = mPO_keep_contents(mail);
if (res == TRUE) {
Save_Get(post_office).keep_mail_sum_npcs++;
}
break;
}
case mMl_NAME_TYPE_MUSEUM:
{
mMsm_SendMuseumMail(mail);
mMl_clear_mail(mail);
Save_Get(post_office).keep_mail_sum_npcs++;
res = TRUE;
break;
}
}
return res;
}
extern int mPO_receipt_proc(Mail_c* mail, int send_type) {
int res = FALSE;
switch (send_type) {
case mPO_SENDTYPE_MAIL:
{
res = mPO_receipt_check_mail(mail);
break;
}
case mPO_SENDTYPE_LEAFLET:
{
mMl_copy_mail(&Save_Get(post_office).leaflet, mail);
Save_Set(post_office.leaflet_recipient_flags.leaflet_flags, 0);
res = TRUE;
break;
}
case mPO_SENDTYPE_EVENT_LEAFLET:
{
mMl_copy_mail(&Save_Get(post_office).event_leaflet, mail);
Save_Set(post_office.leaflet_recipient_flags.event_flags, 0);
res = TRUE;
break;
}
}
return res;
}
static int mPO_copy_contents(int house_no, Mail_c* mail) {
int res = FALSE;
int free_slot = mMl_chk_mail_free_space(Save_Get(homes[house_no]).mailbox, HOME_MAILBOX_SIZE);
if (free_slot >= 0) {
mMl_copy_mail(Save_Get(homes[house_no]).mailbox + free_slot, mail);
res = TRUE;
}
return res;
}
static void mPO_delivery_mail_with_item(Mail_c* mail, int mail_no, mActor_name_t present, PersonalID_c* pid) {
int header_back_start;
mHandbill_Load_HandbillFromRom(mail->content.header, &header_back_start, mail->content.footer, mail->content.body, mail_no);
mail->content.font = mMl_FONT_0;
mail->content.header_back_start = header_back_start;
mail->content.mail_type = 7;
mail->content.paper_type = ITM_PAPER55;
mail->present = present;
mMl_set_to_plname(mail, pid);
}
static int mPO_delivery_mail_with_order_ftr_sub(int house_no, PersonalID_c* pid, mPr_catalog_order_c* order) {
Mail_c mail;
u8 item_name[mIN_ITEM_NAME_LEN];
mMl_clear_mail(&mail);
mIN_copy_name_str(item_name, order->item);
mHandbill_Set_free_str(0, item_name, mIN_ITEM_NAME_LEN);
mPO_delivery_mail_with_item(&mail, 0x049 + order->shop_level, order->item, pid);
return mPO_copy_contents(house_no, &mail);
}
static void mPO_delivery_mail_with_order_ftr(int house_no, int player_no) {
Private_c* priv = Save_GetPointer(private[player_no]);
if (priv->exists == TRUE) {
mPr_catalog_order_c* order = priv->catalog_orders;
int i;
for (i = 0; i < mPr_CATALOG_ORDER_NUM; i++) {
if (order->item != EMPTY_NO) {
if (mPO_delivery_mail_with_order_ftr_sub(house_no, &priv->player_ID, order) == FALSE) {
return;
}
order->item = EMPTY_NO;
}
order++;
}
}
}
static void mPO_delivery_mail_with_ticket_set_free_str(lbRTC_month_t month) {
u8 month_str[9];
u8 day_str[4];
int days = lbRTC_GetDaysByMonth(Common_Get(time.rtc_time.year), month);
mString_Load_MonthStringFromRom(month_str, month);
mString_Load_DayStringFromRom(day_str, days);
mHandbill_Set_free_str(4, month_str, 9);
mHandbill_Set_free_str(5, day_str, 4);
}
static int mPO_delivery_mail_with_ticket_sub(int house_no, PersonalID_c* pid, mActor_name_t present) {
Mail_c mail;
mMl_clear_mail(&mail);
mPO_delivery_mail_with_item(&mail, 0x057, present, pid);
return mPO_copy_contents(house_no, &mail);
}
static void mPO_delivery_mail_with_ticket(int house_no, int player_no) {
mActor_name_t ticket;
Private_c* priv = Save_GetPointer(private[player_no]);
if (priv->exists == TRUE) {
int ticket_num = priv->inventory.lotto_ticket_mail_storage;
if (ticket_num != 0) {
int minus_ticket;
mActor_name_t ticket_id;
lbRTC_month_t ticket_month = priv->inventory.lotto_ticket_expiry_month;
mPO_delivery_mail_with_ticket_set_free_str(ticket_month);
ticket = ITM_TICKET_START + (ticket_month - 1) * 8;
for (ticket_num; ticket_num != 0; ticket_num -= minus_ticket) {
minus_ticket = ticket_num < 5 ? ticket_num : 5;
ticket_id = ticket + minus_ticket - 1;
if (mPO_delivery_mail_with_ticket_sub(house_no, &priv->player_ID, ticket_id) == FALSE) {
break;
}
}
}
priv->inventory.lotto_ticket_mail_storage = ticket_num;
}
}
static int mPO_delivery_mail_sub(int house_no) {
PostOffice_c* post_office;
Mail_c* po_mail;
int i;
int res = TRUE;
po_mail = Save_Get(post_office).mail;
post_office = Save_GetPointer(post_office);
for (i = 0; i < mPO_MAIL_STORAGE_SIZE; i++, po_mail++) {
if (mMl_check_not_used_mail(po_mail) == FALSE) {
int dst_house_no = mMl_hunt_for_send_address(po_mail);
if (dst_house_no != -1) {
if (house_no == mPO_DELIVER_ALL_HOUSES || dst_house_no == house_no) {
if (mPO_copy_contents(dst_house_no, po_mail) == TRUE) {
post_office->keep_mail_sum_players--;
mMl_clear_mail(po_mail);
}
else {
res = FALSE; // failed to deliver the mail, house mailbox is likely full
}
}
}
else {
switch (po_mail->header.recipient.type) {
case mMl_NAME_TYPE_PLAYER:
post_office->keep_mail_sum_players--;
break;
}
mMl_clear_mail(po_mail);
}
}
}
case mMl_NAME_TYPE_NPC: {
if (mNpc_ReceiveHPMail(mail) == FALSE) {
mNpc_SendMailtoNpc(mail);
}
Save_Set(post_office.keep_mail_sum_npcs, 0);
return res;
res = mPO_keep_contents(mail);
if (res == TRUE) {
Save_Get(post_office).keep_mail_sum_npcs++;
}
break;
}
case mMl_NAME_TYPE_MUSEUM: {
mMsm_SendMuseumMail(mail);
mMl_clear_mail(mail);
Save_Get(post_office).keep_mail_sum_npcs++;
res = TRUE;
break;
}
}
return res;
}
extern int mPO_receipt_proc(Mail_c* mail, int send_type) {
int res = FALSE;
switch (send_type) {
case mPO_SENDTYPE_MAIL: {
res = mPO_receipt_check_mail(mail);
break;
}
case mPO_SENDTYPE_LEAFLET: {
mMl_copy_mail(&Save_Get(post_office).leaflet, mail);
Save_Set(post_office.leaflet_recipient_flags.leaflet_flags, 0);
res = TRUE;
break;
}
case mPO_SENDTYPE_EVENT_LEAFLET: {
mMl_copy_mail(&Save_Get(post_office).event_leaflet, mail);
Save_Set(post_office.leaflet_recipient_flags.event_flags, 0);
res = TRUE;
break;
}
}
return res;
}
static int mPO_copy_contents(int house_no, Mail_c* mail) {
int res = FALSE;
int free_slot = mMl_chk_mail_free_space(Save_Get(homes[house_no]).mailbox, HOME_MAILBOX_SIZE);
if (free_slot >= 0) {
mMl_copy_mail(Save_Get(homes[house_no]).mailbox + free_slot, mail);
res = TRUE;
}
return res;
}
static void mPO_delivery_mail_with_item(Mail_c* mail, int mail_no, mActor_name_t present, PersonalID_c* pid) {
int header_back_start;
mHandbill_Load_HandbillFromRom(mail->content.header, &header_back_start, mail->content.footer, mail->content.body,
mail_no);
mail->content.font = mMl_FONT_0;
mail->content.header_back_start = header_back_start;
mail->content.mail_type = 7;
mail->content.paper_type = ITM_PAPER55;
mail->present = present;
mMl_set_to_plname(mail, pid);
}
static int mPO_delivery_mail_with_order_ftr_sub(int house_no, PersonalID_c* pid, mPr_catalog_order_c* order) {
Mail_c mail;
u8 item_name[mIN_ITEM_NAME_LEN];
mMl_clear_mail(&mail);
mIN_copy_name_str(item_name, order->item);
mHandbill_Set_free_str(0, item_name, mIN_ITEM_NAME_LEN);
mPO_delivery_mail_with_item(&mail, 0x049 + order->shop_level, order->item, pid);
return mPO_copy_contents(house_no, &mail);
}
static void mPO_delivery_mail_with_order_ftr(int house_no, int player_no) {
Private_c* priv = Save_GetPointer(private_data[player_no]);
if (priv->exists == TRUE) {
mPr_catalog_order_c* order = priv->catalog_orders;
int i;
for (i = 0; i < mPr_CATALOG_ORDER_NUM; i++) {
if (order->item != EMPTY_NO) {
if (mPO_delivery_mail_with_order_ftr_sub(house_no, &priv->player_ID, order) == FALSE) {
return;
}
order->item = EMPTY_NO;
}
order++;
}
}
}
static void mPO_delivery_mail_with_ticket_set_free_str(lbRTC_month_t month) {
u8 month_str[9];
u8 day_str[4];
int days = lbRTC_GetDaysByMonth(Common_Get(time.rtc_time.year), month);
mString_Load_MonthStringFromRom(month_str, month);
mString_Load_DayStringFromRom(day_str, days);
mHandbill_Set_free_str(4, month_str, 9);
mHandbill_Set_free_str(5, day_str, 4);
}
static int mPO_delivery_mail_with_ticket_sub(int house_no, PersonalID_c* pid, mActor_name_t present) {
Mail_c mail;
mMl_clear_mail(&mail);
mPO_delivery_mail_with_item(&mail, 0x057, present, pid);
return mPO_copy_contents(house_no, &mail);
}
static void mPO_delivery_mail_with_ticket(int house_no, int player_no) {
mActor_name_t ticket;
Private_c* priv = Save_GetPointer(private_data[player_no]);
if (priv->exists == TRUE) {
int ticket_num = priv->inventory.lotto_ticket_mail_storage;
if (ticket_num != 0) {
int minus_ticket;
mActor_name_t ticket_id;
lbRTC_month_t ticket_month = priv->inventory.lotto_ticket_expiry_month;
mPO_delivery_mail_with_ticket_set_free_str(ticket_month);
ticket = ITM_TICKET_START + (ticket_month - 1) * 8;
for (ticket_num; ticket_num != 0; ticket_num -= minus_ticket) {
minus_ticket = ticket_num < 5 ? ticket_num : 5;
ticket_id = ticket + minus_ticket - 1;
if (mPO_delivery_mail_with_ticket_sub(house_no, &priv->player_ID, ticket_id) == FALSE) {
break;
}
}
}
priv->inventory.lotto_ticket_mail_storage = ticket_num;
}
}
static int mPO_delivery_mail_sub(int house_no) {
PostOffice_c* post_office;
Mail_c* po_mail;
int i;
int res = TRUE;
po_mail = Save_Get(post_office).mail;
post_office = Save_GetPointer(post_office);
for (i = 0; i < mPO_MAIL_STORAGE_SIZE; i++, po_mail++) {
if (mMl_check_not_used_mail(po_mail) == FALSE) {
int dst_house_no = mMl_hunt_for_send_address(po_mail);
if (dst_house_no != -1) {
if (house_no == mPO_DELIVER_ALL_HOUSES || dst_house_no == house_no) {
if (mPO_copy_contents(dst_house_no, po_mail) == TRUE) {
post_office->keep_mail_sum_players--;
mMl_clear_mail(po_mail);
} else {
res = FALSE; // failed to deliver the mail, house mailbox is likely full
}
}
} else {
switch (po_mail->header.recipient.type) {
case mMl_NAME_TYPE_PLAYER:
post_office->keep_mail_sum_players--;
break;
}
mMl_clear_mail(po_mail);
}
}
}
Save_Set(post_office.keep_mail_sum_npcs, 0);
return res;
}
static void mPO_delivery_one_address_mail(int house_no) {
if (mPO_delivery_mail_sub(house_no) == TRUE) {
s16 mask = (1 << house_no) ^ 0b1111;
Save_Get(post_office.mail_recipient_flags) &= mask; // clear out delivered houses
}
if (mPO_delivery_mail_sub(house_no) == TRUE) {
s16 mask = (1 << house_no) ^ 0b1111;
Save_Get(post_office.mail_recipient_flags) &= mask; // clear out delivered houses
}
}
static void mPO_delivery_one_address_special_mail(int house_no) {
int player_no = mHS_get_pl_no(house_no);
int player_no = mHS_get_pl_no(house_no);
mPO_delivery_mail_with_ticket(house_no, player_no);
mPO_delivery_mail_with_order_ftr(house_no, player_no);
mPO_delivery_mail_with_ticket(house_no, player_no);
mPO_delivery_mail_with_order_ftr(house_no, player_no);
}
static void mPO_delivery_one_address_leaflet(s16* leaflet_received_flags, Mail_c* leaflet, int house_no) {
if ((((*leaflet_received_flags) >> house_no) & 1) == FALSE) {
mHm_hs_c* house = Save_GetPointer(homes[house_no]);
if ((((*leaflet_received_flags) >> house_no) & 1) == FALSE) {
mHm_hs_c* house = Save_GetPointer(homes[house_no]);
if (house->ownerID.land_id == 0xFFFF) {
*leaflet_received_flags |= (1 << house_no); // unclaimed houses are marked "received"
}
else {
int player_no = mHS_get_pl_no(house_no);
if (player_no < mPr_FOREIGNER && mEv_ArbeitPlayer(player_no) == FALSE) {
mMl_set_to_plname(leaflet, &house->ownerID);
if (mPO_copy_contents(house_no, leaflet) == TRUE) {
*leaflet_received_flags |= (1 << house_no);
if (house->ownerID.land_id == 0xFFFF) {
*leaflet_received_flags |= (1 << house_no); // unclaimed houses are marked "received"
} else {
int player_no = mHS_get_pl_no(house_no);
if (player_no < mPr_FOREIGNER && mEv_ArbeitPlayer(player_no) == FALSE) {
mMl_set_to_plname(leaflet, &house->ownerID);
if (mPO_copy_contents(house_no, leaflet) == TRUE) {
*leaflet_received_flags |= (1 << house_no);
}
}
}
}
}
}
}
static void mPO_delivery_one_address_event_leaflet(int house_no) {
Mail_c* ev_leaflet = &Save_Get(post_office).event_leaflet;
int special_type = mEv_get_special_event_type();
int leaflet_event_type;
Mail_c* ev_leaflet = &Save_Get(post_office).event_leaflet;
int special_type = mEv_get_special_event_type();
int leaflet_event_type;
switch (ev_leaflet->content.mail_type) {
case mMl_TYPE_SHOP_SALE_LEAFLET:
leaflet_event_type = mEv_EVENT_SHOP_SALE;
break;
switch (ev_leaflet->content.mail_type) {
case mMl_TYPE_SHOP_SALE_LEAFLET:
leaflet_event_type = mEv_EVENT_SHOP_SALE;
break;
case mMl_TYPE_BROKER_SALE_LEAFLET:
leaflet_event_type = mEv_EVENT_BROKER_SALE;
break;
case mMl_TYPE_BROKER_SALE_LEAFLET:
leaflet_event_type = mEv_EVENT_BROKER_SALE;
break;
default:
leaflet_event_type = -1;
break;
}
default:
leaflet_event_type = -1;
break;
}
if (leaflet_event_type == special_type) {
mPO_delivery_one_address_leaflet(&Save_Get(post_office).leaflet_recipient_flags.event_flags, ev_leaflet, house_no);
}
if (leaflet_event_type == special_type) {
mPO_delivery_one_address_leaflet(&Save_Get(post_office).leaflet_recipient_flags.event_flags, ev_leaflet,
house_no);
}
}
extern int mPO_delivery_one_address(int house_no) {
mPO_delivery_one_address_mail(house_no);
mPO_delivery_one_address_leaflet(&Save_Get(post_office).leaflet_recipient_flags.leaflet_flags, &Save_Get(post_office).leaflet, house_no);
mPO_delivery_one_address_event_leaflet(house_no);
mPO_delivery_one_address_mail(house_no);
mPO_delivery_one_address_leaflet(&Save_Get(post_office).leaflet_recipient_flags.leaflet_flags,
&Save_Get(post_office).leaflet, house_no);
mPO_delivery_one_address_event_leaflet(house_no);
}
static void mPO_delivery_mail() {
mPO_delivery_mail_sub(mPO_DELIVER_ALL_HOUSES);
mPO_adjust_keep_mail();
mPO_delivery_mail_sub(mPO_DELIVER_ALL_HOUSES);
mPO_adjust_keep_mail();
}
static void mPO_delivery_leaflet() {
int house_no;
int house_no;
for (house_no = 0; house_no < mHS_HOUSE_NUM; house_no++) {
mPO_delivery_one_address_leaflet(&Save_Get(post_office).leaflet_recipient_flags.leaflet_flags, &Save_Get(post_office).leaflet, house_no);
mPO_delivery_one_address_event_leaflet(house_no);
}
for (house_no = 0; house_no < mHS_HOUSE_NUM; house_no++) {
mPO_delivery_one_address_leaflet(&Save_Get(post_office).leaflet_recipient_flags.leaflet_flags,
&Save_Get(post_office).leaflet, house_no);
mPO_delivery_one_address_event_leaflet(house_no);
}
}
extern void mPO_delivery_all_address_proc() {
mPO_delivery_mail();
mPO_delivery_leaflet();
mPO_delivery_mail();
mPO_delivery_leaflet();
}
static int mPO_make_post_man(GAME_PLAY* play) {
static int bx_add[2] = { -1, 1 };
static int ux_table[2] = { UT_X_NUM - 1, 0 };
static int bx_add[2] = { -1, 1 };
static int ux_table[2] = { UT_X_NUM - 1, 0 };
int pl_block_x;
int pl_block_z;
u32 block_kind;
int pl_block_x;
int pl_block_z;
u32 block_kind;
int po_block_x;
int po_block_z;
int res = FALSE;
int po_block_x;
int po_block_z;
int res = FALSE;
if (Save_Get(scene_no) == SCENE_FG) {
mFI_BlockKind2BkNum(&pl_block_x, &pl_block_z, mRF_BLOCKKIND_PLAYER);
block_kind = mFI_BkNum2BlockKind(play->block_table.block_x, play->block_table.block_z);
if (Save_Get(scene_no) == SCENE_FG) {
mFI_BlockKind2BkNum(&pl_block_x, &pl_block_z, mRF_BLOCKKIND_PLAYER);
block_kind = mFI_BkNum2BlockKind(play->block_table.block_x, play->block_table.block_z);
if (block_kind != mRF_BLOCKKIND_NONE) {
if ((block_kind & mRF_BLOCKKIND_PLAYER) != 0) {
int bx_add_idx;
int spawned_postman;
if (block_kind != mRF_BLOCKKIND_NONE) {
if ((block_kind & mRF_BLOCKKIND_PLAYER) != 0) {
int bx_add_idx;
int spawned_postman;
mFI_BlockKind2BkNum(&po_block_x, &po_block_z, mRF_BLOCKKIND_POSTOFFICE);
bx_add_idx = pl_block_x >= po_block_x ? 0 : 1;
spawned_postman = (*Common_Get(clip).npc_clip->setupActor_proc)(play, SP_NPC_POST_MAN, -1, -1, 0, play->block_table.block_x + bx_add[bx_add_idx], play->block_table.block_z, ux_table[bx_add_idx], 7);
mFI_BlockKind2BkNum(&po_block_x, &po_block_z, mRF_BLOCKKIND_POSTOFFICE);
bx_add_idx = pl_block_x >= po_block_x ? 0 : 1;
spawned_postman = (*Common_Get(clip).npc_clip->setupActor_proc)(
play, SP_NPC_POST_MAN, -1, -1, 0, play->block_table.block_x + bx_add[bx_add_idx],
play->block_table.block_z, ux_table[bx_add_idx], 7);
if (spawned_postman == TRUE) {
res = TRUE;
}
}
else if ((block_kind & mRF_BLOCKKIND_POSTOFFICE) != 0) {
if (Common_Get(force_mail_delivery_flag) == TRUE) {
int post_utx;
int post_utz;
int spawned_postman;
ACTOR* post_office_structure = Actor_info_fgName_search(&play->actor_info, POST_OFFICE, ACTOR_PART_ITEM);
if (spawned_postman == TRUE) {
res = TRUE;
}
} else if ((block_kind & mRF_BLOCKKIND_POSTOFFICE) != 0) {
if (Common_Get(force_mail_delivery_flag) == TRUE) {
int post_utx;
int post_utz;
int spawned_postman;
ACTOR* post_office_structure =
Actor_info_fgName_search(&play->actor_info, POST_OFFICE, ACTOR_PART_ITEM);
if (post_office_structure != NULL) {
mFI_Wpos2UtNum_inBlock(&post_utx, &post_utz, post_office_structure->world.position);
spawned_postman = (*Common_Get(clip).npc_clip->setupActor_proc)(play, SP_NPC_POST_MAN, -1, -1, 1, play->block_table.block_x, play->block_table.block_z, post_utx - 3, post_utz);
if (post_office_structure != NULL) {
mFI_Wpos2UtNum_inBlock(&post_utx, &post_utz, post_office_structure->world.position);
spawned_postman = (*Common_Get(clip).npc_clip->setupActor_proc)(
play, SP_NPC_POST_MAN, -1, -1, 1, play->block_table.block_x, play->block_table.block_z,
post_utx - 3, post_utz);
if (spawned_postman == TRUE) {
res = TRUE;
if (spawned_postman == TRUE) {
res = TRUE;
}
}
}
} else {
mPO_delivery_all_address_proc();
res = TRUE;
}
}
} else {
mPO_delivery_all_address_proc();
res = TRUE;
}
}
else {
} else {
mPO_delivery_all_address_proc();
res = TRUE;
}
}
else {
mPO_delivery_all_address_proc();
res = TRUE;
}
}
else {
mPO_delivery_all_address_proc();
res = TRUE;
}
return res;
return res;
}
static void mPO_set_next_delivery_time(lbRTC_time_c* time) {
if (time->hour < 9) {
time->hour = 9;
}
else if (time->hour < 17) {
time->hour = 17;
}
else {
lbRTC_Add_DD(time, 1);
time->hour = 9;
}
if (time->hour < 9) {
time->hour = 9;
} else if (time->hour < 17) {
time->hour = 17;
} else {
lbRTC_Add_DD(time, 1);
time->hour = 9;
}
time->min = 0;
time->sec = 0;
lbRTC_TimeCopy(&Save_Get(post_office).delivery_time, time);
time->min = 0;
time->sec = 0;
lbRTC_TimeCopy(&Save_Get(post_office).delivery_time, time);
}
static void mPO_delivery_proc(GAME_PLAY* play) {
lbRTC_time_c time;
lbRTC_time_c time;
lbRTC_TimeCopy(&time, Common_GetPointer(time.rtc_time));
lbRTC_TimeCopy(&time, Common_GetPointer(time.rtc_time));
if ((lbRTC_IsOverTime(&Save_Get(post_office).delivery_time, &time) == lbRTC_OVER || Common_Get(force_mail_delivery_flag) == TRUE) &&
(mPO_make_post_man(play) == TRUE)
) {
mPO_set_next_delivery_time(&time);
Common_Set(force_mail_delivery_flag, FALSE);
}
if ((lbRTC_IsOverTime(&Save_Get(post_office).delivery_time, &time) == lbRTC_OVER ||
Common_Get(force_mail_delivery_flag) == TRUE) &&
(mPO_make_post_man(play) == TRUE)) {
mPO_set_next_delivery_time(&time);
Common_Set(force_mail_delivery_flag, FALSE);
}
}
static void mPO_first_delivery_proc() {
int deliver = FALSE;
lbRTC_time_c time;
int deliver = FALSE;
lbRTC_time_c time;
lbRTC_TimeCopy(&time, Common_GetPointer(time.rtc_time));
lbRTC_TimeCopy(&time, Common_GetPointer(time.rtc_time));
if (lbRTC_IsOverTime(&Save_Get(post_office).delivery_time, &time) == lbRTC_OVER || Common_Get(force_mail_delivery_flag) == TRUE) {
deliver = TRUE;
mPO_set_next_delivery_time(&time);
Common_Set(force_mail_delivery_flag, FALSE);
}
if (lbRTC_IsOverTime(&Save_Get(post_office).delivery_time, &time) == lbRTC_OVER ||
Common_Get(force_mail_delivery_flag) == TRUE) {
deliver = TRUE;
mPO_set_next_delivery_time(&time);
Common_Set(force_mail_delivery_flag, FALSE);
}
if (deliver == TRUE) {
mPO_delivery_mail();
}
if (deliver == TRUE) {
mPO_delivery_mail();
}
if (mLd_PlayerManKindCheck() == FALSE) {
int house_no = mHS_get_arrange_idx(Common_Get(player_no));
mPO_delivery_one_address_special_mail(house_no);
}
if (mLd_PlayerManKindCheck() == FALSE) {
int house_no = mHS_get_arrange_idx(Common_Get(player_no));
mPO_delivery_one_address_special_mail(house_no);
}
if (deliver == TRUE) {
mPO_delivery_leaflet();
}
if (deliver == TRUE) {
mPO_delivery_leaflet();
}
}
extern void mPO_business_proc(GAME_PLAY* play) {
if ((Common_Get(clip).demo_clip == NULL && Common_Get(clip).demo_clip2 == NULL) ||
(Common_Get(clip).demo_clip != NULL && Common_Get(clip).demo_clip->type == mDemo_CLIP_TYPE_INTRO_DEMO)
) {
int scene = Save_Get(scene_no);
if ((Common_Get(clip).demo_clip == NULL && Common_Get(clip).demo_clip2 == NULL) ||
(Common_Get(clip).demo_clip != NULL && Common_Get(clip).demo_clip->type == mDemo_CLIP_TYPE_INTRO_DEMO)) {
int scene = Save_Get(scene_no);
switch (scene) {
default:
mPO_delivery_proc(play);
break;
switch (scene) {
default:
mPO_delivery_proc(play);
break;
case SCENE_PLAYERSELECT:
case SCENE_PLAYERSELECT_2:
case SCENE_PLAYERSELECT_3:
case SCENE_PLAYERSELECT_SAVE:
case SCENE_TITLE_DEMO:
return;
case SCENE_PLAYERSELECT:
case SCENE_PLAYERSELECT_2:
case SCENE_PLAYERSELECT_3:
case SCENE_PLAYERSELECT_SAVE:
case SCENE_TITLE_DEMO:
return;
}
}
}
}
extern void mPO_first_work() {
lbRTC_time_c* time = &Save_Get(save_check).time;
if (mTM_AreTimesEqual(time, &mTM_rtcTime_clear_code) == FALSE && lbRTC_IsOverRTC(time) == FALSE) {
Common_Set(force_mail_delivery_flag, TRUE);
}
lbRTC_time_c* time = &Save_Get(save_check).time;
if (mTM_AreTimesEqual(time, &mTM_rtcTime_clear_code) == FALSE && lbRTC_IsOverRTC(time) == FALSE) {
Common_Set(force_mail_delivery_flag, TRUE);
}
mPO_first_delivery_proc();
mPO_adjust_keep_mail();
mPO_first_delivery_proc();
mPO_adjust_keep_mail();
}
extern void mPO_post_office_init() {
bzero(Save_GetPointer(post_office), sizeof(PostOffice_c));
mMl_clear_mail_box(Save_Get(post_office).mail, mPO_MAIL_STORAGE_SIZE);
mMl_clear_mail(&Save_Get(post_office).leaflet);
mMl_clear_mail(&Save_Get(post_office).event_leaflet);
Save_Get(post_office).leaflet_recipient_flags.raw = 0x000F000F;
lbRTC_TimeCopy(&Save_Get(post_office).delivery_time, Common_GetPointer(time.rtc_time));
bzero(Save_GetPointer(post_office), sizeof(PostOffice_c));
mMl_clear_mail_box(Save_Get(post_office).mail, mPO_MAIL_STORAGE_SIZE);
mMl_clear_mail(&Save_Get(post_office).leaflet);
mMl_clear_mail(&Save_Get(post_office).event_leaflet);
Save_Get(post_office).leaflet_recipient_flags.raw = 0x000F000F;
lbRTC_TimeCopy(&Save_Get(post_office).delivery_time, Common_GetPointer(time.rtc_time));
}
+1007 -1019
View File
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -1038,8 +1038,8 @@ extern void mQst_PrintQuestInfo(gfxprint_t* gfxprint) {
delivery = priv->deliveries;
errand = priv->errands;
} else {
delivery = Save_Get(private[0]).deliveries;
errand = Save_Get(private[0]).errands;
delivery = Save_Get(private_data[0]).deliveries;
errand = Save_Get(private_data[0]).errands;
}
gfxprint_color(gfxprint, 220, 50, 50, 255);
+2 -2
View File
@@ -2110,7 +2110,7 @@ extern void mRmTp_CopyWallData(u8* dst, int wall_no) {
int room_idx = mRmTp_GetPlayerRoomIdx();
int valid2 = mHS_get_pl_no_detail(room_idx) >= 0 && mHS_get_pl_no_detail(room_idx) < PLAYER_NUM;
int player_no = valid2 ? mHS_get_pl_no_detail(room_idx) : 0;
mNW_original_design_c* original = &Save_Get(private[player_no]).my_org[tex_idx & 7];
mNW_original_design_c* original = &Save_Get(private_data[player_no]).my_org[tex_idx & 7];
mNW_CopyOriginalPalette(dst, original);
mNW_CopyOriginalTexture(dst + mNW_PALETTE_SIZE, original);
@@ -2137,7 +2137,7 @@ extern void mRmTp_CopyFloorData(u8* dst, int floor_no) {
int room_idx = mRmTp_GetPlayerRoomIdx();
int valid2 = mHS_get_pl_no_detail(room_idx) >= 0 && mHS_get_pl_no_detail(room_idx) < PLAYER_NUM;
int player_no = valid2 ? mHS_get_pl_no_detail(room_idx) : 0;
mNW_original_design_c* original = &Save_Get(private[player_no]).my_org[tex_idx & 7];
mNW_original_design_c* original = &Save_Get(private_data[player_no]).my_org[tex_idx & 7];
mNW_CopyOriginalPalette(dst, original);
mNW_CopyOriginalTexture(dst + mNW_PALETTE_SIZE, original);
+1852 -2138
View File
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -183,7 +183,7 @@ static int mSDI_StartInitNew(GAME* game, int player_no, int malloc_flag) {
osSyncPrintf("player no -- %d\n", player_no);
Common_Set(player_no, player_no);
priv = Save_GetPointer(private[player_no]);
priv = Save_GetPointer(private_data[player_no]);
Common_Set(now_private, priv);
priv->gender = mPr_SEX_MALE;
decide_fruit(Save_GetPointer(fruit));
@@ -211,7 +211,7 @@ static int mSDI_StartInitNew(GAME* game, int player_no, int malloc_flag) {
/* Tree -> Cedar Tree */
mAGrw_ChangeTree2Cedar();
priv_p = Save_Get(private);
priv_p = Save_Get(private_data);
mMld_SetDefaultMelody();
mLd_LandDataInit();
@@ -292,7 +292,7 @@ static int mSDI_StartInitFrom(GAME* game, int player_no, int malloc_flag) {
lbRTC_GetTime(Common_GetPointer(time.rtc_time));
if (mFRm_CheckSaveData() == TRUE) {
Private_c* priv = Save_Get(private + player_no);
Private_c* priv = Save_Get(private_data + player_no);
if (mPr_CheckPrivate(priv) == TRUE) {
@@ -349,7 +349,7 @@ static int mSDI_StartInitNewPlayer(GAME* game, int player_no, int malloc_flag) {
lbRTC_GetTime(Common_GetPointer(time.rtc_time));
if (mFRm_CheckSaveData() == TRUE) {
Private_c* priv = Save_Get(private + player_no);
Private_c* priv = Save_Get(private_data + player_no);
if (mPr_CheckPrivate(priv) != TRUE) {
mPr_InitPrivateInfo(priv);
+239 -299
View File
@@ -34,388 +34,328 @@
static int mTR_first_flag = TRUE;
static Door_data_c demo_1_door_data = {
SCENE_TITLE_DEMO,
4,
FALSE,
0,
{ 2180, 200, 824 },
EMPTY_NO,
3,
{0,0,0}
};
static Door_data_c demo_1_door_data = { SCENE_TITLE_DEMO, 4, FALSE, 0, { 2180, 200, 824 }, EMPTY_NO, 3, { 0, 0, 0 } };
static Door_data_c demo_2_door_data = {
SCENE_TITLE_DEMO,
4,
FALSE,
0,
{ 3218, 40, 3074 },
EMPTY_NO,
3,
{0,0,0}
};
static Door_data_c demo_2_door_data = { SCENE_TITLE_DEMO, 4, FALSE, 0, { 3218, 40, 3074 }, EMPTY_NO, 3, { 0, 0, 0 } };
static Door_data_c demo_3_door_data = {
SCENE_TITLE_DEMO,
4,
FALSE,
0,
{ 2117, 160, 1488 },
EMPTY_NO,
3,
{0,0,0}
};
static Door_data_c demo_3_door_data = { SCENE_TITLE_DEMO, 4, FALSE, 0, { 2117, 160, 1488 }, EMPTY_NO, 3, { 0, 0, 0 } };
static Door_data_c demo_4_door_data = {
SCENE_TITLE_DEMO,
4,
FALSE,
0,
{ 2899, 160, 1101 },
EMPTY_NO,
3,
{0,0,0}
};
static Door_data_c demo_4_door_data = { SCENE_TITLE_DEMO, 4, FALSE, 0, { 2899, 160, 1101 }, EMPTY_NO, 3, { 0, 0, 0 } };
static Door_data_c demo_5_door_data = {
SCENE_TITLE_DEMO,
4,
FALSE,
0,
{ 1578, 40, 2472 },
EMPTY_NO,
3,
{0,0,0}
};
static Door_data_c demo_5_door_data = { SCENE_TITLE_DEMO, 4, FALSE, 0, { 1578, 40, 2472 }, EMPTY_NO, 3, { 0, 0, 0 } };
static Door_data_c* l_demo_door_data_table[mTD_TITLE_DEMO_NUM] = {
&demo_1_door_data,
&demo_2_door_data,
&demo_3_door_data,
&demo_4_door_data,
&demo_5_door_data
};
static Door_data_c* l_demo_door_data_table[mTD_TITLE_DEMO_NUM] = { &demo_1_door_data, &demo_2_door_data,
&demo_3_door_data, &demo_4_door_data,
&demo_5_door_data };
#define DEMO_NPC(name, bx, bz, utx, utz) { NPC_##name, (bx), (bz), (utx), (utz) }
#define DEMO_NPC(name, bx, bz, utx, utz) \
{ NPC_##name, (bx), (bz), (utx), (utz) }
static mNpc_demo_npc_c demo_npc_list[] = {
DEMO_NPC(BOB, 1, 2, 3, 7),
DEMO_NPC(PAOLO, 1, 2, 8, 11),
DEMO_NPC(VESTA, 1, 4, 12, 11),
DEMO_NPC(JOEY, 2, 3, 5, 6),
DEMO_NPC(LOBO, 2, 3, 4, 12),
DEMO_NPC(CARRIE, 3, 5, 11, 5),
DEMO_NPC(TANK, 4, 3, 3, 12),
DEMO_NPC(BUZZ, 4, 4, 3, 4),
DEMO_NPC(RASHER, 4, 4, 12, 13),
DEMO_NPC(BIFF, 4, 6, 5, 6),
DEMO_NPC(SAMSON, 5, 2, 12, 4),
DEMO_NPC(JANE, 5, 2, 9, 11),
DEMO_NPC(TYBALT, 5, 4, 11, 4),
/* @BUG - mNpc_SetAnimalTitleDemo uses ANIMAL_NUM_MAX (15) but only 14 are set */
#ifndef BUGFIXES
DEMO_NPC(CUBE, 5, 5, 5, 11)
#else
DEMO_NPC(CUBE, 5, 5, 5, 11),
{ EMPTY_NO, 0, 0, 0, 0 }
#endif
DEMO_NPC(BOB, 1, 2, 3, 7), DEMO_NPC(PAOLO, 1, 2, 8, 11), DEMO_NPC(VESTA, 1, 4, 12, 11),
DEMO_NPC(JOEY, 2, 3, 5, 6), DEMO_NPC(LOBO, 2, 3, 4, 12), DEMO_NPC(CARRIE, 3, 5, 11, 5),
DEMO_NPC(TANK, 4, 3, 3, 12), DEMO_NPC(BUZZ, 4, 4, 3, 4), DEMO_NPC(RASHER, 4, 4, 12, 13),
DEMO_NPC(BIFF, 4, 6, 5, 6), DEMO_NPC(SAMSON, 5, 2, 12, 4), DEMO_NPC(JANE, 5, 2, 9, 11),
DEMO_NPC(TYBALT, 5, 4, 11, 4),
/* @BUG - mNpc_SetAnimalTitleDemo uses ANIMAL_NUM_MAX (15) but only 14 are set */
#ifndef BUGFIXES
DEMO_NPC(CUBE, 5, 5, 5, 11)
#else
DEMO_NPC(CUBE, 5, 5, 5, 11), { EMPTY_NO, 0, 0, 0, 0 }
#endif
};
static int demo_npc_num = sizeof(demo_npc_list) / sizeof(mNpc_demo_npc_c);
static int set_npc_4_title_demo(GAME_TRADEMARK* trademark) {
Animal_c* animals = Save_Get(animals);
mNpc_SetAnimalTitleDemo(demo_npc_list, animals, (GAME*)trademark);
mNpc_SetNpcList(Common_Get(npclist), animals, demo_npc_num, 0);
Animal_c* animals = Save_Get(animals);
return demo_npc_num;
mNpc_SetAnimalTitleDemo(demo_npc_list, animals, (GAME*)trademark);
mNpc_SetNpcList(Common_Get(npclist), animals, demo_npc_num, 0);
return demo_npc_num;
}
typedef struct tradeday_s {
lbRTC_month_t month;
lbRTC_day_t day;
lbRTC_hour_t hour;
s16 weather;
lbRTC_month_t month;
lbRTC_day_t day;
lbRTC_hour_t hour;
s16 weather;
} mTM_tradeday_c;
static void mTM_demotime_set(int title_no) {
static mTM_tradeday_c tradeday_table[] = {
{ lbRTC_APRIL, 6, 13, mEnv_WEATHER_SAKURA }, /* April 6th @ 1pm, Cherry Blossoms */
{ lbRTC_JUNE, 16, 13, mEnv_WEATHER_RAIN }, /* June 16th @ 1pm, Raining */
{ lbRTC_AUGUST, 1, 6, mEnv_WEATHER_CLEAR }, /* August 1st @ 6am, Clear */
{ lbRTC_NOVEMBER, 1, 16, mEnv_WEATHER_CLEAR }, /* November 1st @ 4pm, Clear */
{ lbRTC_FEBRUARY, 1, 2, mEnv_WEATHER_SNOW } /* February 1st @ 2am, Snowing */
};
static mTM_tradeday_c tradeday_table[] = {
{ lbRTC_APRIL, 6, 13, mEnv_WEATHER_SAKURA }, /* April 6th @ 1pm, Cherry Blossoms */
{ lbRTC_JUNE, 16, 13, mEnv_WEATHER_RAIN }, /* June 16th @ 1pm, Raining */
{ lbRTC_AUGUST, 1, 6, mEnv_WEATHER_CLEAR }, /* August 1st @ 6am, Clear */
{ lbRTC_NOVEMBER, 1, 16, mEnv_WEATHER_CLEAR }, /* November 1st @ 4pm, Clear */
{ lbRTC_FEBRUARY, 1, 2, mEnv_WEATHER_SNOW } /* February 1st @ 2am, Snowing */
};
Common_Set(time.rtc_enabled, FALSE);
Common_Set(time.rtc_time.year, GAME_YEAR_MIN + 1);
Common_Set(time.rtc_time.min, 0);
Common_Set(time.rtc_enabled, FALSE);
Common_Set(time.rtc_time.year, GAME_YEAR_MIN + 1);
Common_Set(time.rtc_time.min, 0);
if (title_no != 0) {
Common_Set(time.rtc_time.month, tradeday_table[(title_no - 1)].month);
Common_Set(time.rtc_time.day, tradeday_table[(title_no - 1)].day);
Common_Set(time.rtc_time.hour, tradeday_table[(title_no - 1)].hour);
Common_Set(weather, tradeday_table[(title_no - 1)].weather);
}
if (title_no != 0) {
Common_Set(time.rtc_time.month, tradeday_table[(title_no - 1)].month);
Common_Set(time.rtc_time.day, tradeday_table[(title_no - 1)].day);
Common_Set(time.rtc_time.hour, tradeday_table[(title_no - 1)].hour);
Common_Set(weather, tradeday_table[(title_no - 1)].weather);
}
}
static void trademark_goto_demo_scene(GAME_TRADEMARK* trademark) {
int demo_no;
int i;
Private_c* n_private;
Save_t* save;
Private_c* private;
int demo_no;
int i;
Private_c* n_private;
Save_t* save;
Private_c* private;
save = Common_GetPointer(save.save);
mCPk_InitPak(0);
n_private = Save_Get(private);
Common_Set(now_private, n_private);
save = Common_GetPointer(save.save);
mCPk_InitPak(0);
n_private = Save_Get(private_data);
Common_Set(now_private, n_private);
if (mFRm_CheckSaveData() == FALSE) {
bzero(save, sizeof(Save_t));
mFRm_ClearSaveCheckData(Save_GetPointer(save_check));
if (mFRm_CheckSaveData() == FALSE) {
bzero(save, sizeof(Save_t));
mFRm_ClearSaveCheckData(Save_GetPointer(save_check));
private = n_private;
for (i = 0; i < PLAYER_NUM; i++) {
mPr_ClearPrivateInfo(private);
private++;
private = n_private;
for (i = 0; i < PLAYER_NUM; i++) {
mPr_ClearPrivateInfo(private);
private++;
}
Save_Set(land_info.exists, TRUE);
Common_Set(house_owner_name, RSV_NO);
Common_Set(last_field_id, -1);
}
Save_Set(land_info.exists, TRUE);
Common_Set(house_owner_name, RSV_NO);
Common_Set(last_field_id, -1);
}
mEv_ClearEventInfo();
mEv_ClearEventInfo();
demo_no = mEv_CheckTitleDemo();
if (demo_no > 0) {
Door_data_c* demo_door_data = l_demo_door_data_table[demo_no - 1];
demo_no = mEv_CheckTitleDemo();
if (demo_no > 0) {
Door_data_c* demo_door_data = l_demo_door_data_table[demo_no - 1];
Common_Set(door_data, *demo_door_data);
Common_Set(door_data.next_scene_id, demo_door_data->next_scene_id + 1); // go to next demo scene
mTM_demotime_set(demo_no); // set demo date, time, and weather
mPr_RandomSetPlayerData_title_demo(); // randomize player data
set_npc_4_title_demo(trademark); // set animals in the demo
Common_Set(transition.wipe_type, 3);
}
Common_Set(door_data, *demo_door_data);
Common_Set(door_data.next_scene_id, demo_door_data->next_scene_id + 1); // go to next demo scene
mTM_demotime_set(demo_no); // set demo date, time, and weather
mPr_RandomSetPlayerData_title_demo(); // randomize player data
set_npc_4_title_demo(trademark); // set animals in the demo
Common_Set(transition.wipe_type, 3);
}
Save_Set(scene_no, SCENE_TITLE_DEMO);
mTM_set_season();
Common_Set(submenu_disabled, TRUE);
GAME_GOTO_NEXT((GAME*)trademark, play, PLAY);
Save_Set(scene_no, SCENE_TITLE_DEMO);
mTM_set_season();
Common_Set(submenu_disabled, TRUE);
GAME_GOTO_NEXT((GAME*)trademark, play, PLAY);
}
static void nintendo_logo_move(GAME_TRADEMARK* trademark) {
int timer;
int alpha2;
if (trademark->stage == 2) {
alpha2 = trademark->alpha2;
alpha2 += 0x880;
if (alpha2 >= 0xFF00) {
trademark->stage = 4;
alpha2 = 0xFF00;
}
int timer;
int alpha2;
if (trademark->stage == 2) {
alpha2 = trademark->alpha2;
alpha2 += 0x880;
if (alpha2 >= 0xFF00) {
trademark->stage = 4;
alpha2 = 0xFF00;
}
trademark->alpha2 = alpha2;
}
else if (trademark->stage == 4) {
if (trademark->logo_timer == 0) {
timer = 0;
}
else {
timer = --trademark->logo_timer;
}
trademark->alpha2 = alpha2;
} else if (trademark->stage == 4) {
if (trademark->logo_timer == 0) {
timer = 0;
} else {
timer = --trademark->logo_timer;
}
if (timer == 0) {
trademark->stage = 3;
if (timer == 0) {
trademark->stage = 3;
}
}
}
}
static void nintendo_logo_draw(GAME_TRADEMARK* trademark) {
Gfx* gfx;
GRAPH* g = trademark->game.graph;
u8 a;
Gfx* gfx;
GRAPH* g = trademark->game.graph;
u8 a;
OPEN_DISP(g);
nintendo_logo_move(trademark);
gfx = NOW_POLY_OPA_DISP;
a = trademark->alpha2 >> 8;
make_dl_nintendo_logo(&gfx, a);
SET_POLY_OPA_DISP(gfx);
CLOSE_DISP(g);
OPEN_DISP(g);
nintendo_logo_move(trademark);
gfx = NOW_POLY_OPA_DISP;
a = trademark->alpha2 >> 8;
make_dl_nintendo_logo(&gfx, a);
SET_POLY_OPA_DISP(gfx);
CLOSE_DISP(g);
}
static void trademark_cancel(GAME_TRADEMARK* trademark) {
if (trademark->cancel != FALSE) {
return;
}
if (trademark->cancel != FALSE) {
return;
}
if (trademark->stage != 4) {
return;
}
if (trademark->stage != 4) {
return;
}
if (Common_Get(pad_connected) == FALSE) {
return;
}
if (Common_Get(pad_connected) == FALSE) {
return;
}
if ((gamePT->pads[0].on.button & BUTTON_START) != BUTTON_START) {
return;
}
if ((gamePT->pads[0].on.button & BUTTON_START) != BUTTON_START) {
return;
}
trademark->cancel = TRUE;
trademark->cancel = TRUE;
}
static void trademark_move(GAME_TRADEMARK* trademark) {
static u8 s_titlebgm[mTD_TITLE_DEMO_NUM] = { 83, 84, 85, 86, 87 }; // TODO: convert to enum/definitions
static u8 s_titlebgm[mTD_TITLE_DEMO_NUM] = { 83, 84, 85, 86, 87 }; // TODO: convert to enum/definitions
if (trademark->stage == 0) {
int titledemo_no = mTD_get_titledemo_no();
mBGMPsComp_make_ps_lost_fanfare(s_titlebgm[titledemo_no], 360);
trademark->alpha = 0;
trademark->stage = 1;
}
if (trademark->stage == 1) {
int move_timer;
if (trademark->move_timer == 0) {
move_timer = 0;
}
else {
move_timer = --trademark->move_timer;
if (trademark->stage == 0) {
int titledemo_no = mTD_get_titledemo_no();
mBGMPsComp_make_ps_lost_fanfare(s_titlebgm[titledemo_no], 360);
trademark->alpha = 0;
trademark->stage = 1;
}
if (move_timer == 0) {
trademark->stage = 2;
}
}
if (trademark->stage == 1) {
int move_timer;
if (trademark->move_timer == 0) {
move_timer = 0;
} else {
move_timer = --trademark->move_timer;
}
if (trademark->stage == 3 || trademark->cancel) {
if (trademark->alpha < 0xFF00) {
trademark->alpha += 0x880;
if (move_timer == 0) {
trademark->stage = 2;
}
}
if (trademark->check != TRUE) {
trademark->check = TRUE;
}
if (trademark->stage == 3 || trademark->cancel) {
if (trademark->alpha < 0xFF00) {
trademark->alpha += 0x880;
}
if (trademark->alpha >= 0xFF00 && trademark->check == TRUE) {
trademark->alpha = 0xFF00;
trademark->stage = 5;
if (trademark->check != TRUE) {
trademark->check = TRUE;
}
if (trademark->alpha >= 0xFF00 && trademark->check == TRUE) {
trademark->alpha = 0xFF00;
trademark->stage = 5;
}
}
}
}
static void trademark_draw(GAME_TRADEMARK* trademark) {
GRAPH* g = trademark->game.graph;
Gfx* gfx;
OPEN_DISP(g);
GRAPH* g = trademark->game.graph;
Gfx* gfx;
gSPSegment(NOW_POLY_OPA_DISP++, 0, 0);
DisplayList_initialize(g, 0, 0, 0, NULL);
if (mTR_first_flag == FALSE) {
if (trademark->stage >= 2) {
nintendo_logo_draw(trademark);
OPEN_DISP(g);
gSPSegment(NOW_POLY_OPA_DISP++, 0, 0);
DisplayList_initialize(g, 0, 0, 0, NULL);
if (mTR_first_flag == FALSE) {
if (trademark->stage >= 2) {
nintendo_logo_draw(trademark);
}
gfx = NOW_POLY_XLU_DISP;
fade_black_draw(&gfx, trademark->alpha >> 8);
SET_POLY_XLU_DISP(gfx);
}
gfx = NOW_POLY_XLU_DISP;
fade_black_draw(&gfx, trademark->alpha >> 8);
SET_POLY_XLU_DISP(gfx);
}
CLOSE_DISP(g);
CLOSE_DISP(g);
}
static void trademark_main(GAME* game) {
GAME_TRADEMARK* trademark = (GAME_TRADEMARK*)game;
GRAPH* g;
GAME_TRADEMARK* trademark = (GAME_TRADEMARK*)game;
GRAPH* g;
fqrand(); /* increment qrand seed every frame */
trademark_cancel(trademark);
trademark_move(trademark);
trademark_draw(trademark);
fqrand(); /* increment qrand seed every frame */
trademark_cancel(trademark);
trademark_move(trademark);
trademark_draw(trademark);
g = game->graph;
game_debug_draw_last(game, g);
game_draw_last(g);
g = game->graph;
game_debug_draw_last(game, g);
game_draw_last(g);
if (trademark->stage == 5) {
trademark->stage = 0;
trademark_goto_demo_scene(trademark);
mTR_first_flag = FALSE;
}
if (trademark->stage == 5) {
trademark->stage = 0;
trademark_goto_demo_scene(trademark);
mTR_first_flag = FALSE;
}
}
extern void trademark_cleanup(GAME* game) {
GAME_TRADEMARK* trademark = (GAME_TRADEMARK*)game;
mHm_hs_c* home = Save_Get(homes);
int i;
GAME_TRADEMARK* trademark = (GAME_TRADEMARK*)game;
mHm_hs_c* home = Save_Get(homes);
int i;
for (i = 0; i < PLAYER_NUM; i++) {
home->outlook_pal = i;
home->next_outlook_pal = i;
for (i = 0; i < PLAYER_NUM; i++) {
home->outlook_pal = i;
home->next_outlook_pal = i;
mMl_clear_mail_box(home->mailbox, HOME_MAILBOX_SIZE);
home++;
}
mMl_clear_mail_box(home->mailbox, HOME_MAILBOX_SIZE);
home++;
}
JW_SetLogoMode(0);
SoftResetEnable = TRUE;
JW_SetLogoMode(0);
SoftResetEnable = TRUE;
}
extern void trademark_init(GAME* game) {
GAME_TRADEMARK* trademark = (GAME_TRADEMARK*)game;
GRAPH* g = game->graph;
GAME_TRADEMARK* trademark = (GAME_TRADEMARK*)game;
GRAPH* g = game->graph;
common_data_reinit();
mFI_SetClimate(mFI_CLIMATE_0);
game->exec = &trademark_main;
game->cleanup = &trademark_cleanup;
initView(&trademark->view, g);
new_Matrix(game);
trademark->alpha = 0xFF00;
trademark->alpha2 = 0;
trademark->logo_timer = 60;
trademark->move_timer = 16;
trademark->unused_254 = 0;
trademark->unused_210 = 0;
trademark->stage = 0;
trademark->unused_200.x = 0.0f;
trademark->unused_200.y = 0.0f;
trademark->unused_200.z = 0.0f;
trademark->unused_20c = 0.5f;
trademark->unused_25a62 = 0;
trademark->unused_25a64 = 5072;
trademark->unused_25a67 = 0;
trademark->cancel = FALSE;
trademark->check = FALSE;
common_data_reinit();
mFI_SetClimate(mFI_CLIMATE_0);
game->exec = &trademark_main;
game->cleanup = &trademark_cleanup;
initView(&trademark->view, g);
new_Matrix(game);
trademark->alpha = 0xFF00;
trademark->alpha2 = 0;
trademark->logo_timer = 60;
trademark->move_timer = 16;
trademark->unused_254 = 0;
trademark->unused_210 = 0;
trademark->stage = 0;
trademark->unused_200.x = 0.0f;
trademark->unused_200.y = 0.0f;
trademark->unused_200.z = 0.0f;
trademark->unused_20c = 0.5f;
trademark->unused_25a62 = 0;
trademark->unused_25a64 = 5072;
trademark->unused_25a67 = 0;
trademark->cancel = FALSE;
trademark->check = FALSE;
if (mTR_first_flag) {
trademark->stage = 5;
}
if (mTR_first_flag) {
trademark->stage = 5;
}
SetGameFrame(1);
viBlack(FALSE);
JW_SetLogoMode(1);
mMsg_aram_init();
SetGameFrame(1);
viBlack(FALSE);
JW_SetLogoMode(1);
mMsg_aram_init();
Common_Set(player_no, 0);
Common_Set(player_data_mode, 0);
Common_Set(scene_from_title_demo, -1);
mNpc_ClearCacheName();
mNpc_ClearInAnimal();
mNpc_FirstClearGoodbyMail();
mQst_ClearGrabItemInfo();
mNpc_ClearIslandNpcRoomData();
mCD_InitAll();
mISL_ClearKeepIsland();
mBI_ct();
mFont_ct();
mBGMPsComp_scene_mode(0);
mVibctl_init0();
mFRm_clear_err_info();
mEv_SetTitleDemo(mTD_demono_get());
Common_Set(player_no, 0);
Common_Set(player_data_mode, 0);
Common_Set(scene_from_title_demo, -1);
mNpc_ClearCacheName();
mNpc_ClearInAnimal();
mNpc_FirstClearGoodbyMail();
mQst_ClearGrabItemInfo();
mNpc_ClearIslandNpcRoomData();
mCD_InitAll();
mISL_ClearKeepIsland();
mBI_ct();
mFont_ct();
mBGMPsComp_scene_mode(0);
mVibctl_init0();
mFRm_clear_err_info();
mEv_SetTitleDemo(mTD_demono_get());
}
+193 -221
View File
@@ -24,122 +24,115 @@ static u8 l_zaitaku_str[9] = { 0x3C, 0xEC, 0x01, 0x0F, 0x07, 0x10, 0xCA, 0x02, 0
static u8 l_yosokara_str[10] = { 0x60, 0x0E, 0x05, 0x7B, 0x00, 0x0E, 0xF7, 0x15, 0x06, 0x0F };
static void player_select_game_data_init(GAME_PLAYER_SELECT* player_select) {
int player_no = player_select->player_no;
mFI_ClearFieldData();
if (mSDI_StartInitBefore((GAME*)player_select, player_no, mSDI_INIT_MODE_NEW, mSDI_MALLOC_FLAG_GAME) == TRUE) {
player_select->err_no = PLAYER_SELECT_INIT_ERR_SUCCESS;
}
int player_no = player_select->player_no;
mFI_ClearFieldData();
if (mSDI_StartInitBefore((GAME*)player_select, player_no, mSDI_INIT_MODE_NEW, mSDI_MALLOC_FLAG_GAME) == TRUE) {
player_select->err_no = PLAYER_SELECT_INIT_ERR_SUCCESS;
}
}
static void player_select_game_data_init_save(GAME_PLAYER_SELECT* player_select) {
if (mSDI_StartInitBefore((GAME*)player_select, player_select->player_no, mSDI_INIT_MODE_FROM, mSDI_MALLOC_FLAG_GAME) == TRUE) {
player_select->err_no = PLAYER_SELECT_INIT_ERR_SUCCESS;
}
else {
player_select->err_no = PLAYER_SELECT_INIT_ERR_SAVE;
}
if (mSDI_StartInitBefore((GAME*)player_select, player_select->player_no, mSDI_INIT_MODE_FROM,
mSDI_MALLOC_FLAG_GAME) == TRUE) {
player_select->err_no = PLAYER_SELECT_INIT_ERR_SUCCESS;
} else {
player_select->err_no = PLAYER_SELECT_INIT_ERR_SAVE;
}
}
static void player_select_game_data_init_new_player(GAME_PLAYER_SELECT* player_select) {
if (mSDI_StartInitBefore((GAME*)player_select, player_select->player_no, mSDI_INIT_MODE_NEW_PLAYER, mSDI_MALLOC_FLAG_GAME) == TRUE) {
player_select->err_no = PLAYER_SELECT_INIT_ERR_SUCCESS;
}
else {
player_select->err_no = PLAYER_SELECT_INIT_ERR_SAVE;
}
if (mSDI_StartInitBefore((GAME*)player_select, player_select->player_no, mSDI_INIT_MODE_NEW_PLAYER,
mSDI_MALLOC_FLAG_GAME) == TRUE) {
player_select->err_no = PLAYER_SELECT_INIT_ERR_SUCCESS;
} else {
player_select->err_no = PLAYER_SELECT_INIT_ERR_SAVE;
}
}
static void player_select_game_data_init_pak(GAME_PLAYER_SELECT* player_select) {
if (mSDI_StartInitBefore((GAME*)player_select, player_select->player_no, mSDI_INIT_MODE_PAK, mSDI_MALLOC_FLAG_GAME) == TRUE) {
player_select->err_no = PLAYER_SELECT_INIT_ERR_SUCCESS;
}
else {
player_select->err_no = PLAYER_SELECT_INIT_ERR_PAK;
}
if (mSDI_StartInitBefore((GAME*)player_select, player_select->player_no, mSDI_INIT_MODE_PAK,
mSDI_MALLOC_FLAG_GAME) == TRUE) {
player_select->err_no = PLAYER_SELECT_INIT_ERR_SUCCESS;
} else {
player_select->err_no = PLAYER_SELECT_INIT_ERR_PAK;
}
}
static void player_select_game_data_init_err(GAME_PLAYER_SELECT* player_select) {
player_select->mode = PLAYER_SELECT_MODE_SELECTION;
player_select->mode = PLAYER_SELECT_MODE_SELECTION;
}
static PLAYER_SELECT_INIT_PROC l_init_proc[mSDI_INIT_MODE_NUM] = {
&player_select_game_data_init,
&player_select_game_data_init_new_player,
&player_select_game_data_init_save,
&player_select_game_data_init_pak,
&player_select_game_data_init_err
&player_select_game_data_init, &player_select_game_data_init_new_player, &player_select_game_data_init_save,
&player_select_game_data_init_pak, &player_select_game_data_init_err
};
static void player_select_init_after(GAME_PLAYER_SELECT* player_select) {
mSDI_StartInitAfter((GAME*)player_select, FALSE, mSDI_MALLOC_FLAG_GAME);
mSDI_StartInitAfter((GAME*)player_select, FALSE, mSDI_MALLOC_FLAG_GAME);
}
static void player_select_next_mode(int* mode, int max) {
(*mode)++;
if (*mode >= max) {
*mode = 0;
}
(*mode)++;
if (*mode >= max) {
*mode = 0;
}
}
static void player_select_back_mode(int* mode, int max) {
(*mode)--;
if (*mode < 0) {
*mode = max - 1;
}
(*mode)--;
if (*mode < 0) {
*mode = max - 1;
}
}
static void player_select_move_main(GAME_PLAYER_SELECT* player_select) {
int mode = player_select->mode;
int mode = player_select->mode;
if (player_select->err_no == PLAYER_SELECT_INIT_ERR_NONE) {
if (chkTrigger(BUTTON_A)) {
int player_no = player_select->player_no;
if (mode == PLAYER_SELECT_MODE_SELECTION) {
player_select->mode = PLAYER_SELECT_MODE_PLAY;
}
if (player_select->err_no == PLAYER_SELECT_INIT_ERR_NONE) {
if (chkTrigger(BUTTON_A)) {
int player_no = player_select->player_no;
if (mode == PLAYER_SELECT_MODE_SELECTION) {
player_select->mode = PLAYER_SELECT_MODE_PLAY;
}
if (player_select->mode == PLAYER_SELECT_MODE_PLAY) {
(*player_select->init_procs[player_no])(player_select);
}
if (player_select->mode == PLAYER_SELECT_MODE_PLAY) {
(*player_select->init_procs[player_no])(player_select);
}
}
if (chkTrigger(BUTTON_DDOWN) && player_select->mode == PLAYER_SELECT_MODE_SELECTION) {
if (player_select->land_exist == TRUE) {
player_select_next_mode(&player_select->player_no, SELECT_PLAYER_NUM);
} else {
player_select_next_mode(&player_select->player_no, PLAYER_NUM);
}
}
if (chkTrigger(BUTTON_DUP) && player_select->mode == PLAYER_SELECT_MODE_SELECTION) {
if (player_select->land_exist == TRUE) {
player_select_back_mode(&player_select->player_no, SELECT_PLAYER_NUM);
} else {
player_select_back_mode(&player_select->player_no, PLAYER_NUM);
}
}
} else if (player_select->err_no == PLAYER_SELECT_INIT_ERR_SUCCESS) {
player_select_init_after(player_select);
GAME_GOTO_NEXT((GAME*)player_select, select, SELECT);
} else {
Common_Set(scene_from_title_demo, -1);
player_select->err_no = PLAYER_SELECT_INIT_ERR_NONE;
player_select->mode = PLAYER_SELECT_MODE_SELECTION;
}
if (chkTrigger(BUTTON_DDOWN) && player_select->mode == PLAYER_SELECT_MODE_SELECTION) {
if (player_select->land_exist == TRUE) {
player_select_next_mode(&player_select->player_no, SELECT_PLAYER_NUM);
}
else {
player_select_next_mode(&player_select->player_no, PLAYER_NUM);
}
}
if (chkTrigger(BUTTON_DUP) && player_select->mode == PLAYER_SELECT_MODE_SELECTION) {
if (player_select->land_exist == TRUE) {
player_select_back_mode(&player_select->player_no, SELECT_PLAYER_NUM);
}
else {
player_select_back_mode(&player_select->player_no, PLAYER_NUM);
}
}
}
else if (player_select->err_no == PLAYER_SELECT_INIT_ERR_SUCCESS) {
player_select_init_after(player_select);
GAME_GOTO_NEXT((GAME*)player_select, select, SELECT);
}
else {
Common_Set(scene_from_title_demo, -1);
player_select->err_no = PLAYER_SELECT_INIT_ERR_NONE;
player_select->mode = PLAYER_SELECT_MODE_SELECTION;
}
}
static void str_add_word(u8* dst, const u8* word0, const u8* word1, int word0_len, int word1_len) {
for (word0_len; word0_len != 0; word0_len--) {
*dst++ = *word0++;
}
for (word0_len; word0_len != 0; word0_len--) {
*dst++ = *word0++;
}
for (word1_len; word1_len != 0; word1_len--) {
*dst++ = *word1++;
}
for (word1_len; word1_len != 0; word1_len--) {
*dst++ = *word1++;
}
}
static int l_ps_white_color[3] = { 250, 220, 100 };
@@ -149,186 +142,165 @@ static int l_ps_select_color[3] = { 200, 55, 55 };
static u8 _debug_player_select[10] = { 0xE4, 0xBA, 0x90, 0xB4, 0x90, 0x20, 0x0D, 0xC3, 0x0F, 0x07 };
static void player_select_draw_title(GAME_PLAYER_SELECT* player_select) {
mFont_SetMatrix(player_select->game.graph, mFont_MODE_FONT);
mFont_SetLineStrings_AndSpace(
(GAME*)player_select,
_debug_player_select, ARRAY_SIZE(_debug_player_select, u8),
85.0f, 15.0f,
200, 200, 200, 255,
FALSE, TRUE, 0,
1.2f, 1.2f,
mFont_MODE_FONT
);
mFont_UnSetMatrix(player_select->game.graph, mFont_MODE_FONT);
mFont_SetMatrix(player_select->game.graph, mFont_MODE_FONT);
mFont_SetLineStrings_AndSpace((GAME*)player_select, _debug_player_select, ARRAY_SIZE(_debug_player_select, u8),
85.0f, 15.0f, 200, 200, 200, 255, FALSE, TRUE, 0, 1.2f, 1.2f, mFont_MODE_FONT);
mFont_UnSetMatrix(player_select->game.graph, mFont_MODE_FONT);
}
static void player_select_draw_player_no(GAME_PLAYER_SELECT* player_select) {
u8 name_buf[8 + SELECT_NAME_LEN];
u8 pre_str[8] = { 0xED, 0xCA, 0x02, 0x15, 0xC3, 0x20, 0x20, 0x20 };
int player_no = player_select->player_no;
int i;
u8 name_buf[8 + SELECT_NAME_LEN];
u8 pre_str[8] = { 0xED, 0xCA, 0x02, 0x15, 0xC3, 0x20, 0x20, 0x20 };
int player_no = player_select->player_no;
int i;
for (i = 0; i < PLAYER_NUM; i++) {
int* color;
for (i = 0; i < PLAYER_NUM; i++) {
int* color;
/* create text */
mem_clear(name_buf, ARRAY_SIZE(name_buf, u8), CHAR_SPACE);
str_add_word(name_buf, pre_str, player_select->player_names[i], 8, SELECT_NAME_LEN);
/* set player no */
name_buf[6] = (u8)i | CHAR_ZERO;
/* create text */
mem_clear(name_buf, ARRAY_SIZE(name_buf, u8), CHAR_SPACE);
str_add_word(name_buf, pre_str, player_select->player_names[i], 8, SELECT_NAME_LEN);
color = (player_no == i) ? l_ps_select_color : l_ps_white_color;
/* set player no */
name_buf[6] = (u8)i | CHAR_ZERO;
mFont_SetMatrix(player_select->game.graph, mFont_MODE_FONT);
mFont_SetLineStrings_AndSpace(
(GAME*)player_select,
name_buf, ARRAY_SIZE(name_buf, u8),
70.0f, 65.0f + 15.0f * i,
color[0], color[1], color[2], 255,
FALSE, TRUE, 0,
0.8f, 0.8f,
mFont_MODE_FONT
);
mFont_UnSetMatrix(player_select->game.graph, mFont_MODE_FONT);
}
color = (player_no == i) ? l_ps_select_color : l_ps_white_color;
mFont_SetMatrix(player_select->game.graph, mFont_MODE_FONT);
mFont_SetLineStrings_AndSpace((GAME*)player_select, name_buf, ARRAY_SIZE(name_buf, u8), 70.0f,
65.0f + 15.0f * i, color[0], color[1], color[2], 255, FALSE, TRUE, 0, 0.8f, 0.8f,
mFont_MODE_FONT);
mFont_UnSetMatrix(player_select->game.graph, mFont_MODE_FONT);
}
}
static void player_select_draw_yosokara(GAME_PLAYER_SELECT* player_select) {
u8* name = player_select->player_names[PLAYER_NUM];
int* color = (player_select->player_no == PLAYER_NUM) ? l_ps_select_color : l_ps_white_color;
u8* name = player_select->player_names[PLAYER_NUM];
int* color = (player_select->player_no == PLAYER_NUM) ? l_ps_select_color : l_ps_white_color;
mFont_SetMatrix(player_select->game.graph, mFont_MODE_FONT);
mFont_SetLineStrings_AndSpace(
(GAME*)player_select,
name, SELECT_NAME_LEN,
70.0f, 65.0f + 15.0f * PLAYER_NUM,
color[0], color[1], color[2], 255,
FALSE, TRUE, 0,
0.8f, 0.8f,
mFont_MODE_FONT
);
mFont_UnSetMatrix(player_select->game.graph, mFont_MODE_FONT);
mFont_SetMatrix(player_select->game.graph, mFont_MODE_FONT);
mFont_SetLineStrings_AndSpace((GAME*)player_select, name, SELECT_NAME_LEN, 70.0f, 65.0f + 15.0f * PLAYER_NUM,
color[0], color[1], color[2], 255, FALSE, TRUE, 0, 0.8f, 0.8f, mFont_MODE_FONT);
mFont_UnSetMatrix(player_select->game.graph, mFont_MODE_FONT);
}
static void player_select_draw_main(GAME_PLAYER_SELECT* player_select) {
GRAPH* g = player_select->game.graph;
GRAPH* g = player_select->game.graph;
OPEN_DISP(g);
OPEN_DISP(g);
gSPSegment(NOW_POLY_OPA_DISP++, G_MWO_SEGMENT_0, 0);
gSPSegment(NOW_FONT_DISP++, G_MWO_SEGMENT_0, 0);
gSPSegment(NOW_POLY_OPA_DISP++, G_MWO_SEGMENT_0, 0);
gSPSegment(NOW_FONT_DISP++, G_MWO_SEGMENT_0, 0);
DisplayList_initialize(g, 0, 0, 0, NULL);
DisplayList_initialize(g, 0, 0, 0, NULL);
gDPPipeSync(NOW_POLY_OPA_DISP++);
CLOSE_DISP(g);
gDPPipeSync(NOW_POLY_OPA_DISP++);
showView(&player_select->view, VIEW_UPDATE_ALL);
player_select_draw_title(player_select);
player_select_draw_player_no(player_select);
player_select_draw_yosokara(player_select);
CLOSE_DISP(g);
showView(&player_select->view, VIEW_UPDATE_ALL);
player_select_draw_title(player_select);
player_select_draw_player_no(player_select);
player_select_draw_yosokara(player_select);
}
static void player_select_main(GAME* game) {
GAME_PLAYER_SELECT* player_select = (GAME_PLAYER_SELECT*)game;
GAME_PLAYER_SELECT* player_select = (GAME_PLAYER_SELECT*)game;
player_select_move_main(player_select);
player_select_draw_main(player_select);
player_select_move_main(player_select);
player_select_draw_main(player_select);
{
GRAPH* g = game->graph;
game_debug_draw_last(game, g);
game_draw_last(g);
}
{
GRAPH* g = game->graph;
game_debug_draw_last(game, g);
game_draw_last(g);
}
}
extern void player_select_cleanup(GAME* game) { }
extern void player_select_cleanup(GAME* game) {
}
extern void player_select_init(GAME* game) {
GAME_PLAYER_SELECT* player_select = (GAME_PLAYER_SELECT*)game;
GRAPH* g = game->graph;
int i;
game->exec = &player_select_main;
game->cleanup = &player_select_cleanup;
GAME_PLAYER_SELECT* player_select = (GAME_PLAYER_SELECT*)game;
GRAPH* g = game->graph;
int i;
{
View* view = &player_select->view;
initView(view, g);
view->flag = VIEW_UPDATE_ORTHOGRAPHIC;
}
game->exec = &player_select_main;
game->cleanup = &player_select_cleanup;
new_Matrix(game);
SetGameFrame(1);
player_select->player_no = 0;
player_select->err_no = PLAYER_SELECT_INIT_ERR_NONE;
player_select->mode = PLAYER_SELECT_MODE_SELECTION;
for (i = 0; i < SELECT_PLAYER_NUM; i++) {
int j;
for (j = 0; j < 6; j++) {
player_select->player_names[i][j] = mitouroku_str[j];
{
View* view = &player_select->view;
initView(view, g);
view->flag = VIEW_UPDATE_ORTHOGRAPHIC;
}
for (j = 6; j < SELECT_NAME_LEN; j++) {
player_select->player_names[i][j] = CHAR_SPACE;
}
new_Matrix(game);
SetGameFrame(1);
player_select->player_types[i] = PLAYER_SELECT_PLAYER_MODE_NO_SAVE;
}
player_select->player_no = 0;
player_select->err_no = PLAYER_SELECT_INIT_ERR_NONE;
player_select->mode = PLAYER_SELECT_MODE_SELECTION;
for (i = 0; i < LAND_NAME_SIZE; i++) {
player_select->land_name[i] = CHAR_SPACE;
}
player_select->land_exist = FALSE;
for (i = 0; i < SELECT_PLAYER_NUM; i++) {
int j;
if (mFRm_CheckSaveData() == TRUE) {
Private_c* private_p = Save_Get(private);
for (i = 0; i < PLAYER_NUM; i++) {
u8* name = player_select->player_names[i];
if (mPr_CheckPrivate(private_p) == TRUE) {
mPr_CopyPlayerName(name, private_p->player_ID.player_name);
if (private_p->exists == FALSE) {
mem_copy(name + PLAYER_NAME_LEN, l_gaishutu_str, 10);
player_select->player_types[i] = PLAYER_SELECT_PLAYER_MODE_OUT;
for (j = 0; j < 6; j++) {
player_select->player_names[i][j] = mitouroku_str[j];
}
else {
mem_copy(name + PLAYER_NAME_LEN, l_zaitaku_str, 9);
player_select->player_types[i] = PLAYER_SELECT_PLAYER_MODE_HOME;
}
}
else {
player_select->player_types[i] = PLAYER_SELECT_PLAYER_MODE_UNREGISTERED;
}
private_p++;
for (j = 6; j < SELECT_NAME_LEN; j++) {
player_select->player_names[i][j] = CHAR_SPACE;
}
player_select->player_types[i] = PLAYER_SELECT_PLAYER_MODE_NO_SAVE;
}
mLd_CopyLandName(player_select->land_name, Save_Get(land_info.name));
player_select->land_exist = TRUE;
}
for (i = 0; i < LAND_NAME_SIZE; i++) {
player_select->land_name[i] = CHAR_SPACE;
}
player_select->land_exist = FALSE;
for (i = 0; i < SELECT_PLAYER_NAME_EXTRA; i++) {
player_select->player_names[PLAYER_NUM][i] = l_yosokara_str[i];
}
if (mFRm_CheckSaveData() == TRUE) {
Private_c* private_p = Save_Get(private_data);
for (i = 0; i < PLAYER_NUM; i++) {
u8* name = player_select->player_names[i];
for (i = SELECT_PLAYER_NAME_EXTRA; i < SELECT_NAME_LEN; i++) {
player_select->player_names[PLAYER_NUM][i] = CHAR_SPACE;
}
if (mPr_CheckPrivate(private_p) == TRUE) {
mPr_CopyPlayerName(name, private_p->player_ID.player_name);
player_select->player_types[PLAYER_NUM] = PLAYER_SELECT_PLAYER_MODE_OUT;
if (private_p->exists == FALSE) {
mem_copy(name + PLAYER_NAME_LEN, l_gaishutu_str, 10);
player_select->player_types[i] = PLAYER_SELECT_PLAYER_MODE_OUT;
} else {
mem_copy(name + PLAYER_NAME_LEN, l_zaitaku_str, 9);
player_select->player_types[i] = PLAYER_SELECT_PLAYER_MODE_HOME;
}
} else {
player_select->player_types[i] = PLAYER_SELECT_PLAYER_MODE_UNREGISTERED;
}
for (i = 0; i < SELECT_PLAYER_NUM; i++) {
player_select->init_procs[i] = l_init_proc[player_select->player_types[i]];
}
private_p++;
}
Common_Set(player_no, 0);
Common_Set(player_data_mode, 0);
Common_Set(scene_from_title_demo, -1);
}
mLd_CopyLandName(player_select->land_name, Save_Get(land_info.name));
player_select->land_exist = TRUE;
}
for (i = 0; i < SELECT_PLAYER_NAME_EXTRA; i++) {
player_select->player_names[PLAYER_NUM][i] = l_yosokara_str[i];
}
for (i = SELECT_PLAYER_NAME_EXTRA; i < SELECT_NAME_LEN; i++) {
player_select->player_names[PLAYER_NUM][i] = CHAR_SPACE;
}
player_select->player_types[PLAYER_NUM] = PLAYER_SELECT_PLAYER_MODE_OUT;
for (i = 0; i < SELECT_PLAYER_NUM; i++) {
player_select->init_procs[i] = l_init_proc[player_select->player_types[i]];
}
Common_Set(player_no, 0);
Common_Set(player_data_mode, 0);
Common_Set(scene_from_title_demo, -1);
}
+1 -1
View File
@@ -182,7 +182,7 @@ static int sSC_CheckSaveData_Needlework() {
for (i = 0; i < PLAYER_NUM; i++) {
for (j = 0; j < mPr_ORIGINAL_DESIGN_COUNT; j++) {
if (sSC_CheckOneOriginalData(Save_Get(private + i)->my_org + j) == FALSE) {
if (sSC_CheckOneOriginalData(Save_Get(private_data + i)->my_org + j) == FALSE) {
mFRm_ERRORLINE(348);
return sSC_MYK_ERR_NEEDLEWORK;
}
+158 -177
View File
@@ -1,244 +1,225 @@
static int sChk_lbRTC_ymd_c_NSW(lbRTC_ymd_c* ymd) {
int res = FALSE;
int res = FALSE;
if (ymd->year < GAME_YEAR_MIN + 1 || ymd->year > GAME_YEAR_MAX - 1) {
res = TRUE;
}
if (ymd->month == 0 || ymd->month > lbRTC_MONTHS_MAX) {
res = TRUE;
}
if (ymd->day == 0 || ymd->day > 31) {
res = TRUE;
}
if (res == TRUE) {
if (ymd->year == 0 && ymd->month == 0 && ymd->day == 0) {
res = FALSE;
if (ymd->year < GAME_YEAR_MIN + 1 || ymd->year > GAME_YEAR_MAX - 1) {
res = TRUE;
}
else if (ymd->year == mTM_rtcTime_ymd_clear_code.year && ymd->month == mTM_rtcTime_ymd_clear_code.month && ymd->day == mTM_rtcTime_ymd_clear_code.day) {
res = FALSE;
if (ymd->month == 0 || ymd->month > lbRTC_MONTHS_MAX) {
res = TRUE;
}
if (ymd->day == 0 || ymd->day > 31) {
res = TRUE;
}
if (res == TRUE) {
mFRm_set_errInfo(l_mfrm_err_info, 91, l_mfrm_now_color);
}
}
if (ymd->year == 0 && ymd->month == 0 && ymd->day == 0) {
res = FALSE;
} else if (ymd->year == mTM_rtcTime_ymd_clear_code.year && ymd->month == mTM_rtcTime_ymd_clear_code.month &&
ymd->day == mTM_rtcTime_ymd_clear_code.day) {
res = FALSE;
}
return res;
if (res == TRUE) {
mFRm_set_errInfo(l_mfrm_err_info, 91, l_mfrm_now_color);
}
}
return res;
}
static int sCck_CheckSaveData_radiocard_NSW(Private_c* priv) {
mPr_day_day_c* radiocard_p = &priv->radiocard;
int res;
mPr_day_day_c* radiocard_p = &priv->radiocard;
int res;
if (sChk_lbRTC_ymd_c_NSW(&radiocard_p->last_date)) {
mFRm_ERRORLINE(112);
res = TRUE;
}
else if (radiocard_p->days > mPr_RADIOCARD_MAX_DAYS) {
mFRm_ERRORLINE(121);
res = TRUE;
}
else {
res = FALSE;
}
if (sChk_lbRTC_ymd_c_NSW(&radiocard_p->last_date)) {
mFRm_ERRORLINE(112);
res = TRUE;
} else if (radiocard_p->days > mPr_RADIOCARD_MAX_DAYS) {
mFRm_ERRORLINE(121);
res = TRUE;
} else {
res = FALSE;
}
return res;
return res;
}
static int sCck_CheckSaveData_calendar_NSW(Private_c* priv) {
int res;
int res;
if (priv->calendar.edit > 1) {
mFRm_ERRORLINE(143);
res = TRUE;
}
else if (priv->calendar.pad_63 != 0) {
mFRm_ERRORLINE(151);
res = TRUE;
}
else if (
(
priv->calendar.year < GAME_YEAR_MIN + 1 || priv->calendar.year > GAME_YEAR_MAX - 1 ||
priv->calendar.month == 0 || priv->calendar.month > lbRTC_DECEMBER
) &&
(priv->calendar.year != 0 || priv->calendar.month != 0)
) {
mFRm_ERRORLINE(164);
res = TRUE;
}
else {
res = FALSE;
}
if (priv->calendar.edit > 1) {
mFRm_ERRORLINE(143);
res = TRUE;
} else if (priv->calendar.pad_63 != 0) {
mFRm_ERRORLINE(151);
res = TRUE;
} else if ((priv->calendar.year < GAME_YEAR_MIN + 1 || priv->calendar.year > GAME_YEAR_MAX - 1 ||
priv->calendar.month == 0 || priv->calendar.month > lbRTC_DECEMBER) &&
(priv->calendar.year != 0 || priv->calendar.month != 0)) {
mFRm_ERRORLINE(164);
res = TRUE;
} else {
res = FALSE;
}
return res;
return res;
}
static int sCck_CheckSaveData_deposit_NSW(Private_c* priv) {
int res;
int deposit = priv->bank_account;
int res;
int deposit = priv->bank_account;
if (deposit < 0 || deposit > mPr_DEPOSIT_MAX) {
mFRm_ERRORLINE(184);
res = TRUE;
}
else {
res = FALSE;
}
if (deposit < 0 || deposit > mPr_DEPOSIT_MAX) {
mFRm_ERRORLINE(184);
res = TRUE;
} else {
res = FALSE;
}
return res;
return res;
}
static int sCck_CheckSaveData_nw_visitor_NSW(Private_c* priv) {
mPr_day_day_c* nw_visitor_p = &priv->nw_visitor;
int res;
mPr_day_day_c* nw_visitor_p = &priv->nw_visitor;
int res;
if (sChk_lbRTC_ymd_c_NSW(&nw_visitor_p->last_date) != FALSE && nw_visitor_p->last_date.year != 0) {
mFRm_ERRORLINE(204);
res = TRUE;
}
else {
res = FALSE;
}
if (sChk_lbRTC_ymd_c_NSW(&nw_visitor_p->last_date) != FALSE && nw_visitor_p->last_date.year != 0) {
mFRm_ERRORLINE(204);
res = TRUE;
} else {
res = FALSE;
}
return res;
return res;
}
static int sCck_CheckSaveData_my_org_no_table_NSW(Private_c* priv) {
u8 my_org_no;
int field = 0;
int total = 0;
u8* my_org_no_table = priv->my_org_no_table;
int i;
int res;
u8 my_org_no;
int field = 0;
int total = 0;
u8* my_org_no_table = priv->my_org_no_table;
int i;
int res;
for (i = 0; i < mPr_ORIGINAL_DESIGN_COUNT; i++) {
my_org_no = my_org_no_table[i];
for (i = 0; i < mPr_ORIGINAL_DESIGN_COUNT; i++) {
my_org_no = my_org_no_table[i];
if (my_org_no >= mPr_ORIGINAL_DESIGN_COUNT) {
return TRUE;
if (my_org_no >= mPr_ORIGINAL_DESIGN_COUNT) {
return TRUE;
}
total += my_org_no;
field |= (u16)(1 << my_org_no);
}
total += my_org_no;
field |= (u16)(1 << my_org_no);
}
if ((u16)field != (u16)((1 << mPr_ORIGINAL_DESIGN_COUNT) - 1) && total != 0) {
mFRm_ERRORLINE(239);
res = TRUE;
} else {
res = FALSE;
}
if ((u16)field != (u16)((1 << mPr_ORIGINAL_DESIGN_COUNT) - 1) && total != 0) {
mFRm_ERRORLINE(239);
res = TRUE;
}
else {
res = FALSE;
}
return res;
return res;
}
static int sCck_CheckSaveData_bridge_NSW() {
PlusBridge_c* bridge = Save_GetPointer(bridge);
PlusBridge_c* bridge = Save_GetPointer(bridge);
if (sChk_lbRTC_ymd_c_NSW(&bridge->build_date)) {
mFRm_ERRORLINE(259);
return TRUE;
}
else if (bridge->exists || bridge->pending) {
if (
bridge->block_x == 0 || bridge->block_x > FG_BLOCK_X_NUM ||
bridge->block_z == 0 || bridge->block_z > FG_BLOCK_Z_NUM
) {
mFRm_ERRORLINE(271);
return TRUE;
if (sChk_lbRTC_ymd_c_NSW(&bridge->build_date)) {
mFRm_ERRORLINE(259);
return TRUE;
} else if (bridge->exists || bridge->pending) {
if (bridge->block_x == 0 || bridge->block_x > FG_BLOCK_X_NUM || bridge->block_z == 0 ||
bridge->block_z > FG_BLOCK_Z_NUM) {
mFRm_ERRORLINE(271);
return TRUE;
}
} else if (bridge->block_x != 0 || bridge->block_z != 0) {
mFRm_ERRORLINE(280);
return TRUE;
}
}
else if (bridge->block_x != 0 || bridge->block_z != 0) {
mFRm_ERRORLINE(280);
return TRUE;
}
return FALSE;
return FALSE;
}
static int sCck_CheckSaveData_fishRecord_NSW() {
mFR_record_c* record;
lbRTC_ymd_c ymd;
int i;
mFR_record_c* record;
lbRTC_ymd_c ymd;
int i;
for (i = 0; i < mFR_RECORD_NUM; i++) {
record = Save_Get(fishRecord + i);
mTM_set_renew_time(&ymd, &record->time);
for (i = 0; i < mFR_RECORD_NUM; i++) {
record = Save_Get(fishRecord + i);
mTM_set_renew_time(&ymd, &record->time);
if (record->size < 0) {
mFRm_ERRORLINE(307);
return TRUE;
if (record->size < 0) {
mFRm_ERRORLINE(307);
return TRUE;
}
if (record->size != 0 && sChk_lbRTC_ymd_c_NSW(&ymd) == TRUE) {
mFRm_ERRORLINE(316);
return TRUE;
}
}
if (record->size != 0 && sChk_lbRTC_ymd_c_NSW(&ymd) == TRUE) {
mFRm_ERRORLINE(316);
return TRUE;
}
}
return FALSE;
return FALSE;
}
static int sCck_CheckSaveData_Anmret_NSW() {
Anmret_c* anmret = Save_GetPointer(return_animal);
int res;
lbRTC_ymd_c ymd;
Anmret_c* anmret = Save_GetPointer(return_animal);
int res;
lbRTC_ymd_c ymd;
if (anmret->npc_id != EMPTY_NO && ITEM_NAME_GET_TYPE(anmret->npc_id) != NAME_TYPE_NPC) {
mFRm_ERRORLINE(339);
res = TRUE;
}
else {
mTM_set_renew_time(&ymd, &anmret->renew_time);
if (anmret->npc_id != EMPTY_NO && ITEM_NAME_GET_TYPE(anmret->npc_id) != NAME_TYPE_NPC) {
mFRm_ERRORLINE(339);
res = TRUE;
} else {
mTM_set_renew_time(&ymd, &anmret->renew_time);
if (sChk_lbRTC_ymd_c_NSW(&ymd) == TRUE) {
mFRm_ERRORLINE(349);
res = TRUE;
if (sChk_lbRTC_ymd_c_NSW(&ymd) == TRUE) {
mFRm_ERRORLINE(349);
res = TRUE;
} else {
res = FALSE;
}
}
else {
res = FALSE;
}
}
return res;
return res;
}
static int sCck_CheckSaveData_LightHouse_NSW() {
int res;
int res;
if (sChk_lbRTC_ymd_c_NSW(&Save_Get(LightHouse).renew_time) == TRUE) {
mFRm_ERRORLINE(368);
res = TRUE;
}
else {
res = FALSE;
}
if (sChk_lbRTC_ymd_c_NSW(&Save_Get(LightHouse).renew_time) == TRUE) {
mFRm_ERRORLINE(368);
res = TRUE;
} else {
res = FALSE;
}
return res;
return res;
}
static int sChk_CheckSaveData_NSW() {
int res = FALSE;
int i;
int res = FALSE;
int i;
for (i = 0; i < PLAYER_NUM; i++) {
Private_c* priv = Save_Get(private) + i;
for (i = 0; i < PLAYER_NUM; i++) {
Private_c* priv = Save_Get(private_data) + i;
res |= sCck_CheckSaveData_radiocard_NSW(priv);
res |= sCck_CheckSaveData_calendar_NSW(priv);
res |= sCck_CheckSaveData_deposit_NSW(priv);
res |= sCck_CheckSaveData_nw_visitor_NSW(priv);
res |= sCck_CheckSaveData_my_org_no_table_NSW(priv);
}
res |= sCck_CheckSaveData_radiocard_NSW(priv);
res |= sCck_CheckSaveData_calendar_NSW(priv);
res |= sCck_CheckSaveData_deposit_NSW(priv);
res |= sCck_CheckSaveData_nw_visitor_NSW(priv);
res |= sCck_CheckSaveData_my_org_no_table_NSW(priv);
}
res |= sCck_CheckSaveData_bridge_NSW();
res |= sCck_CheckSaveData_fishRecord_NSW();
res |= sCck_CheckSaveData_Anmret_NSW();
res |= sCck_CheckSaveData_LightHouse_NSW();
res |= sCck_CheckSaveData_bridge_NSW();
res |= sCck_CheckSaveData_fishRecord_NSW();
res |= sCck_CheckSaveData_Anmret_NSW();
res |= sCck_CheckSaveData_LightHouse_NSW();
return res;
return res;
}
+48 -75
View File
@@ -1,105 +1,78 @@
static int sCck_CheckSaveData_diary_body_YSD(Private_c* priv) {
return FALSE;
return FALSE;
}
static int sCCk_Check_ItemName(mActor_name_t item) {
/* TODO: do not hardcode this */
static s16 item1_kinds[ITEM1_CAT_NUM] = {
255,
3,
91,
39,
254,
48,
66,
66,
7,
10,
54,
15,
95,
44,
1,
3
};
/* TODO: do not hardcode this */
static s16 item1_kinds[ITEM1_CAT_NUM] = { 255, 3, 91, 39, 254, 48, 66, 66, 7, 10, 54, 15, 95, 44, 1, 3 };
mActor_name_t item_name = (mActor_name_t)item;
int item_type = ITEM_NAME_GET_TYPE(item_name);
int res = FALSE;
mActor_name_t item_name = (mActor_name_t)item;
int item_type = ITEM_NAME_GET_TYPE(item_name);
int res = FALSE;
if (item_type == NAME_TYPE_ITEM1) {
int index = ITEM_NAME_GET_INDEX(item_name);
int category = ITEM_NAME_GET_CAT(item_name);
if (
index < 0 ||
index > item1_kinds[category] ||
item_name == ITM_SICKLE /* ??? why is this explicitly invalid... lol */
) {
res = TRUE;
if (item_type == NAME_TYPE_ITEM1) {
int index = ITEM_NAME_GET_INDEX(item_name);
int category = ITEM_NAME_GET_CAT(item_name);
if (index < 0 || index > item1_kinds[category] ||
item_name == ITM_SICKLE /* ??? why is this explicitly invalid... lol */
) {
res = TRUE;
}
} else if (item_name != EMPTY_NO && item_type != NAME_TYPE_FTR0 && item_type != NAME_TYPE_FTR1) {
mFRm_ERRORLINE(110);
res = TRUE;
}
}
else if (item_name != EMPTY_NO && item_type != NAME_TYPE_FTR0 && item_type != NAME_TYPE_FTR1) {
mFRm_ERRORLINE(110);
res = TRUE;
}
return res;
return res;
}
static int sCCk_Check_ItemName_Possession(mActor_name_t item) {
int res = FALSE;
int res = FALSE;
if (
sCCk_Check_ItemName(item) ||
(item >= ITM_MY_ORG_UMBRELLA0 && item <= ITM_MY_ORG_UMBRELLA7) ||
(item >= ITM_RED_PAINT && item <= ITM_BROWN_PAINT) ||
item == ITM_PRESENT ||
item == ITM_TOWN_MAP ||
item == ITM_GOLDEN_NET_PRESENT ||
item == ITM_GOLDEN_AXE_PRESENT ||
item == ITM_GOLDEN_SHOVEL_PRESENT ||
item == ITM_GOLDEN_ROD_PRESENT
) {
mFRm_ERRORLINE(141);
res = TRUE;
}
if (sCCk_Check_ItemName(item) || (item >= ITM_MY_ORG_UMBRELLA0 && item <= ITM_MY_ORG_UMBRELLA7) ||
(item >= ITM_RED_PAINT && item <= ITM_BROWN_PAINT) || item == ITM_PRESENT || item == ITM_TOWN_MAP ||
item == ITM_GOLDEN_NET_PRESENT || item == ITM_GOLDEN_AXE_PRESENT || item == ITM_GOLDEN_SHOVEL_PRESENT ||
item == ITM_GOLDEN_ROD_PRESENT) {
mFRm_ERRORLINE(141);
res = TRUE;
}
return res;
return res;
}
static int sCck_CheckSaveData_Item_YSD(Private_c* priv) {
int i;
int i;
for (i = 0; i < mPr_POCKETS_SLOT_COUNT; i++) {
sCCk_Check_ItemName_Possession(priv->inventory.pockets[i]);
}
for (i = 0; i < mPr_POCKETS_SLOT_COUNT; i++) {
sCCk_Check_ItemName_Possession(priv->inventory.pockets[i]);
}
return FALSE;
return FALSE;
}
static int sCck_CheckSaveData_Mail_YSD(Private_c* priv) {
int res = FALSE;
int i;
int res = FALSE;
int i;
for (i = 0; i < mPr_INVENTORY_MAIL_COUNT; i++) {
res |= sChk_Mail_c_sub(priv->mail + i, 0);
}
for (i = 0; i < mPr_INVENTORY_MAIL_COUNT; i++) {
res |= sChk_Mail_c_sub(priv->mail + i, 0);
}
return FALSE;
return FALSE;
}
static int sChk_CheckSaveData_YSD() {
int res = FALSE;
int i;
int res = FALSE;
int i;
for (i = 0; i < PLAYER_NUM; i++) {
Private_c* priv = Save_Get(private) + i;
for (i = 0; i < PLAYER_NUM; i++) {
Private_c* priv = Save_Get(private_data) + i;
res |= sCck_CheckSaveData_Item_YSD(priv);
res |= sCck_CheckSaveData_Mail_YSD(priv);
res |= sCck_CheckSaveData_diary_body_YSD(priv);
}
res |= sCck_CheckSaveData_Item_YSD(priv);
res |= sCck_CheckSaveData_Mail_YSD(priv);
res |= sCck_CheckSaveData_diary_body_YSD(priv);
}
return res;
return res;
}
+67 -67
View File
@@ -1,75 +1,75 @@
static int sChk_CheckSaveData_komatu() {
int i;
int j;
int i;
int j;
for (i = 0; i < PLAYER_NUM; i++) {
Private_c* priv = Save_Get(private) + i;
for (i = 0; i < PLAYER_NUM; i++) {
Private_c* priv = Save_Get(private_data) + i;
{
const u8 gender = priv->gender;
if (gender > mPr_SEX_FEMALE) {
return TRUE;
}
}
{
s8 face = priv->face;
if (face < 0 || face >= mPr_FACE_TYPE_NUM) {
return TRUE;
}
}
{
mPr_cloth_c* cloth = &priv->cloth;
u16 idx = cloth->idx;
mActor_name_t item;
if (idx >= (256 + 8) || idx == 255) {
return TRUE;
}
item = cloth->item;
if (item != EMPTY_NO) {
int valid_cloth = item == RSV_CLOTH || (item >= ITM_CLOTH000 && item < ITM_CLOTH_END);
if (valid_cloth == FALSE) {
return TRUE;
{
const u8 gender = priv->gender;
if (gender > mPr_SEX_FEMALE) {
return TRUE;
}
}
}
}
{
mPr_destiny_c* destiny = &priv->destiny;
if (destiny->type >= mPr_DESTINY_NUM) {
return TRUE;
}
}
{
mPr_sunburn_c* sunburn = &priv->sunburn;
s8 t = sunburn->rank;
s8 t2;
if (t < 0 || t >= mPr_SUNBURN_RANK_NUM) {
return TRUE;
}
t2 = sunburn->rankdown_days;
if (t2 < 0 || t2 > 2) {
return TRUE;
}
}
{
u8 golden_items_collected = priv->golden_items_collected;
for (j = 4; j < 8; j++) {
if (golden_items_collected & ((u8)(1 << j))) {
return TRUE;
{
s8 face = priv->face;
if (face < 0 || face >= mPr_FACE_TYPE_NUM) {
return TRUE;
}
}
}
}
}
return FALSE;
{
mPr_cloth_c* cloth = &priv->cloth;
u16 idx = cloth->idx;
mActor_name_t item;
if (idx >= (256 + 8) || idx == 255) {
return TRUE;
}
item = cloth->item;
if (item != EMPTY_NO) {
int valid_cloth = item == RSV_CLOTH || (item >= ITM_CLOTH000 && item < ITM_CLOTH_END);
if (valid_cloth == FALSE) {
return TRUE;
}
}
}
{
mPr_destiny_c* destiny = &priv->destiny;
if (destiny->type >= mPr_DESTINY_NUM) {
return TRUE;
}
}
{
mPr_sunburn_c* sunburn = &priv->sunburn;
s8 t = sunburn->rank;
s8 t2;
if (t < 0 || t >= mPr_SUNBURN_RANK_NUM) {
return TRUE;
}
t2 = sunburn->rankdown_days;
if (t2 < 0 || t2 > 2) {
return TRUE;
}
}
{
u8 golden_items_collected = priv->golden_items_collected;
for (j = 4; j < 8; j++) {
if (golden_items_collected & ((u8)(1 << j))) {
return TRUE;
}
}
}
}
return FALSE;
}
+158 -172
View File
@@ -12,253 +12,239 @@
#include "m_common_data.h"
static void save_menu_set_cursor_col(GAME_SAVE_MENU* save_menu) {
/* this was likely meant to be static */
int cursor_col[10][3] = {
{ 192, 120, 120 },
{ 224, 130, 130 },
{ 240, 150, 150 },
{ 255, 180, 180 },
{ 240, 150, 150 },
{ 224, 130, 130 },
{ 192, 120, 120 },
{ 128, 80, 80 },
{ 64, 64, 64 },
{ 128, 80, 80 },
};
/* this was likely meant to be static */
int cursor_col[10][3] = {
{ 192, 120, 120 }, { 224, 130, 130 }, { 240, 150, 150 }, { 255, 180, 180 }, { 240, 150, 150 },
{ 224, 130, 130 }, { 192, 120, 120 }, { 128, 80, 80 }, { 64, 64, 64 }, { 128, 80, 80 },
};
int (*dst)[3] = &save_menu->cursor_col[save_menu->mode];
int (*color)[3] = &cursor_col[(u32)save_menu->frame / 4];
int i;
for (i = 0; i < 3; i++) {
(*dst)[i] = (*color)[i];
}
int(*dst)[3] = &save_menu->cursor_col[save_menu->mode];
int(*color)[3] = &cursor_col[(u32)save_menu->frame / 4];
int i;
for (i = 0; i < 3; i++) {
(*dst)[i] = (*color)[i];
}
}
static void save_menu_reset_cursor_col(int (*color)[3]) {
int default_color[3] = { 40, 40, 40 };
int i;
int default_color[3] = { 40, 40, 40 };
int i;
for (i = 0; i < 3; i++) {
(*color)[i] = default_color[i];
}
for (i = 0; i < 3; i++) {
(*color)[i] = default_color[i];
}
}
typedef void (*SAVE_MENU_PROC)(GAME_SAVE_MENU*);
static void save_menu_data_save_from(GAME_SAVE_MENU* save_menu) {
if ((int)Common_Get(player_no) != mPr_FOREIGNER) {
Common_Get(now_private)->exists = TRUE;
save_menu->error = SAVE_ERROR_EXIT; // OK
}
else {
save_menu->error = SAVE_ERROR_FLASHROM; // Player is foriegner
}
if ((int)Common_Get(player_no) != mPr_FOREIGNER) {
Common_Get(now_private)->exists = TRUE;
save_menu->error = SAVE_ERROR_EXIT; // OK
} else {
save_menu->error = SAVE_ERROR_FLASHROM; // Player is foriegner
}
}
static void save_menu_data_save_pak(GAME_SAVE_MENU* save_menu) {
Private_c* private = Common_Get(now_private);
if ((int)Common_Get(player_no) == mPr_FOREIGNER) {
AnmPersonalID_c* foriegn_id = mNpc_GetOtherAnimalPersonalID(NULL, 0);
if (foriegn_id != NULL) {
mNpc_CopyAnimalPersonalID(&private->stored_anm_id, foriegn_id);
}
}
mCPk_PakOpen(mCPk_get_pkinfo(), 0);
if (mCPk_SavePak(Save_Get(private), Save_Get(animals), mCPk_get_pkinfo()) == TRUE) {
if (mLd_PlayerManKindCheck() == FALSE) {
Common_Get(now_private)->exists = FALSE;
Private_c* private = Common_Get(now_private);
if ((int)Common_Get(player_no) == mPr_FOREIGNER) {
AnmPersonalID_c* foriegn_id = mNpc_GetOtherAnimalPersonalID(NULL, 0);
if (foriegn_id != NULL) {
mNpc_CopyAnimalPersonalID(&private->stored_anm_id, foriegn_id);
}
}
save_menu->error = SAVE_ERROR_EXIT; // OK
}
else {
save_menu->error = SAVE_ERROR_CPAK; // Failed to save to CPak
}
mCPk_PakOpen(mCPk_get_pkinfo(), 0);
if (mCPk_SavePak(Save_Get(private_data), Save_Get(animals), mCPk_get_pkinfo()) == TRUE) {
if (mLd_PlayerManKindCheck() == FALSE) {
Common_Get(now_private)->exists = FALSE;
}
save_menu->error = SAVE_ERROR_EXIT; // OK
} else {
save_menu->error = SAVE_ERROR_CPAK; // Failed to save to CPak
}
}
static void save_menu_move_do_save(GAME_SAVE_MENU* save_menu) {
static SAVE_MENU_PROC save_proc[SAVE_MODE_NUM] = { &save_menu_data_save_from, &save_menu_data_save_pak };
static SAVE_MENU_PROC save_proc[SAVE_MODE_NUM] = { &save_menu_data_save_from, &save_menu_data_save_pak };
int mode = save_menu->mode;
int mode = save_menu->mode;
/* Check and save to select location */
if (chkTrigger(BUTTON_A)) {
(*save_proc[mode])(save_menu);
}
/* Check and change selected save mode */
if (chkTrigger(BUTTON_R) || chkTrigger(BUTTON_DUP) || chkTrigger(BUTTON_DDOWN)) {
save_menu->frame = 0;
save_menu_reset_cursor_col(save_menu->cursor_col + mode);
save_menu->mode++;
if (save_menu->mode >= SAVE_MODE_NUM) {
save_menu->mode = SAVE_MODE_BEGIN;
/* Check and save to select location */
if (chkTrigger(BUTTON_A)) {
(*save_proc[mode])(save_menu);
}
}
/* Check if should exit menu */
if (chkTrigger(BUTTON_B)) {
save_menu->error = SAVE_ERROR_EXIT; // OK
}
/* Check and change selected save mode */
if (chkTrigger(BUTTON_R) || chkTrigger(BUTTON_DUP) || chkTrigger(BUTTON_DDOWN)) {
save_menu->frame = 0;
save_menu_reset_cursor_col(save_menu->cursor_col + mode);
save_menu->mode++;
if (save_menu->mode >= SAVE_MODE_NUM) {
save_menu->mode = SAVE_MODE_BEGIN;
}
}
/* Check if should exit menu */
if (chkTrigger(BUTTON_B)) {
save_menu->error = SAVE_ERROR_EXIT; // OK
}
}
static void save_menu_move_finish(GAME_SAVE_MENU* save_menu) {
GAME_GOTO_NEXT((GAME*)save_menu, trademark, TRADEMARK);
GAME_GOTO_NEXT((GAME*)save_menu, trademark, TRADEMARK);
}
static void save_menu_move_err(GAME_SAVE_MENU* save_menu) {
save_menu->error = SAVE_ERROR_NONE; // cleared
save_menu->error = SAVE_ERROR_NONE; // cleared
}
static void save_menu_move_main(GAME_SAVE_MENU* save_menu) {
static SAVE_MENU_PROC sub_proc[SAVE_ERROR_NUM] = {
&save_menu_move_do_save,
&save_menu_move_err,
&save_menu_move_err,
&save_menu_move_finish
};
static SAVE_MENU_PROC sub_proc[SAVE_ERROR_NUM] = { &save_menu_move_do_save, &save_menu_move_err,
&save_menu_move_err, &save_menu_move_finish };
int error = save_menu->error;
int error = save_menu->error;
if (error >= SAVE_ERROR_NONE && error < SAVE_ERROR_NUM) {
(*sub_proc[error])(save_menu);
}
if (error >= SAVE_ERROR_NONE && error < SAVE_ERROR_NUM) {
(*sub_proc[error])(save_menu);
}
save_menu_set_cursor_col(save_menu);
save_menu->frame++;
save_menu_set_cursor_col(save_menu);
save_menu->frame++;
if (save_menu->frame == 40) {
save_menu->frame = 0;
}
if (save_menu->frame == 40) {
save_menu->frame = 0;
}
}
static void save_menu_draw_title(GAME_SAVE_MENU* save_menu) {
/* This translates to 'セーブ メニュー' (save menu), the devs didn't bother translating it */
u8 title[] = { 0x9E, 0x90, 0xDF, CHAR_SPACE, 0xB2, 0xA6, 0x8D, 0x90 };
/* This translates to 'セーブ メニュー' (save menu), the devs didn't bother translating it */
u8 title[] = { 0x9E, 0x90, 0xDF, CHAR_SPACE, 0xB2, 0xA6, 0x8D, 0x90 };
mFont_SetMatrix(save_menu->game.graph, mFont_MODE_FONT);
mFont_SetLineStrings_AndSpace((GAME*)save_menu, title, ARRAY_SIZE(title, u8), 110.0f, 30.0f, 200, 50, 50, 255, FALSE, TRUE, FALSE, 1.1f, 1.1f, mFont_MODE_FONT);
mFont_UnSetMatrix(save_menu->game.graph, mFont_MODE_FONT);
mFont_SetMatrix(save_menu->game.graph, mFont_MODE_FONT);
mFont_SetLineStrings_AndSpace((GAME*)save_menu, title, ARRAY_SIZE(title, u8), 110.0f, 30.0f, 200, 50, 50, 255,
FALSE, TRUE, FALSE, 1.1f, 1.1f, mFont_MODE_FONT);
mFont_UnSetMatrix(save_menu->game.graph, mFont_MODE_FONT);
}
static void save_menu_draw_push_a(GAME_SAVE_MENU* save_menu) {
/* Push A Button */
u8 push_a[] = { CHAR_P, CHAR_u, CHAR_s, CHAR_h, CHAR_SPACE, CHAR_A, CHAR_SPACE, CHAR_B, CHAR_u, CHAR_t, CHAR_t, CHAR_o, CHAR_n };
/* Push A Button */
u8 push_a[] = { CHAR_P, CHAR_u, CHAR_s, CHAR_h, CHAR_SPACE, CHAR_A, CHAR_SPACE,
CHAR_B, CHAR_u, CHAR_t, CHAR_t, CHAR_o, CHAR_n };
mFont_SetMatrix(save_menu->game.graph, mFont_MODE_FONT);
mFont_SetLineStrings_AndSpace((GAME*)save_menu, push_a, ARRAY_SIZE(push_a, u8), 95.0f, 175.0f, 200, 200, 200, 255, FALSE, TRUE, FALSE, 0.8f, 0.8f, mFont_MODE_FONT);
mFont_UnSetMatrix(save_menu->game.graph, mFont_MODE_FONT);
mFont_SetMatrix(save_menu->game.graph, mFont_MODE_FONT);
mFont_SetLineStrings_AndSpace((GAME*)save_menu, push_a, ARRAY_SIZE(push_a, u8), 95.0f, 175.0f, 200, 200, 200, 255,
FALSE, TRUE, FALSE, 0.8f, 0.8f, mFont_MODE_FONT);
mFont_UnSetMatrix(save_menu->game.graph, mFont_MODE_FONT);
}
static void save_menu_draw_select_r(GAME_SAVE_MENU* save_menu) {
/* Select R Button */
u8 select_r[] = { CHAR_S, CHAR_e, CHAR_l, CHAR_e, CHAR_c, CHAR_t, CHAR_SPACE, CHAR_R, CHAR_SPACE, CHAR_B, CHAR_u, CHAR_t, CHAR_t, CHAR_o, CHAR_n };
/* Select R Button */
u8 select_r[] = { CHAR_S, CHAR_e, CHAR_l, CHAR_e, CHAR_c, CHAR_t, CHAR_SPACE, CHAR_R,
CHAR_SPACE, CHAR_B, CHAR_u, CHAR_t, CHAR_t, CHAR_o, CHAR_n };
mFont_SetMatrix(save_menu->game.graph, mFont_MODE_FONT);
mFont_SetLineStrings_AndSpace((GAME*)save_menu, select_r, ARRAY_SIZE(select_r, u8), 76.0f, 185.0f, 200, 200, 200, 255, FALSE, TRUE, FALSE, 0.8f, 0.8f, mFont_MODE_FONT);
mFont_UnSetMatrix(save_menu->game.graph, mFont_MODE_FONT);
mFont_SetMatrix(save_menu->game.graph, mFont_MODE_FONT);
mFont_SetLineStrings_AndSpace((GAME*)save_menu, select_r, ARRAY_SIZE(select_r, u8), 76.0f, 185.0f, 200, 200, 200,
255, FALSE, TRUE, FALSE, 0.8f, 0.8f, mFont_MODE_FONT);
mFont_UnSetMatrix(save_menu->game.graph, mFont_MODE_FONT);
}
static void save_menu_draw_push_b(GAME_SAVE_MENU* save_menu) {
/* Push B Button to EXIT */
u8 push_b[] = { CHAR_P, CHAR_u, CHAR_s, CHAR_h, CHAR_SPACE, CHAR_B, CHAR_SPACE, CHAR_B, CHAR_u, CHAR_t, CHAR_t, CHAR_o, CHAR_n, CHAR_SPACE, CHAR_t, CHAR_o, CHAR_SPACE, CHAR_E, CHAR_X, CHAR_I, CHAR_T };
/* Push B Button to EXIT */
u8 push_b[] = { CHAR_P, CHAR_u, CHAR_s, CHAR_h, CHAR_SPACE, CHAR_B, CHAR_SPACE,
CHAR_B, CHAR_u, CHAR_t, CHAR_t, CHAR_o, CHAR_n, CHAR_SPACE,
CHAR_t, CHAR_o, CHAR_SPACE, CHAR_E, CHAR_X, CHAR_I, CHAR_T };
mFont_SetMatrix(save_menu->game.graph, mFont_MODE_FONT);
mFont_SetLineStrings_AndSpace((GAME*)save_menu, push_b, ARRAY_SIZE(push_b, u8), 50.0f, 210.0f, 200, 200, 200, 255, FALSE, TRUE, FALSE, 0.8f, 0.8f, mFont_MODE_FONT);
mFont_UnSetMatrix(save_menu->game.graph, mFont_MODE_FONT);
mFont_SetMatrix(save_menu->game.graph, mFont_MODE_FONT);
mFont_SetLineStrings_AndSpace((GAME*)save_menu, push_b, ARRAY_SIZE(push_b, u8), 50.0f, 210.0f, 200, 200, 200, 255,
FALSE, TRUE, FALSE, 0.8f, 0.8f, mFont_MODE_FONT);
mFont_UnSetMatrix(save_menu->game.graph, mFont_MODE_FONT);
}
static void save_menu_draw_select_mode(GAME_SAVE_MENU* save_menu) {
/*
/*
[0] = 'FlashRom ' "Save to FlashRom"
[1] = ' ' "Save to Pak"
[0] = 'FlashRom ' "Save to FlashRom"
[1] = ' ' "Save to Pak"
*/
u8 select_mode[SAVE_MODE_NUM][13] = {
{ CHAR_F, CHAR_l, CHAR_a, CHAR_s, CHAR_h, CHAR_R, CHAR_o, CHAR_m, CHAR_SPACE, 0x15, 0x9E, 0x90, 0xDF },
{ 0xE2, 0x8F, 0x98, CHAR_SPACE, 0x15, 0x9E, 0x90, 0xDF, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE },
};
*/
u8 select_mode[SAVE_MODE_NUM][13] = {
{ CHAR_F, CHAR_l, CHAR_a, CHAR_s, CHAR_h, CHAR_R, CHAR_o, CHAR_m, CHAR_SPACE, 0x15, 0x9E, 0x90, 0xDF },
{ 0xE2, 0x8F, 0x98, CHAR_SPACE, 0x15, 0x9E, 0x90, 0xDF, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE,
CHAR_SPACE },
};
mFont_SetMatrix(save_menu->game.graph, mFont_MODE_FONT);
mFont_SetLineStrings_AndSpace(
(GAME*)save_menu,
select_mode[SAVE_MODE_FLASHROM], ARRAY_SIZE(select_mode[SAVE_MODE_FLASHROM], u8),
60.0f, 85.0f,
save_menu->cursor_col[SAVE_MODE_FLASHROM][0], save_menu->cursor_col[SAVE_MODE_FLASHROM][1], save_menu->cursor_col[SAVE_MODE_FLASHROM][2], 255,
FALSE, TRUE, FALSE,
1.2f, 1.2f,
mFont_MODE_FONT
);
mFont_UnSetMatrix(save_menu->game.graph, mFont_MODE_FONT);
mFont_SetMatrix(save_menu->game.graph, mFont_MODE_FONT);
mFont_SetLineStrings_AndSpace(
(GAME*)save_menu, select_mode[SAVE_MODE_FLASHROM], ARRAY_SIZE(select_mode[SAVE_MODE_FLASHROM], u8), 60.0f,
85.0f, save_menu->cursor_col[SAVE_MODE_FLASHROM][0], save_menu->cursor_col[SAVE_MODE_FLASHROM][1],
save_menu->cursor_col[SAVE_MODE_FLASHROM][2], 255, FALSE, TRUE, FALSE, 1.2f, 1.2f, mFont_MODE_FONT);
mFont_UnSetMatrix(save_menu->game.graph, mFont_MODE_FONT);
mFont_SetMatrix(save_menu->game.graph, mFont_MODE_FONT);
mFont_SetLineStrings_AndSpace(
(GAME*)save_menu,
select_mode[SAVE_MODE_CPAK], ARRAY_SIZE(select_mode[SAVE_MODE_CPAK], u8),
100.0f, 125.0f,
save_menu->cursor_col[SAVE_MODE_CPAK][0], save_menu->cursor_col[SAVE_MODE_CPAK][1], save_menu->cursor_col[SAVE_MODE_CPAK][2], 255,
FALSE, TRUE, FALSE,
1.2f, 1.2f,
mFont_MODE_FONT
);
mFont_UnSetMatrix(save_menu->game.graph, mFont_MODE_FONT);
mFont_SetMatrix(save_menu->game.graph, mFont_MODE_FONT);
mFont_SetLineStrings_AndSpace(
(GAME*)save_menu, select_mode[SAVE_MODE_CPAK], ARRAY_SIZE(select_mode[SAVE_MODE_CPAK], u8), 100.0f, 125.0f,
save_menu->cursor_col[SAVE_MODE_CPAK][0], save_menu->cursor_col[SAVE_MODE_CPAK][1],
save_menu->cursor_col[SAVE_MODE_CPAK][2], 255, FALSE, TRUE, FALSE, 1.2f, 1.2f, mFont_MODE_FONT);
mFont_UnSetMatrix(save_menu->game.graph, mFont_MODE_FONT);
}
extern void save_menu_draw_main(GAME_SAVE_MENU* save_menu) {
GRAPH* g = save_menu->game.graph;
GRAPH* g = save_menu->game.graph;
OPEN_DISP(g);
OPEN_DISP(g);
gSPSegment(NOW_POLY_OPA_DISP++, G_MWO_SEGMENT_0, 0);
DisplayList_initialize(g, 0, 0, 0, NULL);
gDPPipeSync(NOW_POLY_OPA_DISP++);
gSPSegment(NOW_POLY_OPA_DISP++, G_MWO_SEGMENT_0, 0);
DisplayList_initialize(g, 0, 0, 0, NULL);
gDPPipeSync(NOW_POLY_OPA_DISP++);
CLOSE_DISP(g);
CLOSE_DISP(g);
showView(&save_menu->view, VIEW_UPDATE_ALL);
save_menu_draw_title(save_menu);
save_menu_draw_push_a(save_menu);
save_menu_draw_select_r(save_menu);
save_menu_draw_push_b(save_menu);
save_menu_draw_select_mode(save_menu);
showView(&save_menu->view, VIEW_UPDATE_ALL);
save_menu_draw_title(save_menu);
save_menu_draw_push_a(save_menu);
save_menu_draw_select_r(save_menu);
save_menu_draw_push_b(save_menu);
save_menu_draw_select_mode(save_menu);
}
static void save_menu_main(GAME* game) {
GRAPH* g;
GAME_SAVE_MENU* save_menu = (GAME_SAVE_MENU*)game;
save_menu_move_main(save_menu);
save_menu_draw_main(save_menu);
GRAPH* g;
GAME_SAVE_MENU* save_menu = (GAME_SAVE_MENU*)game;
save_menu_move_main(save_menu);
save_menu_draw_main(save_menu);
g = game->graph;
game_debug_draw_last(game, g);
game_draw_last(g);
g = game->graph;
game_debug_draw_last(game, g);
game_draw_last(g);
}
extern void save_menu_cleanup(GAME* game) { }
extern void save_menu_cleanup(GAME* game) {
}
extern void save_menu_init(GAME* game) {
GRAPH* g = game->graph;
View* view;
GAME_SAVE_MENU* save_menu = (GAME_SAVE_MENU*)game;
int i;
GRAPH* g = game->graph;
View* view;
GAME_SAVE_MENU* save_menu = (GAME_SAVE_MENU*)game;
int i;
game->exec = &save_menu_main;
game->cleanup = &save_menu_cleanup;
game->exec = &save_menu_main;
game->cleanup = &save_menu_cleanup;
view = &save_menu->view;
initView(view, g);
view->flag = VIEW_UPDATE_ORTHOGRAPHIC;
new_Matrix(game);
SetGameFrame(1);
view = &save_menu->view;
initView(view, g);
view->flag = VIEW_UPDATE_ORTHOGRAPHIC;
new_Matrix(game);
SetGameFrame(1);
save_menu->frame = 0;
save_menu->mode = SAVE_MODE_BEGIN;
save_menu->error = SAVE_ERROR_NONE;
save_menu->frame = 0;
save_menu->mode = SAVE_MODE_BEGIN;
save_menu->error = SAVE_ERROR_NONE;
for (i = 0; i < SAVE_MODE_NUM; i++) {
save_menu_reset_cursor_col(save_menu->cursor_col + i);
}
for (i = 0; i < SAVE_MODE_NUM; i++) {
save_menu_reset_cursor_col(save_menu->cursor_col + i);
}
}