mirror of
https://github.com/PrimeDecomp/echoes.git
synced 2026-07-12 18:18:57 -07:00
Add CScanTreeInventory loading
This commit is contained in:
Vendored
+1
-1
@@ -44,7 +44,7 @@
|
||||
"C/C++ Include Guard.Auto Update Path Blocklist": [
|
||||
"include/zlib"
|
||||
],
|
||||
"search.useIgnoreFiles": false,
|
||||
"search.useIgnoreFiles": true,
|
||||
// Disable C++ intellisense engine, use clangd instead
|
||||
"C_Cpp.intelliSenseEngine": "disabled"
|
||||
}
|
||||
|
||||
@@ -93,6 +93,9 @@ MetroidPrime/ScriptObjects/CScriptSequenceTimer.cpp:
|
||||
MetroidPrime/CRuleSet.cpp:
|
||||
.text start:0x801F5E04 end:0x801F6638
|
||||
|
||||
MetroidPrime/ScriptObjects/CScanTreeInventory.cpp:
|
||||
.text start:0x8020EBF0 end:0x8020EE18
|
||||
|
||||
MetroidPrime/ScriptLoaderRel.cpp:
|
||||
.text start:0x8021BA60 end:0x8021BFE0
|
||||
.sbss start:0x80419480 end:0x804194F0
|
||||
|
||||
@@ -8492,7 +8492,7 @@ fn_8020E548 = .text:0x8020E548; // type:function size:0x1C0
|
||||
fn_8020E708 = .text:0x8020E708; // type:function size:0x3A0
|
||||
fn_8020EAA8 = .text:0x8020EAA8; // type:function size:0xA8
|
||||
fn_8020EB50 = .text:0x8020EB50; // type:function size:0xA0
|
||||
fn_8020EBF0 = .text:0x8020EBF0; // type:function size:0x228
|
||||
LoadScanTreeInventory__FPiR12CInputStream = .text:0x8020EBF0; // type:function size:0x228
|
||||
fn_8020EE18 = .text:0x8020EE18; // type:function size:0x1D0
|
||||
fn_8020EFE8 = .text:0x8020EFE8; // type:function size:0x194
|
||||
fn_8020F17C = .text:0x8020F17C; // type:function size:0x2CC
|
||||
@@ -10201,9 +10201,9 @@ fn_8024133C = .text:0x8024133C; // type:function size:0x3C
|
||||
fn_80241378 = .text:0x80241378; // type:function size:0xC4 align:4
|
||||
fn_8024143C = .text:0x8024143C; // type:function size:0x3C align:4
|
||||
fn_80241478 = .text:0x80241478; // type:function size:0x10 align:4
|
||||
fn_80241488 = .text:0x80241488; // type:function size:0xA8
|
||||
fn_80241530 = .text:0x80241530; // type:function size:0x3C
|
||||
fn_8024156C = .text:0x8024156C; // type:function size:0xC
|
||||
LoadTypedefSLdrScannableParameters__FR23SLdrScannableParametersR12CInputStream = .text:0x80241488; // type:function size:0xA8
|
||||
__dt__23SLdrScannableParametersFv = .text:0x80241530; // type:function size:0x3C
|
||||
__ct__23SLdrScannableParametersFv = .text:0x8024156C; // type:function size:0xC
|
||||
fn_80241578 = .text:0x80241578; // type:function size:0xC4
|
||||
fn_8024163C = .text:0x8024163C; // type:function size:0x3C
|
||||
fn_80241678 = .text:0x80241678; // type:function size:0x14
|
||||
|
||||
@@ -346,6 +346,7 @@ config.libs = [
|
||||
Object(NonMatching, "MetroidPrime/ScriptObjects/CScriptSpawnPoint.cpp"),
|
||||
Object(NonMatching, "MetroidPrime/CRuleSet.cpp"),
|
||||
Object(NonMatching, "MetroidPrime/Player/CPlayer.cpp"),
|
||||
Object(NonMatching, "MetroidPrime/ScriptObjects/CScanTreeInventory.cpp"),
|
||||
],
|
||||
},
|
||||
{
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
#ifndef _CSCANTREEINVENTORY
|
||||
#define _CSCANTREEINVENTORY
|
||||
|
||||
#include "rstl/string.hpp"
|
||||
#include "Kyoto/SObjectTag.hpp"
|
||||
|
||||
#include "MetroidPrime/Player/CPlayerState.hpp"
|
||||
|
||||
class CInputStream;
|
||||
class SLdrTransform;
|
||||
|
||||
class CScanTreeInventory {
|
||||
public:
|
||||
CScanTreeInventory(int id, const SLdrTransform& transform, CAssetId nameStringTable, CAssetId scannableInfo,
|
||||
CPlayerState::EItemType inventorySlotId, const rstl::string& nameStringName);
|
||||
};
|
||||
|
||||
CScanTreeInventory* LoadScanTreeInventory(int* id, CInputStream& input);
|
||||
|
||||
#endif // _CSCANTREEINVENTORY
|
||||
@@ -0,0 +1,109 @@
|
||||
#include "MetroidPrime/ScriptObjects/CScanTreeInventory.hpp"
|
||||
|
||||
#include "Kyoto/SObjectTag.hpp"
|
||||
#include "Kyoto/Streams/CInputStream.hpp"
|
||||
|
||||
#include "MetroidPrime/Player/CPlayerState.hpp"
|
||||
#include "MetroidPrime/ScriptLoader/SLdrEditorProperties.hpp"
|
||||
#include "MetroidPrime/ScriptLoader/SLdrScannableParameters.hpp"
|
||||
#include "rstl/string.hpp"
|
||||
|
||||
static const CPlayerState::EItemType kInventorySlotToItemType[] = {
|
||||
CPlayerState::kIT_PowerBeam,
|
||||
CPlayerState::kIT_DarkBeam,
|
||||
CPlayerState::kIT_LightBeam,
|
||||
CPlayerState::kIT_AnnihilatorBeam,
|
||||
CPlayerState::kIT_SuperMissile,
|
||||
CPlayerState::kIT_Darkburst,
|
||||
CPlayerState::kIT_Sunburst,
|
||||
CPlayerState::kIT_SonicBoom,
|
||||
CPlayerState::kIT_CombatVisor,
|
||||
CPlayerState::kIT_ScanVisor,
|
||||
CPlayerState::kIT_DarkVisor,
|
||||
CPlayerState::kIT_EchoVisor,
|
||||
CPlayerState::kIT_VariaSuit,
|
||||
CPlayerState::kIT_DarkSuit,
|
||||
CPlayerState::kIT_LightSuit,
|
||||
CPlayerState::kIT_MorphBall,
|
||||
CPlayerState::kIT_BoostBall,
|
||||
CPlayerState::kIT_SpiderBall,
|
||||
CPlayerState::kIT_MorphBallBombs,
|
||||
CPlayerState::kIT_DarkBomb,
|
||||
CPlayerState::kIT_LightBomb,
|
||||
CPlayerState::kIT_AnnihilatorBomb,
|
||||
CPlayerState::kIT_ChargeBeam,
|
||||
CPlayerState::kIT_GrappleBeam,
|
||||
CPlayerState::kIT_SpaceJumpBoots,
|
||||
CPlayerState::kIT_GravityBoost,
|
||||
CPlayerState::kIT_SeekerLauncher,
|
||||
CPlayerState::kIT_ScrewAttack,
|
||||
CPlayerState::kIT_Powerbomb,
|
||||
CPlayerState::kIT_Missile,
|
||||
CPlayerState::kIT_DarkAmmo,
|
||||
CPlayerState::kIT_LightAmmo,
|
||||
CPlayerState::kIT_EnergyTanks,
|
||||
CPlayerState::kIT_TempleKey1,
|
||||
CPlayerState::kIT_TempleKey2,
|
||||
CPlayerState::kIT_TempleKey3,
|
||||
CPlayerState::kIT_TempleKey4,
|
||||
CPlayerState::kIT_TempleKey5,
|
||||
CPlayerState::kIT_TempleKey6,
|
||||
CPlayerState::kIT_TempleKey7,
|
||||
CPlayerState::kIT_TempleKey8,
|
||||
CPlayerState::kIT_TempleKey9,
|
||||
CPlayerState::kIT_AgonKey1,
|
||||
CPlayerState::kIT_AgonKey2,
|
||||
CPlayerState::kIT_AgonKey3,
|
||||
CPlayerState::kIT_TorvusKey1,
|
||||
CPlayerState::kIT_TorvusKey2,
|
||||
CPlayerState::kIT_TorvusKey3,
|
||||
CPlayerState::kIT_HiveKey1,
|
||||
CPlayerState::kIT_HiveKey2,
|
||||
CPlayerState::kIT_HiveKey3,
|
||||
CPlayerState::kIT_EnergyTransferModule,
|
||||
CPlayerState::kIT_ChargeCombo
|
||||
};
|
||||
|
||||
struct SLdrScanTreeInventory {
|
||||
SLdrEditorProperties editorProperties;
|
||||
CAssetId nameStringTable;
|
||||
rstl::string nameStringName;
|
||||
int inventorySlotId;
|
||||
SLdrScannableParameters scannableParams;
|
||||
};
|
||||
|
||||
CScanTreeInventory* LoadScanTreeInventory(int* id, CInputStream& input) {
|
||||
SLdrScanTreeInventory sldrThis;
|
||||
|
||||
int propertyCount = input.ReadUint16();
|
||||
for (int i = 0; i < propertyCount; ++i) {
|
||||
uint propertyId = (uint)input.ReadInt32();
|
||||
u16 propertySize = input.ReadUint16();
|
||||
|
||||
switch (propertyId) {
|
||||
case 0x255a4580:
|
||||
LoadTypedefSLdrEditorProperties(sldrThis.editorProperties, input);
|
||||
break;
|
||||
case 0x46219bac:
|
||||
sldrThis.nameStringTable = input.ReadInt32();
|
||||
break;
|
||||
case 0x32698bd6:
|
||||
sldrThis.nameStringName = rstl::string(input);
|
||||
break;
|
||||
case 0x3d326f90:
|
||||
sldrThis.inventorySlotId = input.ReadInt32();
|
||||
break;
|
||||
case 0x2da1ec33:
|
||||
LoadTypedefSLdrScannableParameters(sldrThis.scannableParams, input);
|
||||
break;
|
||||
default:
|
||||
input.ReadBytes(nullptr, propertySize);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return new CScanTreeInventory(
|
||||
*id & 0xffff, sldrThis.editorProperties.transform, sldrThis.nameStringTable,
|
||||
sldrThis.scannableParams.scannableInfo0, sldrThis.inventorySlotId < 0x35 ? kInventorySlotToItemType[sldrThis.inventorySlotId] : CPlayerState::kIT_PowerBeam, sldrThis.nameStringName
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user