mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-09-03 00:53:49 -04:00
Implement & link ac_douzou.c
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "types.h"
|
||||
#include "m_actor.h"
|
||||
#include "ac_structure.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
||||
+131
-3
@@ -4,6 +4,7 @@
|
||||
#include "types.h"
|
||||
#include "m_actor.h"
|
||||
#include "m_actor_dlftbls.h"
|
||||
#include "c_keyframe.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -34,7 +35,7 @@ enum structure_type {
|
||||
aSTR_TYPE_POLICE_BOX,
|
||||
aSTR_TYPE_FALLS,
|
||||
aSTR_TYPE_FALLSESW,
|
||||
aSTR_TYPE_SIGN,
|
||||
aSTR_TYPE_RESERVE,
|
||||
aSTR_TYPE_SHRINE,
|
||||
aSTR_TYPE_BRSHOP,
|
||||
aSTR_TYPE_BUGGY,
|
||||
@@ -73,6 +74,109 @@ enum structure_type {
|
||||
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;
|
||||
|
||||
@@ -83,11 +187,35 @@ 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)(ACTOR*, GAME*);
|
||||
|
||||
struct actor_structure_s {
|
||||
ACTOR actor_class;
|
||||
u8 _174[0x2B0 - 0x174];
|
||||
int keyframe_state;
|
||||
cKF_SkeletonInfo_R_c keyframe;
|
||||
int keyframe_saved_keyframe;
|
||||
s_xyz work_area[15];
|
||||
s_xyz morph_area[15];
|
||||
aSTR_MOVE_PROC action_proc;
|
||||
int _2A4;
|
||||
int structure_type; /* aSTR_TYPE_* */
|
||||
int structure_pal; /* aSTR_PAL_* */
|
||||
int request_type;
|
||||
u8 _2B4[0x2DC - 0x2B4];
|
||||
int action;
|
||||
|
||||
/* general purpose members with unique usage between structure actors */
|
||||
int arg0;
|
||||
int arg1;
|
||||
int arg2;
|
||||
int arg3;
|
||||
|
||||
/* general purpose float members with unique usage between structure actors*/
|
||||
f32 arg0_f;
|
||||
f32 arg1_f;
|
||||
f32 arg2_f;
|
||||
f32 arg3_f;
|
||||
|
||||
u32 season;
|
||||
};
|
||||
|
||||
typedef struct actor_overlay_info_s {
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
#ifndef BG_ITEM_H_H
|
||||
#define BG_ITEM_H_H
|
||||
|
||||
#include "types.h"
|
||||
#include "PR/mbi.h"
|
||||
#include "game_h.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct background_item_shadow_s {
|
||||
u32 vtx_num;
|
||||
u8* vtx_fix_flags;
|
||||
f32 size;
|
||||
Vtx* vtx;
|
||||
Gfx* gfx;
|
||||
} bIT_ShadowData_c;
|
||||
|
||||
typedef void (*bIT_SHADOW_DRAW_PROC)(GAME*, bIT_ShadowData_c*, int);
|
||||
|
||||
typedef struct background_item_clip_s {
|
||||
void* _00;
|
||||
bIT_SHADOW_DRAW_PROC draw_shadow_proc;
|
||||
void* _08[(0x54 - 0x08) / sizeof(void*)];
|
||||
} bIT_Clip_c;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -15,7 +15,7 @@ enum effect_type {
|
||||
eEC_EFFECT_MUKA,
|
||||
eEC_EFFECT_WARAU,
|
||||
/* TODO: finish */
|
||||
|
||||
eEC_DOUZOU_LIGHT = 101,
|
||||
eEC_EFFECT_NUM = 126
|
||||
};
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ typedef void (*mActor_proc)(ACTOR*, GAME*);
|
||||
#define ACTOR_STATE_NONE 0
|
||||
#define ACTOR_STATE_NO_MOVE_WHILE_CULLED (1 << 4)
|
||||
#define ACTOR_STATE_NO_DRAW_WHILE_CULLED (1 << 5)
|
||||
#define ACTOR_STATE_11 (1 << 11)
|
||||
#define ACTOR_STATE_CAN_MOVE_IN_DEMO_SCENES (1 << 29)
|
||||
|
||||
#define ACTOR_OBJ_BANK_NONE 0
|
||||
@@ -400,6 +401,7 @@ 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 Setpos_HiliteReflect_init(xyz_t* wpos, GAME_PLAY* play);
|
||||
|
||||
extern void mAc_ActorShadowCircle(ACTOR* actor, LightsN* lightsN, GAME_PLAY* play);
|
||||
extern void mAc_ActorShadowEllipse(ACTOR* actor, LightsN* lightsN, GAME_PLAY* play);
|
||||
|
||||
+4
-1
@@ -8,6 +8,7 @@
|
||||
#include "ac_animal_logo.h"
|
||||
#include "ef_effect_control.h"
|
||||
#include "m_demo.h"
|
||||
#include "bg_item_h.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -15,7 +16,9 @@ extern "C" {
|
||||
|
||||
/* sizeof(Clip_c) == 0x104 */
|
||||
typedef struct clip_s {
|
||||
/* 0x000 */ void* _000[(0x07C - 0x000) / sizeof(void*)];
|
||||
/* 0x000 */ void* _000[(0x074 - 0x000) / sizeof(void*)];
|
||||
/* 0x074 */ bIT_Clip_c* bg_item_clip;
|
||||
/* 0x078 */ void* _078;
|
||||
/* 0x07C */ aINS_Clip_c* insect_clip;
|
||||
/* 0x080 */ void* _080[(0x08C - 0x080) / sizeof(void*)];
|
||||
/* 0x08C */ aSTR_Clip_c* structure_clip;
|
||||
|
||||
@@ -102,6 +102,7 @@ extern f32 mCoBG_GetBgY_OnlyCenter_FromWpos2(xyz_t wpos, f32 foot_dist);
|
||||
extern int mCoBG_Attribute2CheckPlant(u32 attribute, const xyz_t* wpos);
|
||||
extern void mCoBG_BgCheckControll(xyz_t* reverse_pos, ACTOR* actor, f32 check_range, f32 offset_y, s16 wall_attr_check, s16 no_reverse, s16 check_type);
|
||||
extern int mCoBG_Height2GetLayer(f32 height);
|
||||
extern void mCoBG_SetPlussOffset(xyz_t wpos, s16 offset, s16 new_attrib);
|
||||
|
||||
extern f32 mCoBG_GetWaterHeight_File(xyz_t wpos, char* file, int line);
|
||||
#define mCoBG_GetWaterHeight(wpos) mCoBG_GetWaterHeight_File(wpos, __FILE__, __LINE__)
|
||||
|
||||
@@ -8,6 +8,43 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
enum demo_type {
|
||||
mDemo_TYPE_NONE,
|
||||
mDemo_TYPE_SCROLL,
|
||||
mDemo_TYPE_2,
|
||||
mDemo_TYPE_DOOR,
|
||||
mDemo_TYPE_4,
|
||||
mDemo_TYPE_SCROLL2,
|
||||
mDemo_TYPE_DOOR2,
|
||||
mDemo_TYPE_TALK,
|
||||
mDemo_TYPE_SPEAK,
|
||||
mDemo_TYPE_REPORT,
|
||||
mDemo_TYPE_SPEECH,
|
||||
mDemo_TYPE_OUTDOOR,
|
||||
mDemo_TYPE_12,
|
||||
mDemo_TYPE_EVENTMSG,
|
||||
mDemo_TYPE_EVENTMSG2,
|
||||
mDemo_TYPE_15,
|
||||
mDemo_TYPE_SCROLL3,
|
||||
|
||||
mDemo_TYPE_NUM
|
||||
};
|
||||
|
||||
enum demo_order_type {
|
||||
mDemo_ORDER_PLAYER,
|
||||
mDemo_ORDER_1,
|
||||
mDemo_ORDER_2,
|
||||
mDemo_ORDER_3,
|
||||
mDemo_ORDER_NPC0,
|
||||
mDemo_ORDER_NPC1,
|
||||
mDemo_ORDER_NPC2,
|
||||
mDemo_ORDER_7,
|
||||
mDemo_ORDER_8,
|
||||
mDemo_ORDER_QUEST,
|
||||
|
||||
mDemo_ORDER_NUM
|
||||
};
|
||||
|
||||
typedef void (*mDemo_REQUEST_PROC)(ACTOR*);
|
||||
|
||||
typedef struct demo_clip_s {
|
||||
@@ -33,6 +70,10 @@ extern ACTOR* mDemo_Get_talk_actor();
|
||||
extern void mDemo_Set_OrderValue(int type, int idx, u16 value);
|
||||
extern u16 mDemo_Get_OrderValue(int type, int idx);
|
||||
extern void mDemo_Set_talk_return_demo_wait(u8 value);
|
||||
extern void mDemo_Set_talk_turn(u8 value);
|
||||
extern void mDemo_Set_talk_display_name(u8 value);
|
||||
extern void mDemo_Set_camera(u8 value);
|
||||
extern void mDemo_Set_talk_window_color(rgba_t* color);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -140,6 +140,8 @@ extern mFI_sound_source_info_c* mFI_GetSoundSourcePBlockNum(int block_x,int bloc
|
||||
extern int mFI_Wpos2UtNum(int* ut_x, int* ut_z, xyz_t wpos);
|
||||
extern void mFI_ClearFieldData();
|
||||
extern int mFI_SetFG_common(mActor_name_t item, xyz_t wpos, int update);
|
||||
extern mActor_name_t* mFI_GetUnitFG(xyz_t wpos);
|
||||
extern void mFI_Wpos2DepositOFF(xyz_t wpos);
|
||||
|
||||
extern void mFI_PrintNowBGNum(gfxprint_t* gfxprint);
|
||||
extern void mFI_PrintFgAttr(gfxprint_t* gfxprint);
|
||||
|
||||
@@ -677,8 +677,9 @@ extern int mNT_check_unknown(mActor_name_t item_no);
|
||||
#define DUMMY_START 0xF000
|
||||
#define DUMMY_HANIWA0 0xF0FB
|
||||
#define DUMMY_HANIWA1 (DUMMY_HANIWA0 + 1)
|
||||
#define DUMMY_HANIWA2 (DUMMY_HANIWA2 + 1)
|
||||
#define DUMMY_HANIWA2 (DUMMY_HANIWA1 + 1)
|
||||
#define DUMMY_HANIWA3 (DUMMY_HANIWA2 + 1)
|
||||
#define DUMMY_DOUZOU 0xF11D
|
||||
|
||||
#define RSV_DOOR 0xFE1B
|
||||
#define RSV_WALL_NO 0xFFFE /* interior wall item, no collision */
|
||||
|
||||
+12
-1
@@ -11,12 +11,23 @@ extern "C" {
|
||||
|
||||
typedef struct player_actor_s PLAYER_ACTOR;
|
||||
|
||||
#define mPlayer_FORCE_POSITION_ANGLE_NONE 0
|
||||
// where is (1 << 0) ??
|
||||
#define mPlayer_FORCE_POSITION_ANGLE_POSX (1 << 1)
|
||||
#define mPlayer_FORCE_POSITION_ANGLE_POSY (1 << 2)
|
||||
#define mPlayer_FORCE_POSITION_ANGLE_POSZ (1 << 3)
|
||||
#define mPlayer_FORCE_POSITION_ANGLE_ROTX (1 << 4)
|
||||
#define mPlayer_FORCE_POSITION_ANGLE_ROTY (1 << 5)
|
||||
#define mPlayer_FORCE_POSITION_ANGLE_ROTZ (1 << 6)
|
||||
|
||||
/* sizeof(struct player_actor_s) == 0x13A8 */
|
||||
struct player_actor_s {
|
||||
/* 0x0000 */ ACTOR actor_class;
|
||||
/* 0x0174 */ u8 tmp0174[0x1300 - 0x0174];
|
||||
/* 0x1300 */ void* (*get_door_label_proc)(GAME*);
|
||||
/* 0x1304 */ u8 tmp1304[0x1318 - 0x1304];
|
||||
/* 0x1304 */ u8 tmp1304[0x1310 - 0x1304];
|
||||
/* 0x1310 */ void (*Set_force_position_angle_proc)(GAME*, const xyz_t*, const s_xyz*, u8);
|
||||
/* 0x1314 */ u8 (*Get_force_position_angle_proc)(GAME*, xyz_t*, s_xyz*);
|
||||
/* 0x1318 */ int (*Get_WadeEndPos_proc)(GAME*, xyz_t*);
|
||||
/* 0x131C */ u8 tmp131C[0x13A8 - 0x131C];
|
||||
/* TODO: finish */
|
||||
|
||||
@@ -19,6 +19,7 @@ extern void mPlib_request_main_wait_type3(GAME_PLAY* play);
|
||||
extern void mPlib_Set_able_force_speak_label(ACTOR* actor);
|
||||
extern int mPlib_request_main_demo_walk_type1(GAME* game, f32 goal_x, f32 goal_z, f32 speed, int flag);
|
||||
extern void mPlib_Set_goal_player_demo_walk(f32 goal_x, f32 goal_z, f32 speed);
|
||||
extern void mPlib_Set_able_hand_all_item_in_demo(s8 enable);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -232,6 +232,7 @@ extern void mPr_RandomSetPlayerData_title_demo();
|
||||
extern int mPr_GetPossessionItemSumWithCond(Private_c* priv, mActor_name_t item_no, u32 cond);
|
||||
extern int mPr_SetFreePossessionItem(Private_c* priv, mActor_name_t item_no, u32 cond);
|
||||
extern void mPr_CopyPlayerName(u8* dst, Private_c* private_p);
|
||||
extern int mPr_GetPlayerName(u8* buf, int player_no);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ extern void Matrix_RotateX(s16 x, int flag);
|
||||
extern void Matrix_RotateY(s16 x, int flag);
|
||||
extern void Matrix_RotateZ(s16 x, int flag);
|
||||
extern void Matrix_rotateXYZ(s16 x, s16 y, s16 z, int flag);
|
||||
extern void Matrix_softcv3_mult(xyz_t* src, s_xyz* dest);
|
||||
extern void Matrix_softcv3_mult(xyz_t* pos, s_xyz* rot);
|
||||
extern void Matrix_softcv3_load(s_xyz* src, f32 x, f32 y, f32 z);
|
||||
extern Mtx* _MtxF_to_Mtx(MtxF* src, Mtx* dest);
|
||||
extern Mtx* _Matrix_to_Mtx(Mtx* dest);
|
||||
|
||||
Reference in New Issue
Block a user