mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
107 lines
2.4 KiB
C
107 lines
2.4 KiB
C
#ifndef M_NPC_WALK_H
|
|
#define M_NPC_WALK_H
|
|
|
|
#include "types.h"
|
|
#include "m_npc_personal_id.h"
|
|
#include "m_npc.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define mNpcW_GET_WALK_NUM(x) (int)((x) / 3)
|
|
#define mNpcW_MAX mNpcW_GET_WALK_NUM(ANIMAL_NUM_MAX)
|
|
|
|
typedef struct goal_data_s {
|
|
u8* types;
|
|
u8 count;
|
|
int end_time;
|
|
} mNpcW_GoalData_c;
|
|
|
|
typedef struct goal_data_table_s {
|
|
mNpcW_GoalData_c* data_p;
|
|
int count;
|
|
} mNpcW_GoalDataTable_c;
|
|
|
|
enum {
|
|
mNpcW_GOAL_SHRINE, /* Shrine/Wishing Well acre */
|
|
mNpcW_GOAL_HOME, /* Randomly selected acre with a villager house */
|
|
mNpcW_GOAL_ALONE, /* Randomly selected acre with no other animals in it */
|
|
mNpcW_GOAL_MY_HOME, /* Acre containing the villager's house */
|
|
|
|
mNpcW_GOAL_NUM
|
|
};
|
|
|
|
enum {
|
|
mNpcW_GOAL_BLOCK_SHRINE,
|
|
mNpcW_GOAL_BLOCK_HOME,
|
|
|
|
mNpcW_GOAL_BLOCK_NUM
|
|
};
|
|
|
|
/* TODO: figure out remaining enums */
|
|
enum {
|
|
mNpcW_APPEAR_STATUS_REGULAR,
|
|
mNpcW_APPEAR_STATUS_GUEST,
|
|
|
|
mNpcW_APPEAR_STATUS_NUM
|
|
};
|
|
|
|
enum {
|
|
mNpcW_APPEAR_WAY_UP,
|
|
mNpcW_APPEAR_WAY_DOWN,
|
|
mNpcW_APPEAR_WAY_LEFT,
|
|
mNpcW_APPEAR_WAY_RIGHT,
|
|
|
|
mNpcW_APPEAR_WAY_NUM
|
|
};
|
|
|
|
/* TODO: figure out remaining enums */
|
|
enum {
|
|
mNpcW_INFO_STATUS_NONE,
|
|
mNpcW_INFO_STATUS_WALKING,
|
|
mNpcW_INFO_STATUS_STAY_IN_BLOCK,
|
|
mNpcW_INFO_STATUS_ARRIVE,
|
|
mNpcW_INFO_STATUS_4,
|
|
|
|
mNpcW_INFO_STATUS_NUM
|
|
};
|
|
|
|
typedef struct npc_walk_appear_s {
|
|
u8 status;
|
|
u8 way;
|
|
} mNpcW_appear_c;
|
|
|
|
typedef struct npc_walk_information_s {
|
|
AnmPersonalID_c id;
|
|
int idx;
|
|
u8 status;
|
|
u8 goal_type;
|
|
u8 goal_block_x;
|
|
u8 goal_block_z;
|
|
mNpcW_appear_c appear_info;
|
|
} mNpcW_info_c;
|
|
|
|
typedef struct npc_walk_s {
|
|
mNpcW_info_c info[mNpcW_MAX];
|
|
u16 used_idx_bitfield;
|
|
u8 used_info_num;
|
|
u8 info_max;
|
|
} mNpc_walk_c;
|
|
|
|
extern void mNpcW_ClearNpcWalkInfo(mNpcW_info_c* info, int num);
|
|
extern int mNpcW_GetNpcWalkInfoIdx(mNpcW_info_c* info, int num, AnmPersonalID_c* anm_id);
|
|
extern int mNpcW_ChangeNpcWalk(mNpc_walk_c* walk, mNpcW_info_c* info);
|
|
extern void mNpcW_SetGoalBlock(mNpcW_info_c* info);
|
|
extern void mNpcW_InitNpcWalk(mNpc_walk_c* walk);
|
|
extern int mNpcW_GetAppearStatusWay(u8* status, u8* way, Animal_c* animal);
|
|
extern u32* mNpcW_GetArriveStayCountP(int idx);
|
|
extern int mNpcW_GetWalkInfoStatusGoalAnimalIdx(int* status, int* goal, int idx);
|
|
extern int mNpcW_GetNearGate(int* target_ut_x, int* target_ut_z, int block_x, int block_z, int ut_x, int ut_z);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|