summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorPrakxo <87568477+Prakxo@users.noreply.github.com>2024-08-12 19:36:07 +0200
committerGitHub <noreply@github.com>2024-08-12 10:36:07 -0700
commiteb99af89c88005c8e300b76e1b5d93467b98aafd (patch)
treed888a89809981f43e791ba63351e2ae2d5f239ab /include
parentc3164cd99c3eb764a63171253af14126be77b1e7 (diff)
m_kankyo OK (#207)
* implement kankyo * m_kankyo OK
Diffstat (limited to 'include')
-rw-r--r--include/m_clip.h3
-rw-r--r--include/m_common_data.h5
-rw-r--r--include/m_event.h6
-rw-r--r--include/m_field_info.h2
-rw-r--r--include/m_kankyo.h199
-rw-r--r--include/m_scene.h18
-rw-r--r--include/m_time.h2
7 files changed, 156 insertions, 79 deletions
diff --git a/include/m_clip.h b/include/m_clip.h
index 56714f7..203a7ea 100644
--- a/include/m_clip.h
+++ b/include/m_clip.h
@@ -185,10 +185,13 @@ typedef struct StructureClip {
typedef void (*Clip_unk_090_unk_00)(s8, struct xyz_t, s32, s32, struct Game_Play*, s32, s32, s32);
typedef void (*Clip_unk_090_unk_30)(Color_RGBA8, s16,s16,s32);
+typedef s32 (*Clip_unk_090_unk_3C)(Color_RGBA8*, s32*);
typedef struct Clip_unk_090 {
/* 0x00 */ Clip_unk_090_unk_00 unk_00;
/* 0x04 */ UNK_TYPE1 unk_04[0x2C];
/* 0x30 */ Clip_unk_090_unk_30 unk_30;
+ /* 0x34 */ s8 unk_34[0x8];
+ /* 0x3C */ Clip_unk_090_unk_3C unk_3C;
} Clip_unk_090; // size >= 0x34
typedef void (*Clip_unk_09C_unk_C)(void);
diff --git a/include/m_common_data.h b/include/m_common_data.h
index 9778e70..fb351af 100644
--- a/include/m_common_data.h
+++ b/include/m_common_data.h
@@ -116,7 +116,7 @@ typedef struct CommonData {
/* 0x00000 */ Save save;
/* 0x10000 */ u8 unk_10000; // named "game_started" in AC GCN decomp
/* 0x10001 */ u8 unk_10001;
- /* 0x10002 */ u8 unk_10002;
+ /* 0x10002 */ u8 fieldDrawType;
/* 0x10003 */ u8 playerNumber;
/* 0x10004 */ s32 unk_10004; // named "last_scene_no" in AC GCN decomp
/* 0x10008 */ s32 playerDataMode;
@@ -126,7 +126,8 @@ typedef struct CommonData {
/* 0x1013C */ u8 unk_1013C[0x4];
/* 0x10140 */ u8 unk_10140;
/* 0x10141 */ u8 fish_location;
- /* 0x10142 */ u8 unk_10142[0x7];
+ /* 0x10142 */ u8 unk_10142[0x6];
+ /* 0x10148 */ u8 unk_10148;
/* 0x10149 */ u8 unk_10149;
/* 0x1014A */ u8 unk_1014A;
/* 0x1014B */ u8 unk_1014B; // named "wipeType" in AC GCN decomp
diff --git a/include/m_event.h b/include/m_event.h
index 9ef174b..e8d3aad 100644
--- a/include/m_event.h
+++ b/include/m_event.h
@@ -103,9 +103,9 @@ void mEv_2nd_init(Event* event);
// void func_8007F950_jp();
void mEv_run(Event* event);
void mEv_finish(Event* event);
-// void func_8007FCB8_jp();
+s32 mEv_check_schedule(s32);
// void func_8007FD40_jp();
-// void func_8007FDA8_jp();
+s32 mEv_set_status(s32,s32);
// void func_8007FE0C_jp();
void mEv_clear_status(s32, s16);
// void func_8007FEBC_jp();
@@ -116,7 +116,7 @@ s32 mEv_check_status(s32, s16);
// void func_80080040_jp();
// void func_80080080_jp();
// void func_80080200_jp();
-u8* func_8008033C_jp(s32,s32);
+u8* mEv_get_save_area(s32,s32);
// void func_800804AC_jp();
// void func_800806A0_jp();
// void func_800807E0_jp();
diff --git a/include/m_field_info.h b/include/m_field_info.h
index cb9d6f1..f954aae 100644
--- a/include/m_field_info.h
+++ b/include/m_field_info.h
@@ -102,7 +102,7 @@ u8 mFI_BkNum2BlockType(s32,s32);
// void func_80089348_jp();
// void func_800893C8_jp();
s32 mFI_CheckBlockKind_OR(s32, s32, s32);
-void mFI_BlockKind2BkNum(s32*,s32*,s32);
+s32 mFI_BlockKind2BkNum(s32*,s32*,s32);
// void func_800894D0_jp();
mCoBG_unkStructUnion* mFI_GetBkNum2ColTop(s32 arg0, s32 arg1);
// void func_800895B8_jp();
diff --git a/include/m_kankyo.h b/include/m_kankyo.h
index 109586e..7535acb 100644
--- a/include/m_kankyo.h
+++ b/include/m_kankyo.h
@@ -3,88 +3,151 @@
#include "ultra64.h"
#include "unk.h"
+#include "m_lights.h"
+#include "lb_rtc.h"
struct Actor;
struct Global_light;
-struct Lights;
struct s_xyz;
+struct Game_Play;
-typedef void (*Kankyo_unk_C0)(struct Actor*);
+#define ENV_SAVE_GET_WEATHER_TYPE(w) (((w) & 0xF0) >> 4)
+#define ENV_SAVE_GET_WEATHER_INTENSITY(w) ((w) & 0xF)
+#define ENV_SAVE_SET_WEATHER(intensity, type) ( intensity | type << 4)
+
+#define mEnv_TERM 8
+#define mEnv_FOG_NEAR_MAX 996
+#define mEnv_FOG_FAR_MAX 1600
+
+typedef enum mEnv_Weather {
+ /* 0 */ mEnv_WEATHER_CLEAR,
+ /* 1 */ mEnv_WEATHER_RAIN,
+ /* 2 */ mEnv_WEATHER_SNOW,
+ /* 3 */ mEnv_WEATHER_SAKURA,
+ /* 4 */ mEnv_WEATHER_LEAVES,
+ /* 5 */ mEnv_WEATHER_MAX
+} mEnv_Weather;
+
+typedef enum mEnv_WeatherIntensity {
+ /* 0 */ mEnv_WEATHER_INTENSITY_NONE,
+ /* 1 */ mEnv_WEATHER_INTENSITY_LIGHT,
+ /* 2 */ mEnv_WEATHER_INTENSITY_NORMAL,
+ /* 3 */ mEnv_WEATHER_INTENSITY_HEAVY,
+ /* 4 */ mEnv_WEATHER_INTENSITY_MAX
+} mEnv_WeatherIntensity;
+
+typedef struct mEnv_WindInfo {
+ /* 0x00 */ lbRTC_time_c time;
+ /* 0x08 */ f32 unk8;
+ /* 0x0C */ f32 windAngleS;
+ /* 0x10 */ f32 unk10;
+ /* 0x14 */ f32 unk14;
+ /* 0x18 */ f32 windPowerF;
+ /* 0x1C */ f32 unk1C;
+} mEnv_WindInfo; // size = 0x20
+
+typedef void (*NatureProc)(struct Actor*);
+
+typedef struct BaseLight {
+ /* 0x00 */ u8 ambientColor[3];
+ /* 0x03 */ s8 sunDir[3];
+ /* 0x06 */ u8 sunColor[3];
+ /* 0x09 */ s8 moonDir[3];
+ /* 0x0C */ u8 moonColor[3];
+ /* 0x0F */ u8 fogColor[3];
+ /* 0x12 */ s16 fogNear;
+ /* 0x14 */ s16 fogFar;
+ /* 0x16 */ u8 shadowColor[3];
+ /* 0x19 */ u8 roomColor[3];
+ /* 0x1C */ u8 sunColorWindow[3];
+ /* 0x1F */ u8 moonColorWindow[3];
+ /* 0x22 */ u8 bgColor[3];
+} BaseLight; // size = 0x26
+
+typedef struct AddLightInfo {
+ /* 0x00 */ s16 ambientColor[3];
+ /* 0x06 */ s16 diffuseColor[3];
+ /* 0x0C */ s16 fogColor[3];
+ /* 0x12 */ s16 fogNear;
+ /* 0x14 */ s16 fogFar;
+} AddLightInfo; // size = 0x16
+
+typedef struct KankyoNature {
+ /* 0x0 */ NatureProc proc;
+ /* 0x4 */ void* arg;
+} KankyoNature; // size = 0x8
typedef struct Kankyo {
- /* 0x00 */ UNK_TYPE1 unk_00[0x2];
- /* 0x02 */ s8 unk_02;
- /* 0x03 */ s8 unk_03;
- /* 0x04 */ s8 unk_04;
- /* 0x05 */ UNK_TYPE1 unk_05[0x3];
- /* 0x08 */ UNK_TYPE1 unk_08[0x14];
+ /* 0x00 */ Lights sunLight;
+ /* 0x0E */ Lights moonLight;
/* 0x1C */ struct Lights* unk_1C;
- /* 0x2C */ UNK_TYPE1 unk_20[0x72];
- /* 0x92 */ u8 sunColor[3];
- /* 0x95 */ UNK_TYPE1 unk_95[0x19];
- /* 0xAE */ u8 unk_AE;
- /* 0xAF */ u8 unk_AF;
- /* 0xB0 */ u8 unk_B0;
- /* 0xB1 */ UNK_TYPE1 unk_B1[0xB];
+ /* 0x20 */ Lights pointLight;
+ /* 0x2E */ s16 unk2E;
+ /* 0x30 */ UNK_TYPE1 unk_30[0x40];
+ /* 0x70 */ AddLightInfo addLightsInfo;
+ /* 0x86 */ UNK_TYPE1 unk_86[0x6];
+ /* 0x8C */ BaseLight baseLight;
+ /* 0xB2 */ UNK_TYPE1 unk_B2[0x6];
+ /* 0xB8 */ f32 shadowPos;
/* 0xBC */ u8 shadowAlpha;
- /* 0xBD */ UNK_TYPE1 unk_BD[0x2];
- /* 0xC0 */ Kankyo_unk_C0 unk_C0;
- /* 0xC4 */ UNK_TYPE1 unk_C4[0x4];
+ /* 0xBD */ u8 countdownTimer;
+ /* 0xBE */ s8 unk_BE;
+ /* 0xBC */ KankyoNature nature;
} Kankyo; // size = 0xC8
-// void mEnv_regist_nature();
-// void func_80096CA0_jp();
-// void func_80096CDC_jp();
-// void func_80096D60_jp();
-// void func_80096F5C_jp();
-// void func_80097048_jp();
-// void mEnv_RoomTypeLightSet();
-void Global_kankyo_ct(struct Game_Play* game_play, struct Kankyo* kankyo);
-// void mEnv_MakeShadowInfo();
-// void mEnv_set_time();
-// void func_800976BC_jp();
-// void func_80097738_jp();
-// void func_800978EC_jp();
-// void func_80097AE8_jp();
-// void func_80097BB0_jp();
-// void func_80097C54_jp();
-// void func_80097D40_jp();
-// void func_80097F88_jp();
-// void func_80097FB4_jp();
-// void func_8009802C_jp();
-// void func_800980C0_jp();
-// void func_80098158_jp();
-// void func_800981B8_jp();
-// void func_8009836C_jp();
-// void func_800983F0_jp();
-void Global_kankyo_set(struct Game_Play* game_play, struct Kankyo* kankyo, struct Global_light* arg2);
-void mEnv_DecideWindDirect(struct s_xyz*, s16,s16);
-// void func_8009867C_jp();
-void mEnv_RandomWeather(s16*, s16*);
+void mEnv_regist_nature(Kankyo* kankyo, NatureProc natureProc, void* arg);
+s32 mEnv_unregist_nature(Kankyo* kankyo, NatureProc natureProc);
+s32 func_80096CDC_jp(void);
+s32 mEnv_GetNowRoomPointLightInfo(struct Game_Play* play, struct s_xyz* pos, u8* color, s16* power, s16* isFlame);
+void mEnv_RoomTypePointLightSet(struct Game_Play* play);
+void mEnv_RoomTypediffuseLightSet(struct Game_Play* play, Kankyo* kankyo);
+void mEnv_RoomTypeLightSet(struct Game_Play* play, Kankyo* kankyo);
+void Global_kankyo_ct(struct Game_Play* play, Kankyo* kankyo);
+void mEnv_MakeShadowInfo(Kankyo* kankyo);
+void mEnv_set_time(Kankyo* kankyo);
+void mEnv_ChangeRGBLight(u8* dst, u8* light0, u8* light1, f32 f0);
+void mEnv_ChangeDiffuseVctlSet(BaseLight* baseLight);
+void mEnv_ChangeDiffuseLight(BaseLight* dst, BaseLight* light0, BaseLight* light1, f32 f0);
+void mEnv_ChangeFogLight(BaseLight* dst, BaseLight* light0, BaseLight* light1, f32 f0);
+void mEnv_CalcSetLight_train(BaseLight* light);
+void mEnv_CalcSetLight(BaseLight* dst, BaseLight* light0, BaseLight* light1, f32 f0);
+void mEnv_SetBaseLight(Kankyo* kankyo);
+u8 mEnv_LimitChkRGBColor(s32 c);
+void mEnv_AddAndSetRGBColor(u8* dst, u8* src0, s16* src1);
+void mEnv_SetDiffuseLight(Kankyo* kankyo);
+void mEnv_SetFog(Kankyo* kankyo, Global_light* gLight);
+void mEnv_PermitCheckDiffuseLight(Kankyo* kankyo);
+void Global_kankyo_set_room_prim(struct Game_Play* play);
+void mEnv_check_countdown_start(struct Game_Play* play);
+void mEnv_countdown_proc(struct Game_Play* play);
+void Global_kankyo_set(struct Game_Play* play, Kankyo* kankyo, Global_light* gLight);
+void mEnv_DecideWindDirect(s_xyz* dir, s16 x, s16 z);
+s32 mEnv_GetWeatherChangeStep(void);
+void mEnv_RandomWeather(s16* next_weather, s16* next_intensity);
s16 mEnv_GetWindAngleS(void);
f32 mEnv_GetWindPowerF(void);
-// void func_80098990_jp();
-// void func_80098A90_jp();
+void mEnv_ChangeWind(void);
+void mEnv_InitWind(void);
void mEnv_WindMove(void);
-// void func_80098CCC_jp();
-// void func_80098D88_jp();
+void mEnv_DecideWeather_GameStart(void);
+void mEnv_DecideWeather_FirstGameStart(void);
void mEnv_DecideWeather_NormalGameStart(void);
-// void mEnv_NowWeather();
-// void func_80098F68_jp();
-// void func_80098FF0_jp();
-// void func_800990A8_jp();
-// void func_8009915C_jp();
-// void func_800991EC_jp();
-// void func_800992C8_jp();
-// void func_80099378_jp();
-// void func_8009944C_jp();
-// void func_8009949C_jp();
-// void func_80099594_jp();
-// void func_800996CC_jp();
-void mEnv_GetShadowPrimColor_Light(u8*,u8*,u8*, struct Game*);
-// void func_80099718_jp();
-// void func_80099728_jp();
-// void mEnv_MakeWindowLightAlpha();
-// void func_800998AC_jp();
+s32 mEnv_NowWeather(void);
+s32 mEnv_CheckNpcRoomPointLightNiceStatus(void);
+void mEnv_TaimatuPointLightWaveMoveProc(struct Game_Play* play);
+void mEnv_CheckNpcLight_ToSwitchON(struct Game_Play* play);
+void target_lighting_amb(struct Game_Play* play, f32 f0);
+void target_lighting_dif(struct Game_Play* play, f32 f0);
+void target_lighting_fog(struct Game_Play* play, f32 f0);
+void mEnv_PointLightSet(struct Game_Play* play, f32 f0);
+void staffroll_light_init(struct Game_Play* play);
+void staffroll_light_proc_start(struct Game_Play* play);
+s32 staffroll_light_proc_end(struct Game_Play* play);
+void staffroll_light_dt(struct Game_Play* play);
+void mEnv_GetShadowPrimColor_Light(u8* r, u8* g, u8* b, struct Game_Play* play);
+u8 mEnv_GetCurrentLightSwitchStatus(void);
+s32 mEnv_HereIsPlayerSelect(void);
+void mEnv_MakeWindowLightAlpha(s32 enabled);
+f32 mKK_windowlight_alpha_get(void);
#endif
diff --git a/include/m_scene.h b/include/m_scene.h
index 1c9b9a1..6403836 100644
--- a/include/m_scene.h
+++ b/include/m_scene.h
@@ -115,6 +115,14 @@ typedef union SceneData {
SceneDataArrangeFtr arrangeFtr;
} SceneData; // size = 0x8
+typedef enum SceneFieldDrawType {
+ /* 0 */ FIELD_DRAW_TYPE_OUTDOORS,
+ /* 1 */ FIELD_DRAW_TYPE_INDOORS,
+ /* 2 */ FIELD_DRAW_TYPE_TRAIN,
+ /* 3 */ FIELD_DRAW_TYPE_PLAYER_SELECT,
+ /* 4 */ FIELD_DRAW_TYPE_MAX
+} SceneFieldDrawType;
+
s32 func_800C59B0_jp(ObjectExchangeBank* objectExchangeBank);
s32 func_800C5A08_jp(ObjectExchangeBank* objectExchangeBank);
s32 func_800C5A60_jp(ObjectExchangeBank* objectExchangeBank);
@@ -138,15 +146,15 @@ void mSc_data_bank_ct(struct Game_Play* game_play, ObjectExchangeBank* objectExc
void mSc_decide_exchange_bank(ObjectExchangeBank* objectExchangeBank);
void Scene_player_select(s32 sceneNo, s32 npcActor);
void Scene_ct(struct Game_Play* play, SceneData* sceneData);
-void Scene_Proc_Player_Ptr(struct Game_Play* play, SceneData* scene_data);
+void Scene_Proc_Player_Ptr(struct Game_Play* play, SceneData* sceneData);
void Scene_Proc_CtrlActor_Ptr(struct Game_Play* play, SceneData* scene_data);
-void Scene_Proc_Actor_Ptr(struct Game_Play* play, SceneData* scene_data);
-void Scene_Proc_Object_Exchange_Bank_Ptr(struct Game_Play* play, SceneData* scene_data);
-void Scene_Proc_Door_Data_Ptr(struct Game_Play* play, SceneData* scene_data);
+void Scene_Proc_Actor_Ptr(struct Game_Play* play, SceneData* sceneData);
+void Scene_Proc_Object_Exchange_Bank_Ptr(struct Game_Play* play, SceneData* sceneData);
+void Scene_Proc_Door_Data_Ptr(struct Game_Play* play, SceneData* sceneData);
void Door_info_ct(DoorInfo* door_info);
void Scene_Proc_Sound(struct Game_Play* play, SceneData* scene_data);
void set_item_info(struct Game_Play* play, SceneDataField* field);
-void Scene_Proc_Field_ct(struct Game_Play* play, SceneData* scene_data);
+void Scene_Proc_Field_ct(struct Game_Play* play, SceneData* sceneData);
void Scene_Proc_ArrangeRoom_ct(struct Game_Play* play, SceneData* data);
void Scene_Proc_ArrangeFurniture_ct(struct Game_Play* play, SceneData* data);
s32 goto_other_scene(struct Game_Play* play, DoorData* door_data, s32 updatePlayer);
diff --git a/include/m_time.h b/include/m_time.h
index e932ffe..e1b07c7 100644
--- a/include/m_time.h
+++ b/include/m_time.h
@@ -60,6 +60,8 @@ typedef enum mTM_RENEW_TIME{
#define mTM_MINUTES_IN_HOUR 60
+#define mTM_TIME_TO_SEC(hour, min, sec) ((hour)*mTM_SECONDS_IN_HOUR + (min)*mTM_SECONDS_IN_MINUTE + (sec))
+
typedef struct TimeCalendarTerm {
/* 0x00 */ lbRTC_month_t month;
/* 0x01 */ lbRTC_day_t day;