mirror of
https://github.com/encounter/ac-decomp.git
synced 2026-03-30 10:57:04 -07:00
257 lines
6.1 KiB
C
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
|