Implement & link ac_boat_demo

This commit is contained in:
Cuyler36
2024-01-05 02:47:48 -05:00
parent 8fea68abe7
commit f53d795059
17 changed files with 617 additions and 18 deletions
+70
View File
@@ -0,0 +1,70 @@
#include "ac_boat_demo.h"
#include "libultra/libultra.h"
#include "ac_weather.h"
#include "m_bg_item.h"
#include "m_bgm.h"
#include "m_msg.h"
/* For whatever reason, this file seems to have -pool off */
#pragma push
#pragma pool_data off
static void aBTD_actor_ct(ACTOR* actorx, GAME* game);
static void aBTD_actor_dt(ACTOR* actorx, GAME* game);
static void aBTD_actor_move(ACTOR* actorx, GAME* game);
ACTOR_PROFILE Boat_Demo_Profile = {
mAc_PROFILE_BOAT_DEMO,
ACTOR_PART_CONTROL,
ACTOR_STATE_CAN_MOVE_IN_DEMO_SCENES | ACTOR_STATE_NO_MOVE_WHILE_CULLED,
EMPTY_NO,
ACTOR_OBJ_BANK_KEEP,
sizeof(BOAT_DEMO_ACTOR),
&aBTD_actor_ct,
&aBTD_actor_dt,
&aBTD_actor_move,
mActor_NONE_PROC1,
NULL
};
static mDemo_Clip_c aBTD_clip;
static u8 aBTD_island_prg[] = {
#include "assets/aBTD_island_prg.inc"
};
static u8 aBTD_island_ldr[] = {
#include "assets/aBTD_island_ldr.inc"
};
static void aBTD_setupAction(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play, int action);
static void aBTD_actor_ct(ACTOR* actorx, GAME* game) {
BOAT_DEMO_ACTOR* boat_demo = (BOAT_DEMO_ACTOR*)actorx;
GAME_PLAY* play = (GAME_PLAY*)game;
Common_Get(clip).demo_clip2 = &aBTD_clip;
bzero(&aBTD_clip, sizeof(aBTD_clip));
Common_Get(clip).demo_clip2->class = boat_demo;
Common_Get(clip).demo_clip2->type = mDemo_CLIP_TYPE_BOAT_DEMO;
boat_demo->island_gba_loader_p = aBTD_island_ldr;
boat_demo->island_gba_program_p = aBTD_island_prg;
if (mFI_CheckBlockKind(play->block_table.block_x, play->block_table.block_z, mRF_BLOCKKIND_ISLAND) == TRUE) {
boat_demo->at_island = TRUE;
boat_demo->island_npc_info_registered = TRUE;
}
aBTD_setupAction(boat_demo, play, aBTD_ACTION_SENDO_BIRTH_WAIT);
}
static void aBTD_actor_dt(ACTOR* actorx, GAME* game) {
if (Common_Get(clip).demo_clip2 != NULL) {
Common_Get(clip).demo_clip2 = NULL;
}
}
#include "../src/ac_boat_demo_move.c_inc"
#pragma pop
+433
View File
@@ -0,0 +1,433 @@
static int aBTD_check_sendo_and_boat(BOAT_DEMO_ACTOR* boat_demo) {
int res = TRUE;
if (boat_demo->npc_sendo_actor == NULL) {
if (boat_demo->boat_actor != NULL) {
Actor_delete((ACTOR*)boat_demo->boat_actor);
}
res = FALSE;
}
if (boat_demo->boat_actor == NULL) {
if (boat_demo->npc_sendo_actor != NULL) {
Actor_delete((ACTOR*)boat_demo->npc_sendo_actor);
}
res = FALSE;
}
return res;
}
static int aBTD_regist_island_npc_info() {
Island_c* island = Save_GetPointer(island);
Animal_c* animal = &island->animal;
mNpc_NpcList_c* npclist = Common_Get(island_npclist);
int res;
mNpc_SetNpcList(npclist, animal, mISL_ISLANDER_NUM, TRUE);
res = mFI_RegistMoveActorList(
npclist->name,
animal->home_info.block_x, animal->home_info.block_z,
animal->home_info.ut_x, animal->home_info.ut_z,
-ANIMAL_NUM_MAX,
0
);
if (res == TRUE) {
mNPS_set_island_schedule_area(&animal->id);
}
return res;
}
static int aBTD_unregist_island_npc_info() {
mNpc_NpcList_c* npclist = Common_Get(island_npclist);
Island_c* island = Save_GetPointer(island);
Animal_c* animal = &island->animal;
int res = mFI_UnregistMoveActorList(
npclist->name,
animal->home_info.block_x,
animal->home_info.block_z
);
if (res == TRUE) {
mNPS_reset_schedule_area(&Save_Get(island).animal.id);
mNpc_InitNpcList(npclist, mISL_ISLANDER_NUM);
}
return res;
}
static void aBTD_chg_regist_island_npc_info(BOAT_DEMO_ACTOR* boat_demo) {
if (boat_demo->at_island == FALSE) {
if (boat_demo->island_npc_info_registered == FALSE && aBTD_regist_island_npc_info() == TRUE) {
boat_demo->island_npc_info_registered = TRUE;
}
}
else {
if (boat_demo->island_npc_info_registered == TRUE && aBTD_unregist_island_npc_info() == TRUE) {
boat_demo->island_npc_info_registered = FALSE;
}
}
}
static void aBTD_setup_castaway(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
if (boat_demo->action > aBTD_ACTION_PL_RIDE_ON_START_WAIT && boat_demo->action != aBTD_ACTION_ANCHOR_WAIT) {
if (mEv_check_status(mEv_EVENT_DOZAEMON, mEv_STATUS_RUN) && (Common_Get(spnpc_first_talk_flags) & (1 << aNPC_SPNPC_BIT_DOZAEMON)) == 0) {
mEv_dozaemon_c* dozaemon_ev = (mEv_dozaemon_c*)mEv_reserve_save_area(mEv_EVENT_DOZAEMON, 13); // Shouldn't this be mEv_get_save_area?
if (
(dozaemon_ev == NULL || (dozaemon_ev->flags & 1) == 0) &&
Save_Get(event_save_common).dozaemon_completed != TRUE &&
boat_demo->castaway_actor == NULL
) {
int setupActor = (*Common_Get(clip).npc_clip->setupActor_proc)(play, SP_NPC_CASTAWAY, -1, -1, -1, -1 , -1, 0, 0);
if (setupActor == TRUE) {
EV_CASTAWAY_ACTOR* castaway = (EV_CASTAWAY_ACTOR*)Actor_info_fgName_search(&play->actor_info, SP_NPC_CASTAWAY, ACTOR_PART_NPC);
if (castaway != NULL) {
boat_demo->castaway_actor = castaway;
}
}
}
}
}
}
static void aBTD_change_season(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
if (boat_demo->at_island == TRUE) {
mFI_SetClimate(mFI_CLIMATE_0);
mFM_returnSeason();
aWeather_RequestChangeWeatherFromIsland();
mNpc_ClearIslandPresentFtrInfo();
mNpc_SetIslandGetLetter(FALSE);
mNpc_SetIslandCheckFtrMsg(FALSE);
}
else {
mFI_SetClimate(mFI_CLIMATE_ISLAND);
mFM_toSummer();
aWeather_RequestChangeWeatherToIsland();
mISL_ChangeBG();
mRmTp_DecideCottageDefaultLightSwitch();
mSP_SelectRandomItemToAGB();
mISL_ClearNowPlayerAction();
mNpc_SetIslandPresentFtr();
mNpc_SetIslandRoomFtr(&Save_Get(island).animal);
mNpc_SetIslandGetLetter(FALSE);
mNpc_SetIslandCheckFtrMsg(FALSE);
}
mBI_change_bg_item(play);
}
static void aBTD_sendo_birth_wait(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
if (Common_Get(clip).npc_clip != NULL && Common_Get(clip).npc_clip->setupActor_proc != NULL) {
int sendo_birth = (*Common_Get(clip).npc_clip->setupActor_proc)(play, SP_NPC_SENDO, -1, -1, -1, -1, -1, 0, 0);
if (sendo_birth == TRUE) {
NPC_SENDO_ACTOR* sendo_actor = (NPC_SENDO_ACTOR*)Actor_info_fgName_search(&play->actor_info, SP_NPC_SENDO, ACTOR_PART_NPC);
if (sendo_actor != NULL) {
BOAT_ACTOR* boat_actor = (BOAT_ACTOR*)Actor_info_fgName_search(&play->actor_info, BOAT, ACTOR_PART_ITEM);
boat_demo->npc_sendo_actor = sendo_actor;
boat_demo->boat_actor = boat_actor;
sendo_actor->npc_class.actor_class.parent_actor = (ACTOR*)boat_demo;
boat_actor->actor_class.parent_actor = (ACTOR*)boat_demo;
aBTD_setupAction(boat_demo, play, aBTD_ACTION_PL_RIDE_ON_START_WAIT);
}
}
}
}
static void aBTD_pl_ride_on_start_wait(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
if (aBTD_check_sendo_and_boat(boat_demo) == FALSE) {
Actor_delete((ACTOR*)boat_demo);
}
else if (boat_demo->demo_act == aBTD_DEMO_PL_RIDE_ON_END) {
aBTD_setupAction(boat_demo, play, aBTD_ACTION_PL_RIDE_ON_END_WAIT);
}
}
static void aBTD_pl_ride_on_end_wait(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
if (boat_demo->demo_act == aBTD_DEMO_START_CALL_END) {
aBTD_setupAction(boat_demo, play, aBTD_ACTION_START_CALL_END_WAIT);
}
}
static void aBTD_start_call_end_wait(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
if (boat_demo->demo_act == aBTD_DEMO_MOVE_BOAT_END) {
aBTD_setupAction(boat_demo, play, aBTD_ACTION_SONG_BGM_START_WAIT);
}
}
static void aBTD_song_bgm_start_wait(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
boat_demo->song_bgm_timer--;
if (boat_demo->song_bgm_timer <= 0) {
aBTD_setupAction(boat_demo, play, aBTD_ACTION_SING_SENDO_START_WAIT);
}
}
static void aBTD_sing_sendo_start_wait(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
boat_demo->song_bgm_timer--;
if (boat_demo->song_bgm_timer <= 0) {
aBTD_setupAction(boat_demo, play, aBTD_ACTION_SING_SENDO_MSG_SET_WAIT);
}
}
static void aBTD_sing_sendo_msg_set_wait(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
int msg_no = mMsg_Get_msg_num(mMsg_Get_base_window_p());
if (msg_no == boat_demo->sing_msg_no) {
aBTD_setupAction(boat_demo, play, aBTD_ACTION_SENDO_DIALOGUE_START_WAIT);
}
}
static void aBTD_sendo_dialogue_start_wait(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
int msg_no = mMsg_Get_msg_num(mMsg_Get_base_window_p());
if (msg_no == boat_demo->sing_msg_no) {
aBTD_setupAction(boat_demo, play, aBTD_ACTION_SING_SENDO_START_WAIT2);
}
}
static void aBTD_sing_sendo_start_wait2(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
int msg_no = mMsg_Get_msg_num(mMsg_Get_base_window_p());
if (msg_no == boat_demo->sing_msg_no) {
aBTD_setupAction(boat_demo, play, aBTD_ACTION_MOVE_BOAT_END_WAIT);
}
aBTD_chg_regist_island_npc_info(boat_demo);
}
static void aBTD_move_boat_end_wait(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
if (boat_demo->demo_act == aBTD_DEMO_TOUCH_WHARF_END) {
aBTD_setupAction(boat_demo, play, aBTD_ACTION_TOUCH_WHARF_END_WAIT);
}
}
static void aBTD_touch_wharf_end_wait(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
if (boat_demo->touching_wharf == FALSE) {
boat_demo->touch_wharf_timer--;
if (boat_demo->touch_wharf_timer <= 0) {
sAdo_OngenTrgStart(0x165, &boat_demo->boat_actor->actor_class.world.position);
boat_demo->touching_wharf = TRUE;
}
}
if (boat_demo->demo_act == aBTD_DEMO_PL_RIDE_OFF_START) {
aBTD_setupAction(boat_demo, play, aBTD_ACTION_PL_RIDE_OFF_START_WAIT);
}
}
static void aBTD_pl_ride_off_start_wait(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
if (boat_demo->demo_act == aBTD_DEMO_PL_RIDE_OFF_END) {
aBTD_setupAction(boat_demo, play, aBTD_ACTION_PL_RIDE_OFF_END_WAIT);
}
}
static void aBTD_pl_ride_off_end_wait(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
if (boat_demo->demo_act == aBTD_DEMO_ANCHOR) {
aBTD_setupAction(boat_demo, play, aBTD_ACTION_ANCHOR_WAIT);
}
}
static void aBTD_anchor(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
if (aBTD_check_sendo_and_boat(boat_demo) == FALSE) {
Actor_delete((ACTOR*)boat_demo);
}
}
typedef void (*aBTD_INIT_PROC)(BOAT_DEMO_ACTOR*, GAME_PLAY*);
static void aBTD_start_call_end_wait_init(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
mBGMPsComp_make_ps_quietField(0x168);
}
static void aBTD_song_bgm_start_wait_init(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
boat_demo->song_bgm_timer = 0;
}
static void aBTD_sing_sendo_start_wait_init(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
static int player_pattern_table[2][2] = {
{ 0, 1 },
{ 2, 3 }
};
static u8 sing_1st_part_bgm_no[4][5] = {
{ 0x5C, 0x5D, 0x5E, 0x5F, 0x60 },
{ 0x66, 0x67, 0x68, 0x69, 0x6A },
{ 0x61, 0x62, 0x63, 0x64, 0x65 },
{ 0x6B, 0x6C, 0x6D, 0x6E, 0x6F }
};
static int sing_1st_part_msg_base_no[4] = {
0x3091,
0x3163,
0x3096,
0x3168
};
int at_island = boat_demo->at_island;
int gender = Common_Get(now_private)->gender;
int kappn_song;
int player_pattern;
do {
kappn_song = RANDOM(5);
if (!at_island) {
if (kappn_song != Save_Get(island).last_song_to_island) {
Save_Get(island).last_song_to_island = kappn_song;
break;
}
}
else {
if (kappn_song != Save_Get(island).last_song_from_island) {
Save_Get(island).last_song_from_island = kappn_song;
break;
}
}
} while (TRUE);
player_pattern = player_pattern_table[at_island][gender];
boat_demo->player_pattern = player_pattern;
mBGMPsComp_make_ps_lost_fanfare(sing_1st_part_bgm_no[player_pattern][kappn_song], 0x168);
boat_demo->sing_msg_no = sing_1st_part_msg_base_no[player_pattern] + kappn_song;
boat_demo->sing_dialog_ofs = RANDOM(10);
boat_demo->sing_2nd_part = RANDOM(10);
boat_demo->song_bgm_timer = 930;
}
static void aBTD_sendo_dialogue_start_wait_init(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
static int sing_dialogue_msg_base_no[4] = {
0x309B,
0x316D,
0x30A5,
0x3177
};
int msg_no = sing_dialogue_msg_base_no[boat_demo->player_pattern] + boat_demo->sing_dialog_ofs;
mMsg_Set_continue_msg_num(mMsg_Get_base_window_p(), msg_no);
boat_demo->sing_msg_no = msg_no;
mMsg_sound_set_voice_silent(mMsg_Get_base_window_p(), TRUE);
aBTD_change_season(boat_demo, play);
}
static void aBTD_sing_sendo_start_wait2_init(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
static u8 sing_2nd_part_bgm_no[10] = {
0x70, 0x71, 0x72, 0x73, 0x74,
0x75, 0x76, 0x77, 0x78, 0x79
};
static int sing_2nd_part_msg_base_no[4] = {
0x30AF,
0x3181,
0x30AF,
0x3181
};
int song_no;
int msg_no;
mMsg_sound_unset_voice_silent(mMsg_Get_base_window_p(), TRUE);
song_no = sing_2nd_part_bgm_no[boat_demo->sing_2nd_part];
mBGMPsComp_make_ps_demo(song_no, 0x168);
boat_demo->sing_2nd_part_bgm_no = song_no;
msg_no = sing_2nd_part_msg_base_no[boat_demo->player_pattern] + boat_demo->sing_2nd_part;
mMsg_Set_continue_msg_num(mMsg_Get_base_window_p(), msg_no);
boat_demo->sing_msg_no = msg_no;
}
static void aBTD_move_boat_end_wait_init(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
mMsg_sound_set_voice_silent(mMsg_Get_base_window_p(), TRUE);
}
static void aBTD_touch_wharf_end_wait_init(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
boat_demo->touching_wharf = FALSE;
boat_demo->touch_wharf_timer = 190;
}
static void aBTD_pl_ride_off_start_wait_init(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
mBGMPsComp_delete_ps_demo(boat_demo->sing_2nd_part_bgm_no, 0x168);
}
static void aBTD_anchor_init(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play) {
mBGMPsComp_delete_ps_quietField();
if (boat_demo->castaway_actor != NULL) {
Actor_delete((ACTOR*)boat_demo->castaway_actor);
}
}
static void aBTD_init_proc(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play, int action) {
static aBTD_INIT_PROC init_proc[aBTD_ACTION_NUM] = {
(aBTD_INIT_PROC)&none_proc1,
(aBTD_INIT_PROC)&none_proc1,
(aBTD_INIT_PROC)&none_proc1,
&aBTD_start_call_end_wait_init,
&aBTD_song_bgm_start_wait_init,
&aBTD_sing_sendo_start_wait_init,
(aBTD_INIT_PROC)&none_proc1,
&aBTD_sendo_dialogue_start_wait_init,
&aBTD_sing_sendo_start_wait2_init,
&aBTD_move_boat_end_wait_init,
&aBTD_touch_wharf_end_wait_init,
&aBTD_pl_ride_off_start_wait_init,
(aBTD_INIT_PROC)&none_proc1,
&aBTD_anchor_init
};
(*init_proc[action])(boat_demo, play);
}
static void aBTD_setupAction(BOAT_DEMO_ACTOR* boat_demo, GAME_PLAY* play, int action) {
static aBTD_PROC process[aBTD_ACTION_NUM] = {
&aBTD_sendo_birth_wait,
&aBTD_pl_ride_on_start_wait,
&aBTD_pl_ride_on_end_wait,
&aBTD_start_call_end_wait,
&aBTD_song_bgm_start_wait,
&aBTD_sing_sendo_start_wait,
&aBTD_sing_sendo_msg_set_wait,
&aBTD_sendo_dialogue_start_wait,
&aBTD_sing_sendo_start_wait2,
&aBTD_move_boat_end_wait,
&aBTD_touch_wharf_end_wait,
&aBTD_pl_ride_off_start_wait,
&aBTD_pl_ride_off_end_wait,
&aBTD_anchor
};
boat_demo->action_proc = process[action];
boat_demo->action = action;
aBTD_init_proc(boat_demo, play, action);
}
static void aBTD_actor_move(ACTOR* actorx, GAME* game) {
BOAT_DEMO_ACTOR* boat_demo = (BOAT_DEMO_ACTOR*)actorx;
GAME_PLAY* play = (GAME_PLAY*)game;
BOAT_ACTOR* boat_actor = boat_demo->boat_actor;
if (boat_actor != NULL) {
actorx->shape_info.rotation.x = boat_actor->actor_class.shape_info.rotation.x;
actorx->shape_info.rotation.y = boat_actor->actor_class.shape_info.rotation.y;
boat_demo->boat_speed = boat_actor->actor_class.speed;
}
aBTD_setup_castaway(boat_demo, play);
(*boat_demo->action_proc)(boat_demo, play);
}
+1 -1
View File
@@ -46,7 +46,7 @@ static void aECST_actor_ct(ACTOR* actorx, GAME* game) {
castaway->npc_class.condition_info.demo_flg = ~aNPC_COND_DEMO_SKIP_MOVE_Y; // is this a mistake?
castaway->npc_class.condition_info.hide_request = FALSE;
castaway->npc_class.palActorIgnoreTimer = -1;
aNPC_SPNPC_BIT_SET(Common_Get(spnpc_first_talk_flags), aNPC_SPNPC_BIT_CASTAWAY);
aNPC_SPNPC_BIT_SET(Common_Get(spnpc_first_talk_flags), aNPC_SPNPC_BIT_DOZAEMON);
actorx->status_data.weight = 254;
actorx->gravity = 0.0f;
actorx->max_velocity_y = 0.0f;
+2 -2
View File
@@ -102,11 +102,11 @@ static void aWeather_RequestChangeWeather(ACTOR* actor, s16 status, s16 level){
}
}
void aWeather_RequestChangeWeatherToIsland(){
extern void aWeather_RequestChangeWeatherToIsland(){
aWeather_RequestChangeWeather(&Common_Get(clip.weather_clip)->actor->actor_class,Common_Get(island_weather),Common_Get(island_weather_intensity));
}
void aWeather_RequestChangeWeatherFromIsland(){
extern void aWeather_RequestChangeWeatherFromIsland(){
aWeather_RequestChangeWeather(&Common_Get(clip.weather_clip)->actor->actor_class, mEnv_SAVE_GET_WEATHER_TYPE(Save_Get(weather)) , mEnv_SAVE_GET_WEATHER_INTENSITY(Save_Get(weather)));
}
+4 -4
View File
@@ -773,8 +773,8 @@ extern void mISL_gc_to_agb(Island_agb_c* agb, Island_c* gc) {
zelda_free(temp);
}
agb->last_song_male = gc->last_song_male;
agb->last_song_female = gc->last_song_female;
agb->last_song_to_island = gc->last_song_to_island;
agb->last_song_from_island = gc->last_song_from_island;
// remove the land info portion from the checksum as it can change
agb->checksum = mISL_GetFlatCheckSum((u8*)agb, sizeof(Island_agb_c), agb->checksum, mISL_ReturnCheckSum((u8*)&agb->landinfo, 16));
}
@@ -820,8 +820,8 @@ extern void mISL_agb_to_gc(Island_c* gc, Island_agb_c* agb) {
mISL_short((u16*)gc->deposit, (u16*)agb->deposit, sizeof(gc->deposit) / sizeof(u16));
bcopy(agb->bg_data, gc->bg_data, sizeof(gc->bg_data));
mISL_gc_to_agb_time(&gc->renew_time, &agb->renew_time);
gc->last_song_male = agb->last_song_male;
gc->last_song_female = agb->last_song_female;
gc->last_song_to_island = agb->last_song_to_island;
gc->last_song_from_island = agb->last_song_from_island;
if (mFI_CheckFieldData() == TRUE) {
bzero(island_x_blocks, sizeof(island_x_blocks));
+2 -2
View File
@@ -248,8 +248,8 @@ static int mSDI_StartInitNew(GAME* game, int player_no, int malloc_flag) {
lbRTC_TimeCopy(Save_GetPointer(saved_auto_nwrite_time), &mTM_rtcTime_clear_code);
Save_Set(station_type, RANDOM(15));
Save_Set(island.last_song_male, -1);
Save_Set(island.last_song_female, -1);
Save_Set(island.last_song_to_island, -1);
Save_Set(island.last_song_from_island, -1);
mPr_SetPossessionItem(Common_Get(now_private), 0, ITM_MONEY_1000, mPr_ITEM_COND_QUEST);