Skip to content

Commit

Permalink
Added proper method for transforming (jump + action w/ 50 rings)
Browse files Browse the repository at this point in the history
  • Loading branch information
michael-fadely committed Feb 11, 2016
1 parent 85f7e3c commit 3897a83
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 14 deletions.
2 changes: 1 addition & 1 deletion sadx-mod-loader
39 changes: 30 additions & 9 deletions sadx-super-sonic/mod.cpp
@@ -1,5 +1,6 @@
#include "stdafx.h"
#include <SADXModLoader.h>
#include <libmodutils/Trampoline.h>

#define EXPORT __declspec(dllexport)

Expand All @@ -13,6 +14,7 @@ FunctionPointer(void, ForcePlayerAction, (Uint8 playerNum, Uint8 action), 0x0044

static int ring_timer = 0;
static int super_count = 0; // Dirty hack for multitap mod compatibility
static Uint8 last_action[8] = {};

void __cdecl Sonic_SuperPhysics_Delete(ObjectMaster* _this)
{
Expand Down Expand Up @@ -70,7 +72,6 @@ extern "C"
if (GameState != 15)
return;

// TODO: Jump + Cancel to transform, 50 ring requirement
for (Uint8 i = 0; i < 8; i++)
{
CharObj1* data1 = CharObj1Ptrs[i];
Expand All @@ -79,14 +80,12 @@ extern "C"
if (data1 == nullptr || data1->CharID != Characters_Sonic)
continue;

bool toggle = (ControllerPointers[i]->PressedButtons & Buttons_Z) != 0;
// I'm confused by this. Every time I check this, that bit isn't there,
// but the super physics object checks for that bit and it IS there,
// otherwise it would restore the original physics.
// Consequently, I'm setting the bit myself.
if ((data2->Upgrades & Upgrades_SuperSonic) != Upgrades_SuperSonic)
bool isSuper = (data2->Upgrades & Upgrades_SuperSonic) != 0;
bool toggle = Controllers[i].PressedButtons & Buttons_B;

if (!isSuper)
{
if (toggle)
if (toggle && last_action[i] == 8 && data1->Action == 12 && Rings >= 50)
{
// Transform into Super Sonic
ForcePlayerAction(i, 46);
Expand All @@ -97,17 +96,39 @@ extern "C"
SuperSonicManager_Load();
}
}
else if (toggle || !Rings)
else if (toggle && last_action[i] == 82 && data1->Action == 78 || !Rings)
{
// Change back to normal Sonic
ForcePlayerAction(i, 47);
data2->Upgrades &= ~Upgrades_SuperSonic;
--super_count;
}

last_action[i] = data1->Action;
}

SuperSonicFlag = super_count > 0;
}

EXPORT ModInfo SADXModInfo = { ModLoaderVer };
}

// Somehow this still screws up the jump height.
// TODO: Walk on water
/*
void DirtyHackFunction(CharObj1*, void*, CharObj2*);
Trampoline DirtyHack(0x00449500, 0x00449506, (DetourFunction)DirtyHackFunction);
void DirtyHackFunction(CharObj1* a1, void* a2, CharObj2* a3)
{
//Uint8 lastid = a1->CharID;
//if (a3->Upgrades & Upgrades_SuperSonic)
//a1->CharID = Characters_Gamma;
FunctionPointer(void, SomethingAboutWater, (void*, void*, void*), DirtyHack.Target());
SomethingAboutWater(a1, a2, a3);
//a1->CharID = lastid;
}
*/
10 changes: 6 additions & 4 deletions sadx-super-sonic/sadx-super-sonic.vcxproj
Expand Up @@ -88,7 +88,7 @@
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SUPERSONIC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\sadx-mod-loader\SADXModLoader\include</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\sadx-mod-loader\SADXModLoader\include;..\sadx-mod-loader</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand All @@ -105,7 +105,7 @@
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;SUPERSONIC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\sadx-mod-loader\SADXModLoader\include</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\sadx-mod-loader\SADXModLoader\include;..\sadx-mod-loader</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand All @@ -124,7 +124,7 @@
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SUPERSONIC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\sadx-mod-loader\SADXModLoader\include</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\sadx-mod-loader\SADXModLoader\include;..\sadx-mod-loader</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand All @@ -145,7 +145,7 @@
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;SUPERSONIC_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>..\sadx-mod-loader\SADXModLoader\include</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\sadx-mod-loader\SADXModLoader\include;..\sadx-mod-loader</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Expand All @@ -158,9 +158,11 @@
</PreBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="..\sadx-mod-loader\libmodutils\Trampoline.h" />
<ClInclude Include="stdafx.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\sadx-mod-loader\libmodutils\Trampoline.cpp" />
<ClCompile Include="mod.cpp" />
<ClCompile Include="stdafx.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
Expand Down
6 changes: 6 additions & 0 deletions sadx-super-sonic/sadx-super-sonic.vcxproj.filters
Expand Up @@ -18,6 +18,9 @@
<ClInclude Include="stdafx.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\sadx-mod-loader\libmodutils\Trampoline.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="stdafx.cpp">
Expand All @@ -26,6 +29,9 @@
<ClCompile Include="mod.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\sadx-mod-loader\libmodutils\Trampoline.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="mod.ini">
Expand Down

0 comments on commit 3897a83

Please sign in to comment.