diff --git a/configure.py b/configure.py index 2242a62f..c1f63120 100644 --- a/configure.py +++ b/configure.py @@ -141,7 +141,7 @@ n.rule( n.rule( "disasm_single", - command = "$disassembler $in $out -j $addr -q $disasmflags", + command = "$disassembler $in $out -f $addr -q -i $disasmflags", description = "ppcdis function disassembly $addr" ) diff --git a/include/m_actor.h b/include/m_actor.h index 236d2952..cf783186 100644 --- a/include/m_actor.h +++ b/include/m_actor.h @@ -8,6 +8,7 @@ #include "m_lights.h" #include "m_collision_bg.h" #include "m_collision_obj.h" +#include "m_actor_dlftbls.h" #include "libforest/gbi_extensions.h" #ifdef __cplusplus @@ -386,7 +387,7 @@ struct actor_s { /* 0x164 */ mActor_proc mv_proc; /* move */ /* 0x168 */ mActor_proc dw_proc; /* draw */ /* 0x16C */ mActor_proc sv_proc; /* save */ - /* 0x170 */ void* dlftbl; /* display list function table */ + /* 0x170 */ ACTOR_DLFTBL* dlftbl; /* display list function table */ }; #define mActor_NONE_PROC1 ((mActor_proc)none_proc1) @@ -408,13 +409,40 @@ typedef struct actor_data_s { s16 arg; } Actor_data; -extern void Actor_delete(ACTOR* actor); -extern ACTOR* Actor_info_fgName_search(Actor_info* actor_info, mActor_name_t fg_name, int part); extern void Actor_world_to_eye(ACTOR* actor, f32 eye_height); -extern void Shape_Info_init(ACTOR* actor, f32 ofs_y, mActor_shadow_proc shadow_proc, f32 shadow_size_x, f32 shadow_size_z); +extern void Actor_position_move(ACTOR* actor); +extern void Actor_position_speed_set(ACTOR* actor); 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 int Actor_player_look_direction_check(ACTOR* actor, s16 angle, GAME_PLAY* play); +extern void Shape_Info_init(ACTOR* actor, f32 ofs_y, mActor_shadow_proc shadow_proc, f32 shadow_size_x, f32 shadow_size_z); +extern void Actor_delete(ACTOR* actor); +extern int Actor_draw_actor_no_culling_check(ACTOR* actor); +extern int Actor_draw_actor_no_culling_check2(ACTOR* actor, xyz_t* camera_pos, f32 camera_w); +extern void Actor_info_ct(GAME* game, Actor_info* actor_info, Actor_data* player_data); +extern void Actor_info_dt(Actor_info* actor_info, GAME_PLAY* play); +extern void Actor_info_call_actor(GAME_PLAY* play, Actor_info* actor_info); +extern void Actor_info_draw_actor(GAME_PLAY* play, Actor_info* actor_info); +extern void Actor_free_overlay_area(ACTOR_DLFTBL* dlftbl); +extern void Actor_get_overlay_area(ACTOR_DLFTBL* dlftbl, int unused, size_t alloc_size); +extern void Actor_init_actor_class(ACTOR* actor, ACTOR_PROFILE* profile, ACTOR_DLFTBL* dlftbl, GAME_PLAY* play, int bank_idx, f32 x, f32 y, f32 z, s16 rot_x, s16 rot_y, s16 rot_z, s8 block_x, s8 block_z, s16 move_actor_list_idx, mActor_name_t name_id, s16 arg); +#ifndef MUST_MATCH +extern ACTOR* Actor_info_make_actor(Actor_info* actor_info, GAME* game, s16 profile_no, f32 x, f32 y, f32 z, s16 rot_x, s16 rot_y, s16 rot_z, s8 block_x, s8 block_z, s16 move_actor_list_idx, mActor_name_t name_id, s16 arg, s8 npc_info_idx, int data_bank_idx); +#else +extern asm ACTOR* Actor_info_make_actor(Actor_info* actor_info, GAME* game, s16 profile_no, f32 x, f32 y, f32 z, s16 rot_x, s16 rot_y, s16 rot_z, s8 block_x, s8 block_z, s16 move_actor_list_idx, mActor_name_t name_id, s16 arg, s8 npc_info_idx, int data_bank_idx); +#endif +extern ACTOR* Actor_info_make_child_actor(Actor_info* actor_info, ACTOR* parent_actor, GAME* game, s16 profile, f32 x, f32 y, f32 z, s16 rot_x, s16 rot_y, s16 rot_z, s16 move_actor_list_idx, mActor_name_t name_id, s16 arg, int data_bank_idx); +extern void restore_fgdata_all(GAME_PLAY* play); +extern void Actor_info_save_actor(GAME_PLAY* play); +extern ACTOR* Actor_info_delete(Actor_info* actor_info, ACTOR* actor, GAME* game); +extern ACTOR* Actor_info_name_search_sub(ACTOR* actor, s16 name); +extern ACTOR* Actor_info_name_search(Actor_info* actor_info, s16 name, int part); +extern ACTOR* Actor_info_fgName_search_sub(ACTOR* actor, mActor_name_t fgName); +extern ACTOR* Actor_info_fgName_search(Actor_info* actor_info, mActor_name_t fgName, int part); +extern Gfx* HiliteReflect_new(xyz_t* pos, xyz_t* eye, xyz_t* light_direction, GRAPH* graph, Gfx* gfx, Hilite** hilite); +extern Hilite* HiliteReflect_init(xyz_t* pos, xyz_t* eye, xyz_t* light_direction, GRAPH* graph); +extern Hilite* HiliteReflect_xlu_init(xyz_t* pos, xyz_t* eye, xyz_t* light_direction, GRAPH* graph); +extern void Setpos_HiliteReflect_init(xyz_t* pos, GAME_PLAY* play); +extern void Setpos_HiliteReflect_xlu_init(xyz_t* pos, 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); diff --git a/rel/m_actor.c b/rel/m_actor.c index 557f4cd6..a4b2219b 100644 --- a/rel/m_actor.c +++ b/rel/m_actor.c @@ -19,6 +19,11 @@ #include "m_malloc.h" #include "m_common_data.h" +#ifdef MUST_MATCH +#include "../tools/ppcdis/include/ppcdis.h" // "ppcdis.h" produces the same error +#include "orderstrings/8064d600_8064d604.inc" +#endif + extern void Actor_world_to_eye(ACTOR* actor, f32 eye_height) { /* Update position */ actor->eye.position.x = actor->world.position.x;