Implement & link ac_ev_ghost

This commit is contained in:
Cuyler36
2024-01-17 13:18:25 -05:00
parent 86b574689b
commit b2f666c58e
17 changed files with 1949 additions and 28 deletions
+299
View File
@@ -2,6 +2,305 @@
#include "m_event.h"
#include "m_common_data.h"
#include "m_msg.h"
#include "m_string.h"
#include "libultra/libultra.h"
#include "m_player_lib.h"
#include "m_item_name.h"
#include "m_house.h"
enum {
aEGH_TALK_END_WAIT,
aEGH_TALK_GIVE_ME_WAIT,
aEGH_TALK_SELECT_WAIT,
aEGH_TALK_SELECT_ROOF,
aEGH_TALK_GIVE_YOU_WAIT,
aEGH_TALK_CLEAR_GRASS,
aEGH_TALK_NUM
};
enum {
aEGH_THINK_NORMAL_WAIT,
aEGH_THINK_IRAI,
aEGH_THINK_IRAI_AF,
aEGH_THINK_BYE,
aEGH_THINK_WELCOM,
aEGH_THINK_BYEBYE,
aEGH_THINK_SPEAK, // ?
aEGH_THINK_NUM
};
enum {
aEGH_THINK_INIT_NONE,
aEGH_THINK_INIT_NORMAL_WAIT,
aEGH_THINK_INIT_IRAI,
aEGH_THINK_INIT_IRAI_AF,
aEGH_THINK_INIT_BYE,
aEGH_THINK_INIT_WELCOM,
aEGH_THINK_INIT_BYEBYE,
aEGH_THINK_INIT_NUM
};
enum {
aEGH_THINK_PROC_NONE,
aEGH_THINK_PROC_IRAI,
aEGH_THINK_PROC_BYE,
aEGH_THINK_PROC_BYEBYE,
aEGH_THINK_PROC_SPEAK_BYEBYE,
aEGH_THINK_PROC_NUM
};
enum {
aEGH_TALK_REQUEST_NONE,
aEGH_TALK_REQUEST_NORM,
aEGH_TALK_REQUEST_FORCE,
aEGH_TALK_REQUEST_NUM
};
typedef struct ghost_think_setup_s {
u8 think_proc;
u8 think_init_proc;
u8 talk_request_proc;
u8 talk_act;
u8 talk_after_act;
} aEGH_setup_c;
static void aEGH_actor_ct(ACTOR*, GAME*);
static void aEGH_actor_dt(ACTOR*, GAME*);
static void aEGH_actor_move(ACTOR*, GAME*);
static void aEGH_actor_draw(ACTOR*, GAME*);
static void aEGH_actor_init(ACTOR*, GAME*);
static void aEGH_actor_save(ACTOR*, GAME*);
ACTOR_PROFILE Ev_Ghost_Profile = {
mAc_PROFILE_EV_GHOST,
ACTOR_PART_NPC,
ACTOR_STATE_NONE,
SP_NPC_EV_GHOST,
ACTOR_OBJ_BANK_KEEP,
sizeof(EV_GHOST_ACTOR),
&aEGH_actor_ct,
&aEGH_actor_dt,
&aEGH_actor_init,
mActor_NONE_PROC1,
&aEGH_actor_save
};
static int aEGH_talk_init(ACTOR*, GAME*);
static int aEGH_talk_end_chk(ACTOR*, GAME*);
static int aEGH_change_talk_proc(EV_GHOST_ACTOR* ghost, u8 talk_act);
static void aEGH_setup_think_proc(EV_GHOST_ACTOR* ghost, GAME_PLAY* play, u8 think_act);
static void aEGH_schedule_proc(NPC_ACTOR* actorx, GAME_PLAY* play, int sched_type);
static int aEGH_bitset_func(u16 bit);
static int aEGH_bitclr_func(u16 bit);
static u16 aEGH_bitcheck_func(u16 bit);
static void aEGH_byebye_check(EV_GHOST_ACTOR* ghost, GAME_PLAY* play);
static void aEGH_actor_ct(ACTOR* actorx, GAME* game) {
static aNPC_ct_data_c ct_data = {
&aEGH_actor_move,
&aEGH_actor_draw,
5,
(aNPC_TALK_REQUEST_PROC)&none_proc1,
&aEGH_talk_init,
&aEGH_talk_end_chk,
0
};
mEv_gst_c* ghost_save = (mEv_gst_c*)mEv_get_save_area(mEv_EVENT_GHOST, 54);
EV_GHOST_ACTOR* ghost = (EV_GHOST_ACTOR*)actorx;
lbRTC_time_c* rtc_time = Common_GetPointer(time.rtc_time);
if ((*Common_Get(clip).npc_clip->birth_check_proc)(actorx, game) == TRUE) {
ghost->npc_class.schedule.schedule_proc = &aEGH_schedule_proc;
(*Common_Get(clip).npc_clip->ct_proc)(actorx, game, &ct_data);
ghost->npc_class.palActorIgnoreTimer = -1;
ghost->_9A7 = 0;
ghost->melody_inst = 0;
ghost->npc_class.talk_info.melody_inst = 0;
if (ghost_save == NULL) {
mEv_reserve_save_area(mEv_EVENT_GHOST, 54);
ghost_save = (mEv_gst_c*)mEv_get_save_area(mEv_EVENT_GHOST, 54);
if (ghost_save != NULL) {
ghost_save->flags = 0;
ghost_save->okoruhito_str_no = RANDOM_F(32.0f);
mTM_set_renew_time(&ghost_save->renew_time, rtc_time);
}
}
else {
if (
rtc_time->year != ghost_save->renew_time.year ||
rtc_time->month != ghost_save->renew_time.month ||
rtc_time->day != ghost_save->renew_time.day
) {
ghost_save->flags = 0;
ghost_save->okoruhito_str_no = RANDOM_F(32.0f);
mTM_set_renew_time(&ghost_save->renew_time, rtc_time);
}
if ((ghost_save->flags & mEv_GHOST_FLAG_HITODAMA_EXIST) != 0) {
Actor_delete(actorx);
}
}
if (Common_Get(player_no) == mPr_FOREIGNER) {
Actor_delete(actorx);
}
ghost->_9AA = 0;
ghost->npc_class.talk_info.default_animation = 126;
ghost->_9AC = 0;
if (aEGH_bitcheck_func(aEGH_BIT_FOUND_GHOST) != FALSE) {
ghost->alpha = 140;
}
else {
if (mFI_GetItemNumField_BCT(GRASS_A, GRASS_C) < aEGH_MINIMUM_GRASS_COUNT) {
Actor_delete(actorx);
}
ghost->alpha = 0;
}
}
}
static void aEGH_actor_save(ACTOR* actorx, GAME* game) {
mNpc_RenewalSetNpc(actorx);
}
static void aEGH_actor_dt(ACTOR* actorx, GAME* game) {
mEv_actor_dying_message(mEv_EVENT_GHOST, actorx);
(*Common_Get(clip).npc_clip->dt_proc)(actorx, game);
}
static void aEGH_actor_init(ACTOR* actorx, GAME* game) {
(*Common_Get(clip).npc_clip->init_proc)(actorx, game);
}
static int aEGH_set_request_act(EV_GHOST_ACTOR* ghost, u8 priority, u8 idx, u8 type, u16 arg0, u16 arg1, u16 arg2) {
int res = FALSE;
if (priority >= ghost->npc_class.request.act_priority) {
u16 args[6];
bzero(args, sizeof(args));
args[0] = arg0;
args[2] = arg1;
args[3] = arg2;
ghost->npc_class.request.act_priority = priority;
ghost->npc_class.request.act_idx = idx;
ghost->npc_class.request.act_type = type;
mem_copy((u8*)ghost->npc_class.request.act_args, (u8*)args, sizeof(args));
res = TRUE;
}
return res;
}
static void aEGH_actor_move(ACTOR* actorx, GAME* game) {
EV_GHOST_ACTOR* ghost = (EV_GHOST_ACTOR*)actorx;
GAME_PLAY* play = (GAME_PLAY*)game;
int step;
int alpha;
int target_alpha;
int delta_alpha;
if (aEGH_bitcheck_func(aEGH_BIT_FOUND_GHOST) != FALSE) {
actorx->actor_specific = 1;
}
else {
actorx->actor_specific = 0;
}
(*Common_Get(clip).npc_clip->move_proc)(actorx, game);
aEGH_byebye_check(ghost, play);
if (ghost->npc_class.schedule.type == aNPC_SCHEDULE_TYPE_WALK_WANDER && ghost->think_act != aEGH_THINK_SPEAK) {
ghost->_9AC = 1;
(*Common_Get(clip).npc_clip->chg_schedule_proc)((NPC_ACTOR*)ghost, play, aNPC_SCHEDULE_TYPE_SPECIAL);
actorx->status_data.weight = 255;
}
alpha = ghost->alpha;
if (aEGH_bitcheck_func(aEGH_BIT_FOUND_GHOST) != FALSE) {
step = 1;
if (mDemo_Get_talk_actor() == actorx) {
ghost->npc_class.draw._5BE = 0;
ghost->npc_class.draw.animation_speed = 0.5f;
target_alpha = 190;
}
else {
if (actorx->speed > 0.1f) {
target_alpha = 80;
}
else {
target_alpha = 140;
}
if (alpha <= 140) {
step = 1;
}
ghost->npc_class.draw._5BE = 1;
ghost->npc_class.draw.animation_speed = 0.25f;
}
delta_alpha = alpha - target_alpha;
if (ABS(delta_alpha) < step) {
alpha = target_alpha;
}
else {
if (delta_alpha < 0) {
alpha += step;
}
else {
alpha -= step;
}
}
}
else if (ghost->bye_bye_transparency_delay_timer != 0) {
ghost->bye_bye_transparency_delay_timer--;
}
else {
alpha -= 4;
if (alpha < 0) {
alpha = 0;
}
}
ghost->alpha = alpha;
actorx->shape_info.draw_shadow = FALSE;
}
static void aEGH_actor_draw(ACTOR* actorx, GAME* game) {
EV_GHOST_ACTOR* ghost = (EV_GHOST_ACTOR*)actorx;
GRAPH* graph = game->graph;
Gfx* gfx;
OPEN_DISP(graph);
gfx = NOW_POLY_XLU_DISP;
gDPPipeSync(gfx++);
gDPSetEnvColor(gfx++, 255, 255, 255, ghost->alpha);
SET_POLY_XLU_DISP(gfx);
CLOSE_DISP(graph);
(*Common_Get(clip).npc_clip->draw_proc)(actorx, game);
}
#include "../src/ac_ev_ghost_talk.c_inc"
#include "../src/ac_ev_ghost_schedule.c_inc"
+376
View File
@@ -0,0 +1,376 @@
static void aEGH_look_player(EV_GHOST_ACTOR* ghost, GAME_PLAY* play) {
if (ghost->npc_class.action.step == aNPC_ACTION_END_STEP) {
u8 action = 4;
s16 player_y = ghost->npc_class.actor_class.player_angle_y;
s16 rot_y = ghost->npc_class.actor_class.shape_info.rotation.y;
s16 diff = player_y - rot_y;
if (ABS(diff) < DEG2SHORT_ANGLE(67.5f)) {
action = 0;
}
aEGH_set_request_act(ghost, 4, action, 2, 1, 0, 0);
}
}
static int aEGH_bitset_func(u16 bit) {
u32 player_no = Common_Get(player_no);
mEv_gst_c* ghost_save = (mEv_gst_c*)mEv_get_save_area(mEv_EVENT_GHOST, 54);
mEv_gst_common_c* ghost_common = (mEv_gst_common_c*)mEv_get_common_area(mEv_EVENT_GHOST, 55);
if (player_no == mPr_FOREIGNER) {
if (ghost_common != NULL) {
ghost_common->flags |= bit;
return TRUE;
}
}
else if (ghost_save != NULL) {
ghost_save->flags |= (u16)(bit << player_no);
return TRUE;
}
return FALSE;
}
static int aEGH_bitclr_func(u16 bit) {
u32 player_no = Common_Get(player_no);
mEv_gst_c* ghost_save = (mEv_gst_c*)mEv_get_save_area(mEv_EVENT_GHOST, 54);
mEv_gst_common_c* ghost_common = (mEv_gst_common_c*)mEv_get_common_area(mEv_EVENT_GHOST, 55);
if (player_no == mPr_FOREIGNER) {
if (ghost_common != NULL) {
ghost_common->flags &= ~bit;
return TRUE;
}
}
else if (ghost_save != NULL) {
ghost_save->flags &= ~(u16)(bit << player_no);
return TRUE;
}
return FALSE;
}
static u16 aEGH_bitcheck_func(u16 bit) {
u32 player_no = Common_Get(player_no);
mEv_gst_c* ghost_save = (mEv_gst_c*)mEv_get_save_area(mEv_EVENT_GHOST, 54);
mEv_gst_common_c* ghost_common = (mEv_gst_common_c*)mEv_get_common_area(mEv_EVENT_GHOST, 55);
if (player_no == mPr_FOREIGNER) {
if (ghost_common != NULL) {
return ghost_common->flags & bit;
}
}
else if (ghost_save != NULL) {
return (u16)(bit << player_no) & ghost_save->flags;
}
return FALSE;
}
static int aEGH_equal_block(EV_GHOST_ACTOR* ghost, GAME_PLAY* play) {
int bx;
int bz;
mFI_Wpos2BlockNum(&bx, &bz, GET_PLAYER_ACTOR(play)->actor_class.world.position);
return bx == ghost->npc_class.actor_class.block_x && bz == ghost->npc_class.actor_class.block_z;
}
static int aEGH_time_over() {
return Common_Get(time.now_sec) > (4 * mTM_SECONDS_IN_HOUR);
}
static void aEGH_byebye_check(EV_GHOST_ACTOR* ghost, GAME_PLAY* play) {
ACTOR* actorx = (ACTOR*)ghost;
if (
mDemo_Check(mDemo_TYPE_TALK, actorx) == FALSE &&
mDemo_Check(mDemo_TYPE_SPEAK, actorx) == FALSE &&
aEGH_time_over() != FALSE
) {
if (aEGH_equal_block(ghost, play)) {
switch (ghost->think_act) {
case aEGH_THINK_SPEAK:
{
aEGH_setup_think_proc(ghost, play, aEGH_THINK_BYEBYE);
ghost->msg_no = 0x2EDD;
ghost->npc_class.actor_class.talk_distance = 1000.0f;
ghost->_9AA = 1;
break;
}
case aEGH_THINK_NORMAL_WAIT:
case aEGH_THINK_IRAI_AF:
case aEGH_THINK_BYE:
case aEGH_THINK_WELCOM:
{
Actor_delete((ACTOR*)ghost);
break;
}
}
}
else {
aEGH_setup_think_proc(ghost, play, aEGH_THINK_IRAI);
}
}
}
static void aEGH_irai(EV_GHOST_ACTOR* ghost, GAME_PLAY* play) {
if (ghost->npc_class.actor_class.player_distance_xz > 220.0f) {
aEGH_setup_think_proc(ghost, play, aEGH_THINK_BYE);
}
}
static void aEGH_bye(EV_GHOST_ACTOR* ghost, GAME_PLAY* play) {
if (ghost->npc_class.actor_class.player_distance_xz < 200.0f) {
aEGH_setup_think_proc(ghost, play, aEGH_THINK_WELCOM);
}
}
static void aEGH_byebye(EV_GHOST_ACTOR* ghost, GAME_PLAY* play) {
if (ghost->alpha == 0) {
Actor_delete((ACTOR*)ghost);
}
else {
if (ghost->bye_bye_timer != 0) {
ghost->bye_bye_timer--;
if (ghost->bye_bye_timer == 0) {
sAdo_SysTrgStart(0x16C);
}
}
else {
if (ghost->bye_bye_angle < 30000) {
ghost->bye_bye_angle += 60;
}
ghost->npc_class.actor_class.shape_info.rotation.y += ghost->bye_bye_angle;
ghost->npc_class.actor_class.world.angle.y = ghost->npc_class.actor_class.shape_info.rotation.y;
ghost->npc_class.movement.mv_angl = ghost->npc_class.actor_class.world.angle.y;
ghost->npc_class.movement.mv_add_angl = 0;
}
if (ghost->bye_bye_scale_timer != 0) {
ghost->bye_bye_scale_timer--;
}
else {
ghost->npc_class.actor_class.scale.x += -0.00004f;
ghost->npc_class.actor_class.scale.z = ghost->npc_class.actor_class.scale.x;
}
}
}
static void aEGH_speak_byebye(EV_GHOST_ACTOR* ghost, GAME_PLAY* play) {
ACTOR* actorx = (ACTOR*)ghost;
if (
mDemo_Check(mDemo_TYPE_TALK, actorx) == FALSE &&
mDemo_Check(mDemo_TYPE_SPEAK, actorx) == FALSE &&
aEGH_equal_block(ghost, play) == FALSE
) {
aEGH_setup_think_proc(ghost, play, aEGH_THINK_IRAI);
}
}
static void aEGH_think_main_proc(NPC_ACTOR* actorx, GAME_PLAY* play) {
EV_GHOST_ACTOR* ghost = (EV_GHOST_ACTOR*)actorx;
(*ghost->think_proc)(ghost, play);
aEGH_look_player(ghost, play);
}
static void aEGH_think_init_proc(NPC_ACTOR* actorx, GAME_PLAY* play) {
EV_GHOST_ACTOR* ghost = (EV_GHOST_ACTOR*)actorx;
u8 think_act;
if (ghost->_9AC) {
ghost->_9AC = FALSE;
}
else {
if (aEGH_bitcheck_func(aEGH_BIT_FOUND_GHOST)) {
ghost->alpha = 140;
think_act = aEGH_THINK_SPEAK;
}
else {
ghost->alpha = 0;
think_act = aEGH_THINK_IRAI_AF;
}
actorx->actor_class.status_data.weight = 255;
actorx->condition_info.hide_request = FALSE;
aEGH_setup_think_proc(ghost, play, think_act);
actorx->condition_info.demo_flg = aNPC_COND_DEMO_SKIP_FOOTSTEPS_VFX |
aNPC_COND_DEMO_SKIP_FEEL_CHECK |
aNPC_COND_DEMO_SKIP_FOOTSTEPS |
aNPC_COND_DEMO_SKIP_ENTRANCE_CHECK |
aNPC_COND_DEMO_SKIP_HEAD_LOOKAT;
}
}
static void aEGH_normal_wait_init(EV_GHOST_ACTOR* ghost, GAME_PLAY* play) {
(*Common_Get(clip).npc_clip->animation_init_proc)((ACTOR*)ghost, 126, FALSE);
ghost->npc_class.draw.main_animation.keyframe.frame_control.mode = cKF_FRAMECONTROL_REPEAT;
ghost->npc_class.action.idx = 0;
aEGH_set_request_act(ghost, 4, 0, 0, 0, 0, 0);
}
static void aEGH_irai_init(EV_GHOST_ACTOR* ghost, GAME_PLAY* play) {
ghost->npc_class.actor_class.talk_distance = 80.0f;
aEGH_normal_wait_init(ghost, play);
ghost->msg_no = 0x2EE2;
}
static void aEGH_irai_af_init(EV_GHOST_ACTOR* ghost, GAME_PLAY* play) {
ghost->npc_class.actor_class.talk_distance = 55.0f;
ghost->msg_no = 0x2EE7;
(*Common_Get(clip).npc_clip->chg_schedule_proc)((NPC_ACTOR*)ghost, play, 5);
ghost->npc_class.actor_class.status_data.weight = 80;
}
static void aEGH_bye_init(EV_GHOST_ACTOR* ghost, GAME_PLAY* play) {
ghost->npc_class.actor_class.talk_distance = 280.0f;
aEGH_normal_wait_init(ghost, play);
ghost->msg_no = 0x2ED8;
}
static void aEGH_welcom_init(EV_GHOST_ACTOR* ghost, GAME_PLAY* play) {
ghost->npc_class.actor_class.talk_distance = 200.0f;
aEGH_normal_wait_init(ghost, play);
ghost->msg_no = 0x2ED3;
}
static void aEGH_byebye_init(EV_GHOST_ACTOR* ghost, GAME_PLAY* play) {
aEGH_bitclr_func(aEGH_BIT_FOUND_GHOST);
ghost->bye_bye_angle = -1000;
ghost->bye_bye_timer = 25;
ghost->bye_bye_scale_timer = 48;
ghost->bye_bye_transparency_delay_timer = 43;
aEGH_normal_wait_init(ghost, play);
ghost->npc_class.head.lock_flag = TRUE;
}
static aEGH_setup_c dt_tbl[aEGH_THINK_NUM] = {
{
aEGH_THINK_PROC_BYE,
aEGH_THINK_INIT_NORMAL_WAIT,
aEGH_TALK_REQUEST_NONE,
aEGH_TALK_END_WAIT,
aEGH_THINK_NORMAL_WAIT
},
{
aEGH_THINK_PROC_BYEBYE,
aEGH_THINK_INIT_BYEBYE,
aEGH_TALK_REQUEST_NONE,
aEGH_TALK_END_WAIT,
aEGH_THINK_IRAI
},
{
aEGH_THINK_PROC_NONE,
aEGH_THINK_INIT_WELCOM,
aEGH_TALK_REQUEST_FORCE,
aEGH_TALK_END_WAIT,
aEGH_THINK_WELCOM
},
{
aEGH_THINK_PROC_BYE,
aEGH_THINK_INIT_BYE,
aEGH_TALK_REQUEST_FORCE,
aEGH_TALK_GIVE_ME_WAIT,
aEGH_THINK_NORMAL_WAIT
},
{
aEGH_THINK_PROC_IRAI,
aEGH_THINK_INIT_IRAI,
aEGH_TALK_REQUEST_FORCE,
aEGH_TALK_SELECT_WAIT,
aEGH_THINK_SPEAK
},
{
aEGH_THINK_PROC_SPEAK_BYEBYE,
aEGH_THINK_INIT_NORMAL_WAIT,
aEGH_TALK_REQUEST_FORCE,
aEGH_TALK_SELECT_ROOF,
aEGH_THINK_IRAI
},
{
aEGH_THINK_PROC_NONE,
aEGH_THINK_INIT_IRAI_AF,
aEGH_TALK_REQUEST_NORM,
aEGH_TALK_END_WAIT,
aEGH_THINK_SPEAK
}
};
static aEGH_PROC proc_table[aEGH_THINK_PROC_NUM] = {
(aEGH_PROC)&none_proc1,
&aEGH_irai,
&aEGH_bye,
&aEGH_byebye,
&aEGH_speak_byebye
};
static aEGH_PROC init_table[aEGH_THINK_INIT_NUM] = {
(aEGH_PROC)&none_proc1,
&aEGH_normal_wait_init,
&aEGH_irai_init,
&aEGH_irai_af_init,
&aEGH_bye_init,
&aEGH_welcom_init,
&aEGH_byebye_init
};
static void aEGH_setup_think_proc(EV_GHOST_ACTOR* ghost, GAME_PLAY* play, u8 think_act) {
static aNPC_TALK_REQUEST_PROC talk_request_table[aEGH_TALK_REQUEST_NUM] = {
(aNPC_TALK_REQUEST_PROC)&none_proc1,
&aEGH_norm_talk_request,
&aEGH_force_talk_request
};
aEGH_setup_c* data = &dt_tbl[think_act];
ghost->think_act = think_act;
ghost->think_proc = proc_table[data->think_proc];
ghost->npc_class.talk_info.talk_request_proc = talk_request_table[data->talk_request_proc];
ghost->talk_act = data->talk_act;
ghost->after_talk_think_act = data->talk_after_act;
(*init_table[data->think_init_proc])(ghost, play);
ghost->_9A7 = TRUE;
}
static void aEGH_think_proc(NPC_ACTOR* actorx, GAME_PLAY* play, int think_type) {
switch (think_type) {
case 0:
aEGH_think_init_proc(actorx, play);
break;
case 1:
aEGH_think_main_proc(actorx, play);
break;
}
}
static void aEGH_schedule_init_proc(NPC_ACTOR* actorx, GAME_PLAY* play) {
actorx->think.think_proc = &aEGH_think_proc;
(*Common_Get(clip).npc_clip->think_proc)(actorx, play, aNPC_THINK_SPECIAL, 0);
}
static void aEGH_schedule_main_proc(NPC_ACTOR* actorx, GAME_PLAY* play) {
if ((*Common_Get(clip).npc_clip->think_proc)(actorx, play, -1, 1) == FALSE) {
(*Common_Get(clip).npc_clip->think_proc)(actorx, play, -1, 2);
}
}
static void aEGH_schedule_proc(NPC_ACTOR* actorx, GAME_PLAY* play, int sched_type) {
switch (sched_type) {
case 0:
aEGH_schedule_init_proc(actorx, play);
break;
case 1:
aEGH_schedule_main_proc(actorx, play);
break;
}
}
+625
View File
@@ -0,0 +1,625 @@
static int aEGH_hitodama_num() {
int i;
int num;
Private_c* priv = Common_Get(now_private);
for (i = 0, num = 0; i < mEv_GHOST_HITODAMA_NUM; i++) {
int n = mPr_GetPossessionItemSumWithCond(priv, ITM_SPIRIT0 + i, mPr_ITEM_COND_NORMAL);
num += n * (i + 1);
}
return num;
}
static void aEGH_okoruhito() {
static u8 pf_string[mMsg_FREE_STRING_LEN];
mEv_gst_c* ghost_ev = (mEv_gst_c*)mEv_get_save_area(mEv_EVENT_GHOST, 54);
mString_Load_StringFromRom(pf_string, sizeof(pf_string), 0x62E + ghost_ev->okoruhito_str_no);
mMsg_Set_item_str(mMsg_Get_base_window_p(), mMsg_FREE_STR1, pf_string, sizeof(pf_string));
}
static void aEGH_delete_hitodama() {
int i;
int num;
Private_c* priv = Common_Get(now_private);
for (i = 0, num = 0; i < mEv_GHOST_HITODAMA_NUM; i++) {
int idx = mPr_GetPossessionItemIdxWithCond(priv, ITM_SPIRIT0 + i, mPr_ITEM_COND_NORMAL);
while (idx != -1) {
mPr_SetPossessionItem(Common_Get(now_private), idx, EMPTY_NO, mPr_ITEM_COND_NORMAL);
idx = mPr_GetPossessionItemIdxWithCond(priv, ITM_SPIRIT0 + i, mPr_ITEM_COND_NORMAL);
}
}
}
static mActor_name_t aEGH_get_collect(int selected_idx, mActor_name_t* list) {
while (*list != EMPTY_NO) {
if (mSP_CollectCheck(*list) == FALSE) {
if (selected_idx > 0) {
selected_idx--;
}
else {
return *list;
}
}
list++;
}
return EMPTY_NO;
}
static void aEGH_check_collect_num(int* list_num, int* uncollect_num, mActor_name_t* list) {
*list_num = 0;
*uncollect_num = 0;
while (*list != EMPTY_NO) {
(*list_num)++;
if (mSP_CollectCheck(*list) == FALSE) {
(*uncollect_num)++;
}
list++;
}
}
extern mActor_name_t ftr_listA[];
extern mActor_name_t ftr_listB[];
extern mActor_name_t ftr_listC[];
extern mActor_name_t ftr_listEvent[];
extern mActor_name_t ftr_listLottery[];
extern mActor_name_t carpet_listA[];
extern mActor_name_t carpet_listB[];
extern mActor_name_t carpet_listC[];
extern mActor_name_t carpet_listEvent[];
extern mActor_name_t wall_listA[];
extern mActor_name_t wall_listB[];
extern mActor_name_t wall_listC[];
extern mActor_name_t wall_listEvent[];
extern mActor_name_t cloth_listA[];
extern mActor_name_t cloth_listB[];
extern mActor_name_t cloth_listC[];
extern mActor_name_t cloth_listEvent[];
extern mActor_name_t binsen_listA[];
extern mActor_name_t binsen_listB[];
extern mActor_name_t binsen_listC[];
static mActor_name_t list_haniwa[HANIWA_NUM + 1] = {
FTR_HANIWA000_SOUTH,
FTR_HANIWA001_SOUTH,
FTR_HANIWA002_SOUTH,
FTR_HANIWA003_SOUTH,
FTR_HANIWA004_SOUTH,
FTR_HANIWA005_SOUTH,
FTR_HANIWA006_SOUTH,
FTR_HANIWA007_SOUTH,
FTR_HANIWA008_SOUTH,
FTR_HANIWA009_SOUTH,
FTR_HANIWA010_SOUTH,
FTR_HANIWA011_SOUTH,
FTR_HANIWA012_SOUTH,
FTR_HANIWA013_SOUTH,
FTR_HANIWA014_SOUTH,
FTR_HANIWA015_SOUTH,
FTR_HANIWA016_SOUTH,
FTR_HANIWA017_SOUTH,
FTR_HANIWA018_SOUTH,
FTR_HANIWA019_SOUTH,
FTR_HANIWA020_SOUTH,
FTR_HANIWA021_SOUTH,
FTR_HANIWA022_SOUTH,
FTR_HANIWA023_SOUTH,
FTR_HANIWA024_SOUTH,
FTR_HANIWA025_SOUTH,
FTR_HANIWA026_SOUTH,
FTR_HANIWA027_SOUTH,
FTR_HANIWA028_SOUTH,
FTR_HANIWA029_SOUTH,
FTR_HANIWA030_SOUTH,
FTR_HANIWA031_SOUTH,
FTR_HANIWA032_SOUTH,
FTR_HANIWA033_SOUTH,
FTR_HANIWA034_SOUTH,
FTR_HANIWA035_SOUTH,
FTR_HANIWA036_SOUTH,
FTR_HANIWA037_SOUTH,
FTR_HANIWA038_SOUTH,
FTR_HANIWA039_SOUTH,
FTR_HANIWA040_SOUTH,
FTR_HANIWA041_SOUTH,
FTR_HANIWA042_SOUTH,
FTR_HANIWA043_SOUTH,
FTR_HANIWA044_SOUTH,
FTR_HANIWA045_SOUTH,
FTR_HANIWA046_SOUTH,
FTR_HANIWA047_SOUTH,
FTR_HANIWA048_SOUTH,
FTR_HANIWA049_SOUTH,
FTR_HANIWA050_SOUTH,
FTR_HANIWA051_SOUTH,
FTR_HANIWA052_SOUTH,
FTR_HANIWA053_SOUTH,
FTR_HANIWA054_SOUTH,
FTR_HANIWA055_SOUTH,
FTR_HANIWA056_SOUTH,
FTR_HANIWA057_SOUTH,
FTR_HANIWA058_SOUTH,
FTR_HANIWA059_SOUTH,
FTR_HANIWA060_SOUTH,
FTR_HANIWA061_SOUTH,
FTR_HANIWA062_SOUTH,
FTR_HANIWA063_SOUTH,
FTR_HANIWA064_SOUTH,
FTR_HANIWA065_SOUTH,
FTR_HANIWA066_SOUTH,
FTR_HANIWA067_SOUTH,
FTR_HANIWA068_SOUTH,
FTR_HANIWA069_SOUTH,
FTR_HANIWA070_SOUTH,
FTR_HANIWA071_SOUTH,
FTR_HANIWA072_SOUTH,
FTR_HANIWA073_SOUTH,
FTR_HANIWA074_SOUTH,
FTR_HANIWA075_SOUTH,
FTR_HANIWA076_SOUTH,
FTR_HANIWA077_SOUTH,
FTR_HANIWA078_SOUTH,
FTR_HANIWA079_SOUTH,
FTR_HANIWA080_SOUTH,
FTR_HANIWA081_SOUTH,
FTR_HANIWA082_SOUTH,
FTR_HANIWA083_SOUTH,
FTR_HANIWA084_SOUTH,
FTR_HANIWA085_SOUTH,
FTR_HANIWA086_SOUTH,
FTR_HANIWA087_SOUTH,
FTR_HANIWA088_SOUTH,
FTR_HANIWA089_SOUTH,
FTR_HANIWA090_SOUTH,
FTR_HANIWA091_SOUTH,
FTR_HANIWA092_SOUTH,
FTR_HANIWA093_SOUTH,
FTR_HANIWA094_SOUTH,
FTR_HANIWA095_SOUTH,
FTR_HANIWA096_SOUTH,
FTR_HANIWA097_SOUTH,
FTR_HANIWA098_SOUTH,
FTR_HANIWA099_SOUTH,
FTR_HANIWA100_SOUTH,
FTR_HANIWA101_SOUTH,
FTR_HANIWA102_SOUTH,
FTR_HANIWA103_SOUTH,
FTR_HANIWA104_SOUTH,
FTR_HANIWA105_SOUTH,
FTR_HANIWA106_SOUTH,
FTR_HANIWA107_SOUTH,
FTR_HANIWA108_SOUTH,
FTR_HANIWA109_SOUTH,
FTR_HANIWA110_SOUTH,
FTR_HANIWA111_SOUTH,
FTR_HANIWA112_SOUTH,
FTR_HANIWA113_SOUTH,
FTR_HANIWA114_SOUTH,
FTR_HANIWA115_SOUTH,
FTR_HANIWA116_SOUTH,
FTR_HANIWA117_SOUTH,
FTR_HANIWA118_SOUTH,
FTR_HANIWA119_SOUTH,
FTR_HANIWA120_SOUTH,
FTR_HANIWA121_SOUTH,
FTR_HANIWA122_SOUTH,
FTR_HANIWA123_SOUTH,
FTR_HANIWA124_SOUTH,
FTR_HANIWA125_SOUTH,
FTR_HANIWA126_SOUTH,
EMPTY_NO /* end of list */
};
static mActor_name_t umbrella_list[UMBRELLA_NUM + 1] = {
ITM_UMBRELLA00,
ITM_UMBRELLA01,
ITM_UMBRELLA02,
ITM_UMBRELLA03,
ITM_UMBRELLA04,
ITM_UMBRELLA05,
ITM_UMBRELLA06,
ITM_UMBRELLA07,
ITM_UMBRELLA08,
ITM_UMBRELLA09,
ITM_UMBRELLA10,
ITM_UMBRELLA11,
ITM_UMBRELLA12,
ITM_UMBRELLA13,
ITM_UMBRELLA14,
ITM_UMBRELLA15,
ITM_UMBRELLA16,
ITM_UMBRELLA17,
ITM_UMBRELLA18,
ITM_UMBRELLA19,
ITM_UMBRELLA20,
ITM_UMBRELLA21,
ITM_UMBRELLA22,
ITM_UMBRELLA23,
ITM_UMBRELLA24,
ITM_UMBRELLA25,
ITM_UMBRELLA26,
ITM_UMBRELLA27,
ITM_UMBRELLA28,
ITM_UMBRELLA29,
ITM_UMBRELLA30,
ITM_UMBRELLA31,
EMPTY_NO /* end of list */
};
static mActor_name_t aEGH_not_collect_get() {
static mActor_name_t* item_list[aEGH_ITEM_LIST_NUM] = {
ftr_listA,
ftr_listB,
ftr_listC,
ftr_listEvent,
ftr_listLottery,
carpet_listA,
carpet_listB,
carpet_listC,
carpet_listEvent,
wall_listA,
wall_listB,
wall_listC,
wall_listEvent,
cloth_listA,
cloth_listB,
cloth_listC,
cloth_listEvent,
binsen_listA,
binsen_listB,
binsen_listC,
list_haniwa,
umbrella_list
};
int list_num_tbl[aEGH_ITEM_LIST_NUM];
int uncollect_num_tbl[aEGH_ITEM_LIST_NUM];
int no_uncollected_flag = FALSE;
int selected_idx;
mActor_name_t item;
int i;
int total_count;
/* Calculate total items in each list and uncollected items in each list */
for (i = 0; i < aEGH_ITEM_LIST_NUM; i++) {
aEGH_check_collect_num(&list_num_tbl[i], &uncollect_num_tbl[i], item_list[i]);
}
for (i = 0, total_count = 0; i < aEGH_ITEM_LIST_NUM; i++) {
total_count += uncollect_num_tbl[i];
}
/* If no uncollected items remain, select one at random from all lists */
if (total_count == 0) {
no_uncollected_flag = TRUE; /* all items collected */
for (i = 0, total_count = 0; i < aEGH_ITEM_LIST_NUM; i++) {
total_count += list_num_tbl[i];
}
}
selected_idx = RANDOM(total_count);
if (no_uncollected_flag) {
/* Transform the absolute idx into the list idx by removing all entries up to the selected list */
for (i = 0; i < aEGH_ITEM_LIST_NUM && selected_idx >= list_num_tbl[i]; i++) {
selected_idx -= list_num_tbl[i];
}
if (i != aEGH_ITEM_LIST_NUM) {
item = item_list[i][selected_idx];
}
else {
item = ITM_FOOD_PEACH; /* If we somehow failed to select an item, we'll give them a peach */
}
}
else {
/* Transform the absolute idx into the list idx by removing all entries up to the selected list */
for (i = 0; i < aEGH_ITEM_LIST_NUM && selected_idx >= uncollect_num_tbl[i]; i++) {
selected_idx -= uncollect_num_tbl[i];
}
if (i != aEGH_ITEM_LIST_NUM) {
item = aEGH_get_collect(selected_idx, item_list[i]); /* Get the uncollected item from the list */
if (item == EMPTY_NO) {
item = ITM_FOOD_APPLE; /* If we somehow failed to get an uncollected item, we'll give them an apple */
}
}
else {
item = ITM_FOOD_PEACH; /* If we somehow failed to select an item, we'll give them a peach */
}
}
return mRmTp_FtrItemNo2Item1ItemNo(item, TRUE);
}
static void aEGH_give_me_wait(EV_GHOST_ACTOR* ghost, GAME_PLAY* play) {
int order = mDemo_Get_OrderValue(mDemo_ORDER_NPC0, 9);
switch (order) {
case 1:
{
mPlib_request_main_give_type1((GAME*)play, ITM_SPIRIT0, 7, FALSE, FALSE);
mDemo_Set_OrderValue(mDemo_ORDER_NPC0, 9, 2);
mMsg_Set_LockContinue(mMsg_Get_base_window_p());
mDemo_Set_OrderValue(mDemo_ORDER_NPC0, 1, 3);
aEGH_delete_hitodama();
break;
}
case 2:
{
if (Common_Get(clip).handOverItem_clip->master_actor == NULL) {
mMsg_Unset_LockContinue(mMsg_Get_base_window_p());
mDemo_Set_OrderValue(mDemo_ORDER_NPC0, 9, 0);
aEGH_change_talk_proc(ghost, aEGH_TALK_SELECT_WAIT);
}
break;
}
}
}
static void aEGH_select_wait(EV_GHOST_ACTOR* ghost, GAME_PLAY* play) {
int order = mDemo_Get_OrderValue(mDemo_ORDER_NPC0, 9);
mMsg_Window_c* msg_p = mMsg_Get_base_window_p();
mEv_gst_c* ghost_data = (mEv_gst_c*)mEv_get_save_area(mEv_EVENT_GHOST, 54);
if (order == 1 && mMsg_Check_MainNormalContinue(mMsg_Get_base_window_p())) {
ghost->after_talk_think_act = 1;
ghost_data->flags |= 0x8000;
mDemo_Set_OrderValue(mDemo_ORDER_NPC0, 9, 0);
switch (mChoice_Get_ChoseNum(mChoice_Get_base_window_p())) {
case mChoice_CHOICE0: /* Clear weeds */
{
u32 num_weeds = mFI_GetItemNumField(GRASS_A, GRASS_C);
if (num_weeds < 50) {
mMsg_Set_continue_msg_num(msg_p, 0x2EF1);
}
else if (num_weeds < 150) {
mMsg_Set_continue_msg_num(msg_p, 0x2EF2);
}
else if (num_weeds < 450) {
mMsg_Set_continue_msg_num(msg_p, 0x2EF3);
}
else if (num_weeds < 900) {
mMsg_Set_continue_msg_num(msg_p, 0x2EF4);
}
else {
mMsg_Set_continue_msg_num(msg_p, 0x2EF5);
}
aEGH_change_talk_proc(ghost, aEGH_TALK_CLEAR_GRASS);
break;
}
case mChoice_CHOICE1:
{
aEGH_change_talk_proc(ghost, aEGH_TALK_SELECT_ROOF);
ghost->roof_pal = 0;
break;
}
case mChoice_CHOICE2:
{
u8 name[mIN_ITEM_NAME_LEN];
aEGH_change_talk_proc(ghost, aEGH_TALK_GIVE_YOU_WAIT);
ghost->give_item = aEGH_not_collect_get();
mIN_copy_name_str(name, ghost->give_item);
mMsg_Set_item_str_art(msg_p, mMsg_ITEM_STR0, name, mIN_ITEM_NAME_LEN, mIN_get_item_article(ghost->give_item));
break;
}
}
}
}
static void aEGH_select_roof(EV_GHOST_ACTOR* ghost, GAME_PLAY* play) {
int order = mDemo_Get_OrderValue(mDemo_ORDER_NPC0, 9);
int arrange_idx = mHS_get_arrange_idx(Common_Get(player_no));
mHm_hs_c* home = Save_GetPointer(homes[arrange_idx]);
if (order == 1 && mMsg_Check_MainNormalContinue(mMsg_Get_base_window_p())) {
int selected;
mDemo_Set_OrderValue(mDemo_ORDER_NPC0, 9, 0);
selected = mChoice_Get_ChoseNum(mChoice_Get_base_window_p());
if (selected >= mChoice_CHOICE3) {
ghost->roof_pal += 3;
if (ghost->roof_pal >= mSP_ROOF_COLOR_NUM) {
ghost->roof_pal = 0;
}
}
else {
ghost->roof_pal += (u8)selected;
home->outlook_pal = ghost->roof_pal;
/* Only update the 'next outlook' palette if the player doesn't have a coat of paint already scheduled */
if ((Common_Get(now_private)->state_flags & mPr_FLAG_UPDATE_OUTLOOK_PENDING) == 0) {
home->next_outlook_pal = ghost->roof_pal;
}
aEGH_change_talk_proc(ghost, aEGH_TALK_END_WAIT);
}
}
}
static void aEGH_give_you_wait(EV_GHOST_ACTOR* ghost, GAME_PLAY* play) {
int order = mDemo_Get_OrderValue(mDemo_ORDER_NPC0, 1);
if (order == 2) {
mDemo_Set_OrderValue(mDemo_ORDER_NPC1, 0, ghost->give_item);
mDemo_Set_OrderValue(mDemo_ORDER_NPC1, 1, 7);
mDemo_Set_OrderValue(mDemo_ORDER_NPC1, 2, 0);
mPr_SetFreePossessionItem(Common_Get(now_private), ghost->give_item, mPr_ITEM_COND_NORMAL);
aEGH_change_talk_proc(ghost, aEGH_TALK_END_WAIT);
}
}
static int aEGH_change_talk_proc(EV_GHOST_ACTOR* ghost, u8 talk_act) {
ghost->talk_act = talk_act;
return TRUE;
}
static void aEGH_set_force_talk_info(ACTOR* actorx) {
EV_GHOST_ACTOR* ghost = (EV_GHOST_ACTOR*)actorx;
mEv_gst_common_c* ghost_common = (mEv_gst_common_c*)mEv_get_common_area(mEv_EVENT_GHOST, 55);
mDemo_Set_msg_num(ghost->msg_no + RANDOM(5));
aEGH_okoruhito();
switch (ghost->msg_no) {
case 0x2EE2:
{
mDemo_Set_talk_turn(TRUE);
mDemo_Set_camera(CAMERA2_PROCESS_TALK);
if (aEGH_bitcheck_func(aEGH_BIT_FOUND_GHOST) == FALSE) {
sAdo_SysTrgStart(0x6B);
aEGH_bitset_func(aEGH_BIT_FOUND_GHOST);
}
ghost_common->flags |= mEv_GHOST_FLAG_ACTIVE;
break;
}
case 0x2EDD:
{
mDemo_Set_talk_turn(TRUE);
mDemo_Set_camera(CAMERA2_PROCESS_NORMAL);
break;
}
case 0x2ED3:
case 0x2ED8:
{
mDemo_Set_talk_turn(FALSE);
mDemo_Set_camera(CAMERA2_PROCESS_NORMAL);
mMsg_sound_set_voice_click(mMsg_Get_base_window_p());
break;
}
default:
{
mDemo_Set_talk_turn(FALSE);
mDemo_Set_camera(CAMERA2_PROCESS_NORMAL);
break;
}
}
aEGH_change_talk_proc(ghost, aEGH_TALK_END_WAIT);
}
static void aEGH_force_talk_request(ACTOR* actorx, GAME* game) {
EV_GHOST_ACTOR* ghost = (EV_GHOST_ACTOR*)actorx;
GAME_PLAY* play = (GAME_PLAY*)game;
f32 dist = GET_PLAYER_ACTOR(play)->actor_class.world.position.y - actorx->world.position.y;
if (dist < 0.0f) {
dist = -dist;
}
if (!(
!(ghost->_9A7 == FALSE && actorx->player_distance_xz < actorx->talk_distance) ||
!(dist < 60.0f) && (ghost->_9AA == FALSE)
)) {
mDemo_Request(mDemo_TYPE_SPEAK, actorx, &aEGH_set_force_talk_info);
}
else {
ghost->_9A7 = FALSE;
}
}
static void aEGH_set_norm_talk_info(ACTOR* actorx) {
EV_GHOST_ACTOR* ghost = (EV_GHOST_ACTOR*)actorx;
int hitodama_num;
int msg_no;
aEGH_okoruhito();
mDemo_Set_talk_turn(TRUE);
mDemo_Set_camera(CAMERA2_PROCESS_TALK);
aEGH_change_talk_proc(ghost, aEGH_TALK_END_WAIT);
hitodama_num = aEGH_hitodama_num();
if (hitodama_num == 0) {
msg_no = 0x2EE7 + RANDOM(5);
}
else if (hitodama_num >= mEv_GHOST_HITODAMA_NUM) {
msg_no = 0x2EF0;
aEGH_change_talk_proc(ghost, aEGH_TALK_GIVE_ME_WAIT);
Save_Get(event_save_common).ghost_day = 0;
}
else {
msg_no = 0x2EEB + hitodama_num;
}
mDemo_Set_msg_num(msg_no);
}
static void aEGH_norm_talk_request(ACTOR* actorx, GAME* game) {
EV_GHOST_ACTOR* ghost = (EV_GHOST_ACTOR*)actorx;
if (ghost->_9A7 == FALSE) {
mDemo_Request(mDemo_TYPE_TALK, actorx, &aEGH_set_norm_talk_info);
}
else {
ghost->_9A7 = FALSE;
}
}
static int aEGH_talk_init(ACTOR* actorx, GAME* game) {
EV_GHOST_ACTOR* ghost = (EV_GHOST_ACTOR*)actorx;
ghost->npc_class.talk_info.talk_request_proc = (aNPC_TALK_REQUEST_PROC)&none_proc1;
mDemo_Set_ListenAble();
mDemo_Start(actorx);
return TRUE;
}
typedef void (*aEGH_TALK_PROC)(EV_GHOST_ACTOR*, GAME_PLAY*);
static int aEGH_talk_end_chk(ACTOR* actorx, GAME* game) {
static aEGH_TALK_PROC proc[aEGH_TALK_NUM] = {
(aEGH_TALK_PROC)&none_proc1,
&aEGH_give_me_wait,
&aEGH_select_wait,
&aEGH_select_roof,
&aEGH_give_you_wait,
(aEGH_TALK_PROC)&none_proc1
};
EV_GHOST_ACTOR* ghost = (EV_GHOST_ACTOR*)actorx;
GAME_PLAY* play = (GAME_PLAY*)game;
int res = FALSE;
(*proc[ghost->talk_act])(ghost, play);
if (mDemo_Check(mDemo_TYPE_SPEAK, actorx) == FALSE && mDemo_Check(mDemo_TYPE_TALK, actorx) == FALSE) {
if (ghost->talk_act == aEGH_TALK_CLEAR_GRASS) {
Save_Set(clear_grass, TRUE);
}
aEGH_setup_think_proc(ghost, play, ghost->after_talk_think_act);
if (ghost->melody_inst != 0) {
ghost->npc_class.talk_info.melody_inst = ghost->melody_inst;
ghost->melody_inst = 0;
}
res = TRUE;
}
return res;
}
+1 -1
View File
@@ -1219,7 +1219,7 @@ static void init_weekly_event() {
sched_date = after_n_day(today_date.raw, ofs - rtc_time->weekday);
event_dates[mEv_SAVE_DATE_WEEKLY] = sched_date;
Save_Get(event_save_common).weekly_event.type = mEv_EVENT_DOZAEMON; // Gulliver
Save_Get(event_save_common).current_event_state = 0;
Save_Get(event_save_common).dozaemon_completed = FALSE;
}
/* Check if Guillver should spawn today */
+2 -2
View File
@@ -1082,7 +1082,7 @@ extern int mMpswd_check_present_user(mActor_name_t item) {
price = mSP_ItemNo2ItemPrice(item);
}
}
else if (item >= ITM_GELATO_UMBRELLA && item <= ITM_MY_ORG_UMBRELLA7) {
else if (item >= ITM_UMBRELLA00 && item <= ITM_MY_ORG_UMBRELLA7) {
price = mSP_ItemNo2ItemPrice(item);
}
else if (
@@ -1193,7 +1193,7 @@ static int mMpswd_check_present_other(mActor_name_t item) {
case ITEM1_CAT_TOOL:
{
/* allow umbrellas */
if (item >= ITM_GELATO_UMBRELLA && item <= ITM_FLAME_UMBRELLA) {
if (item >= ITM_UMBRELLA00 && item <= ITM_UMBRELLA31) {
res = TRUE;
break;
}
+1 -1
View File
@@ -2074,7 +2074,7 @@ extern void mSP_RandomUmbSelect(mActor_name_t* umb_list, int count) {
int set = FALSE;
while (!set) {
mActor_name_t umb = ITM_GELATO_UMBRELLA + RANDOM(UMBRELLA_NUM);
mActor_name_t umb = ITM_UMBRELLA00 + RANDOM(UMBRELLA_NUM);
if (mSP_GoodsExistAlready(umb_list, count, umb) == FALSE) {
umb_list[i] = umb;
+2 -2
View File
@@ -744,7 +744,7 @@ static void mSCR_talk_pickup_all(TAISOU_NPC0_ACTOR* taisou_actor, GAME_PLAY* pla
switch (mDemo_Get_OrderValue(mDemo_ORDER_NPC0, 9)) {
case 1:
{
mPlib_request_main_give_type1(play, ITM_EXCERCISE_CARD00, 7, FALSE, FALSE);
mPlib_request_main_give_type1((GAME*)play, ITM_EXCERCISE_CARD00, 7, FALSE, FALSE);
mDemo_Set_OrderValue(mDemo_ORDER_NPC0, 9, 2);
mMsg_Set_LockContinue(mMsg_Get_base_window_p());
mDemo_Set_OrderValue(mDemo_ORDER_NPC0, 1, 3);
@@ -772,7 +772,7 @@ static void mSCR_talk_inspection(TAISOU_NPC0_ACTOR* taisou_actor, GAME_PLAY* pla
switch (order) {
case 1:
{
mPlib_request_main_give_type1(play, ITM_EXCERCISE_CARD00, 8, FALSE, FALSE);
mPlib_request_main_give_type1((GAME*)play, ITM_EXCERCISE_CARD00, 8, FALSE, FALSE);
mDemo_Set_OrderValue(mDemo_ORDER_NPC0, 9, 2);
mDemo_Set_OrderValue(mDemo_ORDER_NPC0, 1, 3);
mMsg_Set_continue_msg_num(msg_win, 0x3422 + taisou_actor->talk_state);
+2 -2
View File
@@ -53,8 +53,8 @@ extern void mTD_player_keydata_init(GAME_PLAY* play) {
else if (tool == ITM_ROD) {
tool = ITM_ROD;
}
else if (tool == ITM_GELATO_UMBRELLA) {
tool = ITM_GELATO_UMBRELLA;
else if (tool == ITM_UMBRELLA00) {
tool = ITM_UMBRELLA00;
}
mPlib_SetData2_controller_data_for_title_demo(tool);