Merge pull request #253 from Hexalotl/ac_windmill

Implement & link ac_windmill
This commit is contained in:
Cuyler36
2024-02-20 08:46:30 -05:00
committed by GitHub
5 changed files with 103 additions and 0 deletions
+3
View File
@@ -741,6 +741,9 @@ ac_tukimi.c:
.text: [0x805C0CC8, 0x805C11A8]
.rodata: [0x8064ADB0, 0x8064ADC0]
.data: [0x806C7388, 0x806C7400]
ac_windmill.c:
.text: [0x805C1AB8, 0x805C1D34]
.data: [0x806C75D0, 0x806C76B8]
ac_yatai.c:
.text: [0x805C1D34, 0x805C217C]
.rodata: [0x8064ADC0, 0x8064ADC8]
+1
View File
@@ -2702,6 +2702,7 @@ extern int mNT_check_unknown(mActor_name_t item_no);
#define DUMMY_MIKUJI 0xF10D
#define DUMMY_TAMA 0xF110
#define DUMMY_KOINOBORI 0xF114
#define DUMMY_WINDMILL 0xF116
#define DUMMY_LOTUS 0xF11B
#define DUMMY_DOUZOU 0xF11D
#define DUMMY_NAMEPLATE 0xF11F
+41
View File
@@ -0,0 +1,41 @@
#include "ac_windmill.h"
#include "m_name_table.h"
#include "sys_matrix.h"
#include "m_lib.h"
#include "m_rcp.h"
#include "m_common_data.h"
#include "m_player_lib.h"
static void aWIN_actor_dt(ACTOR* actor, GAME* game);
static void aWIN_actor_init(ACTOR* actor, GAME* game);
static void aWIN_actor_draw(ACTOR* actor, GAME* game);
ACTOR_PROFILE Windmill_Profile = {
mAc_PROFILE_WINDMILL,
ACTOR_PART_ITEM,
ACTOR_STATE_NONE,
WINDMILL0,
ACTOR_OBJ_BANK_KEEP,
sizeof(STRUCTURE_ACTOR),
NONE_ACTOR_PROC,
&aWIN_actor_dt,
&aWIN_actor_init,
&aWIN_actor_draw,
NULL
};
u8 aWIN_shadow_vtx_fix_flg_table[] = { TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE };
static void aWIN_set_bgOffset(STRUCTURE_ACTOR* yatai, int idx);
static void aWIN_actor_dt(ACTOR* actor, GAME* game) {
STRUCTURE_ACTOR* windmill = (STRUCTURE_ACTOR*)actor;
aWIN_set_bgOffset(windmill, 0);
cKF_SkeletonInfo_R_dt(&windmill->keyframe);
}
#include "../src/ac_windmill_move.c_inc"
#include "../src/ac_windmill_draw.c_inc"
+2
View File
@@ -0,0 +1,2 @@
static void aWIN_actor_draw(ACTOR* actor, GAME* game) {
}
+56
View File
@@ -0,0 +1,56 @@
static void aWIN_set_bgOffset(STRUCTURE_ACTOR* windmill, int idx) {
static mCoBG_OffsetTable_c height_table_ct[9] = {
{ 0x64, 12, 0, 12, 12, 12, 1 }, { 0x64, 12, 12, 12, 12, 12, 0 }, { 0x64, 12, 12, 12, 12, 0, 1 },
{ 0x64, 12, 12, 12, 12, 12, 0 }, { 0x64, 12, 12, 12, 12, 12, 0 }, { 0x64, 12, 12, 12, 12, 12, 0 },
{ 0x64, 12, 12, 0, 12, 12, 1 }, { 0x64, 12, 12, 12, 12, 12, 0 }, { 0x64, 12, 12, 12, 0, 12, 1 }
};
static mCoBG_OffsetTable_c height_table_dt[9] = {
{ 0x64, 0, 0, 0, 0, 0, 0 }, { 0x64, 0, 0, 0, 0, 0, 0 }, { 0x64, 0, 0, 0, 0, 0, 0 },
{ 0x64, 0, 0, 0, 0, 0, 0 }, { 0x64, 0, 0, 0, 0, 0, 0 }, { 0x64, 0, 0, 0, 0, 0, 0 },
{ 0x64, 0, 0, 0, 0, 0, 0 }, { 0x64, 0, 0, 0, 0, 0, 0 }, { 0x64, 0, 0, 0, 0, 0, 0 }
};
static mCoBG_OffsetTable_c* height_table[2] = { height_table_dt, height_table_ct };
static f32 addX[3] = { -40.0f, 0.0f, 40.0f };
static f32 addZ[3] = { -40.0f, 0.0f, 40.0f };
mCoBG_OffsetTable_c* offset;
int i;
xyz_t pos;
offset = height_table[idx];
for (i = 0; i < 3; i++) {
pos.z = windmill->actor_class.home.position.z + addZ[i];
pos.x = windmill->actor_class.home.position.x + addX[0];
mCoBG_SetPluss5PointOffset_file(pos, offset[0], __FILE__, 109);
pos.x = windmill->actor_class.home.position.x + addX[1];
mCoBG_SetPluss5PointOffset_file(pos, offset[1], __FILE__, 113);
pos.x = windmill->actor_class.home.position.x + addX[2];
mCoBG_SetPluss5PointOffset_file(pos, offset[2], __FILE__, 117);
offset += 3;
}
}
static void aWIN_actor_move(ACTOR* actor, GAME* game) {
STRUCTURE_ACTOR* windmill = (STRUCTURE_ACTOR*)actor;
windmill->keyframe_state = cKF_SkeletonInfo_R_play(&windmill->keyframe);
(*windmill->action_proc)(windmill, (GAME_PLAY*)game);
}
static void aWIN_actor_init(ACTOR* actor, GAME* game) {
STRUCTURE_ACTOR* windmill;
mActor_name_t windmill_actor_name;
windmill = (STRUCTURE_ACTOR*)actor;
windmill_actor_name = windmill->arg0 + DUMMY_WINDMILL;
mFI_SetFG_common(windmill_actor_name, actor->home.position, FALSE);
aWIN_actor_move(actor, game);
windmill->actor_class.mv_proc = aWIN_actor_move;
}