Implement & link m_kankyo.c

This commit is contained in:
Cuyler36
2023-10-11 02:46:01 -04:00
parent a19e919b2b
commit c6465d9973
25 changed files with 3334 additions and 60 deletions
+2
View File
@@ -8,6 +8,8 @@
extern "C" {
#endif
extern int aWeather_ChangingWeather();
extern ACTOR_PROFILE Weather_Profile;
#ifdef __cplusplus
+16 -2
View File
@@ -19,11 +19,25 @@ enum effect_type {
eEC_EFFECT_NUM = 126
};
enum {
eEC_LIGHT_COLOR_DISABLED,
eEC_LIGHT_COLOR_INCREASING,
eEC_LIGHT_COLOR_MAXIMUM,
eEC_LIGHT_COLOR_DECREASING,
eEC_LIGHT_COLOR_NUM
};
typedef void (*eEC_NAME2EFFECTMAKE_PROC)(int, xyz_t, int, short, GAME*, u16, s16, s16);
typedef int (*eEC_EFFECTLIGHTSTATUS_PROC)(rgba_t*, int*); // returns eEC_LIGHT_COLOR_*
typedef struct effect_control_clip_s {
eEC_NAME2EFFECTMAKE_PROC effect_make_proc;
/* TODO: finish */
/* 0x00 */ eEC_NAME2EFFECTMAKE_PROC effect_make_proc;
/* 0x04 */ u8 _04[0x3C - 0x04];
/* 0x3C */ eEC_EFFECTLIGHTSTATUS_PROC effect_light_status;
/* 0x40 */ void* _40;
/* 0x44 */ void* _44;
} eEC_EffectControl_Clip_c;
typedef struct effect_control_s EFFECT_CONTROL_ACTOR;
+7
View File
@@ -307,6 +307,13 @@ enum actor_profile_table {
mAc_PROFILE_NUM
};
enum {
mAc_HILITE_OPAQUE,
mAc_HILITE_TRANSLUCENT,
mAc_HILITE_NUM
};
/* sizeof(ACTOR_PROFILE) == 0x24 */
struct actor_profile_s {
/* 0x00 */ s16 id; /* unique actor type ID */
+20 -6
View File
@@ -151,7 +151,11 @@ typedef struct Save_s {
/* 0x024177 */ u8 gyoei_term_transition_offset; /* days offset from end of term to begin transition */
/* 0x024178 */ mFAs_GoodField_c good_field; /* field assessment last info */
/* 0x024184 */ u8 bg_tex_idx; /* Grass type */
/* 0x024185 */ u8 _24185[0x2418A - 0x24185];
/* 0x024185 */ lbRTC_month_t rainbow_month;
/* 0x024186 */ lbRTC_day_t rainbow_day;
/* 0x024187 */ u8 rainbow_reserved;
/* 0x024188 */ u8 _24188;
/* 0x024189 */ u8 _24189;
/* 0x02418A */ u8 town_day;
/* 0x02418B */ u8 _2418B[0x241A0 - 0x2418B];
/* 0x0241A0 */ lbRTC_time_c saved_auto_nwrite_time; /* save data notice time used for fishing tourney results? */
@@ -163,6 +167,13 @@ typedef union save_u {
//u8 raw[0x26000]; /* Temp to force length */
} Save;
typedef struct transition_s {
u8 _00; // only set in Global_kankyo_ct?
u8 fade_rate;
u8 wipe_rate;
u8 wipe_type;
} Transition_c;
/* sizeof(common_data_t) == 0x2DC00 */
typedef struct common_data_s {
/* 0x000000 */ Save save;
@@ -178,10 +189,10 @@ typedef struct common_data_s {
/* 0x026140 */ mHm_hs_c* now_home;
/* 0x026144 */ u8 map_flag;
/* 0x026145 */ u8 fish_location;
/* 0x026146 */ u8 tmp0[0x2614D - 0x26146];
/* 0x02614D */ u8 transFadeDuration;
/* 0x02614E */ u8 transWipeSpeed;
/* 0x02614F */ u8 wipeType; /* maybe unused? */
/* 0x026146 */ u8 npc_is_summercamper;
/* 0x026147 */ u8 player_select_animal_no;
/* 0x026148 */ u8 _26148[0x2614C - 0x26148];
/* 0x02614C */ Transition_c transition;
/* 0x026150 */ s16 bg_item_type;
/* 0x026152 */ s16 bg_item_profile;
/* 0x026154 */ u8 _26154[0x26164 - 0x26154];
@@ -273,7 +284,10 @@ typedef struct common_data_s {
/* 0x02DB40 */ u8 auto_nwrite_set; /* when true, saved nwrite time will be utilized. Seems to be used to keep same date for fishing tourney stuff. */
/* 0x02DB42 */ u16 select_last_select_no;
/* 0x02DB44 */ u16 select_last_top_no;
/* 0x02DB46 */ u8 tmp3[0x2DBAC - 0x2DB46];
/* 0x02DB46 */ u8 _2DB46[0x2DBA2 - 0x2DB46];
/* 0x02DBA2 */ s16 island_weather;
/* 0x02DBA4 */ s16 island_weather_intensity;
/* 0x02DBA6 */ u8 _2DBA6[0x2DBAC - 0x2DBA6];
/* 0X02DBAC */ int famicom_2DBAC;
/* 0x02DBB0 */ s16 can_look_goki_count;
/* 0x02DBB4 */ f32 rainbow_opacity; /* current opacity of rainbow (0.0f - 1.0f) */
+3
View File
@@ -496,6 +496,9 @@ extern void mEv_EventON(u32 event_kind);
extern int mEv_CheckGateway();
extern int mEv_check_schedule(int event);
extern mEv_place_data_c* mEv_get_common_place(int type, s8 id);
extern void mEv_set_status(int event, s16 status);
extern void mEv_GetEventWeather(s16* weather, s16* intensity);
extern int mEv_CheckRealArbeit();
extern int mEv_weekday2day(lbRTC_month_t month, int week_type, lbRTC_weekday_t weekday);
extern void mEv_ClearEventInfo();
+115 -11
View File
@@ -3,12 +3,27 @@
#include "types.h"
#include "m_lights.h"
#include "game.h"
#include "m_play_h.h"
#ifdef __cplusplus
extern "C" {
#endif
#define mEnv_POINT_LIGHT_NUM 4
#define mEnv_RAINBOW_TIME_START (9 * mTM_SECONDS_IN_HOUR)
#define mEnv_RAINBOW_TIME_END (15 * mTM_SECONDS_IN_HOUR)
#define mEnv_RAINBOW_TIME_BYE (15 * mTM_SECONDS_IN_HOUR + 30 * mTM_SECONDS_IN_MINUTE)
#define mEnv_TERM_NUM 8
#define mEnv_FOG_NEAR_MAX 996
#define mEnv_FOG_FAR_MAX 1600
#define mEnv_LIGHT_ANIME_FRAMES 20
#define mEnv_NPC_LIGHTS_OFF_TIME (5 * mTM_SECONDS_IN_HOUR)
#define mEnv_NPC_LIGHTS_ON_TIME (18 * mTM_SECONDS_IN_HOUR)
#define mEnv_WEATHER_TERM_NUM 20
#define mEnv_WIND_TERM_NUM 4u
#define mEnv_WIND_CHANGE_RATE (f32)(10*mTM_SECONDS_IN_MINUTE*60) // 60fps, 10 minutes
enum weather {
mEnv_WEATHER_CLEAR,
mEnv_WEATHER_RAIN,
@@ -28,9 +43,59 @@ enum weather_intensity {
mEnv_WEATHER_INTENSITY_NUM,
};
enum {
mEnv_LIGHT_TYPE_PLAYER,
mEnv_LIGHT_TYPE_TENT,
mEnv_LIGHT_TYPE_LIGHTHOUSE,
mEnv_LIGHT_TYPE_NUM
};
enum {
mEnv_SWITCH_STATUS_ON,
mEnv_SWITCH_STATUS_OFF,
mEnv_SWITCH_STATUS_TURNING_OFF,
mEnv_SWITCH_STATUS_TURNING_ON,
mEnv_SWITCH_STATUS_NUM
};
enum {
mEnv_WIND_STATE_STEADY,
mEnv_WIND_STATE_FAST,
mEnv_WIND_STATE_SLOW,
mEnv_WIND_STATE_REDUCING,
mEnv_WIND_STATE_NUM
};
#define mEnv_SAVE_GET_WEATHER_TYPE(w) (((w) & 0xF0) >> 4)
#define mEnv_SAVE_GET_WEATHER_INTENSITY(w) ((w) & 0xF)
typedef struct base_light_s {
u8 ambient_color[3];
s8 sun_dir[3];
u8 sun_color[3];
s8 moon_dir[3];
u8 moon_color[3];
u8 fog_color[3];
s16 fog_near;
s16 fog_far;
u8 shadow_color[3];
u8 room_color[3];
u8 sun_color_window[3];
u8 moon_color_window[3];
u8 background_color[3];
} BaseLight;
typedef struct add_light_info_s {
s16 ambient_color[3];
s16 diffuse_color[3];
s16 fog_color[3];
s16 fog_near;
s16 fog_far;
} AddLightInfo;
typedef void (*NATURE_PROC)(ACTOR*);
typedef struct nature_s {
@@ -40,20 +105,59 @@ typedef struct nature_s {
typedef struct kankyo_s {
/* 0x00 */ Lights sun_light;
/* 0x0E */ u8 pad[0x9A - 0x0E];
/* 0x9A */ u8 ambientColor[3];
/* 0x9E */ u8 pad2[0xC0 - 0x9E];
/* 0xC0 */ f32 unkC0;
/* 0xC4 */ u8 unkC4;
/* 0x0E */ Lights moon_light;
/* 0x1C */ Lights* lamp_light;
/* 0x20 */ Lights point_light;
/* 0x30 */ int _30;
/* 0x34 */ u8 _34[0x78 - 0x34];
/* 0x78 */ AddLightInfo add_light_info; /* extra values added to specific light parameters */
/* 0x90 */ int _90;
/* 0x94 */ BaseLight base_light;
/* 0xBA */ u8 _BA[0xC0 - 0xBA];
/* 0xC0 */ f32 shadow_pos;
/* 0xC4 */ u8 shadow_alpha;
/* 0xC5 */ u8 countdown_timer;
/* 0xC8 */ Nature nature;
} Kankyo;
extern void Global_kankyo_ct(GAME_PLAY*, Kankyo*);
extern void mEnv_regist_nature(Kankyo* kankyo, NATURE_PROC nature_proc, void* arg);
extern int mEnv_unregist_nature(Kankyo* kankyo, NATURE_PROC nature_proc);
extern void Global_kankyo_ct(GAME_PLAY* play, Kankyo* kankyo);
extern void mEnv_GetRoomPrimColor(u8* r, u8* g, u8* b, GAME_PLAY* play);
extern void Global_kankyo_set_room_prim(GAME_PLAY* play);
extern int mEnv_RequestChangeLightON(GAME_PLAY* play, int light_on_type, int play_sfx);
extern int mEnv_RequestChangeLightOFF(GAME_PLAY* play, int light_off_type, f32 step);
extern void mEnv_ManagePointLight(GAME_PLAY* play, Kankyo* kankyo, Global_light* global_light);
extern void Global_kankyo_set(GAME_PLAY* play, Kankyo* kankyo, Global_light* global_light);
extern void staffroll_light_init(GAME_PLAY* play);
extern void staffroll_light_proc_start(GAME_PLAY* play);
extern int staffroll_light_proc_end(GAME_PLAY* play);
extern void staffroll_light_dt(GAME_PLAY* play);
extern void mEnv_GetShadowPrimColor_Light(u8* r, u8* g, u8* b, GAME* game);
extern int mEnv_PointLightMin();
extern int mEnv_HereIsPlayerSelect();
extern f32 mKK_windowlight_alpha_get();
extern int mEnv_ReqeustChangeWeatherEnviroment(s16 now_weather, s16 next_weather);
extern int mEnv_ReservePointLight(GAME_PLAY* play, xyz_t* pos, u8 r, u8 g, u8 b, s16 power);
extern void mEnv_OperateReservedPointLight_Position(int point_light_idx, xyz_t* pos);
extern void mEnv_OperateReservedPointLight_Color(int point_light_idx, u8 r, u8 g, u8 b);
extern void mEnv_OperateReservedPointLight_Power(int point_light_idx, s16 power);
extern void mEnv_OperateReservedPointLight(int point_light_idx, xyz_t* pos, u8 r, u8 g, u8 b, s16 power);
extern int mEnv_CancelReservedPointLight(int point_light_idx, GAME_PLAY* play);
extern void mEnv_DecideWindDirect(s_xyz* dir, s16 x, s16 z);
extern void mEnv_RandomWeather(s16* next_weather, s16* next_intensity);
extern s16 mEnv_GetWindAngleS();
extern f32 mEnv_GetWindPowerF();
extern f32 mEnv_GetWindPowerF_Windmill();
extern void mEnv_DecideTodayWindPowerRange();
extern void mEnv_ChangeWind();
extern void mEnv_WindMove();
extern void mEnv_DecideWeather_GameStart();
extern void mEnv_DecideWeather_FirstGameStart();
extern void mEnv_PreRainNowFine_Init();
extern void mEnv_DecideWeather_NormalGameStart();
extern int mEnv_NowWeather();
extern int mEnv_WindMove();
extern void mEnv_ManagePointLight(GAME_PLAY*, Kankyo*, Global_light*);
extern void Global_kankyo_set(GAME_PLAY*, Kankyo*, Global_light*);
extern void mEnv_GetShadowPrimColor_Light(u8*,u8*,u8*,GAME*);
#ifdef __cplusplus
}
#endif
+11 -12
View File
@@ -37,27 +37,26 @@ typedef struct lights_s {
} Lights;
typedef struct LightNode {
typedef struct light_list {
/* 0x0 */ Lights* info;
/* 0x4 */ struct LightNode* prev;
/* 0x8 */ struct LightNode* next;
} LightNode; // size = 0xC
/* 0x4 */ struct light_list* prev;
/* 0x8 */ struct light_list* next;
} Light_list; // size = 0xC
typedef struct light_buf_s{
int current;
int idx;
LightNode lights[32];
}Light_buffer;
Light_list lights[32];
} Light_buffer;
typedef struct lightsn_s{
u8 diffuse_count;
Ambient a;
Light_new l[7];
}LightsN;
} LightsN;
typedef struct global_light_s {
/* 0x0 */ LightNode* list;
/* 0x0 */ Light_list* list;
/* 0x4 */ u8 ambientColor[3];
/* 0x7 */ u8 fogColor[3];
/* 0xA */ s16 fogNear;
@@ -71,11 +70,11 @@ extern void Light_point_ct(Lights* lights, s16 x, s16 y, s16 z, u8 r, u8 g, u8 b
extern void Light_diffuse_ct(Lights* lights, s8 x, s8 y, s8 z, u8 r, u8 g, u8 b);
extern void LightsN_disp_BG(LightsN* lights, GRAPH* graph);
extern void LightsN_disp(LightsN* lights, GRAPH* graph);
extern void LightsN_list_check(LightsN* lights, LightNode* node, xyz_t* pos);
extern void LightsN_list_check(LightsN* lights, Light_list* node, xyz_t* pos);
extern void Global_light_ct(Global_light* glight);
extern LightsN* Global_light_read(Global_light* glight, GRAPH* graph);
extern void Global_light_list_new(GAME_PLAY*, Global_light* glight, Lights* light);
extern void Global_light_list_delete(Global_light* glight, LightNode* light);
extern Light_list* Global_light_list_new(GAME_PLAY*, Global_light* glight, Lights* light);
extern void Global_light_list_delete(Global_light* glight, Light_list* light);
extern void Light_list_point_draw(GAME_PLAY* play);
#ifdef __cplusplus
+1
View File
@@ -240,6 +240,7 @@ extern void mNpc_SetNpcFurnitureRandom(mFM_fg_data_c** fg_data_list, int fg_name
extern void mNpc_SetNpcHomeYpos();
extern void mNpc_SendRegisteredGoodbyMail();
extern void mNpc_IslandNpcRoomDataSet(mFM_fg_data_c** sorted_fg_data_list, int fg_name_start);
extern Animal_c* mNpc_GetAnimalInfoP(mActor_name_t npc_name);
extern void mNpc_PrintRemoveInfo(gfxprint_t* gfxprint);
extern void mNpc_PrintFriendship_fdebug(gfxprint_t* gfxprint);
+5 -1
View File
@@ -8,7 +8,11 @@
extern "C" {
#endif
extern mNPS_schedule_c* mNPS_get_schedule_area(AnmPersonalID_c* anm_id);
extern void mNPS_set_island_schedule_area(AnmPersonalID_c* anm_id);
extern void mNPS_reset_schedule_area(AnmPersonalID_c* anm_id);
extern void mNPS_schedule_manager();
extern void mNPS_set_all_schedule_area();
#ifdef __cplusplus
}
+24
View File
@@ -111,6 +111,24 @@ typedef struct room_type_place_info_s {
#define FTR1_NO_START 0x3000
enum {
mRmTp_LIGHT_SWITCH_HOUSE0_MAIN_UPPER,
mRmTp_LIGHT_SWITCH_HOUSE0_BASEMENT,
mRmTp_LIGHT_SWITCH_HOUSE1_MAIN_UPPER,
mRmTp_LIGHT_SWITCH_HOUSE1_BASEMENT,
mRmTp_LIGHT_SWITCH_HOUSE2_MAIN_UPPER,
mRmTp_LIGHT_SWITCH_HOUSE2_BASEMENT,
mRmTp_LIGHT_SWITCH_HOUSE3_MAIN_UPPER,
mRmTp_LIGHT_SWITCH_HOUSE3_BASEMENT,
mRmTp_LIGHT_SWITCH_COTTAGE_MY,
mRmTp_LIGHT_SWITCH_9,
mRmTp_LIGHT_SWITCH_NPC,
mRmTp_LIGHT_SWITCH_LIGHTHOUSE,
mRmTp_LIGHT_SWITCH_TENT,
mRmTp_LIGHT_SWITCH_NUM
};
extern void mRmTp_DrawFamicomInfo(gfxprint_t* gfxprint);
extern void mRmTp_MakeFamicom_Fdebug();
@@ -125,5 +143,11 @@ extern void mRmTp_SetDefaultLightSwitchData(int state);
extern int mRmTp_GetEntranceBasePosition(xyz_t* pos);
extern mActor_name_t mRmTp_GetPlayerRoomCollisionIdx(mActor_name_t field_name, mActor_name_t bg_name);
extern u8 mRmTp_GetFloorIdx();
extern int mRmTp_GetNowSceneLightSwitchIndex();
extern void mRmTp_IndexLightSwitchOFF(int index);
extern void mRmTp_IndexLightSwitchON(int index);
extern int mRmTp_Index2LightSwitchStatus(int index);
extern int mRmTp_NowSceneLightSwitchON();
extern int mRmTp_NowSceneLightSwitchOFF();
#endif
+6
View File
@@ -85,6 +85,12 @@ enum scene_table {
(scene) == SCENE_MY_ROOM_BASEMENT_M || (scene) == (SCENE_MY_ROOM_BASEMENT_L) || (scene) == SCENE_MY_ROOM_BASEMENT_LL1 || \
(scene) == SCENE_COTTAGE_MY)
#define mSc_IS_SCENE_BASEMENT(scene) \
((scene) == SCENE_MY_ROOM_BASEMENT_S || \
(scene) == SCENE_MY_ROOM_BASEMENT_M || \
(scene) == SCENE_MY_ROOM_BASEMENT_L || \
(scene) == SCENE_MY_ROOM_BASEMENT_LL1)
#define mSc_IS_SCENE_MUSEUM_ROOM(scene) \
((scene) >= SCENE_MUSEUM_ENTRANCE && (scene) <= SCENE_MUSEUM_ROOM_FISH)
+2 -2
View File
@@ -58,8 +58,8 @@ enum {
#define mTM_SECONDS_IN_MINUTE 60
#define mTM_SECONDS_IN_HOUR 60*60
#define mTM_SECONDS_IN_HALFDAY 12*60*60
#define mTM_SECONDS_IN_DAY 24*60*60
#define mTM_SECONDS_IN_HALFDAY (12*60*60)
#define mTM_SECONDS_IN_DAY (24*60*60)
#define mTM_MINUTES_IN_HOUR 60