mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-06-04 10:26:19 -04:00
86 lines
2.3 KiB
C
86 lines
2.3 KiB
C
#include "ac_npc_sendo.h"
|
|
|
|
#include "m_common_data.h"
|
|
#include "ac_boat_demo.h"
|
|
#include "sys_matrix.h"
|
|
#include "m_msg.h"
|
|
#include "libultra/libultra.h"
|
|
#include "GBA2/gba2.h"
|
|
#include "m_ledit_ovl.h"
|
|
|
|
static void aSEN_actor_ct(ACTOR* actorx, GAME* game);
|
|
static void aSEN_actor_dt(ACTOR* actorx, GAME* game);
|
|
static void aSEN_actor_init(ACTOR* actorx, GAME* game);
|
|
static void aSEN_actor_move(ACTOR* actorx, GAME* game);
|
|
static void aSEN_actor_draw(ACTOR* actorx, GAME* game);
|
|
static void aSEN_actor_save(ACTOR* actorx, GAME* game);
|
|
|
|
ACTOR_PROFILE Npc_Sendo_Profile = {
|
|
mAc_PROFILE_NPC_SENDO,
|
|
ACTOR_PART_NPC,
|
|
ACTOR_STATE_NONE,
|
|
SP_NPC_SENDO,
|
|
ACTOR_OBJ_BANK_KEEP,
|
|
sizeof(NPC_SENDO_ACTOR),
|
|
&aSEN_actor_ct,
|
|
&aSEN_actor_dt,
|
|
&aSEN_actor_init,
|
|
mActor_NONE_PROC1,
|
|
&aSEN_actor_save
|
|
};
|
|
|
|
static int aSEN_talk_init(ACTOR*, GAME*);
|
|
static int aSEN_talk_end_chk(ACTOR*, GAME*);
|
|
|
|
static void aSEN_schedule_proc(NPC_ACTOR*, GAME_PLAY*, int);
|
|
static void aSEN_setup_think_proc(NPC_SENDO_ACTOR*, GAME_PLAY*, u8);
|
|
|
|
static MtxF aSEN_matrix;
|
|
|
|
static void aSEN_actor_ct(ACTOR* actorx, GAME* game) {
|
|
static aNPC_ct_data_c ct_data = {
|
|
&aSEN_actor_move,
|
|
&aSEN_actor_draw,
|
|
5,
|
|
(aNPC_TALK_REQUEST_PROC)&none_proc1,
|
|
&aSEN_talk_init,
|
|
&aSEN_talk_end_chk,
|
|
0
|
|
};
|
|
|
|
if ((*Common_Get(clip).npc_clip->birth_check_proc)(actorx, game) == TRUE) {
|
|
NPC_ACTOR* npc_actor = (NPC_ACTOR*)actorx;
|
|
GAME_PLAY* play = (GAME_PLAY*)game;
|
|
|
|
npc_actor->schedule.schedule_proc = &aSEN_schedule_proc;
|
|
(*Common_Get(clip).npc_clip->ct_proc)(actorx, game, &ct_data);
|
|
}
|
|
}
|
|
|
|
static void aSEN_actor_save(ACTOR* actorx, GAME* game) {
|
|
(*Common_Get(clip).npc_clip->save_proc)(actorx, game);
|
|
}
|
|
|
|
static void aSEN_actor_dt(ACTOR* actorx, GAME* game) {
|
|
NPC_SENDO_ACTOR* sendo = (NPC_SENDO_ACTOR*)actorx;
|
|
BOAT_DEMO_ACTOR* boat_demo;
|
|
|
|
(*Common_Get(clip).npc_clip->dt_proc)(actorx, game);
|
|
|
|
boat_demo = (BOAT_DEMO_ACTOR*)actorx->parent_actor;
|
|
if (boat_demo != NULL && boat_demo->npc_sendo_actor == sendo) {
|
|
boat_demo->npc_sendo_actor = NULL;
|
|
}
|
|
}
|
|
|
|
static void aSEN_actor_init(ACTOR* actorx, GAME* game) {
|
|
(*Common_Get(clip).npc_clip->init_proc)(actorx, game);
|
|
}
|
|
|
|
static void aSEN_actor_draw(ACTOR* actorx, GAME* game) {
|
|
Matrix_put(&aSEN_matrix);
|
|
(*Common_Get(clip).npc_clip->draw_proc)(actorx, game);
|
|
}
|
|
|
|
#include "../src/ac_npc_sendo_move.c_inc"
|