Skip to content

Commit

Permalink
Fixing stuff.
Browse files Browse the repository at this point in the history
  • Loading branch information
MainMemory committed Dec 13, 2015
1 parent 3536749 commit 15d17f2
Showing 1 changed file with 43 additions and 30 deletions.
73 changes: 43 additions & 30 deletions SteamAchievements/SteamAchievements.cpp
Expand Up @@ -24,6 +24,15 @@ void CallbackStuff::OnUserStatsReceived(UserStatsReceived_t *pParam)

CallbackStuff *callbackobj;

void SetAchievement(const char *id)
{
if (callbackreceived)
{
SteamUserStats()->SetAchievement(id);
SteamUserStats()->StoreStats();
}
}

void UnlockCharacterAdventure_r(int character)
{
switch (character)
Expand All @@ -33,28 +42,23 @@ void UnlockCharacterAdventure_r(int character)
break;
case Characters_Tails:
*(uint8_t *)0x3B1884A = 1;
if (callbackreceived)
SteamUserStats()->SetAchievement("NEW_ACHIEVEMENT_1_0"); // Miles "Tails" Prower
SetAchievement("NEW_ACHIEVEMENT_1_0"); // Miles "Tails" Prower
break;
case Characters_Knuckles:
*(uint8_t *)0x3B1884B = 1;
if (callbackreceived)
SteamUserStats()->SetAchievement("NEW_ACHIEVEMENT_1_1"); // Knuckles the Echidna
SetAchievement("NEW_ACHIEVEMENT_1_1"); // Knuckles the Echidna
break;
case Characters_Amy:
*(uint8_t *)0x3B1884C = 1;
if (callbackreceived)
SteamUserStats()->SetAchievement("NEW_ACHIEVEMENT_1_2"); // Amy Rose
SetAchievement("NEW_ACHIEVEMENT_1_2"); // Amy Rose
break;
case Characters_Gamma:
*(uint8_t *)0x3B1884D = 1;
if (callbackreceived)
SteamUserStats()->SetAchievement("NEW_ACHIEVEMENT_1_3"); // E-102 "Gamma"
SetAchievement("NEW_ACHIEVEMENT_1_3"); // E-102 "Gamma"
break;
case Characters_Big:
*(uint8_t *)0x3B1884E = 1;
if (callbackreceived)
SteamUserStats()->SetAchievement("NEW_ACHIEVEMENT_1_4"); // Big the Cat
SetAchievement("NEW_ACHIEVEMENT_1_4"); // Big the Cat
break;
}
}
Expand All @@ -74,8 +78,7 @@ void __cdecl sub_4130E0_r()
*(uint8_t*)0x3B188BF = 1;
*(uint8_t*)0x3B188C0 = 1;
*(uint8_t*)0x3B188C1 = 1;
if (callbackreceived)
SteamUserStats()->SetAchievement("NEW_ACHIEVEMENT_1_5"); // Sonic the Hedgehog
SetAchievement("NEW_ACHIEVEMENT_1_5"); // Sonic the Hedgehog
break;
case Characters_Tails:
*(uint8_t*)0x3B18851 = 1;
Expand Down Expand Up @@ -134,8 +137,7 @@ void __cdecl sub_4130E0_r()
if (*(uint8_t*)0x3B18854)
{
*(uint8_t*)0x3B1884F = 1;
if (callbackreceived)
SteamUserStats()->SetAchievement("NEW_ACHIEVEMENT_1_6"); // Super Sonic
SetAchievement("NEW_ACHIEVEMENT_1_6"); // Super Sonic
}
}
}
Expand All @@ -156,28 +158,28 @@ void SetEmblemCollected_r(SaveFileData *savefile, signed int index)
int count = CountEmblems(savefile);
if (count == 130)
{
SteamUserStats()->SetAchievement("NEW_ACHIEVEMENT_1_11"); // The Perfect Adventurer
SteamUserStats()->SetAchievement("NEW_ACHIEVEMENT_1_12"); // Metal Sonic
SetAchievement("NEW_ACHIEVEMENT_1_11"); // The Perfect Adventurer
SetAchievement("NEW_ACHIEVEMENT_1_12"); // Metal Sonic
}
else if (count == 65)
SteamUserStats()->IndicateAchievementProgress("NEW_ACHIEVEMENT_1_11", 65, 130);
if (savefile->Emblems[0] == 0xFF && savefile->Emblems[1] == 0xFF && savefile->Emblems[2] == 0xFF && savefile->Emblems[3] == 0xFF)
SteamUserStats()->SetAchievement("NEW_ACHIEVEMENT_1_7"); // The Fastest & Strongest
SetAchievement("NEW_ACHIEVEMENT_1_7"); // The Fastest & Strongest
if (savefile->Emblems[0xC] == 0xFF && (savefile->Emblems[0xD] & 3) == 3)
SteamUserStats()->SetAchievement("NEW_ACHIEVEMENT_1_8"); // Sub Game Master
SetAchievement("NEW_ACHIEVEMENT_1_8"); // Sub Game Master
if ((savefile->Emblems[0xD] & 0x7C) == 0x7C)
SteamUserStats()->SetAchievement("NEW_ACHIEVEMENT_1_9"); // Chao's Best Friend
SetAchievement("NEW_ACHIEVEMENT_1_9"); // Chao's Best Friend
if ((savefile->Emblems[0xE] & 0xC0) == 0xC0 && savefile->Emblems[0xF] == 0xFF && (savefile->Emblems[0x10] & 3) == 3)
SteamUserStats()->SetAchievement("NEW_ACHIEVEMENT_1_10"); // The Adventurer
SetAchievement("NEW_ACHIEVEMENT_1_10"); // The Adventurer
}
}

DataPointer(SaveFileData, SaveFile, 0x3B2B3A8);
void SetMetalEmblemCollected(SaveFileData *savefile, int character, signed int level, int mission)
{
SaveFile.MetalEmblems |= 1 << (mission + 3 * (level - 1));
if (callbackreceived && SaveFile.MetalEmblems == 0x3FFFFFFF)
SteamUserStats()->SetAchievement("NEW_ACHIEVEMENT_1_13"); // Metal Sonic Master
if (SaveFile.MetalEmblems == 0x3FFFFFFF)
SetAchievement("NEW_ACHIEVEMENT_1_13"); // Metal Sonic Master
}

void CheckMissions()
Expand All @@ -187,12 +189,23 @@ void CheckMissions()
for (size_t i = 0; i < 60; i++)
if ((flags[i] & MissionFlags_Complete) == 0)
return;
if (callbackreceived)
SteamUserStats()->SetAchievement("NEW_ACHIEVEMENT_1_14"); // Mission All Accomplished
SetAchievement("NEW_ACHIEVEMENT_1_14"); // Mission All Accomplished
}

extern "C"
{
__declspec(dllexport) void OnExit()
{
SteamAPI_Shutdown();
delete callbackobj;
}

__declspec(dllexport) void OnFrame()
{
if (SteamUserStats() && !callbackreceived)
SteamAPI_RunCallbacks();
}

__declspec(dllexport) void Init(const char *path, const HelperFunctions &helperFunctions)
{
if (!SteamAPI_Init())
Expand All @@ -202,18 +215,18 @@ extern "C"
return;
}
callbackobj = new CallbackStuff();
SteamUserStats()->RequestCurrentStats();
if (!SteamUserStats()->RequestCurrentStats())
{
PrintDebug("SteamAchievements: Stats request failed.\n");
OnExit();
return;
}
WriteJump(UnlockCharacterAdventure, UnlockCharacterAdventure_r);
WriteJump((void*)0x4130E0, sub_4130E0_r);
WriteJump(SetEmblemCollected, SetEmblemCollected_r);
WriteJump((void*)0x4B466C, SetMetalEmblemCollected);
WriteCall((void*)0x59202A, CheckMissions);
}

__declspec(dllexport) void OnExit()
{
SteamAPI_Shutdown();
}

__declspec(dllexport) ModInfo SADXModInfo = { ModLoaderVer };
}

0 comments on commit 15d17f2

Please sign in to comment.