Files
Prakxo eb99af89c8 m_kankyo OK (#207)
* implement kankyo

* m_kankyo OK
2024-08-12 10:36:07 -07:00

154 lines
5.4 KiB
C

#ifndef M_KANKYO_H
#define M_KANKYO_H
#include "ultra64.h"
#include "unk.h"
#include "m_lights.h"
#include "lb_rtc.h"
struct Actor;
struct Global_light;
struct s_xyz;
struct Game_Play;
#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 */ Lights sunLight;
/* 0x0E */ Lights moonLight;
/* 0x1C */ struct Lights* unk_1C;
/* 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 */ u8 countdownTimer;
/* 0xBE */ s8 unk_BE;
/* 0xBC */ KankyoNature nature;
} Kankyo; // size = 0xC8
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 mEnv_ChangeWind(void);
void mEnv_InitWind(void);
void mEnv_WindMove(void);
void mEnv_DecideWeather_GameStart(void);
void mEnv_DecideWeather_FirstGameStart(void);
void mEnv_DecideWeather_NormalGameStart(void);
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