mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-08-22 05:49:04 -04:00
Implement & link ac_structure.c
This commit is contained in:
+104
-1
@@ -3,18 +3,121 @@
|
||||
|
||||
#include "types.h"
|
||||
#include "m_actor.h"
|
||||
#include "m_actor_dlftbls.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef ACTOR* (*aSTR_SETUP_ACTOR_PROC)(GAME_PLAY*, mActor_name_t, int, f32, f32);
|
||||
#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_SIGN,
|
||||
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
|
||||
};
|
||||
|
||||
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);
|
||||
|
||||
struct actor_structure_s {
|
||||
ACTOR actor_class;
|
||||
u8 _174[0x2B0 - 0x174];
|
||||
int request_type;
|
||||
u8 _2B4[0x2DC - 0x2B4];
|
||||
};
|
||||
|
||||
typedef struct actor_overlay_info_s {
|
||||
u8* overlay_p;
|
||||
int used;
|
||||
} aSTR_Overlay_info_c;
|
||||
|
||||
// TODO: finish clip
|
||||
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
|
||||
|
||||
@@ -15,6 +15,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
typedef void (*mActor_proc)(ACTOR*, GAME*);
|
||||
#define NONE_ACTOR_PROC ((mActor_proc)&none_proc1)
|
||||
|
||||
#define ACTOR_STATE_NONE 0
|
||||
#define ACTOR_STATE_NO_MOVE_WHILE_CULLED (1 << 4)
|
||||
@@ -398,6 +399,7 @@ extern ACTOR* Actor_info_fgName_search(Actor_info* actor_info, mActor_name_t fg_
|
||||
extern void Actor_world_to_eye(ACTOR* actor, f32 eye_height);
|
||||
extern void Shape_Info_init(ACTOR* actor, f32 y_ofs, mActor_shadow_proc shadow_proc, f32 shadow_sizeX, f32 shadow_sizeZ);
|
||||
extern void Actor_position_moveF(ACTOR* actor);
|
||||
extern ACTOR* Actor_info_make_actor(Actor_info* actor_info, GAME* game, s16 profile, f32 x, f32 y, f32 z, short rot_x, short rot_y, short rot_z, s8 block_x, s8 block_z, s16 mvactor_list_no, mActor_name_t actor_name, s16 arg, s8 npc_idx, int data_bank);
|
||||
|
||||
extern void mAc_ActorShadowCircle(ACTOR* actor, LightsN* lightsN, GAME_PLAY* play);
|
||||
extern void mAc_ActorShadowEllipse(ACTOR* actor, LightsN* lightsN, GAME_PLAY* play);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct actor_dfltbl_s {
|
||||
typedef struct actor_dlftbl_s {
|
||||
u32 rom_start; // unused in AC
|
||||
u32 rom_end; // unused in AC
|
||||
u8* ram_start; // used only with a check, but never set in AC
|
||||
@@ -19,10 +19,10 @@ typedef struct actor_dfltbl_s {
|
||||
u16 flags; // related to memory pinning but functionally useless in AC since alloc_buf is never allocated
|
||||
s8 num_actors; // number of this type of actor that currently exist
|
||||
s8 unk2; // unused in AC
|
||||
} ACTOR_DFLTBL;
|
||||
} ACTOR_DLFTBL;
|
||||
|
||||
extern int actor_dlftbls_num;
|
||||
extern ACTOR_DFLTBL actor_dlftbls[];
|
||||
extern ACTOR_DLFTBL actor_dlftbls[];
|
||||
|
||||
extern void actor_dlftbls_init();
|
||||
extern void actor_dlftbls_cleanup();
|
||||
|
||||
@@ -50,6 +50,7 @@ enum field_type2 {
|
||||
|
||||
enum field_room {
|
||||
/* TODO: others */
|
||||
mFI_FIELD_FG = mFI_TO_FIELD_ID(mFI_FIELDTYPE_FG, 0),
|
||||
|
||||
mFI_FIELD_PLAYER0_ROOM = mFI_TO_FIELD_ID(mFI_FIELDTYPE_PLAYER_ROOM, 0),
|
||||
mFI_FIELD_PLAYER1_ROOM,
|
||||
|
||||
+88
-3
@@ -59,6 +59,9 @@ extern int mNT_check_unknown(mActor_name_t item_no);
|
||||
#define ITEM_NAME_GET_CAT(n) (((n) & 0x0F00) >> 8)
|
||||
#define ITEM_NAME_GET_INDEX(n) ((mActor_name_t)(n) & 0xFF)
|
||||
|
||||
#define NPC_HOUSE_ID_TO_NPC_ID(house) (house + 0x9000)
|
||||
#define NPC_ID_TO_NPC_HOUSE_ID(npc) (npc - 0x9000)
|
||||
|
||||
#define ITEM_IS_FTR(n) \
|
||||
(ITEM_NAME_GET_TYPE(n) == NAME_TYPE_FTR0 || ITEM_NAME_GET_TYPE(n) == NAME_TYPE_FTR1)
|
||||
|
||||
@@ -468,14 +471,96 @@ extern int mNT_check_unknown(mActor_name_t item_no);
|
||||
|
||||
#define EXIT_DOOR 0x4080
|
||||
|
||||
#define NPC_HOUSE_START 0x5000
|
||||
#define NPC_HOUSE000 NPC_HOUSE_START
|
||||
//
|
||||
#define NPC_HOUSE_END 0x50EE
|
||||
|
||||
#define STRUCTURE_START 0x5800
|
||||
#define HOUSE0 (STRUCTURE_START)
|
||||
#define HOUSE1 (HOUSE0 + 1)
|
||||
#define HOUSE2 (HOUSE1 + 1)
|
||||
#define HOUSE3 (HOUSE2 + 1)
|
||||
#define TRAIN_STATION 0x5809
|
||||
#define TRAIN0 0x580A
|
||||
#define TRAIN1 0x580B
|
||||
#define SHOP0 (HOUSE3 + 1)
|
||||
#define SHOP1 (SHOP0 + 1)
|
||||
#define SHOP2 (SHOP1 + 1)
|
||||
#define SHOP3 (SHOP2 + 1)
|
||||
#define POST_OFFICE (SHOP3 + 1)
|
||||
#define TRAIN_STATION (POST_OFFICE + 1)
|
||||
#define TRAIN0 (TRAIN_STATION + 1)
|
||||
#define TRAIN1 (TRAIN0 + 1)
|
||||
#define POLICE_STATION (TRAIN1 + 1)
|
||||
#define WATERFALL_SOUTH (POLICE_STATION + 1)
|
||||
#define WATERFALL_EAST (WATERFALL_SOUTH + 1)
|
||||
#define WATERFALL_WEST (WATERFALL_EAST + 1)
|
||||
#define SIGN00 (WATERFALL_WEST + 1)
|
||||
#define SIGN01 (SIGN00 + 1)
|
||||
#define SIGN02 (SIGN01 + 1)
|
||||
#define SIGN03 (SIGN02 + 1)
|
||||
#define SIGN04 (SIGN03 + 1)
|
||||
#define SIGN05 (SIGN04 + 1)
|
||||
#define SIGN06 (SIGN05 + 1)
|
||||
#define SIGN07 (SIGN06 + 1)
|
||||
#define SIGN08 (SIGN07 + 1)
|
||||
#define SIGN09 (SIGN08 + 1)
|
||||
#define SIGN10 (SIGN09 + 1)
|
||||
#define SIGN11 (SIGN10 + 1)
|
||||
#define SIGN12 (SIGN11 + 1)
|
||||
#define SIGN13 (SIGN12 + 1)
|
||||
#define SIGN14 (SIGN13 + 1)
|
||||
#define SIGN15 (SIGN14 + 1)
|
||||
#define SIGN16 (SIGN15 + 1)
|
||||
#define SIGN17 (SIGN16 + 1)
|
||||
#define SIGN18 (SIGN17 + 1)
|
||||
#define SIGN19 (SIGN18 + 1)
|
||||
#define SIGN20 (SIGN19 + 1)
|
||||
#define WISHING_WELL (SIGN20 + 1)
|
||||
#define BROKER_TENT (WISHING_WELL + 1)
|
||||
#define FORTUNE_TENT (BROKER_TENT + 1)
|
||||
#define DESIGNER_CAR (FORTUNE_TENT + 1)
|
||||
#define KAMAKURA (DESIGNER_CAR + 1)
|
||||
#define SAKURA_TABLE0 (KAMAKURA + 1)
|
||||
#define SAKURA_TABLE1 (SAKURA_TABLE0 + 1)
|
||||
#define AEROBICS_RADIO (SAKURA_TABLE1 + 1)
|
||||
#define FIREWORKS_STALL0 (AEROBICS_RADIO + 1)
|
||||
#define FIREWORKS_STALL1 (FIREWORKS_STALL0 + 1)
|
||||
#define NEWYEAR_SHRINE0 (FIREWORKS_STALL1 + 1)
|
||||
#define NEWYEAR_SHRINE1 (NEWYEAR_SHRINE0 + 1)
|
||||
#define NEWYEAR_TABLE (NEWYEAR_SHRINE1 + 1)
|
||||
#define NEWYEAR_COUNTDOWN0 (NEWYEAR_TABLE + 1)
|
||||
#define NEWYEAR_COUNTDOWN1 (NEWYEAR_COUNTDOWN0 + 1)
|
||||
#define SPORTSFAIR_BALLS_RED (NEWYEAR_COUNTDOWN1 + 1)
|
||||
#define SPORTSFAIR_BALLS_WHITE (SPORTSFAIR_BALLS_RED + 1)
|
||||
#define SPORTSFAIR_BASKET_RED (SPORTSFAIR_BALLS_WHITE + 1)
|
||||
#define SPORTSFAIR_BASKET_WHITE (SPORTSFAIR_BASKET_RED + 1)
|
||||
#define FISHCHECK_STAND0 (SPORTSFAIR_BASKET_WHITE + 1)
|
||||
#define FISHCHECK_STAND1 (FISHCHECK_STAND0 + 1)
|
||||
#define KOINOBORI_WINDSOCK (FISHCHECK_STAND1 + 1)
|
||||
#define DUMP (KOINOBORI_WINDSOCK + 1)
|
||||
#define WINDMILL0 (DUMP + 1)
|
||||
#define WINDMILL1 (WINDMILL0 + 1)
|
||||
#define WINDMILL2 (WINDMILL1 + 1)
|
||||
#define WINDMILL3 (WINDMILL2 + 1)
|
||||
#define WINDMILL4 (WINDMILL3 + 1)
|
||||
#define LOTUS (WINDMILL4 + 1)
|
||||
#define MIKANBOX (LOTUS + 1)
|
||||
#define DOUZOU (MIKANBOX + 1) // train station statue
|
||||
#define TOUDAI (DOUZOU + 1) // lighthouse
|
||||
#define GHOG (TOUDAI + 1)
|
||||
#define HTABLE0 (GHOG + 1)
|
||||
#define HTABLE1 (HTABLE0 + 1)
|
||||
#define HTABLE2 (HTABLE1 + 1)
|
||||
#define TENT (HTABLE2 + 1)
|
||||
#define MUSEUM (TENT + 1)
|
||||
#define BRIDGE_A0 (MUSEUM + 1)
|
||||
#define BRIDGE_A1 (BRIDGE_A0 + 1)
|
||||
#define NEEDLEWORK_SHOP (BRIDGE_A1 + 1)
|
||||
#define FLAG (NEEDLEWORK_SHOP + 1)
|
||||
#define BOAT (FLAG + 1)
|
||||
#define COTTAGE_MY (BOAT + 1)
|
||||
#define COTTAGE_NPC (COTTAGE_MY + 1)
|
||||
#define PORT_SIGN (COTTAGE_NPC + 1)
|
||||
#define STRUCTURE_END (PORT_SIGN + 1)
|
||||
|
||||
#define ETC_START 0x8000
|
||||
#define ETC_AIRPLANE ETC_START
|
||||
|
||||
+1
-1
@@ -4,6 +4,6 @@
|
||||
#include "types.h"
|
||||
#include "dolphin/vi.h"
|
||||
|
||||
void viBlack(BOOL);
|
||||
extern void viBlack(int black);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user