obj_master_sword wip, fmobj mostly done, obj_usaku OK, some BG doc (#1897)

* obj_master_sword work, fix tag_chgrestart

* fmobj mostly done

* some bg documentation

* d_a_obj_usaku OK

* remove asm
This commit is contained in:
TakaRikka
2023-08-27 01:39:15 -07:00
committed by GitHub
parent 73cdbf5495
commit d369e2908c
47 changed files with 1211 additions and 2054 deletions
+1 -1
View File
@@ -647,7 +647,7 @@ int daBg_c::createHeap() {
return 0;
}
if (mpBgW->Set(dzb, 0x20, NULL)) {
if (mpBgW->Set(dzb, cBgW::GLOBAL_e, NULL)) {
return 0;
}
+17 -17
View File
@@ -508,7 +508,7 @@ asm void daBgObj_c::setAttentionInfo(fopAc_ac_c* param_0) {
void daBgObj_c::initBaseMtx() {
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::YrotM(shape_angle.y);
PSMTXCopy(mDoMtx_stack_c::get(), field_0x56c);
PSMTXCopy(mDoMtx_stack_c::get(), mBgMtx);
setBaseMtx();
}
@@ -516,7 +516,7 @@ void daBgObj_c::initBaseMtx() {
void daBgObj_c::setBaseMtx() {
for (int i = 0; i < 2; i++) {
if (field_0x5a8[field_0xcc8][i] != NULL) {
field_0x5a8[field_0xcc8][i]->i_setBaseTRMtx(field_0x56c);
field_0x5a8[field_0xcc8][i]->i_setBaseTRMtx(mBgMtx);
}
}
}
@@ -584,8 +584,8 @@ int daBgObj_c::CreateInitType0() {
int daBgObj_c::CreateInitType1() {
if (i_fopAcM_isSwitch(this, daBgObj_prm::getSwBit(this))) {
field_0xcc8 = 1;
release(field_0x568);
regist(mpBgW);
release(mpBgW);
regist(mpBgW2);
mAction = 3;
} else {
field_0xcc8 = 0;
@@ -613,8 +613,8 @@ int daBgObj_c::CreateInitType1() {
mEventIdx = i_dComIfGp_getEventManager().getEventIdx(this, daBgObj_prm::getEvId(this));
if (mpBgW != NULL) {
mpBgW->Move();
if (mpBgW2 != NULL) {
mpBgW2->Move();
}
initAtt();
@@ -801,9 +801,9 @@ int daBgObj_c::CreateHeapType1() {
cBgD_t* dzb = (cBgD_t*)dComIfG_getObjectRes(daSetBgObj_c::getArcName(this), getDzbName(1));
if (dzb != NULL) {
mpBgW = new dBgW();
if (mpBgW == NULL || mpBgW->Set(dzb, 1, &field_0x56c)) {
mpBgW = NULL;
mpBgW2 = new dBgW();
if (mpBgW2 == NULL || mpBgW2->Set(dzb, cBgW::MOVE_BG_e, &mBgMtx)) {
mpBgW2 = NULL;
return 0;
}
}
@@ -1270,8 +1270,8 @@ int daBgObj_c::actionOrder() {
if (!i_fopAcM_isSwitch(this, daBgObj_prm::getSwBit(this)) || field_0xd00 != 0 ||
field_0xcc8 == 0)
{
release(field_0x568);
regist(mpBgW);
release(mpBgW);
regist(mpBgW2);
field_0xcc8 = 1;
settingCullSizeBoxForCull(field_0xcc8);
@@ -1323,21 +1323,21 @@ int daBgObj_c::ExecuteType0() {
if (arg0 == 0xFF) {
if (i_fopAcM_isSwitch(this, swBit)) {
if (field_0xcc8 == 1) {
regist(field_0x568);
regist(mpBgW);
field_0xcc8 = 0;
}
} else if (field_0xcc8 == 0) {
release(field_0x568);
release(mpBgW);
field_0xcc8 = 1;
}
} else if (arg0 == 0) {
if (i_fopAcM_isSwitch(this, swBit)) {
if (field_0xcc8 == 0) {
release(field_0x568);
release(mpBgW);
field_0xcc8 = 1;
}
} else if (field_0xcc8 == 1) {
regist(field_0x568);
regist(mpBgW);
field_0xcc8 = 0;
}
}
@@ -1374,7 +1374,7 @@ int daBgObj_c::Execute(f32 (**param_0)[3][4]) {
}
}
*param_0 = &field_0x56c;
*param_0 = &mBgMtx;
setBaseMtx();
return 1;
}
@@ -1439,7 +1439,7 @@ void daBgObj_c::indirectProc(J3DModel* i_model) {
/* 8045C2E8-8045C330 002D08 0048+00 1/0 0/0 0/0 .text Delete__9daBgObj_cFv */
int daBgObj_c::Delete() {
release(mpBgW);
release(mpBgW2);
dComIfG_resDelete(&mPhase, daSetBgObj_c::getArcName(this));
return 1;
}
+2 -2
View File
@@ -179,7 +179,7 @@ int daDsh_c::Draw() {
int daDsh_c::Execute(f32 (**param_0)[3][4]) {
callExecute();
setMtx();
*param_0 = &field_0x56c;
*param_0 = &mBgMtx;
func_80467DF8(&mTiltTime);
return 1;
}
@@ -190,7 +190,7 @@ void daDsh_c::setMtx() {
mDoMtx_stack_c::YrotM(shape_angle.y);
mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get());
PSMTXCopy(mDoMtx_stack_c::get(), field_0x56c);
PSMTXCopy(mDoMtx_stack_c::get(), mBgMtx);
}
/* 80467708-8046772C 0002E8 0024+00 5/5 0/0 0/0 .text setAction__7daDsh_cFPQ27daDsh_c8action_c */
+3 -3
View File
@@ -15,7 +15,7 @@ void daIzumiGate_c::initBaseMtx() {
/* 808490B8-8084910C 000098 0054+00 2/2 0/0 0/0 .text setBaseMtx__13daIzumiGate_cFv */
void daIzumiGate_c::setBaseMtx() {
mDoMtx_stack_c::transS(current.pos);
PSMTXCopy(mDoMtx_stack_c::now, field_0x56c);
PSMTXCopy(mDoMtx_stack_c::now, mBgMtx);
PSMTXCopy(mDoMtx_stack_c::now, mpModel->mBaseTransformMtx);
}
@@ -55,7 +55,7 @@ int daIzumiGate_c::create() {
if (phase == cPhs_ERROR_e) {
return phase;
}
fopAcM_SetMtx(this, field_0x56c);
fopAcM_SetMtx(this, mBgMtx);
}
return phase;
}
@@ -80,7 +80,7 @@ int daIzumiGate_c::Create() {
/* 808492FC-80849328 0002DC 002C+00 1/0 0/0 0/0 .text Execute__13daIzumiGate_cFPPA3_A4_f
*/
int daIzumiGate_c::Execute(Mtx** i_mtx) {
*i_mtx = &field_0x56c;
*i_mtx = &mBgMtx;
setBaseMtx();
return 1;
}
+10 -10
View File
@@ -18,7 +18,7 @@ void daObjBoard_c::setBaseMtx() {
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::ZXYrotM(shape_angle);
mDoMtx_stack_c::scaleM(mScale);
PSMTXCopy(mDoMtx_stack_c::get(), field_0x56c);
PSMTXCopy(mDoMtx_stack_c::get(), mBgMtx);
}
/* 8057BE20-8057BE24 -00001 0004+00 2/2 0/0 0/0 .data l_arcName */
@@ -102,12 +102,12 @@ int daObjBoard_c::Execute(Mtx** param_0) {
case 7:
case 15:
if (i_fopAcM_isSwitch(this, getSwNo())) {
if (!field_0x568->ChkUsed()) {
dComIfG_Bgsp().Regist(field_0x568, this);
if (!mpBgW->ChkUsed()) {
dComIfG_Bgsp().Regist(mpBgW, this);
}
} else {
if (field_0x568->ChkUsed()) {
dComIfG_Bgsp().Release(field_0x568);
if (mpBgW->ChkUsed()) {
dComIfG_Bgsp().Release(mpBgW);
}
}
break;
@@ -117,18 +117,18 @@ int daObjBoard_c::Execute(Mtx** param_0) {
case 6:
case 8:
if (i_fopAcM_isSwitch(this, getSwNo())) {
if (field_0x568->ChkUsed()) {
dComIfG_Bgsp().Release(field_0x568);
if (mpBgW->ChkUsed()) {
dComIfG_Bgsp().Release(mpBgW);
}
} else {
if (!field_0x568->ChkUsed()) {
dComIfG_Bgsp().Regist(field_0x568, this);
if (!mpBgW->ChkUsed()) {
dComIfG_Bgsp().Regist(mpBgW, this);
}
}
break;
}
*param_0 = &field_0x56c;
*param_0 = &mBgMtx;
return 1;
}
@@ -12,7 +12,7 @@ void daCowdoor_c::setBaseMtx() {
PSMTXTrans(mDoMtx_stack_c::now, current.pos.x, current.pos.y, current.pos.z);
mDoMtx_stack_c::YrotM(shape_angle.y);
PSMTXCopy(mDoMtx_stack_c::now, field_0x5a8->mBaseTransformMtx);
PSMTXCopy(mDoMtx_stack_c::now, field_0x56c);
PSMTXCopy(mDoMtx_stack_c::now, mBgMtx);
}
/* 80BCC86C-80BCC8C4 0000EC 0058+00 1/0 0/0 0/0 .text Create__11daCowdoor_cFv */
@@ -57,7 +57,7 @@ int daCowdoor_c::create() {
/* 80BCCA1C-80BCCA48 00029C 002C+00 1/0 0/0 0/0 .text Execute__11daCowdoor_cFPPA3_A4_f */
int daCowdoor_c::Execute(f32 (**param_0)[3][4]) {
*param_0 = &field_0x56c;
*param_0 = &mBgMtx;
setBaseMtx();
return 1;
}
+108 -129
View File
@@ -4,74 +4,13 @@
//
#include "rel/d/a/obj/d_a_obj_fmobj/d_a_obj_fmobj.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "SSystem/SComponent/c_math.h"
#include "d/bg/d_bg_w.h"
#include "d/com/d_com_inf_game.h"
#include "d/d_procname.h"
#include "dol2asm.h"
//
// Types:
//
struct request_of_phase_process_class {};
struct obj_fmobj_class {};
struct mDoMtx_stack_c {
/* 8000CD9C */ void transM(f32, f32, f32);
static u8 now[48];
};
struct fopAc_ac_c {
/* 80018B64 */ fopAc_ac_c();
};
struct dSv_memBit_c {
/* 80034934 */ void isDungeonItem(int) const;
};
struct dKy_tevstr_c {};
struct J3DModelData {};
struct cXyz {};
struct dScnKy_env_light_c {
/* 801A37C4 */ void settingTevStruct(int, cXyz*, dKy_tevstr_c*);
/* 801A4DA0 */ void setLightTevColorType_MAJI(J3DModelData*, dKy_tevstr_c*);
};
struct dRes_info_c {};
struct dRes_control_c {
/* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int);
};
struct dBgW_Base {};
struct dBgW {
/* 8007B970 */ dBgW();
/* 8007B9C0 */ void Move();
};
struct dBgS {
/* 80074A08 */ void Regist(dBgW_Base*, fopAc_ac_c*);
};
struct csXyz {};
struct cBgD_t {};
struct cBgW {
/* 80079F38 */ void Set(cBgD_t*, u32, f32 (*)[3][4]);
};
struct cBgS_PolyInfo {};
struct cBgS {
/* 80074250 */ void Release(dBgW_Base*);
};
struct J3DModel {};
//
// Forward References:
//
@@ -83,7 +22,6 @@ extern "C" static void daObj_Fmobj_Delete__FP15obj_fmobj_class();
extern "C" static void useHeapInit__FP10fopAc_ac_c();
extern "C" static void daObj_Fmobj_Create__FP10fopAc_ac_c();
extern "C" extern char const* const d_a_obj_fmobj__stringBase0;
extern "C" extern void* g_profile_OBJ_FMOBJ[12];
//
// External References:
@@ -109,71 +47,72 @@ extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c();
extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
extern "C" void cM_rndF__Ff();
extern "C" void* __nw__FUl();
extern "C" void PSMTXCopy();
extern "C" void PSMTXTrans();
extern "C" void _savegpr_29();
extern "C" void _restgpr_29();
extern "C" extern void* g_fopAc_Method[8];
extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */];
extern "C" u8 now__14mDoMtx_stack_c[48];
extern "C" extern u8 g_dComIfG_gameInfo[122384];
extern "C" extern u8 g_env_light[4880];
//
// Declarations:
//
/* 8057CBD8-8057CC44 000078 006C+00 1/0 0/0 0/0 .text daObj_Fmobj_Draw__FP15obj_fmobj_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void daObj_Fmobj_Draw(obj_fmobj_class* param_0) {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_fmobj/d_a_obj_fmobj/daObj_Fmobj_Draw__FP15obj_fmobj_class.s"
static int daObj_Fmobj_Draw(obj_fmobj_class* i_this) {
J3DModel* model_p = i_this->mpModel;
g_env_light.settingTevStruct(0x40, &i_this->current.pos, &i_this->mTevStr);
g_env_light.setLightTevColorType_MAJI(model_p, &i_this->mTevStr);
mDoExt_modelUpdateDL(model_p);
return 1;
}
#pragma pop
/* 8057CC44-8057CC84 0000E4 0040+00 1/0 0/0 0/0 .text daObj_Fmobj_Execute__FP15obj_fmobj_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void daObj_Fmobj_Execute(obj_fmobj_class* param_0) {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_fmobj/d_a_obj_fmobj/daObj_Fmobj_Execute__FP15obj_fmobj_class.s"
static int daObj_Fmobj_Execute(obj_fmobj_class* i_this) {
i_this->field_0x578++;
for (int i = 0; i < 2; i++) {
if (i_this->field_0x57e[i] != 0) {
i_this->field_0x57e[i]--;
}
}
return 1;
}
#pragma pop
/* 8057CC84-8057CC8C 000124 0008+00 1/0 0/0 0/0 .text daObj_Fmobj_IsDelete__FP15obj_fmobj_class */
static bool daObj_Fmobj_IsDelete(obj_fmobj_class* param_0) {
return true;
static int daObj_Fmobj_IsDelete(obj_fmobj_class* i_this) {
return 1;
}
/* ############################################################################################## */
/* 8057CF74-8057CF74 00000C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_8057CF74 = "Obj_Fmobj";
#pragma pop
/* 8057CC8C-8057CCDC 00012C 0050+00 1/0 0/0 0/0 .text daObj_Fmobj_Delete__FP15obj_fmobj_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void daObj_Fmobj_Delete(obj_fmobj_class* param_0) {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_fmobj/d_a_obj_fmobj/daObj_Fmobj_Delete__FP15obj_fmobj_class.s"
static int daObj_Fmobj_Delete(obj_fmobj_class* i_this) {
dComIfG_resDelete(&i_this->mPhase, "Obj_Fmobj");
dComIfG_Bgsp().Release(i_this->mpBgW);
return 1;
}
#pragma pop
/* 8057CCDC-8057CDE0 00017C 0104+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void useHeapInit(fopAc_ac_c* param_0) {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_fmobj/d_a_obj_fmobj/useHeapInit__FP10fopAc_ac_c.s"
static int useHeapInit(fopAc_ac_c* i_this) {
obj_fmobj_class* a_this = (obj_fmobj_class*)i_this;
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Obj_Fmobj", 4);
a_this->mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
if (a_this->mpModel == NULL) {
return 0;
}
a_this->mpBgW = new dBgW();
if (a_this->mpBgW == NULL) {
return 0;
}
cBgD_t* pdzb = (cBgD_t*)dComIfG_getObjectRes("Obj_Fmobj", 7);
if (a_this->mpBgW->Set(pdzb, cBgW::MOVE_BG_e, &a_this->mBgMtx) == 1) {
return 0;
}
a_this->mpBgW->SetCrrFunc(dBgS_MoveBGProc_Typical);
return 1;
}
#pragma pop
/* ############################################################################################## */
/* 8057CF68-8057CF6C 000000 0004+00 1/1 0/0 0/0 .rodata @3743 */
@@ -201,36 +140,76 @@ COMPILER_STRIP_GATE(0x8057CF70, &lit_3745);
/* 8057CDE0-8057CF60 000280 0180+00 1/0 0/0 0/0 .text daObj_Fmobj_Create__FP10fopAc_ac_c
*/
// reg alloc
#ifdef NONMATCHING
static int daObj_Fmobj_Create(fopAc_ac_c* i_this) {
obj_fmobj_class* a_this = (obj_fmobj_class*)i_this;
fopAcM_SetupActor(a_this, obj_fmobj_class);
int phase = dComIfG_resLoad(&a_this->mPhase, "Obj_Fmobj");
if (phase == cPhs_COMPLEATE_e) {
a_this->field_0x570 = fopAcM_GetParam(a_this) & 0xFF;
if (dComIfGs_isStageBossEnemy()) {
return cPhs_ERROR_e;
}
if (!fopAcM_entrySolidHeap(a_this, useHeapInit, 0x4B000)) {
return cPhs_ERROR_e;
}
if (dComIfG_Bgsp().Regist(a_this->mpBgW, a_this)) {
return cPhs_ERROR_e;
}
fopAcM_SetMtx(a_this, a_this->mpModel->getBaseTRMtx());
a_this->shape_angle.y = cM_rndF(65536.0f);
mDoMtx_stack_c::transS(a_this->current.pos.x, a_this->current.pos.y, a_this->current.pos.z);
mDoMtx_stack_c::YrotM(a_this->shape_angle.y);
a_this->mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get());
mDoMtx_stack_c::transM(0.0f, -30.0f, 0.0f);
PSMTXCopy(mDoMtx_stack_c::get(), a_this->mDzbMtx);
a_this->mpBgW->Move();
}
return phase;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void daObj_Fmobj_Create(fopAc_ac_c* param_0) {
static asm int daObj_Fmobj_Create(fopAc_ac_c* param_0) {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_fmobj/d_a_obj_fmobj/daObj_Fmobj_Create__FP10fopAc_ac_c.s"
}
#pragma pop
#endif
/* ############################################################################################## */
/* 8057CF80-8057CFA0 -00001 0020+00 1/0 0/0 0/0 .data l_daObj_Fmobj_Method */
SECTION_DATA static void* l_daObj_Fmobj_Method[8] = {
(void*)daObj_Fmobj_Create__FP10fopAc_ac_c,
(void*)daObj_Fmobj_Delete__FP15obj_fmobj_class,
(void*)daObj_Fmobj_Execute__FP15obj_fmobj_class,
(void*)daObj_Fmobj_IsDelete__FP15obj_fmobj_class,
(void*)daObj_Fmobj_Draw__FP15obj_fmobj_class,
(void*)NULL,
(void*)NULL,
(void*)NULL,
static actor_method_class l_daObj_Fmobj_Method = {
(process_method_func)daObj_Fmobj_Create, (process_method_func)daObj_Fmobj_Delete,
(process_method_func)daObj_Fmobj_Execute, (process_method_func)daObj_Fmobj_IsDelete,
(process_method_func)daObj_Fmobj_Draw,
};
/* 8057CFA0-8057CFD0 -00001 0030+00 0/0 0/0 1/0 .data g_profile_OBJ_FMOBJ */
SECTION_DATA extern void* g_profile_OBJ_FMOBJ[12] = {
(void*)0xFFFFFFFD, (void*)0x0003FFFD,
(void*)0x00260000, (void*)&g_fpcLf_Method,
(void*)0x000005BC, (void*)NULL,
(void*)NULL, (void*)&g_fopAc_Method,
(void*)0x00280000, (void*)&l_daObj_Fmobj_Method,
(void*)0x00040100, (void*)0x00070000,
extern actor_process_profile_definition g_profile_OBJ_FMOBJ = {
-3,
3,
-3,
PROC_OBJ_FMOBJ,
&g_fpcLf_Method.mBase,
sizeof(obj_fmobj_class),
0,
0,
&g_fopAc_Method.base,
40,
&l_daObj_Fmobj_Method,
0x40100,
0,
7,
};
/* 8057CF74-8057CF74 00000C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+2 -2
View File
@@ -66,8 +66,8 @@ static const Vec l_cull_box[4] = {
int daObjKJgjs_c::Create() {
fopAcM_SetMtx(this, mMtx[1]);
PSMTXCopy(mMtx[1], mpModel->mBaseTransformMtx);
dBgW* mpBgW = field_0x568;
mpBgW->field_0x91 |= 4;
dBgW* bgw_p = mpBgW;
bgw_p->field_0x91 |= 4;
if (!field_0x60c) {
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);
@@ -20,7 +20,7 @@ void daObjLv4Floor_c::setBaseMtx() {
mDoMtx_stack_c::YrotM(shape_angle.y);
mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get());
PSMTXCopy(mDoMtx_stack_c::get(), field_0x56c);
PSMTXCopy(mDoMtx_stack_c::get(), mBgMtx);
}
/* 80C678B0-80C678D4 000130 0024+00 1/0 0/0 0/0 .text Create__15daObjLv4Floor_cFv */
@@ -84,7 +84,7 @@ int daObjLv4Floor_c::create1st() {
/* 80C679E4-80C67A30 000264 004C+00 1/0 0/0 0/0 .text Execute__15daObjLv4Floor_cFPPA3_A4_f */
int daObjLv4Floor_c::Execute(Mtx** param_0) {
action();
*param_0 = &field_0x56c;
*param_0 = &mBgMtx;
setBaseMtx();
return 1;
@@ -424,7 +424,7 @@ void daMagLiftRot_c::setBaseMtx() {
mpModel->setBaseScale(cXyz(1.0f, 1.0f, 1.0f));
mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get());
PSMTXCopy(mDoMtx_stack_c::get(), field_0x56c);
PSMTXCopy(mDoMtx_stack_c::get(), mBgMtx);
}
#else
#pragma push
@@ -547,8 +547,8 @@ int daMagLiftRot_c::create() {
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
fopAcM_setCullSizeBox2(this, mpModel->getModelData());
field_0x568->onStickWall();
field_0x568->onStickRoof();
mpBgW->onStickWall();
mpBgW->onStickRoof();
field_0x5e1 = fopAcM_GetParam(this) & 0xFF;
field_0x5e2 = -0x8000;
@@ -4,184 +4,63 @@
//
#include "rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "d/a/d_a_player.h"
#include "d/com/d_com_inf_game.h"
#include "d/d_procname.h"
#include "d/meter/d_meter2_info.h"
#include "dol2asm.h"
//
// Types:
//
struct request_of_phase_process_class {};
class daObjMasterSword_c;
typedef void (daObjMasterSword_c::*actionFunc)();
struct cXyz {};
class daObjMasterSword_c : public fopAc_ac_c {
public:
enum Mode_e {
MODE_0_e,
};
struct mDoMtx_stack_c {
/* 8000CD64 */ void transS(cXyz const&);
static u8 now[48];
};
struct J3DAnmTextureSRTKey {};
struct J3DAnmTevRegKey {};
struct J3DMaterialTable {
/* 8032F7B4 */ void removeTexMtxAnimator(J3DAnmTextureSRTKey*);
/* 8032F880 */ void removeTevRegAnimator(J3DAnmTevRegKey*);
};
struct mDoExt_btkAnm {
/* 8000D63C */ void init(J3DMaterialTable*, J3DAnmTextureSRTKey*, int, int, f32, s16, s16);
/* 8000D6D8 */ void entry(J3DMaterialTable*, f32);
};
struct mDoExt_brkAnm {
/* 8000D70C */ void init(J3DMaterialTable*, J3DAnmTevRegKey*, int, int, f32, s16, s16);
/* 8000D7A8 */ void entry(J3DMaterialTable*, f32);
};
struct mDoExt_baseAnm {
/* 8000D428 */ void play();
};
struct fopAc_ac_c {
/* 80018B64 */ fopAc_ac_c();
/* 80018C8C */ ~fopAc_ac_c();
};
struct daObjMasterSword_c {
/* 80C90AF8 */ void initWait();
/* 80C90B50 */ void executeWait();
/* 80C90C50 */ void createHeapCallBack(fopAc_ac_c*);
/* 80C90C70 */ void CreateHeap();
/* 80C90DB8 */ void create();
/* 80C90C50 */ static int createHeapCallBack(fopAc_ac_c* i_this);
/* 80C90C70 */ int CreateHeap();
/* 80C90DB8 */ int create();
/* 80C90F6C */ void create_init();
/* 80C91448 */ ~daObjMasterSword_c();
/* 80C91714 */ void draw();
/* 80C91714 */ int draw();
inline void initCollision();
inline void setCollision();
inline void initBaseMtx();
inline void setAction(Mode_e i_mode);
inline void callInit();
inline void callExecute();
inline int execute();
f32 attr() const { return mAttr; }
u8 getEventID() { return (fopAcM_GetParam(this) >> 0x10) & 0xFF; }
u16 getFlagNo() { return fopAcM_GetParam(this) & 0xFFFF; }
static f32 const mAttr;
// static actionFunc ActionTable[];
static u8 ActionTable[24];
};
struct dSv_player_get_item_c {
/* 80033E60 */ void onFirstBit(u8);
};
struct dSv_event_tmp_flag_c {
static u8 const tempBitLabels[370 + 2 /* padding */];
};
struct dSv_event_flag_c {
static u8 saveBitLabels[1644 + 4 /* padding */];
};
struct dSv_event_c {
/* 8003498C */ void onEventBit(u16);
/* 800349BC */ void isEventBit(u16) const;
};
struct dKy_tevstr_c {};
struct J3DModelData {};
struct dScnKy_env_light_c {
/* 801A37C4 */ void settingTevStruct(int, cXyz*, dKy_tevstr_c*);
/* 801A4DA0 */ void setLightTevColorType_MAJI(J3DModelData*, dKy_tevstr_c*);
};
struct dRes_info_c {};
struct dRes_control_c {
/* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int);
};
struct dDlst_shadowControl_c {
static u8 mSimpleTexObj[32];
};
struct dCcD_Stts {
/* 80083860 */ void Init(int, int, fopAc_ac_c*);
};
struct dCcD_SrcCyl {};
struct dCcD_GStts {
/* 80083760 */ dCcD_GStts();
/* 80C9137C */ ~dCcD_GStts();
};
struct dCcD_GObjInf {
/* 80083A28 */ dCcD_GObjInf();
/* 800840E4 */ ~dCcD_GObjInf();
};
struct dCcD_Cyl {
/* 800848B4 */ void Set(dCcD_SrcCyl const&);
};
struct dBgS_PolyPassChk {
/* 80078E68 */ void SetObj();
};
struct dBgS_ObjAcch {
/* 80C9120C */ ~dBgS_ObjAcch();
};
struct dBgS_AcchCir {
/* 80075EAC */ dBgS_AcchCir();
/* 80075F58 */ void SetWall(f32, f32);
/* 80C9127C */ ~dBgS_AcchCir();
};
struct csXyz {};
struct dBgS {};
struct dBgS_Acch {
/* 80075F94 */ ~dBgS_Acch();
/* 800760A0 */ dBgS_Acch();
/* 80076248 */ void Set(cXyz*, cXyz*, fopAc_ac_c*, int, dBgS_AcchCir*, cXyz*, csXyz*, csXyz*);
/* 80076AAC */ void CrrPos(dBgS&);
};
struct dAttention_c {
/* 80070880 */ void getActionBtnB();
/* 80073734 */ void ActionTarget(s32);
};
struct cM3dGCyl {
/* 80C912EC */ ~cM3dGCyl();
};
struct cM3dGCir {
/* 8026EF18 */ ~cM3dGCir();
};
struct cM3dGAab {
/* 80C91334 */ ~cM3dGAab();
};
struct cCcD_Obj {};
struct cCcS {
/* 80264BA8 */ void Set(cCcD_Obj*);
};
struct cCcD_GStts {
/* 80C9189C */ ~cCcD_GStts();
};
struct cBgS_PolyInfo {
/* 80268074 */ cBgS_PolyInfo();
/* 802680B0 */ ~cBgS_PolyInfo();
};
struct _GXTexObj {};
struct J3DModel {};
struct J3DFrameCtrl {
/* 803283FC */ void init(s16);
/* 80C913D8 */ ~J3DFrameCtrl();
/* 0x568 */ J3DModel* mpModel;
/* 0x56C */ request_of_phase_process_class mPhase;
/* 0x574 */ mDoExt_btkAnm mBtk;
/* 0x58C */ mDoExt_brkAnm mBrk;
/* 0x5A4 */ dCcD_Stts mCcStts;
/* 0x5E0 */ dCcD_Cyl mCyl;
/* 0x71C */ actionFunc* mActionFunc;
/* 0x720 */ Mode_e mMode;
/* 0x724 */ u32 mShadowKey;
/* 0x728 */ cBgS_PolyInfo field_0x728;
/* 0x738 */ f32 field_0x738;
};
//
@@ -269,7 +148,6 @@ extern "C" void __dl__FPv();
extern "C" void init__12J3DFrameCtrlFs();
extern "C" void removeTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey();
extern "C" void removeTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey();
extern "C" void PSMTXCopy();
extern "C" void __ptmf_scall();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
@@ -280,8 +158,6 @@ extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" u8 const tempBitLabels__20dSv_event_tmp_flag_c[370 + 2 /* padding */];
extern "C" extern void* g_fopAc_Method[8];
extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */];
extern "C" u8 saveBitLabels__16dSv_event_flag_c[1644 + 4 /* padding */];
extern "C" extern void* __vt__8dCcD_Cyl[36];
extern "C" extern void* __vt__9dCcD_Stts[11];
@@ -289,10 +165,7 @@ extern "C" extern void* __vt__12cCcD_CylAttr[25];
extern "C" extern void* __vt__14cCcD_ShapeAttr[22];
extern "C" extern void* __vt__9cCcD_Stts[8];
extern "C" u8 now__14mDoMtx_stack_c[48];
extern "C" extern u8 g_dComIfG_gameInfo[122384];
extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32];
extern "C" extern u8 g_env_light[4880];
extern "C" extern u8 j3dSys[284];
extern "C" extern u8 data_80C91AD0[4];
//
@@ -300,36 +173,39 @@ extern "C" extern u8 data_80C91AD0[4];
//
/* 80C90AF8-80C90B50 000078 0058+00 1/0 0/0 0/0 .text initWait__18daObjMasterSword_cFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void daObjMasterSword_c::initWait() {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/initWait__18daObjMasterSword_cFv.s"
void daObjMasterSword_c::initWait() {
cLib_onBit(mAttentionInfo.mFlags, 0x10);
current.pos = orig.pos;
current.angle = orig.angle;
shape_angle = orig.angle;
}
#pragma pop
/* 80C90B50-80C90C50 0000D0 0100+00 1/0 0/0 0/0 .text executeWait__18daObjMasterSword_cFv
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void daObjMasterSword_c::executeWait() {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/executeWait__18daObjMasterSword_cFv.s"
void daObjMasterSword_c::executeWait() {
if (daPy_getPlayerActorClass()->checkPriActorOwn(this)) {
for (int i = 0; i < dComIfGp_getAttention().GetActionCount(); i++) {
if (dComIfGp_getAttention().ActionTarget(i) == this) {
if (dComIfGp_getAttention().getActionBtnB() != NULL &&
dComIfGp_getAttention().getActionBtnB()->mType == 4)
{
dComIfGp_setDoStatusForce(8, 0);
}
}
}
}
if (fopAcM_checkCarryNow(this)) {
dMeter2Info_setCloth(WEAR_KOKIRI, false);
fopAcM_orderMapToolEvent(this, getEventID(), 0xFF, 0xFFFF, 1, 0);
}
}
#pragma pop
/* 80C90C50-80C90C70 0001D0 0020+00 1/1 0/0 0/0 .text
* createHeapCallBack__18daObjMasterSword_cFP10fopAc_ac_c */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void daObjMasterSword_c::createHeapCallBack(fopAc_ac_c* param_0) {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/createHeapCallBack__18daObjMasterSword_cFP10fopAc_ac_c.s"
int daObjMasterSword_c::createHeapCallBack(fopAc_ac_c* i_this) {
return static_cast<daObjMasterSword_c*>(i_this)->CreateHeap();
}
#pragma pop
/* ############################################################################################## */
/* 80C91940-80C91944 000000 0004+00 2/2 0/0 0/0 .rodata mAttr__18daObjMasterSword_c */
@@ -374,28 +250,34 @@ SECTION_DATA static u32 lit_1787[1 + 4 /* padding */] = {
#pragma pop
/* 80C9199C-80C919A0 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */
SECTION_DATA static void* l_arcName = (void*)&d_a_obj_master_sword__stringBase0;
SECTION_DATA static char* l_arcName = "MstrSword";
/* 80C90C70-80C90D98 0001F0 0128+00 1/1 0/0 0/0 .text CreateHeap__18daObjMasterSword_cFv
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void daObjMasterSword_c::CreateHeap() {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/CreateHeap__18daObjMasterSword_cFv.s"
int daObjMasterSword_c::CreateHeap() {
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 5);
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000284);
if (mpModel == NULL) {
return 0;
}
J3DAnmTextureSRTKey* pbtk = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes(l_arcName, 11);
if (!mBtk.init(modelData, pbtk, TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1)) {
return 0;
}
J3DAnmTevRegKey* pbrk = (J3DAnmTevRegKey*)dComIfG_getObjectRes(l_arcName, 8);
if (!mBrk.init(modelData, pbrk, TRUE, J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1)) {
return 0;
}
return 1;
}
#pragma pop
/* 80C90D98-80C90DB8 000318 0020+00 1/0 0/0 0/0 .text daObjMasterSword_Create__FP10fopAc_ac_c */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void daObjMasterSword_Create(fopAc_ac_c* param_0) {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/daObjMasterSword_Create__FP10fopAc_ac_c.s"
static int daObjMasterSword_Create(fopAc_ac_c* i_this) {
return static_cast<daObjMasterSword_c*>(i_this)->create();
}
#pragma pop
/* ############################################################################################## */
/* 80C919A0-80C919AC -00001 000C+00 0/1 0/0 0/0 .data @3655 */
@@ -425,6 +307,10 @@ SECTION_DATA u8 daObjMasterSword_c::ActionTable[24] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* static actionFunc daObjMasterSword_c::ActionTable[] = {
&daObjMasterSword_c::initWait, &daObjMasterSword_c::executeWait,
}; */
/* 80C919D0-80C91A14 000054 0044+00 1/1 0/0 0/0 .data
* ccCylSrc$localstatic3$initCollision__18daObjMasterSword_cFv */
SECTION_DATA static u8 data_80C919D0[68] = {
@@ -513,14 +399,36 @@ SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = {
};
/* 80C90DB8-80C90F6C 000338 01B4+00 1/1 0/0 0/0 .text create__18daObjMasterSword_cFv */
// matches with weak funcs
#ifdef NONMATCHING
int daObjMasterSword_c::create() {
fopAcM_SetupActor(this, daObjMasterSword_c);
if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[getFlagNo()])) {
return cPhs_ERROR_e;
}
int phase = dComIfG_resLoad(&mPhase, l_arcName);
if (phase == cPhs_COMPLEATE_e) {
if (!fopAcM_entrySolidHeap(this, daObjMasterSword_c::createHeapCallBack, 0x1830)) {
return cPhs_ERROR_e;
}
create_init();
}
return phase;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void daObjMasterSword_c::create() {
asm int daObjMasterSword_c::create() {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/create__18daObjMasterSword_cFv.s"
}
#pragma pop
#endif
/* ############################################################################################## */
/* 80C91954-80C91958 000014 0004+00 0/1 0/0 0/0 .rodata @3861 */
@@ -544,8 +452,78 @@ SECTION_RODATA static f32 const lit_3863 = 30.0f;
COMPILER_STRIP_GATE(0x80C9195C, &lit_3863);
#pragma pop
void daObjMasterSword_c::initCollision() {
static dCcD_SrcCyl ccCylSrc = {
{
{0, {{0, 0, 0}, {0, 0}, 0x79}}, // mObj
{dCcD_SE_NONE, 0, 0, 0, 0}, // mGObjAt
{dCcD_SE_NONE, 0, 0, 0, 4}, // mGObjTg
{0}, // mGObjCo
}, // mObjInf
{
{current.pos.x, current.pos.y, current.pos.z}, // mCenter
18.0f, // mRadius
180.0f // mHeight
} // mCyl
};
mCcStts.Init(0xFF, 0xFF, this);
mCyl.Set(ccCylSrc);
mCyl.SetStts(&mCcStts);
}
void daObjMasterSword_c::initBaseMtx() {
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
Vec scale = {attr(), attr(), attr()};
mpModel->setBaseScale(scale);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::YrotM(shape_angle.y);
mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get());
}
void daObjMasterSword_c::callInit() {
(this->**mActionFunc)();
}
void daObjMasterSword_c::setAction(daObjMasterSword_c::Mode_e i_mode) {
mMode = i_mode;
// mActionFunc = &ActionTable[mMode];
callInit();
}
/* 80C90F6C-80C9120C 0004EC 02A0+00 1/1 0/0 0/0 .text create_init__18daObjMasterSword_cFv
*/
// matches, but weak function emission is hella weird. cant be linked til its fixed
#ifdef NONMATCHING
void daObjMasterSword_c::create_init() {
fopAcM_setCullSizeBox2(this, mpModel->getModelData());
initCollision();
initBaseMtx();
fopAcM_OnCarryType(this, fopAcM_CARRY_UNK_30);
cLib_onBit(mAttentionInfo.mFlags, 0x10);
mAttentionInfo.field_0x0[4] = 74;
mAttentionInfo.mPosition = current.pos;
mAttentionInfo.mPosition.y += 100.0f;
mEyePos = mAttentionInfo.mPosition;
dBgS_AcchCir cir_check;
dBgS_ObjAcch obj_check;
cir_check.SetWall(10.0f, 30.0f);
obj_check.Set(&fopAcM_GetPosition_p(this), &fopAcM_GetOldPosition_p(this), this, 1, &cir_check,
&fopAcM_GetSpeed_p(this), NULL, NULL);
obj_check.CrrPos(dComIfG_Bgsp());
field_0x738 = obj_check.GetGroundH();
field_0x728 = obj_check.m_gnd;
setAction(MODE_0_e);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -554,12 +532,14 @@ asm void daObjMasterSword_c::create_init() {
#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/create_init__18daObjMasterSword_cFv.s"
}
#pragma pop
#endif
/* 80C9120C-80C9127C 00078C 0070+00 3/2 0/0 0/0 .text __dt__12dBgS_ObjAcchFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm dBgS_ObjAcch::~dBgS_ObjAcch() {
// asm dBgS_ObjAcch::~dBgS_ObjAcch() {
extern "C" asm void __dt__12dBgS_ObjAcchFv() {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/__dt__12dBgS_ObjAcchFv.s"
}
@@ -569,7 +549,8 @@ asm dBgS_ObjAcch::~dBgS_ObjAcch() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm dBgS_AcchCir::~dBgS_AcchCir() {
// asm dBgS_AcchCir::~dBgS_AcchCir() {
extern "C" asm void __dt__12dBgS_AcchCirFv() {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/__dt__12dBgS_AcchCirFv.s"
}
@@ -579,7 +560,8 @@ asm dBgS_AcchCir::~dBgS_AcchCir() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm cM3dGCyl::~cM3dGCyl() {
// asm cM3dGCyl::~cM3dGCyl() {
extern "C" asm void __dt__8cM3dGCylFv() {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/__dt__8cM3dGCylFv.s"
}
@@ -589,7 +571,8 @@ asm cM3dGCyl::~cM3dGCyl() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm cM3dGAab::~cM3dGAab() {
// asm cM3dGAab::~cM3dGAab() {
extern "C" asm void __dt__8cM3dGAabFv() {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/__dt__8cM3dGAabFv.s"
}
@@ -599,7 +582,8 @@ asm cM3dGAab::~cM3dGAab() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm dCcD_GStts::~dCcD_GStts() {
// asm dCcD_GStts::~dCcD_GStts() {
extern "C" asm void __dt__10dCcD_GSttsFv() {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/__dt__10dCcD_GSttsFv.s"
}
@@ -609,7 +593,8 @@ asm dCcD_GStts::~dCcD_GStts() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm J3DFrameCtrl::~J3DFrameCtrl() {
// asm J3DFrameCtrl::~J3DFrameCtrl() {
extern "C" asm void __dt__12J3DFrameCtrlFv() {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/__dt__12J3DFrameCtrlFv.s"
}
@@ -617,14 +602,10 @@ asm J3DFrameCtrl::~J3DFrameCtrl() {
/* 80C91420-80C91448 0009A0 0028+00 1/0 0/0 0/0 .text
* daObjMasterSword_Delete__FP18daObjMasterSword_c */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void daObjMasterSword_Delete(daObjMasterSword_c* param_0) {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/daObjMasterSword_Delete__FP18daObjMasterSword_c.s"
static int daObjMasterSword_Delete(daObjMasterSword_c* i_this) {
i_this->~daObjMasterSword_c();
return 1;
}
#pragma pop
/* 80C91448-80C915E8 0009C8 01A0+00 1/1 0/0 0/0 .text __dt__18daObjMasterSword_cFv */
#pragma push
@@ -643,27 +624,45 @@ SECTION_RODATA static u8 const lit_4030[8] = {
};
COMPILER_STRIP_GATE(0x80C91960, &lit_4030);
void daObjMasterSword_c::callExecute() {
(this->*mActionFunc[1])();
}
void daObjMasterSword_c::setCollision() {
dComIfG_Ccsp()->Set(&mCyl);
}
int daObjMasterSword_c::execute() {
callExecute();
setCollision();
mBtk.play();
mBrk.play();
if (dComIfGs_isTmpBit(dSv_event_tmp_flag_c::tempBitLabels[73])) {
dComIfGs_onItemFirstBit(MASTER_SWORD);
dMeter2Info_setSword(MASTER_SWORD, false);
dComIfGs_setSelectEquipSword(MASTER_SWORD);
i_dComIfGp_setItemLifeCount(dComIfGs_getMaxLife(), 0);
dComIfGs_onEventBit(dSv_event_flag_c::saveBitLabels[getFlagNo()]);
fopAcM_delete(this);
}
return 1;
}
/* 80C915E8-80C916F4 000B68 010C+00 1/0 0/0 0/0 .text
* daObjMasterSword_Execute__FP18daObjMasterSword_c */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void daObjMasterSword_Execute(daObjMasterSword_c* param_0) {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/daObjMasterSword_Execute__FP18daObjMasterSword_c.s"
static int daObjMasterSword_Execute(daObjMasterSword_c* i_this) {
return i_this->execute();
}
#pragma pop
/* 80C916F4-80C91714 000C74 0020+00 1/0 0/0 0/0 .text
* daObjMasterSword_Draw__FP18daObjMasterSword_c */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void daObjMasterSword_Draw(daObjMasterSword_c* param_0) {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/daObjMasterSword_Draw__FP18daObjMasterSword_c.s"
static int daObjMasterSword_Draw(daObjMasterSword_c* i_this) {
return i_this->draw();
}
#pragma pop
/* ############################################################################################## */
/* 80C91968-80C9196C 000028 0004+00 0/1 0/0 0/0 .rodata @4091 */
@@ -681,26 +680,56 @@ COMPILER_STRIP_GATE(0x80C9196C, &lit_4092);
#pragma pop
/* 80C91714-80C91894 000C94 0180+00 1/1 0/0 0/0 .text draw__18daObjMasterSword_cFv */
// weird cXyz stuff
#ifdef NONMATCHING
int daObjMasterSword_c::draw() {
if (dComIfGs_isTmpBit(dSv_event_tmp_flag_c::tempBitLabels[73])) {
return 1;
}
J3DModelData* modelData = mpModel->getModelData();
g_env_light.settingTevStruct(0x10, &current.pos, &mTevStr);
g_env_light.setLightTevColorType_MAJI(mpModel, &mTevStr);
dComIfGd_setListBG();
mBtk.entry(modelData);
mBrk.entry(modelData);
mDoExt_modelUpdateDL(mpModel);
mBtk.remove(modelData);
mBrk.remove(modelData);
dComIfGd_setList();
cXyz sp14, sp8 = cXyz(current.pos.x, current.pos.y + 50.0f, current.pos.z);
mShadowKey =
dComIfGd_setShadow(mShadowKey, 1, mpModel, &sp14, 200.0f, 10.0f, current.pos.y, field_0x738,
field_0x728, &mTevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex());
return 1;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void daObjMasterSword_c::draw() {
asm int daObjMasterSword_c::draw() {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/draw__18daObjMasterSword_cFv.s"
}
#pragma pop
#endif
/* 80C91894-80C9189C 000E14 0008+00 1/0 0/0 0/0 .text
* daObjMasterSword_IsDelete__FP18daObjMasterSword_c */
static bool daObjMasterSword_IsDelete(daObjMasterSword_c* param_0) {
return true;
static int daObjMasterSword_IsDelete(daObjMasterSword_c* param_0) {
return 1;
}
/* 80C9189C-80C918E4 000E1C 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm cCcD_GStts::~cCcD_GStts() {
// asm cCcD_GStts::~cCcD_GStts() {
extern "C" asm void __dt__10cCcD_GSttsFv() {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/__dt__10cCcD_GSttsFv.s"
}
@@ -710,8 +739,7 @@ asm cCcD_GStts::~cCcD_GStts() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void __sinit_d_a_obj_master_sword_cpp() {
nofralloc
asm void __sinit_d_a_obj_master_sword_cpp(){nofralloc
#include "asm/rel/d/a/obj/d_a_obj_master_sword/d_a_obj_master_sword/__sinit_d_a_obj_master_sword_cpp.s"
}
#pragma pop
+2 -2
View File
@@ -58,7 +58,7 @@ void daObjMGate_c::setBaseMtx() {
mDoMtx_stack_c::YrotM(shape_angle.y);
mDoMtx_stack_c::ZXYrotM(mGateAngle.x, mGateAngle.y, mGateAngle.z);
mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get());
PSMTXCopy(mDoMtx_stack_c::get(), field_0x56c);
PSMTXCopy(mDoMtx_stack_c::get(), mBgMtx);
if (mpKeyModel != NULL) {
cXyz key_offset(l_key_offset[mKind]);
@@ -223,7 +223,7 @@ int daObjMGate_c::Execute(Mtx** param_0) {
}
}
*param_0 = &field_0x56c;
*param_0 = &mBgMtx;
setBaseMtx();
mGateAngle.y = mGateSwingMultiplier * cM_ssin(mCounter * 4000);
+2 -2
View File
@@ -20,7 +20,7 @@ void daObjOnsen_c::setBaseMtx() {
mDoMtx_stack_c::YrotM(shape_angle.y);
PSMTXCopy(mDoMtx_stack_c::now, mpModel[0]->mBaseTransformMtx);
PSMTXCopy(mDoMtx_stack_c::now, mpModel[1]->mBaseTransformMtx);
PSMTXCopy(mDoMtx_stack_c::now, field_0x56c);
PSMTXCopy(mDoMtx_stack_c::now, mBgMtx);
}
/* 80CA7C28-80CA7C74 000148 004C+00 1/0 0/0 0/0 .text Create__12daObjOnsen_cFv */
@@ -92,7 +92,7 @@ int daObjOnsen_c::create1st() {
/* 80CA7EEC-80CA7F1C 00040C 0030+00 1/0 0/0 0/0 .text Execute__12daObjOnsen_cFPPA3_A4_f
*/
int daObjOnsen_c::Execute(Mtx** i_mtx) {
*i_mtx = &field_0x56c;
*i_mtx = &mBgMtx;
mpBtk->play();
return 1;
}
+6 -6
View File
@@ -21,7 +21,7 @@ void daObjGake_c::setBaseMtx() {
mDoMtx_stack_c::YrotM(shape_angle.y);
mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get());
PSMTXCopy(mDoMtx_stack_c::get(), field_0x56c);
PSMTXCopy(mDoMtx_stack_c::get(), mBgMtx);
}
/* 80D0BCB8-80D0BD30 000118 0078+00 1/0 0/0 0/0 .text Create__11daObjGake_cFv */
@@ -72,8 +72,8 @@ int daObjGake_c::Execute(Mtx** param_0) {
(mEventBit1 != 0x3FF &&
!i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[mEventBit1])))
{
if (field_0x568 != NULL && field_0x568->ChkUsed()) {
dComIfG_Bgsp().Release(field_0x568);
if (mpBgW != NULL && mpBgW->ChkUsed()) {
dComIfG_Bgsp().Release(mpBgW);
}
mHide = true;
@@ -81,15 +81,15 @@ int daObjGake_c::Execute(Mtx** param_0) {
}
if (mEventBit1 != 0x3FF && i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[mEventBit1])) {
if (field_0x568 != NULL && !field_0x568->ChkUsed()) {
dComIfG_Bgsp().Regist(field_0x568, this);
if (mpBgW != NULL && !mpBgW->ChkUsed()) {
dComIfG_Bgsp().Regist(mpBgW, this);
}
mHide = false;
return 1;
}
*param_0 = &field_0x56c;
*param_0 = &mBgMtx;
return 1;
}
+100 -203
View File
@@ -1,231 +1,128 @@
//
// Generated By: dol2asm
// Translation Unit: d_a_obj_usaku
//
/**
* d_a_obj_usaku.cpp
* Horse Fence
*/
#include "rel/d/a/obj/d_a_obj_usaku/d_a_obj_usaku.h"
#include "dol2asm.h"
//
// Types:
//
struct request_of_phase_process_class {};
struct obj_usaku_class {};
struct mDoMtx_stack_c {
static u8 now[48];
};
struct fopAc_ac_c {
/* 80018B64 */ fopAc_ac_c();
};
struct dKy_tevstr_c {};
struct J3DModelData {};
struct cXyz {};
struct dScnKy_env_light_c {
/* 801A37C4 */ void settingTevStruct(int, cXyz*, dKy_tevstr_c*);
/* 801A4DA0 */ void setLightTevColorType_MAJI(J3DModelData*, dKy_tevstr_c*);
};
struct dRes_info_c {};
struct dRes_control_c {
/* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int);
};
struct dBgW_Base {};
struct dBgW {
/* 8007B970 */ dBgW();
/* 8007B9C0 */ void Move();
};
struct dBgS {
/* 80074A08 */ void Regist(dBgW_Base*, fopAc_ac_c*);
};
struct csXyz {};
struct cBgD_t {};
struct cBgW {
/* 80079F38 */ void Set(cBgD_t*, u32, f32 (*)[3][4]);
};
struct cBgS_PolyInfo {};
struct cBgS {
/* 80074250 */ void Release(dBgW_Base*);
};
struct J3DModel {};
//
// Forward References:
//
extern "C" static void daObj_Usaku_Draw__FP15obj_usaku_class();
extern "C" static void daObj_Usaku_Execute__FP15obj_usaku_class();
extern "C" static bool daObj_Usaku_IsDelete__FP15obj_usaku_class();
extern "C" static void daObj_Usaku_Delete__FP15obj_usaku_class();
extern "C" static void useHeapInit__FP10fopAc_ac_c();
extern "C" static void daObj_Usaku_Create__FP10fopAc_ac_c();
extern "C" extern char const* const d_a_obj_usaku__stringBase0;
extern "C" extern void* g_profile_OBJ_USAKU[12];
//
// External References:
//
extern "C" void mDoMtx_YrotM__FPA4_fs();
extern "C" void mDoExt_modelUpdateDL__FP8J3DModel();
extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl();
extern "C" void __ct__10fopAc_ac_cFv();
extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl();
extern "C" void fopAcM_SetMin__FP10fopAc_ac_cfff();
extern "C" void fopAcM_SetMax__FP10fopAc_ac_cfff();
extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc();
extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc();
extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci();
extern "C" void Release__4cBgSFP9dBgW_Base();
extern "C" void Regist__4dBgSFP9dBgW_BaseP10fopAc_ac_c();
extern "C" void dBgS_MoveBGProc_Typical__FP4dBgWPvRC13cBgS_PolyInfobP4cXyzP5csXyzP5csXyz();
extern "C" void Set__4cBgWFP6cBgD_tUlPA3_A4_f();
extern "C" void __ct__4dBgWFv();
extern "C" void Move__4dBgWFv();
extern "C" void settingTevStruct__18dScnKy_env_light_cFiP4cXyzP12dKy_tevstr_c();
extern "C" void setLightTevColorType_MAJI__18dScnKy_env_light_cFP12J3DModelDataP12dKy_tevstr_c();
extern "C" void* __nw__FUl();
extern "C" void PSMTXCopy();
extern "C" void PSMTXTrans();
extern "C" void _savegpr_29();
extern "C" void _restgpr_29();
extern "C" extern void* g_fopAc_Method[8];
extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */];
extern "C" u8 now__14mDoMtx_stack_c[48];
extern "C" extern u8 g_dComIfG_gameInfo[122384];
extern "C" extern u8 g_env_light[4880];
//
// Declarations:
//
#include "JSystem/JKernel/JKRHeap.h"
#include "d/bg/d_bg_w.h"
#include "d/com/d_com_inf_game.h"
#include "d/d_procname.h"
/* 80D20F58-80D20FBC 000078 0064+00 1/0 0/0 0/0 .text daObj_Usaku_Draw__FP15obj_usaku_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void daObj_Usaku_Draw(obj_usaku_class* param_0) {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_usaku/d_a_obj_usaku/daObj_Usaku_Draw__FP15obj_usaku_class.s"
static int daObj_Usaku_Draw(obj_usaku_class* i_this) {
g_env_light.settingTevStruct(0x10, &i_this->current.pos, &i_this->mTevStr);
g_env_light.setLightTevColorType_MAJI(i_this->mpModel, &i_this->mTevStr);
mDoExt_modelUpdateDL(i_this->mpModel);
return 1;
}
#pragma pop
/* 80D20FBC-80D21048 0000DC 008C+00 2/1 0/0 0/0 .text daObj_Usaku_Execute__FP15obj_usaku_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void daObj_Usaku_Execute(obj_usaku_class* param_0) {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_usaku/d_a_obj_usaku/daObj_Usaku_Execute__FP15obj_usaku_class.s"
static int daObj_Usaku_Execute(obj_usaku_class* i_this) {
mDoMtx_stack_c::transS(i_this->current.pos.x, i_this->current.pos.y, i_this->current.pos.z);
mDoMtx_stack_c::YrotM(i_this->shape_angle.y);
i_this->mpModel->i_setBaseTRMtx(mDoMtx_stack_c::get());
if (i_this->mpBgW != NULL) {
PSMTXCopy(mDoMtx_stack_c::get(), i_this->mBgMtx);
i_this->mpBgW->Move();
}
return 1;
}
#pragma pop
/* 80D21048-80D21050 000168 0008+00 1/0 0/0 0/0 .text daObj_Usaku_IsDelete__FP15obj_usaku_class */
static bool daObj_Usaku_IsDelete(obj_usaku_class* param_0) {
return true;
static int daObj_Usaku_IsDelete(obj_usaku_class* i_this) {
return 1;
}
/* ############################################################################################## */
/* 80D212EC-80D212EC 000010 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_80D212EC = "Obj_usaku";
#pragma pop
/* 80D21050-80D210A8 000170 0058+00 1/0 0/0 0/0 .text daObj_Usaku_Delete__FP15obj_usaku_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void daObj_Usaku_Delete(obj_usaku_class* param_0) {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_usaku/d_a_obj_usaku/daObj_Usaku_Delete__FP15obj_usaku_class.s"
static int daObj_Usaku_Delete(obj_usaku_class* i_this) {
dComIfG_resDelete(&i_this->mPhase, "Obj_usaku");
if (i_this->mpBgW != NULL) {
dComIfG_Bgsp().Release(i_this->mpBgW);
}
return 1;
}
#pragma pop
/* 80D210A8-80D211AC 0001C8 0104+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void useHeapInit(fopAc_ac_c* param_0) {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_usaku/d_a_obj_usaku/useHeapInit__FP10fopAc_ac_c.s"
static int useHeapInit(fopAc_ac_c* i_this) {
obj_usaku_class* a_this = (obj_usaku_class*)i_this;
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Obj_usaku", 4);
a_this->mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
if (a_this->mpModel == NULL) {
return 0;
}
a_this->mpBgW = new dBgW();
if (a_this->mpBgW == NULL) {
return 0;
}
cBgD_t* pdzb = (cBgD_t*)dComIfG_getObjectRes("Obj_usaku", 7);
if (a_this->mpBgW->Set(pdzb, cBgW::MOVE_BG_e, &a_this->mBgMtx) == 1) {
return 0;
}
a_this->mpBgW->SetCrrFunc(dBgS_MoveBGProc_Typical);
return 1;
}
#pragma pop
/* ############################################################################################## */
/* 80D212DC-80D212E0 000000 0004+00 1/1 0/0 0/0 .rodata @3744 */
SECTION_RODATA static f32 const lit_3744 = -300.0f;
COMPILER_STRIP_GATE(0x80D212DC, &lit_3744);
/* 80D212E0-80D212E4 000004 0004+00 0/1 0/0 0/0 .rodata @3745 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3745 = -600.0f;
COMPILER_STRIP_GATE(0x80D212E0, &lit_3745);
#pragma pop
/* 80D212E4-80D212E8 000008 0004+00 0/1 0/0 0/0 .rodata @3746 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3746 = 300.0f;
COMPILER_STRIP_GATE(0x80D212E4, &lit_3746);
#pragma pop
/* 80D212E8-80D212EC 00000C 0004+00 0/1 0/0 0/0 .rodata @3747 */
#pragma push
#pragma force_active on
SECTION_RODATA static f32 const lit_3747 = 600.0f;
COMPILER_STRIP_GATE(0x80D212E8, &lit_3747);
#pragma pop
/* 80D211AC-80D212D4 0002CC 0128+00 1/0 0/0 0/0 .text daObj_Usaku_Create__FP10fopAc_ac_c
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void daObj_Usaku_Create(fopAc_ac_c* param_0) {
nofralloc
#include "asm/rel/d/a/obj/d_a_obj_usaku/d_a_obj_usaku/daObj_Usaku_Create__FP10fopAc_ac_c.s"
static int daObj_Usaku_Create(fopAc_ac_c* i_this) {
fopAcM_SetupActor(i_this, obj_usaku_class);
obj_usaku_class* a_this = (obj_usaku_class*)i_this;
int phase = dComIfG_resLoad(&a_this->mPhase, "Obj_usaku");
if (phase == cPhs_COMPLEATE_e) {
a_this->field_0x570 = fopAcM_GetParam(a_this) & 0xFF;
if (a_this->field_0x570 == 0xFF) {
a_this->field_0x570 = 0;
}
if (!fopAcM_entrySolidHeap(a_this, useHeapInit, 0xC60)) {
return cPhs_ERROR_e;
}
if (a_this->mpBgW != NULL && dComIfG_Bgsp().Regist(a_this->mpBgW, a_this)) {
return cPhs_ERROR_e;
}
a_this->mCullMtx = a_this->mpModel->getBaseTRMtx();
fopAcM_SetMin(a_this, -300.0f, -600.0f, -300.0f);
fopAcM_SetMax(a_this, 300.0f, 600.0f, 300.0f);
daObj_Usaku_Execute(a_this);
}
return phase;
}
#pragma pop
/* ############################################################################################## */
/* 80D212F8-80D21318 -00001 0020+00 1/0 0/0 0/0 .data l_daObj_Usaku_Method */
SECTION_DATA static void* l_daObj_Usaku_Method[8] = {
(void*)daObj_Usaku_Create__FP10fopAc_ac_c,
(void*)daObj_Usaku_Delete__FP15obj_usaku_class,
(void*)daObj_Usaku_Execute__FP15obj_usaku_class,
(void*)daObj_Usaku_IsDelete__FP15obj_usaku_class,
(void*)daObj_Usaku_Draw__FP15obj_usaku_class,
(void*)NULL,
(void*)NULL,
(void*)NULL,
static actor_method_class l_daObj_Usaku_Method = {
(process_method_func)daObj_Usaku_Create, (process_method_func)daObj_Usaku_Delete,
(process_method_func)daObj_Usaku_Execute, (process_method_func)daObj_Usaku_IsDelete,
(process_method_func)daObj_Usaku_Draw,
};
/* 80D21318-80D21348 -00001 0030+00 0/0 0/0 1/0 .data g_profile_OBJ_USAKU */
SECTION_DATA extern void* g_profile_OBJ_USAKU[12] = {
(void*)0xFFFFFFFD, (void*)0x0007FFFD,
(void*)0x012A0000, (void*)&g_fpcLf_Method,
(void*)0x000005B4, (void*)NULL,
(void*)NULL, (void*)&g_fopAc_Method,
(void*)0x004E0000, (void*)&l_daObj_Usaku_Method,
(void*)0x00040100, (void*)0x000E0000,
extern actor_process_profile_definition g_profile_OBJ_USAKU = {
-3,
7,
-3,
PROC_OBJ_USAKU,
&g_fpcLf_Method.mBase,
sizeof(obj_usaku_class),
0,
0,
&g_fopAc_Method.base,
78,
&l_daObj_Usaku_Method,
0x40100,
0,
14,
};
/* 80D212EC-80D212EC 000010 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+1 -1
View File
@@ -238,7 +238,7 @@ static int useHeapInit(fopAc_ac_c* i_this) {
}
cBgD_t* dzb = (cBgD_t*)dComIfG_getObjectRes("Obj_web1", 11);
if (_this->mpBgW->Set(dzb, 1, &_this->mMtx) == 1) {
if (_this->mpBgW->Set(dzb, cBgW::MOVE_BG_e, &_this->mMtx) == 1) {
return 0;
}
@@ -1,51 +1,38 @@
/**
* d_a_tag_chgrestart.cpp
*
*
*/
#include "rel/d/a/tag/d_a_tag_chgrestart/d_a_tag_chgrestart.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "d/d_procname.h"
//
// External References:
//
extern "C" void mDoMtx_YrotS__FPA4_fs();
extern "C" void getStatusRoomDt__20dStage_roomControl_cFi();
extern "C" void setRoom__13dSv_restart_cFRC4cXyzsSc();
extern "C" void onSwitch__10dSv_info_cFii();
extern "C" void isSwitch__10dSv_info_cCFii();
extern "C" void _savegpr_29();
extern "C" void _restgpr_29();
extern "C" u8 now__14mDoMtx_stack_c[48];
/* 80D56758-80D567E4 000078 008C+00 1/1 0/0 0/0 .text Create__17daTagChgRestart_cFv */
s32 daTagChgRestart_c::Create() {
field_0x568[0].x = -100.0f * mScale.x;
field_0x568[0].z = -100.0f * mScale.z;
mVertices[0].x = -100.0f * mScale.x;
mVertices[0].z = -100.0f * mScale.z;
field_0x568[1].x = 100.0f * mScale.x;
field_0x568[1].z = -100.0f * mScale.z;
mVertices[1].x = 100.0f * mScale.x;
mVertices[1].z = -100.0f * mScale.z;
field_0x568[2].x = 100.0f * mScale.x;
field_0x568[2].z = 100.0f * mScale.z;
mVertices[2].x = 100.0f * mScale.x;
mVertices[2].z = 100.0f * mScale.z;
field_0x568[3].x = -100.0f * mScale.x;
field_0x568[3].z = 100.0f * mScale.z;
mVertices[3].x = -100.0f * mScale.x;
mVertices[3].z = 100.0f * mScale.z;
field_0x568[3].y = 0.0f;
field_0x568[2].y = 0.0f;
field_0x568[1].y = 0.0f;
field_0x568[0].y = 0.0f;
mVertices[3].y = 0.0f;
mVertices[2].y = 0.0f;
mVertices[1].y = 0.0f;
mVertices[0].y = 0.0f;
return 1;
}
/* 80D567E4-80D56878 000104 0094+00 1/1 0/0 0/0 .text create__17daTagChgRestart_cFv */
s32 daTagChgRestart_c::create() {
s32 daTagChgRestart_c::create() {
fopAcM_SetupActor(this, daTagChgRestart_c);
if (!Create()) {
return cPhs_ERROR_e;
}
@@ -54,10 +41,8 @@ s32 daTagChgRestart_c::create() {
}
/* 80D568B8-80D56A84 0001D8 01CC+00 1/1 0/0 0/0 .text execute__17daTagChgRestart_cFv */
#ifdef NONMATCHING
// do-while loop is wrong
s32 daTagChgRestart_c::execute() {
if (i_fopAcM_isSwitch(this,daTagChgRestart_prm::getSwNo(this))) {
if (i_fopAcM_isSwitch(this, daTagChgRestart_prm::getSwNo(this))) {
return 1;
}
@@ -66,46 +51,40 @@ s32 daTagChgRestart_c::execute() {
pos -= orig.pos;
mDoMtx_stack_c::YrotS(-current.angle.y);
mDoMtx_stack_c::multVec(&pos,&pos);
mDoMtx_stack_c::multVec(&pos, &pos);
if (mVertices[0].x < pos.x && mVertices[0].z < pos.z && mVertices[2].x > pos.x &&
mVertices[2].z > pos.z)
{
cXyz restart_pos = orig.pos;
s16 restart_angle = orig.angle.y;
if (field_0x568[0].x < pos.x && field_0x568[0].z < pos.z &&
field_0x568[2].x > pos.x && field_0x568[2].z > pos.z) {
cXyz l_restartPos = orig.pos;
s16 l_restartAngle = orig.angle.y;
u8 playerNo = daTagChgRestart_prm::getPlayerNo(this);
if (playerNo != 0xFF) {
dStage_roomStatus_c* roomStatusDt = dComIfGp_roomControl_getStatusRoomDt(fopAcM_GetRoomNo(this));
stage_actor_class* actor = roomStatusDt->mRoomDt.getPlayer();
stage_actor_data_class* actor_data = actor->mEntries;
int entryNum = actor->mEntryNum;
dStage_roomStatus_c* roomStatusDt =
dComIfGp_roomControl_getStatusRoomDt(fopAcM_GetRoomNo(this));
stage_actor_class* player_data = roomStatusDt->mRoomDt.getPlayer();
do {
actor_data++;
stage_actor_data_class* entry_p = player_data->mEntries;
for (int i = 0; i < player_data->mEntryNum; i++) {
if ((entry_p->mAngle.z & 0xFF) == playerNo) {
break;
}
entry_p++;
}
while (entryNum > 0 && actor->mEntryNum > playerNo && actor_data != 0);
l_restartPos = actor_data->mSpawnPos;
l_restartAngle = actor_data->mAngle.y;
restart_pos = entry_p->mSpawnPos;
restart_angle = entry_p->mAngle.y;
}
s32 l_roomNo = fopAcM_GetRoomNo(player);
dComIfGs_setRestartRoom(l_restartPos,l_restartAngle,l_roomNo);
i_fopAcM_onSwitch(this,daTagChgRestart_prm::getSwNo(this));
dComIfGs_setRestartRoom(restart_pos, restart_angle, l_roomNo);
i_fopAcM_onSwitch(this, daTagChgRestart_prm::getSwNo(this));
}
return 1;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm s32 daTagChgRestart_c::execute() {
nofralloc
#include "asm/rel/d/a/tag/d_a_tag_chgrestart/d_a_tag_chgrestart/execute__17daTagChgRestart_cFv.s"
}
#pragma pop
#endif
/* 80D56A84-80D56A8C 0003A4 0008+00 1/1 0/0 0/0 .text _delete__17daTagChgRestart_cFv */
s32 daTagChgRestart_c::_delete() {
@@ -125,8 +104,8 @@ static s32 daTagChgRestart_Delete(daTagChgRestart_c* i_this) {
}
/* 80D56ACC-80D56AEC 0003EC 0020+00 1/0 0/0 0/0 .text daTagChgRestart_Create__FP10fopAc_ac_c */
static s32 daTagChgRestart_Create(fopAc_ac_c* param_0) {
return static_cast<daTagChgRestart_c*>(param_0)->create();
static s32 daTagChgRestart_Create(fopAc_ac_c* i_this) {
return static_cast<daTagChgRestart_c*>(i_this)->create();
}
/* ############################################################################################## */
@@ -134,7 +113,7 @@ static s32 daTagChgRestart_Create(fopAc_ac_c* param_0) {
static actor_method_class l_daTagChgRestart_Method = {
(process_method_func)daTagChgRestart_Create,
(process_method_func)daTagChgRestart_Delete,
(process_method_func)daTagChgRestart_Execute
(process_method_func)daTagChgRestart_Execute,
};
/* 80D56B20-80D56B50 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Tag_ChgRestart */
+1 -1
View File
@@ -55,7 +55,7 @@ int daTagHjump_c::create() {
mDoMtx_stack_c::get()[1][3] -= 100.0f;
current.pos.y -= 100.0f;
field_0x568->SetLock();
mpBgW->SetLock();
mScale.x = 250.0f;
mScale.y = 350.0f;
mScale.z = 400.0f;