mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-23 06:54:16 -04:00
1552 lines
50 KiB
C++
1552 lines
50 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_a_bridge.cpp
|
|
//
|
|
|
|
#include "d/dolzel.h" // IWYU pragma: keep
|
|
#include "d/actor/d_a_bridge.h"
|
|
#include "d/d_bg_w.h"
|
|
#include "d/d_procname.h"
|
|
#include "d/d_priority.h"
|
|
#include "d/d_cc_d.h"
|
|
#include "d/d_path.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/res/res_bridge.h"
|
|
#include "d/d_bg_w_sv.h"
|
|
#include "d/d_s_play.h"
|
|
#include "d/d_cc_uty.h"
|
|
#include "d/actor/d_a_bk.h"
|
|
#include "d/actor/d_a_bomb.h"
|
|
#include "d/actor/d_a_player.h"
|
|
#include "d/d_kankyo_wether.h"
|
|
#include "f_op/f_op_camera.h"
|
|
|
|
static cXyz* wind_vec;
|
|
static s16 wy;
|
|
static f32* wp;
|
|
|
|
static f32 ita_z_p[] = { 0.1f, 0.3f, 0.5f, 0.75f, 0.9f, 1.0f, 0.9f, 0.75f, 0.5f, 0.3f, 0.1f };
|
|
|
|
/* 00000078-00000504 .text ride_call_back__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c */
|
|
void ride_call_back(dBgW* bgw, fopAc_ac_c* i_ac, fopAc_ac_c* i_pt) {
|
|
bridge_class* i_this = (bridge_class*)i_ac;
|
|
|
|
cXyz pos = i_this->mBr[0].mPosition - i_pt->current.pos;
|
|
s32 brIdx = std::sqrtf(pos.x * pos.x + pos.z * pos.z) / 76.5f - -0.5f;
|
|
if (brIdx > i_this->mBrCount - 1) {
|
|
brIdx = i_this->mBrCount - 1;
|
|
} else if (brIdx < 0) {
|
|
brIdx = 0;
|
|
}
|
|
|
|
br_s* pBr = &i_this->mBr[brIdx];
|
|
f32 fVar2 = ((i_this->mTypeBits & 5) != 0) ? 0.85f : 1.0f;
|
|
cMtx_YrotS(*calc_mtx, -pBr->mRotation.y);
|
|
|
|
cXyz posDiff = i_pt->current.pos - pBr->mPosition;
|
|
cXyz sp4C;
|
|
MtxPosition(&posDiff, &sp4C);
|
|
|
|
posDiff = i_pt->old.pos - pBr->mPosition;
|
|
cXyz sp40;
|
|
MtxPosition(&posDiff, &sp40);
|
|
|
|
i_pt->speed.y = -5.0f;
|
|
|
|
f32 fVar7;
|
|
if (fpcM_GetName(i_pt) == PROC_PLAYER) {
|
|
fVar7 = 100.0f;
|
|
pBr->m3F4 = -31.0f;
|
|
i_this->m033C = 5;
|
|
} else if (fpcM_GetName(i_pt) == PROC_MO2) {
|
|
fVar7 = 150.0f;
|
|
pBr->m3F4 = -40.0f;
|
|
i_pt->speed.y = -20.0f;
|
|
} else if (fpcM_GetName(i_pt) == PROC_BK) {
|
|
bk_class* bk = (bk_class*)i_pt;
|
|
bk->speed.y = -20.0f;
|
|
fVar7 = 100.0f;
|
|
pBr->m3F4 = -25.0f;
|
|
bk->dr.m7B8 = fpcM_GetID(i_ac);
|
|
bk->dr.m7B2 = 8;
|
|
bk->dr.m7AC = pBr->mRotation;
|
|
|
|
if (sp4C.x > 0.0f) {
|
|
bk->dr.m79C = pBr->m11C + 1;
|
|
bk->dr.m7AC.y -= 0x4000;
|
|
bk->dr.m7B4 = -0x2000;
|
|
} else {
|
|
bk->dr.m79C = pBr->m0F8 + 1;
|
|
bk->dr.m7AC.y += 0x4000;
|
|
bk->dr.m7B4 = 0x2000;
|
|
}
|
|
bk->m0B2C = pBr;
|
|
} else {
|
|
fVar7 = 50.0f;
|
|
pBr->m3F4 = -10.0f;
|
|
if (fpcM_GetName(i_pt) == PROC_BOMB) {
|
|
daBomb_c* bomb = (daBomb_c*)i_pt;
|
|
|
|
if (bomb->getBombRestTime() <= 1) {
|
|
pBr->m3F4 = -300.0f;
|
|
i_this->m02E0 = 20.0f;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
fVar7 *= fVar2;
|
|
|
|
pBr->m3F4 *= fVar2;
|
|
pBr->m3F4 = pBr->m3F4 +
|
|
i_this->m02FC *
|
|
cM_ssin(i_this->m0300) * 0.03f * fVar7;
|
|
pBr->m400 = -sp4C.x * fVar7;
|
|
pBr->m406 = 2;
|
|
|
|
pos = sp4C - sp40;
|
|
|
|
f32 fVar3 = pos.abs() * 0.3f * fVar2;
|
|
if (fVar3 > 20.0f) {
|
|
fVar3 = 20.0f;
|
|
}
|
|
|
|
if (i_this->m02E0 <= fVar3) {
|
|
i_this->m02E0 = fVar3;
|
|
}
|
|
|
|
f32 tmp = fVar2 * std::fabsf(pos.x);
|
|
if (tmp > 50.0f) {
|
|
tmp = 50.0f;
|
|
}
|
|
|
|
if (i_this->m02E4 <= tmp) {
|
|
i_this->m02E4 += 0.5f;
|
|
}
|
|
}
|
|
|
|
/* 00000540-00000614 .text kikuzu_set__FP12bridge_classP4cXyz */
|
|
void kikuzu_set(bridge_class* i_this, cXyz* pPos) {
|
|
daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0);
|
|
csXyz shapeAngle = player->shape_angle;
|
|
shapeAngle.y -= -0x8000;
|
|
|
|
JPABaseEmitter* emitter = dComIfGp_particle_set(dPa_name::ID_COMMON_002B, pPos, &shapeAngle, NULL, 0xFF, NULL, -1, &i_this->actor.tevStr.mColorK0, &i_this->actor.tevStr.mColorK0, NULL);
|
|
if (emitter != NULL) {
|
|
emitter->setRate(10.0f);
|
|
emitter->setMaxFrame(1);
|
|
emitter->setSpread(0.2f);
|
|
emitter->setVolumeSweep(0.15f);
|
|
JGeometry::TVec3<f32> scale(0.7f, 0.7f, 0.7f);
|
|
emitter->setGlobalParticleScale(scale);
|
|
}
|
|
}
|
|
|
|
/* 00000614-000011EC .text daBridge_Draw__FP12bridge_class */
|
|
static BOOL daBridge_Draw(bridge_class* i_this) {
|
|
s16 atan;
|
|
s32 atan2;
|
|
s16 sVar7;
|
|
s16 sVar8;
|
|
|
|
if (i_this->mbStopDraw) {
|
|
return TRUE;
|
|
}
|
|
|
|
br_s* pBr = &i_this->mBr[0];
|
|
for (s32 i = 0; i < i_this->mBrCount; i++, pBr++) {
|
|
g_env_light.setLightTevColorType(pBr->mpModel, &i_this->actor.tevStr);
|
|
|
|
dComIfGd_setListBG();
|
|
mDoExt_modelUpdateDL(pBr->mpModel);
|
|
dComIfGd_setList();
|
|
|
|
if ((pBr->m408 & 4) == 0) {
|
|
continue;
|
|
}
|
|
|
|
cMtx_YrotS(*calc_mtx, i_this->m0300);
|
|
cXyz sp84(0.0f, 0.0f, 1.0f);
|
|
cXyz sp78;
|
|
MtxPosition(&sp84, &sp78);
|
|
cXyz sp6C = pBr->m11C[0] - pBr->m11C[1];
|
|
cXyz sp60 = pBr->m0F8[0] - pBr->m0F8[1];
|
|
|
|
if ((i_this->mTypeBits & 1) == 0) {
|
|
s32 uVar16 = (i_this->mTypeBits & 8) ? 5 : 3;
|
|
cXyz* segment0;
|
|
cXyz* segment1;
|
|
u8* size0 = pBr->mLineMat1.getSize(0);
|
|
u8* size1 = pBr->mLineMat1.getSize(2);
|
|
|
|
if ((pBr->m408 & 1) == 0) {
|
|
for (s32 j = 0; j < 5; j++) {
|
|
*size0++ = *size1++ = uVar16;
|
|
}
|
|
} else {
|
|
segment0 = pBr->mLineMat1.getPos(0);
|
|
segment1 = pBr->mLineMat1.getPos(2);
|
|
|
|
sp6C.x /= 4.0f;
|
|
sp6C.y /= 4.0f;
|
|
sp6C.z /= 4.0f;
|
|
|
|
f32 fVar3 = pBr->m3A0[0] * cM_ssin(i_this->m0300 * 5);
|
|
|
|
for (s32 j = 0; j < 5; j++, segment0++, segment1++, size0++, size1++) {
|
|
*size0 = uVar16;
|
|
|
|
f32 fVar2;
|
|
if (j == 2) {
|
|
fVar2 = 1.0f;
|
|
if (pBr->m3A4 <= 1) {
|
|
*size0 = 0;
|
|
} else if (pBr->m3A4 == 2) {
|
|
*size0 = 1;
|
|
}
|
|
pBr->m3A8[0] = *segment0;
|
|
} else if (j == 1 || j == 3) {
|
|
fVar2 = 0.7f;
|
|
} else {
|
|
fVar2 = 0.0f;
|
|
}
|
|
|
|
sp84.x = sp6C.x * j + fVar3 * (fVar2 * sp78.x);
|
|
sp84.y = sp6C.y * j;
|
|
sp84.z = sp6C.z * j + fVar3 * (fVar2 * sp78.z);
|
|
|
|
*segment0 = pBr->m11C[1] + sp84;
|
|
*segment1 = pBr->m11C[0];
|
|
*size1 = 0;
|
|
}
|
|
}
|
|
|
|
size0 = pBr->mLineMat1.getSize(1);
|
|
size1 = pBr->mLineMat1.getSize(3);
|
|
if ((pBr->m408 & 2) == 0) {
|
|
for (s32 j = 0; j < 5; j++) {
|
|
*size0++ = *size1++ = uVar16;
|
|
}
|
|
} else {
|
|
segment0 = pBr->mLineMat1.getPos(1);
|
|
segment1 = pBr->mLineMat1.getPos(3);
|
|
|
|
sp60.x /= 4.0f;
|
|
sp60.y /= 4.0f;
|
|
sp60.z /= 4.0f;
|
|
|
|
f32 fVar3 = pBr->m3A0[1] * cM_ssin(i_this->m0300 * 5);
|
|
|
|
for (s32 j = 0; j < 5; j++, segment0++, segment1++, size0++, size1++) {
|
|
*size0 = uVar16;
|
|
|
|
f32 fVar2;
|
|
if (j == 2) {
|
|
fVar2 = 1.0f;
|
|
if (pBr->m3A5 <= 1) {
|
|
*size0 = 0;
|
|
} else if (pBr->m3A5 == 2) {
|
|
*size0 = 1;
|
|
}
|
|
pBr->m3A8[1] = *segment0;
|
|
} else if (j == 1 || j == 3) {
|
|
fVar2 = 0.7f;
|
|
} else {
|
|
fVar2 = 0.0f;
|
|
}
|
|
|
|
sp84.x = sp60.x * j + fVar3 * (fVar2 * sp78.x);
|
|
sp84.y = sp60.y * j;
|
|
sp84.z = sp60.z * j + fVar3 * (fVar2 * sp78.z);
|
|
|
|
*segment0 = pBr->m0F8[1] + sp84;
|
|
*segment1 = pBr->m0F8[0];
|
|
*size1 = 0;
|
|
}
|
|
}
|
|
|
|
#ifdef __MWERKS__
|
|
pBr->mLineMat1.update(5, (GXColor){150, 150, 150, 255}, &i_this->actor.tevStr);
|
|
#else
|
|
GXColor color = (GXColor){150, 150, 150, 255};
|
|
pBr->mLineMat1.update(5, color, &i_this->actor.tevStr);
|
|
#endif
|
|
dComIfGd_set3DlineMat(&pBr->mLineMat1);
|
|
continue;
|
|
}
|
|
|
|
if ((pBr->m408 & 1) != 0) {
|
|
atan = -cM_atan2s(sp6C.y, sp6C.z);
|
|
atan2 = cM_atan2s(sp6C.x, std::sqrtf(sp6C.y * sp6C.y + sp6C.z * sp6C.z));
|
|
MtxTrans(pBr->m11C[1].x, pBr->m11C[1].y, pBr->m11C[1].z, false);
|
|
s16 sVar8;
|
|
if (pBr->m3A0[0] != 0) {
|
|
sVar8 = pBr->m3A0[0] * cM_ssin(i_this->m0300 * 6) * 100.0f;
|
|
sVar7 = i_this->m0300;
|
|
} else {
|
|
sVar8 = sVar7 = 0;
|
|
}
|
|
cMtx_YrotM(*calc_mtx, sVar7);
|
|
cMtx_XrotM(*calc_mtx, atan + sVar8);
|
|
cMtx_YrotM(*calc_mtx, atan2);
|
|
pBr->mpModelRope0->setBaseTRMtx(*calc_mtx);
|
|
g_env_light.setLightTevColorType(pBr->mpModelRope0,&i_this->actor.tevStr);
|
|
mDoExt_modelUpdateDL(pBr->mpModelRope0);
|
|
}
|
|
|
|
if ((pBr->m408 & 2) != 0) {
|
|
atan = cM_atan2s(sp60.y, sp60.z);
|
|
atan = -atan;
|
|
atan2 = cM_atan2s(sp60.x, std::sqrtf(sp60.y * sp60.y + sp60.z * sp60.z));
|
|
MtxTrans(pBr->m0F8[1].x, pBr->m0F8[1].y, pBr->m0F8[1].z, false);
|
|
if (pBr->m3A0[1] != 0) {
|
|
sVar8 = pBr->m3A0[1] * cM_ssin(i_this->m0300 * 6) * 100.0f;
|
|
sVar7 = i_this->m0300;
|
|
} else {
|
|
sVar8 = sVar7 = 0;
|
|
}
|
|
cMtx_YrotM(*calc_mtx, sVar7);
|
|
cMtx_XrotM(*calc_mtx, atan + sVar8);
|
|
cMtx_YrotM(*calc_mtx, atan2);
|
|
pBr->mpModelRope1->setBaseTRMtx(*calc_mtx);
|
|
g_env_light.setLightTevColorType(pBr->mpModelRope1,&i_this->actor.tevStr);
|
|
mDoExt_modelUpdateDL(pBr->mpModelRope1);
|
|
}
|
|
}
|
|
|
|
if ((i_this->mTypeBits & 5) == 0) {
|
|
cXyz sp54(-120.0f, 350.0f, -40.0f);
|
|
cXyz sp48;
|
|
|
|
cMtx_YrotS(*calc_mtx, i_this->actor.home.angle.y);
|
|
MtxPosition(&sp54, &sp48);
|
|
|
|
cXyz* segment1 = i_this->mLineMat.getPos(0);
|
|
segment1->x = i_this->actor.home.pos.x + sp48.x;
|
|
segment1->y = i_this->actor.home.pos.y + sp48.y;
|
|
segment1->z = i_this->actor.home.pos.z + sp48.z;
|
|
sp54.z *= -1.0f;
|
|
|
|
segment1 = &i_this->mLineMat.getPos(0)[i_this->m030C] + 1;
|
|
if ((i_this->mTypeBits & 2) != 0) {
|
|
bridge_class * aite = i_this->mpAite;
|
|
if (aite != NULL) {
|
|
segment1->x = aite->m032C.x;
|
|
segment1->y = aite->m032C.y;
|
|
segment1->z = aite->m032C.z;
|
|
}
|
|
} else {
|
|
MtxPosition(&sp54, &sp48);
|
|
segment1->x = i_this->mEndPos.x + sp48.x;
|
|
segment1->y = i_this->mEndPos.y + sp48.y;
|
|
segment1->z = i_this->mEndPos.z + sp48.z;
|
|
}
|
|
sp54.x *= -1.0f;
|
|
sp54.z *= -1.0f;
|
|
MtxPosition(&sp54, &sp48);
|
|
|
|
segment1 = i_this->mLineMat.getPos(1);
|
|
segment1->x = i_this->actor.home.pos.x + sp48.x;
|
|
segment1->y = i_this->actor.home.pos.y + sp48.y;
|
|
segment1->z = i_this->actor.home.pos.z + sp48.z;
|
|
|
|
sp54.z *= -1.0f;
|
|
|
|
segment1 = &i_this->mLineMat.getPos(1)[i_this->m030C] + 1;
|
|
|
|
if ((i_this->mTypeBits & 2) != 0) {
|
|
bridge_class * aite = i_this->mpAite;
|
|
if (aite != NULL) {
|
|
segment1->x = aite->m0320.x;
|
|
segment1->y = aite->m0320.y;
|
|
segment1->z = aite->m0320.z;
|
|
}
|
|
} else {
|
|
MtxPosition(&sp54, &sp48);
|
|
segment1->x = i_this->mEndPos.x + sp48.x;
|
|
segment1->y = i_this->mEndPos.y + sp48.y;
|
|
segment1->z = i_this->mEndPos.z + sp48.z;
|
|
}
|
|
|
|
f32 tmp;
|
|
if ((i_this->mTypeBits & 8) != 0) {
|
|
tmp = 6.5f;
|
|
} else {
|
|
tmp = 4.0f;
|
|
}
|
|
|
|
#ifdef __MWERKS__
|
|
i_this->mLineMat.update(i_this->m030C + 2, tmp, (GXColor){150, 150, 150, 255}, 0, &i_this->actor.tevStr);
|
|
#else
|
|
GXColor color = (GXColor){150, 150, 150, 255};
|
|
i_this->mLineMat.update(i_this->m030C + 2, tmp, color, 0, &i_this->actor.tevStr);
|
|
#endif
|
|
dComIfGd_set3DlineMat(&i_this->mLineMat);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000011EC-00001580 .text control1__FP12bridge_classP4br_s */
|
|
void control1(bridge_class* i_this, br_s* pBr) {
|
|
cXyz sp3C;
|
|
cXyz sp30;
|
|
cXyz sp24;
|
|
cXyz sp18;
|
|
cXyz sp0C;
|
|
|
|
pBr++;
|
|
|
|
i_this->m02EC += i_this->m02F0;
|
|
i_this->m02EE += i_this->m02F2;
|
|
|
|
s16 sVar13;
|
|
if (i_this->mBrCount > 10) {
|
|
sVar13 = 4000;
|
|
} else {
|
|
sVar13 = 8000;
|
|
}
|
|
|
|
sp3C.x = i_this->m02F8 * cM_scos(i_this->m02EC);
|
|
sp3C.y = 0.0f;
|
|
sp3C.z = 0.0f;
|
|
cMtx_YrotS(*calc_mtx, i_this->actor.home.angle.y);
|
|
MtxPosition(&sp3C, &sp24);
|
|
sp3C.x = 1.0f;
|
|
MtxPosition(&sp3C, &sp18);
|
|
sp3C.x = 0.0f;
|
|
sp3C.z = *wp * 5.0f;
|
|
cMtx_YrotS(*calc_mtx, wy);
|
|
MtxPosition(&sp3C, &sp0C);
|
|
sp3C.x = 0.0f;
|
|
sp3C.z = 75.0f;
|
|
|
|
for (s32 i = 1; i < i_this->mBrCount; i++, pBr++) {
|
|
f32 x;
|
|
f32 y;
|
|
f32 z;
|
|
f32 tmp = pBr->m3F8 * 0.5f + (pBr->m3FC * pBr->m3F0 * 0.5f + pBr->m3CC.y);
|
|
f32 fVar8 = i_this->m02F4 * cM_ssin(i_this->m02EC + i * sVar13) * pBr->m3F0;
|
|
f32 fVar7 = i_this->m02FC * cM_ssin(i_this->m02EE + i * (sVar13 + 1000)) * pBr->m3F0;
|
|
|
|
x = (pBr->m3CC.x - pBr[-1].m3CC.x) + fVar8 * sp18.x + sp24.x * pBr->m3F0 + sp0C.x;
|
|
y = fVar7 + (tmp - pBr[-1].m3CC.y);
|
|
z = (pBr->m3CC.z - pBr[-1].m3CC.z) + fVar8 * sp18.z + sp24.z * pBr->m3F0 + sp0C.z;
|
|
|
|
s16 atan2;
|
|
s16 atan;
|
|
atan = (s16)cM_atan2s(x, z);
|
|
atan2 = -cM_atan2s(y, std::sqrtf(x * x + z * z));
|
|
|
|
cMtx_YrotS(*calc_mtx, atan);
|
|
cMtx_XrotM(*calc_mtx, atan2);
|
|
MtxPosition(&sp3C, &sp30);
|
|
|
|
pBr->m3CC.x = pBr[-1].m3CC.x + sp30.x;
|
|
pBr->m3CC.y = pBr[-1].m3CC.y + sp30.y;
|
|
pBr->m3CC.z = pBr[-1].m3CC.z + sp30.z;
|
|
}
|
|
}
|
|
|
|
/* 00001580-0000178C .text control2__FP12bridge_classP4br_s */
|
|
void control2(bridge_class* i_this, br_s* pBr) {
|
|
cXyz sp18;
|
|
cXyz sp0C;
|
|
|
|
pBr += i_this->mBrCount - 2;
|
|
sp18.x = 0.0f;
|
|
sp18.y = 0.0f;
|
|
sp18.z = 75.0f;
|
|
|
|
for (s32 i = 0; i < i_this->mBrCount - 1; i++, pBr--) {
|
|
f32 tmp = pBr->m3F8 * 0.5f + (pBr->m3FC * pBr->m3F0 * 0.5f + pBr->m3CC.y);
|
|
f32 y = tmp - pBr[1].m3CC.y;
|
|
|
|
f32 x = pBr->m3CC.x - pBr[1].m3CC.x;
|
|
f32 z = pBr->m3CC.z - pBr[1].m3CC.z;
|
|
|
|
s16 atan2;
|
|
s16 atan;
|
|
atan = (s16)cM_atan2s(x, z);
|
|
atan2 = -cM_atan2s(y, std::sqrtf(x * x + z * z));
|
|
|
|
pBr[1].mRotation.y = atan;
|
|
pBr[1].mRotation.x = atan2;
|
|
|
|
cMtx_YrotS(*calc_mtx, atan);
|
|
cMtx_XrotM(*calc_mtx, atan2);
|
|
MtxPosition(&sp18, &sp0C);
|
|
|
|
pBr->m3CC.x = pBr[1].m3CC.x + sp0C.x;
|
|
pBr->m3CC.y = pBr[1].m3CC.y + sp0C.y;
|
|
pBr->m3CC.z = pBr[1].m3CC.z + sp0C.z;
|
|
}
|
|
}
|
|
|
|
/* 0000178C-000018A8 .text control3__FP12bridge_classP4br_s */
|
|
void control3(bridge_class* i_this, br_s* pBr) {
|
|
f32 x = pBr->m3CC.x - pBr[1].m3CC.x;
|
|
f32 y = pBr->m3CC.y - pBr[1].m3CC.y;
|
|
f32 z = pBr->m3CC.z - pBr[1].m3CC.z;
|
|
|
|
pBr->mRotation.y = cM_atan2s(x, z);
|
|
pBr->mRotation.x = -cM_atan2s(y, std::sqrtf(x * x + z * z));
|
|
}
|
|
|
|
/* 000018A8-00001B08 .text cut_control1__FP12bridge_classP4br_s */
|
|
void cut_control1(bridge_class* i_this, br_s* pBr) {
|
|
cXyz sp24;
|
|
cXyz sp18;
|
|
cXyz spC;
|
|
|
|
pBr++;
|
|
cMtx_YrotS(*calc_mtx, i_this->actor.home.angle.y);
|
|
sp24.x = 0.0f;
|
|
sp24.y = 0.0f;
|
|
sp24.z = 1.0f;
|
|
MtxPosition(&sp24, &spC);
|
|
sp24.z = 75.0f;
|
|
|
|
for (s32 i = 1; i < i_this->m0304; i++, pBr++) {
|
|
f32 fVar2 = pBr->m3CC.y + pBr->m3FC;
|
|
f32 fVar1 = pBr->m3EC + 30.0f;
|
|
if (fVar2 < fVar1) {
|
|
fVar2 = fVar1;
|
|
pBr->m407++;
|
|
}
|
|
|
|
f32 y = fVar2 - pBr[-1].m3CC.y;
|
|
f32 x = spC.x + (pBr->m3CC.x - pBr[-1].m3CC.x);
|
|
f32 z = spC.z + (pBr->m3CC.z - pBr[-1].m3CC.z);
|
|
s16 atan2;
|
|
s16 atan;
|
|
|
|
atan = (s16)cM_atan2s(x, z);
|
|
atan2 = -cM_atan2s(y, std::sqrtf(x * x + z * z));
|
|
|
|
pBr[-1].mRotation.y = atan + 0x8000;
|
|
pBr[-1].mRotation.x = -atan2;
|
|
|
|
if (i == i_this->m0304 - 1) {
|
|
pBr[0].mRotation.y = atan + 0x8000;
|
|
pBr[0].mRotation.x = -atan2;
|
|
}
|
|
|
|
cMtx_YrotS(*calc_mtx, atan);
|
|
cMtx_XrotM(*calc_mtx, atan2);
|
|
MtxPosition(&sp24, &sp18);
|
|
|
|
pBr[0].m3CC.x = pBr[-1].m3CC.x + sp18.x;
|
|
pBr[0].m3CC.y = pBr[-1].m3CC.y + sp18.y;
|
|
pBr[0].m3CC.z = pBr[-1].m3CC.z + sp18.z;
|
|
}
|
|
}
|
|
|
|
/* 00001B08-00001D84 .text cut_control2__FP12bridge_classP4br_s */
|
|
void cut_control2(bridge_class* i_this, br_s* pBr) {
|
|
cXyz sp24;
|
|
cXyz sp18;
|
|
cXyz spC;
|
|
|
|
pBr += i_this->mBrCount - 2;
|
|
cMtx_YrotS(*calc_mtx, i_this->actor.home.angle.y);
|
|
sp24.x = 0.0f;
|
|
sp24.y = 0.0f;
|
|
sp24.z = -1.0f;
|
|
MtxPosition(&sp24, &spC);
|
|
sp24.z = 75.0f;
|
|
|
|
for (s32 i = 0; i < (i_this->mBrCount - 1) - i_this->m0304; i++, pBr--) {
|
|
f32 fVar2 = pBr->m3CC.y + pBr->m3FC;
|
|
f32 fVar1 = pBr->m3EC + 30.0f;
|
|
if (fVar2 < fVar1) {
|
|
fVar2 = fVar1;
|
|
pBr->m407++;
|
|
}
|
|
f32 y = fVar2 - pBr[1].m3CC.y;
|
|
f32 x = spC.x + (pBr->m3CC.x - pBr[1].m3CC.x);
|
|
f32 z = spC.z + (pBr->m3CC.z - pBr[1].m3CC.z);
|
|
s16 atan2;
|
|
s32 atan;
|
|
atan = cM_atan2s(x, z);
|
|
atan2 = -cM_atan2s(y, std::sqrtf(x * x + z * z));
|
|
pBr[1].mRotation.y = atan;
|
|
pBr[1].mRotation.x = atan2;
|
|
if (i == (i_this->mBrCount - 2) - i_this->m0304) {
|
|
pBr[0].mRotation.y = atan;
|
|
pBr[0].mRotation.x = atan2;
|
|
}
|
|
cMtx_YrotS(*calc_mtx, atan);
|
|
cMtx_XrotM(*calc_mtx, atan2);
|
|
MtxPosition(&sp24, &sp18);
|
|
pBr[0].m3CC.x = pBr[1].m3CC.x + sp18.x;
|
|
pBr[0].m3CC.y = pBr[1].m3CC.y + sp18.y;
|
|
pBr[0].m3CC.z = pBr[1].m3CC.z + sp18.z;
|
|
}
|
|
}
|
|
|
|
/* 00001D84-00001FAC .text himo_cut_control1__FP4cXyz */
|
|
void himo_cut_control1(cXyz* pPos) {
|
|
cXyz pos;
|
|
cXyz sp18;
|
|
cXyz transformedPos;
|
|
|
|
pos.x = 0.0f;
|
|
pos.y = 0.0f;
|
|
pos.z = *wp * 7.0f;
|
|
cMtx_YrotS(*calc_mtx, wy);
|
|
MtxPosition(&pos, &transformedPos);
|
|
pos.x = 0.0f;
|
|
pos.y = 0.0f;
|
|
pos.z = 23.0f;
|
|
|
|
pPos++;
|
|
for (s32 i = 1; i < 5; i++, pPos++) {
|
|
f32 x = transformedPos.x + (pPos[0].x - pPos[-1].x);
|
|
f32 y = (pPos[0].y - pPos[-1].y) - 10.0f;
|
|
f32 z = transformedPos.z + (pPos[0].z - pPos[-1].z);
|
|
s16 atan2;
|
|
s32 atan;
|
|
|
|
atan = cM_atan2s(x, z);
|
|
atan2 = -cM_atan2s(y, std::sqrtf(x * x + z * z));
|
|
cMtx_YrotS(*calc_mtx, atan);
|
|
cMtx_XrotM(*calc_mtx, atan2);
|
|
MtxPosition(&pos, &sp18);
|
|
pPos[0].x = pPos[-1].x + sp18.x;
|
|
pPos[0].y = pPos[-1].y + sp18.y;
|
|
pPos[0].z = pPos[-1].z + sp18.z;
|
|
}
|
|
}
|
|
|
|
/* 00001FAC-00002A1C .text bridge_move__FP12bridge_class */
|
|
void bridge_move(bridge_class* i_this) {
|
|
/* Nonmatching */
|
|
daPy_py_c* player = static_cast<daPy_py_c*>(dComIfGp_getPlayer(0));
|
|
s32 i;
|
|
s32 j;
|
|
br_s* pBr = &i_this->mBr[0];
|
|
cXyz sp38;
|
|
cXyz sp2C;
|
|
cXyz sp14;
|
|
s16 my_tgt;
|
|
f32 fVar14;
|
|
f32 fVar2;
|
|
f32 tmpf;
|
|
s32 iVar11;
|
|
|
|
switch (i_this->mMoveProcMode) {
|
|
case 1:
|
|
break;
|
|
|
|
case 0:
|
|
i_this->m02D9 = 0;
|
|
i_this->mMoveProcMode = 2;
|
|
fopAcM_OffStatus(&i_this->actor, fopAcStts_CULL_e);
|
|
|
|
case 2:
|
|
for (i = 0; i < i_this->mBrCount; i++) {
|
|
if ((i_this->mTypeBits & 1) == 1) {
|
|
i_this->mBr[i].m3F0 = 1.0f;
|
|
} else {
|
|
tmpf = ((f32)i / (i_this->mBrCount - 1)) * M_PI;
|
|
i_this->mBr[i].m3F0 = std::fabsf(std::sinf(tmpf));
|
|
}
|
|
i_this->mBr[i].m3A4 = i_this->mBr[i].m3A5 = 3;
|
|
}
|
|
i_this->mMoveProcMode = 3;
|
|
|
|
case 3:
|
|
i_this->m0300 += 3000;
|
|
pBr->m3CC = i_this->actor.home.pos;
|
|
|
|
if ((i_this->mTypeBits & 1) == 1) {
|
|
cMtx_YrotS(*calc_mtx, i_this->actor.home.angle.y);
|
|
|
|
sp38.x = i_this->m02F8 * cM_scos(i_this->m02EC) * -2.0f;
|
|
sp38.y = sp38.z = 0.0f;
|
|
MtxPosition(&sp38, &sp2C);
|
|
pBr->m3CC += sp2C;
|
|
}
|
|
|
|
control1(i_this, pBr);
|
|
|
|
(pBr + i_this->mBrCount - 1)->m3CC = i_this->mEndPos;
|
|
if ((i_this->mTypeBits & 1) == 1) {
|
|
(pBr + i_this->mBrCount - 1)->m3CC -= sp2C;
|
|
}
|
|
|
|
control2(i_this, pBr);
|
|
control3(i_this, pBr);
|
|
|
|
sp14 = i_this->actor.home.pos - pBr->m3CC;
|
|
|
|
i_this->actor.current.pos = pBr->m3CC;
|
|
i_this->actor.current.angle = pBr->mRotation;
|
|
|
|
for (i = 0; i < i_this->mBrCount; i++, pBr++) {
|
|
pBr->mPosition = pBr->m3CC;
|
|
tmpf = (((f32)(i_this->mBrCount - i) / (f32)i_this->mBrCount) * 0.75f);
|
|
pBr->mPosition.x += sp14.x * tmpf;
|
|
pBr->mPosition.y += sp14.y * tmpf;
|
|
pBr->mPosition.z += sp14.z * tmpf;
|
|
|
|
if (pBr->m406 != 0) {
|
|
for (j = -5; j <= 5; j++) {
|
|
iVar11 = i + j;
|
|
if ((iVar11 < 0) || (iVar11 >= i_this->mBrCount)) {
|
|
continue;
|
|
}
|
|
|
|
my_tgt = (f32)pBr->m400 * ita_z_p[5 + j] * pBr[j].m3F0;
|
|
cLib_addCalcAngleS2(&pBr[j].m402, my_tgt, 4, 0x800);
|
|
cLib_addCalc2(&pBr[j].m3F8, pBr->m3F4 * ita_z_p[5 + j], 1.0f, 10.0f);
|
|
}
|
|
}
|
|
|
|
if (((pBr->m408 & 4) != 0) && (pBr->m408 & 3) != 3) {
|
|
fVar14 = 0.0f;
|
|
fVar2 = -80.0f;
|
|
if ((pBr->m408 & 3) == 1) {
|
|
fVar14 = 7000.0f;
|
|
fVar2 = -30.0f;
|
|
} else if ((pBr->m408 & 3) == 2) {
|
|
fVar14 = -7000.0f;
|
|
fVar2 = -30.0f;
|
|
}
|
|
|
|
for (j = -5; j <= 5; j++) {
|
|
iVar11 = i + j;
|
|
if ((iVar11 < 0) || (iVar11 >= i_this->mBrCount)) {
|
|
continue;
|
|
}
|
|
|
|
my_tgt = fVar14 * ita_z_p[5 + j] * pBr[j].m3F0;
|
|
cLib_addCalcAngleS2(&pBr[j].m404, my_tgt, 4, 0x800);
|
|
cLib_addCalc2(&pBr[j].m3F8, fVar2 * ita_z_p[5 + j], 1.0f, 15.0f);
|
|
|
|
if (((pBr->m408 & 3) == 0) && ((i_this->mTypeBits & 4) == 0 && (j >= -2) && (j <= 2) && (pBr[j].m406 != 0))) {
|
|
if (dComIfGp_event_runCheck()) {
|
|
i_this->m0308 = 0;
|
|
} else {
|
|
i_this->m0308 += 2;
|
|
}
|
|
|
|
if (i_this->m0308 > 100) {
|
|
i_this->mMoveProcMode = 4;
|
|
i_this->m0304 = iVar11;
|
|
if (i_this->m033C != 0) {
|
|
dComIfGp_getVibration().StartShock(REG0_S(2) + 5, -0x21, cXyz(0.0f, 1.0f, 0.0f));
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (pBr[j].m3F4 < -200.0f) {
|
|
i_this->mMoveProcMode = 4;
|
|
i_this->m0304 = iVar11;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (((pBr->m408 & 4) != 0) && (pBr->m3A0[0] != 0 || (pBr->m3A0[1] != 0))) {
|
|
f32 fVar141 = (pBr->m3A0[0] | pBr->m3A0[1]) * 150.0f;
|
|
fVar14 = fVar141 * cM_ssin(i_this->m0300 * 4);
|
|
for (j = -5; j <= 5; j++) {
|
|
iVar11 = i + j;
|
|
if (iVar11 < 0 || iVar11 >= i_this->mBrCount) {
|
|
continue;
|
|
}
|
|
|
|
my_tgt = fVar14 * ita_z_p[5 + j] * pBr[j].m3F0;
|
|
pBr[j].m404 += my_tgt;
|
|
}
|
|
}
|
|
|
|
if (pBr->m406 != 0) {
|
|
pBr->m406--;
|
|
}
|
|
pBr->m400 = 0;
|
|
pBr->mRotation.z = pBr->m402 + pBr->m404;
|
|
cLib_addCalcAngleS2(&pBr->m402, 0, 4, 0x400);
|
|
cLib_addCalcAngleS2(&pBr->m404, 0, 4, 0x400);
|
|
cLib_addCalc2(&pBr->m3FC, -15.0f, 1.0f, 5.0f);
|
|
cLib_addCalc0(&pBr->m3F8, 1.0f, 5.0f);
|
|
}
|
|
|
|
if (i_this->m0308 != 0) {
|
|
i_this->m0308--;
|
|
}
|
|
|
|
i_this->m02FC = i_this->m02E0;
|
|
i_this->m02F4 = i_this->m02E0;
|
|
i_this->m02F8 = i_this->m02E4;
|
|
i_this->m02F2 = 3000;
|
|
i_this->m02F0 = 0x578;
|
|
|
|
if (*wp > 0.1f) {
|
|
tmpf = 2.0f;
|
|
} else {
|
|
tmpf = 0.0f;
|
|
}
|
|
cLib_addCalc2(&i_this->m02E0, tmpf, 0.1f, 0.1f);
|
|
cLib_addCalc2(&i_this->m02E4, tmpf * 0.3f, 0.1f, 0.05f);
|
|
break;
|
|
|
|
case 4:
|
|
for (i = 0; i < i_this->mBrCount; i++, pBr++) {
|
|
pBr->m3FC = 0.0f;
|
|
if ((i == i_this->m0304) || (i == i_this->m0304 + -1) || (i == i_this->m0304 + 1)) {
|
|
sp38 = pBr->mPosition;
|
|
sp38.x += cM_rndFX(50.0f);
|
|
sp38.z += cM_rndFX(50.0f);
|
|
|
|
kikuzu_set(i_this, &sp38);
|
|
|
|
sp38 = pBr->mPosition;
|
|
sp38.x += cM_rndFX(50.0f);
|
|
sp38.z += cM_rndFX(50.0f);
|
|
|
|
kikuzu_set(i_this, &sp38);
|
|
}
|
|
}
|
|
i_this->mMoveProcMode = 5;
|
|
i_this->m0312 = 50;
|
|
|
|
fopAcM_seStart(player, JA_SE_OBJ_SBRIDGE_BREAK, 0);
|
|
|
|
case 5:
|
|
pBr = &i_this->mBr[0];
|
|
if (i_this->m0312 != 0) {
|
|
i_this->m0312--;
|
|
}
|
|
i_this->m0300 += 4000;
|
|
pBr->m3CC = i_this->actor.home.pos;
|
|
|
|
cut_control1(i_this, pBr);
|
|
(pBr + i_this->mBrCount - 1)->m3CC = i_this->mEndPos;
|
|
cut_control2(i_this, pBr);
|
|
|
|
for (i = 0; i < i_this->mBrCount; i++, pBr++) {
|
|
pBr->mPosition = pBr->m3CC;
|
|
cLib_addCalc2(&pBr->m3FC, -50.0f, 1.0f, 5.0f);
|
|
pBr->m3EC = -10000.0f;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 00002A1C-00002A8C .text s_a_b_sub__FPvPv */
|
|
void* s_a_b_sub(void* ac1, void* ac2) {
|
|
if (fopAc_IsActor(ac1) && fpcM_GetName(ac1) == PROC_BRIDGE && ac1 != ac2) {
|
|
bridge_class* bridge = (bridge_class*)ac1;
|
|
if ((bridge->mTypeBits & 0x82) == 2) {
|
|
return ac1;
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/* 00002A8C-00002AB8 .text search_aite__FP12bridge_class */
|
|
bridge_class* search_aite(bridge_class* i_this) {
|
|
return (bridge_class*)fpcEx_Search(s_a_b_sub, &i_this->actor);
|
|
}
|
|
|
|
/* 00002AB8-00003C68 .text daBridge_Execute__FP12bridge_class */
|
|
static BOOL daBridge_Execute(bridge_class* i_this) {
|
|
/* Nonmatching */
|
|
fopAc_ac_c* a_player = static_cast<fopAc_ac_c*>(dComIfGp_getPlayer(0));
|
|
daPy_py_c* player = static_cast<daPy_py_c*>(dComIfGp_getPlayer(0));
|
|
camera_class* pCam = dComIfGp_getCamera(0);
|
|
s32 i;
|
|
|
|
cXyz eyeDir = i_this->actor.current.pos - pCam->mLookat.mEye;
|
|
cXyz spCC;
|
|
|
|
if (i_this->m033C != 0) {
|
|
i_this->m033C--;
|
|
}
|
|
|
|
if (eyeDir.abs() > 5000.0f) {
|
|
spCC = pCam->mLookat.mCenter - pCam->mLookat.mEye;
|
|
s16 atan = cM_atan2s(spCC.x, spCC.z);
|
|
cMtx_YrotS(*calc_mtx, -atan);
|
|
MtxPosition(&eyeDir, &spCC);
|
|
if (spCC.z < 0.0f) {
|
|
i_this->mbStopDraw = 1;
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
i_this->mbStopDraw = 0;
|
|
wind_vec = dKyw_get_wind_vec();
|
|
wy = cM_atan2s(wind_vec->x, wind_vec->z);
|
|
wp = dKyw_get_wind_power();
|
|
i_this->m0302++;
|
|
|
|
if (((i_this->mTypeBits & 2) != 0) && (i_this->mpAite == NULL)) {
|
|
i_this->mpAite = search_aite(i_this);
|
|
}
|
|
|
|
bridge_move(i_this);
|
|
|
|
i_this->m030C = 0;
|
|
cXyz spC0;
|
|
br_s* pBr = &i_this->mBr[0];
|
|
|
|
bool bGotFlamePos = false;
|
|
if (player->getBokoFlamePos(&spC0) != FALSE) {
|
|
bGotFlamePos = true;
|
|
}
|
|
|
|
for (i = 0; i < i_this->mBrCount; i++, pBr++) {
|
|
MtxTrans(pBr->mPosition.x, pBr->mPosition.y, pBr->mPosition.z, false);
|
|
cMtx_YrotM(*calc_mtx, pBr->mRotation.y);
|
|
cMtx_XrotM(*calc_mtx, pBr->mRotation.x);
|
|
cMtx_ZrotM(*calc_mtx, pBr->mRotation.z);
|
|
|
|
if (i_this->m0304 != 0) {
|
|
MtxTrans(0.0f, 0.0f, (i > i_this->m0304) ? 30.0f : -30.0f, true);
|
|
}
|
|
|
|
eyeDir.x = pBr->mScale.x * 99.0f;
|
|
eyeDir.y = 0.0f;
|
|
eyeDir.z = 0.0f;
|
|
MtxPosition(&eyeDir, &pBr->m11C[1]);
|
|
eyeDir.x *= -1.0f;
|
|
MtxPosition(&eyeDir, &pBr->m0F8[1]);
|
|
eyeDir.y = REG0_F(4) + -30.0f;
|
|
MtxPosition(&eyeDir, &pBr->m0F8[2]);
|
|
eyeDir.x *= -1.0f;
|
|
MtxPosition(&eyeDir, &pBr->m11C[2]);
|
|
|
|
if ((pBr->m408 & 4) != 0) {
|
|
if (pBr->m418 != 0) {
|
|
if (pBr->m418 > 0) {
|
|
pBr->m418--;
|
|
}
|
|
|
|
f32 fVar19 = (i_this->mTypeBits & 1) ? 1000.0f : 200.0f;
|
|
pBr->m11C[0] = pBr->m11C[1];
|
|
pBr->m11C[0].y += fVar19;
|
|
pBr->m0F8[0] = pBr->m0F8[1];
|
|
pBr->m0F8[0].y += fVar19;
|
|
|
|
if (((i_this->mTypeBits & 2) != 0) && (i == i_this->m02DD - 1)) {
|
|
i_this->m0320 = pBr->m11C[0];
|
|
i_this->m032C = pBr->m0F8[0];
|
|
}
|
|
}
|
|
|
|
u32 soundId = 0;
|
|
bool bVar1 = false;
|
|
|
|
if ((i_this->mTypeBits & 9) == 0) {
|
|
if (i_this->mBrCount - i < 3) {
|
|
pBr->m408 = 0;
|
|
}
|
|
|
|
if (i_this->m0304 != 0) {
|
|
pBr->m408 = pBr->m408 & 0xc;
|
|
}
|
|
|
|
CcAtInfo atInfo;
|
|
if (pBr->mCyl[0].ChkTgHit() && (pBr->m3A0[0] < 10)) {
|
|
pBr->mCyl[0].OnTgNoConHit();
|
|
pBr->m3A0[0] = 20;
|
|
|
|
soundId = JA_SE_LK_CUT_SBRIDGE_ROPE;
|
|
|
|
atInfo.mpObj = pBr->mCyl[0].GetTgHitObj();
|
|
at_power_check(&atInfo);
|
|
|
|
if (atInfo.mDamage > 1) {
|
|
atInfo.mDamage = 4;
|
|
}
|
|
pBr->m3A4 -= atInfo.mDamage;
|
|
|
|
if (pBr->m3A4 <= 0) {
|
|
pBr->m408 &= 0xE;
|
|
} else {
|
|
bVar1 = true;
|
|
}
|
|
|
|
dComIfGp_particle_set(dPa_name::ID_COMMON_NORMAL_HIT, &pBr->m3A8[0], &a_player->shape_angle);
|
|
kikuzu_set(i_this, &pBr->m3A8[0]);
|
|
}
|
|
|
|
if (pBr->mCyl[1].ChkTgHit() && (pBr->m3A0[1] < 10)) {
|
|
pBr->mCyl[1].OnTgNoConHit();
|
|
pBr->m3A0[1] = 20;
|
|
|
|
soundId = JA_SE_LK_CUT_SBRIDGE_ROPE;
|
|
|
|
atInfo.mpObj = pBr->mCyl[1].GetTgHitObj();
|
|
at_power_check(&atInfo);
|
|
|
|
if (atInfo.mDamage > 1) {
|
|
atInfo.mDamage = 4;
|
|
}
|
|
pBr->m3A5 -= atInfo.mDamage;
|
|
|
|
if (pBr->m3A5 <= 0) {
|
|
pBr->m408 &= 0xD;
|
|
} else {
|
|
bVar1 = true;
|
|
}
|
|
|
|
dComIfGp_particle_set(dPa_name::ID_COMMON_NORMAL_HIT, &pBr->m3A8[1], &a_player->shape_angle);
|
|
kikuzu_set(i_this, &pBr->m3A8[1]);
|
|
}
|
|
} else {
|
|
cXyz spB4;
|
|
spB4.x = spB4.y = spB4.z = 2.0f;
|
|
if (pBr->mCyl[0].ChkTgHit() && (pBr->m3A0[0] < 10)) {
|
|
pBr->mCyl[0].OnTgNoConHit();
|
|
pBr->m3A0[0] = 15;
|
|
soundId = JA_SE_LK_HIT_SBRIDGE_CHAIN;
|
|
dComIfGp_particle_set(dPa_name::ID_COMMON_PURPLE_HIT, pBr->mCyl[0].GetTgHitPosP(), &a_player->shape_angle, &spB4);
|
|
}
|
|
|
|
if (pBr->mCyl[1].ChkTgHit() && (pBr->m3A0[1] < 10)) {
|
|
pBr->mCyl[1].OnTgNoConHit();
|
|
pBr->m3A0[1] = 15;
|
|
soundId = JA_SE_LK_HIT_SBRIDGE_CHAIN;
|
|
dComIfGp_particle_set(dPa_name::ID_COMMON_PURPLE_HIT, pBr->mCyl[1].GetTgHitPosP(), &a_player->shape_angle, &spB4);
|
|
}
|
|
}
|
|
|
|
if (soundId != 0) {
|
|
if (((i_this->mTypeBits & 8) != 0) || bVar1) {
|
|
soundId = JA_SE_LK_HIT_SBRIDGE_ROPE;
|
|
}
|
|
|
|
mDoAud_seStart(soundId, &pBr->m3CC, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(&i_this->actor)));
|
|
}
|
|
|
|
cXyz spA8 = pBr->m11C[1];
|
|
if ((pBr->m408 & 1) == 0) {
|
|
spA8.y -= 10000.0f;
|
|
}
|
|
pBr->mCyl[0].SetC(spA8);
|
|
|
|
if (pBr->m3C0 != 0) {
|
|
pBr->m3C0--;
|
|
if (pBr->m3C4 != NULL) {
|
|
mDoMtx_stack_c::transS(pBr->m11C[1].x, pBr->m11C[1].y + 100.0f, pBr->m11C[1].z);
|
|
pBr->m3C4->setGlobalRTMatrix(mDoMtx_stack_c::get());
|
|
if (pBr->m3C0 == 0) {
|
|
JPABaseEmitter* emitter = pBr->m3C4;
|
|
emitter->becomeInvalidEmitter();
|
|
pBr->m3C4 = NULL;
|
|
}
|
|
}
|
|
|
|
if (pBr->m3C0 == 0) {
|
|
pBr->m408 &= 0xE;
|
|
}
|
|
} else if ((bGotFlamePos != 0) && ((i_this->mTypeBits & 9) == 0)) {
|
|
spA8.y += 100.0f;
|
|
cXyz sp48 = spA8 - spC0;
|
|
sp48.y *= 0.4f;
|
|
|
|
if (sp48.abs() < 50.0f) {
|
|
pBr->m3C0 = 30;
|
|
pBr->m3C4 = dComIfGp_particle_set(dPa_name::ID_SCENE_80EA, &spA8);
|
|
}
|
|
}
|
|
|
|
spA8 = pBr->m0F8[1];
|
|
if ((pBr->m408 & 2) == 0) {
|
|
spA8.y -= 10000.0f;
|
|
}
|
|
pBr->mCyl[1].SetC(spA8);
|
|
|
|
if (pBr->m3C2 != 0) {
|
|
pBr->m3C2--;
|
|
if (pBr->m3C8 != NULL) {
|
|
mDoMtx_stack_c::transS(pBr->m0F8[1].x, pBr->m0F8[1].y + 100.0f, pBr->m0F8[1].z);
|
|
pBr->m3C8->setGlobalRTMatrix(mDoMtx_stack_c::get());
|
|
if (pBr->m3C2 == 0) {
|
|
JPABaseEmitter* emitter = pBr->m3C8;
|
|
emitter->becomeInvalidEmitter();
|
|
pBr->m3C8 = NULL;
|
|
}
|
|
}
|
|
|
|
if (pBr->m3C2 == 0) {
|
|
pBr->m408 &= 0xD;
|
|
}
|
|
} else if ((bGotFlamePos != 0) && ((i_this->mTypeBits & 9) == 0)) {
|
|
spA8.y += 100.0f;
|
|
cXyz sp48 = spA8 - spC0;
|
|
sp48.y *= 0.4f;
|
|
|
|
if (sp48.abs() < 50.0f) {
|
|
pBr->m3C2 = 30;
|
|
pBr->m3C8 = dComIfGp_particle_set(dPa_name::ID_SCENE_80EA, &spA8);
|
|
}
|
|
}
|
|
|
|
dComIfG_Ccsp()->Set(&pBr->mCyl[0]);
|
|
dComIfG_Ccsp()->Set(&pBr->mCyl[1]);
|
|
}
|
|
|
|
for (s32 i = 0; i < 2; i++) {
|
|
if (pBr->m3A0[i] != 0) {
|
|
pBr->m3A0[i]--;
|
|
}
|
|
}
|
|
|
|
cMtx_YrotM(*calc_mtx, pBr->mRotationYExtra);
|
|
if (i >= i_this->m02DD) {
|
|
pBr->mScale.z = 0.0f;
|
|
pBr->mScale.y = 0.0f;
|
|
pBr->mScale.x = 0.0f;
|
|
pBr->mpModel->setBaseScale(pBr->mScale);
|
|
pBr->m408 = 0;
|
|
}
|
|
|
|
pBr->mpModel->setBaseTRMtx(*calc_mtx);
|
|
|
|
if (((i_this->mTypeBits & 1) == 0) && ((pBr->m408 & 4) != 0)) {
|
|
s32 idx;
|
|
cXyz* segment0 = i_this->mLineMat.getPos(0);
|
|
cXyz* segment1 = i_this->mLineMat.getPos(1);
|
|
cXyz* segment00;
|
|
cXyz* segment01;
|
|
idx = i_this->m030C + 1;
|
|
cXyz sp84;
|
|
|
|
eyeDir.x = 0.0f;
|
|
s16 tmpS = i_this->m02D9 * 0x5DC;
|
|
eyeDir.z = *wp + 0.3f;
|
|
eyeDir.z *= cM_ssin(tmpS + i_this->m0302 * 0x578) * 2.0f + 5.0f;
|
|
|
|
cMtx_YrotS(*calc_mtx, wy);
|
|
MtxPosition(&eyeDir, &sp84);
|
|
|
|
if (pBr->m408 & 1) {
|
|
segment0[idx] = pBr->m11C[0];
|
|
} else {
|
|
cXyz sp30 = *(segment0 + idx - 1) - *(segment0 + idx + 1);
|
|
f32 tmpF = pBr->m3A0[0] * cM_ssin(i_this->m0300 * 6);
|
|
|
|
segment0[idx].x = sp84.x + (sp30.x * 0.5f + (*(segment0 + idx + 1)).x);
|
|
segment0[idx].y = (tmpF + (sp30.y * 0.5f + (*(segment0 + idx + 1)).y)) - 10.0f;
|
|
segment0[idx].z = sp84.z + (sp30.z * 0.5f + (*(segment0 + idx + 1)).z);
|
|
|
|
segment00 = pBr->mLineMat1.getPos(0);
|
|
segment01 = pBr->mLineMat1.getPos(2);
|
|
|
|
*segment00 = segment0[idx];
|
|
himo_cut_control1(segment00);
|
|
*segment01 = pBr->m11C[1];
|
|
himo_cut_control1(segment01);
|
|
}
|
|
|
|
if (pBr->m408 & 2) {
|
|
segment1[idx] = pBr->m0F8[0];
|
|
} else {
|
|
cXyz sp30 = *(segment1 + idx - 1) - *(segment1 + idx + 1);
|
|
f32 tmpF = pBr->m3A0[1] * cM_ssin(i_this->m0300 * 6);
|
|
|
|
segment1[idx].x = sp84.x + (sp30.x * 0.5f + (*(segment1 + idx + 1)).x);
|
|
segment1[idx].y = (tmpF + (sp30.y * 0.5f + (*(segment1 + idx + 1)).y)) - 10.0f;
|
|
segment1[idx].z = sp84.z + (sp30.z * 0.5f + (*(segment1 + idx + 1)).z);
|
|
|
|
segment00 = pBr->mLineMat1.getPos(1);
|
|
segment01 = pBr->mLineMat1.getPos(3);
|
|
|
|
*segment00 = segment1[idx];
|
|
himo_cut_control1(segment00);
|
|
*segment01 = pBr->m0F8[1];
|
|
himo_cut_control1(segment01);
|
|
}
|
|
i_this->m030C++;
|
|
}
|
|
}
|
|
|
|
i_this->mpBgW->CopyBackVtx();
|
|
|
|
cBgD_Vtx_t* vtxTbl = i_this->mpBgW->GetVtxTbl();
|
|
|
|
s32 idx;
|
|
s32 sw;
|
|
s32 other_i = 0;
|
|
for (i = 0; i < i_this->mpBgW->GetVtxNum(); i++, pBr++) {
|
|
sw = i & 3;
|
|
idx = i;
|
|
idx >>= 2;
|
|
|
|
if (idx < i_this->m02DD) {
|
|
br_s* pBr = &i_this->mBr[idx];
|
|
|
|
switch (sw) {
|
|
case 0:
|
|
vtxTbl[i].x = pBr->m11C[2].x;
|
|
vtxTbl[i].y = pBr->m11C[2].y;
|
|
vtxTbl[i].z = pBr->m11C[2].z;
|
|
break;
|
|
|
|
case 1:
|
|
vtxTbl[i].x = pBr->m0F8[2].x;
|
|
vtxTbl[i].y = pBr->m0F8[2].y;
|
|
vtxTbl[i].z = pBr->m0F8[2].z;
|
|
break;
|
|
|
|
case 2:
|
|
vtxTbl[i].x = pBr->m11C[1].x;
|
|
vtxTbl[i].y = pBr->m11C[1].y;
|
|
vtxTbl[i].z = pBr->m11C[1].z;
|
|
break;
|
|
|
|
case 3:
|
|
vtxTbl[i].x = pBr->m0F8[1].x;
|
|
vtxTbl[i].y = pBr->m0F8[1].y;
|
|
vtxTbl[i].z = pBr->m0F8[1].z;
|
|
break;
|
|
}
|
|
|
|
|
|
if ((idx == 0) || (idx == i_this->m02DD - 1)) {
|
|
cMtx_YrotS(*calc_mtx, pBr->mRotation.y);
|
|
cMtx_XrotM(*calc_mtx, pBr->mRotation.x);
|
|
eyeDir.y = 0.0f;
|
|
eyeDir.x = 0.0f;
|
|
if (idx == 0) {
|
|
eyeDir.z = 50.0f;
|
|
} else if (i_this->m02DD == i_this->mBrCount) {
|
|
eyeDir.z = -50.0f;
|
|
} else {
|
|
eyeDir.z = -40.0f;
|
|
}
|
|
|
|
MtxPosition(&eyeDir, &spCC);
|
|
|
|
vtxTbl[i].x += spCC.x;
|
|
vtxTbl[i].y += spCC.y;
|
|
vtxTbl[i].z += spCC.z;
|
|
}
|
|
other_i = i;
|
|
} else {
|
|
vtxTbl[i].x = vtxTbl[other_i].x;
|
|
vtxTbl[i].y = vtxTbl[other_i].y;
|
|
vtxTbl[i].z = vtxTbl[other_i].z;
|
|
}
|
|
|
|
if (i_this->mMoveProcMode >= 4) {
|
|
vtxTbl[i].y = 10000.0f;
|
|
}
|
|
}
|
|
|
|
i_this->mpBgW->Move();
|
|
g_env_light.settingTevStruct(TEV_TYPE_BG0, &i_this->actor.current.pos, &i_this->actor.tevStr);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00003C68-00003CD4 .text daBridge_IsDelete__FP12bridge_class */
|
|
static BOOL daBridge_IsDelete(bridge_class* i_this) {
|
|
br_s* pBr = &i_this->mBr[0];
|
|
for (s32 i = 0; i < i_this->mBrCount; i++, pBr++) {
|
|
mDoAud_seDeleteObject(&pBr->m3CC);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00003CD4-00003D2C .text daBridge_Delete__FP12bridge_class */
|
|
static BOOL daBridge_Delete(bridge_class* i_this) {
|
|
dComIfG_resDeleteDemo(&i_this->mPhase, "Bridge");
|
|
if (i_this->mpBgW != NULL) {
|
|
dComIfG_Bgsp()->Release(i_this->mpBgW);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00003D2C-00003E00 .text CreateInit__FP10fopAc_ac_c */
|
|
void CreateInit(fopAc_ac_c* a_this) {
|
|
static dCcD_SrcCyl himo_cyl_src = {
|
|
// dCcD_SrcGObjInf
|
|
{
|
|
/* Flags */ 0,
|
|
/* SrcObjAt Type */ 0,
|
|
/* SrcObjAt Atp */ 0,
|
|
/* SrcObjAt SPrm */ 0,
|
|
/* SrcObjTg Type */ AT_TYPE_ALL & ~AT_TYPE_BOOMERANG & ~AT_TYPE_WATER & ~AT_TYPE_UNK20000 & ~AT_TYPE_WIND & ~AT_TYPE_UNK400000 & ~AT_TYPE_LIGHT,
|
|
/* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsEnemy_e,
|
|
/* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsPlayer_e | cCcD_CoSPrm_VsGrpAll_e,
|
|
/* SrcGObjAt Se */ 0,
|
|
/* SrcGObjAt HitMark */ dCcG_AtHitMark_None_e,
|
|
/* SrcGObjAt Spl */ dCcG_At_Spl_UNK0,
|
|
/* SrcGObjAt Mtrl */ 0,
|
|
/* SrcGObjAt SPrm */ 0,
|
|
/* SrcGObjTg Se */ 0,
|
|
/* SrcGObjTg HitMark */ dCcG_TgHitMark_Unk255_e,
|
|
/* SrcGObjTg Spl */ dCcG_Tg_Spl_UNK0,
|
|
/* SrcGObjTg Mtrl */ 0,
|
|
/* SrcGObjTg SPrm */ dCcG_TgSPrm_Shield_e,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGCylS
|
|
{{
|
|
/* Center */ {0.0f, 0.0f, 0.0f},
|
|
/* Radius */ 5.0f,
|
|
/* Height */ 1000.0f,
|
|
}},
|
|
};
|
|
|
|
bridge_class* i_this = (bridge_class*)a_this;
|
|
|
|
i_this->mStts.Init(0xFF, 0xFF, a_this);
|
|
|
|
br_s* pBr = i_this->mBr;
|
|
for (s32 i = 0; i < i_this->mBrCount; i++, pBr++) {
|
|
for (s32 j = 0; j < 2; j++) {
|
|
pBr->mCyl[j].Set(himo_cyl_src);
|
|
pBr->mCyl[j].SetStts(&i_this->mStts);
|
|
if ((i_this->mTypeBits & 1) == 0) {
|
|
pBr->mCyl[j].SetH(200.0f);
|
|
pBr->mCyl[j].OffTgShield();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00003E00-00004310 .text CallbackCreateHeap__FP10fopAc_ac_c */
|
|
static BOOL CallbackCreateHeap(fopAc_ac_c* a_this) {
|
|
static const s32 bridge_bmd[] = { BRIDGE_BDL_OBM_BRIDGE, BRIDGE_BDL_OBM_BRIDGE2 };
|
|
|
|
bridge_class* i_this = (bridge_class*)a_this;
|
|
|
|
s32 modelNum = i_this->mTypeBits & 1;
|
|
if (i_this->mTypeBits & 4) {
|
|
modelNum = 1;
|
|
}
|
|
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Bridge", bridge_bmd[modelNum]);
|
|
JUT_ASSERT(DEMO_SELECT(2334, 2336), modelData != NULL);
|
|
|
|
J3DModelData* modelData2;
|
|
if (modelNum == 1) {
|
|
modelData2 = (J3DModelData*)dComIfG_getObjectRes("Bridge", BRIDGE_BDL_OBM_CHAIN1);
|
|
JUT_ASSERT(DEMO_SELECT(2340, 2342), modelData2 != NULL);
|
|
}
|
|
|
|
br_s* pBr = i_this->mBr;
|
|
|
|
s32 iVar8 = 2;
|
|
if (i_this->mTypeBits & 1) {
|
|
iVar8 = 0;
|
|
}
|
|
|
|
for (s32 i = 0; i < i_this->mBrCount; i++, pBr++) {
|
|
pBr->mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11020002);
|
|
if (pBr->mpModel == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
if ((i_this->mTypeBits & 4) == 0) {
|
|
if (((i + iVar8) & 3) == 0) {
|
|
pBr->m408 = 7;
|
|
if ((i_this->mTypeBits & 1) == 1) {
|
|
pBr->m418 = 0x32;
|
|
pBr->mpModelRope0 = mDoExt_J3DModel__create(modelData2, 0x80000, 0x11020002);
|
|
pBr->mpModelRope1 = mDoExt_J3DModel__create(modelData2, 0x80000, 0x11020002);
|
|
if ((pBr->mpModelRope0 == NULL) || (pBr->mpModelRope1 == NULL)) {
|
|
return FALSE;
|
|
}
|
|
} else {
|
|
pBr->m418 = -1;
|
|
|
|
BOOL res;
|
|
if (i_this->mTypeBits & 8) {
|
|
res = pBr->mLineMat1.init(4, 5, (ResTIMG*)dComIfG_getObjectRes("Always", ALWAYS_BTI_TXM_ROPE1), 1);
|
|
} else {
|
|
res = pBr->mLineMat1.init(4, 5, (ResTIMG*)dComIfG_getObjectRes("Always", ALWAYS_BTI_ROPE), 1);
|
|
}
|
|
|
|
if (!res) {
|
|
return FALSE;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (i == 0) {
|
|
BOOL res;
|
|
if (i_this->mTypeBits & 8) {
|
|
res = i_this->mLineMat.init(2, 14, (ResTIMG*)dComIfG_getObjectRes("Always", ALWAYS_BTI_TXM_ROPE1), 0);
|
|
} else {
|
|
res = i_this->mLineMat.init(2, 14, (ResTIMG*)dComIfG_getObjectRes("Always", ALWAYS_BTI_ROPE), 0);
|
|
}
|
|
|
|
if (!res) {
|
|
return FALSE;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ((i_this->mTypeBits & 1) == 0) {
|
|
pBr->mScale.y = cM_rndF(0.3f) + 1.0f;
|
|
if (((i + iVar8) & 3) == 0) {
|
|
pBr->mScale.x = 1.05f;
|
|
} else {
|
|
pBr->mScale.x = cM_rndF(0.1f) + 1.0f;
|
|
}
|
|
} else {
|
|
pBr->mScale.y = 1.0f;
|
|
pBr->mScale.x = 1.0f;
|
|
}
|
|
|
|
pBr->mScale.z = 1.5f;
|
|
pBr->mpModel->setBaseScale(pBr->mScale);
|
|
|
|
if (cM_rndF(1.0f) < 0.5f) {
|
|
pBr->mRotationYExtra = -0x8000;
|
|
}
|
|
}
|
|
|
|
i_this->mpBgW = new dBgWSv();
|
|
if (i_this->mpBgW == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
if ((i_this->mTypeBits & 1) == 1) {
|
|
cBgD_t* cBgD = (cBgD_t*)dComIfG_getObjectRes("Bridge", BRIDGE_DZB_MBRDG2);
|
|
#if VERSION == VERSION_DEMO
|
|
i_this->mpBgW->Set(cBgD, 0);
|
|
#else
|
|
if (i_this->mpBgW->Set(cBgD, 0)) {
|
|
return FALSE;
|
|
}
|
|
#endif
|
|
} else {
|
|
cBgD_t* cBgD = (cBgD_t*)dComIfG_getObjectRes("Bridge", BRIDGE_DZB_MBRDG);
|
|
#if VERSION == VERSION_DEMO
|
|
i_this->mpBgW->Set(cBgD, 0);
|
|
#else
|
|
if (i_this->mpBgW->Set(cBgD, 0)) {
|
|
return FALSE;
|
|
}
|
|
#endif
|
|
}
|
|
|
|
i_this->mpBgW->SetRideCallback(ride_call_back);
|
|
i_this->mpBgW->CopyBackVtx();
|
|
cBgD_Vtx_t* vtxTbl = i_this->mpBgW->GetVtxTbl();
|
|
for (s32 i = 0; i < i_this->mpBgW->GetVtxNum(); i++) {
|
|
vtxTbl[i].x = i_this->actor.current.pos.x;
|
|
vtxTbl[i].y = i_this->actor.current.pos.y;
|
|
vtxTbl[i].z = i_this->actor.current.pos.z;
|
|
}
|
|
|
|
i_this->mpBgW->Move();
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00004310-00004770 .text daBridge_Create__FP10fopAc_ac_c */
|
|
static cPhs_State daBridge_Create(fopAc_ac_c* a_this) {
|
|
bridge_class* i_this = (bridge_class*)a_this;
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
cPhs_State ret = dComIfG_resLoad(&i_this->mPhase, "Bridge");
|
|
if (ret == cPhs_COMPLEATE_e) {
|
|
fopAcM_SetupActor(&i_this->actor, bridge_class);
|
|
#else
|
|
fopAcM_SetupActor(&i_this->actor, bridge_class);
|
|
cPhs_State ret = dComIfG_resLoad(&i_this->mPhase, "Bridge");
|
|
if (ret == cPhs_COMPLEATE_e) {
|
|
#endif
|
|
i_this->mTypeBits = fopAcM_GetParam(a_this);
|
|
if (i_this->mTypeBits == 0xFF) {
|
|
i_this->mTypeBits = 0;
|
|
}
|
|
|
|
i_this->m02D9 = (fopAcM_GetParam(a_this) >> 8) & 0xFF;
|
|
i_this->mPathId = (fopAcM_GetParam(a_this) >> 0x10) & 0xFF;
|
|
if (i_this->mPathId == 0xFF) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
dPath* dPath = dPath_GetRoomPath(i_this->mPathId, fopAcM_GetRoomNo(a_this));
|
|
if (dPath != NULL) {
|
|
dPnt* point = &dPath->m_points[0];
|
|
a_this->home.pos = point->m_position;
|
|
point++;
|
|
i_this->mEndPos = point->m_position;
|
|
|
|
cXyz delta = i_this->mEndPos - a_this->home.pos;
|
|
|
|
a_this->home.angle.y = cM_atan2s(delta.x, delta.z);
|
|
a_this->home.angle.x = -cM_atan2s(delta.y, std::sqrtf(delta.x * delta.x + delta.z * delta.z));
|
|
|
|
f32 fVar1 = 0.0f;
|
|
if (delta.abs() > 1300.0f) {
|
|
fVar1 = 3.0f;
|
|
}
|
|
|
|
i_this->mBrCount = delta.abs() / ((fVar1 + 47.0f) * 1.5f);
|
|
i_this->mPathIdP = i_this->mPathId + 1;
|
|
} else {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
if (i_this->mBrCount >= 50) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
if (!fopAcM_entrySolidHeap(a_this, CallbackCreateHeap, 0x2FB60)) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
CreateInit(a_this);
|
|
|
|
if (i_this->mpBgW != NULL && dComIfG_Bgsp()->Regist(i_this->mpBgW, a_this)) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
fopAcM_SetMtx(a_this, i_this->mBr[0].mpModel->getBaseTRMtx());
|
|
fopAcM_setCullSizeBox(a_this, -120.0f, -30.0f, -60.0f, 120.0f, 30.0f, 60.0f);
|
|
fopAcM_setCullSizeFar(a_this, 10.0f);
|
|
|
|
if ((i_this->mTypeBits & 2) != 0) {
|
|
if (i_this->mBrCount >= 16) {
|
|
i_this->m02DD = 15;
|
|
} else if (i_this->mBrCount >= 12) {
|
|
i_this->m02DD = 11;
|
|
} else {
|
|
i_this->m02DD = 7;
|
|
}
|
|
} else {
|
|
i_this->m02DD = i_this->mBrCount;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
static actor_method_class l_daBridge_Method = {
|
|
(process_method_func)daBridge_Create,
|
|
(process_method_func)daBridge_Delete,
|
|
(process_method_func)daBridge_Execute,
|
|
(process_method_func)daBridge_IsDelete,
|
|
(process_method_func)daBridge_Draw,
|
|
};
|
|
|
|
actor_process_profile_definition g_profile_BRIDGE = {
|
|
/* LayerID */ fpcLy_CURRENT_e,
|
|
/* ListID */ 0x0003,
|
|
/* ListPrio */ fpcPi_CURRENT_e,
|
|
/* ProcName */ PROC_BRIDGE,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(bridge_class),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Priority */ PRIO_BRIDGE,
|
|
/* Actor SubMtd */ &l_daBridge_Method,
|
|
/* Status */ fopAcStts_CULL_e | fopAcStts_UNK4000_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* CullType */ fopAc_CULLBOX_CUSTOM_e,
|
|
};
|