mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
link ac_train_door
This commit is contained in:
@@ -171,6 +171,10 @@ ac_set_ovl_insect.c:
|
||||
.rodata: [0x80644E00, 0x80644E28]
|
||||
.data: [0x8068CDE8, 0x8068E3C0]
|
||||
.bss: [0x812FD048, 0x812FD270]
|
||||
ac_train_door.c:
|
||||
.text: [0x804AC2D8, 0x804AC510]
|
||||
.rodata: [0x80645F98, 0x80645FA8]
|
||||
.data: [0x8068F5C0, 0x8068F600]
|
||||
m_huusui_room_ovl.c:
|
||||
.text: [0x804D1BBC, 0x804D2164]
|
||||
.rodata: [0x80646558, 0x806465C8]
|
||||
|
||||
@@ -3,11 +3,25 @@
|
||||
|
||||
#include "types.h"
|
||||
#include "m_actor.h"
|
||||
#include "c_keyframe.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
typedef struct traindoor_s {
|
||||
ACTOR actor_class;
|
||||
u8 pad [0x17C - 0x174];
|
||||
cKF_SkeletonInfo_R_c keyframe;
|
||||
u8 pad2 [0x210 - 0x1ed];
|
||||
s_xyz work;
|
||||
u8 pad3 [0x22e - 0x216];
|
||||
s_xyz target;
|
||||
u8 pad4[0x24c - 0x234];
|
||||
int idle;
|
||||
}TRAINDOOR_ACTOR;
|
||||
|
||||
extern ACTOR_PROFILE TrainDoor_Profile;
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "types.h"
|
||||
#include "audio_defs.h"
|
||||
#include "m_lib.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -22,6 +23,8 @@ extern void sAdo_SysLevStart(u8 id);
|
||||
|
||||
extern void sAdo_SysTrgStart(u16 id);
|
||||
|
||||
extern void sAdo_OngenTrgStart(u16 id, xyz_t* pos);
|
||||
|
||||
extern void sAdos_KishaStatusLevel(f32 speed, u32 ongenNum1, u16 angle1, f32 distance1, u32 ongenNum2, u16 angle2, f32 distance2);
|
||||
extern void sAdos_KishaStatusTrg(u8 state);
|
||||
|
||||
|
||||
@@ -89,6 +89,8 @@ typedef int (*cKF_draw_callback)(GAME*, cKF_SkeletonInfo_R_c*, int, Gfx**, u8*,
|
||||
#define cKF_FRAMETIME (1.0f / cKF_FRAMERATE)
|
||||
#define cKF_EPSILON 0.008f
|
||||
|
||||
extern int cKF_FrameControl_passCheck_now(cKF_FrameControl_c* fc, f32 current);
|
||||
|
||||
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);
|
||||
|
||||
|
||||
@@ -21,6 +21,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_7 7
|
||||
#define ACTOR_OBJ_BANK_11 11
|
||||
#define ACTOR_OBJ_BANK_12 12
|
||||
|
||||
enum actor_part {
|
||||
|
||||
@@ -478,6 +478,8 @@ extern int mNT_check_unknown(mActor_name_t item_no);
|
||||
#define MISC_ACTOR_START 0x9000
|
||||
#define MISC_ACTOR_SAMPLE MISC_ACTOR_START
|
||||
|
||||
#define TRAIN_DOOR 0xA011
|
||||
|
||||
#define SP_NPC_START 0xD000
|
||||
#define SP_NPC_ARTIST (SP_NPC_START + 0) // D000
|
||||
#define SP_NPC_BROKER (SP_NPC_START + 1) // D001
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
#include "ac_train_door.h"
|
||||
|
||||
#include "audio.h"
|
||||
#include "m_rcp.h"
|
||||
#include "m_name_table.h"
|
||||
|
||||
static void aTRD_actor_ct(ACTOR* actor, GAME* game);
|
||||
static void aTRD_actor_dt(ACTOR* actor, GAME* game);
|
||||
static void aTRD_actor_move(ACTOR* actor, GAME* game);
|
||||
static void aTRD_actor_draw(ACTOR* actor, GAME* game);
|
||||
|
||||
ACTOR_PROFILE TrainDoor_Profile = {
|
||||
mAc_PROFILE_TRAINDOOR,
|
||||
ACTOR_PART_BG,
|
||||
ACTOR_STATE_NO_DRAW_WHILE_CULLED | ACTOR_STATE_NO_MOVE_WHILE_CULLED,
|
||||
TRAIN_DOOR,
|
||||
ACTOR_OBJ_BANK_11,
|
||||
sizeof(TRAINDOOR_ACTOR),
|
||||
&aTRD_actor_ct,
|
||||
&aTRD_actor_dt,
|
||||
&aTRD_actor_move,
|
||||
&aTRD_actor_draw,
|
||||
NULL
|
||||
};
|
||||
|
||||
extern cKF_Skeleton_R_c cKF_bs_r_obj_romtrain_door;
|
||||
extern cKF_Animation_R_c cKF_ba_r_obj_romtrain_door;
|
||||
|
||||
static void aTRD_actor_ct(ACTOR* actor, GAME* game){
|
||||
TRAINDOOR_ACTOR* traindoor = (TRAINDOOR_ACTOR*)actor;
|
||||
|
||||
cKF_SkeletonInfo_R_ct(&traindoor->keyframe, &cKF_bs_r_obj_romtrain_door, NULL, &traindoor->work, &traindoor->target);
|
||||
cKF_SkeletonInfo_R_init(&traindoor->keyframe,traindoor->keyframe.skeleton, &cKF_ba_r_obj_romtrain_door,1.0f,51.0f,1.0f,
|
||||
0.0f,0.0f,0,NULL);
|
||||
traindoor->keyframe.morph_counter = 0.0f;
|
||||
cKF_SkeletonInfo_R_play(&traindoor->keyframe);
|
||||
}
|
||||
|
||||
static void aTRD_actor_dt(ACTOR* actor, GAME* game){
|
||||
TRAINDOOR_ACTOR* traindoor = (TRAINDOOR_ACTOR*)actor;
|
||||
|
||||
cKF_SkeletonInfo_R_dt(&traindoor->keyframe);
|
||||
}
|
||||
|
||||
static void aTRD_set_door_SE(ACTOR* actor){
|
||||
TRAINDOOR_ACTOR* traindoor = (TRAINDOOR_ACTOR*)actor;
|
||||
|
||||
static f32 chk_pat[] = {2.0f, 27.0f};
|
||||
static u16 se_no[] = {1042, 1043,0, 0,0,0, 0,0,0};
|
||||
int i;
|
||||
|
||||
for(i = 0; i < 2; i++){
|
||||
|
||||
if(cKF_FrameControl_passCheck_now(&traindoor->keyframe.frame_control,chk_pat[i]) != 0){
|
||||
sAdo_OngenTrgStart(se_no[i], &traindoor->actor_class.world_position);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void aTRD_actor_move(ACTOR* actor, GAME* game){
|
||||
TRAINDOOR_ACTOR* traindoor = (TRAINDOOR_ACTOR*)actor;
|
||||
|
||||
if(traindoor->idle == 1){
|
||||
traindoor->idle = 0;
|
||||
traindoor->keyframe.frame_control.speed = 0.5f;
|
||||
}
|
||||
|
||||
if(cKF_SkeletonInfo_R_play(&traindoor->keyframe) == 1){
|
||||
traindoor->keyframe.frame_control.current_frame = traindoor->keyframe.frame_control.start_frame;
|
||||
traindoor->keyframe.frame_control.speed = 0.0f;
|
||||
}
|
||||
aTRD_set_door_SE(actor);
|
||||
}
|
||||
|
||||
static void aTRD_actor_draw(ACTOR* actor, GAME* game){
|
||||
TRAINDOOR_ACTOR* traindoor = (TRAINDOOR_ACTOR*)actor;
|
||||
|
||||
cKF_SkeletonInfo_R_c* keyf = &traindoor->keyframe;
|
||||
Gfx* mtx;
|
||||
Mtx* mtxp;
|
||||
|
||||
mtx = GRAPH_ALLOC(game->graph, (u32) keyf->skeleton->num_shown_joints * 64);
|
||||
|
||||
mtxp = (Mtx*)mtx;
|
||||
if(mtxp != NULL){
|
||||
_texture_z_light_fog_prim(game->graph);
|
||||
texture_z_light_prim_xlu_disp(game->graph);
|
||||
cKF_Si3_draw_R_SV(game,keyf, mtxp, NULL,NULL,NULL);
|
||||
}
|
||||
}
|
||||
+1
-2
@@ -59,8 +59,7 @@ static int cKF_FrameControl_passCheck(cKF_FrameControl_c* fc, f32 current,
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern int cKF_FrameControl_passCheck_now(cKF_FrameControl_c* fc, f32 current,
|
||||
f32* out) {
|
||||
extern int cKF_FrameControl_passCheck_now(cKF_FrameControl_c* fc, f32 current) {
|
||||
f32 cur = fc->current_frame;
|
||||
f32 speed;
|
||||
int ret = 0;
|
||||
|
||||
Reference in New Issue
Block a user