From ee1138699e826ebf5421eb31020264b3ac245c24 Mon Sep 17 00:00:00 2001 From: Sebastian Snoer Date: Mon, 26 May 2025 15:16:59 +0200 Subject: [PATCH 1/7] Mostly missing the correct sphere data --- .../rels/d_a_obj_tarzan_poleNP/symbols.txt | 6 +- include/d/a/obj/d_a_obj_tarzan_pole.h | 21 ++++ src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp | 105 ++++++++++++++++++ 3 files changed, 129 insertions(+), 3 deletions(-) diff --git a/config/SOUE01/rels/d_a_obj_tarzan_poleNP/symbols.txt b/config/SOUE01/rels/d_a_obj_tarzan_poleNP/symbols.txt index 11aba61c..bf3434b5 100644 --- a/config/SOUE01/rels/d_a_obj_tarzan_poleNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_tarzan_poleNP/symbols.txt @@ -2,11 +2,11 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global _epilog = .text:0x00000030; // type:function size:0x2C scope:global _unresolved = .text:0x00000060; // type:function size:0x4 scope:global dAcOTarzanPole_c_classInit__Fv = .text:0x00000070; // type:function size:0x6C -AcOTarzanPole__initModels = .text:0x000000E0; // type:function size:0xCC -AcOTarzanPole__init = .text:0x000001B0; // type:function size:0x16C +createHeap__16dAcOTarzanPole_cFv = .text:0x000000E0; // type:function size:0xCC +create__16dAcOTarzanPole_cFv = .text:0x000001B0; // type:function size:0x16C fn_288_320 = .text:0x00000320; // type:function size:0x8 AcOTarzanPole__update = .text:0x00000330; // type:function size:0x224 -AcOTarzanPole__draw = .text:0x00000560; // type:function size:0x28 +draw__16dAcOTarzanPole_cFv = .text:0x00000560; // type:function size:0x28 __dt__16dAcOTarzanPole_cFv = .text:0x00000590; // type:function size:0x80 _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global diff --git a/include/d/a/obj/d_a_obj_tarzan_pole.h b/include/d/a/obj/d_a_obj_tarzan_pole.h index 419133c6..795c533e 100644 --- a/include/d/a/obj/d_a_obj_tarzan_pole.h +++ b/include/d/a/obj/d_a_obj_tarzan_pole.h @@ -1,14 +1,35 @@ #ifndef D_A_OBJ_TARZAN_POLE_H #define D_A_OBJ_TARZAN_POLE_H +#include "UnknownTypeBelongings.h" #include "d/a/obj/d_a_obj_base.h" +#include "d/col/bg/d_bg_w.h" +#include "d/col/cc/d_cc_d.h" +#include "m/m3d/m_smdl.h" +#include "m/m_vec.h" +#include "nw4r/g3d/res/g3d_resfile.h" class dAcOTarzanPole_c : public dAcObjBase_c { public: dAcOTarzanPole_c() {} virtual ~dAcOTarzanPole_c() {} + virtual bool createHeap() override; + virtual int create() override; + virtual int doDelete() override; + virtual int actorExecute() override; + virtual int preDraw() override; + virtual int draw() override; + private: + static dCcD_SrcSph sCcSrc; + + /* 0x330 */ nw4r::g3d::ResFile mBrres; + /* 0x334 */ m3d::smdl_c mMdl; + /* 0x350 */ dBgW mBgCollider; + /* 0x560 */ dCcD_Sph mCollider; + /* 0x6b0 */ mVec3_c mVec; + /* 0x6bc */ float mFloat; }; #endif diff --git a/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp b/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp index 58868832..c8e23740 100644 --- a/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp +++ b/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp @@ -1,3 +1,108 @@ #include "d/a/obj/d_a_obj_tarzan_pole.h" +#include "d/a/d_a_base.h" +#include "d/a/d_a_item.h" +#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/cc/d_cc_d.h" +#include "d/col/cc/d_cc_s.h" +#include "f/f_base.h" +#include "nw4r/g3d/res/g3d_resmdl.h" +#include "toBeSorted/attention.h" + SPECIAL_ACTOR_PROFILE(OBJ_TARZAN_POLE, dAcOTarzanPole_c, fProfile::OBJ_TARZAN_POLE, 0x235, 0, 3); + +// clang-format off +// TODO: FIX: INCORRECT DATA! +dCcD_SrcSph dAcOTarzanPole_c::sCcSrc = { + /* mObjInf */ { + /* mObjAt */ {0,0,0,0,0,0,0,0}, + /* mObjTg */ {~(AT_TYPE_BUGNET | AT_TYPE_0x80000 | AT_TYPE_0x8000), 0x801111, {0, 0xA, 0x40F}, 8, 0}, + /* mObjCo */ {0x1E9}}, + /* mSphInf */ {10.0f} +}; +// clang-format on + +bool dAcOTarzanPole_c::createHeap() { + // Get Res File + void *resFile = getOarcResFile("WhipBar"); + mBrres = nw4r::g3d::ResFile(resFile); + + // Create model + nw4r::g3d::ResMdl resMdl = mBrres.GetResMdl("WhipBar"); + TRY_CREATE(mMdl.create(resMdl, &heap_allocator, 0x120, 1, nullptr)); + + // Load Collider + void *dzb = getOarcDZB("WhipBar", "WhipBar"); + void *plc = getOarcPLC("WhipBar", "WhipBar"); + updateMatrix(); + if (mBgCollider.Set((cBgD_t *)dzb, (PLC *)plc, 1, &mWorldMtx, &mScale)) { + return false; + } + + return true; +} + +int dAcOTarzanPole_c::create() { + if (!initAllocatorWork1Heap(0xFFFFFFFF, "dAcOTarzanPole_c::m_allocator", 0x20)) { + return FAILED; + } + + dBgS::GetInstance()->Regist(&mBgCollider, this); + + mStts.SetRank(1); + mCollider.Set(sCcSrc); + mCollider.SetStts(mStts); + + forwardAccel = 0; + forwardMaxSpeed = -40; + + mFloat = (double)params; + + mVec = mVec3_c::Ex * 400; + mVec.rotY(rotation.y); + boundingBox.Set(mVec3_c(-0, -120, -110), mVec3_c(500, 140, 110)); + + return SUCCEEDED; +} + +int dAcOTarzanPole_c::doDelete() { + return SUCCEEDED; +} + +int dAcOTarzanPole_c::actorExecute() { + // Update matrix + updateMatrix(); + mMdl.setLocalMtx(mWorldMtx); + mMdl.calc(false); + + // IDK Player? + dAcPy_c *player = dAcPy_c::LINK; + bool bVar = false; + if (mCollider.mTg.MskRPrm(1) && mCollider.mTg.GetActor() != nullptr) { + bVar = true; + } + if (bVar && mCollider.ChkTgAtHitType(0x800)) { + mObjectActorFlags = mObjectActorFlags | 0x1000; + } + + mVec = mVec3_c::Ex * 320.0f + mVec3_c::Ey * 0; + mVec.rotY(rotation.y); + poscopy2 = position + mVec; + poscopy3 = poscopy2 + mVec3_c::Ey * 20; + + if (player != nullptr && !player->checkActionFlags(0x400000) && dAcItem_c::checkFlag(ITEM_WHIP)) { + AttentionManager::GetInstance()->addUnk7Target((dAcObjBase_c &)*this, 1000, 0, 10, -600.0, 200); + } + + mCollider.SetC(poscopy2); + + dCcS::GetInstance()->Set(&mCollider); + return SUCCEEDED; +} + +int dAcOTarzanPole_c::draw() { + drawModelType1(&mMdl); + return SUCCEEDED; +} From a3b8fb9023269ab7e92276268677e474727303d2 Mon Sep 17 00:00:00 2001 From: Sebastian Snoer Date: Mon, 26 May 2025 17:22:10 +0200 Subject: [PATCH 2/7] Only missing mapped data --- .../SOUE01/rels/d_a_obj_tarzan_poleNP/symbols.txt | 12 ++++++------ include/d/a/obj/d_a_obj_tarzan_pole.h | 6 ++---- src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp | 13 ++++++++----- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/config/SOUE01/rels/d_a_obj_tarzan_poleNP/symbols.txt b/config/SOUE01/rels/d_a_obj_tarzan_poleNP/symbols.txt index bf3434b5..287711d0 100644 --- a/config/SOUE01/rels/d_a_obj_tarzan_poleNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_tarzan_poleNP/symbols.txt @@ -4,15 +4,15 @@ _unresolved = .text:0x00000060; // type:function size:0x4 scope:global dAcOTarzanPole_c_classInit__Fv = .text:0x00000070; // type:function size:0x6C createHeap__16dAcOTarzanPole_cFv = .text:0x000000E0; // type:function size:0xCC create__16dAcOTarzanPole_cFv = .text:0x000001B0; // type:function size:0x16C -fn_288_320 = .text:0x00000320; // type:function size:0x8 -AcOTarzanPole__update = .text:0x00000330; // type:function size:0x224 +doDelete__16dAcOTarzanPole_cFv = .text:0x00000320; // type:function size:0x8 +actorExecute__16dAcOTarzanPole_cFv = .text:0x00000330; // type:function size:0x224 draw__16dAcOTarzanPole_cFv = .text:0x00000560; // type:function size:0x28 __dt__16dAcOTarzanPole_cFv = .text:0x00000590; // type:function size:0x80 _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global lbl_288_rodata_0 = .rodata:0x00000000; // type:object size:0x4C data:float g_profile_OBJ_TARZAN_POLE = .data:0x00000000; // type:object size:0x10 -lbl_288_data_10 = .data:0x00000010; // type:object size:0x30 -lbl_288_data_40 = .data:0x00000040; // type:object size:0x8 data:string -lbl_288_data_48 = .data:0x00000048; // type:object size:0x20 -AcOTarzanPole__vtable = .data:0x00000068; // type:object size:0x80 +sCcSrc__16dAcOTarzanPole_c = .data:0x00000010; // type:object size:0x30 +@23333 = .data:0x00000040; // type:object size:0x8 scope:local data:string +@23358 = .data:0x00000048; // type:object size:0x20 scope:local +__vt__16dAcOTarzanPole_c = .data:0x00000068; // type:object size:0x80 diff --git a/include/d/a/obj/d_a_obj_tarzan_pole.h b/include/d/a/obj/d_a_obj_tarzan_pole.h index 795c533e..ec9754d8 100644 --- a/include/d/a/obj/d_a_obj_tarzan_pole.h +++ b/include/d/a/obj/d_a_obj_tarzan_pole.h @@ -1,7 +1,6 @@ #ifndef D_A_OBJ_TARZAN_POLE_H #define D_A_OBJ_TARZAN_POLE_H -#include "UnknownTypeBelongings.h" #include "d/a/obj/d_a_obj_base.h" #include "d/col/bg/d_bg_w.h" #include "d/col/cc/d_cc_d.h" @@ -18,7 +17,6 @@ public: virtual int create() override; virtual int doDelete() override; virtual int actorExecute() override; - virtual int preDraw() override; virtual int draw() override; private: @@ -28,8 +26,8 @@ private: /* 0x334 */ m3d::smdl_c mMdl; /* 0x350 */ dBgW mBgCollider; /* 0x560 */ dCcD_Sph mCollider; - /* 0x6b0 */ mVec3_c mVec; - /* 0x6bc */ float mFloat; + /* 0x6b0 */ mVec3_c mVec; // TODO: Find better name, and figure out it's purpose + /* 0x6bc */ float mFloat; // TODO: No usage found yet }; #endif diff --git a/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp b/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp index c8e23740..042916fb 100644 --- a/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp +++ b/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp @@ -17,9 +17,9 @@ SPECIAL_ACTOR_PROFILE(OBJ_TARZAN_POLE, dAcOTarzanPole_c, fProfile::OBJ_TARZAN_PO // TODO: FIX: INCORRECT DATA! dCcD_SrcSph dAcOTarzanPole_c::sCcSrc = { /* mObjInf */ { - /* mObjAt */ {0,0,0,0,0,0,0,0}, - /* mObjTg */ {~(AT_TYPE_BUGNET | AT_TYPE_0x80000 | AT_TYPE_0x8000), 0x801111, {0, 0xA, 0x40F}, 8, 0}, - /* mObjCo */ {0x1E9}}, + /* mObjAt */ {0, 0, {0, 0, 0}, 0, 0, 0, 0, 0, 0}, + /* mObjTg */ {0xA00, 0x800311, {0, 0, 0x407}, 0x0000, 0x0000}, + /* mObjCo */ {0x00000000}}, /* mSphInf */ {10.0f} }; // clang-format on @@ -58,11 +58,14 @@ int dAcOTarzanPole_c::create() { forwardAccel = 0; forwardMaxSpeed = -40; - mFloat = (double)params; + mFloat = (s32)(params & 0xFF) * 10.0f; + if ((s32)(params & 0xFF) == 0xFF) { + mFloat = 0.0f; + } mVec = mVec3_c::Ex * 400; mVec.rotY(rotation.y); - boundingBox.Set(mVec3_c(-0, -120, -110), mVec3_c(500, 140, 110)); + boundingBox.Set(mVec3_c(-0.0f, -120.0f, -110.0f), mVec3_c(500.0f, 140.0f, 110.0f)); return SUCCEEDED; } From 24be72eec1057dad203ef35db502e98e1d71438f Mon Sep 17 00:00:00 2001 From: Sebastian Snoer Date: Mon, 26 May 2025 17:56:33 +0200 Subject: [PATCH 3/7] fully implemented --- configure.py | 12 +++--------- include/d/a/obj/d_a_obj_tarzan_pole.h | 2 ++ src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp | 7 ++++--- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/configure.py b/configure.py index b3fae83d..d5fa7f23 100644 --- a/configure.py +++ b/configure.py @@ -17,14 +17,8 @@ import sys from pathlib import Path from typing import Any, Dict, List -from tools.project import ( - Object, - ProjectConfig, - ProgressCategory, - calculate_progress, - generate_build, - is_windows, -) +from tools.project import (Object, ProgressCategory, ProjectConfig, + calculate_progress, generate_build, is_windows) # Game versions DEFAULT_VERSION = 0 @@ -2293,7 +2287,7 @@ config.libs = [ Rel(NonMatching, "d_a_obj_syako_shutter", "REL/d/a/obj/d_a_obj_syako_shutter.cpp"), Rel(NonMatching, "d_a_obj_tableware", "REL/d/a/obj/d_a_obj_tableware.cpp"), Rel(NonMatching, "d_a_obj_tackle", "REL/d/a/obj/d_a_obj_tackle.cpp"), - Rel(NonMatching, "d_a_obj_tarzan_pole", "REL/d/a/obj/d_a_obj_tarzan_pole.cpp"), + Rel(Matching, "d_a_obj_tarzan_pole", "REL/d/a/obj/d_a_obj_tarzan_pole.cpp"), Rel(NonMatching, "d_a_obj_tenijima", "REL/d/a/obj/d_a_obj_tenijima.cpp"), Rel(NonMatching, "d_a_obj_teni_rail", "REL/d/a/obj/d_a_obj_teni_rail.cpp"), Rel( diff --git a/include/d/a/obj/d_a_obj_tarzan_pole.h b/include/d/a/obj/d_a_obj_tarzan_pole.h index ec9754d8..56ba0607 100644 --- a/include/d/a/obj/d_a_obj_tarzan_pole.h +++ b/include/d/a/obj/d_a_obj_tarzan_pole.h @@ -21,6 +21,8 @@ public: private: static dCcD_SrcSph sCcSrc; + static const f32 sUnusedFloat; + static const f32 sUnusedFloat2; /* 0x330 */ nw4r::g3d::ResFile mBrres; /* 0x334 */ m3d::smdl_c mMdl; diff --git a/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp b/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp index 042916fb..566c669f 100644 --- a/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp +++ b/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp @@ -25,6 +25,7 @@ dCcD_SrcSph dAcOTarzanPole_c::sCcSrc = { // clang-format on bool dAcOTarzanPole_c::createHeap() { + 320.0f; // To fix .rodata // Get Res File void *resFile = getOarcResFile("WhipBar"); mBrres = nw4r::g3d::ResFile(resFile); @@ -44,6 +45,7 @@ bool dAcOTarzanPole_c::createHeap() { return true; } +const f32 dAcOTarzanPole_c::sUnusedFloat = 0.0f; int dAcOTarzanPole_c::create() { if (!initAllocatorWork1Heap(0xFFFFFFFF, "dAcOTarzanPole_c::m_allocator", 0x20)) { return FAILED; @@ -74,13 +76,12 @@ int dAcOTarzanPole_c::doDelete() { return SUCCEEDED; } +const f32 dAcOTarzanPole_c::sUnusedFloat2 = 320.0f; int dAcOTarzanPole_c::actorExecute() { - // Update matrix updateMatrix(); mMdl.setLocalMtx(mWorldMtx); mMdl.calc(false); - // IDK Player? dAcPy_c *player = dAcPy_c::LINK; bool bVar = false; if (mCollider.mTg.MskRPrm(1) && mCollider.mTg.GetActor() != nullptr) { @@ -96,7 +97,7 @@ int dAcOTarzanPole_c::actorExecute() { poscopy3 = poscopy2 + mVec3_c::Ey * 20; if (player != nullptr && !player->checkActionFlags(0x400000) && dAcItem_c::checkFlag(ITEM_WHIP)) { - AttentionManager::GetInstance()->addUnk7Target((dAcObjBase_c &)*this, 1000, 0, 10, -600.0, 200); + AttentionManager::GetInstance()->addUnk7Target((dAcObjBase_c &)*this, 1, 1000.0f, 10.0f, -600.0, 200); } mCollider.SetC(poscopy2); From 3f28e3473b23704dab2658a68d69f3f198777f67 Mon Sep 17 00:00:00 2001 From: Sebastian Snoer Date: Mon, 26 May 2025 18:04:45 +0200 Subject: [PATCH 4/7] cleanup comments & remove accidental python formatting --- configure.py | 12 +++++++++--- src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp | 1 - 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/configure.py b/configure.py index d5fa7f23..b3fae83d 100644 --- a/configure.py +++ b/configure.py @@ -17,8 +17,14 @@ import sys from pathlib import Path from typing import Any, Dict, List -from tools.project import (Object, ProgressCategory, ProjectConfig, - calculate_progress, generate_build, is_windows) +from tools.project import ( + Object, + ProjectConfig, + ProgressCategory, + calculate_progress, + generate_build, + is_windows, +) # Game versions DEFAULT_VERSION = 0 @@ -2287,7 +2293,7 @@ config.libs = [ Rel(NonMatching, "d_a_obj_syako_shutter", "REL/d/a/obj/d_a_obj_syako_shutter.cpp"), Rel(NonMatching, "d_a_obj_tableware", "REL/d/a/obj/d_a_obj_tableware.cpp"), Rel(NonMatching, "d_a_obj_tackle", "REL/d/a/obj/d_a_obj_tackle.cpp"), - Rel(Matching, "d_a_obj_tarzan_pole", "REL/d/a/obj/d_a_obj_tarzan_pole.cpp"), + Rel(NonMatching, "d_a_obj_tarzan_pole", "REL/d/a/obj/d_a_obj_tarzan_pole.cpp"), Rel(NonMatching, "d_a_obj_tenijima", "REL/d/a/obj/d_a_obj_tenijima.cpp"), Rel(NonMatching, "d_a_obj_teni_rail", "REL/d/a/obj/d_a_obj_teni_rail.cpp"), Rel( diff --git a/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp b/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp index 566c669f..d642ecd5 100644 --- a/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp +++ b/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp @@ -14,7 +14,6 @@ SPECIAL_ACTOR_PROFILE(OBJ_TARZAN_POLE, dAcOTarzanPole_c, fProfile::OBJ_TARZAN_POLE, 0x235, 0, 3); // clang-format off -// TODO: FIX: INCORRECT DATA! dCcD_SrcSph dAcOTarzanPole_c::sCcSrc = { /* mObjInf */ { /* mObjAt */ {0, 0, {0, 0, 0}, 0, 0, 0, 0, 0, 0}, From 3f9ae7585dd149b0d65a9796512f0c0b5b47e7ca Mon Sep 17 00:00:00 2001 From: robojumper Date: Mon, 26 May 2025 19:07:13 +0200 Subject: [PATCH 5/7] dAcOTarzanPole_c OK --- .../rels/d_a_obj_tarzan_poleNP/symbols.txt | 2 +- configure.py | 2 +- include/d/a/obj/d_a_obj_tarzan_pole.h | 5 +++-- src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp | 16 ++++++++-------- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/config/SOUE01/rels/d_a_obj_tarzan_poleNP/symbols.txt b/config/SOUE01/rels/d_a_obj_tarzan_poleNP/symbols.txt index 287711d0..b7c6167b 100644 --- a/config/SOUE01/rels/d_a_obj_tarzan_poleNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_tarzan_poleNP/symbols.txt @@ -10,7 +10,7 @@ draw__16dAcOTarzanPole_cFv = .text:0x00000560; // type:function size:0x28 __dt__16dAcOTarzanPole_cFv = .text:0x00000590; // type:function size:0x80 _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global -lbl_288_rodata_0 = .rodata:0x00000000; // type:object size:0x4C data:float +lbl_288_rodata_0 = .rodata:0x00000000; // type:object size:0x4C scope:local data:float g_profile_OBJ_TARZAN_POLE = .data:0x00000000; // type:object size:0x10 sCcSrc__16dAcOTarzanPole_c = .data:0x00000010; // type:object size:0x30 @23333 = .data:0x00000040; // type:object size:0x8 scope:local data:string diff --git a/configure.py b/configure.py index b3fae83d..566db45b 100644 --- a/configure.py +++ b/configure.py @@ -2293,7 +2293,7 @@ config.libs = [ Rel(NonMatching, "d_a_obj_syako_shutter", "REL/d/a/obj/d_a_obj_syako_shutter.cpp"), Rel(NonMatching, "d_a_obj_tableware", "REL/d/a/obj/d_a_obj_tableware.cpp"), Rel(NonMatching, "d_a_obj_tackle", "REL/d/a/obj/d_a_obj_tackle.cpp"), - Rel(NonMatching, "d_a_obj_tarzan_pole", "REL/d/a/obj/d_a_obj_tarzan_pole.cpp"), + Rel(Matching, "d_a_obj_tarzan_pole", "REL/d/a/obj/d_a_obj_tarzan_pole.cpp"), Rel(NonMatching, "d_a_obj_tenijima", "REL/d/a/obj/d_a_obj_tenijima.cpp"), Rel(NonMatching, "d_a_obj_teni_rail", "REL/d/a/obj/d_a_obj_teni_rail.cpp"), Rel( diff --git a/include/d/a/obj/d_a_obj_tarzan_pole.h b/include/d/a/obj/d_a_obj_tarzan_pole.h index 56ba0607..f37d8e5d 100644 --- a/include/d/a/obj/d_a_obj_tarzan_pole.h +++ b/include/d/a/obj/d_a_obj_tarzan_pole.h @@ -21,8 +21,9 @@ public: private: static dCcD_SrcSph sCcSrc; - static const f32 sUnusedFloat; - static const f32 sUnusedFloat2; + + static const f32 sXOffset; + static const f32 sYOffset; /* 0x330 */ nw4r::g3d::ResFile mBrres; /* 0x334 */ m3d::smdl_c mMdl; diff --git a/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp b/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp index d642ecd5..e3c040ae 100644 --- a/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp +++ b/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp @@ -23,8 +23,10 @@ dCcD_SrcSph dAcOTarzanPole_c::sCcSrc = { }; // clang-format on +const f32 dAcOTarzanPole_c::sXOffset = 320.0f; +const f32 dAcOTarzanPole_c::sYOffset = 0.0f; + bool dAcOTarzanPole_c::createHeap() { - 320.0f; // To fix .rodata // Get Res File void *resFile = getOarcResFile("WhipBar"); mBrres = nw4r::g3d::ResFile(resFile); @@ -44,7 +46,6 @@ bool dAcOTarzanPole_c::createHeap() { return true; } -const f32 dAcOTarzanPole_c::sUnusedFloat = 0.0f; int dAcOTarzanPole_c::create() { if (!initAllocatorWork1Heap(0xFFFFFFFF, "dAcOTarzanPole_c::m_allocator", 0x20)) { return FAILED; @@ -56,15 +57,15 @@ int dAcOTarzanPole_c::create() { mCollider.Set(sCcSrc); mCollider.SetStts(mStts); - forwardAccel = 0; - forwardMaxSpeed = -40; + forwardAccel = 0.0f; + forwardMaxSpeed = -40.0f; mFloat = (s32)(params & 0xFF) * 10.0f; if ((s32)(params & 0xFF) == 0xFF) { mFloat = 0.0f; } - mVec = mVec3_c::Ex * 400; + mVec = mVec3_c::Ex * 400.0f; mVec.rotY(rotation.y); boundingBox.Set(mVec3_c(-0.0f, -120.0f, -110.0f), mVec3_c(500.0f, 140.0f, 110.0f)); @@ -75,7 +76,6 @@ int dAcOTarzanPole_c::doDelete() { return SUCCEEDED; } -const f32 dAcOTarzanPole_c::sUnusedFloat2 = 320.0f; int dAcOTarzanPole_c::actorExecute() { updateMatrix(); mMdl.setLocalMtx(mWorldMtx); @@ -90,10 +90,10 @@ int dAcOTarzanPole_c::actorExecute() { mObjectActorFlags = mObjectActorFlags | 0x1000; } - mVec = mVec3_c::Ex * 320.0f + mVec3_c::Ey * 0; + mVec = mVec3_c::Ex * sXOffset + mVec3_c::Ey * sYOffset; mVec.rotY(rotation.y); poscopy2 = position + mVec; - poscopy3 = poscopy2 + mVec3_c::Ey * 20; + poscopy3 = poscopy2 + mVec3_c::Ey * 20.0f; if (player != nullptr && !player->checkActionFlags(0x400000) && dAcItem_c::checkFlag(ITEM_WHIP)) { AttentionManager::GetInstance()->addUnk7Target((dAcObjBase_c &)*this, 1, 1000.0f, 10.0f, -600.0, 200); From 99e902fd805abc5a2eddb79f296640cc3f65ece8 Mon Sep 17 00:00:00 2001 From: Seba244c <23051740+Seba244c@users.noreply.github.com> Date: Mon, 26 May 2025 19:25:14 +0200 Subject: [PATCH 6/7] Update src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp Co-authored-by: Elijah Thomas <42302100+elijah-thomas774@users.noreply.github.com> --- src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp b/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp index e3c040ae..82c91a14 100644 --- a/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp +++ b/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp @@ -17,7 +17,7 @@ SPECIAL_ACTOR_PROFILE(OBJ_TARZAN_POLE, dAcOTarzanPole_c, fProfile::OBJ_TARZAN_PO dCcD_SrcSph dAcOTarzanPole_c::sCcSrc = { /* mObjInf */ { /* mObjAt */ {0, 0, {0, 0, 0}, 0, 0, 0, 0, 0, 0}, - /* mObjTg */ {0xA00, 0x800311, {0, 0, 0x407}, 0x0000, 0x0000}, + /* mObjTg */ {(AT_TYPE_WHIP | AT_TYPE_WIND), 0x800311, {0, 0, 0x407}, 0x0000, 0x0000}, /* mObjCo */ {0x00000000}}, /* mSphInf */ {10.0f} }; From 5105ef985bb707bb385d4b0cebc2b042e5e0975d Mon Sep 17 00:00:00 2001 From: Sebastian Snoer Date: Mon, 26 May 2025 20:30:04 +0200 Subject: [PATCH 7/7] cleanup to use cleaner apis --- include/d/a/obj/d_a_obj_tarzan_pole.h | 4 ++-- src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp | 16 ++++++---------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/include/d/a/obj/d_a_obj_tarzan_pole.h b/include/d/a/obj/d_a_obj_tarzan_pole.h index f37d8e5d..819fc342 100644 --- a/include/d/a/obj/d_a_obj_tarzan_pole.h +++ b/include/d/a/obj/d_a_obj_tarzan_pole.h @@ -29,8 +29,8 @@ private: /* 0x334 */ m3d::smdl_c mMdl; /* 0x350 */ dBgW mBgCollider; /* 0x560 */ dCcD_Sph mCollider; - /* 0x6b0 */ mVec3_c mVec; // TODO: Find better name, and figure out it's purpose - /* 0x6bc */ float mFloat; // TODO: No usage found yet + /* 0x6b0 */ mVec3_c mVec; // TODO: Find better name, once we've figured out it's purpose + /* 0x6bc */ f32 mFloat; // TODO: No usage found yet }; #endif diff --git a/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp b/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp index 82c91a14..321998a7 100644 --- a/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp +++ b/src/REL/d/a/obj/d_a_obj_tarzan_pole.cpp @@ -47,9 +47,7 @@ bool dAcOTarzanPole_c::createHeap() { } int dAcOTarzanPole_c::create() { - if (!initAllocatorWork1Heap(0xFFFFFFFF, "dAcOTarzanPole_c::m_allocator", 0x20)) { - return FAILED; - } + CREATE_ALLOCATOR(dAcOTarzanPole_c); dBgS::GetInstance()->Regist(&mBgCollider, this); @@ -81,13 +79,10 @@ int dAcOTarzanPole_c::actorExecute() { mMdl.setLocalMtx(mWorldMtx); mMdl.calc(false); - dAcPy_c *player = dAcPy_c::LINK; + const dAcPy_c *player = dAcPy_c::GetLink(); bool bVar = false; - if (mCollider.mTg.MskRPrm(1) && mCollider.mTg.GetActor() != nullptr) { - bVar = true; - } - if (bVar && mCollider.ChkTgAtHitType(0x800)) { - mObjectActorFlags = mObjectActorFlags | 0x1000; + if (mCollider.ChkTgHit() && mCollider.ChkTgAtHitType(AT_TYPE_WHIP)) { + setObjectProperty(0x1000); } mVec = mVec3_c::Ex * sXOffset + mVec3_c::Ey * sYOffset; @@ -95,8 +90,9 @@ int dAcOTarzanPole_c::actorExecute() { poscopy2 = position + mVec; poscopy3 = poscopy2 + mVec3_c::Ey * 20.0f; + // 0x400000 corresponds to dAcPy_FLG0::FLG0_SWING_ROPE if (player != nullptr && !player->checkActionFlags(0x400000) && dAcItem_c::checkFlag(ITEM_WHIP)) { - AttentionManager::GetInstance()->addUnk7Target((dAcObjBase_c &)*this, 1, 1000.0f, 10.0f, -600.0, 200); + AttentionManager::GetInstance()->addUnk7Target(*this, 1, 1000.0f, 10.0f, -600.0, 200); } mCollider.SetC(poscopy2);