Files
ac-decomp/include/ac_set_manager.h
2023-05-27 00:50:20 -04:00

108 lines
2.7 KiB
C

#ifndef AC_SET_MANAGER_H
#define AC_SET_MANAGER_H
#include "types.h"
#include "m_actor.h"
#include "m_play.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct actor_set_manager_s SET_MANAGER;
#define aSetMgr_SET_OVERLAY_BUF_SIZE 0x4000
#define aSetMgr_INSECT_SPAWN_INFO_COUNT 43
/* sizeof(aSOI_insect_spawn_info_f_c) == 0xC */
typedef struct insect_spawn_info_f_s {
int type;
u8 spawn_area;
float weight;
} aSOI_insect_spawn_info_f_c;
/* sizeof(aSOI_insect_keep_c) == 0x210 */
typedef struct insect_keep_s {
aSOI_insect_spawn_info_f_c spawn_info[aSetMgr_INSECT_SPAWN_INFO_COUNT]; // devs forgot to update aSetMgr_INSECT_SPAWN_INFO_SIZE or something lol
int now_month;
int now_term;
u8 info_num;
u8 spawn_type;
} aSOI_insect_keep_c;
#define aSetMgr_WAIT_TIME 5 // wait time between aSetMgr_move_check_wait -> aSetMgr_move_set
#define aSetMgr_GYOEI_NUM 40
/* sizeof(aSOG_gyoei_spawn_info_weight_f_c) == 8 */
typedef struct gyoei_spawn_info_weight_f_s {
/* 0x00 */ s16 type;
/* 0x02 */ u8 spawn_area;
/* 0x04 */ f32 spawn_weight;
} aSOG_gyoei_spawn_info_weight_f_c;
typedef struct gyoei_keep_s {
/* 0x000 */ aSOG_gyoei_spawn_info_weight_f_c spawn_weights[aSetMgr_GYOEI_NUM];
/* 0x140 */ int possible_gyoei_num;
} aSOG_gyoei_keep_c;
typedef int (*aSetMgr_ovl_proc)(SET_MANAGER*, GAME_PLAY*);
enum set_overlay_type {
aSetMgr_OVERLAY_BEGIN = 0,
aSetMgr_OVERLAY_INSECT = aSetMgr_OVERLAY_BEGIN,
aSetMgr_OVERLAY_GYOEI,
aSetMgr_OVERLAY_NUM
};
enum set_manager_move_proc_type {
aSetMgr_MOVE_move_check_set,
aSetMgr_MOVE_move_check_wait,
aSetMgr_MOVE_move_set,
aSetMgr_MOVE_PROC_NUM
};
/* sizeof(aSetMgr_keep_c) == 0x354 */
typedef struct actor_set_manager_keep_s {
/* 0x000 */ aSOI_insect_keep_c insect_keep;
/* 0x210 */ aSOG_gyoei_keep_c gyoei_keep;
} aSetMgr_keep_c;
/* sizeof(aSetMgr_set_ovl_c) == 0x4004 */
typedef struct actor_set_manager_ovl_s {
/* 0x0000 */ u8 buf[aSetMgr_SET_OVERLAY_BUF_SIZE];
/* 0x4000 */ aSetMgr_ovl_proc ovl_proc;
} aSetMgr_set_ovl_c;
/* sizeof(aSetMgr_player_pos) == 0x18 */
typedef struct actor_set_manager_player_pos_s {
/* 0x00 */ int next_bx, next_bz; // TODO: there's a good chance these are structs
/* 0x08 */ int now_bx, now_bz;
/* 0x10 */ int last_bx, last_bz;
} aSetMgr_player_pos_c;
/* sizeof(SET_MANAGER) == 0x44F0 */
struct actor_set_manager_s {
/* 0x0000 */ ACTOR actor_class;
/* 0x0174 */ u8 move_proc;
/* 0x0175 */ u8 next_move_proc;
/* 0x0176 */ u8 set_ovl_type;
/* 0x0178 */ aSetMgr_set_ovl_c set_overlay;
/* 0x417C */ int unk_417C;
/* 0x4180 */ aSetMgr_player_pos_c player_pos;
/* 0x4198 */ aSetMgr_keep_c keep;
/* 0x44EC */ s16 wait_timer;
};
extern ACTOR_PROFILE Set_Manager_Profile;
#ifdef __cplusplus
}
#endif
#endif