Skip to content

Commit 3ccf19d

Browse files
committed
v2.8.0: add scan/target info
1 parent f622457 commit 3ccf19d

19 files changed

Lines changed: 822 additions & 516 deletions

.clang-format

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
BasedOnStyle: LLVM
2+
3+
BraceWrapping:
4+
AfterClass: false
5+
AfterControlStatement: false
6+
AfterEnum: false
7+
AfterFunction: false
8+
AfterNamespace: false
9+
AfterStruct: false
10+
AfterUnion: false
11+
BeforeCatch: false
12+
BeforeElse: false
13+
BreakBeforeBraces: Custom
14+
15+
IndentWidth: 2
16+
UseTab: Never
17+
TabWidth: 2
18+
ColumnLimit: 120
19+
NamespaceIndentation: All

CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ set(SOURCE_FILES
3434
src/include/rstl/vector.h
3535
src/include/rstl/auto_ptr.h
3636
src/include/rstl/list.h
37+
src/include/rstl/pair.h
3738
src/include/dvd.h
3839
src/include/types.h
3940
src/include/os.h
@@ -89,6 +90,8 @@ set(SOURCE_FILES
8990
src/include/prime/CInGameGuiManager.hpp
9091
src/include/prime/CGameArchitectureSupport.hpp
9192
src/include/prime/CRandom16.hpp
93+
src/include/prime/CAi.hpp
94+
src/include/prime/CPatterned.hpp
9295
src/include/STriggerRenderConfig.hpp
9396
src/include/NewPauseScreen.hpp
9497
src/include/GetField.hpp
@@ -125,6 +128,7 @@ set(SOURCE_FILES
125128
src/font_atlas.hpp
126129
src/ImGuiEngine.cpp
127130
src/ImGuiEngine.hpp
131+
src/CEntity.cpp
128132
src/libc/libc.c
129133

130134
src/UI/WarpMenu.h
@@ -141,6 +145,8 @@ set(SOURCE_FILES
141145
src/UI/BombJumping.cpp
142146
src/UI/RoomMenu.cpp
143147
src/UI/RoomMenu.hpp
148+
src/UI/ScanMenu.cpp
149+
src/UI/ScanMenu.hpp
144150
src/UI/QR.cpp
145151
src/UI/QR.hpp
146152
src/UI/DumpMemoryUI.cpp

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ This project can produce a release & patch a metroid prime iso to be the practic
7979

8080
## Changelog
8181

82+
### 2.8.0
83+
- Add option to show targeted object info (including hp, asset id, etc)
84+
- Add option for infinite scans
85+
- Add option to complete/reset all scans
86+
8287
### 2.7.0
8388
- Add incinerator drone fight details to OSD
8489
- RNG value display and locking

src/CEntity.cpp

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
#include "prime/CEntity.hpp"
2+
3+
VTableInfo MP1_VTABLES[VTABLE_COUNT] = {
4+
{.vtable = 0x803d9660, .name = "CFirstPersonCamera", .isActor = true},
5+
{.vtable = 0x803d96e8, .name = "CPlayer", .isActor = true, .isPhysicsActor = true},
6+
{.vtable = 0x803da450, .name = "CScriptActor", .isActor = true, .isPhysicsActor = true},
7+
{.vtable = 0x803da4d8, .name = "CScriptTrigger", .isActor = true},
8+
{.vtable = 0x803da558, .name = "CScriptWaypoint", .isActor = true},
9+
{.vtable = 0x803daa78, .name = "CScriptDoor", .isActor = true, .isPhysicsActor = true},
10+
{.vtable = 0x803dab90, .name = "CBallCamera", .isActor = true},
11+
{.vtable = 0x803dac38, .name = "CScriptEffect", .isActor = true},
12+
{.vtable = 0x803dadd8, .name = "CScriptTimer"},
13+
{.vtable = 0x803df128, .name = "CScriptSound", .isActor = true},
14+
{.vtable = 0x803df220, .name = "CScriptPlatform", .isActor = true, .isPhysicsActor = true},
15+
{.vtable = 0x803df328, .name = "CScriptGenerator"},
16+
{.vtable = 0x803df348, .name = "CScriptCameraWaypoint", .isActor = true},
17+
{.vtable = 0x803df3b8, .name = "CGameLight", .isActor = true},
18+
{.vtable = 0x803df4f8, .name = "CScriptPickup", .isActor = true, .isPhysicsActor = true},
19+
{.vtable = 0x803df580, .name = "CScriptDock", .isActor = true, .isPhysicsActor = true},
20+
{.vtable = 0x803df688, .name = "CScriptCameraHint", .isActor = true},
21+
{.vtable = 0x803df830, .name = "CScriptRelay"},
22+
{.vtable = 0x803df850, .name = "CScriptSpawnPoint"},
23+
{.vtable = 0x803df890, .name = "CBeetle", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
24+
{.vtable = 0x803dfbf0, .name = "CScriptHUDMemo"},
25+
{.vtable = 0x803dfd08, .name = "CScriptDamageableTrigger", .isActor = true},
26+
{.vtable = 0x803dfd78, .name = "CScriptDebris", .isActor = true, .isPhysicsActor = true},
27+
{.vtable = 0x803e02c8, .name = "CScriptSpiderBallWaypoint", .isActor = true},
28+
{.vtable = 0x803e0bf8, .name = "CScriptCoverPoint", .isActor = true},
29+
{.vtable = 0x803e0c68, .name = "CPathCamera", .isActor = true},
30+
{.vtable = 0x803e0d70, .name = "CHUDBillboardEffect", .isActor = true},
31+
{.vtable = 0x803e2b68, .name = "CScriptSpecialFunction", .isActor = true},
32+
{.vtable = 0x803e3004, .name = "CParasite", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
33+
{.vtable = 0x803e32d8, .name = "CScriptPlayerHint", .isActor = true},
34+
{.vtable = 0x803e3618, .name = "CScriptPickupGenerator"},
35+
{.vtable = 0x803e3638, .name = "CScriptPointOfInterest", .isActor = true},
36+
{.vtable = 0x803e4708, .name = "CScriptRoomAcoustics"},
37+
{.vtable = 0x803e4b18, .name = "CCollisionActor", .isActor = true, .isPhysicsActor = true},
38+
{.vtable = 0x803e7068, .name = "CScriptStreamedMusic"},
39+
{.vtable = 0x803e8558, .name = "CTeamAiMgr"},
40+
{.vtable = 0x803e86e8, .name = "CScriptMemoryRelay"},
41+
{.vtable = 0x803e9d80, .name = "CInterpolationCamera", .isActor = true},
42+
{.vtable = 0x803dadf8, .name = "CCinematicCamera", .isActor = true},
43+
{.vtable = 0x803daef0, .name = "CScriptCounter"},
44+
{.vtable = 0x803dfc80, .name = "CScriptCameraFilterKeyframe"},
45+
{.vtable = 0x803dfca0, .name = "CScriptCameraBlurKeyframe"},
46+
{.vtable = 0x803dfe00, .name = "CScriptCameraShaker"},
47+
{.vtable = 0x803dfe20, .name = "CScriptActorKeyframe"},
48+
{.vtable = 0x803dfe70, .name = "CScriptWater", .isActor = true},
49+
{.vtable = 0x803e27b0, .name = "CScriptDistanceFog"},
50+
{.vtable = 0x803e2d28, .name = "CSpankWeed", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
51+
{.vtable = 0x803e3e80, .name = "CScriptBallTrigger", .isActor = true},
52+
{.vtable = 0x803e4be0, .name = "CScriptPlayerActor", .isActor = true, .isPhysicsActor = true},
53+
{.vtable = 0x803e4d08, .name = "CFlaahgraRenderer", .isActor = true},
54+
{.vtable = 0x803e4e88, .name = "CFlaahgra", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
55+
{.vtable = 0x803e52f8, .name = "CScriptAreaAttributes"},
56+
{.vtable = 0x803e5830, .name = "CScriptVisorFlare", .isActor = true},
57+
{.vtable = 0x803e5c40, .name = "CScriptSwitch"},
58+
{.vtable = 0x803e6408, .name = "CFlaahgraTentacle", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
59+
{.vtable = 0x803e8578, .name = "CSnakeWeedSwarm", .isActor = true},
60+
{.vtable = 0x803e8670, .name = "CScriptSpindleCamera", .isActor = true},
61+
{.vtable = 0x803d9e30, .name = "CEntity"},
62+
{.vtable = 0x803d9eb0, .name = "CActor", .isActor = true},
63+
{.vtable = 0x803da0a8, .name = "CExplosion", .isActor = true},
64+
{.vtable = 0x803da5c8, .name = "CPatterned", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
65+
{.vtable = 0x803dacc0, .name = "CBomb", .isActor = true},
66+
{.vtable = 0x803df870, .name = "CScriptRandomRelay"},
67+
{.vtable = 0x803e0800, .name = "CSpacePirate", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
68+
{.vtable = 0x803e0d00, .name = "CScriptGrapplePoint", .isActor = true},
69+
{.vtable = 0x803e2808, .name = "CPowerBomb", .isActor = true},
70+
{.vtable = 0x803e2d08, .name = "CScriptActorRotate"},
71+
{.vtable = 0x803e3da8, .name = "CScriptSteam", .isActor = true},
72+
{.vtable = 0x803e3e28, .name = "CScriptRipple"},
73+
{.vtable = 0x803e3f00, .name = "CPlasmaProjectile", .isActor = true},
74+
{.vtable = 0x803e4018, .name = "CNewIntroBoss", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
75+
{.vtable = 0x803e4330, .name = "CScriptTargetingPoint", .isActor = true},
76+
{.vtable = 0x803e51e8, .name = "CIceImpact", .isActor = true},
77+
{.vtable = 0x803e5318, .name = "CWaveBuster", .isActor = true},
78+
{.vtable = 0x803e5758, .name = "CFishCloud", .isActor = true},
79+
{.vtable = 0x803e58a0, .name = "CScriptWorldTeleporter"},
80+
{.vtable = 0x803e58c0, .name = "CScriptVisorGoo", .isActor = true},
81+
{.vtable = 0x803e5c20, .name = "CScriptControllerAction"},
82+
{.vtable = 0x803e6308, .name = "CWallCrawlerSwarm", .isActor = true},
83+
{.vtable = 0x803e6bb0, .name = "CScriptColorModulate"},
84+
{.vtable = 0x803e7048, .name = "CScriptMidi"},
85+
{.vtable = 0x803e7158, .name = "CEnergyProjectile", .isActor = true},
86+
{.vtable = 0x803e71ec, .name = "CScriptGunTurret", .isActor = true, .isPhysicsActor = true},
87+
{.vtable = 0x803e7a70, .name = "CScriptCameraPitchVolume", .isActor = true},
88+
{.vtable = 0x803e8c40, .name = "CScriptCameraHintTrigger", .isActor = true},
89+
{.vtable = 0x803e9d10, .name = "CNewFlameThrower", .isActor = true},
90+
{.vtable = 0x803dff90, .name = "CWarWasp", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
91+
{.vtable = 0x803e1918, .name = "CChozoGhost", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
92+
{.vtable = 0x803e5154, .name = "CFlaahgraProjectile", .isActor = true},
93+
{.vtable = 0x803e88a8, .name = "CAtomicAlpha", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
94+
{.vtable = 0x803e8cb0, .name = "CAmbientAI", .isActor = true, .isPhysicsActor = true},
95+
{.vtable = 0x803e9258, .name = "CRidley", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
96+
{.vtable = 0x803e96c0, .name = "CPuffer", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
97+
{.vtable = 0x803e9e10, .name = "CSeedling", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
98+
{.vtable = 0x803ed508,
99+
.name = "IAnimReader"}, // also possibly CAnimSourceReader or CAnimTreeNode or CFBStreamedAnimReader
100+
{.vtable = 0x803e1c88, .name = "CFireFlea", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
101+
{.vtable = 0x803e2878, .name = "CMetaree", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
102+
{.vtable = 0x803e3348, .name = "CRipper", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
103+
{.vtable = 0x803e3ad8, .name = "CMetroid", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
104+
{.vtable = 0x803e45d8, .name = "CFlameThrower", .isActor = true},
105+
{.vtable = 0x803e4728, .name = "CIceSheegoth", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
106+
{.vtable = 0x803e57c4, .name = "CFishCloudModifier", .isActor = true},
107+
{.vtable = 0x803e5954, .name = "CJellyZap", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
108+
{.vtable = 0x803e5ce0, .name = "CThardus", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
109+
{.vtable = 0x803e6074, .name = "CDestroyableRock", .isActor = true, .isPhysicsActor = true},
110+
{.vtable = 0x803e6398, .name = "CScriptAiJumpPoint", .isActor = true},
111+
{.vtable = 0x803e685c, .name = "CFlyingPirate", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
112+
{.vtable = 0x803e6be0,
113+
.name = "CThardusRockProjectile",
114+
.isActor = true,
115+
.isPhysicsActor = true,
116+
.isPatterned = true},
117+
{.vtable = 0x803e70e8, .name = "CRepulsor", .isActor = true},
118+
{.vtable = 0x803e7350, .name = "CBabygoth", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
119+
{.vtable = 0x803e774c, .name = "CEyeBall", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
120+
{.vtable = 0x803e80c0, .name = "CRipperControlledPlatform", .isActor = true, .isPhysicsActor = true},
121+
{.vtable = 0x803e8240, .name = "CMagdolite", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
122+
{.vtable = 0x803e8e4c, .name = "CAtomicBeta", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
123+
{.vtable = 0x803e9118, .name = "CElectricBeamProjectile", .isActor = true},
124+
{.vtable = 0x803e9990, .name = "CFire", .isActor = true},
125+
{.vtable = 0x803e9a40, .name = "CTryclops", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
126+
{.vtable = 0x803ea7c4, .name = "CBurrower", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
127+
{.vtable = 0x803e36a8, .name = "CDrone", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
128+
{.vtable = 0x803e3a58, .name = "CDroneLaser", .isActor = true},
129+
{.vtable = 0x803e4400, .name = "CScriptEMPulse", .isActor = true},
130+
{.vtable = 0x803e5388, .name = "CMetroidBeta", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
131+
{.vtable = 0x803e5cc0, .name = "CScriptPlayerStateChange"},
132+
{.vtable = 0x803e6778, .name = "CIceAttackProjectile", .isActor = true},
133+
{.vtable = 0x803e7ae0, .name = "CElitePirate", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
134+
{.vtable = 0x803e7f58, .name = "CGrenadeLauncher", .isActor = true, .isPhysicsActor = true},
135+
{.vtable = 0x803e8050, .name = "CShockWave", .isActor = true},
136+
{.vtable = 0x803ead54, .name = "CMetroidPrimeExo", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
137+
{.vtable = 0x803eb0fc, .name = "CMetroidPrimeExoPhysicsDummy", .isActor = true, .isPhysicsActor = true},
138+
{.vtable = 0x803eb180, .name = "CScriptBeam", .isActor = true},
139+
{.vtable = 0x803eb244,
140+
.name = "CMetroidPrimeEssence",
141+
.isActor = true,
142+
.isPhysicsActor = true,
143+
.isPatterned = true},
144+
{.vtable = 0x803eb638, .name = "CMetroidPrimeRelay"},
145+
{.vtable = 0x803eb658, .name = "CScriptMazeNode", .isActor = true},
146+
{.vtable = 0x803eb6c8, .name = "CFlash", .isActor = true},
147+
{.vtable = 0x803eb868, .name = "COmegaPirate", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
148+
{.vtable = 0x803ebb48, .name = "CPhazonPool", .isActor = true},
149+
{.vtable = 0x803ebc70,
150+
.name = "CPhazonHealingNodule",
151+
.isActor = true,
152+
.isPhysicsActor = true,
153+
.isPatterned = true},
154+
{.vtable = 0x803ec030, .name = "CScriptShadowProjector", .isActor = true},
155+
{.vtable = 0x803ec0a0, .name = "CEnergyBall", .isActor = true, .isPhysicsActor = true, .isPatterned = true},
156+
};

src/NewPauseScreen.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "ImGuiEngine.hpp"
2121
#include "version.h"
2222
#include "UI/RoomMenu.hpp"
23+
#include "UI/ScanMenu.hpp"
2324
#include "UI/QR.hpp"
2425
#include "UI/DumpMemoryUI.hpp"
2526
#include "utils.hpp"
@@ -185,6 +186,7 @@ void NewPauseScreen::RenderMenu() {
185186
GUI::drawSettingsMenu();
186187
GUI::drawWarpMenu();
187188
GUI::drawRoomMenu();
189+
GUI::drawScanMenu();
188190
if (ImGui::TreeNode("v%s", PRAC_MOD_VERSION)) {
189191
ImGui::Text("Links (QR codes):");
190192
if (ImGui::TreeNode("Releases")) {
@@ -291,6 +293,33 @@ void NewPauseScreen::update(float dt) const {
291293
}
292294
bombjump_done:;
293295

296+
if (SETTINGS.SCAN_infiniteScanTime) {
297+
CStateManager *stateManager = CStateManager::instance();
298+
CPlayer *player = stateManager->Player();
299+
if (player == nullptr) return;
300+
301+
bool important = false;
302+
TUniqueId scanId = player->getScanningObjectId();
303+
if (scanId > 0) {
304+
CEntity *entity = CStateManager::instance()->ObjectById(scanId);
305+
if (entity) {
306+
u32 vtable = entity->getVtablePtr();
307+
auto vtableInfo = GetVtableInfo(vtable);
308+
if (vtableInfo.isActor) {
309+
CActor *actor = reinterpret_cast<CActor *>(entity);
310+
const CScannableObjectInfo *scanInfo = actor->GetScannableObjectInfo();
311+
if (scanInfo) {
312+
important = scanInfo->x10_important;
313+
}
314+
}
315+
}
316+
}
317+
318+
if (!important || SETTINGS.SCAN_infiniteScanTimeOnImportantScans) {
319+
*player->getScanningTime() = 0.1f;
320+
*player->getCurScanTime() = 0.1f;
321+
}
322+
}
294323
}
295324

296325
void warp(uint32_t world, uint32_t area) {

0 commit comments

Comments
 (0)