summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelijah-thomas774 <elijahthomas774@gmail.com>2026-03-01 13:49:50 -0500
committerelijah-thomas774 <elijahthomas774@gmail.com>2026-03-01 13:49:50 -0500
commite407be820c956dc2339aac116c2bf82a52c49aeb (patch)
tree7c89f1839989292c5f81a5150ed7a9d611d4bc9a
parent90e60e3341d82a6cf9faa84b532ab7d998ea9813 (diff)
d_t_scene_change OK
-rw-r--r--config/SOUE01/rels/d_a_npc_volcano_f2_salboNP/symbols.txt2
-rw-r--r--config/SOUE01/rels/d_t_scene_changeNP/symbols.txt28
-rw-r--r--config/SOUE01/symbols.txt2
-rw-r--r--configure.py2
-rw-r--r--include/d/a/npc/d_a_npc_volcano_f2_salbo.h2
-rw-r--r--src/REL/d/t/d_t_scene_change.cpp66
6 files changed, 53 insertions, 49 deletions
diff --git a/config/SOUE01/rels/d_a_npc_volcano_f2_salboNP/symbols.txt b/config/SOUE01/rels/d_a_npc_volcano_f2_salboNP/symbols.txt
index 52d172e5..0ebf0974 100644
--- a/config/SOUE01/rels/d_a_npc_volcano_f2_salboNP/symbols.txt
+++ b/config/SOUE01/rels/d_a_npc_volcano_f2_salboNP/symbols.txt
@@ -97,7 +97,7 @@ fn_61_4F40 = .text:0x00004F40; // type:function size:0x2E4
fn_61_5230 = .text:0x00005230; // type:function size:0x100
fn_61_5330 = .text:0x00005330; // type:function size:0x1D4
fn_61_5510 = .text:0x00005510; // type:function size:0x1A8
-fn_61_56C0 = .text:0x000056C0; // type:function size:0x4C
+fn_61_56C0__12dAcNpcSlb2_cF7mVec3_cPC7mVec3_cPC4mAng = .text:0x000056C0; // type:function size:0x4C
fn_61_5710 = .text:0x00005710; // type:function size:0x48
fn_61_5760 = .text:0x00005760; // type:function size:0x48
fn_61_57B0 = .text:0x000057B0; // type:function size:0x48
diff --git a/config/SOUE01/rels/d_t_scene_changeNP/symbols.txt b/config/SOUE01/rels/d_t_scene_changeNP/symbols.txt
index 07ff8c96..a4a1c9aa 100644
--- a/config/SOUE01/rels/d_t_scene_changeNP/symbols.txt
+++ b/config/SOUE01/rels/d_t_scene_changeNP/symbols.txt
@@ -2,20 +2,20 @@ _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
dTgSceneChange_c_classInit__Fv = .text:0x00000070; // type:function size:0x4C
-TgSceneChange__init = .text:0x000000C0; // type:function size:0xD4
-fn_204_1A0 = .text:0x000001A0; // type:function size:0x74
-TgSceneChange__update = .text:0x00000220; // type:function size:0x160
-fn_204_380 = .text:0x00000380; // type:function size:0x1C4
-fn_204_550 = .text:0x00000550; // type:function size:0x5C
-fn_204_5B0 = .text:0x000005B0; // type:function size:0x8
-__dt__16dTgSceneChange_cFv = .text:0x000005C0; // type:function size:0x5C
+create__16dTgSceneChange_cFv = .text:0x000000C0; // type:function size:0xD4
+checkDisabled__16dTgSceneChange_cCFv = .text:0x000001A0; // type:function size:0x74
+actorExecute__16dTgSceneChange_cFv = .text:0x00000220; // type:function size:0x160
+checkScrapper__16dTgSceneChange_cFv = .text:0x00000380; // type:function size:0x1C4
+savePlayerPosition__16dTgSceneChange_cFv = .text:0x00000550; // type:function size:0x5C
+draw__16dTgSceneChange_cFv = .text:0x000005B0; // type:function size:0x8
+__dt__16dTgSceneChange_cFv = .text:0x000005C0; // type:function size:0x5C scope:weak
_ctors = .ctors:0x00000000; // type:label scope:global
_dtors = .dtors:0x00000000; // type:label scope:global
-lbl_204_rodata_0 = .rodata:0x00000000; // type:object size:0x4 data:float
-lbl_204_data_0 = .data:0x00000000; // type:object size:0x13 data:string
-lbl_204_data_14 = .data:0x00000014; // type:object size:0x4 data:4byte
+lbl_204_rodata_0 = .rodata:0x00000000; // type:object size:0x4 scope:local data:float
+lbl_204_data_0 = .data:0x00000000; // type:object size:0x13 scope:local data:string
+ScrapperStopEvent = .data:0x00000014; // type:object size:0x4 data:4byte
g_profile_SC_CHANGE_TAG = .data:0x00000018; // type:object size:0x10
-lbl_204_data_28 = .data:0x00000028; // type:object size:0x4 data:4byte
-lbl_204_data_2C = .data:0x0000002C; // type:object size:0x4 data:4byte
-lbl_204_data_30 = .data:0x00000030; // type:object size:0xC data:string
-TgSceneChange__vtable = .data:0x0000003C; // type:object size:0x74
+lbl_204_data_28 = .data:0x00000028; // type:object size:0x4 scope:local data:4byte
+lbl_204_data_2C = .data:0x0000002C; // type:object size:0x4 scope:local data:4byte
+lbl_204_data_30 = .data:0x00000030; // type:object size:0xC scope:local data:string
+__vt__16dTgSceneChange_c = .data:0x0000003C; // type:object size:0x74
diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt
index 23a92d69..a19c6c64 100644
--- a/config/SOUE01/symbols.txt
+++ b/config/SOUE01/symbols.txt
@@ -2521,7 +2521,7 @@ vt_0x280__17daPlayerActBase_cFv = .text:0x8005C720; // type:function size:0x8
getSwordPos__17daPlayerActBase_cCFv = .text:0x8005C730; // type:function size:0x8
vt_0x278__17daPlayerActBase_cCFv = .text:0x8005C740; // type:function size:0x8
vt_0x274__17daPlayerActBase_cFv = .text:0x8005C750; // type:function size:0xC
-triggerExitRelated__17daPlayerActBase_cFv = .text:0x8005C760; // type:function size:0x4
+triggerExitRelated__17daPlayerActBase_cFiii = .text:0x8005C760; // type:function size:0x4
doesGameOver__17daPlayerActBase_cFv = .text:0x8005C770; // type:function size:0x8
setActorRef11__17daPlayerActBase_cFv = .text:0x8005C780; // type:function size:0x4
getGroosenatorIfIn__17daPlayerActBase_cFv = .text:0x8005C790; // type:function size:0x8
diff --git a/configure.py b/configure.py
index 86ce4cf8..ff93c17e 100644
--- a/configure.py
+++ b/configure.py
@@ -2943,7 +2943,7 @@ config.libs = [
Rel(
NonMatching, "d_t_ro_at_target_manager", "REL/d/t/d_t_ro_at_target_manager.cpp"
),
- Rel(NonMatching, "d_t_scene_change", "REL/d/t/d_t_scene_change.cpp"),
+ Rel(Matching, "d_t_scene_change", "REL/d/t/d_t_scene_change.cpp"),
Rel(NonMatching, "d_t_ship_flood", "REL/d/t/d_t_ship_flood.cpp"),
Rel(NonMatching, "d_t_ship_slope", "REL/d/t/d_t_ship_slope.cpp"),
Rel(Matching, "d_t_ship_window", "REL/d/t/d_t_ship_window.cpp"),
diff --git a/include/d/a/npc/d_a_npc_volcano_f2_salbo.h b/include/d/a/npc/d_a_npc_volcano_f2_salbo.h
index 03b288b1..629911cb 100644
--- a/include/d/a/npc/d_a_npc_volcano_f2_salbo.h
+++ b/include/d/a/npc/d_a_npc_volcano_f2_salbo.h
@@ -2,6 +2,7 @@
#define D_A_NPC_VOLCANO_F2_SALBO_H
#include "d/a/npc/d_a_ordinary_npc.h"
+#include "m/m_vec.h"
#include "s/s_State.hpp"
class dAcNpcSlb2_c : public dAcOrdinaryNpc_c {
@@ -10,6 +11,7 @@ public:
virtual ~dAcNpcSlb2_c() {}
void fn_61_58C0(int, int);
+ void fn_61_56C0(const mVec3_c, const mVec3_c *, const mAng *);
bool fn_61_6A10();
void fn_61_68D0(int);
diff --git a/src/REL/d/t/d_t_scene_change.cpp b/src/REL/d/t/d_t_scene_change.cpp
index 0ae26989..972d2406 100644
--- a/src/REL/d/t/d_t_scene_change.cpp
+++ b/src/REL/d/t/d_t_scene_change.cpp
@@ -3,7 +3,6 @@
#include "c/c_lib.h"
#include "common.h"
#include "d/a/d_a_player.h"
-#include "d/a/npc/d_a_npc_salbage_robot.h"
#include "d/a/npc/d_a_npc_volcano_f2_salbo.h"
#include "d/flag/sceneflag_manager.h"
#include "d/flag/storyflag_manager.h"
@@ -13,8 +12,11 @@
#include "m/m_vec.h"
#include "toBeSorted/area_math.h"
#include "toBeSorted/d_path.h"
+#include "toBeSorted/event.h"
#include "toBeSorted/event_manager.h"
+const char *ScrapperStopEvent = "HailToPlayerToStop";
+
SPECIAL_ACTOR_PROFILE(SC_CHANGE_TAG, dTgSceneChange_c, fProfile::SC_CHANGE_TAG, 0x21, 0, 4);
int dTgSceneChange_c::create() {
@@ -57,12 +59,15 @@ int dTgSceneChange_c::actorExecute() {
return SUCCEEDED;
}
- if (mEnableStoryflag == 0 || mEnableStoryflag >= 0x7FF || !StoryflagManager::sInstance->getFlag(mEnableStoryflag)) {
- return SUCCEEDED;
+ if (mEnableStoryflag != 0 && mEnableStoryflag < 0x7FF) {
+ if (!StoryflagManager::sInstance->getFlag(mEnableStoryflag)) {
+ return SUCCEEDED;
+ }
}
-
- if (mEnableSceneflag < 0xFF && !SceneflagManager::sInstance->checkBoolFlag(mRoomID, mEnableSceneflag)) {
- return SUCCEEDED;
+ if (mEnableSceneflag < 0xFF) {
+ if (!SceneflagManager::sInstance->checkBoolFlag(mRoomID, mEnableSceneflag)) {
+ return SUCCEEDED;
+ }
}
dAcPy_c *pPlayer = dAcPy_c::GetLinkM();
@@ -83,36 +88,33 @@ int dTgSceneChange_c::actorExecute() {
extern "C" dAcOrdinaryNpc_c *SCRAPPER_PTR;
bool dTgSceneChange_c::checkScrapper() {
- if (SCRAPPER_PTR == nullptr) {
- return false;
- }
-
- if (SCRAPPER_PTR->mProfileName != fProfile::NPC_SLB2) {
- return false;
- }
-
- if (!static_cast<dAcNpcSlb2_c*>(SCRAPPER_PTR)->fn_61_6A10()) {
- return false;
- }
-
- dPath_c path;
- if (path.initWithPathIndex(mPathId, mRoomID, 0) && path.getNumPoints() > 1) {
- if (EventManager::isInEvent(SCRAPPER_PTR, "HailToPlayerToStop")) {
- mVec3_c p0, p1;
- p0.copyFrom(path.getPoint(0));
- p1.copyFrom(path.getPoint(1));
- mAng a = cLib::targetAngleY(p0, p1);
-
-
-
+ if (SCRAPPER_PTR != nullptr && SCRAPPER_PTR->mProfileName == fProfile::NPC_SLB2) {
+ dAcNpcSlb2_c *pScrapper = static_cast<dAcNpcSlb2_c *>(SCRAPPER_PTR);
+ if (!pScrapper->fn_61_6A10()) {
+ return false;
+ }
+ dPath_c path;
+ if (path.initWithPathIndex(mPathId, mRoomID, 0) && (u32)path.getNumPoints() >= 2) {
+ if (EventManager::isInEvent(pScrapper, ScrapperStopEvent)) {
+ mVec3_c p0, p1;
+ p0.copyFrom(path.getPoint(0));
+ p1.copyFrom(path.getPoint(1));
+ mAng a = cLib::targetAngleY(p0, p1);
+ pScrapper->fn_61_56C0(field_0x138, &mPosition, &a);
+
+ return true;
+ } else {
+ void *zev = pScrapper->getOarcZev("DesertRobot");
+ u32 flag1 = 0x100000;
+ Event e(ScrapperStopEvent, zev, 100, flag1 + 1, 0, 0);
+ EventManager::alsoSetAsCurrentEvent(pScrapper, &e, nullptr);
+ return true;
+ }
}
}
-
return false;
-
-
-}
+}
void dTgSceneChange_c::savePlayerPosition() {
if (SCRAPPER_PTR == nullptr) {