Implement & link ac_structure.c

This commit is contained in:
Cuyler36
2023-07-01 18:54:51 -04:00
parent a598c1689e
commit 7d9f3edf99
10 changed files with 562 additions and 12 deletions
+104 -1
View File
@@ -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
+2
View File
@@ -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);
+3 -3
View File
@@ -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();
+1
View File
@@ -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
View File
@@ -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
View File
@@ -4,6 +4,6 @@
#include "types.h"
#include "dolphin/vi.h"
void viBlack(BOOL);
extern void viBlack(int black);
#endif