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
+1 -1
View File
@@ -327,7 +327,7 @@ COMMON_DEFINES = [
]
DOL_DEFINES = COMMON_DEFINES + []
REL_DEFINES = COMMON_DEFINES + [
"-d OPTIMIZED_SQRTF",
#"-d OPTIMIZED_SQRTF",
"-d IS_REL"
]
BASE_DOL_CFLAGS = CFLAGS + [
+5
View File
@@ -122,6 +122,11 @@ m_kabu_manager.c:
.text: [0x803B5CC4, 0x803B6280]
.rodata: [0x80642480, 0x806424C0]
.data: [0x80655D48, 0x80655D78]
m_kankyo.c:
.text: [0x803B6280, 0x803BAB0C]
.rodata: [0x806424C0, 0x80642640]
.data: [0x80655D78, 0x80656670]
.bss: [0x81297A68, 0x81297B18]
m_lights.c:
.text: [0x803BB960, 0x803BC510]
.rodata: [0x80642680, 0x806426D8]
+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
+1 -1
View File
@@ -130,7 +130,7 @@ static void aAL_title_game_data_init_start_select(ANIMAL_LOGO_ACTOR* actor, GAME
play->fb_fade_type = 8;
play->fb_wipe_type = 3;
Common_Set(wipeType, 3);
Common_Set(transition.wipe_type, 3);
mBGMPsComp_make_ps_wipe(0x1168);
}
+1 -1
View File
@@ -505,7 +505,7 @@ static void aTrainWindow_SetLightPrimColorDetail(GAME* game, u32 r, u32 g, u32 b
GRAPH* graph;
for(i = 0; i < 3; i++){
current_color = play->global_light.ambientColor[i] + play->kankyo.ambientColor[i];
current_color = play->global_light.ambientColor[i] + play->kankyo.base_light.sun_color[i];
switch(i){
case 0:
current_color += r;
+1 -1
View File
@@ -54,7 +54,7 @@ void mActorShadow_AdjustRate(f32* rate) {
void mActorShadow_GetTimeAngleY_TimeAlpha(Shadow_Info* shadow, GAME_PLAY* play){
f32 timef;
int timesec = Common_Get(time.now_sec);
shadow->unk1C = play->kankyo.unkC4;
shadow->unk1C = play->kankyo.shadow_alpha;
// Between 4 a.m and 8 p.m
if((timesec >= 14400) && ( timesec < 72000)){
+1 -1
View File
@@ -10,7 +10,7 @@ extern void common_data_reinit(){
state = Common_Get(pad_connected);
bzero(&common_data, sizeof(common_data));
Common_Set(wipeType, -1);
Common_Set(transition.wipe_type, -1);
Common_Set(game_started,1);
Common_Set(last_scene_no, -1);
Common_Set(demo_profiles[0], mAc_PROFILE_NUM); /* cleared state */
+3 -3
View File
@@ -33,8 +33,8 @@ void fbdemo_fade_move(fbdemo_fade* this, int rate) {
if (this->type != 7) {
this->frame += rate;
if (this->frame >= Common_Get(transFadeDuration)) {
this->frame = Common_Get(transFadeDuration);
if (this->frame >= Common_Get(transition).fade_rate) {
this->frame = Common_Get(transition).fade_rate;
this->isDone = 1;
}
ftimer = (f32)this->frame;
@@ -42,7 +42,7 @@ void fbdemo_fade_move(fbdemo_fade* this, int rate) {
ftimer = 0.0f;
}
alpha = (255.0f * ftimer) / Common_Get(transFadeDuration);
alpha = (255.0f * ftimer) / Common_Get(transition).fade_rate;
if (this->type == 1) {
this->color.a = 255 - alpha;
} else {
+2 -2
View File
@@ -53,13 +53,13 @@ fbdemo_wipe1* fbdemo_wipe1_init(fbdemo_wipe1* this) {
void fbdemo_wipe1_move(fbdemo_wipe1* this, int rate) {
if (this->direction != 0) {
this->texY += (((void)0, Common_Get(transWipeSpeed)) * 3) / rate;
this->texY += (((void)0, Common_Get(transition).wipe_rate) * 3) / rate;
if (this->texY >= (int)(153 * (1 << 2))) {
this->texY = (int)(153 * (1 << 2));
this->finished = 1;
}
} else {
this->texY -= (((void)0, Common_Get(transWipeSpeed)) * 3) / rate;
this->texY -= (((void)0, Common_Get(transition).wipe_rate) * 3) / rate;
if (this->texY <= (int)(83.25f * (1 << 2))) {
this->texY = (int)(83.25f * (1 << 2));
this->finished = 1;
+2536
View File
File diff suppressed because it is too large Load Diff
+554
View File
@@ -0,0 +1,554 @@
extern void mEnv_DecideWindDirect(s_xyz* dir, s16 x, s16 z) {
xyz_t wind_dir = { 0.0f, -100.0f, 0.0f };
f32 x_f = x;
f32 z_f = z;
s16 rot_x = (RANDOM_F(x_f) - x_f); // range of [-x, x)
s16 rot_z = (RANDOM_F(z_f) - z_f); // range of [-z, z)
sMath_RotateX(&wind_dir, SHORTANGLE2RAD(rot_x));
sMath_RotateZ(&wind_dir, SHORTANGLE2RAD(rot_z));
dir->x = wind_dir.x;
dir->y = wind_dir.y;
dir->z = wind_dir.z;
}
static int mEnv_GetWeatherChangeStep() {
static u8 weather_term_table[mEnv_WEATHER_TERM_NUM][2] = {
{ lbRTC_JANUARY, 7 }, // January 1st - January 7th
{ lbRTC_FEBRUARY, 24 }, // January 8th - February 24th
{ lbRTC_MARCH, 31 }, // February 25th - March 31st
{ lbRTC_APRIL, 4 }, // April 1st - April 4th
{ lbRTC_APRIL, 7 }, // April 5th - April 7th
{ lbRTC_APRIL, 8 }, // April 8th - April 8th
{ lbRTC_APRIL, 19 }, // April 9th - April 19th
{ lbRTC_APRIL, 20 }, // April 20th - April 20th
{ lbRTC_JUNE, 25 }, // April 21st - June 25th
{ lbRTC_JULY, 15 }, // June 26th - July 15th
{ lbRTC_AUGUST, 31 }, // July 16th - August 31st
{ lbRTC_SEPTEMBER, 30 }, // September 1st - September 30th
{ lbRTC_OCTOBER, 30 }, // October 1st - October 30th
{ lbRTC_OCTOBER, 31 }, // October 31st - Octber 31st
{ lbRTC_NOVEMBER, 15 }, // November 1st - November 15th
{ lbRTC_DECEMBER, 9 }, // November 16th - December 9th
{ lbRTC_DECEMBER, 10 }, // December 10th - December 10th
{ lbRTC_DECEMBER, 23 }, // December 11th - December 23rd
{ lbRTC_DECEMBER, 30 }, // December 24th - December 30th
{ lbRTC_DECEMBER, 31 } // December 31st - December 31st
};
lbRTC_month_t month = Common_Get(time.rtc_time).month;
lbRTC_day_t day = Common_Get(time.rtc_time).day;
int i;
for (i = 0; i < mEnv_WEATHER_TERM_NUM; i++) {
if (month < weather_term_table[i][0]) {
return i;
}
else if (month == weather_term_table[i][0] && day <= weather_term_table[i][1]) {
return i;
}
}
return 1; /* default is between Jan 8 & Feb 24 */
}
#define mEnv_MAKE_WEATHER_TABLE_ENTRY(clear, rain, thunder, snow, blizzard, sakura, heavy_sakura) \
( \
(((clear) & 0xF) << 24) | \
(((rain) & 0xF) << 16) | \
(((thunder) & 0xF) << 20) | \
(((snow) & 0xF) << 8) | \
(((blizzard) & 0xF) << 12) | \
(((sakura) & 0xF) << 0) | \
(((heavy_sakura) & 0xF) << 4) \
)
extern void mEnv_RandomWeather(s16* next_weather, s16* next_intensity) {
/* note: entries must add up to 10 for this to function properly */
static const u32 weather_table[mEnv_WEATHER_TERM_NUM] = {
mEnv_MAKE_WEATHER_TABLE_ENTRY(10, 0, 0, 0, 0, 0, 0), // 100% chance of clear weather
mEnv_MAKE_WEATHER_TABLE_ENTRY( 7, 0, 0, 2, 1, 0, 0), // 70% chance of clear weather, 20% chance of snow, 10% chance of blizzard
mEnv_MAKE_WEATHER_TABLE_ENTRY( 8, 2, 0, 0, 0, 0, 0), // 80% chance of clear weather, 20% chance of rain
mEnv_MAKE_WEATHER_TABLE_ENTRY(10, 0, 0, 0, 0, 0, 0), // 100% chance of clear weather
mEnv_MAKE_WEATHER_TABLE_ENTRY(0, 0, 0, 0, 0, 10, 0), // 100% chance of light cherry blossoms
mEnv_MAKE_WEATHER_TABLE_ENTRY(0, 0, 0, 0, 0, 0, 10), // 100% chance of heavy cherry blossoms
mEnv_MAKE_WEATHER_TABLE_ENTRY( 8, 2, 0, 0, 0, 0, 0), // 80% chance of clear weather, 20% chance of rain
mEnv_MAKE_WEATHER_TABLE_ENTRY(10, 0, 0, 0, 0, 0, 0), // 100% chance of clear weather
mEnv_MAKE_WEATHER_TABLE_ENTRY( 7, 2, 1, 0, 0, 0, 0), // 70% chance of clear weather, 20% chance of rain, 10% chance of thunderstorms
mEnv_MAKE_WEATHER_TABLE_ENTRY( 5, 3, 2, 0, 0, 0, 0), // 50% chance of clear weather, 30% chance of rain, 20% chance of thunderstorms
mEnv_MAKE_WEATHER_TABLE_ENTRY( 9, 0, 1, 0, 0, 0, 0), // 90% chance of clear weather, 10% chance of thunderstorms
mEnv_MAKE_WEATHER_TABLE_ENTRY( 6, 0, 4, 0, 0, 0, 0), // 60% chance of clear weather, 40% chance of thunderstorms
mEnv_MAKE_WEATHER_TABLE_ENTRY( 8, 2, 0, 0, 0, 0, 0), // 80% chance of clear weather, 20% chance of rain
mEnv_MAKE_WEATHER_TABLE_ENTRY(10, 0, 0, 0, 0, 0, 0), // 100% chance of clear weather
mEnv_MAKE_WEATHER_TABLE_ENTRY( 8, 1, 0, 1, 0, 0, 0), // 80% chance of clear weather, 10% chance of rain, 10% chance of snow
mEnv_MAKE_WEATHER_TABLE_ENTRY( 7, 0, 0, 3, 0, 0, 0), // 70% chance of clear weather, 30% chance of snow
mEnv_MAKE_WEATHER_TABLE_ENTRY(0, 0, 0, 0, 10, 0, 0), // 100% chance of blizzard
mEnv_MAKE_WEATHER_TABLE_ENTRY( 4, 0, 0, 4, 2, 0, 0), // 40% chance of clear weather, 40% chance of snow, 20% chance of blizzard
mEnv_MAKE_WEATHER_TABLE_ENTRY( 0, 0, 0, 6, 4, 0, 0), // 60% chance of snow, 40% chance of blizzard
mEnv_MAKE_WEATHER_TABLE_ENTRY(10, 0, 0, 0, 0, 0, 0) // 100% chance of clear weather
};
int step = mEnv_GetWeatherChangeStep();
u32 weather = weather_table[step];
u32 selected;
u32 c0;
u32 c1;
u32 c2;
u32 c3;
u32 c4;
u32 c5;
c0 = (weather >> 24) & 0xF; // clear
c1 = (weather >> 16) & 0xF; // light rain
c2 = (weather >> 20) & 0xF; // thunderstorm
c3 = (weather >> 8) & 0xF; // light snow
c4 = (weather >> 12) & 0xF; // blizzard
#ifndef BUGFIXES
c5 = (weather >> 8) & 0xF; // @BUG - this is almost certainly supposed to be (weather >> 0) & 0xF
#else
c5 = (weather >> 0) & 0xF; // light cherry blossoms
#endif
selected = RANDOM_F(10.0f);
if (selected < c0) {
next_weather[0] = mEnv_WEATHER_CLEAR;
next_intensity[0] = mEnv_WEATHER_INTENSITY_LIGHT;
}
else if (selected < c0 + c1) {
next_weather[0] = mEnv_WEATHER_RAIN;
next_intensity[0] = mEnv_WEATHER_INTENSITY_LIGHT;
}
else if (selected < c0 + c1 + c2) {
next_weather[0] = mEnv_WEATHER_RAIN;
next_intensity[0] = mEnv_WEATHER_INTENSITY_HEAVY;
}
else if (selected < c0 + c1 + c2 + c3) {
next_weather[0] = mEnv_WEATHER_SNOW;
next_intensity[0] = mEnv_WEATHER_INTENSITY_LIGHT;
}
else if (selected < c0 + c1 + c2 + c3 + c4) {
next_weather[0] = mEnv_WEATHER_SNOW;
next_intensity[0] = mEnv_WEATHER_INTENSITY_HEAVY;
}
else if (selected < c0 + c1 + c2 + c3 + c4 + c5) {
next_weather[0] = mEnv_WEATHER_SAKURA;
next_intensity[0] = mEnv_WEATHER_INTENSITY_LIGHT;
}
else {
next_weather[0] = mEnv_WEATHER_SAKURA;
next_intensity[0] = mEnv_WEATHER_INTENSITY_HEAVY;
}
}
typedef struct wind_power_range_s {
int calm_percent;
int normal_percent;
int gusty_percent;
} mEnv_wind_power_range_c;
typedef struct wind_info_s {
int wind_change_timer; /* timer until wind direction & base power changes */
f32 target_wind_angle;
f32 wind_angle;
f32 wind_angle_step;
f32 wind_power_range_max;
f32 wind_power_range_min;
f32 target_wind_power;
f32 wind_power; /* base wind power */
f32 wind_power_step;
int wind_state;
int gust_timer;
s16 wind_power_timer;
f32 gust_wind_power; /* power during gusts */
f32 last_wind_power; /* saved base power for returning from gusts */
} mEnv_wind_info_c;
static mEnv_wind_info_c mEnv_wind_info = {
0,
/* angle */
DEG2SHORT_ANGLE(45.0f), /* 0x2000 */
DEG2SHORT_ANGLE(45.0f),
0.0f,
/* power range */
1.0f,
0.0f,
/* power */
0.5f,
0.5f,
0.0f,
mEnv_WIND_STATE_STEADY,
0,
0,
0.0f,
0.0f
};
extern s16 mEnv_GetWindAngleS() {
return mEnv_wind_info.wind_angle; /* angle is stored as a binangle (short angle), but in float type */
}
extern f32 mEnv_GetWindPowerF() {
if (mEnv_wind_info.wind_power < 0.0f) {
return 0.0f;
}
else if (mEnv_wind_info.wind_power > 1.0f) {
return 1.0f;
}
else {
return mEnv_wind_info.wind_power;
}
}
extern f32 mEnv_GetWindPowerF_Windmill() {
return mEnv_wind_info.wind_power; // unclamped for gusts/luls
}
static u8 wind_term[mEnv_WIND_TERM_NUM][2] = {
{ lbRTC_JANUARY, 7 }, /* January 1st - January 7th */
{ lbRTC_APRIL, 5 }, /* January 8th - April 5th */
{ lbRTC_AUGUST, 19 }, /* April 6th - August 19th */
{ lbRTC_SEPTEMBER, 30 } /* August 20th - September 30th */
/* October 1st - December 31st */
};
static int mEnv_GetWindPowerTableTerm(lbRTC_time_c* time) {
lbRTC_month_t month = time->month;
lbRTC_day_t day = time->day;
int i;
for (i = 0; i < mEnv_WIND_TERM_NUM; i++) {
if (month < wind_term[i][0]) {
return i;
}
else if (month == wind_term[i][0] && day <= wind_term[i][1]) {
return i;
}
}
return i; /* must be the final term */
}
static int mEnv_GetWindPowerPercent(lbRTC_time_c* time, mEnv_wind_power_range_c* wind_power_range) {
static mEnv_wind_power_range_c pow_table[mEnv_WIND_TERM_NUM + 1] = {
{ 10, 80, 10 },
{ 0, 70, 30 },
{ 10, 80, 10 },
{ 0, 70, 30 },
{ 10, 80, 10 }
};
static mEnv_wind_power_range_c error_data = { 33, 33, 34 };
int power_table_term = mEnv_GetWindPowerTableTerm(time);
*wind_power_range = error_data;
if (power_table_term >= 0 && power_table_term < mEnv_WIND_TERM_NUM) {
*wind_power_range = pow_table[power_table_term];
return TRUE;
}
return FALSE;
}
extern void mEnv_DecideTodayWindPowerRange() {
mEnv_wind_power_range_c power_range_percents;
int selected = RANDOM(100);
mEnv_GetWindPowerPercent(Common_GetPointer(time.rtc_time), &power_range_percents);
if (selected < power_range_percents.calm_percent) {
mEnv_wind_info.wind_power_range_max = 0.4f;
mEnv_wind_info.wind_power_range_min = 0.0f;
}
else if (selected < power_range_percents.calm_percent + power_range_percents.normal_percent) {
mEnv_wind_info.wind_power_range_max = 0.6f;
mEnv_wind_info.wind_power_range_min = 0.4f;
}
else {
mEnv_wind_info.wind_power_range_max = 1.0f;
mEnv_wind_info.wind_power_range_min = 0.6f;
}
}
extern void mEnv_ChangeWind() {
if (mEv_check_schedule(mEv_EVENT_KOINOBORI)) {
mEnv_wind_info.target_wind_angle = DEG2SHORT_ANGLE(135.0f); /* 0x6000 */
mEnv_wind_info.wind_angle = DEG2SHORT_ANGLE(135.0f);
mEnv_wind_info.target_wind_power = 1.0f;
mEnv_wind_info.wind_power = 1.0f;
mEnv_wind_info.wind_angle_step = 0.0f;
mEnv_wind_info.wind_power_step = 0.0f;
}
else {
f32 wind_angle_adjust = RANDOM_F(DEG2SHORT_ANGLE(30.0f)) - (f32)DEG2SHORT_ANGLE(30.0f) / 2.0f;
f32 w = fqrand();
f32 min = mEnv_wind_info.wind_power_range_min;
f32 max = mEnv_wind_info.wind_power_range_max;
mEnv_wind_info.target_wind_angle = mEnv_wind_info.wind_angle + wind_angle_adjust;
mEnv_wind_info.wind_angle_step = wind_angle_adjust / mEnv_WIND_CHANGE_RATE;
mEnv_wind_info.target_wind_power = min + w * (max - min);
mEnv_wind_info.wind_power_step = (mEnv_wind_info.target_wind_power - mEnv_wind_info.wind_power) / mEnv_WIND_CHANGE_RATE;
}
}
static void mEnv_InitWind() {
if (mEv_check_schedule(mEv_EVENT_KOINOBORI)) {
mEnv_wind_info.target_wind_angle = DEG2SHORT_ANGLE(135.0f); /* 0x6000 */
mEnv_wind_info.target_wind_power = 1.0f;
}
else {
f32 angle = RANDOM_F(65536);
f32 t = fqrand();
f32 min = mEnv_wind_info.wind_power_range_min;
f32 max = mEnv_wind_info.wind_power_range_max;
mEnv_wind_info.target_wind_angle = angle; /* completely random wind direction */
mEnv_wind_info.target_wind_power = min + t * (max - min);
}
mEnv_wind_info.wind_state = mEnv_WIND_STATE_STEADY;
mEnv_wind_info.wind_change_timer = mEnv_WIND_CHANGE_RATE;
mEnv_wind_info.wind_angle = mEnv_wind_info.target_wind_angle;
mEnv_wind_info.wind_angle_step = 0.0f;
mEnv_wind_info.wind_power = mEnv_wind_info.target_wind_power;
mEnv_wind_info.wind_power_step = 0.0f;
}
extern void mEnv_WindMove() {
if (mEnv_wind_info.wind_state == mEnv_WIND_STATE_STEADY) {
if (
(mEnv_wind_info.target_wind_angle > mEnv_wind_info.wind_angle && mEnv_wind_info.wind_angle_step < 0.0f) ||
(mEnv_wind_info.target_wind_angle < mEnv_wind_info.wind_angle && mEnv_wind_info.wind_angle_step > 0.0f)
) {
mEnv_wind_info.wind_angle_step *= -1.0f; // invert wind angle step direction
}
if (
(mEnv_wind_info.target_wind_power > mEnv_wind_info.wind_power && mEnv_wind_info.wind_power_step < 0.0f) ||
(mEnv_wind_info.target_wind_power < mEnv_wind_info.wind_power && mEnv_wind_info.wind_power_step > 0.0f)
) {
mEnv_wind_info.wind_power_step *= -1.0f; // invert wind power step direction
}
/* process change in wind angle */
if (mEnv_wind_info.target_wind_angle != mEnv_wind_info.wind_angle) {
mEnv_wind_info.wind_angle += mEnv_wind_info.wind_angle_step;
/* stop wind angle step once target is reached */
if (mEnv_wind_info.wind_angle_step > 0.0f) {
if (mEnv_wind_info.wind_angle >= mEnv_wind_info.target_wind_angle) {
mEnv_wind_info.wind_angle_step = 0.0f;
}
}
else if (mEnv_wind_info.wind_angle_step < 0.0f) {
if (mEnv_wind_info.wind_angle <= mEnv_wind_info.target_wind_angle) {
mEnv_wind_info.wind_angle_step = 0.0f;
}
}
}
/* process change in wind power */
if (mEnv_wind_info.target_wind_power != mEnv_wind_info.wind_power) {
mEnv_wind_info.wind_power += mEnv_wind_info.wind_power_step;
/* stop wind power step once target is reached */
if (mEnv_wind_info.wind_power_step > 0.0f) {
if (mEnv_wind_info.wind_power >= mEnv_wind_info.target_wind_power) {
mEnv_wind_info.wind_power_step = 0.0f;
}
}
else if (mEnv_wind_info.wind_power_step < 0.0f) {
if (mEnv_wind_info.wind_power <= mEnv_wind_info.target_wind_power) {
mEnv_wind_info.wind_power_step = 0.0f;
}
}
}
if (mEnv_wind_info.gust_timer <= 0) {
int res = (int)(fqrand() * 100.0f) & 1;
f32 rng1 = fqrand();
f32 rng2 = fqrand();
mEnv_wind_info.wind_state = (res == 1 || mEnv_wind_info.wind_power_range_min == 0.0f) ? mEnv_WIND_STATE_FAST : mEnv_WIND_STATE_SLOW;
mEnv_wind_info.last_wind_power = mEnv_wind_info.wind_power;
mEnv_wind_info.wind_power_timer = 200.0f + rng2 * 100.0f;
if (mEnv_wind_info.wind_state == mEnv_WIND_STATE_FAST) {
mEnv_wind_info.gust_wind_power = mEnv_wind_info.wind_power_range_max + 0.3f + rng1 * ((mEnv_wind_info.wind_power_range_max + 0.4f) - (mEnv_wind_info.wind_power_range_max + 0.3f)); // ??
}
else {
mEnv_wind_info.gust_wind_power = mEnv_wind_info.wind_power_range_min - 0.3f + rng1 * ((mEnv_wind_info.wind_power_range_min - 0.4f) - (mEnv_wind_info.wind_power_range_min - 0.3f)); // ??
}
}
else {
if (mEnv_wind_info.gust_timer > 0) {
mEnv_wind_info.gust_timer--;
}
if (mEnv_wind_info.wind_change_timer <= 0) {
mEnv_ChangeWind();
mEnv_wind_info.wind_change_timer = mEnv_WIND_CHANGE_RATE;
}
}
}
else if (mEnv_wind_info.wind_state == mEnv_WIND_STATE_FAST) {
add_calc(&mEnv_wind_info.wind_power, mEnv_wind_info.gust_wind_power, 0.05f, 0.05f, 0.0001f);
if (mEnv_wind_info.wind_power_timer <= 0) {
mEnv_wind_info.wind_state = mEnv_WIND_STATE_REDUCING;
}
else {
mEnv_wind_info.wind_power_timer--;
}
}
else if (mEnv_wind_info.wind_state == mEnv_WIND_STATE_SLOW) {
add_calc(&mEnv_wind_info.wind_power, mEnv_wind_info.gust_wind_power, 0.05f, 0.05f, 0.0001f);
if (mEnv_wind_info.wind_power_timer <= 0) {
mEnv_wind_info.wind_state = mEnv_WIND_STATE_REDUCING;
}
else {
mEnv_wind_info.wind_power_timer--;
}
}
else {
add_calc(&mEnv_wind_info.wind_power, mEnv_wind_info.last_wind_power, 0.032f, 0.032f, 0.000005f);
if (mEnv_wind_info.wind_power == mEnv_wind_info.last_wind_power) {
f32 rng = fqrand();
mEnv_wind_info.gust_timer = rng * 450.0f + 150.0f;
mEnv_wind_info.wind_state = mEnv_WIND_STATE_STEADY;
}
}
if (mEnv_wind_info.wind_change_timer > 0) {
mEnv_wind_info.wind_change_timer--;
}
}
extern void mEnv_DecideWeather_GameStart() {
s16 weather;
s16 intensity;
s16 event_weather;
s16 event_intensity;
mEnv_RandomWeather(&weather, &intensity);
mEv_GetEventWeather(&event_weather, &event_intensity);
if (event_weather != -1) {
weather = event_weather;
intensity = event_intensity;
}
if (mEv_CheckRealArbeit() == TRUE && weather == mEnv_WEATHER_RAIN) {
weather = mEnv_WEATHER_CLEAR;
intensity = mEnv_WEATHER_INTENSITY_NONE;
}
Common_Set(weather, weather);
Common_Set(weather_intensity, intensity);
Common_Set(weather_time, Common_Get(time.rtc_time));
}
extern void mEnv_DecideWeather_FirstGameStart() {
mEnv_DecideWeather_GameStart();
Save_Set(weather, ((u8)Common_Get(weather_intensity) | (u8)Common_Get(weather) << 4));
if (mTM_check_renew_time(mTM_RENEW_TIME_WEATHER)) {
mTM_off_renew_time(mTM_RENEW_TIME_WEATHER);
}
}
static void mEnv_Rainbow_reserve() {
Save_Set(rainbow_reserved, TRUE);
Save_Set(rainbow_month, Common_Get(time.rtc_time).month);
Save_Set(rainbow_day, Common_Get(time.rtc_time).day);
}
extern void mEnv_PreRainNowFine_Init() {
mAGrw_OrderSetHaniwa();
mEnv_Rainbow_reserve();
}
extern void mEnv_DecideWeather_NormalGameStart() {
u8 weather;
u8 intensity;
if (mTM_check_renew_time(mTM_RENEW_TIME_WEATHER)) {
u8 save_weather;
mEnv_DecideWeather_GameStart();
mTM_off_renew_time(mTM_RENEW_TIME_WEATHER);
weather = Common_Get(weather);
intensity = Common_Get(weather_intensity);
save_weather = mEnv_SAVE_GET_WEATHER_TYPE(Save_Get(weather));
if (
(weather == mEnv_WEATHER_CLEAR || weather == mEnv_WEATHER_SAKURA) &&
(save_weather == mEnv_WEATHER_SNOW || save_weather == mEnv_WEATHER_RAIN)
) {
mEnv_PreRainNowFine_Init();
}
Save_Set(weather, intensity | (weather << 4));
}
else {
weather = mEnv_SAVE_GET_WEATHER_TYPE(Save_Get(weather));
intensity = mEnv_SAVE_GET_WEATHER_INTENSITY(Save_Get(weather));
if (mEv_CheckRealArbeit() == TRUE && weather == mEnv_WEATHER_RAIN) {
weather = mEnv_WEATHER_CLEAR;
intensity = mEnv_WEATHER_INTENSITY_NONE;
Save_Set(weather, (intensity | (u8)weather << 4));
}
Common_Set(weather, weather);
Common_Set(weather_intensity, intensity);
}
if (fqrand() < (f32)GETREG(TAKREG, 50) * 0.1f + 0.8f) {
Common_Set(island_weather, mEnv_WEATHER_CLEAR);
Common_Set(island_weather_intensity, mEnv_WEATHER_INTENSITY_NONE);
}
else {
Common_Set(island_weather, mEnv_WEATHER_RAIN);
Common_Set(island_weather_intensity, mEnv_WEATHER_INTENSITY_HEAVY);
}
}
extern int mEnv_NowWeather() {
switch (mEv_CheckTitleDemo()) {
case 1:
return mEnv_WEATHER_SAKURA;
case 2:
return mEnv_WEATHER_RAIN;
case 3:
case 4:
return mEnv_WEATHER_CLEAR;
case 5:
return mEnv_WEATHER_SNOW;
}
if (mFI_GET_TYPE(mFI_GetFieldId()) == mFI_FIELD_FG) {
return Common_Get(weather);
}
return mEnv_WEATHER_CLEAR;
}
+11 -10
View File
@@ -214,8 +214,7 @@ static void LightsN__diffuse_proc(LightsN* lights, LightParams* lightInfo){
}
}
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){
const static light_point_proc poslight_type_proc[] = {
LightsN__point_proc,
@@ -243,9 +242,9 @@ extern void LightsN_list_check(LightsN* lights, LightNode* node, xyz_t* pos){
}
}
static LightNode* Light_list_buf_new(){
static Light_list* Light_list_buf_new(){
LightNode* light;
Light_list* light;
if(light_list_buf.current >= 32){
return NULL;
@@ -268,11 +267,11 @@ static LightNode* Light_list_buf_new(){
return light;
}
static void Light_list_buf_delete(LightNode* light){
static void Light_list_buf_delete(Light_list* light){
if(light != NULL){
light_list_buf.current--;
light->info = NULL;
light_list_buf.idx = (light - light_list_buf.lights) / (int)(sizeof(LightNode));
light_list_buf.idx = (light - light_list_buf.lights) / (int)(sizeof(Light_list));
}
}
@@ -312,9 +311,9 @@ static void Global_light_list_ct(Global_light* glight){
glight->list = NULL;
}
extern void Global_light_list_new(GAME_PLAY* play, Global_light* glight, Lights* light){
extern Light_list* Global_light_list_new(GAME_PLAY* play, Global_light* glight, Lights* light){
LightNode* clight;
Light_list* clight;
clight = Light_list_buf_new();
@@ -329,9 +328,11 @@ extern void Global_light_list_new(GAME_PLAY* play, Global_light* glight, Lights*
glight->list = clight;
}
return clight;
}
extern void Global_light_list_delete(Global_light* glight, LightNode* light){
extern void Global_light_list_delete(Global_light* glight, Light_list* light){
if(light != NULL){
if(light->prev != NULL){
@@ -367,7 +368,7 @@ static LightsN* new_LightsN(GRAPH* graph, u8 r, u8 g, u8 b){
extern void Light_list_point_draw(GAME_PLAY* play){
LightPoint* lightInfo;
LightNode* light;
Light_list* light;
GRAPH* g = play->game.graph;
f32 rad;
Gfx* dl;
+5 -5
View File
@@ -167,8 +167,8 @@ void Game_play_fbdemo_wipe_init(GAME_PLAY* play){
play->fbdemo_wipe.wipe_procs.init_proc(&wipe->wipe_data);
Common_Set(transWipeSpeed, 28);
Common_Set(transFadeDuration, 30);
Common_Set(transition.wipe_rate, 28);
Common_Set(transition.fade_rate, 30);
wipe->wipe_procs.setcolor_proc(&wipe->wipe_data,0);
@@ -478,9 +478,9 @@ void play_init(GAME* game){
play->fb_wipe_mode = 0;
play->fb_fade_type = 1;
if(Common_Get(wipeType) != 0xFF){
type = Common_Get(wipeType);
Common_Set(wipeType, 0xFF);
if(Common_Get(transition.wipe_type) != 0xFF){
type = Common_Get(transition.wipe_type);
Common_Set(transition.wipe_type, 0xFF);
}
play->fb_wipe_type = type;
+1 -1
View File
@@ -192,7 +192,7 @@ static void trademark_goto_demo_scene(GAME_TRADEMARK* trademark) {
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(wipeType, 3);
Common_Set(transition.wipe_type, 3);
}
Save_Set(scene_no, SCENE_TITLE_DEMO);