Files
ac-decomp/src/ac_npc_curator.c
T
2023-12-21 17:52:57 -05:00

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"