diff --git a/Spore ModAPI/SourceCode/DLL/AddressesEditors.cpp b/Spore ModAPI/SourceCode/DLL/AddressesEditors.cpp index 412de716..07ba40c6 100644 --- a/Spore ModAPI/SourceCode/DLL/AddressesEditors.cpp +++ b/Spore ModAPI/SourceCode/DLL/AddressesEditors.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #ifdef SDK_TO_GHIDRA namespace Editors @@ -82,9 +83,13 @@ namespace Editors DefineAddress(HandleMessage, SelectAddress(0x591C80, 0x591FA0)); - DefineAddress(GetEditorForAssetType, SelectAddress(0x00433010, 0x004333e0)); - DefineAddress(GetNameForAssetType, SelectAddress(0x004badc0, 0x004bba50)); - DefineAddress(GetTypeIDForAssetType, SelectAddress(0x004bb110, 0x004bbda0)); + DefineAddress(GetEditorForAssetType, SelectAddress(0x433010, 0x4333e0)); + DefineAddress(GetNameForAssetType, SelectAddress(0x4badc0, 0x4bba50)); + DefineAddress(GetTypeIDForAssetType, SelectAddress(0x4bb110, 0x4bbda0)); + + DefineAddress(ComputeCreatureVerbIcons, SelectAddress(0x4e2a50, 0x4e8860)); + + DefineAddress(LoadCreatureData, SelectAddress(0x4b5760, 0x4bb500)); } namespace Addresses(EditorCamera) @@ -250,5 +255,19 @@ namespace Editors DefineAddress(SetWindowVisible, SelectAddress(0x635450, 0x635750)); DefineAddress(FindWindowByID, SelectAddress(0x634AB0, 0x634DB0)); } + + namespace Addresses(VerbIconData) + { + DefineAddress(AddRef, SelectAddress(0x6520a0, 0xc6ab00)); + DefineAddress(Release, SelectAddress(0x5cd9f0, 0x7b87b0)); + DefineAddress(Dispose, SelectAddress(0x597710, 0x59eff0)); + DefineAddress(AsInterface, SelectAddress(0x5db940, 0x5e4d70)); + DefineAddress(Init, SelectAddress(0x5dc070, 0x5e54a0)); + DefineAddress(Shutdown, SelectAddress(0x5dc4f0, 0x5e5920)); + DefineAddress(SetArrayIndex, SelectAddress(0x5db960, 0x5e4d90)); + DefineAddress(SetHotKey, SelectAddress(0x5dc800, 0x5e5c30)); + DefineAddress(GetIconName, SelectAddress(0x5dc880, 0x5e5cb0)); + DefineAddress(GetIconDescription, SelectAddress(0x5dc940, 0x5e5d70)); + } } #endif diff --git a/Spore ModAPI/SourceCode/DLL/AddressesGraphics.cpp b/Spore ModAPI/SourceCode/DLL/AddressesGraphics.cpp index df024b16..bc1fa247 100644 --- a/Spore ModAPI/SourceCode/DLL/AddressesGraphics.cpp +++ b/Spore ModAPI/SourceCode/DLL/AddressesGraphics.cpp @@ -56,6 +56,32 @@ namespace Graphics namespace Addresses(IThumbnailManager) { DefineAddress(Get, SelectAddress(0x67DED0, 0x67DD70)); + DefineAddress(AddRef, SelectAddress(0xfee650, 0x671f20)); + DefineAddress(Release, SelectAddress(0xf1aae0, 0xae0620)); + DefineAddress(Dispose, SelectAddress(0x794410, 0x7b6df0)); + DefineAddress(Init, SelectAddress(0x79e020, 0x7c14c0)); + DefineAddress(Shutdown, SelectAddress(0x79ad90, 0x7bdef0)); + DefineAddress(FrameBoundingBoxPalette, SelectAddress(0x792a90, 0x7b53d0)); + DefineAddress(GetThumbRectID, SelectAddress(0x7903c0, 0x7b2740)); + DefineAddress(CapturePaletteThumbnail, SelectAddress(0x79b3a0, 0x7be500)); + DefineAddress(CaptureEditorsThumbnail, SelectAddress(0x79b8e0, 0x7bead0)); + DefineAddress(CaptureCSAPhotos, SelectAddress(0x79bc20, 0x7bee80)); + DefineAddress(CaptureGameThumbnail, SelectAddress(0x79c120, 0x7bf3d0)); + DefineAddress(func2ch, SelectAddress(0x794c10, 0x7b7600)); + DefineAddress(func30h, SelectAddress(0x793240, 0x7b5b80)); + DefineAddress(RenderPlanetThumbnail, SelectAddress(0x797430, 0x7ba180)); + DefineAddress(CaptureBESplatter, SelectAddress(0x79e790, 0x7c1ce0)); + DefineAddress(CaptureAO, SelectAddress(0x79cc40, 0x7bffb0)); + DefineAddress(CaptureAOCE, SelectAddress(0x79d430, 0x7c0850)); + DefineAddress(func44h, SelectAddress(0x7988a0, 0x7bb740)); + DefineAddress(GenerateTimelineImages, SelectAddress(0x79cc30, 0x7bff80)); + DefineAddress(FrameBoundingBoxThumbnail, SelectAddress(0x792d60, 0x7b56a0)); + DefineAddress(FrameBBoxes, SelectAddress(0x794950, 0x7b7340)); + DefineAddress(DownsampleGIF, SelectAddress(0x7972c0, 0x7ba000)); + DefineAddress(DownSampleRT, SelectAddress(0x796be0, 0x7b98a0)); + DefineAddress(func5Ch, SelectAddress(0x796d80, 0x7b9a60)); + DefineAddress(TerrainBlurFilterDraw, SelectAddress(0x7923b0, 0x7b4bd0)); + DefineAddress(GatherAOPasses, SelectAddress(0x7940f0, 0x7b69b0)); } namespace Addresses(IGraphicsManager) { diff --git a/Spore ModAPI/SourceCode/DLL/AddressesSporepedia.cpp b/Spore ModAPI/SourceCode/DLL/AddressesSporepedia.cpp index 4d845542..7989505f 100644 --- a/Spore ModAPI/SourceCode/DLL/AddressesSporepedia.cpp +++ b/Spore ModAPI/SourceCode/DLL/AddressesSporepedia.cpp @@ -5,6 +5,8 @@ #include #include #include +#include +#include namespace Sporepedia { @@ -78,6 +80,25 @@ namespace Sporepedia DefineAddress(Get, SelectAddress(0x67CC90, 0x67CB00)); } } + + namespace Addresses(ISPUILargeAssetView) + { + DefineAddress(AddRef, SelectAddress(0x734c00, 0xf11ae0)); + DefineAddress(Release, SelectAddress(0x734c10, 0x7505f0)); + DefineAddress(Dispose, SelectAddress(0x6623c0, 0x66ccd0)); + DefineAddress(AsInterface, SelectAddress(0x661490, 0x66bce0)); + DefineAddress(GetPriority, SelectAddress(0xce9820, 0xe310c0)); + DefineAddress(GetEventMask, SelectAddress(0xdb8a50, 0x5f0e70)); + DefineAddress(func18h, SelectAddress(0xdb8a50, 0x66d400)); + DefineAddress(LoadAssetViewLarge, SelectAddress(0x664630, 0x66efb0)); + } + namespace Addresses(cSPUILargeAssetViewSmh) + { + DefineAddress(Dispose, SelectAddress(0x661ab0, 0x66c310)); + DefineAddress(func04h, SelectAddress(0x661c00, 0x66c460)); + DefineAddress(AddRef, SelectAddress(0x6023b0, 0xeb2890)); + DefineAddress(Release, SelectAddress(0x6023a0, 0xeb28a0)); + } } namespace Addresses(Sporepedia) diff --git a/Spore ModAPI/SourceCode/Editors/Editor.cpp b/Spore ModAPI/SourceCode/Editors/Editor.cpp index 59b16a00..d8368d5e 100644 --- a/Spore ModAPI/SourceCode/Editors/Editor.cpp +++ b/Spore ModAPI/SourceCode/Editors/Editor.cpp @@ -59,20 +59,20 @@ namespace Editors : mnRefCount(0) , mKey() , mRigblocks() - , field_2C() - , field_30() - , field_34() - , field_38() - , field_3C() - , field_40(-2.0f) - , field_44(2.0f) - , field_48() - , field_4C() - , field_4D() - , field_4E(true) - , field_4F() - , field_50() - , field_51() + , mbAllBlocksLoaded() + , mPhysicsWorld() + , mUseDynamics() + , mBounds() + , mFeetBounds() + , mMinHeight(-2.0f) + , mMaxHeight(2.0f) + , mMinimumLeglessCreatureHeight() + , mShowHiddenHandles() + , mShowBoneLengthHandles() + , mUseBoundsForDelete(true) + , mUsingSymmetry() + , mSkinNeedsUpdating() + , mChanged() , mTranslationOptions() , mModelType() , mName() @@ -81,7 +81,7 @@ namespace Editors , mSkinEffectIDs() , mSkinEffectSeeds{1234, 1234, 1234} , mColors {ColorRGB(1.0f, 1.0f, 1.0f), ColorRGB(1.0f, 1.0f, 1.0f), ColorRGB(1.0f, 1.0f, 1.0f)} - , field_C8() + , mBBoxesOverride() { } @@ -90,8 +90,8 @@ namespace Editors Dispose(); // field_30 is a pointer, but I don't know what kind so we manually Release it - if (field_30 != 0) { - int* pointer = (int*)field_30; + if (mPhysicsWorld != 0) { + int* pointer = (int*)mPhysicsWorld; pointer[1]--; if (pointer[1] == 0) { pointer[1] = 1; @@ -198,5 +198,10 @@ namespace Editors auto_STATIC_METHOD(cEditor, uint32_t, GetTypeIDForAssetType, Args(uint32_t assetTypeID), Args(assetTypeID)); auto_STATIC_METHOD(cEditor, const char16_t*, GetNameForAssetType, Args(uint32_t assetTypeID), Args(assetTypeID)); + + auto_STATIC_METHOD_VOID(cEditor, ComputeCreatureVerbIcons, Args(cCreatureDataResource* creatureData, int VerbTrayCollection, int brainLevel, float param_4), Args(creatureData, VerbTrayCollection, brainLevel, param_4)); + + auto_STATIC_METHOD(cEditor, bool, LoadCreatureData,Args(ResourceKey* creation, cCreatureDataResource** dst), Args(creation, dst)); + } #endif diff --git a/Spore ModAPI/Spore ModAPI.vcxproj b/Spore ModAPI/Spore ModAPI.vcxproj index 6c361101..2662401c 100644 --- a/Spore ModAPI/Spore ModAPI.vcxproj +++ b/Spore ModAPI/Spore ModAPI.vcxproj @@ -327,8 +327,10 @@ - - + + + + @@ -504,6 +506,8 @@ + + diff --git a/Spore ModAPI/Spore ModAPI.vcxproj.filters b/Spore ModAPI/Spore ModAPI.vcxproj.filters index 1bfe6d18..5e268856 100644 --- a/Spore ModAPI/Spore ModAPI.vcxproj.filters +++ b/Spore ModAPI/Spore ModAPI.vcxproj.filters @@ -2250,6 +2250,18 @@ Header Files + + Header Files + + + Header Files + + + Header Files + + + Header Files + @@ -2738,6 +2750,9 @@ Source Files + + Source Files + diff --git a/Spore ModAPI/Spore/CommonIDs.h b/Spore ModAPI/Spore/CommonIDs.h index e5606ce1..298936da 100644 --- a/Spore ModAPI/Spore/CommonIDs.h +++ b/Spore ModAPI/Spore/CommonIDs.h @@ -119,6 +119,13 @@ enum Difficulty kDifficultyHard = 2, }; +enum InterfaceId +{ + kIIDMin = 0, + kIIDFactory = 1, + kIIDMax = 0xffffffff, +}; + /// Contains the ID of some important file types. namespace TypeIDs { diff --git a/Spore ModAPI/Spore/Editors/BakeManager.h b/Spore ModAPI/Spore/Editors/BakeManager.h index 087401fa..65bf09d0 100644 --- a/Spore ModAPI/Spore/Editors/BakeManager.h +++ b/Spore ModAPI/Spore/Editors/BakeManager.h @@ -20,6 +20,9 @@ #pragma once #include +#include +#include +#include /// Access the active bake manager. #define BakeManager (*Editors::IBakeManager::Get()) @@ -30,50 +33,1249 @@ namespace Editors { BakeParameters(int16_t field_04, int16_t field_06 = 4, uint32_t defaultID = 0x2EA8FB98); - uint32_t mDefaultID; - int16_t field_04; - int16_t field_06; + uint32_t mTag; + int16_t mFlag; + int16_t mPriority; + }; + + struct cBakeStats + { + int mQueuedBakes; + bool mCurrentlyBaking; + struct ResourceKey mCurrentKey; + int mNumBakes; + float mLastBakeTime; + float mAverageBakeTime; + int mNumCCFBakes; + float mTotalCCFTime; + float mLastCCFTime; + int mNumBVUBakes; + float mTotalBVUTime; + float mLastBVUTime; }; class IBakeManager { public: + static IBakeManager* Get(); + + /* 00h */ virtual int AddRef(); + /* 04h */ virtual void Release(); + /* 08h */ virtual bool Init(); + /* 0Ch */ virtual void Shutdown(); + /* 10h */ virtual void PreShutdown(); + /* 14h */ virtual void Update(); + /* 18h */ virtual bool IsBakingOrBaked(const ResourceKey& nameKey); + /* 1Ch */ virtual bool IsBaked(const ResourceKey& nameKey, bool param); + /* 20h */ virtual void SetQueueEnabled(bool QueueEnabled); + /* 24h */ virtual int GetQueueSize(uint32_t unk); //InterruptForEditorPaintRequest? + /* 28h */ virtual int GetQueueSize(); //FinishCreature? ReloadMuscleData? + /* 2Ch */ virtual bool GetCurrentKey(const ResourceKey& nameKey); + /* 30h */ virtual void GetQueue(eastl::vector>* unk);//Set swarm parameters? or HandleMessage? + /* 34h */ virtual bool IsBaking(uint32_t mTag); + /* 38h */ virtual bool IsBaking(const ResourceKey& nameKey, uint32_t mTag); + /* 3Ch */ virtual bool IsBaking(const ResourceKey& nameKey); + /* 40h */ virtual bool Cancel(uint32_t mTag); + /* 44h */ virtual bool Cancel(const ResourceKey& nameKey, uint32_t mTag); + /* 48h */ virtual bool Cancel(const ResourceKey& nameKey); + /* 4Ch */ virtual bool BakeModel(const ResourceKey& nameKey, const BakeParameters& params); + /* 50h */ virtual bool QueueBake(const ResourceKey& nameKey, const ResourceKey& nameKey2); + /* 54h */ virtual bool GetBlockApproximation(uint32_t mInstanceID, uint32_t mGroupID, float param3, int param4, Math::Vector3* BoundingBox, Math::Vector3* BoundingBox_upper); + /* 58h */ virtual App::PropertyList* GetBlockPropertyList(uint32_t instanceID, uint32_t groupID); + /* 5Ch */ virtual bool GetBlockRuntimeModelKey(uint32_t mInstanceID, uint32_t mGroupID, ResourceKey* nameKey); + /* 60h */ virtual Graphics::IModelWorld* GetCreatureModelWorld(); + /* 64h */ virtual bool InterruptForEditorPaintRequest(int paintRequest);//cPaintRequest* + /* 68h */ virtual bool TessellateSkin(int skin, float param2); //cSkinObject + /* 6Ch */ virtual bool GetTools(const ResourceKey& nameKey, int);//eastl::vector*); //TessellateSkinInternalSetup? + /* 70h */ virtual void PromoteToData(const ResourceKey& nameKey, bool param1, wchar_t* flag); + /* 74h */ virtual cBakeStats* GetBakeStats(); + /* 78h */ virtual wchar_t* GetStatsString(); - /* 00h */ virtual void func00h(); - /* 04h */ virtual void func04h(); - /* 08h */ virtual void func08h(); - /* 0Ch */ virtual void func0Ch(); - /* 10h */ virtual void func10h(); - /* 14h */ virtual void func14h(); - /* 18h */ virtual void func18h(); - /* 1Ch */ virtual void func1Ch(); - /* 20h */ virtual void func20h(); - /* 24h */ virtual void func24h(); - /* 28h */ virtual void func28h(); - /* 2Ch */ virtual void func2Ch(); - /* 30h */ virtual void func30h(); - /* 34h */ virtual void func34h(); - /* 38h */ virtual void func38h(); - /* 3Ch */ virtual void func3Ch(); - /* 40h */ virtual void func40h(); - /* 44h */ virtual void func44h(); - /* 48h */ virtual void func48h(); - /* 4Ch */ virtual void Bake(const ResourceKey& nameKey, const BakeParameters& params); - - // 60h returns IModelWorld + public: - static IBakeManager* Get(); + ///* 00h */ int field_00; + /* 04h */ int field_04; + /* 08h */ int field_08; + /* 0Ch */ int field_0C; + /* 10h */ int field_10; + /* 14h */ int field_14; + /* 18h */ int field_18; + /* 1Ch */ int field_1C; + /* 20h */ int field_20; + /* 24h */ int field_24; + /* 28h */ int field_28; + /* 2Ch */ int field_2C; + /* 30h */ int field_30; + /* 34h */ int field_34; + /* 38h */ int field_38; + /* 3Ch */ int field_3C; + /* 40h */ int field_40; + /* 44h */ int field_44; + /* 48h */ int field_48; + /* 4Ch */ int field_4C; + /* 50h */ int field_50; + /* 54h */ int field_54; + /* 58h */ int field_58; + /* 5Ch */ int field_5C; + /* 60h */ int field_60; + /* 64h */ int field_64; + /* 68h */ int field_68; + /* 6Ch */ int field_6C; + /* 70h */ int field_70; + /* 74h */ Graphics::IModelWorld* field_74; + /* 78h */ Graphics::IModelWorld* mIModelWorld; + /* 7Ch */ int field_7C; + /* 80h */ int field_80; + /* 84h */ int field_84; + /* 88h */ int field_88; + /* 8Ch */ int field_8C; + /* 90h */ int field_90; + /* 94h */ int field_94; + /* 98h */ int field_98; + /* 9Ch */ int field_9C; + /* A0h */ int field_A0; + /* A4h */ int field_A4; + /* A8h */ int field_A8; + /* ACh */ int field_AC; + /* B0h */ int field_B0; + /* B4h */ int field_B4; + /* B8h */ int field_B8; + /* BCh */ int field_BC; + /* C0h */ bool field_C0; + /* C1h */ bool field_C1; + /* C2h */ bool field_C2; + /* C3h */ bool field_C3; + /* C4h */ int field_C4; + /* C8h */ int field_C8; + /* CCh */ int field_CC; + /* D0h */ int field_D0; + /* D4h */ int field_D4; + /* D8h */ int field_D8; + /* DCh */ int field_DC; + /* E0h */ int field_E0; + /* E4h */ int field_E4; + /* E8h */ int field_E8; + /* ECh */ int field_EC; + /* F0h */ int field_F0; + /* F4h */ int field_F4; + /* F8h */ int field_F8; + /* FCh */ int field_FC; + /* 100h */ int field_100; + /* 104h */ int field_104; + /* 108h */ int field_108; + /* 10Ch */ int field_10C; + /* 110h */ int field_110; + /* 114h */ int field_114; + /* 118h */ int field_118; + /* 11Ch */ int field_11C; + /* 120h */ int field_120; + /* 124h */ int field_124; + /* 128h */ int field_128; + /* 12Ch */ int field_12C; + /* 130h */ int field_130; + /* 134h */ int field_134; + /* 138h */ int field_138; + /* 13Ch */ int field_13C; + /* 140h */ int field_140; + /* 144h */ int field_144; + /* 148h */ int field_148; + /* 14Ch */ int field_14C; + /* 150h */ int field_150; + /* 154h */ int field_154; + /* 158h */ int field_158; + /* 15Ch */ int field_15C; + /* 160h */ int field_160; + /* 164h */ int field_164; + /* 168h */ int field_168; + /* 16Ch */ int field_16C; + /* 170h */ int field_170; + /* 174h */ int field_174; + /* 178h */ int field_178; + /* 17Ch */ int field_17C; + /* 180h */ int field_180; + /* 184h */ int field_184; + /* 188h */ int field_188; + /* 18Ch */ int field_18C; + /* 190h */ int field_190; + /* 194h */ int field_194; + /* 198h */ int field_198; + /* 19Ch */ int field_19C; + /* 1A0h */ int field_1A0; + /* 1A4h */ int field_1A4; + /* 1A8h */ int field_1A8; + /* 1ACh */ int field_1AC; + /* 1B0h */ int field_1B0; + /* 1B4h */ int field_1B4; + /* 1B8h */ int field_1B8; + /* 1BCh */ int field_1BC; + /* 1C0h */ int field_1C0; + /* 1C4h */ int field_1C4; + /* 1C8h */ int field_1C8; + /* 1CCh */ int field_1CC; + /* 1D0h */ int field_1D0; + /* 1D4h */ int field_1D4; + /* 1D8h */ int field_1D8; + /* 1DCh */ int field_1DC; + /* 1E0h */ int field_1E0; + /* 1E4h */ int field_1E4; + /* 1E8h */ int field_1E8; + /* 1ECh */ int field_1EC; + /* 1F0h */ int field_1F0; + /* 1F4h */ int field_1F4; + /* 1F8h */ int field_1F8; + /* 1FCh */ int field_1FC; + /* 200h */ int field_200; + /* 204h */ int field_204; + /* 208h */ int field_208; + /* 20Ch */ int field_20C; + /* 210h */ int field_210; + /* 214h */ int field_214; + /* 218h */ int field_218; + /* 21Ch */ int field_21C; + /* 220h */ int field_220; + /* 224h */ int field_224; + /* 228h */ ResourceKey mBakeCreation; + /* 234h */ BakeParameters mBakeParameters; + /* 23Ch */ int field_23C; + /* 240h */ int field_240; + /* 244h */ int field_244; + /* 248h */ int field_248; + /* 24Ch */ int field_24C; + /* 250h */ int field_250; + /* 254h */ int field_254; + /* 258h */ bool field_258; + /* 259h */ bool field_259; + /* 25Ah */ bool field_25A; + /* 25Bh */ bool field_25B; + /* 25Ch */ int field_25C; + /* 260h */ int field_260; + /* 264h */ int field_264; + /* 268h */ int field_268; + /* 26Ch */ int field_26C; + /* 270h */ int field_270; + /* 274h */ int field_274; + /* 278h */ int field_278; + /* 27Ch */ int field_27C; + /* 280h */ int field_280; + /* 284h */ int field_284; + /* 288h */ int field_288; + /* 28Ch */ int field_28C; + /* 290h */ int field_290; + /* 294h */ int field_294; + /* 298h */ int field_298; + /* 29Ch */ int field_29C; + /* 2A0h */ int field_2A0; + /* 2A4h */ int field_2A4; + /* 2A8h */ int field_2A8; + /* 2ACh */ int field_2AC; + /* 2B0h */ int field_2B0; + /* 2B4h */ int field_2B4; + /* 2B8h */ int field_2B8; + /* 2BCh */ int field_2BC; + /* 2C0h */ int field_2C0; + /* 2C4h */ int field_2C4; + /* 2C8h */ int field_2C8; + /* 2CCh */ int field_2CC; + /* 2D0h */ int field_2D0; + /* 2D4h */ int field_2D4; + /* 2D8h */ int field_2D8; + /* 2DCh */ int field_2DC; + /* 2E0h */ int field_2E0; + /* 2E4h */ int field_2E4; + /* 2E8h */ int field_2E8; + /* 2ECh */ int field_2EC; + /* 2F0h */ int field_2F0; + /* 2F4h */ int field_2F4; + /* 2F8h */ int field_2F8; + /* 2FCh */ int field_2FC; + /* 300h */ int field_300; + /* 304h */ int field_304; + /* 308h */ int field_308; + /* 30Ch */ int field_30C; + /* 310h */ int field_310; + /* 314h */ int field_314; + /* 318h */ int field_318; + /* 31Ch */ int field_31C; + /* 320h */ int field_320; + /* 324h */ int field_324; + /* 328h */ int field_328; + /* 32Ch */ int field_32C; + /* 330h */ int field_330; + /* 334h */ int field_334; + /* 338h */ int field_338; + /* 33Ch */ int field_33C; + /* 340h */ int field_340; + /* 344h */ int field_344; + /* 348h */ int field_348; + /* 34Ch */ int field_34C; + /* 350h */ int field_350; + /* 354h */ int field_354; + /* 358h */ int field_358; + /* 35Ch */ int field_35C; + /* 360h */ int field_360; + /* 364h */ int field_364; + /* 368h */ int field_368; + /* 36Ch */ int field_36C; + /* 370h */ int field_370; + /* 374h */ int field_374; + /* 378h */ int field_378; + /* 37Ch */ int field_37C; + /* 380h */ int field_380; + /* 384h */ int field_384; + /* 388h */ int field_388; + /* 38Ch */ int field_38C; + /* 390h */ int field_390; + /* 394h */ int field_394; + /* 398h */ int field_398; + /* 39Ch */ int field_39C; + /* 3A0h */ int field_3A0; + /* 3A4h */ int field_3A4; + /* 3A8h */ int field_3A8; + /* 3ACh */ int field_3AC; + /* 3B0h */ int field_3B0; + /* 3B4h */ int field_3B4; + /* 3B8h */ int field_3B8; + /* 3BCh */ int field_3BC; + /* 3C0h */ int field_3C0; + /* 3C4h */ int field_3C4; + /* 3C8h */ int field_3C8; + /* 3CCh */ int field_3CC; + /* 3D0h */ int field_3D0; + /* 3D4h */ int field_3D4; + /* 3D8h */ int field_3D8; + /* 3DCh */ int field_3DC; + /* 3E0h */ int field_3E0; + /* 3E4h */ int field_3E4; + /* 3E8h */ int field_3E8; + /* 3ECh */ int field_3EC; + /* 3F0h */ int field_3F0; + /* 3F4h */ int field_3F4; + /* 3F8h */ int field_3F8; + /* 3FCh */ int field_3FC; + /* 400h */ int field_400; + /* 404h */ int field_404; + /* 408h */ int field_408; + /* 40Ch */ int field_40C; + /* 410h */ int field_410; + /* 414h */ int field_414; + /* 418h */ int field_418; + /* 41Ch */ int field_41C; + /* 420h */ int field_420; + /* 424h */ int field_424; + /* 428h */ int field_428; + /* 42Ch */ int field_42C; + /* 430h */ int field_430; + /* 434h */ int field_434; + /* 438h */ int field_438; + /* 43Ch */ int field_43C; + /* 440h */ int field_440; + /* 444h */ int field_444; + /* 448h */ int field_448; + /* 44Ch */ int field_44C; + /* 450h */ int field_450; + /* 454h */ int field_454; + /* 458h */ int field_458; + /* 45Ch */ int field_45C; + /* 460h */ int field_460; + /* 464h */ int field_464; + /* 468h */ int field_468; + /* 46Ch */ int field_46C; + /* 470h */ int field_470; + /* 474h */ int field_474; + /* 478h */ int field_478; + /* 47Ch */ int field_47C; + /* 480h */ int field_480; + /* 484h */ int field_484; + /* 488h */ int field_488; + /* 48Ch */ int field_48C; + /* 490h */ int field_490; + /* 494h */ int field_494; + /* 498h */ int field_498; + /* 49Ch */ int field_49C; + /* 4A0h */ int field_4A0; + /* 4A4h */ int field_4A4; + /* 4A8h */ int field_4A8; + /* 4ACh */ int field_4AC; + /* 4B0h */ int field_4B0; + /* 4B4h */ int field_4B4; + /* 4B8h */ int field_4B8; + /* 4BCh */ int field_4BC; + /* 4C0h */ int field_4C0; + /* 4C4h */ int field_4C4; + /* 4C8h */ int field_4C8; + /* 4CCh */ int field_4CC; + /* 4D0h */ int field_4D0; + /* 4D4h */ int field_4D4; + /* 4D8h */ int field_4D8; + /* 4DCh */ int field_4DC; + /* 4E0h */ int field_4E0; + /* 4E4h */ int field_4E4; + /* 4E8h */ int field_4E8; + /* 4ECh */ int field_4EC; + /* 4F0h */ int field_4F0; + /* 4F4h */ int field_4F4; + /* 4F8h */ int field_4F8; + /* 4FCh */ int field_4FC; + /* 500h */ int field_500; + /* 504h */ int field_504; + /* 508h */ int field_508; + /* 50Ch */ int field_50C; + /* 510h */ int field_510; + /* 514h */ int field_514; + /* 518h */ int field_518; + /* 51Ch */ int field_51C; + /* 520h */ int field_520; + /* 524h */ int field_524; + /* 528h */ int field_528; + /* 52Ch */ int field_52C; + /* 530h */ int field_530; + /* 534h */ int field_534; + /* 538h */ int field_538; + /* 53Ch */ int field_53C; + /* 540h */ int field_540; + /* 544h */ int field_544; + /* 548h */ int field_548; + /* 54Ch */ int field_54C; + /* 550h */ int field_550; + /* 554h */ int field_554; + /* 558h */ int field_558; + /* 55Ch */ int field_55C; + /* 560h */ int field_560; + /* 564h */ int field_564; + /* 568h */ int field_568; + /* 56Ch */ int field_56C; + /* 570h */ int field_570; + /* 574h */ int field_574; + /* 578h */ int field_578; + /* 57Ch */ int field_57C; + /* 580h */ int field_580; + /* 584h */ int field_584; + /* 588h */ int field_588; + /* 58Ch */ int field_58C; + /* 590h */ int field_590; + /* 594h */ int field_594; + /* 598h */ int field_598; + /* 59Ch */ int field_59C; + /* 5A0h */ int field_5A0; + /* 5A4h */ int field_5A4; + /* 5A8h */ int field_5A8; + /* 5ACh */ int field_5AC; + /* 5B0h */ int field_5B0; + /* 5B4h */ int field_5B4; + /* 5B8h */ int field_5B8; + /* 5BCh */ int field_5BC; + /* 5C0h */ int field_5C0; + /* 5C4h */ int field_5C4; + /* 5C8h */ int field_5C8; + /* 5CCh */ int field_5CC; + /* 5D0h */ int field_5D0; + /* 5D4h */ int field_5D4; + /* 5D8h */ int field_5D8; + /* 5DCh */ int field_5DC; + /* 5E0h */ int field_5E0; + /* 5E4h */ int field_5E4; + /* 5E8h */ int field_5E8; + /* 5ECh */ int field_5EC; + /* 5F0h */ int field_5F0; + /* 5F4h */ int field_5F4; + /* 5F8h */ int field_5F8; + /* 5FCh */ int field_5FC; + /* 600h */ int field_600; + /* 604h */ int field_604; + /* 608h */ int field_608; + /* 60Ch */ int field_60C; + /* 610h */ int field_610; + /* 614h */ int field_614; + /* 618h */ int field_618; + /* 61Ch */ int field_61C; + /* 620h */ int field_620; + /* 624h */ int field_624; + /* 628h */ int field_628; + /* 62Ch */ int field_62C; + /* 630h */ int field_630; + /* 634h */ int field_634; + /* 638h */ int field_638; + /* 63Ch */ int field_63C; + /* 640h */ int field_640; + /* 644h */ int field_644; + /* 648h */ int field_648; + /* 64Ch */ int field_64C; + /* 650h */ int field_650; + /* 654h */ int field_654; + /* 658h */ int field_658; + /* 65Ch */ int field_65C; + /* 660h */ int field_660; + /* 664h */ int field_664; + /* 668h */ int field_668; + /* 66Ch */ int field_66C; + /* 670h */ int field_670; + /* 674h */ int field_674; + /* 678h */ int field_678; + /* 67Ch */ int field_67C; + /* 680h */ int field_680; + /* 684h */ int field_684; + /* 688h */ int field_688; + /* 68Ch */ int field_68C; + /* 690h */ int field_690; + /* 694h */ int field_694; + /* 698h */ int field_698; + /* 69Ch */ int field_69C; + /* 6A0h */ int field_6A0; + /* 6A4h */ int field_6A4; + /* 6A8h */ int field_6A8; + /* 6ACh */ int field_6AC; + /* 6B0h */ int field_6B0; + /* 6B4h */ int field_6B4; + /* 6B8h */ int field_6B8; + /* 6BCh */ int field_6BC; + /* 6C0h */ int field_6C0; + /* 6C4h */ int field_6C4; + /* 6C8h */ int field_6C8; + /* 6CCh */ int field_6CC; + /* 6D0h */ int field_6D0; + /* 6D4h */ int field_6D4; + /* 6D8h */ int field_6D8; + /* 6DCh */ int field_6DC; + /* 6E0h */ int field_6E0; + /* 6E4h */ int field_6E4; + /* 6E8h */ int field_6E8; + /* 6ECh */ int field_6EC; + /* 6F0h */ int field_6F0; + /* 6F4h */ int field_6F4; + /* 6F8h */ int field_6F8; + /* 6FCh */ int field_6FC; + /* 700h */ int field_700; + /* 704h */ int field_704; + /* 708h */ int field_708; + /* 70Ch */ int field_70C; + /* 710h */ int field_710; + /* 714h */ int field_714; + /* 718h */ int field_718; + /* 71Ch */ int field_71C; + /* 720h */ int field_720; + /* 724h */ int field_724; + /* 728h */ int field_728; + /* 72Ch */ int field_72C; + /* 730h */ int field_730; + /* 734h */ int field_734; + /* 738h */ int field_738; + /* 73Ch */ int field_73C; + /* 740h */ int field_740; + /* 744h */ int field_744; + /* 748h */ int field_748; + /* 74Ch */ int field_74C; + /* 750h */ int field_750; + /* 754h */ int field_754; + /* 758h */ int field_758; + /* 75Ch */ int field_75C; + /* 760h */ int field_760; + /* 764h */ int field_764; + /* 768h */ int field_768; + /* 76Ch */ int field_76C; + /* 770h */ int field_770; + /* 774h */ int field_774; + /* 778h */ int field_778; + /* 77Ch */ int field_77C; + /* 780h */ int field_780; + /* 784h */ int field_784; + /* 788h */ int field_788; + /* 78Ch */ int field_78C; + /* 790h */ int field_790; + /* 794h */ int field_794; + /* 798h */ int field_798; + /* 79Ch */ int field_79C; + /* 7A0h */ int field_7A0; + /* 7A4h */ int field_7A4; + /* 7A8h */ int field_7A8; + /* 7ACh */ int field_7AC; + /* 7B0h */ int field_7B0; + /* 7B4h */ int field_7B4; + /* 7B8h */ int field_7B8; + /* 7BCh */ int field_7BC; + /* 7C0h */ int field_7C0; + /* 7C4h */ int field_7C4; + /* 7C8h */ int field_7C8; + /* 7CCh */ int field_7CC; + /* 7D0h */ int field_7D0; + /* 7D4h */ int field_7D4; + /* 7D8h */ int field_7D8; + /* 7DCh */ int field_7DC; + /* 7E0h */ int field_7E0; + /* 7E4h */ int field_7E4; + /* 7E8h */ int field_7E8; + /* 7ECh */ int field_7EC; + /* 7F0h */ int field_7F0; + /* 7F4h */ int field_7F4; + /* 7F8h */ int field_7F8; + /* 7FCh */ int field_7FC; + /* 800h */ int field_800; + /* 804h */ int field_804; + /* 808h */ int field_808; + /* 80Ch */ int field_80C; + /* 810h */ int field_810; + /* 814h */ int field_814; + /* 818h */ int field_818; + /* 81Ch */ int field_81C; + /* 820h */ int field_820; + /* 824h */ int field_824; + /* 828h */ int field_828; + /* 82Ch */ int field_82C; + /* 830h */ int field_830; + /* 834h */ int field_834; + /* 838h */ int field_838; + /* 83Ch */ int field_83C; + /* 840h */ int field_840; + /* 844h */ int field_844; + /* 848h */ int field_848; + /* 84Ch */ int field_84C; + /* 850h */ int field_850; + /* 854h */ int field_854; + /* 858h */ int field_858; + /* 85Ch */ int field_85C; + /* 860h */ int field_860; + /* 864h */ int field_864; + /* 868h */ int field_868; + /* 86Ch */ int field_86C; + /* 870h */ int field_870; + /* 874h */ int field_874; + /* 878h */ int field_878; + /* 87Ch */ int field_87C; + /* 880h */ int field_880; + /* 884h */ int field_884; + /* 888h */ int field_888; + /* 88Ch */ int field_88C; + /* 890h */ int field_890; + /* 894h */ int field_894; + /* 898h */ int field_898; + /* 89Ch */ int field_89C; + /* 8A0h */ int field_8A0; + /* 8A4h */ int field_8A4; + /* 8A8h */ int field_8A8; + /* 8ACh */ int field_8AC; + /* 8B0h */ int field_8B0; + /* 8B4h */ int field_8B4; + /* 8B8h */ int field_8B8; + /* 8BCh */ int field_8BC; + /* 8C0h */ int field_8C0; + /* 8C4h */ int field_8C4; + /* 8C8h */ int field_8C8; + /* 8CCh */ int field_8CC; + /* 8D0h */ int field_8D0; + /* 8D4h */ int field_8D4; + /* 8D8h */ int field_8D8; + /* 8DCh */ int field_8DC; + /* 8E0h */ int field_8E0; + /* 8E4h */ int field_8E4; + /* 8E8h */ int field_8E8; + /* 8ECh */ int field_8EC; + /* 8F0h */ int field_8F0; + /* 8F4h */ int field_8F4; + /* 8F8h */ int field_8F8; + /* 8FCh */ int field_8FC; + /* 900h */ int field_900; + /* 904h */ int field_904; + /* 908h */ int field_908; + /* 90Ch */ int field_90C; + /* 910h */ int field_910; + /* 914h */ int field_914; + /* 918h */ int field_918; + /* 91Ch */ int field_91C; + /* 920h */ int field_920; + /* 924h */ int field_924; + /* 928h */ int field_928; + /* 92Ch */ int field_92C; + /* 930h */ int field_930; + /* 934h */ int field_934; + /* 938h */ int field_938; + /* 93Ch */ int field_93C; + /* 940h */ int field_940; + /* 944h */ int field_944; + /* 948h */ int field_948; + /* 94Ch */ int field_94C; + /* 950h */ int field_950; + /* 954h */ int field_954; + /* 958h */ int field_958; + /* 95Ch */ int field_95C; + /* 960h */ int field_960; + /* 964h */ int field_964; + /* 968h */ int field_968; + /* 96Ch */ int field_96C; + /* 970h */ int field_970; + /* 974h */ int field_974; + /* 978h */ int field_978; + /* 97Ch */ int field_97C; + /* 980h */ int field_980; + /* 984h */ int field_984; + /* 988h */ int field_988; + /* 98Ch */ int field_98C; + /* 990h */ int field_990; + /* 994h */ int field_994; + /* 998h */ int field_998; + /* 99Ch */ int field_99C; + /* 9A0h */ int field_9A0; + /* 9A4h */ int field_9A4; + /* 9A8h */ int field_9A8; + /* 9ACh */ int field_9AC; + /* 9B0h */ int field_9B0; + /* 9B4h */ int field_9B4; + /* 9B8h */ int field_9B8; + /* 9BCh */ int field_9BC; + /* 9C0h */ int field_9C0; + /* 9C4h */ int field_9C4; + /* 9C8h */ int field_9C8; + /* 9CCh */ int field_9CC; + /* 9D0h */ int field_9D0; + /* 9D4h */ int field_9D4; + /* 9D8h */ int field_9D8; + /* 9DCh */ int field_9DC; + /* 9E0h */ int field_9E0; + /* 9E4h */ int field_9E4; + /* 9E8h */ int field_9E8; + /* 9ECh */ int field_9EC; + /* 9F0h */ int field_9F0; + /* 9F4h */ int field_9F4; + /* 9F8h */ int field_9F8; + /* 9FCh */ int field_9FC; + /* A00h */ int field_A00; + /* A04h */ int field_A04; + /* A08h */ int field_A08; + /* A0Ch */ int field_A0C; + /* A10h */ int field_A10; + /* A14h */ int field_A14; + /* A18h */ int field_A18; + /* A1Ch */ int field_A1C; + /* A20h */ int field_A20; + /* A24h */ int field_A24; + /* A28h */ int field_A28; + /* A2Ch */ int field_A2C; + /* A30h */ int field_A30; + /* A34h */ int field_A34; + /* A38h */ int field_A38; + /* A3Ch */ int field_A3C; + /* A40h */ int field_A40; + /* A44h */ int field_A44; + /* A48h */ int field_A48; + /* A4Ch */ int field_A4C; + /* A50h */ int field_A50; + /* A54h */ int field_A54; + /* A58h */ int field_A58; + /* A5Ch */ int field_A5C; + /* A60h */ int field_A60; + /* A64h */ int field_A64; + /* A68h */ int field_A68; + /* A6Ch */ int field_A6C; + /* A70h */ int field_A70; + /* A74h */ int field_A74; + /* A78h */ int field_A78; + /* A7Ch */ int field_A7C; + /* A80h */ int field_A80; + /* A84h */ int field_A84; + /* A88h */ int field_A88; + /* A8Ch */ int field_A8C; + /* A90h */ int field_A90; + /* A94h */ int field_A94; + /* A98h */ int field_A98; + /* A9Ch */ int field_A9C; + /* AA0h */ int field_AA0; + /* AA4h */ int field_AA4; + /* AA8h */ int field_AA8; + /* AACh */ int field_AAC; + /* AB0h */ int field_AB0; + /* AB4h */ int field_AB4; + /* AB8h */ int field_AB8; + /* ABCh */ int field_ABC; + /* AC0h */ int field_AC0; + /* AC4h */ int field_AC4; + /* AC8h */ int field_AC8; + /* ACCh */ int field_ACC; + /* AD0h */ int field_AD0; + /* AD4h */ int field_AD4; + /* AD8h */ int field_AD8; + /* ADCh */ int field_ADC; + /* AE0h */ int field_AE0; + /* AE4h */ int field_AE4; + /* AE8h */ int field_AE8; + /* AECh */ int field_AEC; + /* AF0h */ int field_AF0; + /* AF4h */ int field_AF4; + /* AF8h */ int field_AF8; + /* AFCh */ int field_AFC; + /* B00h */ int field_B00; + /* B04h */ int field_B04; + /* B08h */ int field_B08; + /* B0Ch */ int field_B0C; + /* B10h */ int field_B10; + /* B14h */ int field_B14; + /* B18h */ int field_B18; + /* B1Ch */ int field_B1C; + /* B20h */ int field_B20; + /* B24h */ int field_B24; + /* B28h */ int field_B28; + /* B2Ch */ int field_B2C; + /* B30h */ int field_B30; + /* B34h */ int field_B34; + /* B38h */ int field_B38; + /* B3Ch */ int field_B3C; + /* B40h */ int field_B40; + /* B44h */ int field_B44; + /* B48h */ int field_B48; + /* B4Ch */ int field_B4C; + /* B50h */ int field_B50; + /* B54h */ int field_B54; + /* B58h */ int field_B58; + /* B5Ch */ int field_B5C; + /* B60h */ int field_B60; + /* B64h */ int field_B64; + /* B68h */ int field_B68; + /* B6Ch */ int field_B6C; + /* B70h */ int field_B70; + /* B74h */ int field_B74; + /* B78h */ int field_B78; + /* B7Ch */ int field_B7C; + /* B80h */ int field_B80; + /* B84h */ int field_B84; + /* B88h */ int field_B88; + /* B8Ch */ int field_B8C; + /* B90h */ int field_B90; + /* B94h */ int field_B94; + /* B98h */ int field_B98; + /* B9Ch */ int field_B9C; + /* BA0h */ int field_BA0; + /* BA4h */ int field_BA4; + /* BA8h */ int field_BA8; + /* BACh */ int field_BAC; + /* BB0h */ int field_BB0; + /* BB4h */ int field_BB4; + /* BB8h */ int field_BB8; + /* BBCh */ int field_BBC; + /* BC0h */ int field_BC0; + /* BC4h */ int field_BC4; + /* BC8h */ int field_BC8; + /* BCCh */ int field_BCC; + /* BD0h */ int field_BD0; + /* BD4h */ int field_BD4; + /* BD8h */ int field_BD8; + /* BDCh */ int field_BDC; + /* BE0h */ int field_BE0; + /* BE4h */ int field_BE4; + /* BE8h */ int field_BE8; + /* BECh */ int field_BEC; + /* BF0h */ int field_BF0; + /* BF4h */ int field_BF4; + /* BF8h */ int field_BF8; + /* BFCh */ int field_BFC; + /* C00h */ int field_C00; + /* C04h */ int field_C04; + /* C08h */ int field_C08; + /* C0Ch */ int field_C0C; + /* C10h */ int field_C10; + /* C14h */ int field_C14; + /* C18h */ int field_C18; + /* C1Ch */ int field_C1C; + /* C20h */ int field_C20; + /* C24h */ int field_C24; + /* C28h */ int field_C28; + /* C2Ch */ int field_C2C; + /* C30h */ int field_C30; + /* C34h */ int field_C34; + /* C38h */ int field_C38; + /* C3Ch */ int field_C3C; + /* C40h */ int field_C40; + /* C44h */ int field_C44; + /* C48h */ int field_C48; + /* C4Ch */ int field_C4C; + /* C50h */ int field_C50; + /* C54h */ int field_C54; + /* C58h */ int field_C58; + /* C5Ch */ int field_C5C; + /* C60h */ int field_C60; + /* C64h */ int field_C64; + /* C68h */ int field_C68; + /* C6Ch */ int field_C6C; + /* C70h */ int field_C70; + /* C74h */ int field_C74; + /* C78h */ int field_C78; + /* C7Ch */ int field_C7C; + /* C80h */ int field_C80; + /* C84h */ int field_C84; + /* C88h */ int field_C88; + /* C8Ch */ int field_C8C; + /* C90h */ int field_C90; + /* C94h */ int field_C94; + /* C98h */ int field_C98; + /* C9Ch */ int field_C9C; + /* CA0h */ int field_CA0; + /* CA4h */ int field_CA4; + /* CA8h */ int field_CA8; + /* CACh */ int field_CAC; + /* CB0h */ int field_CB0; + /* CB4h */ int field_CB4; + /* CB8h */ int field_CB8; + /* CBCh */ int field_CBC; + /* CC0h */ int field_CC0; + /* CC4h */ int field_CC4; + /* CC8h */ int field_CC8; + /* CCCh */ int field_CCC; + /* CD0h */ int field_CD0; + /* CD4h */ int field_CD4; + /* CD8h */ int field_CD8; + /* CDCh */ int field_CDC; + /* CE0h */ int field_CE0; + /* CE4h */ int field_CE4; + /* CE8h */ int field_CE8; + /* CECh */ int field_CEC; + /* CF0h */ int field_CF0; + /* CF4h */ int field_CF4; + /* CF8h */ int field_CF8; + /* CFCh */ int field_CFC; + /* D00h */ int field_D00; + /* D04h */ int field_D04; + /* D08h */ int field_D08; + /* D0Ch */ int field_D0C; + /* D10h */ int field_D10; + /* D14h */ int field_D14; + /* D18h */ int field_D18; + /* D1Ch */ int field_D1C; + /* D20h */ int field_D20; + /* D24h */ int field_D24; + /* D28h */ int field_D28; + /* D2Ch */ int field_D2C; + /* D30h */ int field_D30; + /* D34h */ int field_D34; + /* D38h */ int field_D38; + /* D3Ch */ int field_D3C; + /* D40h */ int field_D40; + /* D44h */ int field_D44; + /* D48h */ int field_D48; + /* D4Ch */ int field_D4C; + /* D50h */ int field_D50; + /* D54h */ int field_D54; + /* D58h */ int field_D58; + /* D5Ch */ int field_D5C; + /* D60h */ int field_D60; + /* D64h */ int field_D64; + /* D68h */ int field_D68; + /* D6Ch */ int field_D6C; + /* D70h */ int field_D70; + /* D74h */ int field_D74; + /* D78h */ int field_D78; + /* D7Ch */ int field_D7C; + /* D80h */ int field_D80; + /* D84h */ int field_D84; + /* D88h */ int field_D88; + /* D8Ch */ int field_D8C; + /* D90h */ int field_D90; + /* D94h */ int field_D94; + /* D98h */ int field_D98; + /* D9Ch */ int field_D9C; + /* DA0h */ int field_DA0; + /* DA4h */ int field_DA4; + /* DA8h */ int field_DA8; + /* DACh */ int field_DAC; + /* DB0h */ int field_DB0; + /* DB4h */ int field_DB4; + /* DB8h */ int field_DB8; + /* DBCh */ int field_DBC; + /* DC0h */ int field_DC0; + /* DC4h */ int field_DC4; + /* DC8h */ int field_DC8; + /* DCCh */ int field_DCC; + /* DD0h */ int field_DD0; + /* DD4h */ int field_DD4; + /* DD8h */ int field_DD8; + /* DDCh */ int field_DDC; + /* DE0h */ int field_DE0; + /* DE4h */ int field_DE4; + /* DE8h */ int field_DE8; + /* DECh */ int field_DEC; + /* DF0h */ int field_DF0; + /* DF4h */ int field_DF4; + /* DF8h */ int field_DF8; + /* DFCh */ int field_DFC; + /* E00h */ int field_E00; + /* E04h */ int field_E04; + /* E08h */ int field_E08; + /* E0Ch */ int field_E0C; + /* E10h */ int field_E10; + /* E14h */ int field_E14; + /* E18h */ int field_E18; + /* E1Ch */ int field_E1C; + /* E20h */ int field_E20; + /* E24h */ int field_E24; + /* E28h */ int field_E28; + /* E2Ch */ int field_E2C; + /* E30h */ int field_E30; + /* E34h */ int field_E34; + /* E38h */ int field_E38; + /* E3Ch */ int field_E3C; + /* E40h */ int field_E40; + /* E44h */ int field_E44; + /* E48h */ int field_E48; + /* E4Ch */ int field_E4C; + /* E50h */ int field_E50; + /* E54h */ int field_E54; + /* E58h */ int field_E58; + /* E5Ch */ int field_E5C; + /* E60h */ int field_E60; + /* E64h */ int field_E64; + /* E68h */ int field_E68; + /* E6Ch */ int field_E6C; + /* E70h */ int field_E70; + /* E74h */ int field_E74; + /* E78h */ int field_E78; + /* E7Ch */ int field_E7C; + /* E80h */ int field_E80; + /* E84h */ int field_E84; + /* E88h */ int field_E88; + /* E8Ch */ int field_E8C; + /* E90h */ int field_E90; + /* E94h */ int field_E94; + /* E98h */ int field_E98; + /* E9Ch */ int field_E9C; + /* EA0h */ int field_EA0; + /* EA4h */ int field_EA4; + /* EA8h */ int field_EA8; + /* EACh */ int field_EAC; + /* EB0h */ int field_EB0; + /* EB4h */ int field_EB4; + /* EB8h */ int field_EB8; + /* EBCh */ int field_EBC; + /* EC0h */ int field_EC0; + /* EC4h */ int field_EC4; + /* EC8h */ int field_EC8; + /* ECCh */ int field_ECC; + /* ED0h */ int field_ED0; + /* ED4h */ int field_ED4; + /* ED8h */ int field_ED8; + /* EDCh */ int field_EDC; + /* EE0h */ int field_EE0; + /* EE4h */ int field_EE4; + /* EE8h */ int field_EE8; + /* EECh */ int field_EEC; + /* EF0h */ int field_EF0; + /* EF4h */ int field_EF4; + /* EF8h */ int field_EF8; + /* EFCh */ int field_EFC; + /* F00h */ int field_F00; + /* F04h */ int field_F04; + /* F08h */ int field_F08; + /* F0Ch */ int field_F0C; + /* F10h */ int field_F10; + /* F14h */ int field_F14; + /* F18h */ int field_F18; + /* F1Ch */ int field_F1C; + /* F20h */ int field_F20; + /* F24h */ int field_F24; + /* F28h */ int field_F28; + /* F2Ch */ int field_F2C; + /* F30h */ int field_F30; + /* F34h */ int field_F34; + /* F38h */ int field_F38; + /* F3Ch */ int field_F3C; + /* F40h */ int field_F40; + /* F44h */ int field_F44; + /* F48h */ int field_F48; + /* F4Ch */ int field_F4C; + /* F50h */ int field_F50; + /* F54h */ int field_F54; + /* F58h */ int field_F58; + /* F5Ch */ int field_F5C; + /* F60h */ int field_F60; + /* F64h */ int field_F64; + /* F68h */ int field_F68; + /* F6Ch */ int field_F6C; + /* F70h */ int field_F70; + /* F74h */ int field_F74; + /* F78h */ int field_F78; + /* F7Ch */ int field_F7C; + /* F80h */ int field_F80; + /* F84h */ int field_F84; + /* F88h */ int field_F88; + /* F8Ch */ int field_F8C; + /* F90h */ int field_F90; + /* F94h */ int field_F94; + /* F98h */ int field_F98; + /* F9Ch */ int field_F9C; + /* FA0h */ int field_FA0; + /* FA4h */ int field_FA4; + /* FA8h */ int field_FA8; + /* FACh */ int field_FAC; + /* FB0h */ int field_FB0; + /* FB4h */ int field_FB4; + /* FB8h */ int field_FB8; + /* FBCh */ int field_FBC; + /* FC0h */ int field_FC0; + /* FC4h */ int field_FC4; + /* FC8h */ int field_FC8; + /* FCCh */ int field_FCC; + /* FD0h */ int field_FD0; + /* FD4h */ int field_FD4; + /* FD8h */ int field_FD8; + /* FDCh */ int field_FDC; + /* FE0h */ int field_FE0; + /* FE4h */ int field_FE4; + /* FE8h */ int field_FE8; + /* FECh */ int field_FEC; + /* FF0h */ int field_FF0; + /* FF4h */ int field_FF4; + /* FF8h */ int field_FF8; + /* FFCh */ int field_FFC; + /* 1000h */ int field_1000; + /* 1004h */ int field_1004; + /* 1008h */ ResourceKey field_1008; + /* 1014h */ int field_1014; + /* 1018h */ int field_1018; + /* 101Ch */ int field_101C; + /* 1020h */ int field_1020; + /* 1024h */ int field_1024; + /* 1028h */ int field_1028; + /* 102Ch */ int field_102C; + /* 1030h */ int field_1030; + /* 1034h */ int field_1034; + /* 1038h */ int field_1038; + /* 103Ch */ int field_103C; + /* 1040h */ int field_1040; + /* 1044h */ int field_1044; + /* 1048h */ int field_1048; + /* 104Ch */ int field_104C; + /* 1050h */ int field_1050; + /* 1054h */ int field_1054; + /* 1058h */ int field_1058; + /* 105Ch */ int field_105C; + /* 1060h */ int field_1060; + /* 1064h */ int field_1064; + /* 1068h */ int field_1068; + /* 106Ch */ int field_106C; + /* 1070h */ int field_1070; + /* 1074h */ int field_1074; + /* 1078h */ int field_1078; + /* 107Ch */ int field_107C; + /* 1080h */ int field_1080; + /* 1084h */ int field_1084; + /* 1088h */ int field_1088; + /* 108Ch */ int field_108C; + /* 1090h */ int field_1090; + /* 1094h */ int field_1094; + /* 1098h */ int field_1098; + /* 109Ch */ int field_109C; + /* 10A0h */ int field_10A0; + /* 10A4h */ int field_10A4; + /* 10A8h */ int field_10A8; + /* 10ACh */ int field_10AC; + /* 10B0h */ int field_10B0; + /* 10B4h */ int field_10B4; + /* 10B8h */ int field_10B8; + /* 10BCh */ int field_10BC; + /* 10C0h */ int field_10C0; + /* 10C4h */ int field_10C4; + /* 10C8h */ int field_10C8; + /* 10CCh */ int field_10CC; + /* 10D0h */ int field_10D0; + /* 10D4h */ int field_10D4; + /* 10D8h */ int field_10D8; + /* 10DCh */ int field_10DC; + /* 10E0h */ int field_10E0; + /* 10E4h */ int field_10E4; + /* 10E8h */ int field_10E8; + /* 10ECh */ int field_10EC; + /* 10F0h */ int field_10F0; + /* 10F4h */ int field_10F4; + /* 10F8h */ int field_10F8; + /* 10FCh */ int field_10FC; + /* 1100h */ int field_1100; + /* 1104h */ int field_1104; + /* 1108h */ int field_1108; + /* 110Ch */ int field_110C; + /* 1110h */ int field_1110; + /* 1114h */ int field_1114; + /* 1118h */ int field_1118; + /* 111Ch */ int field_111C; + /* 1120h */ int field_1120; + /* 1124h */ int field_1124; + /* 1128h */ int field_1128; + /* 112Ch */ int field_112C; + /* 1130h */ int field_1130; + /* 1134h */ int field_1134; + /* 1138h */ int field_1138; + /* 113Ch */ int field_113C; + /* 1140h */ int field_1140; + /* 1144h */ int field_1144; + /* 1148h */ int field_1148; + /* 114Ch */ int field_114C; + /* 1150h */ int field_1150; + /* 1154h */ int field_1154; + /* 1158h */ int field_1158; + /* 115Ch */ int field_115C; + /* 1160h */ int field_1160; + /* 1164h */ int field_1164; + /* 1168h */ int field_1168; + /* 116Ch */ int field_116C; + /* 1170h */ int field_1170; + /* 1174h */ int field_1174; + /* 1178h */ int field_1178; + /* 117Ch */ int field_117C; + /* 1180h */ int field_1180; + /* 1184h */ int field_1184; + /* 1188h */ int field_1188; + /* 118Ch */ int field_118C; + /* 1190h */ int field_1190; + /* 1194h */ int field_1194; + /* 1198h */ int field_1198; + /* 119Ch */ int field_119C; + /* 11A0h */ int field_11A0; + /* 11A4h */ int field_11A4; + /* 11A8h */ int field_11A8; + /* 11ACh */ int field_11AC; + /* 11B0h */ int field_11B0; + /* 11B4h */ int field_11B4; + /* 11B8h */ int field_11B8; + /* 11BCh */ int field_11BC; + /* 11C0h */ int field_11C0; + /* 11C4h */ int field_11C4; + /* 11C8h */ int field_11C8; + /* 11CCh */ int field_11CC; + /* 11D0h */ int field_11D0; + /* 11D4h */ int field_11D4; + /* 11D8h */ int field_11D8; + /* 11DCh */ int field_11DC; + /* 11E0h */ int field_11E0; + /* 11E4h */ int field_11E4; + /* 11E8h */ int field_11E8; + /* 11ECh */ int field_11EC; + /* 11F0h */ int field_11F0; + /* 11F4h */ int field_11F4; + /* 11F8h */ int field_11F8; + /* 11FCh */ int field_11FC; + /* 1200h */ int field_1200; + /* 1204h */ int field_1204; + /* 1208h */ int field_1208; + /* 120Ch */ int field_120C; + /* 1210h */ int field_1210; + /* 1214h */ int field_1214; + /* 1218h */ int field_1218; + /* 121Ch */ int field_121C; + /* 1220h */ int field_1220; + /* 1224h */ int field_1224; + /* 1228h */ int field_1228; + /* 122Ch */ int field_122C; + /* 1230h */ int field_1230; + /* 1234h */ int field_1234; + /* 1238h */ int field_1238; + /* 123Ch */ int field_123C; + /* 1240h */ int field_1240; + /* 1244h */ int field_1244; }; + ASSERT_SIZE(IBakeManager, 0x1248); namespace Addresses(IBakeManager) { DeclareAddress(Get); } - inline BakeParameters::BakeParameters(int16_t _field_04, int16_t _field_06, uint32_t defaultID) - : field_04(_field_04) - , field_06(_field_06) - , mDefaultID(defaultID) + inline BakeParameters::BakeParameters(int16_t _mFlag, int16_t _mPriority, uint32_t _mTag) + : mFlag(_mFlag) + , mPriority(_mPriority) + , mTag(_mTag) { } diff --git a/Spore ModAPI/Spore/Editors/Editor.h b/Spore ModAPI/Spore/Editors/Editor.h index 99e4af96..f03eee99 100644 --- a/Spore ModAPI/Spore/Editors/Editor.h +++ b/Spore ModAPI/Spore/Editors/Editor.h @@ -216,6 +216,12 @@ namespace Editors static uint32_t GetTypeIDForAssetType(uint32_t assetTypeID); + ///Show creature abilities in verbtrayCollection + static void ComputeCreatureVerbIcons(cCreatureDataResource* creatureData, int VerbTrayCollection, int brainLevel, float param_4); + + ///return cCreatureDataResource* + static bool LoadCreatureData(ResourceKey* creation, cCreatureDataResource** dst); + public: int vftable_1C; @@ -256,7 +262,7 @@ namespace Editors /* 80h */ ILightingWorldPtr mpLightingWorld; /// The model world that contains the pedestal and test environment model, and also editor rigblocks /* 84h */ IModelWorldPtr mpMainModelWorld; - /* 88h */ IModelWorldPtr field_88; + /* 88h */ IModelWorldPtr mSaveModelWorld; /// The model world that contains the background model. /* 8Ch */ IModelWorldPtr mpBackgroundModelWorld; /* 90h */ int field_90; // related with havok world? @@ -266,7 +272,7 @@ namespace Editors // you can get it with virtual function 40h /* 98h */ EditorModel* mpEditorModel; // TODO is it intrusive_ptr? - /* 9Ch */ int field_9C; // another editor model? + /* 9Ch */ EditorModel* mEditorSaveModel; // another editor model? /// The model to be used for the pedestal in the editor. It belongs to mpPedestalModelWorld. /* A0h */ ModelPtr mpPedestalModel; /// The model to be used for the test environment in the editor. It belongs mpPedestalModelWorld. @@ -287,9 +293,9 @@ namespace Editors /* CCh */ EditorRigblockPtr mpActivePart; /* D0h */ EditorRigblockPtr mpMovingPart; // the part that is being moved, only when mouse is being clicked /* D4h */ EditorRigblockPtr mpSelectedPart; // also valid for spines - /* D8h */ EditorRigblockPtr field_D8; - /* DCh */ EditorRigblockPtr field_DC; - /* E0h */ bool field_E0; + /* D8h */ EditorRigblockPtr mPreviousSelectedBlock; + /* DCh */ EditorRigblockPtr mToBeSelectedBlock; + /* E0h */ bool mToBeSelectedTorso; /* E4h */ EditorBaseHandle* mpActiveHandle; // morph handles /// Is the mouse over the skin of the creature? /* E8h */ bool mbMouseIsInSkin; @@ -390,21 +396,21 @@ namespace Editors /* 288h */ float field_288; // 1.2 /// Briefly set when saving a creature, then immediately unset. /* 28Ch */ TexturePtr mpThumbnailTexture; - /* 290h */ int field_290; + /* 290h */ TexturePtr field_290; /* 294h */ IShadowWorldPtr mpShadowWorld; /* 298h */ Graphics::ShadowMapInfo* mpShadowMapInfo; - /* 29Ch */ int field_29C; - /* 2A0h */ int field_2A0; - /* 2A4h */ int field_2A4; + /* 29Ch */ int mDefaultPaintTheme; + /* 2A0h */ int mCurrentPaintTheme; + /* 2A4h */ int mVerbIconTray; /// The save extension key which will be parsed both into a key and a three letter extension. /* 2A8h */ uint32_t mSaveExtension; /// The save directory key, Resource::SaveAreaID /* 2ACh */ uint32_t mSaveDirectory; /* 2B0h */ bool mIsActive; - /* 2B1h */ char field_2B1; // not initialized + /* 2B1h */ bool mManipulatedBlockFromPalette; // not initialized /* 2B2h */ bool mbShowVertebrae; // true - /* 2B3h */ char field_2B3; - /* 2B4h */ char field_2B4; + /* 2B3h */ bool mIgnoreMouseMove; + /* 2B4h */ bool mUnselectCurrentBlock; /* 2B5h */ bool mbDisableCreatureAnimIK; // not initialized /// The width of the space that the model skin is constrained to. /* 2B8h */ float mBoundSize; // 2.0 @@ -643,6 +649,8 @@ namespace Editors DeclareAddress(GetEditorForAssetType); DeclareAddress(GetNameForAssetType); DeclareAddress(GetTypeIDForAssetType); + DeclareAddress(ComputeCreatureVerbIcons); + DeclareAddress(LoadCreatureData); } #ifdef SDK_TO_GHIDRA diff --git a/Spore ModAPI/Spore/Editors/EditorModel.h b/Spore ModAPI/Spore/Editors/EditorModel.h index fc6baf4e..8c780140 100644 --- a/Spore ModAPI/Spore/Editors/EditorModel.h +++ b/Spore ModAPI/Spore/Editors/EditorModel.h @@ -70,20 +70,20 @@ namespace Editors public: /* 0Ch */ ResourceKey mKey; /* 18h */ eastl::vector mRigblocks; - /* 2Ch */ bool field_2C; - /* 30h */ int field_30; // intrusive_ptr, but not to an Object - /* 34h */ bool field_34; - /* 38h */ float field_38; - /* 3Ch */ float field_3C; - /* 40h */ float field_40; // -2.0 - /* 44h */ float field_44; // 2.0 - /* 48h */ float field_48; - /* 4Ch */ bool field_4C; - /* 4Dh */ bool field_4D; - /* 4Eh */ bool field_4E; // true - /* 4Fh */ bool field_4F; //TODO allows symmetry? - /* 50h */ bool field_50; - /* 51h */ bool field_51; + /* 2Ch */ bool mbAllBlocksLoaded; + /* 30h */ int mPhysicsWorld; // intrusive_ptr, but not to an Object + /* 34h */ bool mUseDynamics; + /* 38h */ float mBounds; + /* 3Ch */ float mFeetBounds; + /* 40h */ float mMinHeight; // -2.0 + /* 44h */ float mMaxHeight; // 2.0 + /* 48h */ float mMinimumLeglessCreatureHeight; + /* 4Ch */ bool mShowHiddenHandles; + /* 4Dh */ bool mShowBoneLengthHandles; + /* 4Eh */ bool mUseBoundsForDelete; // true + /* 4Fh */ bool mUsingSymmetry; //TODO allows symmetry? + /* 50h */ bool mSkinNeedsUpdating; + /* 51h */ bool mChanged; /* 54h */ int mTranslationOptions; /* 58h */ uint32_t mModelType; /* 5Ch */ eastl::string16 mName; @@ -92,7 +92,7 @@ namespace Editors /* 8Ch */ uint32_t mSkinEffectIDs[3]; // Skinpaint IDs /* 98h */ int mSkinEffectSeeds[3]; // 1234 /* A4h */ ColorRGB mColors[3]; // Skinpaint Colors - /* C8h */ eastl::vector field_C8; + /* C8h */ eastl::vector mBBoxesOverride; /* DCh */ int mZCorpScore; // not initialized }; ASSERT_SIZE(EditorModel, 0xE0); diff --git a/Spore ModAPI/Spore/Editors/EditorRigblock.h b/Spore ModAPI/Spore/Editors/EditorRigblock.h index 83275bf4..ef9fd094 100644 --- a/Spore ModAPI/Spore/Editors/EditorRigblock.h +++ b/Spore ModAPI/Spore/Editors/EditorRigblock.h @@ -41,6 +41,126 @@ namespace Editors class EditorRigblock; class EditorModel; + enum modelCapability + { + kModelCapabilityPerch = 0x0551bf16, + kModelCapabilitySpine = 0x100f0f5a, + kModelCapabilityLimb = 0xb00f0fdf, + kModelCapabilityNoStretch = 0x06F079DF, + kModelCapabilityGrasper = 0xb00f0fe2, + kModelCapabilityEar = 0xb00f0fe5, + kModelCapabilityEye = 0xb00f0fe9, + kModelCapabilityMouth = 0xb00f0fec, + kModelCapabilityFoot = 0xb00f0fef, + kModelCapabilitySlash = 0xb00f0ff2, + kModelCapabilityPoke = 0xb00f0ff4, + kModelCapabilityBash = 0xb00f0ff7, + kModelCapabilityFruit = 0xd00f0ffb, + kModelCapabilityFin = 0xd00f0ffe, + kModelCapabilityLiquid = 0x02294de1, + kModelCapabilityDayVision = 0x022e7977, + kModelCapabilityNightVision = 0x022e7777, + kModelCapabilityCarnivorous = 0x022e7847, + kModelCapabilityHerbivorous = 0x022e785c, + kModelCapabilityDetail = 0x025c6878, + kModelCapabilitySocial = 0x91a570ba, + kModelCapabilityHealth = 0x31c3e5b2, + kModelCapabilityStealth = 0x51c3e5b4, + kModelCapabilityCuteness = 0xb1c3e5b5, + kModelCapabilityJump = 0x330c117a, + kModelCapabilityBlock = 0xf354a879, + kModelCapabilityCall = 0xf354a87a, + kModelCapabilityCreatureSpeed = 0xb354a87c, + kModelCapabilitySprint = 0x3386c531, + kModelCapabilityWing = 0x04f4d188, + kModelCapabilitySense = 0xb3e30313, + + kModelCapabilityMean = 0xb1c3e5b6, + kModelCapabilityBite = 0xb1c3e5b7, + kModelCapabilityCharge = 0xb1c3e5b8, + kModelCapabilitySpit = 0xb1c3e5b9, + kModelCapabilityStrike = 0xb1c3e5c0, + kModelCapabilityDance = 0xb1c3e5c1, + kModelCapabilityVocalize = 0xb1c3e5c2, + kModelCapabilityFlaunt = 0xb1c3e5c3, + kModelCapabilityPosture = 0xb1c3e5c4, + kModelCapabilityGlide = 0x04f4e1b4, + + kModelCapabilityTribeAttack = 0x055d370e, + kModelCapabilityTribeSocial = 0x055d3747, + kModelCapabilityTribeArmor = 0x055d374c, + kModelCapabilityTribeGather = 0x055d3750, + kModelCapabilityTribeFishing = 0x055d3754, + + kModelCapabilityEnergyRegen = 0x073ce5dd, + kModelCapabilityAdventurerMissile = 0x0732c356, + kModelCapabilityAdventurerEnergyBlade = 0x073930ea, + kModelCapabilityAdventurerShieldGenerator = 0x073e33c7, + kModelCapabilityAdventurerHoloCharm = 0x074260ec, + kModelCapabilityAdventurerLightningSword = 0x075f5ba0, + kModelCapabilityAdventurerPulseGun = 0x075f5ba6, + kModelCapabilityAdventurerBattleArmor = 0x075f5bab, + kModelCapabilityAdventurerPoweredArmor = 0x075f5baf, + kModelCapabilityAdventurerAbsorptionShield = 0x075f5bb4, + kModelCapabilityAdventurerHealthRegen = 0x075f5bb7, + kModelCapabilityAdventurerHealthBonus = 0x075f5bbc, + kModelCapabilityAdventurerSummonSwarm = 0x075f5bbf, + kModelCapabilityAdventurerMindMeld = 0x075f5bc3, + kModelCapabilityAdventurerPoisonBlade = 0x075f5bc8, + kModelCapabilityAdventurerFreeze = 0x075f5bcb, + kModelCapabilityAdventurerGracefulWaltz = 0x075f5bcf, + kModelCapabilityAdventurerHarmoniousSong = 0x075f5bd2, + kModelCapabilityAdventurerRoyalCharm = 0x075f5bd6, + kModelCapabilityAdventurerRadiantPose = 0x075f5bda, + kModelCapabilityAdventurerSprintBurst = 0x075f5bde, + kModelCapabilityAdventurerHover = 0x075f5be3, + kModelCapabilityAdventurerStealthField = 0x075f5be6, + kModelCapabilityAdventurerJumpJet = 0x075f5bea, + kModelCapabilityAdventurerInspiringSong = 0x075f5bee, + kModelCapabilityAdventurerStunningDance = 0x075f5bf2, + kModelCapabilityAdventurerConfettiPose = 0x075f5bf7, + kModelCapabilityAdventurerEnergyStorage = 0x075f5bfa, + + kModelCapabilityVehicleSpeed = 0x11b78a70, + kModelCapabilityVehicleDefense = 0x11b78a71, + kModelCapabilityVehiclePower = 0x11b78a72, + kModelCapabilityVehicleMilitaryPower = 0x06329468, + kModelCapabilityVehicleReligiousPower = 0x06329469, + kModelCapabilityVehicleEconomicPower = 0x0632946a, + + kModelCapabilityCellFilter = 0x11b79a70, + kModelCapabilityCellSpike = 0x11b79a71, + kModelCapabilityCellJet = 0x11b79a72, + kModelCapabilityCellFlagella = 0x032f92e6, + kModelCapabilityCellJaw = 0x11b79a74, + kModelCapabilityCellElectric = 0x11b79a75, + kModelCapabilityCellPoison = 0x11b79a76, + kModelCapabilityCellCilia = 0x11b79a77, + kModelCapabilityCellPoker = 0x11b79a78, + + kModelCapabilityCellEye = 0x11b79a73, + kModelCapabilityCellMouth = 0x11b79301, + kModelCapabilityCellMovement = 0x11b79302, + kModelCapabilityCellWeapon = 0x11b79303, + kModelCapabilityCellWeaponCharging = 0x11b79304, + kModelCapabilityCellGameSpeed = 0x066783b4, + + kModelCapabilityCellCarnivore = 0x4d192a1, + kModelCapabilityCellOmnivore = 0x4d18972, + kModelCapabilityCellStarvivore = 0x4d18c4c, + kModelCapabilityCellStarvivore2 = 0x4d192a14, + kModelCapabilityCellHealth = 0x4d18efd, + kModelCapabilityCellHerbivore = 0x4d192a2, + kModelCapabilityCellProboscis = 0x4d192a3, + + kModelCapabilityCell_herbivore_carnivore_proboscis = 0x50c34699, + kModelCapabilityCell_herbivore_carnivore = 0x177209ee, + kModelCapabilityCell_herbivore_proboscis = 0x64e7222b, + kModelCapabilityCell_carnivore_proboscis = 0xf613df04, + + kModelCapabilityEyeOverlayEffect = 0xF354A870, + }; + struct EditorRigblockCapability { /// Property ID used to check the capability, such as `modelCapabilityAdventurerMissile` @@ -79,6 +199,17 @@ namespace Editors }; ASSERT_SIZE(UnkEditorRigblockStruct1, 0x38); + + enum eBlockUIState + { + kSPUIStateDefault = 0, + kSPUIStateInvalid = 1, + kSPUIStateGhost = 2, + kSPUIStatePaintMode = 3, + kSPUIStateBadLocation = 4, + kSPUIStatePrevent = 5, + }; + //TODO related with display? check SetShadedDisplay() struct UnkEditorRigblockStruct2 { @@ -88,6 +219,14 @@ namespace Editors }; ASSERT_SIZE(UnkEditorRigblockStruct2, 0x8); + enum eLimbType + { + kLimbTypeMuscle = 0, + kLimbTypeTentacle = 1, + kLimbTypeRigblock = 2, + kLimbTypeNA = 3, + }; + enum EditorRigblockBoolAttributes { kEditorRigblockModelOrientToSurfaces = 0, @@ -214,27 +353,27 @@ namespace Editors /* 28h */ EditorModel* mpEditorModel; /* 2Ch */ int field_2C; /* 30h */ float field_30; - /* 34h */ bool field_34; // true - /* 38h */ UnkEditorRigblockStruct2 field_38; - /* 40h */ UnkEditorRigblockStruct2 field_40; + /* 34h */ bool mIsVisible; // true + /* 38h */ UnkEditorRigblockStruct2 mUIState; + /* 40h */ UnkEditorRigblockStruct2 mLastUIState; /* 48h */ Vector3 mPosition; - /* 54h */ Vector3 lastPos; // updated when the part is clicked + /* 54h */ Vector3 mHistoryPosition; // updated when the part is clicked /// Combination of mUserOrientation and mOrientation /* 60h */ Matrix3 mTotalOrientation; - /* 84h */ Matrix3 field_84; + /* 84h */ Matrix3 mHistoryTotalOrientation; /* A8h */ Matrix3 mOrientation; - /* CCh */ Matrix3 field_CC; + /* CCh */ Matrix3 mHistoryBaseOrientation; /* F0h */ Matrix3 mUserOrientation; - /* 114h */ Matrix3 field_114; - /* 138h */ Vector3 field_138; // position relative to parent? - /* 144h */ Vector3 field_144; - /* 150h */ int field_150; // -2 + /* 114h */ Matrix3 mHistoryUserOrientation; + /* 138h */ Vector3 mSurfaceNormal; // position relative to parent? + /* 144h */ Vector3 mReplacePartDisplacement; + /* 150h */ int mSnapType; // -2 /* 154h */ EditorBaseHandlePtr mAxisHandles[3]; //TODO sub_483CE0 /* 160h */ EditorBaseHandlePtr mpRotationBallHandle; //TODO a handle, sub_482F30 - /* 164h */ int field_164; - /* 168h */ int field_168; - /* 16Ch */ float field_16C; - /* 170h */ Clock field_170; + /* 164h */ int mRotationRingHandleAnimID; + /* 168h */ int mVertebraAnimID; + /* 16Ch */ float mRotationRingHandleCurrentUnscaledRadius; + /* 170h */ Clock mTimer; /* 188h */ int field_188; /* 18Ch */ int field_18C; /* 190h */ int field_190; @@ -253,7 +392,7 @@ namespace Editors /* 1C0h */ int field_1C0; // -2 /* 1C4h */ int field_1C4; // 1 /* 1C8h */ int field_1C8; // 1 - /* 1CCh */ int mLimbType; // 3, sub_44F2B0 + /* 1CCh */ eLimbType mLimbType; // 3, sub_44F2B0 /* 1D0h */ float mMuscleScale; // 0.5 /* 1D4h */ float mBaseMuscleScale; // 1.0 /* 1D8h */ float size; // 1.0 diff --git a/Spore ModAPI/Spore/Editors/VerbIconData.h b/Spore ModAPI/Spore/Editors/VerbIconData.h index a43b1773..a6998541 100644 --- a/Spore ModAPI/Spore/Editors/VerbIconData.h +++ b/Spore ModAPI/Spore/Editors/VerbIconData.h @@ -1,65 +1,131 @@ #pragma once #include +#include #include -#include #include -#include #define VerbIconDataPtr eastl::intrusive_ptr namespace Editors { - class VerbIconData - : public Object - , public DefaultRefCounted - { - public: - static const uint32_t TYPE = 0x4AA0ACD; - - /* 10h */ virtual void ParseProp(App::PropertyList* propList); - /// Resets mpPropList - /* 14h */ virtual void ClearPropList(); - /* 18h */ virtual void func18h(int); - /// Used to generate text - /* 20h */ virtual void SetKey(int verbIconTriggerKey); - /* 24h */ virtual eastl::string16 GetName(bool includeLevel); - /* 28h */ virtual eastl::string16 GetDescription(); + enum eVerbIconCategory + { + kVerbCategoryNULL = 0, + kVerbCategoryTribeAttack = 180661997, + kVerbCategoryVehiclePower = 360359141, + kVerbCategorySpeed = 640949982, + kVerbCategoryTribeArmor = 662199250, + kVerbCategoryHerbivore = 771444639, + kVerbCategorySpit = 823131355, + kVerbCategoryCellCilia = 835506386, + kVerbCategoryVehicleDefense = 886488350, + kVerbCategoryCellJaw = 1101458518, + kVerbCategoryCellJet = 1168568857, + kVerbCategorySprint = 1296465089, + kVerbCategoryCellOmnivore = 1377441237, + kVerbCategoryCellElectric = 1470348634, + kVerbCategoryVehicleSpeed = 1501155019, + kVerbCategoryOmnivore = 1557282664, + kVerbCategoryTribeSocial = 1589650888, + kVerbCategoryCellPoison = 1601154124, + kVerbCategoryBite = 1645043423, + kVerbCategoryDance = 1924791374, + kVerbCategoryStarvivore = 2095425492, + kVerbCategoryCellFlagella = 2165516464, + kVerbCategoryGesture = 2167648234, + kVerbCategoryPower = 2391494160, + kVerbCategoryDefense = 2564315215, + kVerbCategoryCarnivore = 2726979560, + kVerbCategoryStealth = 2909291642, + kVerbCategoryPosture = 2909789983, + kVerbCategoryCellHealth = 2964572918, + kVerbCategoryGlide = 2968795556, + kVerbCategoryCellPoker = 3013574067, + kVerbCategoryCellFilter = 3020374546, + kVerbCategoryTribeFishing = 3188984297, + kVerbCategoryTribeGather = 3253334812, + kVerbCategoryVocalize = 3478552014, + kVerbCategoryCellStarvivore = 3610717237, + kVerbCategoryCellSpike = 3634179486, + kVerbCategoryCellHerbivore = 3653024240, + kVerbCategoryHealth = 3677180323, + kVerbCategoryCellCarnivore = 3751859903, + kVerbCategoryCall = 3753286133, + kVerbCategoryJump = 3833651337, + kVerbCategoryBlock = 4001580976, + kVerbCategorySense = 4069948569, + kVerbCategoryStrike = 4110605575, + kVerbCategoryGrasp = 4248645338, + kVerbCategoryCharge = 4285247397 + }; + class VerbIconData + : public Object + , public DefaultRefCounted + { + public: + static const uint32_t TYPE = 0x4AA0ACD; + /* 00h */ virtual int AddRef(); + /* 04h */ virtual int Release(); + /* 08h */ virtual void* Dispose(); + /* 0Ch */ virtual void* AsInterface(InterfaceId interfaceID); + /* 10h */ virtual void Init(App::PropertyList* propList); + /* 14h */ virtual void Shutdown(); + /* 18h */ virtual void SetArrayIndex(int arrayIndex); + /// Used to generate text + /* 1Ch */ virtual void SetHotKey(int verbIconTriggerKey); + /* 20h */ virtual eastl::string16 GetIconName(eastl::string16* iconName, bool includeLevel); + /* 24h */ virtual eastl::string16 GetIconDescription(eastl::string16* iconDesc); public: - /* 0Ch */ bool mVerbIconUseDescription; // true - /* 0Dh */ bool mVerbIconShowLevel; // true - /* 0Eh */ bool mPaletteItemRolloverShowLevel; // true - /* 0Fh */ bool mVerbIconRolloverShowLevel; // true - /* 10h */ bool field_10; - /* 11h */ bool mVerbIconShowZeroLevel; - /* 14h */ int mVerbIconTriggerKey; // -1 - /* 18h */ int field_18; // not initialized - /* 1Ch */ float mVerbIconMaxLevel; - /* 20h */ int field_20; // not initialized - /* 24h */ uint32_t mVerbIconCategory; - /* 28h */ uint32_t mVerbIconRepresentativeAnimation; // -1 - /* 2Ch */ Math::ColorRGBA mVerbIconColor; - /* 3Ch */ uint32_t mVerbIconRolloverLevelImageID; - /* 40h */ ResourceKey mVerbIconRolloverLevelLayoutID; - /* 4Ch */ bool mVerbIconRolloverShowIcon; // not initialized - /* 4Dh */ bool mVerbIconEnforceMaxLevel; - /* 50h */ uint32_t mCreatureAbilityCategory; // not initialized - /* 54h */ LocalizedString mCreatureAbilityName; - /* 68h */ eastl::string16 field_68; - /* 78h */ uint32_t mTriggerKeyForLocalization; - /* 7Ch */ int field_7C; // -1 - /* 80h */ int field_80; // -1 - /* 84h */ int field_84; - /* 88h */ int field_88; - /* 8Ch */ int field_8C; - /* 90h */ uint32_t mVerbIconImageID; // not initialized - /* 94h */ uint32_t mVerbIconTrayOverrideImageID; - /* 98h */ uint32_t mVerbIconTraySmallCardOverrideImageID; // not initialized - /* 9Ch */ ResourceKey mVerbIconLayout; - /* A8h */ ResourceKey mVerbIconGameLayout; - /* B4h */ ResourceKey mVerbIconStaticLayout; - /* C0h */ PropertyListPtr mpPropList; + /* 0Ch */ bool mVerbIconUseDescription; + /* 0Dh */ bool mVerbIconShowLevel; + /* 0Eh */ bool mPaletteItemRolloverShowLevel; + /* 0Fh */ bool mVerbIconRolloverShowLevel; + /* 10h */ bool mShowHotKey; + /* 11h */ bool mVerbIconShowZeroLevel; + /* 14h */ int mVerbIconTriggerKey; + /* 18h */ float mVerbIconLevel; + /* 1Ch */ float mVerbIconMaxLevel; + /* 20h */ int field_20; + /* 24h */ eVerbIconCategory mVerbIconCategory; + /* 28h */ uint32_t mVerbIconRepresentativeAnimation; + /* 2Ch */ Math::ColorRGBA mVerbIconColor; + /* 3Ch */ uint32_t mVerbIconRolloverLevelImageID; + /* 40h */ ResourceKey mVerbIconRolloverLevelLayoutID; + /* 4Ch */ bool mVerbIconRolloverShowIcon; + /* 4Dh */ bool mVerbIconEnforceMaxLevel; + /* 50h */ uint32_t mCreatureAbilityCategory; + /* 54h */ LocalizedString mCreatureAbilityName; + /* 68h */ eastl::string16 field_68; + /* 78h */ uint32_t mTriggerKeyForLocalization; + /* 7Ch */ int field_7C; + /* 80h */ int field_80; + /* 84h */ int field_84; + /* 88h */ int field_88; + /* 8Ch */ int field_8C; + /* 90h */ uint32_t mVerbIconImageID; + /* 94h */ uint32_t mVerbIconTrayOverrideImageID; + /* 98h */ uint32_t mVerbIconTraySmallCardOverrideImageID; + /* 9Ch */ ResourceKey mVerbIconLayout; + /* A8h */ ResourceKey mVerbIconGameLayout; + /* B4h */ ResourceKey mVerbIconStaticLayout; + /* C0h */ PropertyListPtr mpPropList; }; - ASSERT_SIZE(VerbIconData, 0xC4); -} \ No newline at end of file + ASSERT_SIZE(VerbIconData, 0xC4); + + namespace Addresses(VerbIconData) + { + DeclareAddress(AddRef); + DeclareAddress(Release); + DeclareAddress(Dispose); + DeclareAddress(AsInterface); + DeclareAddress(Init); + DeclareAddress(Shutdown); + DeclareAddress(SetArrayIndex); + DeclareAddress(SetHotKey); + DeclareAddress(GetIconName); + DeclareAddress(OnKeyDown); + DeclareAddress(GetIconDescription); + } +} diff --git a/Spore ModAPI/Spore/Graphics/IThumbnailManager.h b/Spore ModAPI/Spore/Graphics/IThumbnailManager.h index 21b37e94..fd966b4c 100644 --- a/Spore ModAPI/Spore/Graphics/IThumbnailManager.h +++ b/Spore ModAPI/Spore/Graphics/IThumbnailManager.h @@ -2,7 +2,10 @@ #include #include +#include #include +#include +#include #include #include @@ -27,40 +30,141 @@ namespace Graphics }; ASSERT_SIZE(PlanetThumbnailRequest, 0x2C); + class cPaletteThumbnailInfo + : public DefaultRefCounted + { + public: + /* 08h */ uint32_t mRes; + /* 0Ch */ uint32_t mCameraId; + /* 10h */ uint32_t mMsgId; + /* 14h */ uint32_t mGroup; + /* 18h */ uint32_t mInstance; + /* 1Ch */ Math::Vector3 mCamCenter; + /* 28h */ float mEditorScale; + /* 2Ch */ eastl::vector mBBoxes;//eastl::vector> mBBoxes; + /* 40h */ uint32_t mEffectType; + /* 44h */ uint32_t mFramingType; + /* 48h */ float mZoomValue; + }; + ASSERT_SIZE(cPaletteThumbnailInfo, 0x4C); + + class cEditorsThumbnailInfo + : public DefaultRefCounted + { + public: + cEditorsThumbnailInfo(); + + /* 08h */ uint32_t mRes; + /* 0Ch */ uint32_t mCameraId; + /* 10h */ uint32_t mMsgId; + /* 14h */ TexturePtr mThumbnailTex; + /* 18h */ Math::Vector3 mCamCenter; + /* 24h */ float mEditorScale; + /* 28h */ eastl::vector mBBoxes;//eastl::vector> mBBoxes; + /* 3Ch */ uint32_t mEffectType; + }; + ASSERT_SIZE(cEditorsThumbnailInfo, 0x40); + + class cCSAThumbnailInfo + : public Graphics::ILayer + , public RefCountTemplate + { + public: + /* 0Ch */ bool mInitialized; + /* 10h */ IModelWorldPtr mModelWorld; + /* 14h */ IModelWorldPtr mBackgroundModelWorld; + /* 18h */ TexturePtr mThumbnailTex; + /* 18h */ App::cViewer* mViewer; + /* 1Ch */ App::cViewer* mFilterViewer; + /* 20h */ int mInfo; //AutoRefCount + }; + ASSERT_SIZE(cCSAThumbnailInfo, 0x28); + + class cGameThumbnailInfo + : public DefaultRefCounted + { + public: + /* 08h */ uint32_t mRes; + /* 0Ch */ uint32_t mGroup; + /* 10h */ uint32_t mInstance; + /* 14h */ uint32_t mMsgId; + /* 18h */ uint32_t mDrawSet; + }; + ASSERT_SIZE(cGameThumbnailInfo, 0x1C); + + class unknownThumbnailInfo + : public DefaultRefCounted + { + public: + /* 08h */ uint32_t field_08; + /* 0Ch */ uint32_t mRes; + /* 10h */ uint32_t field_10; + /* 14h */ uint32_t field_14; + /* 18h */ uint32_t field_18; + }; + ASSERT_SIZE(unknownThumbnailInfo, 0x1C); + class IThumbnailManager { public: - virtual int func00h() = 0; - virtual int func04h() = 0; - virtual int func08h() = 0; - virtual int func0ch() = 0; - virtual int func10h() = 0; - virtual int func14h() = 0; - virtual int func18h() = 0; - virtual int func1ch() = 0; - virtual int func20h() = 0; - virtual int func24h() = 0; - virtual int func28h() = 0; - virtual int func2ch() = 0; - virtual int func30h() = 0; - virtual int RenderPlanetThumbnail(PlanetThumbnailRequest* request, int thumbnailSize) = 0; - virtual int func38h() = 0; - virtual int func3ch() = 0; - virtual int func40h() = 0; - virtual int func44h() = 0; - virtual int func48h() = 0; - virtual int func4ch() = 0; - virtual int func50h() = 0; - virtual int func54h() = 0; - virtual int func58h() = 0; - virtual int func5ch() = 0; - virtual int func60h() = 0; - virtual int func64h() = 0; + /* 00h */ virtual int AddRef(); + /* 04h */ virtual int Release(); + /* 08h */ virtual void* Dispose(); + /* 0Ch */ virtual bool Init(); + /* 10h */ virtual bool Shutdown(); + /* 14h */ virtual void FrameBoundingBoxPalette(BoundingBox* modelBBox, App::cViewer* model, uint32_t unk, float unk2); + /* 18h */ virtual void GetThumbRectID(RenderTargetID* dst); + /* 1Ch */ virtual void CapturePaletteThumbnail(IModelWorld* paletteModel, cPaletteThumbnailInfo* paltteInfo); + /* 20h */ virtual void CaptureEditorsThumbnail(IModelWorld* creationModel, cEditorsThumbnailInfo* editorsInfo); + /* 24h */ virtual void CaptureCSAPhotos(IModelWorld* param_1, IModelWorld* param_2, cCSAThumbnailInfo* CSAInfo); + /* 28h */ virtual void CaptureGameThumbnail(IModelWorld* gameModelWorld, cGameThumbnailInfo* gameInfo); + /* 2Ch */ virtual void func2ch(unknownThumbnailInfo* unkInfo); + /* 30h */ virtual void func30h(IModelWorld* modelWorld, App::cViewer*, uint32_t msg, int size, uint32_t); + /* 34h */ virtual void RenderPlanetThumbnail(PlanetThumbnailRequest* request, int thumbnailSize); + /* 38h */ virtual void CaptureBESplatter(uint32_t, RenderTargetID*, eastl::vector*, eastl::vector*, eastl::vector_map*, eastl::vector>*, eastl::vector_map*, uint32_t, bool,int, int, RenderTargetID*, RenderTargetID*); + /* 3Ch */ virtual bool CaptureAO(RenderTargetID*, IModelWorld*, eastl::vector*, uint32_t, uint32_t lightingID, bool); + /* 40h */ virtual bool CaptureAOCE(uint32_t modelID, uint32_t modelGroupID, BoundingBox* BBox, uint32_t lightingGroupID, uint32_t lightingID, App::PropertyList* lightingProp); + /* 44h */ virtual void func44h(uint32_t msg); + /* 48h */ virtual void GenerateTimelineImages(uint32_t, uint32_t, uint32_t, uint32_t); + /* 4Ch */ virtual void FrameBoundingBoxThumbnail(BoundingBox* modelBBox, App::cViewer* model, uint32_t unk, float unk2); //i'm not sure + /* 50h */ virtual void FrameBBoxes(eastl::vector>* BBoxes, App::cViewer*, uint32_t cameraID, Vector3* param_4, float, float); + /* 54h */ virtual void DownsampleGIF(RenderTargetID*, RenderTargetID*, int, int); + /* 58h */ virtual void DownSampleRT(RenderTargetID*, RenderTargetID*, int, int); + /* 5Ch */ virtual void func5Ch(RenderTargetID*, RenderTargetID*, RenderTargetID*, int, bool); + /* 60h */ virtual void TerrainBlurFilterDraw(RenderTargetID* refractionRTT, RenderTargetID* blur1RTT, RenderTargetID* blur2RTT, RenderStatistics* stats); + /* 64h */ virtual void GatherAOPasses(uint32_t, uint32_t, uint32_t, App::cViewer**, RenderStatistics*); static IThumbnailManager* Get(); }; namespace Addresses(IThumbnailManager) { DeclareAddress(Get); + + DeclareAddress(AddRef); + DeclareAddress(Release); + DeclareAddress(Dispose); + DeclareAddress(Init); + DeclareAddress(Shutdown); + DeclareAddress(FrameBoundingBoxPalette); + DeclareAddress(GetThumbRectID); + DeclareAddress(CapturePaletteThumbnail); + DeclareAddress(CaptureEditorsThumbnail); + DeclareAddress(CaptureCSAPhotos); + DeclareAddress(CaptureGameThumbnail); + DeclareAddress(func2ch); + DeclareAddress(func30h); + DeclareAddress(RenderPlanetThumbnail); + DeclareAddress(CaptureBESplatter); + DeclareAddress(CaptureAO); + DeclareAddress(CaptureAOCE); + DeclareAddress(func44h); + DeclareAddress(GenerateTimelineImages); + DeclareAddress(FrameBoundingBoxThumbnail); + DeclareAddress(FrameBBoxes); + DeclareAddress(DownsampleGIF); + DeclareAddress(DownSampleRT); + DeclareAddress(func5Ch); + DeclareAddress(TerrainBlurFilterDraw); + DeclareAddress(GatherAOPasses); } } \ No newline at end of file diff --git a/Spore ModAPI/Spore/Graphics/cThumbnailManager.h b/Spore ModAPI/Spore/Graphics/cThumbnailManager.h new file mode 100644 index 00000000..04770989 --- /dev/null +++ b/Spore ModAPI/Spore/Graphics/cThumbnailManager.h @@ -0,0 +1,73 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Graphics +{ + class cThumbnailManager + : public IThumbnailManager + , public App::IMessageListener + , public RefCountTemplate + { + public: + /* 10h */ RenderWare::Raster* mThumbRaster; + /* 14h */ RenderTargetID mThumbRectID; + /* 1Ch */ RenderTargetID mBlurThumbRectID1; + /* 24h */ RenderTargetID mBlurThumbRectID2; + /* 2Ch */ RenderTargetID mTempThumbnailBuffer; + /* 34h */ RenderTargetID mCSALargeRectID; + /* 3Ch */ RenderTargetID mCSASmallRectID; + /* 44h */ RenderTargetID mCSAAntiAliasRectID; + /* 4Ch */ RenderTargetID mTimelineRectID[3]; + /* 64h */ TexturePtr mTimelineCellBg; + /* 68h */ TexturePtr mTimelineCreatureBg; + /* 6Ch */ TexturePtr mTimelineTribeBg; + /* 70h */ TexturePtr mTimelineCivBg; + /* 74h */ TexturePtr mTimelineSpaceBg; + /* 78h */ App::cViewer* mSplatterViewer; + /* 7Ch */ App::cViewer* mBakeInfoSplatterViewer; + /* 80h */ App::cViewer* mNMapSpecSplatterViewer; + /* 84h */ App::cViewer* mDilateViewer; + /* 88h */ App::cViewer* mAmbOccShadowViewers[1024]; + /* 1088h */ App::cViewer* mAmbOccSplatterViewer; + /* 108Ch */ App::cViewer* mAmbOccGatherViewer; + /* 1090h */ RenderWare::Raster* mLargeBufferTexture; + /* 1094h */ RenderTargetID mLargeBufferTextureRectID; + /* 109Ch */ RenderWare::Raster* mWatermarkRaster; + /* 10A0h */ RenderWare::Raster* mScreenshotRaster; + /* 10A4h */ RenderTargetID mWatermarkRectID; + /* 10ACh */ RenderTargetID mScreenshotRectID; + /* 10B4h */ Graphics::IRenderTargetManager* mRTTMgr; //or cRenderTargetManager? + /* 10B8h */ uint32_t mTempCamCtrlr; + /* 10BCh */ bool mMultiplyDiffuseWithAO; + /* 10BDh */ bool mBakeLscm; + /* 10C0h */ IVisualEffectPtr mShadowLightEffect; + /* 10C4h */ IModelWorldPtr mAOModelWorld; + /* 10C8h */ int mSkinModel; //AutoRefCount + /* 10CCh */ int mSplatInProgress; + /* 10D0h */ bool mCurrentlyCapturingAO; + /* 10D1h */ bool mTerrainFilterInitialized; + /* 10D4h */ int mTerrainDownSampleFilter; //AutoRefCount + /* 10D8h */ int mTerrainBlurFilter1; //AutoRefCount + /* 10DCh */ int mTerrainBlurFilter2; //AutoRefCount + /* 10E0h */ App::cViewer* mTerrainBlurFilterViewer; + /* 10E4h */ RenderTargetID mAOGatherRectID; + /* 10ECh */ int mAOPostProcessLayer; //AutoRefCount + /* 10F0h */ int mAmbOccRenderJob[1024]; //AutoRefCount[1024] + /* 20F0h */ int mDiffuseSplatterJob; //AutoRefCount + /* 20F4h */ int mBakeInfoSplatterJob; //AutoRefCount + /* 20F8h */ int mNMapSpecSplatterJob; //AutoRefCount + /* 20FCh */ int mAmbOccTextureCount; + /* 2100h */ int mTimelineJobs[3]; + /* 2110h */ Clock mAOTimer; + }; + ASSERT_SIZE(cThumbnailManager, 0x2128); +} \ No newline at end of file diff --git a/Spore ModAPI/Spore/Simulator/SubSystem/GameViewManager.h b/Spore ModAPI/Spore/Simulator/SubSystem/GameViewManager.h index c43ee10b..7657f01e 100644 --- a/Spore ModAPI/Spore/Simulator/SubSystem/GameViewManager.h +++ b/Spore ModAPI/Spore/Simulator/SubSystem/GameViewManager.h @@ -137,6 +137,8 @@ namespace Simulator /* ACh */ eastl::vector field_AC; /* C0h */ bool field_C0; /* C1h */ bool field_C1; // visible? + /* C2h */ bool field_C2; + /* C3h */ bool field_C3; /* C4h */ eastl::intrusive_ptr field_C4; // release at 8 /* C8h */ eastl::map field_C8; // actually might be a set, of object TYPEs that are not visible? /* E4h */ IModelWorldPtr field_E4; // IModelWorld? diff --git a/Spore ModAPI/Spore/Simulator/SubSystem/ObstacleManager.h b/Spore ModAPI/Spore/Simulator/SubSystem/ObstacleManager.h index bb35fd8d..c4c0f2a4 100644 --- a/Spore ModAPI/Spore/Simulator/SubSystem/ObstacleManager.h +++ b/Spore ModAPI/Spore/Simulator/SubSystem/ObstacleManager.h @@ -20,7 +20,7 @@ namespace Simulator static cObstacleManager* Get(); public: - /* 20h */ int mFlags; + /* 20h */ uint32_t mFlags; /* 24h */ int field_24; /* 28h */ int field_28; /* 2Ch */ int field_2C; @@ -41,17 +41,18 @@ namespace Simulator /* 5498h */ float field_5498; /* 549Ch */ float field_549C; /* 54A0h */ float field_54A0; - /* 54A4h */ float field_54A4; + /* 54A4h */ float field_54A4; //the ptr? /* 54A8h */ eastl::hash_map field_54A8; /* 54C8h */ eastl::hash_map field_54C8; /* 54E8h */ eastl::hash_map field_54E8; /* 5508h */ eastl::fixed_vector field_5508; + /* 550ch */ eastl::fixed_vector field_550C; //i am not sure /* 55A0h */ uint32_t mPickObstacleTypes; /* 55A4h */ int field_55A4; /* 55A8h */ eastl::fixed_vector mObstaclesToAdd; /* 56C0h */ eastl::hash_map mTerrainModelReplacements; }; - ASSERT_SIZE(cObstacleManager, 0x56E0); + ASSERT_SIZE(cObstacleManager, 0x5778); namespace Addresses(cObstacleManager) { DeclareAddress(Get); // 0xB3D320 0xB3D4C0 diff --git a/Spore ModAPI/Spore/Simulator/cCreatureAbility.h b/Spore ModAPI/Spore/Simulator/cCreatureAbility.h index 627dd07c..01a1b8cf 100644 --- a/Spore ModAPI/Spore/Simulator/cCreatureAbility.h +++ b/Spore ModAPI/Spore/Simulator/cCreatureAbility.h @@ -38,10 +38,11 @@ namespace Simulator enum AbilityTypes { + kNone = 0, kTribeHorn = 5, kTribeMaraca = 6, kTribeDidgeridoo = 7, - kAutoAttack = 8, + kWeakBite = 8, kStealth = 13, kSpeed = 14, kBlock = 15, @@ -62,7 +63,7 @@ namespace Simulator kSprint = 39, kSight = 40, kStomp = 41, - kTribeAttackUnk = 42, + kTribeWeaponAttack = 42, kTribeSpear = 43, kTribeAttack = 44, kTribeSocial = 45, @@ -109,6 +110,15 @@ namespace Simulator kEnergyStorage = 87, }; + enum AbilityCategory + { + kCategorySocial = 0, + kCategoryAttack = 1, + kCategoryNeutral = 2, + kCategoryPassive = 3, + kCategorySuperPower = 4, + }; + //PLACEHOLDER loc_D1E9D0 uses ability type? /// Returns the animation ID at the given index, or 0x4330667 if there are no animation IDs in this ability or @@ -116,7 +126,7 @@ namespace Simulator /// @param uint32_t GetAnimationID(int index); - /* 08h */ int mType; + /* 08h */ AbilityTypes mType; /* 0Ch */ int mCategory; /* 10h */ int mSocialCategory; /* 14h */ LocalizedString nName; diff --git a/Spore ModAPI/Spore/Simulator/cSimulatorSpaceGame.h b/Spore ModAPI/Spore/Simulator/cSimulatorSpaceGame.h index 23d41446..290622f2 100644 --- a/Spore ModAPI/Spore/Simulator/cSimulatorSpaceGame.h +++ b/Spore ModAPI/Spore/Simulator/cSimulatorSpaceGame.h @@ -63,10 +63,10 @@ namespace Simulator /* 18h */ int field_18; //TODO space trading UI /* 1Ch */ int field_1C; // -1 /* 20h */ int mpCommunityEditor; //TODO cCommunityEditor - /* 24h */ int field_24; - /* 28h */ int field_28; - /* 2Ch */ int field_2C; // not initialized - /* 30h */ int field_30; // a class + /* 24h */ int mEditorResult; + /* 28h */ int mpCityHallPieMenu; + /* 2Ch */ int mpSelectedBuilding; // not initialized + /* 30h */ int mCachedEventData; // a class /* 34h */ float mSpacePhiOffsetGalaxy; /* 38h */ float mSpacePhiOffsetSolar; /* 3Ch */ float mPlanetCameraMouseRotationSpeed; // not initialized @@ -76,11 +76,11 @@ namespace Simulator /* 4Ch */ bool field_4C; /* 4Dh */ bool field_4D; /* 4Eh */ bool field_4E; - /* 4Fh */ bool field_4F; - /* 50h */ int field_50; + /* 4Fh */ short _padding_; + /* 50h */ eastl::bitset<5> mTransitioning; /* 54h */ cSimPlanetHighLODPtr mpHighLODPlanetSim; /* 58h */ App::MessageListenerData mMessageListenerData; - /* 6Ch */ bool field_6C; + /* 6Ch */ bool mSavePlanetOnDeactivate; /* 70h */ cBadgeManagerPtr mpBadgeManager; /* 74h */ bool field_74; /* 75h */ bool field_75; // true diff --git a/Spore ModAPI/Spore/Simulator/cSpeciesProfile.h b/Spore ModAPI/Spore/Simulator/cSpeciesProfile.h index 6af589fb..1693bce4 100644 --- a/Spore ModAPI/Spore/Simulator/cSpeciesProfile.h +++ b/Spore ModAPI/Spore/Simulator/cSpeciesProfile.h @@ -49,45 +49,65 @@ namespace Simulator typedef eastl::sp_fixed_hash_map UnkStructPool; ASSERT_SIZE(UnkStructPool, 0x4E0); - /* 00h */ UnkStructPool field_0; - /* 4E0h */ ResourceKey field_4E0[3]; //what is this? - /* 504h */ ResourceKey mSpeciesKey; + enum HuntingStyle + { + kSolo = 0, + kPack = 1, + }; + + enum StrafeMode + { + kNoStrafe = 0, + kScaledStrafe = 1, + kFullStrafe = 3, + }; + + enum DominantAbilityType + { + kAbilityTypeEqual = 0, + kAbilityTypeSocial = 1, + kAbilityTypeAttack = 2, + }; + + /* 00h */ UnkStructPool capsInfos; + /* 4E0h */ ResourceKey mSkinColors[3]; //what is this? + /* 504h */ ResourceKey mCreatureKey; /* 510h */ ResourceKey mBabyKey; - /* 51Ch */ eastl::string16 mName; - /* 52Ch */ eastl::string16 field_52C; - /* 53Ch */ int field_53C; + /* 51Ch */ eastl::string16 mCreatureName; + /* 52Ch */ eastl::string16 mCreatureDesc; + /* 53Ch */ uint32_t creatureSeq; /* 540h */ int mCost; - /* 544h */ int field_544; + /* 544h */ int mCreatureBaseSpeedGear; /* 548h */ float mCreatureAbilityJumping; /* 54Ch */ float mCreatureAbilityGliding; /* 550h */ float mCreatureAbilityFlapping; /* 554h */ Math::Vector3 mBoundingBoxUpper; /* 560h */ Math::Vector3 mBoundingBoxLower; /* 56Ch */ float mAdditionalHealth; // 100.0 - /* 570h */ float field_570; // 200.0 - /* 574h */ float field_574; //CreatureSize? + /* 570h */ float mSatiety; // 200.0 + /* 574h */ float mCreatureMass; /* 578h */ bool mHasPlantRoot; /* 57Ch */ ModelTypes mModelType; - /* 580h */ int field_580; // not initialized + /* 580h */ HuntingStyle mHuntingStyle; // not initialized /* 584h */ int field_584; // not initialized - /* 588h */ int field_588; // 1 - /* 58Ch */ float mNumFoot; - /* 590h */ float mNumGrasper; - /* 594h */ float mNumMouth; - /* 598h */ float mNumEar; + /* 588h */ StrafeMode field_588; // 1 //need check it + /* 58Ch */ float mNumFeet; + /* 590h */ float mNumGraspers; + /* 594h */ float mNumMouths; + /* 598h */ float mNumEars; /* 59Ch */ float mNumEye; - /* 5A0h */ float mCuteness1; - /* 5A4h */ float mCuteness2; - /* 5A8h */ float field_5A8; + /* 5A0h */ float mSumCutenessParts; + /* 5A4h */ float mNumCutenessParts; + /* 5A8h */ float mCutenessSum; /* 5ACh */ float mSocialSum; /* 5B0h */ float mAttackSum; /* 5B4h */ float mAttackMaxLevel; /* 5B8h */ float mSocialMaxLevel; /* 5BCh */ float mMeanness; - /* 5C0h */ float field_5C0; //itemUnlockLevel? - /* 5C4h */ float field_5C4; //itemUnlockLevel? - /* 5C8h */ int mDuration; // 5000 - /* 5CCh */ float mRefillAbilityBars; // 1.0 cCreatureAbility->mDuration / cCreatureAbility->mRecharge + /* 5C0h */ float mMaxPartLevel; + /* 5C4h */ float mAveragePartLevel; + /* 5C8h */ int mAbilityTime; // 5000 + /* 5CCh */ float mAbilityRecharge; // 1.0 cCreatureAbility->mDuration / cCreatureAbility->mRecharge /* 5D0h */ int mSprintBuff; // 2 /* 5D4h */ int mBiteLevel; /* 5D8h */ int mChargeLevel; @@ -98,7 +118,7 @@ namespace Simulator /* 5ECh */ int mCharmLevel; /* 5F0h */ int mPoseLevel; /* 5F4h */ int mStealthLevel; - /* 5F8h */ int field_5F8; + /* 5F8h */ int mBlockLevel; /* 5FCh */ int mMatingCall; /* 600h */ int mCreatureSpeedLevel; /* 604h */ int mHealthLevel; @@ -108,14 +128,14 @@ namespace Simulator /* 614h */ int mSprintLevel; /* 618h */ int mSight; //Sense /* 61Ch */ int mGlideLevel; - /* 620h */ int field_620; - /* 624h */ int field_624; + /* 620h */ int mPreferredSocialType; + /* 624h */ int mPreferredCombatType; /* 628h */ int mTribeAttackLevel; /* 62Ch */ int mTribeSocialLevel; /* 630h */ int mTribeArmorLevel; /* 634h */ int mTribeGatherLevel; /* 638h */ int mTribeFishingLevel; - /* 63Ch */ float mDamage; + /* 63Ch */ float mAdditionalDamage; /* 640h */ float mEnergyRecoveryRate; /* 644h */ float mMaxEnergy; /* 648h */ int mShieldGenerator; @@ -145,20 +165,20 @@ namespace Simulator /* 6A8h */ int mStunningDanceLevel; /* 6ACh */ int mConfettiPoseLevel; /* 6B0h */ float mAdventurerEnergyCost; - /* 6B4h */ int field_6B4; - /* 6B8h */ eastl::vector mFruits; //unk type + /* 6B4h */ DominantAbilityType mDominantAbilityType; + /* 6B8h */ eastl::vector mFruits; /* 6CCh */ bool mIsGameMode; //true if cSpeciesProfile was called in gameMode, false otherwise /* 6D0h */ uint32_t mFootWeaponOrMouthType; /* 6D4h */ eastl::fixed_vector mActiveAbilities; //TODO abilities /* 73Ch */ eastl::fixed_vector mPassiveAbilities; - /* 7A4h */ eastl::fixed_vector mSocialAbilityIndexes; - /* 80Ch */ bool field_80C; - /* 80Dh */ bool field_80D; - /* 810h */ eastl::fixed_vector mFruitIndexes; - /* 878h */ eastl::fixed_vector mMouthIndexes; - /* 8E0h */ eastl::fixed_vector mGraspersIndexes; - /* 948h */ eastl::fixed_vector mMouthsIndexes2; - /* 9B0h */ eastl::fixed_vector mGraspersIndexes2; + /* 7A4h */ eastl::fixed_vector mSocialAbilityIndexes; + /* 80Ch */ bool mIsPlant; //need check it + /* 80Dh */ bool mBIndexesConverted; //need check it + /* 810h */ eastl::fixed_vector mFruitIndexes; + /* 878h */ eastl::fixed_vector mMouthIndexes; + /* 8E0h */ eastl::fixed_vector mGraspersIndexes; + /* 948h */ eastl::fixed_vector mMouthsIndexes2; + /* 9B0h */ eastl::fixed_vector mGraspersIndexes2; }; ASSERT_SIZE(cSpeciesProfile, 0xA18); diff --git a/Spore ModAPI/Spore/Sporepedia/AssetData.h b/Spore ModAPI/Spore/Sporepedia/AssetData.h index a28c91e1..0568ec88 100644 --- a/Spore ModAPI/Spore/Sporepedia/AssetData.h +++ b/Spore ModAPI/Spore/Sporepedia/AssetData.h @@ -9,6 +9,7 @@ #define cSPAssetDataOTDBPtr eastl::intrusive_ptr #define cSPSpaceAssetDataOTDBPtr eastl::intrusive_ptr +#define IAssetDataPtr eastl::intrusive_ptr namespace Sporepedia { diff --git a/Spore ModAPI/Spore/Sporepedia/ISPUILargeAssetView.h b/Spore ModAPI/Spore/Sporepedia/ISPUILargeAssetView.h new file mode 100644 index 00000000..e7878622 --- /dev/null +++ b/Spore ModAPI/Spore/Sporepedia/ISPUILargeAssetView.h @@ -0,0 +1,34 @@ +#pragma once + +#include +#include +#include +#include + +#define ISPUIAssetViewPtr eastl::intrusive_ptr + +namespace Sporepedia +{ + class ISPUILargeAssetView + { + /* 00h */ virtual int AddRef(); + /* 04h */ virtual int Release(); + /* 08h */ virtual void* Dispose(); + /* 0Ch */ virtual void* AsInterface(InterfaceId interfaceID); + /* 10h */ virtual int GetPriority(); //return 0 + /* 14h */ virtual uint32_t GetEventMask(); //return 0xc1 + /* 18h */ virtual bool func18h(int unk, UTFWin::IWindow* window); + /* 1Ch */ virtual void LoadAssetViewLarge(); + }; + namespace Addresses(ISPUILargeAssetView) + { + DeclareAddress(AddRef); + DeclareAddress(Release); + DeclareAddress(Dispose); + DeclareAddress(AsInterface); + DeclareAddress(GetPriority); + DeclareAddress(GetEventMask); + DeclareAddress(func18h); + DeclareAddress(LoadAssetViewLarge); + } +} \ No newline at end of file diff --git a/Spore ModAPI/Spore/Sporepedia/ObjectTemplateDB.h b/Spore ModAPI/Spore/Sporepedia/ObjectTemplateDB.h index 45f5bf38..efac8e98 100644 --- a/Spore ModAPI/Spore/Sporepedia/ObjectTemplateDB.h +++ b/Spore ModAPI/Spore/Sporepedia/ObjectTemplateDB.h @@ -4,6 +4,7 @@ #define ObjectTemplateDB (*Sporepedia::OTDB::cObjectTemplateDB::Get()) + namespace Sporepedia { namespace OTDB @@ -19,43 +20,219 @@ namespace Sporepedia /* 20h */ virtual bool SetParameters(const ResourceKey& key, eastl::vector& dst) = 0; }; + enum InterfaceId + { + + }; + class cObjectTemplateDB : public Object { public: - /* 10h */ virtual bool Initialize(); - /* 14h */ virtual bool Dispose(); + static cObjectTemplateDB* Get(); + + /* 00h */ virtual int AddRef(); + /* 04h */ virtual int Release(); + /* 08h */ virtual void* Dispose(); + /* 0Ch */ virtual void* AsInterface(InterfaceId mID); + /* 10h */ virtual bool Init(); + /* 14h */ virtual bool Shutdown(); /* 18h */ virtual bool Write(bool, bool writeSummarizers); /* 1Ch */ virtual bool func1Ch(); /* 20h */ virtual void func20h(); - /* 24h */ virtual bool func24h(eastl::vector& dstKeys, int, const eastl::vector& parameters); - /* 28h */ virtual bool func28h(eastl::vector& dstKeys, int, const eastl::vector& parameters); - /* 2Ch */ virtual void FindObjects(eastl::vector& dst, const eastl::vector& parameters); + /* 24h */ virtual bool func24h(eastl::vector& creation, int, const eastl::vector& parameters); + /* 28h */ virtual bool func28h(eastl::vector& dstKeys);//, int, const eastl::vector& parameters); + /* 2Ch */ virtual void FindObjects(eastl::vector& dst, const eastl::vector& parameters); //TODO thse functions are placeholders - /* 30h */ virtual int func30h(); - /* 34h */ virtual int func34h(); - /* 38h */ virtual int func38h(); - /* 3Ch */ virtual int func3Ch(); - /* 40h */ virtual int func40h(); - /* 44h */ virtual int func44h(); - /* 48h */ virtual int func48h(); - /* 4Ch */ virtual int func4Ch(); - /* 50h */ virtual int func50h(); - /* 54h */ virtual int func54h(); - /* 58h */ virtual int func58h(); - /* 5Ch */ virtual int func5Ch(); - /* 60h */ virtual int func60h(); - /* 64h */ virtual int func64h(); - /* 68h */ virtual int func68h(); - /* 6Ch */ virtual int func6Ch(); - /* 70h */ virtual int func70h(); - /* 74h */ virtual int func74h(); - /* 78h */ virtual int func78h(); + /* 30h */ virtual bool func30h(eastl::vector& creations, uint32_t param_2, const eastl::vector& parameters); + /* 34h */ virtual bool func34h(eastl::vector& creations); + /* 38h */ virtual void func38h(eastl::vector& creations, const eastl::vector& parameters); + /* 3Ch */ virtual bool func3Ch(eastl::vector& creations, uint32_t param_2, const ResourceKey& creation, const eastl::vector& parameters); + /* 40h */ virtual bool func40h(uint32_t param1, int* param2); + /* 44h */ virtual bool func44h(uint32_t param1, int* param2); + /* 48h */ virtual bool func48h(uint32_t param1, int* param2, eastl::vector& creations); + /* 4Ch */ virtual bool func4Ch(uint32_t param1, int* param2, eastl::vector& creations); + /* 50h */ virtual void func50h(int param); + /* 54h */ virtual void func54h(); + /* 58h */ virtual bool func58h(const ResourceKey& creation, bool param);//ResourceKey* + /* 5Ch */ virtual bool func5Ch(const ResourceKey& creation); + /* 60h */ virtual bool func60h(const ResourceKey& creation); + /* 64h */ virtual void func64h(uint32_t param1, eastl::vector& creations, int param); + /* 68h */ virtual void func68h(); + /* 6Ch */ virtual void func6Ch(uint32_t param_1, uint32_t param_2); //App::Property + /* 70h */ virtual bool func70h(const ResourceKey& creation); + /* 74h */ virtual bool PurgeAssetSummarizer(const ResourceKey& creation, bool param); + /* 78h */ virtual void PurgeAsset(const ResourceKey& creation, bool param); - /* 7Ch */ virtual void AddSummarizer(ISummarizer* pSummarizer); + /* 7Ch */ virtual bool AddSummarizer(ISummarizer* pSummarizer); - static cObjectTemplateDB* Get(); + /* 80h */ virtual bool func80h(const ResourceKey& creation, int* param); + /* 84h */ virtual bool func84h(const ResourceKey& creation, uint32_t* param_2); + /* 88h */ virtual void func88h(); + + public: + + /* 04h */ int field_04; + /* 08h */ int field_08; + /* 0Ch */ int field_0C; + /* 10h */ int field_10; + /* 14h */ int field_14; + /* 18h */ int field_18; + /* 1Ch */ int field_1C; + /* 20h */ int field_20; + /* 24h */ int field_24; + /* 28h */ int field_28; + /* 2Ch */ int field_2C; + /* 30h */ int field_30; + /* 34h */ int field_34; + /* 38h */ int field_38; + /* 3Ch */ int field_3C; + /* 40h */ bool field_40; + /* 41h */ bool field_41; + /* 42h */ bool field_42; + /* 43h */ bool field_43; + /* 44h */ int field_44; + /* 48h */ int field_48; + /* 4Ch */ int field_4C; + /* 50h */ int field_50; + /* 54h */ int field_54; + /* 58h */ int field_58; + /* 5Ch */ int field_5C; + /* 60h */ int field_60; + /* 64h */ int field_64; + /* 68h */ int field_68; + /* 6Ch */ int field_6C; + /* 70h */ int field_70; + /* 74h */ int field_74; + /* 78h */ int field_78; + /* 7Ch */ int field_7C; + /* 80h */ int field_80; + /* 84h */ int field_84; + /* 88h */ int field_88; + /* 8Ch */ int field_8C; + /* 90h */ int field_90; + /* 94h */ int field_94; + /* 98h */ int field_98; + /* 9Ch */ int field_9C; + /* A0h */ int field_A0; + /* A4h */ int field_A4; + /* A8h */ int field_A8; + /* ACh */ int field_AC; + /* B0h */ int field_B0; + /* B4h */ int field_B4; + /* B8h */ int field_B8; + /* BCh */ int field_BC; + /* C0h */ int field_C0; + /* C4h */ int field_C4; + /* C8h */ int field_C8; + /* CCh */ int field_CC; + /* D0h */ int field_D0; + /* D4h */ int field_D4; + /* D8h */ int field_D8; + /* DCh */ int field_DC; + /* E0h */ int field_E0; + /* E4h */ int field_E4; + /* E8h */ int field_E8; + /* ECh */ int field_EC; + /* F0h */ int field_F0; + /* F4h */ int field_F4; + /* F8h */ int field_F8; + /* FCh */ int field_FC; + /* 100h */ int field_100; + /* 104h */ int field_104; + /* 108h */ int field_108; + /* 10Ch */ int field_10C; + /* 110h */ int field_110; + /* 114h */ int field_114; + /* 118h */ int field_118; + /* 11Ch */ int field_11C; + /* 120h */ int field_120; + /* 124h */ int field_124; + /* 128h */ int field_128; + /* 12Ch */ int field_12C; + /* 130h */ int field_130; + /* 134h */ int field_134; + /* 138h */ int field_138; + /* 13Ch */ int field_13C; + /* 140h */ int field_140; + /* 144h */ int field_144; + /* 148h */ int field_148; + /* 14Ch */ int field_14C; + /* 150h */ int field_150; + /* 154h */ int field_154; + /* 158h */ int field_158; + /* 15Ch */ int field_15C; + /* 160h */ int field_160; + /* 164h */ int field_164; + /* 168h */ int field_168; + /* 16Ch */ int field_16C; + /* 170h */ int field_170; + /* 174h */ int field_174; + /* 178h */ int field_178; + /* 17Ch */ int field_17C; + /* 180h */ int field_180; + /* 184h */ int field_184; + /* 188h */ int field_188; + /* 18Ch */ int field_18C; + /* 190h */ int field_190; + /* 194h */ int field_194; + /* 198h */ int field_198; + /* 19Ch */ int field_19C; + /* 1A0h */ int field_1A0; + /* 1A4h */ int field_1A4; + /* 1A8h */ int field_1A8; + /* 1ACh */ int field_1AC; + /* 1B0h */ int field_1B0; + /* 1B4h */ int field_1B4; + /* 1B8h */ int field_1B8; + /* 1BCh */ int field_1BC; + /* 1C0h */ int field_1C0; + /* 1C4h */ int field_1C4; + /* 1C8h */ int field_1C8; + /* 1CCh */ int field_1CC; + /* 1D0h */ int field_1D0; + /* 1D4h */ int field_1D4; + /* 1D8h */ int field_1D8; + /* 1DCh */ int field_1DC; + /* 1E0h */ int field_1E0; + /* 1E4h */ int field_1E4; + /* 1E8h */ int field_1E8; + /* 1ECh */ int field_1EC; + /* 1F0h */ int field_1F0; + /* 1F4h */ int field_1F4; + /* 1F8h */ int field_1F8; + /* 1FCh */ int field_1FC; + /* 200h */ int field_200; + /* 204h */ int field_204; + /* 208h */ int field_208; + /* 20Ch */ int field_20C; + /* 210h */ int field_210; + /* 214h */ int field_214; + /* 218h */ int field_218; + /* 21Ch */ int field_21C; + /* 220h */ int field_220; + /* 224h */ int field_224; + /* 228h */ int field_228; + /* 22Ch */ int field_22C; + /* 230h */ int field_230; + /* 234h */ int field_234; + /* 238h */ int field_238; + /* 23Ch */ int field_23C; + /* 240h */ int field_240; + /* 244h */ int field_244; + /* 248h */ int field_248; + /* 24Ch */ int field_24C; + /* 250h */ int field_250; + /* 254h */ int field_254; + /* 258h */ int field_258; + /* 25Ch */ int field_25C; + /* 260h */ int field_260; + /* 264h */ int field_264; + /* 268h */ int field_268; + /* 26Ch */ int field_26C; + /* 270h */ int field_270; }; + ASSERT_SIZE(cObjectTemplateDB, 0x274); namespace Addresses(cObjectTemplateDB) { diff --git a/Spore ModAPI/Spore/Sporepedia/cSPUILargeAssetView.h b/Spore ModAPI/Spore/Sporepedia/cSPUILargeAssetView.h new file mode 100644 index 00000000..71d4e8a4 --- /dev/null +++ b/Spore ModAPI/Spore/Sporepedia/cSPUILargeAssetView.h @@ -0,0 +1,87 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +#define cSPUIAssetViewPtr eastl::intrusive_ptr + +namespace Sporepedia +{ + class cSPUILargeAssetViewSmh + { + /* 00h */ virtual void* Dispose(); + /* 04h */ virtual bool func04h(int unk, int unk2); + /* 08h */ virtual int AddRef(); + /* 0Ch */ virtual int Release(); + }; + ASSERT_SIZE(cSPUILargeAssetViewSmh, 0x4); + + class cSPUILargeAssetView + : public ISPUILargeAssetView + , public cSPUILargeAssetViewSmh + , public UTFWin::IWinProc + , public App::IMessageListener + , public DefaultRefCounted + { + public: + /* 18h */ UILayoutPtr mLayout; + /* 1Ch */ IWindowPtr mWinParent; + /* 20h */ IWindowPtr mWinRoot; + /* 24h */ int field_24; + /* 28h */ int field_28; + /* 2Ch */ IWindowPtr mWinRenderWindow; + /* 30h */ IWindowPtr mWinBakingIndicator; + /* 34h */ IWindowPtr mWinName; + /* 38h */ IWindowPtr mWinAuthor; + /* 3Ch */ IWindowPtr mWinDescription; + /* 40h */ IWindowPtr mWinTags; + /* 44h */ IWindowPtr mWinStatsContainer; + /* 48h */ IWindowPtr mWinBakingForeground; + /* 4Ch */ IWindowPtr mWinPublished; + /* 50h */ int field_50; + /* 54h */ int field_54; + /* 58h */ int field_58; + /* 5Ch */ int field_5C; + /* 60h */ int mCommentsBrowserPtr; + /* 64h */ int mExpansionPackBrowserPtr; + /* 68h */ int mVerbIcons; + /* 6Ch */ IWindowPtr mWinAssetVerbs; + /* 70h */ int mAssetVerbsPtr; + /* 74h */ IAssetDataPtr mAssetData; + /* 78h */ int field_78; + /* 7Ch */ int field_7C; + /* 80h */ int field_80; + /* 84h */ int mTraitSuperPowerRollover; + /* 88h */ int field_88; + /* 8Ch */ int field_8C; + /* 90h */ int field_90; + /* 94h */ bool mIsOnline; + /* 98h */ int field_98; + /* 9Ch */ int field_9C; + /* A0h */ int field_A0; + /* A4h */ int field_A4; + /* A8h */ bool mIsLoaded; + /* A9h */ bool field_A9; + /* ABh */ bool field_AB; + /* ACh */ bool field_AC; + /* B0h */ int field_B0; + /* B4h */ int field_B4; + /* B8h */ bool field_B8; + /* BCh */ App::MessageListenerData mAutoMsgHandler; + }; + ASSERT_SIZE(cSPUILargeAssetView, 0xCC); + + namespace Addresses(cSPUILargeAssetViewSmh) + { + DeclareAddress(Dispose); + DeclareAddress(func04h); + DeclareAddress(AddRef); + DeclareAddress(Release); + } +} \ No newline at end of file diff --git a/Spore ModAPI/Spore/Swarm/IVisualEffect.h b/Spore ModAPI/Spore/Swarm/IVisualEffect.h index 4c2d7d3e..d3d6502c 100644 --- a/Spore ModAPI/Spore/Swarm/IVisualEffect.h +++ b/Spore ModAPI/Spore/Swarm/IVisualEffect.h @@ -146,7 +146,7 @@ namespace Swarm /* 58h */ virtual const int* GetIntParams(IntParams param, int* dstCount = nullptr) = 0; /* 5Ch */ virtual Object* GetUnknownParam(ObjectParams params) = 0; - /* 60h */ virtual ResourceID GetEffectID() = 0; + /* 60h */ virtual uint32_t GetEffectID() = 0; /* 64h */ virtual void SetNotifyMessage(int, int) = 0; }; diff --git a/Spore ModAPI/Spore/Swarm/cVisualEffect.h b/Spore ModAPI/Spore/Swarm/cVisualEffect.h index 83a7ee47..6a30faeb 100644 --- a/Spore ModAPI/Spore/Swarm/cVisualEffect.h +++ b/Spore ModAPI/Spore/Swarm/cVisualEffect.h @@ -27,6 +27,7 @@ #include #include #include +#include namespace Swarm { @@ -47,37 +48,42 @@ namespace Swarm kFlagHidden = 2, kFlagTransformed = 4 }; + enum tTransitionType + { + kSoftTransition = 0, + kHardTransition = 1 + }; /* 10h */ int field_10; /* 14h */ IEffectsManagerPtr mpManager; /* 18h */ uint32_t mInstanceID; /* 1Ch */ uint32_t mGroupID; /* 20h */ uint32_t mEffectIndex; // & 0xFF000000 is the EffectDirectory index - /* 24h */ int field_24; + /* 24h */ tTransitionType mStartTransition; /* 28h */ cVisualEffectDescription* mpDescription; - /* 2Ch */ int mFlags; - /* 30h */ Math::Vector3 field_30; - /* 3Ch */ Math::Vector3 field_3C; - /* 48h */ int field_48; - /* 4Ch */ float field_4C; - /* 50h */ Math::Vector3 field_50; + /* 2Ch */ eastl::bitset<13> mFlags; + /* 30h */ Math::Vector3 mWorldPosition; + /* 3Ch */ Math::Vector3 mWorldUp; + /* 48h */ int mCurrentLOD; + /* 4Ch */ float mCurrentLODLerp; + /* 50h */ Math::Vector2 mCurrentRange; + /* 58h */ float mLODDistanceScale; /* 5Ch */ uint32_t mNotifyMessageID; - /* 60h */ int field_60; + /* 60h */ uint32_t mNotifyMessageUserData; /* 64h */ Transform mRigidTransform; /* 9Ch */ Transform mSourceTransform; - /* D4h */ Transform field_D4; - /* 10Ch */ Transform field_10C; - /* 144h */ eastl::vector field_144; - /* 158h */ int mpBone0; - /* 15Ch */ int field_15C; - /* 160h */ int mpBone1; - /* 164h */ int field_164; - /* 168h */ float field_168; - /* 16Ch */ float field_16C; - /* 170h */ float field_170; - /* 174h */ int field_174; - /* 178h */ int field_178; - /* 17Ch */ int field_17C; + /* D4h */ Transform mCmptRigidTransform; + /* 10Ch */ Transform mCmptSourceTransform; + /* 144h */ eastl::vector mComponentRecs; + /* 158h */ int mRigidBone; //cIBonePtr + /* 15Ch */ uint32_t mRigidBoneModCount; + /* 160h */ int mSourceBone; //cIBonePtr + /* 164h */ uint32_t mSourceBoneModCount; + /* 168h */ Math::Vector2 mLODSizeScale; + /* 170h */ float mSizeScaleLOD; + /* 174h */ int mWorld; //cIEffectsWorld * + /* 178h */ int mGlobalParams; //cGlobalParams * + /* 17Ch */ int mParams; //cEffectParams * /* 180h */ int32_t mnSeed; /* 184h */ int field_184; // not initialized };