mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-06-23 07:19:55 -04:00
127 lines
3.7 KiB
C
127 lines
3.7 KiB
C
#include "ac_npc_curator.h"
|
|
|
|
#include "m_common_data.h"
|
|
#include "m_item_name.h"
|
|
#include "m_msg.h"
|
|
|
|
enum {
|
|
aCR_ACTION_WAIT,
|
|
aCR_ACTION_SLEEP_WAIT,
|
|
aCR_ACTION_SLEEP,
|
|
|
|
aCR_ACTION_NUM
|
|
};
|
|
|
|
enum {
|
|
aCR_TALK_END_WAIT,
|
|
aCR_TALK_AFTER_TALK_START_WAIT,
|
|
aCR_TALK_CHK_REQUEST,
|
|
aCR_TALK_CHK_DECIDE_TO_DONATE,
|
|
aCR_TALK_CHK_DECIDE_TO_DONATE2,
|
|
aCR_TALK_MENU_OPEN_WAIT,
|
|
aCR_TALK_MSG_WIN_CLOSE_WAIT,
|
|
aCR_TALK_MENU_CLOSE_WAIT,
|
|
aCR_TALK_GET_DEMO_START_WAIT,
|
|
aCR_TALK_GET_DEMO_END_WAIT,
|
|
aCR_TALK_MSG_WIN_OPEN_WAIT,
|
|
aCR_TALK_RETURN_DEMO_START_WAIT,
|
|
aCR_TALK_RETURN_DEMO_START_WAIT2,
|
|
aCR_TALK_RETURN_DEMO_END_WAIT,
|
|
aCR_TALK_RETURN_DEMO_END_WAIT2,
|
|
aCR_TALK_CHK_CONTINUE_TO_DONATE,
|
|
aCR_TALK_CHK_CONTINUE_TO_DONATE2,
|
|
aCR_TALK_CHK_CONTINUE_TO_DONATE3,
|
|
aCR_TALK_PUTAWAY_DEMO_START_WAIT,
|
|
aCR_TALK_PUTAWAY_DEMO_START_WAIT2,
|
|
aCR_TALK_PUTAWAY_DEMO_START_WAIT3,
|
|
aCR_TALK_PUTAWAY_DEMO_START_WAIT4,
|
|
aCR_TALK_PUTAWAY_DEMO_START_WAIT5,
|
|
aCR_TALK_PUTAWAY_DEMO_START_WAIT6,
|
|
aCR_TALK_PUTAWAY_DEMO_START_WAIT5_2,
|
|
aCR_TALK_PUTAWAY_DEMO_END_WAIT,
|
|
aCR_TALK_PUTAWAY_DEMO_END_WAIT2,
|
|
aCR_TALK_PUTAWAY_DEMO_END_WAIT3,
|
|
aCR_TALK_PUTAWAY_DEMO_END_WAIT4,
|
|
aCR_TALK_PUTAWAY_DEMO_END_WAIT5,
|
|
aCR_TALK_PUTAWAY_DEMO_END_WAIT6,
|
|
aCR_TALK_AFTER_EXPLAIN_INSECT,
|
|
aCR_TALK_THANKS_FOSSIL_MSG_END_WAIT,
|
|
aCR_TALK_CHK_ALL_COMPLETE,
|
|
|
|
aCR_TALK_NUM
|
|
};
|
|
|
|
static void aCR_actor_ct(ACTOR* actorx, GAME* game);
|
|
static void aCR_actor_dt(ACTOR* actorx, GAME* game);
|
|
static void aCR_actor_move(ACTOR* actorx, GAME* game);
|
|
static void aCR_actor_draw(ACTOR* actorx, GAME* game);
|
|
static void aCR_actor_init(ACTOR* actorx, GAME* game);
|
|
static void aCR_actor_save(ACTOR* actorx, GAME* game);
|
|
|
|
ACTOR_PROFILE Npc_Curator_Profile = {
|
|
mAc_PROFILE_NPC_CURATOR,
|
|
ACTOR_PART_NPC,
|
|
ACTOR_STATE_NONE,
|
|
SP_NPC_CURATOR,
|
|
ACTOR_OBJ_BANK_KEEP,
|
|
sizeof(NPC_CURATOR_ACTOR),
|
|
&aCR_actor_ct,
|
|
&aCR_actor_dt,
|
|
&aCR_actor_init,
|
|
mActor_NONE_PROC1,
|
|
&aCR_actor_save
|
|
};
|
|
|
|
static void aCR_talk_request(ACTOR* actorx, GAME* game);
|
|
static int aCR_talk_init(ACTOR* actorx, GAME* game);
|
|
static int aCR_talk_end_chk(ACTOR* actorx, GAME* game);
|
|
|
|
static void aCR_schedule_proc(NPC_ACTOR* actorx, GAME_PLAY* play, int sched_idx);
|
|
static void aCR_setupTalkAction(NPC_CURATOR_ACTOR* curator, GAME_PLAY* play, int talk_act_idx);
|
|
static void aCR_setupAction(NPC_CURATOR_ACTOR* curator, GAME_PLAY* play, int action);
|
|
|
|
static void aCR_actor_ct(ACTOR* actorx, GAME* game) {
|
|
static aNPC_ct_data_c ct_data = {
|
|
&aCR_actor_move,
|
|
&aCR_actor_draw,
|
|
5,
|
|
&aCR_talk_request,
|
|
&aCR_talk_init,
|
|
&aCR_talk_end_chk,
|
|
0
|
|
};
|
|
|
|
NPC_CURATOR_ACTOR* curator = (NPC_CURATOR_ACTOR*)actorx;
|
|
|
|
if ((*Common_Get(clip).npc_clip->birth_check_proc)(actorx, game) == TRUE) {
|
|
curator->npc_class.schedule.schedule_proc = &aCR_schedule_proc;
|
|
(*Common_Get(clip).npc_clip->ct_proc)(actorx, game, &ct_data);
|
|
actorx->status_data.weight = 255;
|
|
actorx->world.position.x += 20.0f;
|
|
curator->setupTalkAction_proc = &aCR_setupTalkAction;
|
|
|
|
/* Clear 'first talk' flag if entering from a scene outside the museum */
|
|
if (Common_Get(last_scene_no) >= SCENE_MY_ROOM_LL1 || Common_Get(last_scene_no) < SCENE_MUSEUM_ROOM_PAINTING) {
|
|
aNPC_SPNPC_BIT_CLR(Common_Get(spnpc_first_talk_flags), aNPC_SPNPC_BIT_CURATOR);
|
|
}
|
|
}
|
|
}
|
|
|
|
static void aCR_actor_save(ACTOR* actorx, GAME* game) {
|
|
(*Common_Get(clip).npc_clip->save_proc)(actorx, game);
|
|
}
|
|
|
|
static void aCR_actor_dt(ACTOR* actorx, GAME* game) {
|
|
(*Common_Get(clip).npc_clip->dt_proc)(actorx, game);
|
|
}
|
|
|
|
static void aCR_actor_init(ACTOR* actorx, GAME* game) {
|
|
(*Common_Get(clip).npc_clip->init_proc)(actorx, game);
|
|
}
|
|
|
|
static void aCR_actor_draw(ACTOR* actorx, GAME* game) {
|
|
(*Common_Get(clip).npc_clip->draw_proc)(actorx, game);
|
|
}
|
|
|
|
#include "../src/ac_npc_curator_move.c_inc"
|