Skip to content

Commit 244ba57

Browse files
committed
Added classes cScenarioData, cScenarioPlayMode, cScenarioTerraformMode, cScenarioEditHistory, cScenarioPowerup, cScenarioSimulator. Added and improved some Audio functions.
1 parent 60c2ebb commit 244ba57

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1374
-163
lines changed

Spore ModAPI/SourceCode/App/ScenarioMode.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@
2222

2323
namespace App
2424
{
25-
ScenarioMode::Mode ScenarioMode::GetMode() const {
25+
cScenarioMode::Mode cScenarioMode::GetMode() const {
2626
return mMode;
2727
}
2828

29-
ScenarioMode* ScenarioMode::Get() {
30-
return *(ScenarioMode**)(GetAddress(ScenarioMode, ptr));
29+
cScenarioMode* cScenarioMode::Get() {
30+
return *(cScenarioMode**)(GetAddress(cScenarioMode, ptr));
3131
}
3232
}
3333
#endif

Spore ModAPI/SourceCode/Audio/AudioSystem.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,22 @@
2222

2323
namespace Audio
2424
{
25-
auto_STATIC_METHOD_VOID(AudioSystem, PlayAudio, Args(uint32_t soundID, AudioSystem* system), Args(soundID, system));
2625
auto_STATIC_METHOD_(AudioSystem, AudioSystem*, Get);
2726
}
2827

28+
auto_STATIC_METHOD_VOID(Audio, PlayAudio, Args(uint32_t soundID, Audio::AudioTrack track), Args(soundID, track));
29+
auto_STATIC_METHOD_VOID(Audio, StopAudio, Args(Audio::AudioTrack track, int arg2), Args(track, arg2));
30+
31+
auto_STATIC_METHOD_VOID(Audio, PlayProceduralAudio,
32+
Args(uint32_t audioID, AudioTrack track, const Math::Vector3& position),
33+
Args(audioID, track, position));
34+
35+
auto_STATIC_METHOD_VOID(Audio, SetPropertyString,
36+
Args(AudioTrack track, uint32_t propertyID, const char* pValue),
37+
Args(track, propertyID, pValue));
38+
39+
auto_STATIC_METHOD_VOID(Audio, SetProperty,
40+
Args(AudioTrack track, uint32_t propertyID, float floatValue, int intValue),
41+
Args(track, propertyID, floatValue, intValue));
42+
2943
#endif

Spore ModAPI/SourceCode/DLL/AddressesApp.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,13 @@ namespace App
338338
DefineAddress(SetParent, SelectAddress(0x6A1960, 0x6A1710, 0x6A1710));
339339
}
340340

341-
namespace Addresses(ScenarioMode)
341+
// We keed it for backwards compatibility
342+
namespace ScenarioMode_addresses
343+
{
344+
DefineAddress(ptr, SelectAddress(0x16CBD24, , 0x16C7AA4));
345+
}
346+
347+
namespace Addresses(cScenarioMode)
342348
{
343349
DefineAddress(ptr, SelectAddress(0x16CBD24, , 0x16C7AA4));
344350
}

Spore ModAPI/SourceCode/DLL/AddressesAudio.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,12 @@ namespace Audio
1010
DefineAddress(PlayAudio, SelectAddress(0x436040, NO_ADDRESS, 0x436390));
1111
}
1212
}
13+
namespace Addresses(Audio)
14+
{
15+
DefineAddress(PlayAudio, SelectAddress(0x436040, , 0x436390));
16+
DefineAddress(StopAudio, SelectAddress(0x571F40, , 0x572020));
17+
DefineAddress(PlayProceduralAudio, SelectAddress(0x571EA0, , 0x571F80));
18+
DefineAddress(SetProperty, SelectAddress(0x4360B0, , 0x436400));
19+
DefineAddress(SetPropertyString, SelectAddress(0x571F90, , 0x572070));
20+
}
1321
#endif

Spore ModAPI/SourceCode/DLL/AddressesSimulator.cpp

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@
3838
#include <Spore\Simulator\cSpaceToolData.h>
3939
#include <Spore\Simulator\cSpaceInventoryItem.h>
4040
#include <Spore\Simulator\cStarRecord.h>
41+
#include <Spore\Simulator\cScenarioData.h>
42+
#include <Spore\Simulator\cScenarioResource.h>
43+
#include <Spore\Simulator\cScenarioEditHistory.h>
44+
#include <Spore\Simulator\cScenarioPowerup.h>
45+
#include <Spore\Simulator\cScenarioSimulator.h>
46+
#include <Spore\Simulator\cScenarioTerraformMode.h>
47+
#include <Spore\Simulator\cHerd.h>
4148
#include <Spore\Simulator\cToolStrategy.h>
4249
#include <Spore\Simulator\cTribeArchetype.h>
4350
#include <Spore\Simulator\cTurretDefenseMissileWeapon.h>
@@ -126,6 +133,18 @@ namespace Simulator
126133
DefineAddress(PlayAnimation, SelectAddress(0xC11CD0, NO_ADDRESS, 0xC12470));
127134
DefineAddress(PlayAnimationTo, SelectAddress(0xC14380, NO_ADDRESS, 0xC14B20));
128135
DefineAddress(WalkTo, SelectAddress(0xC1BE40, NO_ADDRESS, 0xC1C720));
136+
DefineAddress(GetAbilityIndexByType, SelectAddress(0xC0B930, , 0xC0C1E0));
137+
DefineAddress(GetAnimalTarget, SelectAddress(0xC0E740, , 0xC0EFF0));
138+
DefineAddress(CreateEffectForPool1Renamed, SelectAddress(0xC1C9A0, , 0xC1D280));
139+
DefineAddress(CreateEffectForPool1, SelectAddress(0xC1CB10, , 0xC1D3F0));
140+
DefineAddress(CreateAndStartEffectForPool1Renamed, SelectAddress(0xC1CC80, , 0xC1D560));
141+
DefineAddress(CreateAndStartEffectForPool1, SelectAddress(0xC1CCB0, , 0xC1D590));
142+
DefineAddress(CreateEffectForPool2Renamed, SelectAddress(0xC1CCE0, , 0xC1D5C0));
143+
DefineAddress(StartOrStopEffectFromPool1, SelectAddress(0xC1FA20, , 0xC20300));
144+
DefineAddress(StartOrStopEffectFromPool2, SelectAddress(0xC1CE60, , 0xC1D740));
145+
DefineAddress(GetEffectFromPools, SelectAddress(0xC14830, , 0xC14FD0));
146+
DefineAddress(StopEffectFromPools, SelectAddress(0xC16CB0, , 0xC174B0));
147+
DefineAddress(PlayVoice, SelectAddress(0xC1CEC0, , 0xC1D7A0));
129148
}
130149

131150
namespace Addresses(cCropCirclesToolStrategy)
@@ -612,5 +631,72 @@ namespace Simulator
612631
{
613632
DefineAddress(GetSolarSystem, SelectAddress(0xC8AA90, , 0xC8B900));
614633
}
634+
635+
namespace Addresses(cScenarioEditHistory)
636+
{
637+
DefineAddress(ptr, SelectAddress(0x160A850, , 0x16065D8));
638+
}
639+
640+
namespace Addresses(cScenarioData)
641+
{
642+
DefineAddress(Initialize, SelectAddress(0xF44AC0, , 0xF44690));
643+
DefineAddress(StartHistoryEntry, SelectAddress(0xF45C40, , 0xF45810));
644+
DefineAddress(CommitHistoryEntry, SelectAddress(0xF45D50, , 0xF45920));
645+
DefineAddress(GetClass, SelectAddress(0xF3EBA0, , 0xF3E740));
646+
DefineAddress(GetCurrentClassAct, SelectAddress(0xF3FC50, , 0xF3F7F0));
647+
DefineAddress(GetEditModeActIndex, SelectAddress(0xEFC740, , 0xEFC410));
648+
DefineAddress(CreateObjectInstance, SelectAddress(0xEEE090, , 0xEEDD40));
649+
DefineAddress(CreatePowerupObjectInstance, SelectAddress(0xF216A0, , 0xF212C0));
650+
DefineAddress(GetObjectForMarker, SelectAddress(0xF3D810, , 0xF3D620));
651+
DefineAddress(GetMarkerForObject, SelectAddress(0xF3D810, , 0xF3D620));
652+
}
653+
654+
namespace Addresses(cScenarioResource)
655+
{
656+
DefineAddress(Read, SelectAddress(0xF2FDD0, , 0xF2FC40));
657+
DefineAddress(Write, SelectAddress(0xF261F0, , 0xF25E00));
658+
}
659+
660+
namespace Addresses(cScenarioTerraformMode)
661+
{
662+
DefineAddress(StartHistoryEntry, SelectAddress(0xF33AD0, , 0xF33A90)); // 0xF33AD0, 0xF33A90
663+
DefineAddress(CommitHistoryEntry, SelectAddress(0xF45D50, , 0xF34400)); // 0xF45D50, 0xF34400
664+
DefineAddress(SetWaterColor, SelectAddress(0xF32140, , 0xF31FA0)); // 0xF32140, 0xF31FA0
665+
DefineAddress(SetAtmosphereColor, SelectAddress(0xF32190, , 0xF31FF0)); // 0xF32190, 0xF31FF0
666+
DefineAddress(SetBeachColor, SelectAddress(0xF321E0, , 0xF32040)); // 0xF321E0, 0xF32040
667+
DefineAddress(SetCliffColor, SelectAddress(0xF32230, , 0xF32090)); // 0xF32230, 0xF32090
668+
}
669+
670+
namespace Addresses(cHerd)
671+
{
672+
DefineAddress(Create, SelectAddress(0xB237C0, , 0xB23920));
673+
}
674+
675+
namespace Addresses(cScenarioClass)
676+
{
677+
DefineAddress(GetObjectType, SelectAddress(0xEED090, , 0xEECD40));
678+
DefineAddress(IsConsumible, SelectAddress(0xF27A90, , 0xF27730));
679+
}
680+
681+
namespace Addresses(cScenarioPowerup)
682+
{
683+
DefineAddress(ReactToPowerup, SelectAddress(0xF23FD0, , 0xF23BF0));
684+
//TODO DefineAddress(ApplyBoost, SelectAddress(0xF20670, , 0xF20290));
685+
DefineAddress(ActivateMedKit, SelectAddress(0xF229C0, , 0xF225E0));
686+
DefineAddress(ActivateEnergyKit, SelectAddress(0xF22BE0, , 0xF22800));
687+
DefineAddress(ActivateSpeedBoost, SelectAddress(0xF232B0, , 0xF22ED0));
688+
DefineAddress(ActivateDamageBoost, SelectAddress(0xF23000, , 0xF22C20));
689+
DefineAddress(ActivateArmorBoost, SelectAddress(0xF22D50, , 0xF22970));
690+
DefineAddress(ActivateMine, SelectAddress(0xF20BB0, , 0xF207D0));
691+
DefineAddress(ActivateJumpPad, SelectAddress(0xF23890, , 0xF234B0));
692+
DefineAddress(ActivateTeleporter, SelectAddress(0xF23660, , 0xF23280));
693+
DefineAddress(ActivateGate, SelectAddress(0xF23E90, , 0xF23AB0));
694+
DefineAddress(ActivateGrenade, SelectAddress(0xF20C40, , 0xF20860));
695+
}
696+
697+
namespace Addresses(cScenarioSimulator)
698+
{
699+
DefineAddress(Get, SelectAddress(0xC02AE0, , 0xC033C0));
700+
}
615701
}
616702
#endif
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
#ifndef MODAPI_DLL_EXPORT
2+
#include <Spore\Simulator\cScenarioData.h>
3+
#include <Spore\Simulator\cScenarioTerraformMode.h>
4+
#include <Spore\Simulator\cScenarioEditHistory.h>
5+
#include <Spore\Simulator\cScenarioSimulator.h>
6+
#include <Spore\Simulator\cScenarioPowerup.h>
7+
8+
namespace Simulator
9+
{
10+
auto_METHOD_VOID(cScenarioData, Initialize, Args(bool index), Args(index));
11+
12+
auto_METHOD_VOID_(cScenarioData, StartHistoryEntry);
13+
auto_METHOD_VOID_(cScenarioData, CommitHistoryEntry);
14+
15+
auto_METHOD(cScenarioData, cScenarioClass*, GetClass, Args(int index), Args(index));
16+
17+
auto_METHOD(cScenarioData, cScenarioClassAct*, GetCurrentClassAct, Args(cGameData* pObject), Args(pObject));
18+
19+
auto_METHOD(cScenarioData, cGameData*, GetObjectForMarker, Args(cScenarioMarker* p), Args(p));
20+
auto_METHOD(cScenarioData, cScenarioMarker*, GetMarkerForObject, Args(cGameData* p), Args(p));
21+
22+
auto_STATIC_METHOD_(cScenarioData, int, GetEditModeActIndex);
23+
24+
auto_STATIC_METHOD(cScenarioData, cGameData*, CreateObjectInstance,
25+
Args(const ResourceKey& name, const Vector3& position, const Quaternion& orientation,
26+
float scale, bool isAvatar, int scenarioClassIndex, cScenarioMarker* pMarker, cScenarioMarkerAct* pActs, int actIndex),
27+
Args(name, position, orientation, scale, isAvatar, scenarioClassIndex, pMarker, pActs, actIndex));
28+
29+
auto_STATIC_METHOD(cScenarioData, cGameData*, CreatePowerupObjectInstance,
30+
Args(App::PropertyList* pPropList, cScenarioMarker* pMarker, int scenarioClassIndex),
31+
Args(pPropList, pMarker, scenarioClassIndex));
32+
33+
cScenarioEditHistory* cScenarioEditHistory::Get()
34+
{
35+
return (cScenarioEditHistory*)GetAddress(cScenarioEditHistory, ptr);
36+
}
37+
38+
auto_METHOD(cScenarioResource, bool, Read, Args(IO::IStream* pStream), Args(pStream));
39+
auto_METHOD(cScenarioResource, bool, Write, Args(IO::IStream* pStream), Args(pStream));
40+
41+
auto_METHOD_VOID_(cScenarioTerraformMode, StartHistoryEntry);
42+
auto_METHOD_VOID_(cScenarioTerraformMode, CommitHistoryEntry);
43+
auto_METHOD_VOID(cScenarioTerraformMode, SetWaterColor, Args(const ColorRGB& color), Args(color));
44+
auto_METHOD_VOID(cScenarioTerraformMode, SetAtmosphereColor, Args(const ColorRGB& color), Args(color));
45+
auto_METHOD_VOID(cScenarioTerraformMode, SetCliffColor, Args(const ColorRGB& color), Args(color));
46+
auto_METHOD_VOID(cScenarioTerraformMode, SetBeachColor, Args(const ColorRGB& color), Args(color));
47+
48+
auto_STATIC_METHOD(cScenarioClass, ScenarioObjectType, GetObjectType, Args(const ResourceKey& key), Args(key));
49+
auto_METHOD_(cScenarioClass, bool, IsConsumible);
50+
51+
52+
auto_STATIC_METHOD_(cScenarioSimulator, cScenarioSimulator*, Get);
53+
54+
auto_STATIC_METHOD_VOID(cScenarioPowerup, ActivateMedKit, Args(cScenarioPowerup* p1, cCreatureBase* p2), Args(p1, p2));
55+
auto_STATIC_METHOD_VOID(cScenarioPowerup, ActivateEnergyKit, Args(cScenarioPowerup* p1, cCreatureBase* p2), Args(p1, p2));
56+
auto_STATIC_METHOD_VOID(cScenarioPowerup, ActivateSpeedBoost, Args(cScenarioPowerup* p1, cCreatureBase* p2), Args(p1, p2));
57+
auto_STATIC_METHOD_VOID(cScenarioPowerup, ActivateDamageBoost, Args(cScenarioPowerup* p1, cCreatureBase* p2), Args(p1, p2));
58+
auto_STATIC_METHOD_VOID(cScenarioPowerup, ActivateArmorBoost, Args(cScenarioPowerup* p1, cCreatureBase* p2), Args(p1, p2));
59+
auto_STATIC_METHOD_VOID(cScenarioPowerup, ActivateMine, Args(cScenarioPowerup* p1, cCombatant* p2), Args(p1, p2));
60+
auto_STATIC_METHOD_VOID(cScenarioPowerup, ActivateJumpPad, Args(cScenarioPowerup* p1, cCreatureBase* p2), Args(p1, p2));
61+
auto_STATIC_METHOD_VOID(cScenarioPowerup, ActivateTeleporter, Args(cScenarioPowerup* p1, cCreatureBase* p2), Args(p1, p2));
62+
auto_STATIC_METHOD_VOID(cScenarioPowerup, ActivateGrenade, Args(cScenarioPowerup* p1, cCreatureBase* p2), Args(p1, p2));
63+
64+
auto_STATIC_METHOD_VOID(cScenarioPowerup, ActivateGate,
65+
Args(cCreatureBase* p1, cScenarioPowerup* p2, cScenarioPowerup* p3),
66+
Args(p1, p2, p3));
67+
68+
auto_STATIC_METHOD_VOID(cScenarioPowerup, ReactToPowerup,
69+
Args(cGameData* pFirst, cGameData* pSecond, void* p),
70+
Args(pFirst, pSecond, p));
71+
}
72+
#endif
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#ifndef MODAPI_DLL_EXPORT
2+
#include <Spore\Simulator\cHerd.h>
3+
4+
namespace Simulator
5+
{
6+
auto_METHOD(cHerd, cHerd*, Create,
7+
Args(const Vector3& position, cSpeciesProfile* pSpeciesProfile, int herdSize,
8+
bool isOwnedByAvatar, int creaturePersonality, bool createNest),
9+
Args(position, pSpeciesProfile, herdSize, isOwnedByAvatar, creaturePersonality, createNest));
10+
11+
void cHerd::SetEnabled(bool enabled)
12+
{
13+
mbEnabled = enabled;
14+
if (mpNest) mpNest->mbEnabled = enabled;
15+
for (auto egg : mEggs) {
16+
egg->mEnabled = enabled;
17+
}
18+
}
19+
}
20+
#endif

Spore ModAPI/SourceCode/Simulator/cCreatureAnimal.cpp

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,60 @@ namespace Simulator
2525
Args(const Vector3& pPosition, cSpeciesProfile* pSpecies, int age, cHerd* pHerd, bool bIsAvatar, bool arg_14),
2626
Args(pPosition, pSpecies, age, pHerd, bIsAvatar, arg_14));
2727

28-
auto_METHOD(cCreatureBase, void*, PlayAnimation, Args(uint32_t animationID, int arg1, bool arg2),
28+
auto_METHOD(cCreatureBase, Anim::AnimIndex, PlayAnimation,
29+
Args(uint32_t animationID, int arg1, bool arg2),
2930
Args(animationID, arg1, arg2));
3031

32+
auto_METHOD(cCreatureBase, Anim::AnimIndex, PlayAnimationTo,
33+
Args(uint32_t animationID, cSpatialObject* otherObject, int arg1, int arg2),
34+
Args(animationID, otherObject, arg1, arg2));
35+
3136
auto_METHOD_VOID(cCreatureBase, WalkTo, Args(int arg0, const Vector3& arg1, const Vector3& arg2, float arg3, float arg4),
3237
Args(arg0, arg1, arg2, arg3, arg4));
33-
38+
39+
40+
auto_METHOD(cCreatureBase, int, GetAbilityIndexByType, Args(int arg), Args(arg));
41+
42+
auto_METHOD_(cCreatureBase, cCreatureAnimal*, GetAnimalTarget);
43+
44+
auto_METHOD(cCreatureBase, Swarm::IEffect*, CreateEffectForPool1Renamed,
45+
Args(uint32_t effectId, uint32_t poolId),
46+
Args(effectId, poolId));
47+
48+
auto_METHOD(cCreatureBase, Swarm::IEffect*, CreateEffectForPool1,
49+
Args(uint32_t effectId),
50+
Args(effectId));
51+
52+
auto_METHOD(cCreatureBase, Swarm::IEffect*, CreateAndStartEffectForPool1Renamed,
53+
Args(uint32_t effectId, uint32_t poolId),
54+
Args(effectId, poolId));
55+
56+
auto_METHOD(cCreatureBase, Swarm::IEffect*, CreateAndStartEffectForPool1,
57+
Args(uint32_t effectId),
58+
Args(effectId));
59+
60+
auto_METHOD(cCreatureBase, Swarm::IEffect*, CreateEffectForPool2Renamed,
61+
Args(uint32_t effectId, uint32_t poolId),
62+
Args(effectId, poolId));
63+
64+
auto_METHOD(cCreatureBase, Swarm::IEffect*, StartOrStopEffectFromPool1,
65+
Args(bool create, uint32_t effectId, uint32_t poolId),
66+
Args(create, effectId, poolId));
67+
68+
auto_METHOD(cCreatureBase, Swarm::IEffect*, StartOrStopEffectFromPool2,
69+
Args(bool create, uint32_t effectId, uint32_t poolId),
70+
Args(create, effectId, poolId));
71+
72+
auto_METHOD(cCreatureBase, Swarm::IEffect*, GetEffectFromPools,
73+
Args(uint32_t effectId),
74+
Args(effectId));
75+
76+
auto_METHOD(cCreatureBase, Swarm::IEffect*, StopEffectFromPools,
77+
Args(uint32_t effectId, int hardStop),
78+
Args(effectId, hardStop));
79+
80+
auto_METHOD(cCreatureBase, int, PlayVoice,
81+
Args(const char* pName, int param2, int param3),
82+
Args(pName, param2, param3));
3483
}
3584
#endif

Spore ModAPI/SourceCode/Simulator/cGameData.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#ifndef MODAPI_DLL_EXPORT
22
#include <Spore\Simulator\cGameData.h>
33
#include <Spore\Simulator\NounClassFactories.h>
4+
#include <Spore\App\ScenarioMode.h>
45

56
auto_STATIC_METHOD_VOID(Simulator, RegisterNounType, Args(uint32_t nounID, uint32_t typeID, const char* name), Args(nounID, typeID, name));
67
//auto_STATIC_METHOD_(Simulator, Simulator::NounCreateMap&, GetNounCreateMap);
@@ -55,14 +56,20 @@ namespace Simulator
5556

5657
cGameData::cGameData()
5758
: field_14()
58-
, field_18()
59-
, field_1C(0xFFFFFFFF)
59+
, mpScenarioMarker(nullptr)
60+
, mScenarioClassIndex(-1)
6061
, field_20()
6162
, mbIsDestroyed()
6263
, mID(0xFFFFFFFF)
6364
, mDefinitionID()
6465
, mpGameDataOwner()
6566
, mPoliticalID(0xFFFFFFFF)
6667
{}
68+
69+
cScenarioClass* cGameData::GetScenarioClass()
70+
{
71+
if (mScenarioClassIndex == -1) return nullptr;
72+
else return ScenarioMode.GetData()->GetClass(mScenarioClassIndex);
73+
}
6774
}
6875
#endif

Spore ModAPI/SourceCode/Terrain/Terrain.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,8 @@ namespace Terrain
114114
, mAtmosphereMap()
115115
, field_20C()
116116
, field_210()
117-
, field_290()
118-
, field_2A4()
117+
, factoredTerrainUserColorElevations()
118+
, factoredTerrainUserColorElevationColors()
119119
{
120120
}
121121

0 commit comments

Comments
 (0)