Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

d_a_kaji OK #35

Merged
merged 3 commits into from
Sep 15, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -417,7 +417,7 @@ def ActorRel(status, rel_name):
ActorRel(NonMatching, "d_a_hot_floor"),
ActorRel(NonMatching, "d_a_ikari"),
ActorRel(NonMatching, "d_a_jbo"),
ActorRel(NonMatching, "d_a_kaji"),
ActorRel(Matching, "d_a_kaji"),
ActorRel(NonMatching, "d_a_kanban"),
ActorRel(NonMatching, "d_a_ki"),
ActorRel(NonMatching, "d_a_knob00"),
Expand Down Expand Up @@ -499,7 +499,7 @@ def ActorRel(status, rel_name):
ActorRel(NonMatching, "d_a_tag_evsw"),
ActorRel(NonMatching, "d_a_tag_ghostship"),
ActorRel(NonMatching, "d_a_tag_hint"),
ActorRel(Matching, "d_a_tag_kb_item"),
ActorRel(Matching, "d_a_tag_kb_item"),
ActorRel(NonMatching, "d_a_tag_kk1"),
ActorRel(NonMatching, "d_a_tag_light"),
ActorRel(NonMatching, "d_a_tag_msg"),
Expand Down
15 changes: 15 additions & 0 deletions include/d/actor/d_a_obj_pirateship.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#ifndef D_A_OBJ_PIRATESHIP_H
#define D_A_OBJ_PIRATESHIP_H

#include "f_op/f_op_actor_mng.h"

namespace daObjPirateship {
class Act_c : public fopAc_ac_c {
public:
/* 0x290 */ u8 temp[0x2CC - 0x290];
/* 0x2CC */ u8 unk2CC;
/* 0x2D0 */ J3DModel* mpModel;
};
}

#endif /* D_A_OBJ_PIRATESHIP_H */
20 changes: 17 additions & 3 deletions include/m_Do/m_Do_ext.h
Original file line number Diff line number Diff line change
Expand Up @@ -233,19 +233,31 @@ class mDoExt_McaMorfCallBack2_c {

class JAIAnimeSound;

class mDoExt_McaMorf /* : public J3DMtxCalcMaya */ {
class J3DMtxCalcBasic { // Placeholder to fix mDoExt_McaMorf inheritance
public:
virtual ~J3DMtxCalcBasic();
};

class J3DMtxCalcMaya : virtual J3DMtxCalcBasic { // Placeholder to fix mDoExt_McaMorf inheritance
public:
virtual ~J3DMtxCalcMaya();

u8 pad[0x48];
};

class mDoExt_McaMorf : public J3DMtxCalcMaya {
public:
mDoExt_McaMorf(J3DModelData*, mDoExt_McaMorfCallBack1_c*, mDoExt_McaMorfCallBack2_c*, J3DAnmTransform*, int, float, int, int, int, void*, unsigned long, unsigned long);
virtual ~mDoExt_McaMorf();

void setAnm(J3DAnmTransform*, int, f32, f32, f32, f32, void*);
J3DModel* getModel() { return mpModel; }
void setFrame(f32 frame) { mFrameCtrl.setFrame(frame); }
void update();
void updateDL();
void play(Vec *, u32, u8);
void play(Vec *, u32, s8);
void stopZelAnime();

u8 pad[0x4C]; // J3DMtxCalcMaya
/* 0x50 */ J3DModel* mpModel;
/* 0x54 */ J3DAnmTransform* mpAnm;
/* 0x58 */ J3DFrameCtrl mFrameCtrl;
Expand All @@ -257,6 +269,8 @@ class mDoExt_McaMorf /* : public J3DMtxCalcMaya */ {
/* 0x80 */ JAIAnimeSound * mpSound;
/* 0x84 */ mDoExt_McaMorfCallBack1_c * mpCallBack1;
/* 0x88 */ mDoExt_McaMorfCallBack2_c * mpCallBack2;
/* 0x8C */ /* virtual inheritance */
/* 0x94 */ u8 pad2[0xB4 - 0x94];
};

class mDoExt_3DlineMat_c {
Expand Down
160 changes: 145 additions & 15 deletions src/d/actor/d_a_kaji.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,41 +3,171 @@
// Translation Unit: d_a_kaji.cpp
//

#include "d_a_kaji.h"
#include "f_op/f_op_actor_mng.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "m_Do/m_Do_mtx.h"
#include "d/d_com_inf_game.h"
#include "d/d_s_play.h"
#include "d/actor/d_a_obj_pirateship.h"
#include "d/d_procname.h"
#include "dolphin/types.h"

extern dScnPly_reg_HIO_c g_regHIO;

struct daKaji_c : fopAc_ac_c {
public:
s32 CreateHeap();
inline s32 _create();
inline s32 _delete();
inline s32 _execute();
inline bool _draw();

public:
/* 0x290 */ request_of_phase_process_class mPhs;
/* 0x298 */ u8 pad[0x29C - 0x298];
/* 0x29C */ mDoExt_McaMorf* mpMorf;
/* 0x2A0 */ Mtx mMtx;

static const char M_arcname[];
};

static daObjPirateship::Act_c* l_p_ship;

const char daKaji_c::M_arcname[] = "Kaji";

/* 00000078-00000098 .text CheckCreateHeap__FP10fopAc_ac_c */
void CheckCreateHeap(fopAc_ac_c*) {
/* Nonmatching */
static s32 CheckCreateHeap(fopAc_ac_c* i_this) {
return ((daKaji_c*)i_this)->CreateHeap();
}

/* 00000098-000001F4 .text CreateHeap__8daKaji_cFv */
void daKaji_c::CreateHeap() {
/* Nonmatching */
s32 daKaji_c::CreateHeap() {
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(M_arcname, 0x11); // asoda.bdl
JUT_ASSERT(0x55, modelData != 0);

mpMorf = new mDoExt_McaMorf(
modelData,
NULL, NULL,
(J3DAnmTransformKey*)dComIfG_getObjectRes("Kaji", 0xE), // kj_wait.bck
2, 0.0f, 0, -1, 1,
dComIfG_getObjectRes("Kaji", 0x8), // kj_wait.bas
0x00080000,
0x11000002
);

return mpMorf && mpMorf->getModel();
}

s32 daKaji_c::_create() {
fopAcM_SetupActor(this, daKaji_c);

s32 phase_state = dComIfG_resLoad(&mPhs, M_arcname);
if (phase_state == cPhs_COMPLEATE_e) {
if (fopAcM_entrySolidHeap(this, (heapCallbackFunc)&CheckCreateHeap, 0x660)) {
mDoMtx_stack_c::transS(getPosition());
mDoMtx_stack_c::YrotM(shape_angle.y);
mDoMtx_stack_c::scaleM(mScale.x, mScale.y, mScale.z);
MTXCopy(mDoMtx_stack_c::get(), mMtx);

l_p_ship = (daObjPirateship::Act_c*)fopAcM_SearchByID(mParentPcId);
} else {
return cPhs_ERROR_e;
}

fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx());
fopAcM_setCullSizeBox(this, -80.0f, -80.0f, -20.0f, 80.0f, 80.0f, 20.0f);

MTXCopy(mpMorf->getModel()->getBaseTRMtx(), mMtx);
}

return phase_state;
}

s32 daKaji_c::_delete() {
dComIfG_resDelete(&mPhs, M_arcname);
return 1;
}

s32 daKaji_c::_execute() {
// Copy the ship's transform (plus an offset) to the helm.
cXyz* offset = &cXyz(0.0f, 740.0f, -858.0f);
offset->y += g_regHIO.mChild[10].mFloatRegs[10];
offset->z += g_regHIO.mChild[10].mFloatRegs[11];
cMtx_multVec( l_p_ship->mpModel->getBaseTRMtx(), offset, &current.pos);

daObjPirateship::Act_c* ship = l_p_ship;
shape_angle = ship->shape_angle;
current.angle = shape_angle;

mpMorf->play(NULL, 0, 0);

mpMorf->getModel()->setBaseScale(mScale);
PSMTXTrans(mDoMtx_stack_c::get(), current.pos.x, current.pos.y, current.pos.z);
mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z);

mpMorf->getModel()->i_setBaseTRMtx(mDoMtx_stack_c::get());
MTXCopy(mDoMtx_stack_c::get(), mMtx);

return 0;
}

bool daKaji_c::_draw() {
if (!l_p_ship->unk2CC) {
return 1;
}
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &current.pos, &mTevStr);
g_env_light.setLightTevColorType(mpMorf->getModel(), &mTevStr);
mpMorf->update();
return 1;
LagoLunatic marked this conversation as resolved.
Show resolved Hide resolved
}

/* 000001F4-00000344 .text daKajiCreate__FPv */
void daKajiCreate(void*) {
/* Nonmatching */
static s32 daKajiCreate(void* i_this) {
return ((daKaji_c*)i_this)->_create();
}

/* 00000344-00000374 .text daKajiDelete__FPv */
void daKajiDelete(void*) {
/* Nonmatching */
static s32 daKajiDelete(void* i_this) {
return ((daKaji_c*)i_this)->_delete();
}

/* 00000374-000004D4 .text daKajiExecute__FPv */
void daKajiExecute(void*) {
/* Nonmatching */
static s32 daKajiExecute(void* i_this) {
return ((daKaji_c*)i_this)->_execute();
}

/* 000004D4-00000568 .text daKajiDraw__FPv */
void daKajiDraw(void*) {
/* Nonmatching */
static s32 daKajiDraw(void* i_this) {
return ((daKaji_c*)i_this)->_draw();
}

/* 00000568-00000570 .text daKajiIsDelete__FPv */
void daKajiIsDelete(void*) {
/* Nonmatching */
static s32 daKajiIsDelete(void* actor) {
return 1;
LagoLunatic marked this conversation as resolved.
Show resolved Hide resolved
}

static actor_method_class daKajiMethodTable = {
(process_method_func)daKajiCreate,
(process_method_func)daKajiDelete,
(process_method_func)daKajiExecute,
(process_method_func)daKajiIsDelete,
(process_method_func)daKajiDraw,
};

extern actor_process_profile_definition g_profile_Kaji = {
fpcLy_CURRENT_e,
3,
fpcLy_CURRENT_e,
PROC_Kaji,
&g_fpcLf_Method.mBase,
sizeof(daKaji_c),
0,
0,
&g_fopAc_Method.base,
0x01AC,
&daKajiMethodTable,
0x00040100,
fopAc_ACTOR_e,
fopAc_CULLBOX_CUSTOM_e,
};
2 changes: 1 addition & 1 deletion src/d/actor/d_a_obj_pirateship.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
// Translation Unit: d_a_obj_pirateship.cpp
//

#include "d_a_obj_pirateship.h"
#include "d/actor/d_a_obj_pirateship.h"
#include "dolphin/types.h"

/* 000000EC-000000FC .text ride_call_back__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c */
Expand Down