mirror of
https://github.com/zeldaret/tp
synced 2026-06-17 23:21:28 -04:00
d_a_obj_beamos / d_a_e_wb WIP (#2620)
* WIP * daE_WB_Draw * checkpoint * more matches * checkpoint * fixes * fix debug build * fix daObjBm_c alignment * fixes for luz * fixes for hatal * manual spacing changes * run clang-format * move header back
This commit is contained in:
+224
-31
@@ -9,6 +9,8 @@
|
||||
#include "d/d_cc_d.h"
|
||||
#include "dol2asm.h"
|
||||
#include "d/d_camera.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "SSystem/SComponent/c_lib.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
@@ -253,28 +255,104 @@ extern "C" void __register_global_object();
|
||||
|
||||
/* 80BAE36C-80BAE4A8 0000EC 013C+00 1/1 0/0 0/0 .text
|
||||
* PPCallBack__9daObjBm_cFP10fopAc_ac_cP10fopAc_ac_csQ29dBgW_Base13PushPullLabel */
|
||||
void daObjBm_c::PPCallBack(fopAc_ac_c* param_0, fopAc_ac_c* param_1, s16 param_2,
|
||||
// NONMATCHING
|
||||
void daObjBm_c::PPCallBack(fopAc_ac_c* param_0, fopAc_ac_c* i_actorP, s16 param_2,
|
||||
dBgW_Base::PushPullLabel param_3) {
|
||||
// NONMATCHING
|
||||
int tmp = cLib_checkBit((int)param_2, 3);
|
||||
u32 l_swNo3 = getSwNo3();
|
||||
u32 l_moveType = getMoveType();
|
||||
|
||||
if (tmp && !fopAcM_isSwitch(this,l_swNo3)) {
|
||||
int tmp2 = cLib_checkBit(tmp,2);
|
||||
s16 angle = param_2;
|
||||
|
||||
if (tmp2) {
|
||||
angle -= -0x8000;
|
||||
}
|
||||
|
||||
angle -= home.angle.y;
|
||||
|
||||
JUT_PANIC(513,"0");
|
||||
|
||||
field_0x10c0 = param_2;
|
||||
|
||||
if (angle >= -0x2000 && angle < 0x2000) {
|
||||
tmp = 0;
|
||||
} else {
|
||||
if (angle >= 0x2000 && angle < 0x6000) {
|
||||
tmp = 1;
|
||||
} else {
|
||||
if (angle < 0x6000 && angle < -0x6000) {
|
||||
tmp = 2;
|
||||
} else {
|
||||
tmp = 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (l_moveType != 0 || tmp == 0) {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (tmp == 1) {
|
||||
field_0x10c4[i] = field_0x10c4[i]+1;
|
||||
} else {
|
||||
field_0x10c4[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
field_0x10d2 = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 80BAE4A8-80BAE5FC 000228 0154+00 1/1 0/0 0/0 .text nodeCallBack__FP8J3DJointi */
|
||||
static void nodeCallBack(J3DJoint* param_0, int param_1) {
|
||||
// NONMATCHING
|
||||
// NONMATCHING
|
||||
static int nodeCallBack(J3DJoint* param_0, int param_1) {
|
||||
if (param_1 == 0) {
|
||||
u16 jnt_no = param_0->getJntNo();
|
||||
J3DModel* model = j3dSys.getModel();
|
||||
daObjBm_c* beamos = (daObjBm_c*)model->getUserArea();
|
||||
cMtx_copy(model->getAnmMtx(jnt_no), mDoMtx_stack_c::get());
|
||||
|
||||
if (jnt_no == beamos->getHeadJoint()) {
|
||||
mDoMtx_stack_c::XrotM(beamos->field_0xf96 + (beamos->field_0x1000 * cM_scos(beamos->field_0x1000 * beamos->field_0xff0)));
|
||||
} else {
|
||||
if (jnt_no == beamos->getBigGearJoint()) {
|
||||
mDoMtx_stack_c::XrotM(beamos->field_0xf9a);
|
||||
} else {
|
||||
if (jnt_no == beamos->getSmallGear0Joint()) {
|
||||
mDoMtx_stack_c::XrotM(beamos->field_0xf9e);
|
||||
} else {
|
||||
if (jnt_no == beamos->getSmallGear1Joint()) {
|
||||
mDoMtx_stack_c::XrotM(beamos->field_0xfa2);
|
||||
} else {
|
||||
if (jnt_no == beamos->getSmallGear2Joint()) {
|
||||
mDoMtx_stack_c::XrotM(beamos->field_0xfa6);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cMtx_copy(mDoMtx_stack_c::get(),model->getAnmMtx(jnt_no));
|
||||
}
|
||||
}
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80BB37B8-80BB37C4 000000 000C+00 13/13 0/0 0/0 .rodata l_eye_offset */
|
||||
SECTION_RODATA static u8 const l_eye_offset[12] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x43, 0xA5, 0x00, 0x00, 0x42, 0x96, 0x00, 0x00,
|
||||
SECTION_RODATA static f32 const l_eye_offset[4] = {
|
||||
0.0f,
|
||||
330.0f,
|
||||
75.0f,
|
||||
};
|
||||
COMPILER_STRIP_GATE(0x80BB37B8, &l_eye_offset);
|
||||
|
||||
/* 80BB37C4-80BB37D0 00000C 000C+00 0/1 0/0 0/0 .rodata l_high_beam_offset */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_RODATA static u8 const l_high_beam_offset[12] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x43, 0x7F, 0x00, 0x00, 0x42, 0x82, 0x00, 0x00,
|
||||
SECTION_RODATA static f32 const l_high_beam_offset[4] = {
|
||||
0.0f,
|
||||
255.0f,
|
||||
65.0f,
|
||||
};
|
||||
COMPILER_STRIP_GATE(0x80BB37C4, &l_high_beam_offset);
|
||||
#pragma pop
|
||||
@@ -282,8 +360,10 @@ COMPILER_STRIP_GATE(0x80BB37C4, &l_high_beam_offset);
|
||||
/* 80BB37D0-80BB37DC 000018 000C+00 0/1 0/0 0/0 .rodata l_mid_beam_offset */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_RODATA static u8 const l_mid_beam_offset[12] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x43, 0x4D, 0x00, 0x00, 0x42, 0x82, 0x00, 0x00,
|
||||
SECTION_RODATA static f32 const l_mid_beam_offset[3] = {
|
||||
0.0f,
|
||||
205.0f,
|
||||
65.0f,
|
||||
};
|
||||
COMPILER_STRIP_GATE(0x80BB37D0, &l_mid_beam_offset);
|
||||
#pragma pop
|
||||
@@ -291,17 +371,28 @@ COMPILER_STRIP_GATE(0x80BB37D0, &l_mid_beam_offset);
|
||||
/* 80BB37DC-80BB37E8 000024 000C+00 0/1 0/0 0/0 .rodata l_low_beam_offset */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_RODATA static u8 const l_low_beam_offset[12] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x43, 0x20, 0x00, 0x00, 0x42, 0x82, 0x00, 0x00,
|
||||
SECTION_RODATA static f32 const l_low_beam_offset[3] = {
|
||||
0.0f,
|
||||
160.0f,
|
||||
65.0f,
|
||||
};
|
||||
COMPILER_STRIP_GATE(0x80BB37DC, &l_low_beam_offset);
|
||||
#pragma pop
|
||||
|
||||
/* 80BB37E8-80BB3818 000030 0030+00 1/1 0/0 0/0 .rodata l_craw_offset */
|
||||
SECTION_RODATA static u8 const l_craw_offset[48] = {
|
||||
0xC2, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xBE, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xC2, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xBE, 0x00, 0x00,
|
||||
SECTION_RODATA static f32 const l_craw_offset[12] = {
|
||||
-95.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
95.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
-95.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
95.0f,
|
||||
};
|
||||
COMPILER_STRIP_GATE(0x80BB37E8, &l_craw_offset);
|
||||
|
||||
@@ -321,18 +412,40 @@ COMPILER_STRIP_GATE(0x80BB3824, &lit_3934);
|
||||
|
||||
/* 80BAE5FC-80BAE68C 00037C 0090+00 1/1 0/0 0/0 .text initBaseMtx__9daObjBm_cFv */
|
||||
void daObjBm_c::initBaseMtx() {
|
||||
// NONMATCHING
|
||||
field_0x10a0.set(0.5f, 0.5f, 1.0f);
|
||||
mpModel->setBaseScale(scale);
|
||||
mpModel3->setBaseScale(scale);
|
||||
mpModel2->setBaseScale(field_0x10a0);
|
||||
setBaseMtx();
|
||||
}
|
||||
|
||||
/* 80BAE68C-80BAE778 00040C 00EC+00 2/2 0/0 0/0 .text setBaseMtx__9daObjBm_cFv */
|
||||
void daObjBm_c::setBaseMtx() {
|
||||
// NONMATCHING
|
||||
mDoMtx_stack_c::transS(current.pos.x,current.pos.y,current.pos.z);
|
||||
mDoMtx_stack_c::YrotM(shape_angle.y);
|
||||
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
mDoMtx_stack_c::scaleM(1.0f,1.0f,1.0f);
|
||||
PSMTXCopy(mDoMtx_stack_c::get(),mBgMtx);
|
||||
|
||||
#if DEBUG
|
||||
field_0x10e8 = 0.0f; // change to l_HIO
|
||||
field_0x10ec = 0.0f; // change to l_HIO
|
||||
#endif
|
||||
|
||||
mpModel2->setBaseScale(field_0x10a0);
|
||||
mDoMtx_stack_c::transS(field_0xfb8);
|
||||
mDoMtx_stack_c::ZXYrotM(field_0xfc4);
|
||||
mpModel2->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
mDoMtx_stack_c::transS(current.pos);
|
||||
mDoMtx_stack_c::ZXYrotM(home.angle);
|
||||
mpModel3->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
}
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80BB3828-80BB3830 000070 0008+00 2/4 0/0 0/0 .rodata @4106 */
|
||||
SECTION_RODATA static u8 const lit_4106[8] = {
|
||||
0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
|
||||
0x43, 0x30, 0x00, 0x00,
|
||||
0x80, 0x00, 0x00, 0x00,
|
||||
};
|
||||
COMPILER_STRIP_GATE(0x80BB3828, &lit_4106);
|
||||
|
||||
@@ -360,48 +473,58 @@ SECTION_DATA static void* l_eye_matName = (void*)(((char*)&d_a_obj_bemos__string
|
||||
/* 80BB3A9C-80BB3AA0 -00001 0004+00 0/1 0/0 0/0 .data l_head_joint */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DATA static void* l_head_joint = (void*)(((char*)&d_a_obj_bemos__stringBase0) + 0xD);
|
||||
SECTION_DATA static char* l_head_joint = "head";
|
||||
#pragma pop
|
||||
|
||||
/* 80BB3AA0-80BB3AA4 -00001 0004+00 0/1 0/0 0/0 .data l_bigGear_joint */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DATA static void* l_bigGear_joint = (void*)(((char*)&d_a_obj_bemos__stringBase0) + 0x12);
|
||||
SECTION_DATA static char* l_bigGear_joint = "cogRed";
|
||||
#pragma pop
|
||||
|
||||
/* 80BB3AA4-80BB3AA8 -00001 0004+00 0/1 0/0 0/0 .data l_smallGear0_joint */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DATA static void* l_smallGear0_joint = (void*)(((char*)&d_a_obj_bemos__stringBase0) + 0x19);
|
||||
SECTION_DATA static char* l_smallGear0_joint = "cogBlue";
|
||||
#pragma pop
|
||||
|
||||
/* 80BB3AA8-80BB3AAC -00001 0004+00 0/1 0/0 0/0 .data l_smallGear1_joint */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DATA static void* l_smallGear1_joint = (void*)(((char*)&d_a_obj_bemos__stringBase0) + 0x21);
|
||||
SECTION_DATA static char* l_smallGear1_joint = "cogGreen";
|
||||
#pragma pop
|
||||
|
||||
/* 80BB3AAC-80BB3AB0 -00001 0004+00 0/1 0/0 0/0 .data l_smallGear2_joint */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DATA static void* l_smallGear2_joint = (void*)(((char*)&d_a_obj_bemos__stringBase0) + 0x2A);
|
||||
SECTION_DATA static char* l_smallGear2_joint = "cogYellow";
|
||||
#pragma pop
|
||||
|
||||
/* 80BB3AB0-80BB3AC4 00003C 0014+00 0/2 0/0 0/0 .data l_joint_table */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DATA static u8 l_joint_table[20] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
SECTION_DATA static char* l_joint_table[5] = {
|
||||
l_head_joint,
|
||||
l_bigGear_joint,
|
||||
l_smallGear0_joint,
|
||||
l_smallGear1_joint,
|
||||
l_smallGear2_joint,
|
||||
};
|
||||
#pragma pop
|
||||
|
||||
/* 80BB3AC4-80BB3ADC 000050 0018+00 0/1 0/0 0/0 .data l_cull_box */
|
||||
#pragma push
|
||||
#pragma force_active on
|
||||
SECTION_DATA static u8 l_cull_box[24] = {
|
||||
0xC4, 0x96, 0x00, 0x00, 0xC2, 0xC8, 0x00, 0x00, 0xC4, 0x96, 0x00, 0x00,
|
||||
0x44, 0x96, 0x00, 0x00, 0x43, 0xC8, 0x00, 0x00, 0x44, 0x96, 0x00, 0x00,
|
||||
SECTION_DATA static Vec l_cull_box[2] = {
|
||||
{-1200.0f,
|
||||
-100.0f,
|
||||
-1200.0f
|
||||
},
|
||||
{
|
||||
1200.0f,
|
||||
400.0f,
|
||||
1200.0f
|
||||
},
|
||||
};
|
||||
#pragma pop
|
||||
|
||||
@@ -457,7 +580,77 @@ static dCcD_SrcCyl l_cyl_src = {
|
||||
|
||||
/* 80BAE778-80BAEADC 0004F8 0364+00 1/0 0/0 0/0 .text Create__9daObjBm_cFv */
|
||||
int daObjBm_c::Create() {
|
||||
// NONMATCHING
|
||||
fopAcM_SetMtx(this,mpModel->getBaseTRMtx());
|
||||
mStts.Init(0xff, 0xff, this);
|
||||
mSph.Set(l_sph_src);
|
||||
mSph.SetStts(&mStts);
|
||||
mCps.Set(l_cps_src);
|
||||
mCps.SetStts(&mStts);
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
mCyl[i].Set(l_cyl_src);
|
||||
mCyl[i].SetStts(&mStts);
|
||||
}
|
||||
|
||||
fopAcM_setCullSizeBox(this,l_cull_box[0].x,l_cull_box[0].y,l_cull_box[0].z,l_cull_box[1].x, l_cull_box[1].y, l_cull_box[1].z);
|
||||
JUTNameTab* joint_name = mpModel->getModelData()->getJointTree().getJointName();
|
||||
for (int i = 0; i < 5; i++) {
|
||||
if ( mpModel->getModelData()->getJointNum() <= i) break;
|
||||
if (!strcmp(joint_name->getName(i), l_joint_table[2])) {
|
||||
mHeadJntNo = i;
|
||||
mpModel->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack);
|
||||
}
|
||||
}
|
||||
|
||||
mpModel->setUserArea((u32)this);
|
||||
JUTNameTab* material_name = mpModel->getModelData()->getMaterialTable().getMaterialName();
|
||||
|
||||
u32 uVar12 = 0;
|
||||
while( true ) {
|
||||
if ( mpModel->getModelData()->getMaterialNum() <= uVar12) break;
|
||||
if (strcmp(material_name->getName(uVar12),"bmEye") == 0) {
|
||||
mpMaterial = mpModel->getModelData()->getMaterialNodePointer(uVar12);
|
||||
}
|
||||
uVar12 = uVar12 + 1;
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
if (field_0xfcc == 0) {
|
||||
OSReport_Error("ブ[モス]。苔のマテリアルがありません");
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
// (**(code **)(*(int *)(this + 0x10a0) + 0x14))(this + 0x1080,this + 0x1068,1);
|
||||
// (**(code **)(*(int *)(this + 0x10d0) + 0x14))(this + 0x10b0,this + 0x1074,1);
|
||||
|
||||
field_0x1039 = 1;
|
||||
|
||||
if (fopAcM_isSwitch(this,getSwNo2())) {
|
||||
field_0xff7 = 0x0;
|
||||
|
||||
if (getMoveType() != 1) {
|
||||
mpBaseAnm2->setFrame(mpBaseAnm2->getEndFrame());
|
||||
}
|
||||
|
||||
initActionObjBemos();
|
||||
} else {
|
||||
initActionEnBemos();
|
||||
if (getSwNo() != -1) {
|
||||
if (fopAcM_isSwitch(this,getSwNo())) {
|
||||
field_0xff7 = 0;
|
||||
initActionSwWait();
|
||||
}
|
||||
}
|
||||
field_0xff7 = 1;
|
||||
J3DAnmTevRegKey* model_data = (J3DAnmTevRegKey*)dComIfG_getObjectRes("Obj_bm", 0x14);
|
||||
mpBrkAnm->init(mpModel->getModelData(),model_data,1,2,1.0f,0,-1);
|
||||
mpBaseAnm->setFrame(mpBaseAnm->getEndFrame());
|
||||
initActionWarning();
|
||||
}
|
||||
|
||||
initBaseMtx();
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* ############################################################################################## */
|
||||
|
||||
Reference in New Issue
Block a user