mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-22 22:24:16 -04:00
Implement & link ac_sample.c
This commit is contained in:
@@ -138,6 +138,11 @@ zurumode.c:
|
||||
sys_ucode.c:
|
||||
.text: [0x8040F008, 0x8040F048]
|
||||
.data: [0x8065FA30, 0x8065FA40]
|
||||
ac_sample.c:
|
||||
.text: [0x8040F048, 0x8040F614]
|
||||
.rodata: [0x80643860, 0x80643868]
|
||||
.data: [0x8065FA40, 0x8065FAA0]
|
||||
.bss: [0x812F96A0, 0x812F96E0]
|
||||
ac_animal_logo.c:
|
||||
.text: [0x804104AC, 0x804117D4]
|
||||
.rodata: [0x80643918, 0x80643A88]
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
#ifndef AC_SAMPLE_H
|
||||
#define AC_SAMPLE_H
|
||||
|
||||
#include "types.h"
|
||||
#include "m_actor.h"
|
||||
#include "m_collision_obj.h"
|
||||
#include "c_keyframe.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct sample_actor_s {
|
||||
ACTOR actor_class;
|
||||
|
||||
cKF_SkeletonInfo_R_c keyframe;
|
||||
s_xyz work_area[8];
|
||||
s_xyz morph_area[8];
|
||||
|
||||
ClObjPipe_c stand;
|
||||
|
||||
int main_action;
|
||||
int draw_action;
|
||||
|
||||
char* obj_bank_ram_start; // maybe unused in AC? was used to exchange data on N64
|
||||
} SAMPLE_ACTOR;
|
||||
|
||||
extern ACTOR_PROFILE Sample_Profile;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -93,7 +93,7 @@ extern f32 cKF_HermitCalc(f32 t, f32 tension, f32 p0, f32 p1, f32 m0, f32 m1);
|
||||
extern void cKF_SkeletonInfo_subRotInterpolation(f32 t, s16* out, s16 rot1, s16 rot2);
|
||||
|
||||
extern void cKF_SkeletonInfo_R_ct(cKF_SkeletonInfo_R_c* keyframe, cKF_Skeleton_R_c* skeleton, cKF_Animation_R_c* animation, s_xyz* work_table, s_xyz* target_table);
|
||||
extern void cKF_SkeletonInfo_R_dt();
|
||||
extern void cKF_SkeletonInfo_R_dt(cKF_SkeletonInfo_R_c* keyframe);
|
||||
|
||||
extern void cKF_SkeletonInfo_R_init_standard_stop(cKF_SkeletonInfo_R_c* keyframe, cKF_Animation_R_c* animation, s_xyz* rotation_diff_table);
|
||||
extern void cKF_SkeletonInfo_R_init_standard_stop_morph(cKF_SkeletonInfo_R_c* keyframe, cKF_Animation_R_c* animation, s_xyz* rotation_diff_table, f32 morph);
|
||||
|
||||
@@ -18,6 +18,7 @@ typedef void (*mActor_proc)(ACTOR*, GAME*);
|
||||
|
||||
#define ACTOR_OBJ_BANK_NONE 0
|
||||
#define ACTOR_OBJ_BANK_3 3 /* TODO: rename, also likely an enum */
|
||||
#define ACTOR_OBJ_BANK_12 12
|
||||
|
||||
enum actor_part {
|
||||
ACTOR_PART_FG,
|
||||
@@ -139,6 +140,7 @@ typedef struct actor_info_s {
|
||||
|
||||
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);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
#ifndef M_COLLISION_OBJ_H
|
||||
#define M_COLLISION_OBJ_H
|
||||
|
||||
#include "types.h"
|
||||
#include "m_actor.h"
|
||||
#include "sys_math3d.h"
|
||||
#include "m_play_h.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
enum collision_type {
|
||||
ClObj_TYPE_JNT_SPH,
|
||||
ClObj_TYPE_PIPE,
|
||||
ClObj_TYPE_TRIS,
|
||||
|
||||
ClObj_TYPE_NUM
|
||||
};
|
||||
|
||||
typedef struct collision_obj_s {
|
||||
ACTOR* owner_actor; // actor which owns this collision object
|
||||
ACTOR* collided_actor; // actor which the owner collided with or NULL
|
||||
|
||||
u8 collision_flags0;
|
||||
u8 collision_flags1;
|
||||
|
||||
u8 collision_type;
|
||||
} ClObj_c;
|
||||
|
||||
typedef struct collision_elem_s {
|
||||
u8 flags;
|
||||
} ClObjElem_c;
|
||||
|
||||
typedef struct collision_pipe_attribute_s {
|
||||
Math3D_pipe_c pipe;
|
||||
} ClObjPipeAttr_c;
|
||||
|
||||
typedef struct collision_pipe_s {
|
||||
ClObj_c collision_obj;
|
||||
ClObjElem_c element;
|
||||
ClObjPipeAttr_c attribute;
|
||||
} ClObjPipe_c;
|
||||
|
||||
/* static data */
|
||||
|
||||
typedef struct collision_obj_data_s {
|
||||
u8 collision_flags0;
|
||||
u8 collision_flags1;
|
||||
u8 type;
|
||||
} ClObjData_c;
|
||||
|
||||
typedef struct collision_obj_elem_data_s {
|
||||
u8 flags;
|
||||
} ClObjElemData_c;
|
||||
|
||||
typedef struct collision_obj_pipe_attr_data_s {
|
||||
Math3D_pipe_c pipe;
|
||||
} ClObjPipeAttrData_c;
|
||||
|
||||
typedef struct collision_obj_pipe_data_s {
|
||||
ClObjData_c collision_data;
|
||||
ClObjElemData_c element_data;
|
||||
ClObjPipeAttrData_c attribute_data;
|
||||
} ClObjPipeData_c;
|
||||
|
||||
#define Cl_COLLIDER_NUM 50
|
||||
typedef struct collision_check_s {
|
||||
u16 flags;
|
||||
int collider_num;
|
||||
ClObj_c* collider_table[Cl_COLLIDER_NUM];
|
||||
} CollisionCheck_c;
|
||||
|
||||
extern void ClObjPipe_ct(GAME_PLAY* play, ClObjPipe_c* pipe);
|
||||
extern void ClObjPipe_dt(GAME_PLAY* play, ClObjPipe_c* pipe);
|
||||
extern void ClObjPipe_set5(GAME_PLAY* play, ClObjPipe_c* pipe, ACTOR* owner, ClObjPipeData_c* data);
|
||||
extern void CollisionCheck_Uty_ActorWorldPosSetPipeC(ACTOR* actor, ClObjPipe_c* col_pipe);
|
||||
extern int CollisionCheck_setOC(GAME_PLAY* play, CollisionCheck_c* collision_check, ClObj_c* col_obj);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,24 @@
|
||||
#ifndef M_DEMO_H
|
||||
#define M_DEMO_H
|
||||
|
||||
#include "types.h"
|
||||
#include "m_actor_type.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef void (*mDemo_REQUEST_PROC)(ACTOR*);
|
||||
|
||||
extern int mDemo_Request(int type, ACTOR* actor, mDemo_REQUEST_PROC request_proc);
|
||||
extern void mDemo_Set_msg_num(int msg_num);
|
||||
extern int mDemo_Check(int type, ACTOR* actor);
|
||||
extern int mDemo_Check_DiffAngle_forTalk(s16 angle);
|
||||
extern int mDemo_Check_ListenAble();
|
||||
extern void mDemo_Set_ListenAble();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
+6
-9
@@ -9,19 +9,16 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/* TODO: fill out message struct */
|
||||
typedef struct message_window_s M_MSG_WINDOW;
|
||||
typedef struct message_window_s mMsg_Window_c;
|
||||
|
||||
extern int mMsg_Get_Length_String(u8* buf, size_t buf_size);
|
||||
|
||||
extern M_MSG_WINDOW* mMsg_Get_base_window_p();
|
||||
|
||||
extern void mMsg_Set_free_str(M_MSG_WINDOW* msg, int free_str_no, u8* str, size_t str_size);
|
||||
|
||||
extern mMsg_Window_c* mMsg_Get_base_window_p();
|
||||
extern void mMsg_Set_free_str(mMsg_Window_c* msg, int free_str_no, u8* str, int str_size);
|
||||
extern void mMsg_debug_draw(gfxprint_t* gfxprint);
|
||||
|
||||
extern void mMsg_aram_init();
|
||||
|
||||
extern int mMsg_Check_MainHide(M_MSG_WINDOW* msg);
|
||||
extern int mMsg_Check_MainHide(mMsg_Window_c* msg);
|
||||
extern void mMsg_Set_item_str(mMsg_Window_c* msg_win, int str_no, u8* item_str, int str_len);
|
||||
extern void mMsg_Set_mail_str(mMsg_Window_c* msg_win, int str_no, u8* str, int str_len);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -472,6 +472,9 @@ extern int mNT_check_unknown(mActor_name_t item_no);
|
||||
#define TRAIN0 0x580A
|
||||
#define TRAIN1 0x580B
|
||||
|
||||
#define MISC_ACTOR_START 0x9000
|
||||
#define MISC_ACTOR_SAMPLE MISC_ACTOR_START
|
||||
|
||||
#define SP_NPC_START 0xD000
|
||||
#define SP_NPC_ARTIST (SP_NPC_START + 0) // D000
|
||||
#define SP_NPC_BROKER (SP_NPC_START + 1) // D001
|
||||
|
||||
+6
-3
@@ -10,7 +10,9 @@
|
||||
#include "m_pause.h"
|
||||
#include "m_field_info.h"
|
||||
#include "m_fbdemo_wipe.h"
|
||||
#include "m_collision_obj.h"
|
||||
#include "m_play_h.h"
|
||||
#include "m_scene.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -23,7 +25,8 @@ struct game_play_s {
|
||||
/* 0x00E0 */ int _00E0;
|
||||
/* 0x00E4 */ mFI_block_tbl_c block_table;
|
||||
/* 0x00F4 */ mFI_block_tbl_c last_block_table;
|
||||
/* 0x0104 */ u8 _0104[0x1A68 - 0x0104];
|
||||
/* 0x0104 */ u8 _0104[0x0110 - 0x0104];
|
||||
/* 0x0110 */ Object_Exchange_c object_exchange;
|
||||
/* 0x1A68 */ View view;
|
||||
/* 0x1B88 */ Camera2 camera;
|
||||
/* 0x1CC0 */ u8 _1CC0[0x1DA0 - 0x1CC0];
|
||||
@@ -38,10 +41,10 @@ struct game_play_s {
|
||||
/* 0x20D1 */ u8 fb_wipe_type;
|
||||
/* 0x20D2 */ u8 fb_mode;
|
||||
/* 0x20D3 */ u8 fb_wipe_mode;
|
||||
/* 0x20D4 */ //int _20D4;
|
||||
/* 0x20D8 */ fbdemo_wipe fbdemo_wipe;
|
||||
/* 0x2318 */ fbdemo_fade color_fade;
|
||||
/* 0x2328 */ u8 _2328[0x2600 - 0x2328];
|
||||
/* 0x2328 */ CollisionCheck_c collision_check;
|
||||
/* 0x23F8 */ u8 _23F8[0x2600 - 0x23F8];
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ extern Gfx* gfx_tex_scroll2(Gfx** gfxpp, u32 x, u32 y, int width, int height);
|
||||
extern void DisplayList_initialize(GRAPH* graph, u32 clear_r, u32 clear_g, u32 clear_b, GAME* game);
|
||||
extern void fade_black_draw(Gfx** gfxpp, u32 alpha);
|
||||
extern void rect_moji(GRAPH* graph);
|
||||
extern void _texture_z_light_fog_prim(GRAPH* graph);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -20,6 +20,20 @@ typedef struct door_data_s {
|
||||
u8 pad[3]; // possibly necessary due to struct copy
|
||||
} Door_data_c;
|
||||
|
||||
#define mSc_OBJECT_BANK_NUM 70
|
||||
|
||||
typedef struct object_bank_s {
|
||||
s16 bank_id;
|
||||
char* ram_start;
|
||||
// TODO: others
|
||||
u8 _08[0x5C - 8];
|
||||
} Object_Bank_c;
|
||||
|
||||
typedef struct object_exchange_s {
|
||||
Object_Bank_c banks[mSc_OBJECT_BANK_NUM];
|
||||
u8 _1928[0x1958-0x1928];
|
||||
} Object_Exchange_c;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -8,6 +8,13 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct math_3d_pipe_s {
|
||||
s16 radius;
|
||||
s16 height;
|
||||
s16 offset;
|
||||
s_xyz center;
|
||||
} Math3D_pipe_c;
|
||||
|
||||
extern f32 Math3DVecLength(xyz_t* vec);
|
||||
|
||||
extern xyz_t ZeroVec;
|
||||
|
||||
+195
@@ -0,0 +1,195 @@
|
||||
#include "ac_sample.h"
|
||||
|
||||
#include "m_demo.h"
|
||||
#include "m_font.h"
|
||||
#include "m_msg.h"
|
||||
#include "m_mail.h"
|
||||
#include "m_rcp.h"
|
||||
#include "m_name_table.h"
|
||||
#include "m_play.h"
|
||||
|
||||
static ClObjPipeData_c Ac_Sample_OcInfoData_forStand = {
|
||||
{ 0x39, 0x20, ClObj_TYPE_PIPE }, // collision data
|
||||
{ 1 }, // element data
|
||||
// Pipe specs
|
||||
{
|
||||
30, // radius
|
||||
60, // height
|
||||
0, // offset
|
||||
|
||||
{ 0, 0, 0 } // center
|
||||
}
|
||||
};
|
||||
|
||||
static void Ac_Sample_ct_forCorect(ACTOR* actor, GAME* game) {
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
SAMPLE_ACTOR* sample = (SAMPLE_ACTOR*)actor;
|
||||
ClObjPipe_ct(play, &sample->stand);
|
||||
ClObjPipe_set5(play, &sample->stand, (ACTOR*)actor, &Ac_Sample_OcInfoData_forStand);
|
||||
}
|
||||
|
||||
static void Ac_Sample_Excute_Corect(SAMPLE_ACTOR* actor, GAME_PLAY* play) {
|
||||
ClObjPipe_c* stand = &actor->stand;
|
||||
|
||||
CollisionCheck_Uty_ActorWorldPosSetPipeC((ACTOR*)actor, stand);
|
||||
CollisionCheck_setOC(play, &play->collision_check, (ClObj_c*)stand);
|
||||
}
|
||||
|
||||
static void Ac_Sample_Actor_dt(ACTOR* actor, GAME* game) {
|
||||
SAMPLE_ACTOR* sample = (SAMPLE_ACTOR*)actor;
|
||||
cKF_SkeletonInfo_R_c* keyframe = &sample->keyframe;
|
||||
if (actor->child_actor != NULL) {
|
||||
Actor_delete(actor->child_actor);
|
||||
}
|
||||
|
||||
cKF_SkeletonInfo_R_dt(keyframe);
|
||||
ClObjPipe_dt((GAME_PLAY*)game, &sample->stand);
|
||||
}
|
||||
|
||||
static void Ac_Sample_Animation_Base(SAMPLE_ACTOR* actor) {
|
||||
cKF_SkeletonInfo_R_play(&actor->keyframe);
|
||||
}
|
||||
|
||||
static void Ac_Sample_Actor_wait_demo_ct(ACTOR* actor) {
|
||||
// ドリキャス "Dreamcast"
|
||||
static u8 str0[16] = { 0xDC, 0xB8, 0x97, 0x8C, 0x9D, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE };
|
||||
|
||||
// プレステ2 "Playstation 2"
|
||||
static u8 str9[5] = { 0xE4, 0xBA, 0x9D, 0xA3, 0x32 };
|
||||
|
||||
static u8 str_mail[64];
|
||||
|
||||
mDemo_Set_msg_num(9);
|
||||
mMsg_Set_item_str(mMsg_Get_base_window_p(), 0, str0, 6);
|
||||
mMsg_Set_item_str(mMsg_Get_base_window_p(), 4, str9, 5);
|
||||
mMsg_Set_free_str(mMsg_Get_base_window_p(), 0, str0, 16);
|
||||
mMsg_Set_free_str(mMsg_Get_base_window_p(), 9, str9, 5);
|
||||
mMsg_Set_mail_str(mMsg_Get_base_window_p(), 0, str_mail, 64);
|
||||
}
|
||||
|
||||
static void Ac_Sample_Actor_main_wait(SAMPLE_ACTOR* actor, GAME_PLAY* play) {
|
||||
Ac_Sample_Animation_Base(actor);
|
||||
Actor_world_to_eye((ACTOR*)actor, 48.0f);
|
||||
Ac_Sample_Excute_Corect(actor, play);
|
||||
|
||||
if (mDemo_Check(7, (ACTOR*)actor) == FALSE) {
|
||||
mDemo_Request(7, (ACTOR*)actor, &Ac_Sample_Actor_wait_demo_ct);
|
||||
}
|
||||
else {
|
||||
actor->main_action = 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void Ac_Sample_Actor_main_talk(SAMPLE_ACTOR* actor, GAME_PLAY* play) {
|
||||
Ac_Sample_Animation_Base(actor);
|
||||
Actor_world_to_eye((ACTOR*)actor, 48.0f);
|
||||
Ac_Sample_Excute_Corect(actor, play);
|
||||
|
||||
if (mDemo_Check(7, (ACTOR*)actor)) {
|
||||
s16 angle = add_calc_short_angle2(&actor->actor_class.shape_info.rotation.y, actor->actor_class.player_angle_y, 1.0f, 5000, 100);
|
||||
actor->actor_class.world_rotation.y = actor->actor_class.shape_info.rotation.y;
|
||||
|
||||
if (mDemo_Check_ListenAble() == FALSE && mDemo_Check_DiffAngle_forTalk(angle)) {
|
||||
mDemo_Set_ListenAble();
|
||||
}
|
||||
}
|
||||
else {
|
||||
actor->main_action = 0;
|
||||
}
|
||||
}
|
||||
|
||||
typedef void (*Ac_Sample_Actor_PROC)(SAMPLE_ACTOR*, GAME_PLAY*);
|
||||
|
||||
static void Ac_Sample_Actor_main(ACTOR* actor, GAME* game) {
|
||||
static Ac_Sample_Actor_PROC proc[] = { &Ac_Sample_Actor_main_wait, &Ac_Sample_Actor_main_talk };
|
||||
|
||||
SAMPLE_ACTOR* sample = (SAMPLE_ACTOR*)actor;
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
|
||||
if (sample->main_action < 0 || sample->main_action >= 2 || proc[sample->main_action] == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
(*proc[sample->main_action])(sample, play);
|
||||
}
|
||||
|
||||
extern cKF_Skeleton_R_c cKF_bs_r_hnw;
|
||||
extern cKF_Animation_R_c cKF_ba_r_hnw_move;
|
||||
|
||||
static void Ac_Sample_Actor_ct(ACTOR* actor, GAME* game) {
|
||||
cKF_SkeletonInfo_R_c* keyframe;
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
SAMPLE_ACTOR* sample = (SAMPLE_ACTOR*)actor;
|
||||
Object_Bank_c* bank;
|
||||
|
||||
keyframe = &sample->keyframe;
|
||||
cKF_SkeletonInfo_R_ct(keyframe, &cKF_bs_r_hnw, &cKF_ba_r_hnw_move, sample->work_area, sample->morph_area);
|
||||
cKF_SkeletonInfo_R_init_standard_stop(keyframe, &cKF_ba_r_hnw_move, NULL);
|
||||
Ac_Sample_ct_forCorect(actor, game);
|
||||
|
||||
sample->draw_action = 1;
|
||||
bank = &play->object_exchange.banks[actor->data_bank_id];
|
||||
sample->obj_bank_ram_start = bank->ram_start;
|
||||
}
|
||||
|
||||
extern u8 hnw_tmem_txt[];
|
||||
extern u16 hnw_face[];
|
||||
|
||||
static void Ac_Sample_Actor_draw_normal(SAMPLE_ACTOR* actor, GAME_PLAY* play) {
|
||||
cKF_SkeletonInfo_R_c* keyframe = &actor->keyframe;
|
||||
Mtx* m = GRAPH_ALLOC_TYPE(play->game.graph, Mtx, keyframe->skeleton->num_shown_joints);
|
||||
|
||||
if (m != NULL) {
|
||||
GRAPH* g;
|
||||
Gfx* gfx;
|
||||
_texture_z_light_fog_prim(play->game.graph);
|
||||
|
||||
g = play->game.graph;
|
||||
OPEN_DISP(g);
|
||||
gfx = NOW_POLY_OPA_DISP;
|
||||
|
||||
gDPLoadTextureBlockS(
|
||||
gfx++,
|
||||
hnw_tmem_txt, G_IM_FMT_I, G_IM_SIZ_8b,
|
||||
64, 64,
|
||||
0,
|
||||
G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP,
|
||||
7, 7,
|
||||
G_TX_NOLOD, G_TX_NOLOD
|
||||
);
|
||||
gDPLoadTLUT_pal16(gfx++, 15, hnw_face); // pal is different
|
||||
gDPSetTextureLUT(gfx++, G_TT_RGBA16);
|
||||
|
||||
SET_POLY_OPA_DISP(gfx);
|
||||
CLOSE_DISP(g);
|
||||
|
||||
cKF_Si3_draw_R_SV((GAME*)play, keyframe, m, NULL, NULL, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void Ac_Sample_Actor_draw(ACTOR* actor, GAME* game) {
|
||||
static Ac_Sample_Actor_PROC proc[] = { (Ac_Sample_Actor_PROC)&none_proc2, &Ac_Sample_Actor_draw_normal };
|
||||
|
||||
SAMPLE_ACTOR* sample = (SAMPLE_ACTOR*)actor;
|
||||
GAME_PLAY* play = (GAME_PLAY*)game;
|
||||
|
||||
if (sample->draw_action < 0 || sample->draw_action >= 2 || proc[sample->draw_action] == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
(*proc[sample->draw_action])(sample, play);
|
||||
}
|
||||
|
||||
ACTOR_PROFILE Sample_Profile = {
|
||||
0x02, // TODO: enum
|
||||
ACTOR_PART_BG,
|
||||
0,
|
||||
MISC_ACTOR_SAMPLE,
|
||||
ACTOR_OBJ_BANK_12,
|
||||
sizeof(SAMPLE_ACTOR),
|
||||
&Ac_Sample_Actor_ct,
|
||||
&Ac_Sample_Actor_dt,
|
||||
&Ac_Sample_Actor_main,
|
||||
&Ac_Sample_Actor_draw,
|
||||
NULL
|
||||
};
|
||||
+1
-1
@@ -227,7 +227,7 @@ extern void cKF_SkeletonInfo_R_ct(cKF_SkeletonInfo_R_c* keyframe,
|
||||
keyframe->target_joint = target_table;
|
||||
}
|
||||
|
||||
extern void cKF_SkeletonInfo_R_dt() {}
|
||||
extern void cKF_SkeletonInfo_R_dt(cKF_SkeletonInfo_R_c* keyframe) {}
|
||||
|
||||
extern void cKF_SkeletonInfo_R_init_standard_stop(
|
||||
cKF_SkeletonInfo_R_c* keyframe, cKF_Animation_R_c* animation,
|
||||
|
||||
Reference in New Issue
Block a user