mirror of
https://github.com/zeldaret/ss
synced 2026-05-30 00:46:41 -04:00
a bit of d_a_insect
This commit is contained in:
@@ -547,6 +547,11 @@ d/lyt/d_screen_fader.cpp:
|
||||
.data start:0x80528D68 end:0x80528D90
|
||||
.sdata2 start:0x8057ABE0 end:0x8057AC08
|
||||
|
||||
d/a/d_a_insect.cpp:
|
||||
.text start:0x8018F190 end:0x80190710
|
||||
.data start:0x8052ABD8 end:0x8052ACC0
|
||||
.sdata2 start:0x8057ADD8 end:0x8057AE30
|
||||
|
||||
d/d_cs_base.cpp:
|
||||
.text start:0x801BC6C0 end:0x801BD250
|
||||
.data start:0x8052E860 end:0x8052E968
|
||||
|
||||
+26
-25
@@ -10222,38 +10222,38 @@ fn_8018EBE0 = .text:0x8018EBE0; // type:function size:0x38
|
||||
fn_8018EC20 = .text:0x8018EC20; // type:function size:0x2C
|
||||
fn_8018EC50 = .text:0x8018EC50; // type:function size:0x538
|
||||
fn_8018F190 = .text:0x8018F190; // type:function size:0x60
|
||||
fn_8018F1F0 = .text:0x8018F1F0; // type:function size:0xAC
|
||||
checkForLinkScare__12dAcOInsect_cFv = .text:0x8018F1F0; // type:function size:0xAC
|
||||
fn_8018F2A0 = .text:0x8018F2A0; // type:function size:0xA0
|
||||
fn_8018F340 = .text:0x8018F340; // type:function size:0x4C
|
||||
fn_8018F390 = .text:0x8018F390; // type:function size:0x50
|
||||
fn_8018F3E0 = .text:0x8018F3E0; // type:function size:0x40
|
||||
fn_8018F420 = .text:0x8018F420; // type:function size:0x38
|
||||
fn_8018F460 = .text:0x8018F460; // type:function size:0xD8
|
||||
fn_8018F540 = .text:0x8018F540; // type:function size:0x8
|
||||
fn_8018F550 = .text:0x8018F550; // type:function size:0xD4
|
||||
fn_8018F630 = .text:0x8018F630; // type:function size:0xB8
|
||||
fn_8018F6F0 = .text:0x8018F6F0; // type:function size:0x4
|
||||
fn_8018F700 = .text:0x8018F700; // type:function size:0x8
|
||||
fn_8018F710 = .text:0x8018F710; // type:function size:0x30
|
||||
fn_8018F740 = .text:0x8018F740; // type:function size:0x84
|
||||
fn_8018F7D0 = .text:0x8018F7D0; // type:function size:0x8
|
||||
fn_8018F7E0 = .text:0x8018F7E0; // type:function size:0x8
|
||||
fn_8018F7F0 = .text:0x8018F7F0; // type:function size:0xA8
|
||||
fn_8018F8A0 = .text:0x8018F8A0; // type:function size:0x8
|
||||
isLinkUsingBugNet__12dAcOInsect_cFv = .text:0x8018F340; // type:function size:0x4C
|
||||
getLinkSpeedLevel__12dAcOInsect_cFv = .text:0x8018F390; // type:function size:0x50
|
||||
isLinkNearby__12dAcOInsect_cFf = .text:0x8018F3E0; // type:function size:0x40
|
||||
isLinkNearbyZ__12dAcOInsect_cFf = .text:0x8018F420; // type:function size:0x38
|
||||
someBaseFunction__12dAcOInsect_cFv = .text:0x8018F460; // type:function size:0xD8
|
||||
dAcOInsect_0x8C__12dAcOInsect_cFv = .text:0x8018F540; // type:function size:0x8
|
||||
someBaseFunction0__12dAcOInsect_cFv = .text:0x8018F550; // type:function size:0xD4
|
||||
addAttentionTarget__12dAcOInsect_cFv = .text:0x8018F630; // type:function size:0xB8
|
||||
shouldAddAttentionTarget__12dAcOInsect_cFv = .text:0x8018F6F0; // type:function size:0x4
|
||||
getAttentionField__12dAcOInsect_cFv = .text:0x8018F700; // type:function size:0x8
|
||||
preAttention__12dAcOInsect_cFv = .text:0x8018F710; // type:function size:0x30
|
||||
dAcOInsect_0x80__12dAcOInsect_cFv = .text:0x8018F740; // type:function size:0x84
|
||||
dAcOInsect_0x84__12dAcOInsect_cFv = .text:0x8018F7D0; // type:function size:0x8
|
||||
dAcOInsect_0x88__12dAcOInsect_cFv = .text:0x8018F7E0; // type:function size:0x8
|
||||
isLinkCloseAndFlag__12dAcOInsect_cFv = .text:0x8018F7F0; // type:function size:0xA8
|
||||
dAcOInsect_0x94__12dAcOInsect_cFv = .text:0x8018F8A0; // type:function size:0x8
|
||||
fn_8018F8B0 = .text:0x8018F8B0; // type:function size:0x14C
|
||||
fn_8018FA00 = .text:0x8018FA00; // type:function size:0x7C
|
||||
fn_8018FA80 = .text:0x8018FA80; // type:function size:0x18
|
||||
fn_8018FAA0 = .text:0x8018FAA0; // type:function size:0x28
|
||||
resetScale__12dAcOInsect_cFv = .text:0x8018FA80; // type:function size:0x18
|
||||
fn_8018FAA0__12dAcOInsect_cFv = .text:0x8018FAA0; // type:function size:0x28
|
||||
fn_8018FAD0 = .text:0x8018FAD0; // type:function size:0x314
|
||||
fn_8018FDF0 = .text:0x8018FDF0; // type:function size:0x2C0
|
||||
fn_801900B0 = .text:0x801900B0; // type:function size:0xD0
|
||||
fn_80190180 = .text:0x80190180; // type:function size:0x2C0
|
||||
fn_80190180__12dAcOInsect_cFR4mAng = .text:0x80190180; // type:function size:0x2C0
|
||||
fn_80190440 = .text:0x80190440; // type:function size:0x1D0
|
||||
fn_80190610 = .text:0x80190610; // type:function size:0x2C
|
||||
fn_80190640 = .text:0x80190640; // type:function size:0x4
|
||||
fn_80190650 = .text:0x80190650; // type:function size:0x4
|
||||
fn_80190660 = .text:0x80190660; // type:function size:0x8
|
||||
fn_80190670 = .text:0x80190670; // type:function size:0xA0
|
||||
dAcOInsect_0xAC__12dAcOInsect_cFv = .text:0x80190640; // type:function size:0x4
|
||||
dAcOInsect_0xA8__12dAcOInsect_cFv = .text:0x80190650; // type:function size:0x4
|
||||
dAcOInsect_0xA4__12dAcOInsect_cFv = .text:0x80190660; // type:function size:0x8
|
||||
__dt__12dAcOInsect_cFv = .text:0x80190670; // type:function size:0xA0
|
||||
fn_80190710 = .text:0x80190710; // type:function size:0x14
|
||||
fn_80190730 = .text:0x80190730; // type:function size:0x48
|
||||
fn_80190780 = .text:0x80190780; // type:function size:0x40
|
||||
@@ -33803,7 +33803,8 @@ lbl_8052A890 = .data:0x8052A890; // type:object size:0xC8
|
||||
lbl_8052A958 = .data:0x8052A958; // type:object size:0x68
|
||||
lbl_8052A9C0 = .data:0x8052A9C0; // type:object size:0x1AC
|
||||
lbl_8052AB6C = .data:0x8052AB6C; // type:object size:0x6C
|
||||
lbl_8052ABD8 = .data:0x8052ABD8; // type:object size:0xE8
|
||||
@LOCAL@addAttentionTarget__12dAcOInsect_cFv@tmpTarget = .data:0x8052ABD8; // type:object size:0x30 scope:local
|
||||
__vt__12dAcOInsect_c = .data:0x8052AC08; // type:object size:0xB4
|
||||
lbl_8052ACC0 = .data:0x8052ACC0; // type:object size:0x10
|
||||
lbl_8052ACD0 = .data:0x8052ACD0; // type:object size:0x340
|
||||
lbl_8052B010 = .data:0x8052B010; // type:object size:0x34
|
||||
|
||||
@@ -413,6 +413,7 @@ config.libs = [
|
||||
Object(NonMatching, "d/lyt/d_lyt_pause_disp_00.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_fader.cpp"),
|
||||
Object(Matching, "d/lyt/d_screen_fader.cpp"),
|
||||
Object(NonMatching, "d/a/d_a_insect.cpp"),
|
||||
Object(NonMatching, "d/d_cs_base.cpp"),
|
||||
Object(NonMatching, "d/d_cs_game.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_common_arrow.cpp"),
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_vec.h"
|
||||
|
||||
class dAcOInsect_c : public dAcObjBase_c {
|
||||
public:
|
||||
dAcOInsect_c() {}
|
||||
virtual ~dAcOInsect_c() {}
|
||||
|
||||
/* 0x80 */ virtual f32 dAcOInsect_0x80();
|
||||
/* 0x84 */ virtual f32 dAcOInsect_0x84() {
|
||||
return 0.0f;
|
||||
}
|
||||
/* 0x88 */ virtual f32 dAcOInsect_0x88() {
|
||||
return 0.0f;
|
||||
}
|
||||
/* 0x8C */ virtual f32 dAcOInsect_0x8C() {
|
||||
return 0.0f;
|
||||
}
|
||||
/* 0x90 */ virtual f32 getAttentionField() {
|
||||
return 0.0f;
|
||||
}
|
||||
/* 0x94 */ virtual f32 dAcOInsect_0x94() {
|
||||
return 0.0f;
|
||||
}
|
||||
/* 0x98 */ virtual bool shouldAddAttentionTarget() {
|
||||
return isLinkUsingBugNet();
|
||||
}
|
||||
/* 0x9C */ virtual void addAttentionTarget();
|
||||
/* 0xA0 */ virtual void preAttention();
|
||||
/* 0xA4 */ virtual s32 dAcOInsect_0xA4() {
|
||||
return 0;
|
||||
}
|
||||
/* 0xA8 */ virtual bool dAcOInsect_0xA8() {
|
||||
return checkForLinkScare();
|
||||
}
|
||||
/* 0xAC */ virtual void dAcOInsect_0xAC() {}
|
||||
/* 0xB0 */ virtual void dAcOInsect_0xB0();
|
||||
|
||||
protected:
|
||||
void goPoof();
|
||||
bool isLinkNearby(f32 radius);
|
||||
bool isLinkNearbyZ(f32 distance);
|
||||
void someBaseFunction();
|
||||
bool someBaseFunction0();
|
||||
bool checkForLinkScare();
|
||||
bool isLinkCloseAndFlag();
|
||||
s32 getLinkSpeedLevel();
|
||||
static bool isLinkUsingBugNet();
|
||||
bool resetScale();
|
||||
bool fn_8018FAA0();
|
||||
bool fn_80190180(mAng &outAng);
|
||||
|
||||
private:
|
||||
/* 0x330 */ s32 field_0x330;
|
||||
/* 0x334 */ u8 field_0x334;
|
||||
/* 0x335 */ u8 field_0x335;
|
||||
/* 0x338 */ u32 field_0x338;
|
||||
/* 0x33C */ mVec3_c field_0x33C;
|
||||
/* 0x348 */ u8 field_0x348[0x35C - 0x348];
|
||||
/* 0x35C */ f32 field_0x35C;
|
||||
/* 0x360 */ u8 field_0x360[0x3BE - 0x360];
|
||||
/* 0x3BE */ u8 field_0x3BE;
|
||||
/* 0x3BF */ u8 field_0x3BF;
|
||||
/* 0x3C0 */ mMtx_c field_0x3C0;
|
||||
/* 0x3F0 */ u8 field_0x3F0[0x3F8 - 0x3F0];
|
||||
/* 0x3F8 */ u32 mLinkNearby;
|
||||
/* 0x3FC */ dAcRef_c<dAcBase_c> field_0x3FC;
|
||||
/* 0x408 */ u8 field_0x408[0x40D - 0x408];
|
||||
/* 0x40D */ u8 field_0x40D;
|
||||
/* 0x410 */ mVec3_c field_0x410[3];
|
||||
/* 0x434 */ mVec3_c field_0x434[3];
|
||||
/* 0x458 */ u8 field_0x458[0x45C - 0x458];
|
||||
/* 0x45C */ mVec3_c field_0x45C;
|
||||
};
|
||||
@@ -178,7 +178,7 @@ public:
|
||||
/* vt 0x280 */ virtual void vt_0x280();
|
||||
/* vt 0x284 */ virtual bool isUsingBugnet() const;
|
||||
/* vt 0x288 */ virtual const mVec3_c &getBugNetPos() const;
|
||||
/* vt 0x28C */ virtual void isUsingBugnet1();
|
||||
/* vt 0x28C */ virtual bool isUsingBugnet1();
|
||||
/* vt 0x290 */ virtual void bugNetCollectTreasure();
|
||||
/* vt 0x294 */ virtual void somethingSwitchDials();
|
||||
/* vt 0x298 */ virtual void vt_0x298();
|
||||
|
||||
@@ -0,0 +1,223 @@
|
||||
#include "d/a/d_a_insect.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/d_a_player.h"
|
||||
#include "egg/math/eggMath.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "rvl/MTX/mtxvec.h"
|
||||
#include "toBeSorted/attention.h"
|
||||
|
||||
void AcOInsectFloats() {
|
||||
50.0f;
|
||||
1.0f;
|
||||
30.0f;
|
||||
5000.0f;
|
||||
0.1f;
|
||||
10.0f;
|
||||
500.0f;
|
||||
0.0f;
|
||||
400.0f;
|
||||
-200.0f;
|
||||
200.0f;
|
||||
20.0f;
|
||||
EGG::Math<f32>::epsilon();
|
||||
5.0f;
|
||||
-5.0f;
|
||||
0.99f;
|
||||
int x = 0;
|
||||
(f32) x;
|
||||
}
|
||||
|
||||
void AcOInsectFloats2() {
|
||||
-1.0f;
|
||||
0.5f;
|
||||
2250000.0f;
|
||||
}
|
||||
|
||||
bool dAcOInsect_c::checkForLinkScare() {
|
||||
if (dAcPy_c::LINK != nullptr) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool dAcOInsect_c::isLinkUsingBugNet() {
|
||||
if (dAcPy_c::LINK != nullptr && !dAcPy_c::LINK->isUsingBugnet()) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
s32 dAcOInsect_c::getLinkSpeedLevel() {
|
||||
if (dAcPy_c::LINK != nullptr) {
|
||||
f32 speed = fabsf(dAcPy_c::LINK->forwardSpeed);
|
||||
if (speed < 0.1f) {
|
||||
return 0;
|
||||
} else if (speed < 10.0f) {
|
||||
return 1;
|
||||
} else {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
return 3;
|
||||
}
|
||||
|
||||
bool dAcOInsect_c::isLinkNearby(f32 rad) {
|
||||
if (dAcPy_c::LINK != nullptr && isWithinPlayerRadius(rad)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool dAcOInsect_c::isLinkNearbyZ(f32 dist) {
|
||||
if (dAcPy_c::LINK != nullptr && fabsf(dAcPy_c::LINK->position.y - position.y) > dist) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void dAcOInsect_c::someBaseFunction() {
|
||||
dAcPy_c *link = dAcPy_c::LINK;
|
||||
if (link != nullptr) {
|
||||
if (isLinkNearbyZ(500.0f) && isLinkNearby(dAcOInsect_0x8C())) {
|
||||
field_0x335 = field_0x334;
|
||||
field_0x334 = link->isUsingBugnet1();
|
||||
if (link->isUsingBugnet1()) {
|
||||
field_0x330++;
|
||||
return;
|
||||
}
|
||||
field_0x330 = 0;
|
||||
return;
|
||||
} else {
|
||||
field_0x334 = 0;
|
||||
field_0x335 = 0;
|
||||
field_0x330 = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool dAcOInsect_c::someBaseFunction0() {
|
||||
f32 rad = dAcOInsect_0x80();
|
||||
if (isLinkNearbyZ(500.0f) && isLinkNearby(rad)) {
|
||||
field_0x338 = 1;
|
||||
return true;
|
||||
}
|
||||
bool b = (field_0x335 != 0 && field_0x334 == 0) || field_0x330 > 3;
|
||||
if (b) {
|
||||
field_0x338 = 2;
|
||||
return true;
|
||||
} else {
|
||||
field_0x338 = 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOInsect_c::addAttentionTarget() {
|
||||
preAttention();
|
||||
static InteractionTargetDef tmpTarget = {1, 0, 0, UNK_18, 0x2, 150.0f, 0.0f, 0.0f, -300.0f, 100.0f, 50.0f, 1.0f};
|
||||
if (shouldAddAttentionTarget()) {
|
||||
AttentionManager *attn = AttentionManager::sInstance;
|
||||
if (attn != nullptr) {
|
||||
attn->addCatchTarget(*this, 0x1, 400.0f, -200.0f, 200.0f);
|
||||
tmpTarget.field_0x14 = getAttentionField();
|
||||
attn->addTarget(*this, tmpTarget, 0, nullptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOInsect_c::preAttention() {
|
||||
// It's always the simplest vector functions that cause problems
|
||||
poscopy2 = position;
|
||||
f32 y = position.y;
|
||||
y += 20.0f;
|
||||
poscopy2.y = y;
|
||||
poscopy3 = poscopy2;
|
||||
}
|
||||
|
||||
f32 dAcOInsect_c::dAcOInsect_0x80() {
|
||||
switch (getLinkSpeedLevel()) {
|
||||
case 1: return dAcOInsect_0x84();
|
||||
case 2: return dAcOInsect_0x88();
|
||||
default: return dAcOInsect_0x84();
|
||||
}
|
||||
}
|
||||
|
||||
bool dAcOInsect_c::isLinkCloseAndFlag() {
|
||||
dAcPy_c *link = dAcPy_c::LINK;
|
||||
if (link != nullptr && link->checkFlags0x350(0x2000)) {
|
||||
f32 d = dAcOInsect_0x94();
|
||||
return getSquareDistanceTo(link->position) < d;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool dAcOInsect_c::resetScale() {
|
||||
mScale.set(1.0f, 1.0f, 1.0f);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dAcOInsect_c::fn_8018FAA0() {
|
||||
if (field_0x3FC.get() != 0 && field_0x40D == 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Looks like it decides on a direction and angle based on a target point?
|
||||
bool dAcOInsect_c::fn_80190180(mAng &outAng) {
|
||||
// Stack and reg problems
|
||||
mVec3_c vecs[4];
|
||||
vecs[0].set(1.0f, 0.0f, 1.0f);
|
||||
vecs[1].set(1.0f, 0.0f, -1.0f);
|
||||
vecs[2].set(-1.0f, 0.0f, -1.0f);
|
||||
vecs[3].set(-1.0f, 0.0f, 1.0f);
|
||||
|
||||
int i3 = -1;
|
||||
|
||||
s16 angs[4];
|
||||
angs[0] = 0x2000;
|
||||
angs[1] = 0x6000;
|
||||
angs[2] = 0xA000;
|
||||
angs[3] = 0xE000;
|
||||
|
||||
if (field_0x3BF != 0) {
|
||||
f32 len = fabsf(field_0x33C.y + field_0x35C * 0.5f - position.y);
|
||||
for (int i = 0; i < 4; i++) {
|
||||
mVec3_c tmp = vecs[i] * 20.0f;
|
||||
// ???
|
||||
mVec3_c tmp2 = tmp;
|
||||
PSMTXMultVec(field_0x3C0, tmp2, tmp2);
|
||||
f32 len2 = fabsf(field_0x33C.y + field_0x35C * 0.5f - tmp2.y);
|
||||
if (len > len2) {
|
||||
len = len2;
|
||||
i3 = i;
|
||||
}
|
||||
}
|
||||
} else if (field_0x3BE != 0) {
|
||||
mVec3_c dir = field_0x33C - position;
|
||||
f32 len = dir.x * dir.x + dir.z * dir.z;
|
||||
for (int i = 0; i < 4; i++) {
|
||||
mVec3_c tmp = vecs[i] * 20.0f;
|
||||
// ???
|
||||
mVec3_c tmp2 = tmp;
|
||||
PSMTXMultVec(field_0x3C0, tmp2, tmp2);
|
||||
mVec3_c dir2 = field_0x33C - tmp2;
|
||||
f32 len2 = dir2.x * dir2.x + dir2.z * dir2.z;
|
||||
if (len > len2) {
|
||||
len = len2;
|
||||
i3 = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (i3 >= 0) {
|
||||
outAng = angs[i3];
|
||||
field_0x45C = vecs[i3];
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
Reference in New Issue
Block a user