mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-20 13:45:14 -04:00
Merge branch 'main' of https://github.com/zeldaret/tww into agb
This commit is contained in:
@@ -226,8 +226,10 @@ void daArrow_c::setKeepMatrix() {
|
||||
daPy_py_c* player = daPy_getPlayerActorClass();
|
||||
|
||||
mDoMtx_stack_c::transS(0.7f, -0.07f, -0.2f);
|
||||
// TODO: How did they pass an unsigned short (0xB0B6) to a function that takes a signed short?
|
||||
mDoMtx_stack_c::XYZrotM(0xB0B6, 0x238E, -0x6333);
|
||||
// This function takes three signed shorts, but one of the literals passed here is unsigned.
|
||||
// X rotation must be a float literal to force the compiler to pass an unsigned short.
|
||||
// Z rotation must be an int literal to pass a signed short as normal.
|
||||
mDoMtx_stack_c::XYZrotM((248.5f*65536)/360, 0x238E, -0x6333);
|
||||
|
||||
MtxP handMtx = player->getLeftHandMatrix();
|
||||
cMtx_concat(handMtx, mDoMtx_stack_c::get(), mDoMtx_stack_c::get());
|
||||
|
||||
+85
-79
@@ -15,32 +15,34 @@
|
||||
|
||||
class dCcD_GObjInf;
|
||||
|
||||
static dCcD_SrcCyl m_cyl_src = {
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0xFFFFFFFF, // Tg damage types
|
||||
9,
|
||||
0x59,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
4,
|
||||
0,
|
||||
|
||||
// Cylinder
|
||||
0.0, // X
|
||||
0.0, // Y
|
||||
0.0, // Z
|
||||
10.0, // Radius
|
||||
50.0, // Height
|
||||
dCcD_SrcCyl daItem_c::m_cyl_src = {
|
||||
// dCcD_SrcGObjInf
|
||||
{
|
||||
/* Flags */ 0,
|
||||
/* SrcObjAt Type */ 0,
|
||||
/* SrcObjAt Atp */ 0,
|
||||
/* SrcObjAt SPrm */ 0,
|
||||
/* SrcObjTg Type */ 0xFFFFFFFF,
|
||||
/* SrcObjTg SPrm */ 0x09,
|
||||
/* SrcObjCo SPrm */ 0x59,
|
||||
/* SrcGObjAt Se */ 0,
|
||||
/* SrcGObjAt HitMark */ 0,
|
||||
/* SrcGObjAt Spl */ 0,
|
||||
/* SrcGObjAt Mtrl */ 0,
|
||||
/* SrcGObjAt GFlag */ 0,
|
||||
/* SrcGObjTg Se */ 0,
|
||||
/* SrcGObjTg HitMark */ 0,
|
||||
/* SrcGObjTg Spl */ 0,
|
||||
/* SrcGObjTg Mtrl */ 0,
|
||||
/* SrcGObjTg GFlag */ 0x04,
|
||||
/* SrcGObjCo GFlag */ 0,
|
||||
},
|
||||
// cM3dGCylS
|
||||
{
|
||||
/* Center */ 0.0f, 0.0f, 0.0f,
|
||||
/* Radius */ 10.0f,
|
||||
/* Height */ 50.0f,
|
||||
},
|
||||
};
|
||||
|
||||
/* 800F4BC8-800F4BD4 .text getData__12daItemBase_cFv */
|
||||
@@ -113,20 +115,23 @@ void itemGetCallBack(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*) {
|
||||
/* 800F5044-800F53EC .text CreateInit__8daItem_cFv */
|
||||
void daItem_c::CreateInit() {
|
||||
/* Nonmatching */
|
||||
mAcchCir.SetWall(30.0, 30.0);
|
||||
cXyz* speedPtr = &speed;
|
||||
mAcch.Set(¤t.pos, &next.pos, this, 1, &mAcchCir, speedPtr, NULL, NULL);
|
||||
mAcchCir.SetWall(30.0f, 30.0f);
|
||||
cXyz* speedPtr;
|
||||
mAcch.Set(¤t.pos, &next.pos, this, 1, &mAcchCir, speedPtr = &speed, NULL, NULL);
|
||||
mAcch.m_flags &= ~0x400;
|
||||
mAcch.m_flags &= ~0x8;
|
||||
mCullMtx = mModel->mBaseTransformMtx;
|
||||
mCullMtx = mpModel->mBaseTransformMtx;
|
||||
mStts.Init(0, 0xFF, this);
|
||||
mCyl.Set(m_cyl_src);
|
||||
mCyl.SetStts(&mStts);
|
||||
mCyl.SetCoHitCallback(&itemGetCallBack);
|
||||
|
||||
dItem_data_item_info* item_info = &dItem_data::item_info[m_itemNo];
|
||||
f32 height = item_info->mCollisionH;
|
||||
f32 radius = item_info->mCollisionR;
|
||||
if (mScale.x > 1.0) {
|
||||
// Regswaps if the inlines are used.
|
||||
// f32 height = dItem_data::getH(m_itemNo);
|
||||
// f32 radius = dItem_data::getR(m_itemNo);
|
||||
f32 height = dItem_data::item_info[m_itemNo].mCollisionH;
|
||||
f32 radius = dItem_data::item_info[m_itemNo].mCollisionR;
|
||||
if (mScale.x > 1.0f) {
|
||||
height *= mScale.x;
|
||||
radius *= mScale.x;
|
||||
}
|
||||
@@ -135,18 +140,22 @@ void daItem_c::CreateInit() {
|
||||
|
||||
mItemTimer = getData()->mDuration;
|
||||
field7_0x65a = getData()->field7_0x18;
|
||||
mCurState = 0;
|
||||
field3_0x650 = speedPtr->y;
|
||||
mStatusFlags |= 2;
|
||||
mCurState = 0;
|
||||
|
||||
mUnknownParam = (fpcM_GetParam(this) & 0x03000000) >> 0x18;
|
||||
// TODO: should probably add inlines here
|
||||
// e.g. getType__10daItem_prmFP8daItem_c etc
|
||||
if ((fpcM_GetParam(this) & 0x03000000) >> 0x18 == 3 || (fpcM_GetParam(this) & 0x03000000) >> 0x18 == 1) {
|
||||
mStatusFlags |= 2;
|
||||
}
|
||||
mItemAction = (fpcM_GetParam(this) & 0xFC000000) >> 0x1A;
|
||||
|
||||
show();
|
||||
|
||||
if (dItem_data::checkSpecialEffect(m_itemNo) && (m_itemNo != SMALL_KEY || (mStatusFlags & 2))) {
|
||||
dItem_data::getSpecialEffect(m_itemNo);
|
||||
// TODO: dPa_control_c::set
|
||||
if (dItem_data::checkSpecialEffect(m_itemNo) && (m_itemNo != SMALL_KEY || (m_itemNo == SMALL_KEY && (mStatusFlags & 2)))) {
|
||||
u16 particleID = dItem_data::getSpecialEffect(m_itemNo);
|
||||
dComIfGp_particle_set(particleID, ¤t.pos, NULL, NULL, 0xFF, &mPtclFollowCb, -1, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
switch (m_itemNo) {
|
||||
@@ -154,27 +163,30 @@ void daItem_c::CreateInit() {
|
||||
case BOMB_10:
|
||||
case BOMB_20:
|
||||
case BOMB_30:
|
||||
mScaleTarget.x = 0.6;
|
||||
mScaleTarget.y = 0.6;
|
||||
mScaleTarget.z = 0.6;
|
||||
mScaleTarget.x = 0.6f;
|
||||
mScaleTarget.y = 0.6f;
|
||||
mScaleTarget.z = 0.6f;
|
||||
break;
|
||||
default:
|
||||
mScaleTarget.x = 1.0;
|
||||
mScaleTarget.y = 1.0;
|
||||
mScaleTarget.z = 1.0;
|
||||
mScaleTarget.x = 1.0f;
|
||||
mScaleTarget.y = 1.0f;
|
||||
mScaleTarget.z = 1.0f;
|
||||
break;
|
||||
}
|
||||
|
||||
mSwitchId = (fpcM_GetParam(this) & 0x00FF0000) >> 0x10;
|
||||
if (mSwitchId != 0xFF && fopAcM_isSwitch(this, mSwitchId)) {
|
||||
if (mSwitchId != 0xFF && !fopAcM_isSwitch(this, mSwitchId)) {
|
||||
hide();
|
||||
mStatusFlags |= 2;
|
||||
}
|
||||
mActivationSwitch = (orig.angle.z & 0x00FF) >> 0;
|
||||
|
||||
current.angle.z = 0;
|
||||
orig.angle.z = 0;
|
||||
initAction();
|
||||
|
||||
switch (m_itemNo) {
|
||||
case SWORD:
|
||||
case SHIELD:
|
||||
mStatus |= 0x4000;
|
||||
break;
|
||||
@@ -184,12 +196,11 @@ void daItem_c::CreateInit() {
|
||||
}
|
||||
|
||||
set_mtx();
|
||||
animPlay(1.0, 1.0, 1.0, 1.0, 1.0);
|
||||
animPlay(1.0f, 1.0f, 1.0f, 1.0f, 1.0f);
|
||||
|
||||
s16 procname = PROC_BST; // Gohdan
|
||||
if (fopAcIt_Judge(&fpcSch_JudgeForPName, &procname)) {
|
||||
// TODO: dPa_control_c::set
|
||||
mpParticleEmitter = 0;
|
||||
mpParticleEmitter = dComIfGp_particle_set(0x81E1, ¤t.pos, NULL, NULL, 0xFF, NULL, -1, NULL, NULL, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -200,7 +211,7 @@ s32 daItem_c::_daItem_create() {
|
||||
|
||||
m_itemNo = (fpcM_GetParam(this) & 0x000000FF) >> 0x00;
|
||||
|
||||
if (!dItem_data::field_item_res[m_itemNo].mModelArcName) {
|
||||
if (!dItem_data::getFieldArc(m_itemNo)) {
|
||||
setLoadError();
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
@@ -215,10 +226,9 @@ s32 daItem_c::_daItem_create() {
|
||||
}
|
||||
}
|
||||
|
||||
s32 phase_state = dComIfG_resLoad(&mPhs, dItem_data::field_item_res[m_itemNo].mModelArcName);
|
||||
s32 phase_state = dComIfG_resLoad(&mPhs, dItem_data::getFieldArc(m_itemNo));
|
||||
if (phase_state == cPhs_COMPLEATE_e) {
|
||||
u16 heapSize = dItem_data::field_item_res[m_itemNo].mHeapSize;
|
||||
s32 result = fopAcM_entrySolidHeap(this, (heapCallbackFunc)&CheckFieldItemCreateHeap, heapSize);
|
||||
s32 result = fopAcM_entrySolidHeap(this, &CheckFieldItemCreateHeap, dItem_data::getFieldHeapSize(m_itemNo));
|
||||
if (!result) {
|
||||
return cPhs_ERROR_e;
|
||||
}
|
||||
@@ -319,21 +329,22 @@ void daItem_c::setTevStr() {
|
||||
mTevStr.mColorK0.r = 0xFF;
|
||||
mTevStr.mColorK0.g = 0xFF;
|
||||
mTevStr.mColorK0.b = 0xFF;
|
||||
g_env_light.setLightTevColorType(mModel, &mTevStr);
|
||||
g_env_light.setLightTevColorType(mpModel, &mTevStr);
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
if (!mModelArrow[i]) {
|
||||
if (!mpModelArrow[i]) {
|
||||
continue;
|
||||
}
|
||||
g_env_light.setLightTevColorType(mModelArrow[i], &mTevStr);
|
||||
g_env_light.setLightTevColorType(mpModelArrow[i], &mTevStr);
|
||||
}
|
||||
}
|
||||
|
||||
/* 800F61C8-800F6268 .text _daItem_delete__8daItem_cFv */
|
||||
s32 daItem_c::_daItem_delete() {
|
||||
/* Nonmatching */
|
||||
// TODO: dPa_rippleEcallBack::end()
|
||||
DeleteBase(dItem_data::field_item_res[m_itemNo].mModelArcName);
|
||||
mPtclRippleCb.end();
|
||||
// TODO
|
||||
DeleteBase(dItem_data::getFieldArc(m_itemNo));
|
||||
}
|
||||
|
||||
/* 800F6268-800F6434 .text Reflect__FR4cXyzP4cXyzff */
|
||||
@@ -367,7 +378,7 @@ bool daItem_c::checkItemDisappear() {
|
||||
if (mStatusFlags & 0x10) {
|
||||
disappearing = false;
|
||||
}
|
||||
if (dItem_data::item_info[m_itemNo].mSpecialBehaviors & 0x01) {
|
||||
if (dItem_data::chkFlag(m_itemNo, 0x01)) {
|
||||
disappearing = false;
|
||||
}
|
||||
if (g_dComIfG_gameInfo.play.mEvtCtrl.mMode != 0) {
|
||||
@@ -394,7 +405,7 @@ void daItem_c::setItemTimer(int timer) {
|
||||
|
||||
/* 800F6E74-800F6EC8 .text checkPlayerGet__8daItem_cFv */
|
||||
BOOL daItem_c::checkPlayerGet() {
|
||||
if (field20_0x638 < getData()->field47_0x42) {
|
||||
if (field_0x638 < getData()->field47_0x42) {
|
||||
return FALSE;
|
||||
}
|
||||
if (mCurState == 3) {
|
||||
@@ -525,11 +536,6 @@ s32 daItem_c::_daItem_isdelete() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 800F89F8-800F8A14 .text getHeadTopPos__9daPy_py_cCFv */
|
||||
void daPy_py_c::getHeadTopPos() const {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
static actor_method_class l_daItem_Method = {
|
||||
(process_method_func)daItem_Create,
|
||||
(process_method_func)daItem_Delete,
|
||||
@@ -539,18 +545,18 @@ static actor_method_class l_daItem_Method = {
|
||||
};
|
||||
|
||||
extern actor_process_profile_definition g_profile_ITEM = {
|
||||
fpcLy_CURRENT_e,
|
||||
7,
|
||||
fpcPi_CURRENT_e,
|
||||
PROC_ITEM,
|
||||
&g_fpcLf_Method.mBase,
|
||||
sizeof(daItem_c),
|
||||
0,
|
||||
0,
|
||||
&g_fopAc_Method.base,
|
||||
0x00F5,
|
||||
&l_daItem_Method,
|
||||
0x000C0100,
|
||||
fopAc_ACTOR_e,
|
||||
fopAc_CULLBOX_0_e,
|
||||
/* LayerID */ fpcLy_CURRENT_e,
|
||||
/* ListID */ 7,
|
||||
/* ListPrio */ fpcPi_CURRENT_e,
|
||||
/* ProcName */ PROC_ITEM,
|
||||
/* Proc SubMtd */ &g_fpcLf_Method.mBase,
|
||||
/* Size */ sizeof(daItem_c),
|
||||
/* SizeOther */ 0,
|
||||
/* Parameters */ 0,
|
||||
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
||||
/* Priority */ 0x00F5,
|
||||
/* Actor SubMtd */ &l_daItem_Method,
|
||||
/* Status */ 0x000C0100,
|
||||
/* Group */ fopAc_ACTOR_e,
|
||||
/* CullType */ fopAc_CULLBOX_0_e,
|
||||
};
|
||||
|
||||
+136
-74
@@ -4,188 +4,250 @@
|
||||
//
|
||||
|
||||
#include "d/actor/d_a_itembase.h"
|
||||
#include "d/d_item.h"
|
||||
#include "d/d_item_data.h"
|
||||
#include "d/d_resorce.h"
|
||||
#include "d/d_drawlist.h"
|
||||
#include "m_Do/m_Do_ext.h"
|
||||
#include "m_Do/m_Do_graphic.h"
|
||||
#include "JSystem/JUtility/JUTAssert.h"
|
||||
#include "d/d_item_data.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/actor/d_a_player_link.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
/* 800F8A14-800F8A3C .text DeleteBase__12daItemBase_cFPCc */
|
||||
s32 daItemBase_c::DeleteBase(const char* resName) {
|
||||
BOOL daItemBase_c::DeleteBase(const char* resName) {
|
||||
dComIfG_resDelete(&mPhs, resName);
|
||||
return 1;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 800F8A3C-800F8A44 .text clothCreate__12daItemBase_cFv */
|
||||
s32 daItemBase_c::clothCreate() {
|
||||
return 1;
|
||||
BOOL daItemBase_c::clothCreate() {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 800F8A44-800F9074 .text CreateItemHeap__12daItemBase_cFPCcsssssss */
|
||||
s32 daItemBase_c::CreateItemHeap(const char* resName, short resIdx, short btkAnm1, short btkAnm2, short brkAnm1, short brkAnm2, short bckAnm, short) {
|
||||
/* Nonmatching */
|
||||
BOOL daItemBase_c::CreateItemHeap(const char* resName, short resIdx, short btkAnm1, short btkAnm2, short brkAnm1, short brkAnm2, short bckAnm, short) {
|
||||
JUT_ASSERT(78, 0 <= m_itemNo && m_itemNo <= 255);
|
||||
|
||||
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(resName, resIdx);
|
||||
JUT_ASSERT(85, modelData != 0);
|
||||
|
||||
mModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
|
||||
if (!mModel) {
|
||||
return 0;
|
||||
mpModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
|
||||
if (!mpModel) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
switch (m_itemNo) {
|
||||
case ARROW_30:
|
||||
mModelArrow[0] = mDoExt_J3DModel__create(modelData, 8, 0x11000002);
|
||||
if (!mModelArrow[0]) {
|
||||
return 0;
|
||||
mpModelArrow[0] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000002);
|
||||
if (!mpModelArrow[0]) {
|
||||
return FALSE;
|
||||
}
|
||||
case ARROW_20:
|
||||
mModelArrow[1] = mDoExt_J3DModel__create(modelData, 8, 0x11000002);
|
||||
if (!mModelArrow[1]) {
|
||||
return 0;
|
||||
mpModelArrow[1] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000002);
|
||||
if (!mpModelArrow[1]) {
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
mModelArrow[1] = NULL;
|
||||
mModelArrow[0] = NULL;
|
||||
mpModelArrow[1] = NULL;
|
||||
mpModelArrow[0] = NULL;
|
||||
}
|
||||
|
||||
mBtkAnm1 = NULL;
|
||||
J3DAnmTextureSRTKey* pbtk;
|
||||
mpBtkAnm1 = NULL;
|
||||
if (btkAnm1 != -1) {
|
||||
J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(resName, btkAnm1);
|
||||
pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(resName, btkAnm1);
|
||||
JUT_ASSERT(140, pbtk != 0);
|
||||
mBtkAnm1 = new mDoExt_btkAnm();
|
||||
if (!mBtkAnm1 || !mBtkAnm1->init(modelData, pbtk, true, 2, 1.0, 0, -1, false, false)) {
|
||||
return 0;
|
||||
mpBtkAnm1 = new mDoExt_btkAnm();
|
||||
if (!mpBtkAnm1 || !mpBtkAnm1->init(modelData, pbtk, TRUE, 2, 1.0, 0, -1, false, 0)) {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
mBtkAnm2 = NULL;
|
||||
mpBtkAnm2 = NULL;
|
||||
if (btkAnm2 != -1) {
|
||||
J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(resName, btkAnm2);
|
||||
JUT_ASSERT(172, pbtk != 0);
|
||||
mBtkAnm2 = new mDoExt_btkAnm();
|
||||
if (!mBtkAnm2 || !mBtkAnm2->init(modelData, pbtk, true, 2, 1.0, 0, -1, false, false)) {
|
||||
return 0;
|
||||
pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(resName, btkAnm2);
|
||||
JUT_ASSERT(156, pbtk != 0);
|
||||
mpBtkAnm2 = new mDoExt_btkAnm();
|
||||
if (!mpBtkAnm2 || !mpBtkAnm2->init(modelData, pbtk, TRUE, 2, 1.0, 0, -1, false, 0)) {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
mBrkAnm1 = NULL;
|
||||
J3DAnmTevRegKey* pbrk;
|
||||
mpBrkAnm1 = NULL;
|
||||
if (brkAnm1 != -1) {
|
||||
J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(resName, brkAnm1);
|
||||
pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(resName, brkAnm1);
|
||||
JUT_ASSERT(172, pbrk != 0);
|
||||
int shouldAnimate = dItem_data::item_resource[m_itemNo].mTevRegAnimFrameIndex == 0xFF;
|
||||
mBrkAnm1 = new mDoExt_brkAnm();
|
||||
if (!mBrkAnm1 || !mBrkAnm1->init(modelData, pbrk, shouldAnimate, 2, 1.0, 0, -1, false, false)) {
|
||||
return 0;
|
||||
s8 tevFrm = dItem_data::getTevFrm(m_itemNo);
|
||||
BOOL shouldAnimate = TRUE;
|
||||
if (tevFrm != -1) {
|
||||
shouldAnimate = FALSE;
|
||||
}
|
||||
mpBrkAnm1 = new mDoExt_brkAnm();
|
||||
if (!mpBrkAnm1 || !mpBrkAnm1->init(modelData, pbrk, shouldAnimate, 2, 1.0, 0, -1, false, false)) {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
mBrkAnm2 = NULL;
|
||||
mpBrkAnm2 = NULL;
|
||||
if (brkAnm2 != -1) {
|
||||
J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(resName, brkAnm2);
|
||||
pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(resName, brkAnm2);
|
||||
JUT_ASSERT(197, pbrk != 0);
|
||||
mBrkAnm2 = new mDoExt_brkAnm();
|
||||
if (!mBrkAnm2 || !mBrkAnm2->init(modelData, pbrk, true, 2, 1.0, 0, -1, false, false)) {
|
||||
return 0;
|
||||
mpBrkAnm2 = new mDoExt_brkAnm();
|
||||
if (!mpBrkAnm2 || !mpBrkAnm2->init(modelData, pbrk, TRUE, 2, 1.0, 0, -1, false, false)) {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
mBckAnm = NULL;
|
||||
J3DAnmTransform* pbck;
|
||||
mpBckAnm = NULL;
|
||||
if (bckAnm != -1) {
|
||||
J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes(resName, bckAnm);
|
||||
pbck = (J3DAnmTransform*)dComIfG_getObjectRes(resName, bckAnm);
|
||||
JUT_ASSERT(212, pbck != 0);
|
||||
mBckAnm = new mDoExt_bckAnm();
|
||||
if (!mBckAnm || !mBckAnm->init(modelData, pbck, true, 2, 1.0, 0, -1, false)) {
|
||||
return 0;
|
||||
mpBckAnm = new mDoExt_bckAnm();
|
||||
if (!mpBckAnm || !mpBckAnm->init(modelData, pbck, TRUE, 2, 1.0, 0, -1, false)) {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (!clothCreate()) {
|
||||
return 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return 1;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 800F9074-800F9130 .text DrawBase__12daItemBase_cFv */
|
||||
s32 daItemBase_c::DrawBase() {
|
||||
BOOL daItemBase_c::DrawBase() {
|
||||
setTevStr();
|
||||
animEntry();
|
||||
setListStart();
|
||||
settingBeforeDraw();
|
||||
|
||||
mDoExt_modelUpdateDL(mModel);
|
||||
mDoExt_modelUpdateDL(mpModel);
|
||||
|
||||
if (mModelArrow[0]) {
|
||||
mDoExt_modelUpdateDL(mModelArrow[0]);
|
||||
if (mpModelArrow[0]) {
|
||||
mDoExt_modelUpdateDL(mpModelArrow[0]);
|
||||
}
|
||||
if (mModelArrow[1]) {
|
||||
mDoExt_modelUpdateDL(mModelArrow[1]);
|
||||
if (mpModelArrow[1]) {
|
||||
mDoExt_modelUpdateDL(mpModelArrow[1]);
|
||||
}
|
||||
|
||||
setListEnd();
|
||||
setShadow();
|
||||
|
||||
return 1;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 800F9130-800F9184 .text setListStart__12daItemBase_cFv */
|
||||
void daItemBase_c::setListStart() {
|
||||
/* Nonmatching */
|
||||
if (!mDoGph_gInf_c::isMonotone()) {
|
||||
dComIfGd_setListMaskOff();
|
||||
} else {
|
||||
dComIfGd_setListP1();
|
||||
}
|
||||
}
|
||||
|
||||
/* 800F9184-800F91A8 .text setListEnd__12daItemBase_cFv */
|
||||
void daItemBase_c::setListEnd() {
|
||||
/* Nonmatching */
|
||||
dComIfGd_setList();
|
||||
}
|
||||
|
||||
/* 800F91A8-800F9244 .text settingBeforeDraw__12daItemBase_cFv */
|
||||
void daItemBase_c::settingBeforeDraw() {
|
||||
/* Nonmatching */
|
||||
if (isBomb(m_itemNo)) {
|
||||
daPy_lk_c* link = daPy_getPlayerLinkActorClass();
|
||||
link->getBombBrk()->setFrame(0.0f);
|
||||
mpModel->getModelData()->getJointNodePointer(0)->setMtxCalc(NULL);
|
||||
}
|
||||
|
||||
if (m_itemNo == BOMB_BAG || m_itemNo == HUMMER || m_itemNo == SMALL_KEY) {
|
||||
dDlst_texSpecmapST(&mEyePos, &mTevStr, mpModel->getModelData(), 1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
/* 800F9244-800F92DC .text setTevStr__12daItemBase_cFv */
|
||||
void daItemBase_c::setTevStr() {
|
||||
/* Nonmatching */
|
||||
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, getPositionP(), &mTevStr);
|
||||
g_env_light.setLightTevColorType(mpModel, &mTevStr);
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
if (!mpModelArrow[i]) {
|
||||
continue;
|
||||
}
|
||||
g_env_light.setLightTevColorType(mpModelArrow[i], &mTevStr);
|
||||
}
|
||||
}
|
||||
|
||||
/* 800F92DC-800F93A8 .text setShadow__12daItemBase_cFv */
|
||||
void daItemBase_c::setShadow() {
|
||||
/* Nonmatching */
|
||||
f32 shadowSize = mScale.x * dItem_data::getShadowSize(m_itemNo);
|
||||
if (!dItem_data::chkFlag(m_itemNo, 0x10)) {
|
||||
dComIfGd_setSimpleShadow2(
|
||||
getPositionP(), mAcch.GetGroundH(), shadowSize, mAcch.m_gnd,
|
||||
0, 1.0f, dDlst_shadowControl_c::getSimpleTex()
|
||||
);
|
||||
} else {
|
||||
mShadowId = dComIfGd_setShadow(
|
||||
mShadowId, 1, mpModel, getPositionP(), 80.0f, shadowSize,
|
||||
current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &mTevStr,
|
||||
0, 1.0f, dDlst_shadowControl_c::getSimpleTex()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/* 800F93A8-800F94C0 .text animEntry__12daItemBase_cFv */
|
||||
void daItemBase_c::animEntry() {
|
||||
/* Nonmatching */
|
||||
if (mBrkAnm1) {
|
||||
int constantFrame = dItem_data::item_resource[m_itemNo].mTevRegAnimFrameIndex;
|
||||
if (mpBrkAnm1) {
|
||||
int constantFrame = dItem_data::getTevFrm(m_itemNo);
|
||||
if (constantFrame != -1) {
|
||||
mBrkAnm1->entry(mModel->getModelData(), constantFrame);
|
||||
mpBrkAnm1->entry(mpModel->getModelData(), constantFrame);
|
||||
} else {
|
||||
mBrkAnm1->entry(mModel->getModelData());
|
||||
mpBrkAnm1->entry(mpModel->getModelData());
|
||||
}
|
||||
}
|
||||
if (mBtkAnm1) {
|
||||
mBtkAnm1->entry(mModel->getModelData());
|
||||
if (mpBtkAnm1) {
|
||||
mpBtkAnm1->entry(mpModel->getModelData());
|
||||
}
|
||||
if (mBrkAnm2) {
|
||||
mBrkAnm2->entry(mModel->getModelData());
|
||||
if (mpBrkAnm2) {
|
||||
mpBrkAnm2->entry(mpModel->getModelData());
|
||||
}
|
||||
if (mBtkAnm2) {
|
||||
mBtkAnm2->entry(mModel->getModelData());
|
||||
if (mpBtkAnm2) {
|
||||
mpBtkAnm2->entry(mpModel->getModelData());
|
||||
}
|
||||
if (mBckAnm) {
|
||||
mBckAnm->entry(mModel->getModelData());
|
||||
if (mpBckAnm) {
|
||||
mpBckAnm->entry(mpModel->getModelData());
|
||||
}
|
||||
}
|
||||
|
||||
/* 800F94C0-800F95B8 .text animPlay__12daItemBase_cFfffff */
|
||||
void daItemBase_c::animPlay(float, float, float, float, float) {
|
||||
/* Nonmatching */
|
||||
void daItemBase_c::animPlay(f32 brk1Speed, f32 brk2Speed, f32 btk1Speed, f32 btk2Speed, f32 bckSpeed) {
|
||||
if (mpBrkAnm1 && dItem_data::getTevFrm(m_itemNo) == -1) {
|
||||
mpBrkAnm1->setPlaySpeed(brk1Speed);
|
||||
mpBrkAnm1->play();
|
||||
}
|
||||
|
||||
if (mpBtkAnm1) {
|
||||
mpBtkAnm1->setPlaySpeed(btk1Speed);
|
||||
mpBtkAnm1->play();
|
||||
}
|
||||
|
||||
if (mpBrkAnm2) {
|
||||
mpBrkAnm2->setPlaySpeed(brk2Speed);
|
||||
mpBrkAnm2->play();
|
||||
}
|
||||
|
||||
if (mpBtkAnm2) {
|
||||
mpBtkAnm2->setPlaySpeed(btk2Speed);
|
||||
mpBtkAnm2->play();
|
||||
}
|
||||
|
||||
if (mpBckAnm) {
|
||||
mpBckAnm->setPlaySpeed(bckSpeed);
|
||||
mpBckAnm->play();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,20 +21,20 @@ const f32 daShopItem_c::m_cullfar_max = 5000.0f;
|
||||
char* daShopItem_c::getShopArcname() {
|
||||
u8 type = fopAcM_GetParamBit(this, 8, 4);
|
||||
if(type == 1 || (type == 0 && mModelType[m_itemNo] == 0x01)) {
|
||||
return dItem_data::field_item_res[m_itemNo].mModelArcName;
|
||||
return dItem_data::getFieldArc(m_itemNo);
|
||||
}
|
||||
else {
|
||||
return dItem_data::item_resource[m_itemNo].mModelArcName;
|
||||
return dItem_data::getArcname(m_itemNo);
|
||||
}
|
||||
}
|
||||
|
||||
s16 daShopItem_c::getShopBmdIdx() {
|
||||
u8 type = fopAcM_GetParamBit(this, 8, 4);
|
||||
if(type == 1 || (type == 0 && mModelType[m_itemNo] == 0x01)) {
|
||||
return dItem_data::field_item_res[m_itemNo].mModelFileId;
|
||||
return dItem_data::getFieldBmdIdx(m_itemNo);
|
||||
}
|
||||
else {
|
||||
return dItem_data::item_resource[m_itemNo].mModelFileIdx;
|
||||
return dItem_data::getBmdIdx(m_itemNo);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,10 +57,10 @@ void daShopItem_c::CreateInit() {
|
||||
tevType = (TevType)0x5C;
|
||||
}
|
||||
|
||||
mModel->setUserArea(0);
|
||||
mpModel->setUserArea(0);
|
||||
}
|
||||
|
||||
s32 daShopItem_c::clothCreate() {
|
||||
BOOL daShopItem_c::clothCreate() {
|
||||
if(isUseClothPacket(m_itemNo)) {
|
||||
dCloth_packet_c* (*clothFunc[4])(ResTIMG*, ResTIMG*, dKy_tevstr_c*, cXyz**) = {dClothVobj03_create, dClothVobj04_create, dClothVobj05_create, dClothVobj07_0_create};
|
||||
u32 clothRes[4] = {0x20, 0x21, 0x22, 0x23};
|
||||
@@ -96,7 +96,7 @@ s32 daShopItem_c::clothCreate() {
|
||||
}
|
||||
|
||||
void daShopItem_c::set_mtx() {
|
||||
mModel->setBaseScale(mScale);
|
||||
mpModel->setBaseScale(mScale);
|
||||
MTXTrans(mDoMtx_stack_c::get(), current.pos.x, current.pos.y, current.pos.z);
|
||||
mDoMtx_stack_c::ZXYrotM(current.angle.x, current.angle.y, current.angle.z);
|
||||
MTXCopy(mDoMtx_stack_c::get(), field_0x64C);
|
||||
@@ -105,7 +105,7 @@ void daShopItem_c::set_mtx() {
|
||||
mDoMtx_stack_c::transM(temp1.x, temp1.y, temp1.z);
|
||||
const SVec& temp2 = getData()[m_itemNo].field_0x18;
|
||||
mDoMtx_stack_c::ZXYrotM(temp2.x, temp2.y, temp2.z);
|
||||
MTXCopy(mDoMtx_stack_c::get(), mModel->mBaseTransformMtx);
|
||||
MTXCopy(mDoMtx_stack_c::get(), mpModel->mBaseTransformMtx);
|
||||
|
||||
if(field_0x644 != 0) {
|
||||
// I have no clue why Nintendo would do this but it works
|
||||
@@ -139,7 +139,7 @@ bool daShopItem_c::_draw() {
|
||||
if(chkDraw() == 0) return 1;
|
||||
|
||||
if(m_itemNo == WATER_STATUE || m_itemNo == POSTMAN_STATUE) {
|
||||
mModel->getModelData()->getJointTree().getJointNodePointer(0)->setMtxCalc(0);
|
||||
mpModel->getModelData()->getJointTree().getJointNodePointer(0)->setMtxCalc(0);
|
||||
}
|
||||
DrawBase();
|
||||
|
||||
@@ -150,16 +150,16 @@ bool daShopItem_c::_draw() {
|
||||
|
||||
void daShopItem_c::settingBeforeDraw() {
|
||||
if(isBomb(m_itemNo) || (m_itemNo == BOMB_BAG) || (m_itemNo == HUMMER) || m_itemNo == SMALL_KEY || m_itemNo == PRESIDENT_STATUE) {
|
||||
dDlst_texSpecmapST(&mEyePos, &mTevStr, mModel->getModelData(), 1.0f);
|
||||
dDlst_texSpecmapST(&mEyePos, &mTevStr, mpModel->getModelData(), 1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
void daShopItem_c::setTevStr() {
|
||||
g_env_light.settingTevStruct(tevType, getPositionP(), &mTevStr);
|
||||
g_env_light.setLightTevColorType(mModel, &mTevStr);
|
||||
g_env_light.setLightTevColorType(mpModel, &mTevStr);
|
||||
for(int i = 0; i < 2; i++) {
|
||||
if(mModelArrow[i] != 0) {
|
||||
g_env_light.setLightTevColorType(mModelArrow[i], &mTevStr);
|
||||
if(mpModelArrow[i] != 0) {
|
||||
g_env_light.setLightTevColorType(mpModelArrow[i], &mTevStr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -246,7 +246,7 @@ static actor_method_class daShopItemMethodTable = {
|
||||
(process_method_func)daShopItem_Delete,
|
||||
(process_method_func)daShopItem_Execute,
|
||||
(process_method_func)daShopItem_IsDelete,
|
||||
(process_method_func)0,
|
||||
(process_method_func)daShopItem_Draw,
|
||||
};
|
||||
|
||||
extern actor_process_profile_definition g_profile_ShopItem = {
|
||||
|
||||
@@ -263,7 +263,7 @@ const daShopItem_c_m_data daShopItem_c::mData[255] = {
|
||||
{{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}},
|
||||
{{1.0f, 1.0f, 1.0f}, {0.0f, 20.0f, 0.0f}, {0, 0, 0}},
|
||||
};
|
||||
const u8 daShopItem_c::mModelType[256] = {
|
||||
const u8 daShopItem_c::mModelType[255] = {
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
@@ -519,7 +519,6 @@ const u8 daShopItem_c::mModelType[256] = {
|
||||
2,
|
||||
2,
|
||||
2,
|
||||
0
|
||||
};
|
||||
|
||||
cXyz* daShopItem_c::getScaleP() {
|
||||
|
||||
+10136
-10
File diff suppressed because it is too large
Load Diff
+22
-22
@@ -101,7 +101,7 @@ dPath* dNpc_PathRun_c::nextPath(s8 roomNo) {
|
||||
cXyz dNpc_PathRun_c::getPoint(u8 pointIdx) {
|
||||
cXyz point(0.0f, 0.0f, 0.0f);
|
||||
|
||||
if(mPath != 0 && pointIdx < mPath->mNum) {
|
||||
if(mPath != 0 && pointIdx < mPath->m_num) {
|
||||
point = mPath->mpPnt[pointIdx].mPos;
|
||||
}
|
||||
|
||||
@@ -118,8 +118,8 @@ bool dNpc_PathRun_c::incIdx() {
|
||||
|
||||
if(mPath != 0) {
|
||||
mCurrPointIndex += 1;
|
||||
if(mCurrPointIndex >= mPath->mNum) {
|
||||
mCurrPointIndex = mPath->mNum - 1;
|
||||
if(mCurrPointIndex >= mPath->m_num) {
|
||||
mCurrPointIndex = mPath->m_num - 1;
|
||||
ret = false;
|
||||
}
|
||||
}
|
||||
@@ -132,7 +132,7 @@ bool dNpc_PathRun_c::incIdxLoop() {
|
||||
|
||||
if(mPath != 0) {
|
||||
mCurrPointIndex += 1;
|
||||
if(mCurrPointIndex >= mPath->mNum) {
|
||||
if(mCurrPointIndex >= mPath->m_num) {
|
||||
mCurrPointIndex = 0;
|
||||
ret = false;
|
||||
}
|
||||
@@ -147,14 +147,14 @@ bool dNpc_PathRun_c::incIdxAuto() {
|
||||
if(mPath != 0) {
|
||||
if(mPath->mLoops & 1) {
|
||||
mCurrPointIndex += 1;
|
||||
if(mCurrPointIndex >= mPath->mNum) {
|
||||
if(mCurrPointIndex >= mPath->m_num) {
|
||||
mCurrPointIndex = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
mCurrPointIndex += 1;
|
||||
if(mCurrPointIndex >= mPath->mNum) {
|
||||
mCurrPointIndex = mPath->mNum - 1;
|
||||
if(mCurrPointIndex >= mPath->m_num) {
|
||||
mCurrPointIndex = mPath->m_num - 1;
|
||||
hitEnd = false;
|
||||
}
|
||||
}
|
||||
@@ -168,7 +168,7 @@ bool dNpc_PathRun_c::decIdx() {
|
||||
|
||||
if(mPath != 0) {
|
||||
mCurrPointIndex -= 1;
|
||||
if(mCurrPointIndex >= mPath->mNum) {
|
||||
if(mCurrPointIndex >= mPath->m_num) {
|
||||
mCurrPointIndex = 0;
|
||||
ret = false;
|
||||
}
|
||||
@@ -182,8 +182,8 @@ bool dNpc_PathRun_c::decIdxLoop() {
|
||||
|
||||
if(mPath != 0) {
|
||||
mCurrPointIndex -= 1;
|
||||
if(mCurrPointIndex >= mPath->mNum) {
|
||||
mCurrPointIndex = mPath->mNum - 1;
|
||||
if(mCurrPointIndex >= mPath->m_num) {
|
||||
mCurrPointIndex = mPath->m_num - 1;
|
||||
ret = false;
|
||||
}
|
||||
}
|
||||
@@ -197,13 +197,13 @@ bool dNpc_PathRun_c::decIdxAuto() {
|
||||
if(mPath != 0) {
|
||||
if(mPath->mLoops & 1) {
|
||||
mCurrPointIndex -= 1;
|
||||
if(mCurrPointIndex >= mPath->mNum) {
|
||||
mCurrPointIndex = mPath->mNum - 1;
|
||||
if(mCurrPointIndex >= mPath->m_num) {
|
||||
mCurrPointIndex = mPath->m_num - 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
mCurrPointIndex -= 1;
|
||||
if(mCurrPointIndex >= mPath->mNum) {
|
||||
if(mCurrPointIndex >= mPath->m_num) {
|
||||
mCurrPointIndex = 0;
|
||||
hitEnd = false;
|
||||
}
|
||||
@@ -275,7 +275,7 @@ s32 dNpc_PathRun_c::absIdx(u8 startIdx, u8 lastIdx) {
|
||||
u8 dNpc_PathRun_c::maxPoint() {
|
||||
u8 max = 0xFF;
|
||||
if(mPath != 0) {
|
||||
max = mPath->mNum;
|
||||
max = mPath->m_num;
|
||||
}
|
||||
|
||||
return max;
|
||||
@@ -283,7 +283,7 @@ u8 dNpc_PathRun_c::maxPoint() {
|
||||
|
||||
u8 dNpc_PathRun_c::pointArg(u8 idx) {
|
||||
u8 arg = 0;
|
||||
if(mPath != 0 && idx < (u8)mPath->mNum) {
|
||||
if(mPath != 0 && idx < (u8)mPath->m_num) {
|
||||
arg = mPath->mpPnt[idx].mArg3;
|
||||
}
|
||||
|
||||
@@ -794,10 +794,10 @@ void dNpc_EventCut_c::cutTurnToActorStart() {
|
||||
|
||||
u32* set = dComIfGp_evmng_getMyIntegerP(mEvtStaffId, "SetId");
|
||||
if(set) {
|
||||
mSetID = *set;
|
||||
mSetId = *set;
|
||||
}
|
||||
else {
|
||||
mSetID = 0;
|
||||
mSetId = 0;
|
||||
}
|
||||
|
||||
Vec* pos = dComIfGp_evmng_getMyVec3dP(mEvtStaffId, "OffsetPos");
|
||||
@@ -860,7 +860,7 @@ void dNpc_EventCut_c::cutTurnToActorStart() {
|
||||
}
|
||||
|
||||
void dNpc_EventCut_c::cutTurnToActorProc() {
|
||||
if(mSetID != 0) {
|
||||
if(mSetId != 0) {
|
||||
mTargetActorPos.set(0.0f, 0.0f, 0.0f);
|
||||
fopAcM_Search((fopAcIt_JudgeFunc)&findActorCallBack, this);
|
||||
}
|
||||
@@ -957,10 +957,10 @@ void dNpc_EventCut_c::cutMoveToActorStart() {
|
||||
}
|
||||
|
||||
if(set == 0) {
|
||||
mSetID = 0;
|
||||
mSetId = 0;
|
||||
}
|
||||
else {
|
||||
mSetID = *set;
|
||||
mSetId = *set;
|
||||
}
|
||||
|
||||
if(speed == 0) {
|
||||
@@ -986,7 +986,7 @@ void dNpc_EventCut_c::cutMoveToActorStart() {
|
||||
}
|
||||
|
||||
void dNpc_EventCut_c::cutMoveToActorProc() {
|
||||
if(mSetID != 0) {
|
||||
if(mSetId != 0) {
|
||||
mTargetActorPos.set(0.0f, 0.0f, 0.0f);
|
||||
fopAcM_Search((fopAcIt_JudgeFunc)&findActorCallBack, this);
|
||||
}
|
||||
@@ -1037,7 +1037,7 @@ fopAc_ac_c* dNpc_EventCut_c::findActorCallBack(fopAc_ac_c* pActor, void* pData)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(cut->mSetID != 0 && pActor->mSetID == cut->mSetID) {
|
||||
if(cut->mSetId != 0 && pActor->mSetId == cut->mSetId) {
|
||||
cut->mTargetActorPos = pActor->current.pos;
|
||||
cut->mpTargetActor = pActor;
|
||||
|
||||
|
||||
+47
-7
@@ -4,21 +4,61 @@
|
||||
//
|
||||
|
||||
#include "d/d_path.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "JSystem/JUtility/JUTAssert.h"
|
||||
|
||||
/* 80080018-8008010C .text dPath_GetPnt__FP5dPathi */
|
||||
dPath__Point* dPath_GetPnt(dPath*, int) {
|
||||
/* Nonmatching */
|
||||
dPath__Point* dPath_GetPnt(dPath* path, int pnt_index) {
|
||||
JUT_ASSERT(14, path != 0);
|
||||
JUT_ASSERT(15, 0 <= pnt_index && pnt_index < path->m_num);
|
||||
|
||||
if (path == NULL || path->mpPnt == NULL || 0 > pnt_index || pnt_index >= path->m_num)
|
||||
return NULL;
|
||||
else
|
||||
return &path->mpPnt[pnt_index];
|
||||
}
|
||||
|
||||
/* 8008010C-80080218 .text dPath_GetRoomPath__Fii */
|
||||
dPath* dPath_GetRoomPath(int, int) {
|
||||
/* Nonmatching */
|
||||
dPath* dPath_GetRoomPath(int path_index, int room_no) {
|
||||
dStage_dPath_c * pd;
|
||||
if (room_no == -1) {
|
||||
pd = dComIfGp_getStage().getPath2Inf();
|
||||
} else {
|
||||
JUT_ASSERT(0x3d, 0 <= room_no && room_no < 64);
|
||||
dStage_roomStatus_c * pRoom = dComIfGp_roomControl_getStatusRoomDt(room_no);
|
||||
if (pRoom == NULL)
|
||||
return NULL;
|
||||
pd = pRoom->getPath2Inf();
|
||||
}
|
||||
|
||||
if (pd == NULL || 0 > path_index || path_index >= pd->num)
|
||||
return NULL;
|
||||
else
|
||||
return &pd->m_path[path_index];
|
||||
}
|
||||
|
||||
/* 80080218-80080340 .text dPath_GetNextRoomPath__FP5dPathi */
|
||||
void dPath_GetNextRoomPath(dPath*, int) {
|
||||
/* Nonmatching */
|
||||
dPath* dPath_GetNextRoomPath(dPath* path, int room_no) {
|
||||
dStage_dPath_c * pd;
|
||||
if (room_no == -1) {
|
||||
pd = dComIfGp_getStage().getPath2Inf();
|
||||
} else {
|
||||
dStage_roomStatus_c * pRoom = dComIfGp_roomControl_getStatusRoomDt(room_no);
|
||||
if (pRoom == NULL)
|
||||
return NULL;
|
||||
pd = pRoom->getPath2Inf();
|
||||
}
|
||||
|
||||
s32 next_id = path->mNextPathId;
|
||||
if (pd == NULL || (next_id & 0xFFFF) == 0xFFFF) {
|
||||
return NULL;
|
||||
} else {
|
||||
JUT_ASSERT(0x72, 0 <= next_id && next_id < pd->num);
|
||||
if (0 > next_id || next_id >= pd->num)
|
||||
return NULL;
|
||||
else
|
||||
return &pd->m_path[next_id];
|
||||
}
|
||||
}
|
||||
|
||||
/* 80080340-800804A4 .text dPath_GetPolyRoomPathVec__FR13cBgS_PolyInfoP4cXyzPi */
|
||||
|
||||
+43
-6
@@ -3,21 +3,58 @@
|
||||
// Translation Unit: d_point_wind.cpp
|
||||
//
|
||||
|
||||
#include "d_point_wind.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "d/d_point_wind.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_kankyo_rain.h"
|
||||
#include "d/d_kankyo_wether.h"
|
||||
#include "SSystem/SComponent/c_lib.h"
|
||||
|
||||
/* 800CF31C-800CF398 .text set_pwind_init__12dPointWind_cFP9cM3dGCpsS */
|
||||
void dPointWind_c::set_pwind_init(cM3dGCpsS*) {
|
||||
/* Nonmatching */
|
||||
void dPointWind_c::set_pwind_init(cM3dGCpsS* pCps) {
|
||||
mpCps = pCps;
|
||||
mWind.mPos = mpCps->mStart;
|
||||
mWind.mDir = mpCps->mEnd;
|
||||
mWind.mRadius = mpCps->mRadius;
|
||||
mWind.field_0x20 = 0.0f;
|
||||
mWind.mStrength = 1.0f;
|
||||
dKyw_pwind_cylinder_set(&mWind);
|
||||
}
|
||||
|
||||
/* 800CF398-800CF5C8 .text set_pwind_move__12dPointWind_cFv */
|
||||
void dPointWind_c::set_pwind_move() {
|
||||
/* Nonmatching */
|
||||
f32 radScale = 1.8f;
|
||||
BOOL animate = TRUE;
|
||||
|
||||
cXyz p0 = mpCps->mStart;
|
||||
cXyz p1 = mpCps->mEnd;
|
||||
cXyz dir;
|
||||
dKyr_get_vectle_calc(&p0, &p1, &dir);
|
||||
|
||||
if (strcmp(dComIfGp_getStartStageName(), "sea") == 0 && dComIfGp_roomControl_getStayNo() == 4) {
|
||||
radScale = 11.0f;
|
||||
animate = false;
|
||||
mWind.mPos = p0 + (dir * -100.0f);
|
||||
}
|
||||
|
||||
mWind.mDir = dir;
|
||||
mWind.mRadius = mpCps->mRadius * radScale;
|
||||
mWind.field_0x20 = 0.0f;
|
||||
|
||||
if (animate) {
|
||||
cLib_addCalc(&mWind.mPos.x, mpCps->mEnd.x, 0.1f, mWind.mRadius, mWind.mRadius * 0.5f);
|
||||
cLib_addCalc(&mWind.mPos.y, mpCps->mEnd.y, 0.1f, mWind.mRadius, mWind.mRadius * 0.5f);
|
||||
cLib_addCalc(&mWind.mPos.z, mpCps->mEnd.z, 0.1f, mWind.mRadius, mWind.mRadius * 0.5f);
|
||||
|
||||
if (mWind.mPos.abs(p1) < mWind.mRadius) {
|
||||
mWind.mPos.x = mpCps->mStart.x;
|
||||
mWind.mPos.y = mpCps->mStart.y;
|
||||
mWind.mPos.z = mpCps->mStart.z;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 800CF5C8-800CF5EC .text set_pwind_delete__12dPointWind_cFv */
|
||||
void dPointWind_c::set_pwind_delete() {
|
||||
/* Nonmatching */
|
||||
dKyw_pntwind_cut(&mWind);
|
||||
}
|
||||
|
||||
|
||||
+71
-22
@@ -35,14 +35,25 @@ void dStage_SetErrorRoom() {}
|
||||
/* 8004093C-80040940 .text dStage_SetErrorStage__Fv */
|
||||
void dStage_SetErrorStage() {}
|
||||
|
||||
class dStage_KeepTresureInfo {
|
||||
u8 unk[0x404];
|
||||
};
|
||||
|
||||
class dStage_KeepDoorInfo {
|
||||
u8 unk[0x904];
|
||||
};
|
||||
|
||||
dStage_KeepTresureInfo TresureInfo;
|
||||
dStage_KeepDoorInfo DoorInfo;
|
||||
|
||||
/* 80040940-8004094C .text dStage_GetKeepTresureInfo__Fv */
|
||||
void dStage_GetKeepTresureInfo() {
|
||||
/* Nonmatching */
|
||||
dStage_KeepTresureInfo * dStage_GetKeepTresureInfo() {
|
||||
return &TresureInfo;
|
||||
}
|
||||
|
||||
/* 8004094C-80040958 .text dStage_GetKeepDoorInfo__Fv */
|
||||
void dStage_GetKeepDoorInfo() {
|
||||
/* Nonmatching */
|
||||
dStage_KeepDoorInfo * dStage_GetKeepDoorInfo() {
|
||||
return &DoorInfo;
|
||||
}
|
||||
|
||||
/* 80040958-80040A78 .text dStage_KeepTresureInfoProc__FP11dStage_dt_cP19stage_tresure_class
|
||||
@@ -86,7 +97,7 @@ void dStage_roomControl_c::init() {
|
||||
|
||||
dStage_roomStatus_c* status = mStatus;
|
||||
for (int i = 0; i < 64; i++) {
|
||||
status->mRoomDt.init();
|
||||
status->init();
|
||||
setStatusFlag(i, 0);
|
||||
status->mDraw = false;
|
||||
|
||||
@@ -202,17 +213,25 @@ void dStage_roomControl_c::checkDrawArea() const {
|
||||
/* 800412EC-80041330 .text getDarkStatus__20dStage_roomControl_cFv */
|
||||
// NONMATCHING
|
||||
dStage_darkStatus_c* dStage_roomControl_c::getDarkStatus() {
|
||||
dStage_FileList_dt_c* plist_p = mStatus[mStayNo].mRoomDt.mpFileList;
|
||||
if (plist_p == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
dStage_roomStatus_c * pRoomStatus = &mStatus[mStayNo];
|
||||
dStage_FileList_dt_c* plist_p = pRoomStatus->mpFileList;
|
||||
|
||||
if (plist_p == NULL)
|
||||
return NULL;
|
||||
|
||||
// pointer math here seems wrong...
|
||||
return &mDarkStatus[plist_p->mParam & 0x78];
|
||||
}
|
||||
|
||||
/* 80041330-80041370 .text getDarkMode__20dStage_roomControl_cFv */
|
||||
void dStage_roomControl_c::getDarkMode() {
|
||||
/* Nonmatching */
|
||||
u32 dStage_roomControl_c::getDarkMode() {
|
||||
dStage_roomStatus_c * pRoomStatus = &mStatus[mStayNo];
|
||||
dStage_FileList_dt_c* plist_p = pRoomStatus->mpFileList;
|
||||
|
||||
u8 mode = 0;
|
||||
if (plist_p != NULL && (plist_p->mParam & 1) != 0)
|
||||
mode = 1;
|
||||
return mode;
|
||||
}
|
||||
|
||||
/* 80041370-800413D4 .text createMemoryBlock__20dStage_roomControl_cFiUl */
|
||||
@@ -1201,8 +1220,25 @@ void dStage_playerInitIkada(fopAcM_prm_class*, void*) {
|
||||
}
|
||||
|
||||
/* 800419D0-80041AEC .text dStage_chkPlayerId__Fii */
|
||||
void dStage_chkPlayerId(int, int) {
|
||||
/* Nonmatching */
|
||||
u32 dStage_chkPlayerId(int playerId, int room_no) {
|
||||
stage_actor_class * player;
|
||||
|
||||
if (room_no == -1) {
|
||||
player = dComIfGp_getStage().getPlayer();
|
||||
} else {
|
||||
JUT_ASSERT(0x689, 0 <= room_no && room_no < 64);
|
||||
player = dComIfGp_roomControl_getStatusRoomDt(room_no)->getPlayer();
|
||||
}
|
||||
|
||||
if (player == NULL)
|
||||
return FALSE;
|
||||
|
||||
stage_actor_data_class * actor = player->m_entries;
|
||||
for (int i = 0; i < player->num; i++, actor++)
|
||||
if ((u8)actor->mAngle.z == playerId)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* 80041AF4-80041E84 .text dStage_playerInit__FP11dStage_dt_cPviPv */
|
||||
@@ -1246,7 +1282,7 @@ int dStage_playerInit(dStage_dt_c* i_stage, void* i_data, int num, void* param_3
|
||||
appen->mParameter = player_data->mParameter;
|
||||
appen->mPos = player_data->mSpawnPos;
|
||||
appen->mAngle = player_data->mAngle;
|
||||
appen->mEnemyNo = player_data->mEnemyNo;
|
||||
appen->mSetId = player_data->mSetId;
|
||||
|
||||
if (roomParam != 0 && (int)((appen->mParameter >> 0xC) & 0xF) != 2) {
|
||||
appen->mParameter = (roomParam & 0xFFFFFFC0) | (appen->mParameter & 0x3F);
|
||||
@@ -1254,7 +1290,7 @@ int dStage_playerInit(dStage_dt_c* i_stage, void* i_data, int num, void* param_3
|
||||
}
|
||||
|
||||
dComIfGs_setRestartRoomParam(0);
|
||||
appen->mEnemyNo = 0xFFFF;
|
||||
appen->mSetId = 0xFFFF;
|
||||
appen->mRoomNo = -1;
|
||||
|
||||
dComIfGp_getStartStage()->set(dComIfGp_getStartStageName(), appen->mParameter & 0x3F,
|
||||
@@ -1465,14 +1501,14 @@ int dStage_actorInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) {
|
||||
stage_actor_data_class* actor_data = actor->m_entries;
|
||||
|
||||
for (int i = 0; i < actor->num; i++) {
|
||||
if (!dComIfGs_isActor(actor_data->mEnemyNo, i_stage->getRoomNo())) {
|
||||
if (!dComIfGs_isActor(actor_data->mSetId, i_stage->getRoomNo())) {
|
||||
fopAcM_prm_class* appen = fopAcM_CreateAppend();
|
||||
|
||||
if (appen != NULL) {
|
||||
appen->mParameter = actor_data->mParameter;
|
||||
appen->mPos = actor_data->mSpawnPos;
|
||||
appen->mAngle = actor_data->mAngle;
|
||||
appen->mEnemyNo = actor_data->mEnemyNo;
|
||||
appen->mSetId = actor_data->mSetId;
|
||||
appen->mRoomNo = i_stage->getRoomNo();
|
||||
dStage_actorCreate(actor_data, appen);
|
||||
}
|
||||
@@ -1495,7 +1531,7 @@ int dStage_tgscInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) {
|
||||
appen->mParameter = actor_data->mParameter;
|
||||
appen->mPos = actor_data->mSpawnPos;
|
||||
appen->mAngle = actor_data->mAngle;
|
||||
appen->mEnemyNo = actor_data->mEnemyNo;
|
||||
appen->mSetId = actor_data->mSetId;
|
||||
appen->mRoomNo = i_stage->getRoomNo();
|
||||
appen->mScale[0] = actor_data->field_0x20;
|
||||
appen->mScale[1] = actor_data->field_0x21;
|
||||
@@ -1509,8 +1545,20 @@ int dStage_tgscInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) {
|
||||
}
|
||||
|
||||
/* 8004259C-80042628 .text dStage_roomReadInit__FP11dStage_dt_cPviPv */
|
||||
int dStage_roomReadInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) {
|
||||
/* Nonmatching */
|
||||
int dStage_roomReadInit(dStage_dt_c* i_stage, void* i_data, int i_num, void* i_file) {
|
||||
// logic is bad
|
||||
dStage_nodeHeader* room_info = (dStage_nodeHeader*)(i_data);
|
||||
roomRead_class* pRoom = (roomRead_class*)room_info->m_offset;
|
||||
i_stage->setRoom(pRoom);
|
||||
|
||||
roomRead_data_class ** ppEntry = pRoom->m_entries;
|
||||
for (s32 i = 0; i < room_info->m_entryNum; i++, ppEntry++) {
|
||||
// (u8*)(*ppEntry) = (u8*)(i_file) + (u32)ppEntry;
|
||||
roomRead_data_class * pEntry = *ppEntry;
|
||||
pEntry->field_0x4 = (u8*)(i_file) + ((u32)pEntry->field_0x4);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 80042628-80042658 .text dStage_roomRead_dt_c_GetReverbStage__FR14roomRead_classi */
|
||||
@@ -1552,7 +1600,8 @@ int dStage_soundInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) {
|
||||
|
||||
/* 80042814-80042848 .text dStage_eventInfoInit__FP11dStage_dt_cPviPv */
|
||||
int dStage_eventInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) {
|
||||
/* Nonmatching */
|
||||
i_stage->setEventInfo((dStage_EventInfo_c*)((char*)i_data + 4));
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 80042848-8004287C .text dStage_floorInfoInit__FP11dStage_dt_cPviPv */
|
||||
@@ -2075,7 +2124,7 @@ int dStage_changeScene(int i_exitId, f32 speed, u32 mode, s8 room_no) {
|
||||
scls = dComIfGp_getStageSclsInfo();
|
||||
} else {
|
||||
JUT_ASSERT(4192, 0 <= room_no && room_no < 64);
|
||||
scls = dComIfGp_roomControl_getStatusRoomDt(room_no)->mRoomDt.getSclsInfo();
|
||||
scls = dComIfGp_roomControl_getStatusRoomDt(room_no)->getSclsInfo();
|
||||
}
|
||||
|
||||
if (scls == NULL) {
|
||||
|
||||
Reference in New Issue
Block a user