Files

257 lines
6.1 KiB
C

#ifndef AC_STRUCTURE_H
#define AC_STRUCTURE_H
#include "types.h"
#include "m_actor.h"
#include "m_actor_dlftbls.h"
#include "c_keyframe.h"
#include "m_play_h.h"
#ifdef __cplusplus
extern "C" {
#endif
#define aSTR_ACTOR_TBL_COUNT 9
#define aSTR_OVERLAY_SIZE 0x2400
enum structure_type {
aSTR_TYPE_HOUSE1,
aSTR_TYPE_HOUSE2,
aSTR_TYPE_HOUSE3,
aSTR_TYPE_HOUSE4,
aSTR_TYPE_HOUSE5,
aSTR_TYPE_MYHOME,
aSTR_TYPE_6,
aSTR_TYPE_7,
aSTR_TYPE_SHOP1,
aSTR_TYPE_SHOP2,
aSTR_TYPE_SHOP3,
aSTR_TYPE_SHOP4,
aSTR_TYPE_POST_OFFICE,
aSTR_TYPE_STATION1,
aSTR_TYPE_STATION2,
aSTR_TYPE_STATION3,
aSTR_TYPE_TRAIN0,
aSTR_TYPE_TRAIN1,
aSTR_TYPE_POLICE_BOX,
aSTR_TYPE_FALLS,
aSTR_TYPE_FALLSESW,
aSTR_TYPE_RESERVE,
aSTR_TYPE_SHRINE,
aSTR_TYPE_BRSHOP,
aSTR_TYPE_BUGGY,
aSTR_TYPE_S_CAR,
aSTR_TYPE_KAMAKURA, // also used for camping tent
aSTR_TYPE_GOZA,
aSTR_TYPE_RADIO,
aSTR_TYPE_YATAI,
aSTR_TYPE_TUKIMI,
aSTR_TYPE_TUKIMI2,
aSTR_TYPE_MIKUJI,
aSTR_TYPE_COUNT,
aSTR_TYPE_COUNT02,
aSTR_TYPE_SPORTSFAIR_A,
aSTR_TYPE_SPORTSFAIR_B,
aSTR_TYPE_TURI,
aSTR_TYPE_TURI2,
aSTR_TYPE_KOINOBORI,
aSTR_TYPE_DUMP,
aSTR_TYPE_WINDMILL,
aSTR_TYPE_LOTUS,
aSTR_TYPE_MIKANBOX,
aSTR_TYPE_DOUZOU,
aSTR_TYPE_TOUDAI,
aSTR_TYPE_GHOG,
aSTR_TYPE_HTABLE,
aSTR_TYPE_MUSEUM,
aSTR_TYPE_BRIDGE_A,
aSTR_TYPE_50,
aSTR_TYPE_NEEDLEWORK_SHOP,
aSTR_TYPE_FLAG,
aSTR_TYPE_BOAT,
aSTR_TYPE_COTTAGE_MY,
aSTR_TYPE_COTTAGE_NPC,
aSTR_TYPE_NUM
};
enum structure_palette {
aSTR_PAL_HOUSE1_A,
aSTR_PAL_HOUSE1_B,
aSTR_PAL_HOUSE1_C,
aSTR_PAL_HOUSE1_D,
aSTR_PAL_HOUSE1_E,
aSTR_PAL_HOUSE2_A,
aSTR_PAL_HOUSE2_B,
aSTR_PAL_HOUSE2_C,
aSTR_PAL_HOUSE2_D,
aSTR_PAL_HOUSE2_E,
aSTR_PAL_HOUSE3_A,
aSTR_PAL_HOUSE3_B,
aSTR_PAL_HOUSE3_C,
aSTR_PAL_HOUSE3_D,
aSTR_PAL_HOUSE3_E,
aSTR_PAL_HOUSE4_A,
aSTR_PAL_HOUSE4_B,
aSTR_PAL_HOUSE4_C,
aSTR_PAL_HOUSE4_D,
aSTR_PAL_HOUSE4_E,
aSTR_PAL_HOUSE5_A,
aSTR_PAL_HOUSE5_B,
aSTR_PAL_HOUSE5_C,
aSTR_PAL_HOUSE5_D,
aSTR_PAL_HOUSE5_E,
aSTR_PAL_MYHOME_A,
aSTR_PAL_MYHOME_B,
aSTR_PAL_MYHOME_C,
aSTR_PAL_MYHOME_D,
aSTR_PAL_MYHOME_E,
aSTR_PAL_MYHOME_F,
aSTR_PAL_MYHOME_G,
aSTR_PAL_MYHOME_H,
aSTR_PAL_MYHOME_I,
aSTR_PAL_MYHOME_J,
aSTR_PAL_MYHOME_K,
aSTR_PAL_MYHOME_L,
aSTR_PAL_SHOP1,
aSTR_PAL_SHOP2,
aSTR_PAL_SHOP3,
aSTR_PAL_SHOP4,
aSTR_PAL_POST_OFFICE,
aSTR_PAL_STATION1_A,
aSTR_PAL_STATION1_B,
aSTR_PAL_STATION1_C,
aSTR_PAL_STATION1_D,
aSTR_PAL_STATION1_E,
aSTR_PAL_STATION2_A,
aSTR_PAL_STATION2_B,
aSTR_PAL_STATION2_C,
aSTR_PAL_STATION2_D,
aSTR_PAL_STATION2_E,
aSTR_PAL_STATION3_A,
aSTR_PAL_STATION3_B,
aSTR_PAL_STATION3_C,
aSTR_PAL_STATION3_D,
aSTR_PAL_STATION3_E,
aSTR_PAL_TRAIN1_A1,
aSTR_PAL_TRAIN1_A2,
aSTR_PAL_POLICE_BOX,
aSTR_PAL_FALLS,
aSTR_PAL_FALLSESW,
aSTR_PAL_RESERVE,
aSTR_PAL_SHRINE,
aSTR_PAL_BR_SHOP,
aSTR_PAL_BUGGY,
aSTR_PAL_S_CAR,
aSTR_PAL_KAMAKURA,
aSTR_PAL_GOZA,
aSTR_PAL_RADIO,
aSTR_PAL_YATAI,
aSTR_PAL_TUKIMI,
aSTR_PAL_TUKIMI2,
aSTR_PAL_MIKUJI,
aSTR_PAL_COUNT,
aSTR_PAL_COUNT02,
aSTR_PAL_KAGO_R,
aSTR_PAL_KAGO_W,
aSTR_PAL_TURI,
aSTR_PAL_TURI2,
aSTR_PAL_KOINOBORI_A,
aSTR_PAL_DUMP,
aSTR_PAL_WINDMILL_A,
aSTR_PAL_WINDMILL_B,
aSTR_PAL_WINDMILL_C,
aSTR_PAL_WINDMILL_D,
aSTR_PAL_WINDMILL_E,
aSTR_PAL_01_LOTUS,
aSTR_PAL_MIKANBOX,
aSTR_PAL_DOUZOU_DAI,
aSTR_PAL_TOUDAI,
aSTR_PAL_MUSEUM,
aSTR_PAL_BRIDGE_A,
aSTR_PAL_TAILOR,
aSTR_PAL_FLAG,
aSTR_PAL_BOAT,
aSTR_PAL_MYHOME_ISLAND,
aSTR_PAL_HOUSE_I,
aSTR_PAL_NUM
};
typedef struct actor_structure_control_s STRUCTURE_CONTROL_ACTOR;
typedef struct actor_structure_s STRUCTURE_ACTOR;
typedef STRUCTURE_ACTOR* (*aSTR_SETUP_ACTOR_PROC)(GAME*, mActor_name_t, s16, f32, f32);
typedef void (*aSTR_GET_OVERLAY_AREA_PROC)(ACTOR_DLFTBL*);
typedef void (*aSTR_FREE_OVERLAY_AREA_PROC)(ACTOR_DLFTBL*);
typedef STRUCTURE_ACTOR* (*aSTR_GET_ACTOR_AREA_PROC)();
typedef void (*aSTR_FREE_ACTOR_AREA_PROC)(STRUCTURE_ACTOR*);
typedef u16* (*aSTR_GET_PAL_SEGMENT_PROC)(s16);
typedef void (*aSTR_MOVE_PROC)(STRUCTURE_ACTOR*, GAME_PLAY*);
// sizeof(actor_structure_s) == 0x2DC
struct actor_structure_s {
/* 0x000*/ ACTOR actor_class;
/* 0x174*/ int keyframe_state;
/* 0x178*/ cKF_SkeletonInfo_R_c keyframe;
/* 0x1E8*/ int keyframe_saved_keyframe;
/* 0x1EC*/ s_xyz work_area[15];
/* 0x246*/ s_xyz morph_area[15];
/* 0x2A0*/ aSTR_MOVE_PROC action_proc;
/* 0x2A4*/ int _2A4;
/* 0x2A8*/ int structure_type; /* aSTR_TYPE_* */
/* 0x2AC*/ int structure_pal; /* aSTR_PAL_* */
/* 0x2B0*/ int request_type;
/* 0x2B4*/ int action;
/* general purpose members with unique usage between structure actors */
/* 0x2B8*/ int arg0;
/* 0x2BC*/ int arg1;
/* 0x2C0*/ int arg2;
/* 0x2C4*/ int arg3;
/* general purpose float members with unique usage between structure actors*/
/* 0x2C8*/ f32 arg0_f;
/* 0x2CC*/ f32 arg1_f;
/* 0x2D0*/ f32 arg2_f;
/* 0x2D4*/ f32 arg3_f;
/* 0x2D8*/ u32 season;
};
typedef struct actor_overlay_info_s {
u8* overlay_p;
int used;
} aSTR_Overlay_info_c;
typedef struct actor_structure_clip_s {
aSTR_SETUP_ACTOR_PROC setup_actor_proc;
aSTR_GET_OVERLAY_AREA_PROC get_overlay_area_proc;
aSTR_FREE_OVERLAY_AREA_PROC free_overlay_area_proc;
aSTR_GET_ACTOR_AREA_PROC get_actor_area_proc;
aSTR_FREE_ACTOR_AREA_PROC free_actor_area_proc;
STRUCTURE_ACTOR* structure_actor_tbl[aSTR_ACTOR_TBL_COUNT];
int structure_actor_used_tbl[aSTR_ACTOR_TBL_COUNT];
aSTR_Overlay_info_c overlay_area[aSTR_ACTOR_TBL_COUNT];
aSTR_GET_PAL_SEGMENT_PROC get_pal_segment_proc;
} aSTR_Clip_c;
struct actor_structure_control_s {
ACTOR actor_class;
int _174;
mActor_name_t str_door_name;
u8 reset;
};
extern ACTOR_PROFILE Structure_Profile;
#ifdef __cplusplus
}
#endif
#endif