link ac_ride_off_demo

This commit is contained in:
Prakxo
2024-10-02 20:34:40 +02:00
parent 2c7ad2bbd7
commit 13ab56c394
4 changed files with 203 additions and 0 deletions
+5
View File
@@ -540,6 +540,11 @@ ac_quest_talk_init.c:
.text: [0x80489A34, 0x8048D768]
.rodata: [0x80644CA8, 0x80644D10]
.data: [0x8068B048, 0x8068B310]
ac_ride_off_demo.c:
.text: [0x80496218, 0x804967A4]
.rodata: [0x80644D90, 0x80644DB0]
.data: [0x8068BB28, 0x8068BB80]
.bss: [0x812FCCD8, 0x812FCCE0]
ac_rope.c:
.text: [0x804967A4, 0x80496AB8]
.rodata: [0x80644DB0, 0x80644DB8]
+13
View File
@@ -3,11 +3,24 @@
#include "types.h"
#include "m_actor.h"
#include "ac_train1.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef void (*aROD_INIT_PROC)(ACTOR*, GAME*);
typedef struct ride_off_demo_s {
ACTOR actor_class;
int current_action;
int _178;
aROD_INIT_PROC current_proc;
TRAIN1_ACTOR* train_actor;
ACTOR* station_master_actor;
int _188;
} RIDE_OFF_DEMO_ACTOR;
extern ACTOR_PROFILE Ride_Off_Demo_Profile;
#ifdef __cplusplus
+45
View File
@@ -0,0 +1,45 @@
#include "ac_ride_off_demo.h"
#include "libultra/libultra.h"
#include "m_bgm.h"
#include "m_common_data.h"
#include "m_demo.h"
#include "m_player_lib.h"
static void aROD_actor_ct(ACTOR* actor, GAME* game);
static void aROD_actor_dt(ACTOR* actor, GAME* game);
static void aROD_actor_move(ACTOR* actor, GAME* game);
mDemo_Clip_c aROD_clip;
ACTOR_PROFILE Ride_Off_Demo_Profile = {
mAc_PROFILE_RIDE_OFF_DEMO,
ACTOR_PART_CONTROL,
ACTOR_STATE_CAN_MOVE_IN_DEMO_SCENES | ACTOR_STATE_NO_MOVE_WHILE_CULLED,
EMPTY_NO,
ACTOR_OBJ_BANK_KEEP,
sizeof(RIDE_OFF_DEMO_ACTOR),
aROD_actor_ct,
aROD_actor_dt,
aROD_actor_move,
NONE_ACTOR_PROC,
NULL,
};
static void aROD_setupAction(ACTOR* actor, GAME* game, int action);
static void aROD_actor_ct(ACTOR* actor, GAME* game) {
Common_Set(clip.demo_clip, &aROD_clip);
bzero(&aROD_clip, sizeof(mDemo_Clip_c));
Common_Set(clip.demo_clip->demo_class, actor);
Common_Set(clip.demo_clip->type, mDemo_CLIP_TYPE_RIDE_OFF_DEMO);
aROD_setupAction(actor, game, 0);
}
static void aROD_actor_dt(ACTOR* actor, GAME* game) {
if (Common_Get(clip.demo_clip) != NULL) {
Common_Set(clip.demo_clip, NULL);
}
}
#include "../src/ac_ride_off_demo_move.c_inc"
+140
View File
@@ -0,0 +1,140 @@
#define aROD_OFF_UT_X_POS 2220
#define aROD_OFF_UT_Z_POS 840
#define aROD_PLYR_X_START_POS 1970
#define aROD_PLYR_Y_START_POS 760
static void aROD_change_player_demo_standing_train(GAME* game) {
if (mPlib_get_player_actor_main_index(game) != mPlayer_INDEX_DEMO_STANDING_TRAIN) {
mPlib_request_main_demo_standing_train_type1(game);
}
}
static void aROD_first_set(ACTOR* actor, GAME* game) {
Common_Set(train_coming_flag, 3);
aROD_change_player_demo_standing_train(game);
aROD_setupAction(actor, game, 1);
}
static void aROD_train_birth_wait(ACTOR* actor, GAME* game) {
RIDE_OFF_DEMO_ACTOR* ride_off = (RIDE_OFF_DEMO_ACTOR*)actor;
GAME_PLAY* play = (GAME_PLAY*)game;
TRAIN1_ACTOR* train = (TRAIN1_ACTOR*)Actor_info_fgName_search(&play->actor_info, TRAIN1, ACTOR_PART_ITEM);
aROD_change_player_demo_standing_train(game);
if (train != NULL) {
ride_off->train_actor = train;
train->player_pass_exists = TRUE;
aROD_setupAction(actor, game, 2);
}
}
static void aROD_ride_train(ACTOR* actor, GAME* game) {
RIDE_OFF_DEMO_ACTOR* ride_off = (RIDE_OFF_DEMO_ACTOR*)actor;
TRAIN1_ACTOR* train = ride_off->train_actor;
aROD_change_player_demo_standing_train(game);
if (train->tr_action == 5) {
aROD_setupAction(actor, game, 3);
}
}
static void aROD_ride_off_player(ACTOR* actor, GAME* game) {
RIDE_OFF_DEMO_ACTOR* ride_off = (RIDE_OFF_DEMO_ACTOR*)actor;
ACTOR* station_master = ride_off->station_master_actor;
if (ride_off->_188 == 0) {
if (mDemo_Check(mDemo_TYPE_SPEAK, station_master) == 1) {
ride_off->_188 = 1;
}
} else if (!mDemo_Check(mDemo_TYPE_SPEAK, station_master)) {
aROD_setupAction(actor, game, 4);
}
}
static void aROD_walk_one_unit(ACTOR* actor, GAME* game) {
RIDE_OFF_DEMO_ACTOR* ride_off = (RIDE_OFF_DEMO_ACTOR*)actor;
GAME_PLAY* play = (GAME_PLAY*)game;
PLAYER_ACTOR* player = GET_PLAYER_ACTOR_GAME(game);
if (player != NULL) {
if (player->actor_class.world.position.z >= aROD_OFF_UT_Z_POS) {
if (F32_IS_ZERO(ride_off->station_master_actor->speed)) {
mPlib_request_main_wait_type3(game);
Camera2_request_main_normal(play, 0, 9);
Actor_delete(actor);
}
} else {
mPlib_Set_goal_player_demo_walk(aROD_OFF_UT_X_POS, aROD_OFF_UT_Z_POS, 2.5f);
}
}
}
static void aROD_first_set_init(ACTOR* actor, GAME* game) {
GAME_PLAY* play = (GAME_PLAY*)game;
Actor_data* data = play->player_data;
mBGMPsComp_make_ps_happening(0x2F, 0x168);
data->position.x = aROD_PLYR_X_START_POS;
data->position.z = aROD_PLYR_Y_START_POS;
}
static void aROD_train_birth_wait_init(ACTOR* actor, GAME* game) {
GAME_PLAY* play = (GAME_PLAY*)game;
xyz_t pos;
pos.x = 2180.0f;
pos.z = 820.0f;
pos.y = mCoBG_GetBgY_OnlyCenter_FromWpos2(pos, -35.0f);
Camera2_request_main_demo_fromNowPos2(play, &pos, 0.0f, 0.0f, 0.0f, 9);
}
static void aROD_ride_off_player_init(ACTOR* actor, GAME* game) {
static xyz_t enter_pos = {2180.0f, 0.0f, 820.0f};
RIDE_OFF_DEMO_ACTOR* ride_off = (RIDE_OFF_DEMO_ACTOR*)actor;
GAME_PLAY* play = (GAME_PLAY*)game;
TRAIN1_ACTOR* train = ride_off->train_actor;
ride_off->station_master_actor = Actor_info_fgName_search(&play->actor_info, SP_NPC_STATION_MASTER, ACTOR_PART_NPC);
train->player_pass_exists = FALSE;
mPlib_request_main_demo_getoff_train_type1(game);
ride_off->_188 = 0;
mCoBG_SetAttribute(enter_pos, mCoBG_ATTRIBUTE_STONE);
}
static void aROD_walk_one_unit_init(ACTOR* actor, GAME* game) {
mPlib_request_main_demo_walk_type1(game, 2220.0f, 840.0f, 2.5f, 0);
}
static void aROD_init_proc(ACTOR* actor, GAME* game, int idx) {
static aROD_INIT_PROC init_proc[] = {
aROD_first_set_init, aROD_train_birth_wait_init, (aROD_INIT_PROC)&none_proc1,
aROD_ride_off_player_init, aROD_walk_one_unit_init,
};
init_proc[idx](actor, game);
}
static void aROD_setupAction(ACTOR* actor, GAME* game, int idx) {
static aROD_INIT_PROC process[] = {
aROD_first_set, aROD_train_birth_wait, aROD_ride_train, aROD_ride_off_player, aROD_walk_one_unit,
};
RIDE_OFF_DEMO_ACTOR* ride_off = (RIDE_OFF_DEMO_ACTOR*)actor;
ride_off->current_proc = process[idx];
ride_off->current_action = idx;
aROD_init_proc(actor, game, idx);
}
static void aROD_actor_move(ACTOR* actor, GAME* game) {
RIDE_OFF_DEMO_ACTOR* ride_off = (RIDE_OFF_DEMO_ACTOR*)actor;
ride_off->current_proc(actor, game);
}