mirror of
https://github.com/zeldaret/ss
synced 2026-05-23 23:05:20 -04:00
More
This commit is contained in:
@@ -14345,8 +14345,8 @@ fn_8026D950 = .text:0x8026D950; // type:function size:0x28
|
||||
checkIsClear__9dAcTbox_cCFv = .text:0x8026D980; // type:function size:0x140
|
||||
fn_8026DAC0__9dAcTbox_cFR4mAng = .text:0x8026DAC0; // type:function size:0x10
|
||||
fn_8026DAD0__9dAcTbox_cCFP7mVec3_cP7mVec3_c = .text:0x8026DAD0; // type:function size:0x8
|
||||
getCylParams__9dAcTbox_cFP7mVec3_cPfPf = .text:0x8026DAE0; // type:function size:0x28C
|
||||
fn_8026DD70__9dAcTbox_cFP7mVec3_cP7mVec3_c = .text:0x8026DD70; // type:function size:0x2DC
|
||||
getCylParams__9dAcTbox_cCFP7mVec3_cPfPf = .text:0x8026DAE0; // type:function size:0x28C
|
||||
getCCBounds__9dAcTbox_cCFP7mVec3_cP7mVec3_c = .text:0x8026DD70; // type:function size:0x2DC
|
||||
getInteractionTargetDef__9dAcTbox_cCFv = .text:0x8026E050; // type:function size:0x40
|
||||
fn_8026E090__9dAcTbox_cFv = .text:0x8026E090; // type:function size:0x594
|
||||
fn_8026E630__9dAcTbox_cFv = .text:0x8026E630; // type:function size:0x10C
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "toBeSorted/tlist.h"
|
||||
|
||||
class dAcBase_c;
|
||||
struct cBgS_PolyInfo;
|
||||
|
||||
struct SoundSource {
|
||||
// TODO
|
||||
@@ -255,7 +256,7 @@ public:
|
||||
/* 8002dd50 */ void FUN_8002dd50();
|
||||
/* 8002dd90 */ void FUN_8002dd90();
|
||||
/* 8002ddd0 */ void FUN_8002ddd0();
|
||||
/* 8002de30 */ void FUN_8002de30();
|
||||
/* 8002de30 */ void FUN_8002de30(cBgS_PolyInfo &p);
|
||||
|
||||
public:
|
||||
/* 80571920 */ static u32 s_Create_RoomId;
|
||||
|
||||
@@ -51,6 +51,8 @@ public:
|
||||
|
||||
void setTransform(const mMtx_c &mtx, UNKWORD, UNKWORD, UNKWORD);
|
||||
void setPosYRot(const mVec3_c &pos, mAng rot, UNKWORD, UNKWORD, UNKWORD);
|
||||
// argument is always false in existing code, true doesn't seem to make a difference
|
||||
void bonk(bool unk = false);
|
||||
|
||||
/* vt 0x080 */ virtual UNKWORD IfCurrentActionToActor(dAcBase_c *ac, UNKWORD);
|
||||
/* vt 0x084 */ virtual void vt_0x084(dAcBase_c *ac, UNKWORD);
|
||||
|
||||
@@ -116,13 +116,13 @@ private:
|
||||
void noUnregisterDowsing();
|
||||
|
||||
static bool fn_80268660(int arg);
|
||||
void fn_8026E090();
|
||||
bool checkForLinkBonk();
|
||||
void fn_8026E630();
|
||||
bool fn_8026D540();
|
||||
bool fn_8026D3C0();
|
||||
void syncScaleToMdl(m3d::scnLeaf_c *lf);
|
||||
void fn_8026DD70(mVec3_c *out1, mVec3_c *out2);
|
||||
void getCylParams(mVec3_c *out1, f32 *out2, f32 *out3);
|
||||
void getCCBounds(mVec3_c *out1, mVec3_c *out2) const;
|
||||
void getCylParams(mVec3_c *out1, f32 *out2, f32 *out3) const;
|
||||
void fn_8026DAD0(mVec3_c *src, mVec3_c *dest) const;
|
||||
void fn_8026DAC0(mAng& ang);
|
||||
|
||||
|
||||
@@ -613,6 +613,6 @@ void dAcBase_c::FUN_8002dd90() {
|
||||
void dAcBase_c::FUN_8002ddd0() {}
|
||||
|
||||
// 8002de30
|
||||
void dAcBase_c::FUN_8002de30() {
|
||||
void dAcBase_c::FUN_8002de30(cBgS_PolyInfo &p) {
|
||||
FUN_8002ddd0();
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
#include "d/a/d_a_itembase.h"
|
||||
#include "d/a/d_a_player.h"
|
||||
#include "d/col/bg/d_bg_s.h"
|
||||
#include "d/col/bg/d_bg_s_gnd_chk.h"
|
||||
#include "d/col/c/c_bg_s_poly_info.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "d/col/cc/d_cc_s.h"
|
||||
#include "d/flag/sceneflag_manager.h"
|
||||
@@ -19,6 +21,7 @@
|
||||
#include "nw4r/g3d/g3d_resanmtexsrt.h"
|
||||
#include "nw4r/g3d/g3d_resfile.h"
|
||||
#include "nw4r/g3d/g3d_resmdl.h"
|
||||
#include "rvl/MTX/mtxvec.h"
|
||||
#include "s/s_Math.h"
|
||||
#include "toBeSorted/arc_managers/oarc_manager.h"
|
||||
#include "toBeSorted/attention.h"
|
||||
@@ -911,7 +914,7 @@ int dAcTbox_c::create() {
|
||||
if (mItemId > MAX_ITEM_ID) {
|
||||
return FAILED;
|
||||
}
|
||||
mVariant = sItemToTBoxVariant[mItemId];
|
||||
mVariant = (TboxVariant_e)sItemToTBoxVariant[mItemId];
|
||||
if (mVariant == GODDESS) {
|
||||
setItemId((ITEM_ID)(MAX_ITEM_ID - mItemId));
|
||||
}
|
||||
@@ -1147,7 +1150,7 @@ int dAcTbox_c::actorExecute() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
fn_8026E090();
|
||||
checkForLinkBonk();
|
||||
fn_8026E630();
|
||||
mStateMgr.executeState();
|
||||
if (fn_8026D540()) {
|
||||
@@ -1160,7 +1163,7 @@ int dAcTbox_c::actorExecute() {
|
||||
mMdl1.getModel().calc(false);
|
||||
if ((field_0x11F4 & 2) != 0) {
|
||||
mVec3_c v1, v2;
|
||||
fn_8026DD70(&v1, &v2);
|
||||
getCCBounds(&v1, &v2);
|
||||
v1 *= field_0x11E8;
|
||||
v2 *= field_0x11E8;
|
||||
mCcD3.Set(v1, v2);
|
||||
@@ -1283,7 +1286,7 @@ int dAcTbox_c::actorExecuteInEvent() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
fn_8026E090();
|
||||
checkForLinkBonk();
|
||||
fn_8026E630();
|
||||
|
||||
switch (mEvent.getCurrentEventCommand()) {
|
||||
@@ -1346,7 +1349,7 @@ int dAcTbox_c::actorExecuteInEvent() {
|
||||
mMdl1.getModel().calc(false);
|
||||
if ((field_0x11F4 & 2) != 0) {
|
||||
mVec3_c v1, v2;
|
||||
fn_8026DD70(&v1, &v2);
|
||||
getCCBounds(&v1, &v2);
|
||||
v1 *= field_0x11E8;
|
||||
v2 *= field_0x11E8;
|
||||
mCcD3.Set(v1, v2);
|
||||
@@ -2017,6 +2020,177 @@ bool dAcTbox_c::checkIsClear() const {
|
||||
return isClear;
|
||||
}
|
||||
|
||||
void dAcTbox_c::getCylParams(mVec3_c *c, f32 *r, f32 *h) const {
|
||||
switch ((u32)mVariant) {
|
||||
case NORMAL:
|
||||
switch (field_0x120C) {
|
||||
case 0:
|
||||
if (c != nullptr) {
|
||||
c->set(0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
if (r != nullptr) {
|
||||
*r = 70.0f;
|
||||
}
|
||||
if (h != nullptr) {
|
||||
*h = 100.0f;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (c != nullptr) {
|
||||
c->set(0.0f, 0.0f, -24.0f);
|
||||
}
|
||||
if (r != nullptr) {
|
||||
*r = 86.0f;
|
||||
}
|
||||
if (h != nullptr) {
|
||||
*h = 140.0f;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SMALL:
|
||||
switch (field_0x120C) {
|
||||
case 0:
|
||||
if (c != nullptr) {
|
||||
c->set(0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
if (r != nullptr) {
|
||||
*r = 48.0f;
|
||||
}
|
||||
if (h != nullptr) {
|
||||
*h = 68.0f;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (c != nullptr) {
|
||||
c->set(0.0f, 0.0f, -14.0f);
|
||||
}
|
||||
if (r != nullptr) {
|
||||
*r = 60.0f;
|
||||
}
|
||||
if (h != nullptr) {
|
||||
*h = 100.0f;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case BOSS:
|
||||
switch (field_0x120C) {
|
||||
case 0:
|
||||
if (c != nullptr) {
|
||||
c->set(0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
if (r != nullptr) {
|
||||
*r = 100.0f;
|
||||
}
|
||||
if (h != nullptr) {
|
||||
*h = 132.0f;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (c != nullptr) {
|
||||
c->set(0.0f, 0.0f, -44.0f);
|
||||
}
|
||||
if (r != nullptr) {
|
||||
*r = 122.0f;
|
||||
}
|
||||
if (h != nullptr) {
|
||||
*h = 160.0f;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case GODDESS:
|
||||
switch (field_0x120C) {
|
||||
case 0:
|
||||
if (c != nullptr) {
|
||||
c->set(0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
if (r != nullptr) {
|
||||
*r = 73.0f;
|
||||
}
|
||||
if (h != nullptr) {
|
||||
*h = 100.0f;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (c != nullptr) {
|
||||
c->set(0.0f, 0.0f, -23.0f);
|
||||
}
|
||||
if (r != nullptr) {
|
||||
*r = 88.0f;
|
||||
}
|
||||
if (h != nullptr) {
|
||||
*h = 140.0f;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (c != nullptr) {
|
||||
PSMTXMultVec(mWorldMtx, *c, *c);
|
||||
}
|
||||
}
|
||||
|
||||
void dAcTbox_c::getCCBounds(mVec3_c *lo, mVec3_c *up) const {
|
||||
if (lo != nullptr) {
|
||||
switch ((u32)mVariant) {
|
||||
case NORMAL:
|
||||
switch (field_0x120C) {
|
||||
case 0: lo->set(-61.0f, 0.0f, -42.0f); break;
|
||||
case 1: lo->set(-61.0f, 0.0f, -90.0f); break;
|
||||
}
|
||||
break;
|
||||
case SMALL:
|
||||
switch (field_0x120C) {
|
||||
case 0: lo->set(-38.0f, 0.0f, -35.0f); break;
|
||||
case 1: lo->set(-38.0f, 0.0f, -68.0f); break;
|
||||
}
|
||||
break;
|
||||
case BOSS:
|
||||
switch (field_0x120C) {
|
||||
case 0: lo->set(-90.0f, 0.0f, -53.0f); break;
|
||||
case 1: lo->set(-90.0f, 0.0f, -135.0f); break;
|
||||
}
|
||||
break;
|
||||
case GODDESS:
|
||||
switch (field_0x120C) {
|
||||
case 0: lo->set(-62.0f, 0.0f, -47.0f); break;
|
||||
case 1: lo->set(-62.0f, 0.0f, -95.0f); break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (up != nullptr) {
|
||||
switch ((u32)mVariant) {
|
||||
case NORMAL:
|
||||
switch (field_0x120C) {
|
||||
case 0: up->set(61.0f, 100.0f, 42.0f); break;
|
||||
case 1: up->set(61.0f, 142.0f, 42.0f); break;
|
||||
}
|
||||
break;
|
||||
case SMALL:
|
||||
switch (field_0x120C) {
|
||||
case 0: up->set(38.0f, 68.0f, 35.0f); break;
|
||||
case 1: up->set(38.0f, 101.0f, 31.0f); break;
|
||||
}
|
||||
break;
|
||||
case BOSS:
|
||||
switch (field_0x120C) {
|
||||
case 0: up->set(90.0f, 133.0f, 56.0f); break;
|
||||
case 1: up->set(90.0f, 163.0f, 56.0f); break;
|
||||
}
|
||||
break;
|
||||
case GODDESS:
|
||||
switch (field_0x120C) {
|
||||
case 0: up->set(62.0f, 100.0f, 47.0f); break;
|
||||
case 1: up->set(62.0f, 140.0f, 47.0f); break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const InteractionTargetDef &dAcTbox_c::getInteractionTargetDef() const {
|
||||
switch ((u32)mVariant) {
|
||||
case NORMAL:
|
||||
@@ -2042,3 +2216,63 @@ const InteractionTargetDef &dAcTbox_c::getInteractionTargetDef() const {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool dAcTbox_c::checkForLinkBonk() {
|
||||
if (!mCcD4.ChkCoHit()) {
|
||||
return false;
|
||||
}
|
||||
dAcPy_c *link = dAcPy_c::LINK;
|
||||
if (link == nullptr) {
|
||||
return false;
|
||||
}
|
||||
if (link->getCurrentAction() != /* ROLL */ 12) {
|
||||
return false;
|
||||
}
|
||||
|
||||
mVec3_c linkPos;
|
||||
PSMTXMultVec(mCcD3.mInvMtx, link->position, linkPos);
|
||||
mVec3_c ccLo, ccHi;
|
||||
getCCBounds(&ccLo, &ccHi);
|
||||
// Math performed in local coordinate space
|
||||
// All of this is wrong
|
||||
if (!(ccLo.y <= linkPos.y + 100.0f && linkPos.y <= ccHi.y)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool bonk = false;
|
||||
bonk = bonk || (ccLo.x <= linkPos.x && linkPos.x <= ccHi.x) &&
|
||||
(ccLo.z - 80.0f <= linkPos.z && linkPos.z <= ccHi.z + 80.0f);
|
||||
bonk = bonk || (ccLo.z <= linkPos.z && linkPos.z <= ccHi.z) &&
|
||||
(ccLo.x - 80.0f <= linkPos.x && linkPos.x <= ccHi.x + 80.0f);
|
||||
bonk = bonk || (linkPos.x < ccLo.x && linkPos.z < ccLo.z) && (linkPos.inprodXZ(ccLo) <= 6400.0f);
|
||||
bonk = bonk || (ccHi.x < linkPos.x && ccHi.z < linkPos.z) && (linkPos.inprodXZ(ccLo) <= 6400.0f);
|
||||
bonk = bonk || (linkPos.x < ccLo.x && ccLo.z < linkPos.z) && (linkPos.inprodXZ(ccLo) <= 6400.0f);
|
||||
bonk = bonk || (ccHi.x < linkPos.x && linkPos.z < ccHi.z) && (linkPos.inprodXZ(ccLo) <= 6400.0f);
|
||||
|
||||
if (!bonk) {
|
||||
return false;
|
||||
}
|
||||
|
||||
int direction = 0;
|
||||
mVec3_c diff = mVec3_c(linkPos.x - mCcD3.mField_0xA8.x, 0.0f, linkPos.z - mCcD3.mField_0xA8.z);
|
||||
if (VEC3LenSq(diff) <= FLT_EPSILON) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// TODO
|
||||
|
||||
link->bonk();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void dAcTbox_c::fn_8026E630() {
|
||||
mVec3_c offset = mVec3_c::Ey * 10.0f;
|
||||
mVec3_c checkPos = position + offset;
|
||||
// TODO reference vs pointer
|
||||
if (dBgS_ObjGndChk::CheckPos(checkPos) && &dBgS_ObjGndChk::GetInstance()) {
|
||||
cBgS_PolyInfo p = dBgS_ObjGndChk::GetInstance();
|
||||
dBgS::GetInstance()->SetLightingCode(this, p);
|
||||
FUN_8002de30(p);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user