diff options
| author | Prakxo <87568477+Prakxo@users.noreply.github.com> | 2024-08-12 19:36:07 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-12 10:36:07 -0700 |
| commit | eb99af89c88005c8e300b76e1b5d93467b98aafd (patch) | |
| tree | d888a89809981f43e791ba63351e2ae2d5f239ab /include | |
| parent | c3164cd99c3eb764a63171253af14126be77b1e7 (diff) | |
m_kankyo OK (#207)
* implement kankyo
* m_kankyo OK
Diffstat (limited to 'include')
| -rw-r--r-- | include/m_clip.h | 3 | ||||
| -rw-r--r-- | include/m_common_data.h | 5 | ||||
| -rw-r--r-- | include/m_event.h | 6 | ||||
| -rw-r--r-- | include/m_field_info.h | 2 | ||||
| -rw-r--r-- | include/m_kankyo.h | 199 | ||||
| -rw-r--r-- | include/m_scene.h | 18 | ||||
| -rw-r--r-- | include/m_time.h | 2 |
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; |
