Merge branch 'challenge-kindnesses' into 'master'

Challenge Kindnesses

See merge request KartKrew/Kart!2328
This commit is contained in:
Oni 2024-05-01 01:05:58 +00:00
commit 0582a00040
5 changed files with 51 additions and 34 deletions

View file

@ -493,7 +493,12 @@ void srb2::load_ng_gamedata()
gamedata->tutorialdone = js.milestones.tutorialdone; gamedata->tutorialdone = js.milestones.tutorialdone;
gamedata->gonerlevel = js.milestones.gonerlevel; gamedata->gonerlevel = js.milestones.gonerlevel;
gamedata->thisprisoneggpickup = js.prisons.thisprisoneggpickup; gamedata->thisprisoneggpickup = js.prisons.thisprisoneggpickup;
gamedata->prisoneggstothispickup = js.prisons.prisoneggstothispickup; gamedata->prisoneggstothispickup = js.prisons.prisoneggstothispickup;
if (gamedata->prisoneggstothispickup > GDINIT_PRISONSTOPRIZE)
{
gamedata->prisoneggstothispickup = GDINIT_PRISONSTOPRIZE;
}
size_t emblems_size = js.emblems.size(); size_t emblems_size = js.emblems.size();
for (size_t i = 0; i < std::min((size_t)MAXEMBLEMS, emblems_size); i++) for (size_t i = 0; i < std::min((size_t)MAXEMBLEMS, emblems_size); i++)

View file

@ -398,6 +398,20 @@ badgrid:
gamedata->challengegridwidth = 0; gamedata->challengegridwidth = 0;
} }
static void M_ChallengeGridExtraDataAdjacencyRules(challengegridextradata_t *extradata, UINT16 adjacent)
{
// Adjacent unlocked tile, permit hint/general key skip.
if (gamedata->unlocked[adjacent] == true)
{
extradata->flags |= CHE_HINT;
}
// Adjacent locked small tile, prevent 10x key skip.
else if (unlockables[adjacent].majorunlock == false)
{
extradata->flags &= ~CHE_ALLCLEAR;
}
}
void M_UpdateChallengeGridExtraData(challengegridextradata_t *extradata) void M_UpdateChallengeGridExtraData(challengegridextradata_t *extradata)
{ {
UINT16 i, j, num, id, tempid, work; UINT16 i, j, num, id, tempid, work;
@ -489,14 +503,7 @@ void M_UpdateChallengeGridExtraData(challengegridextradata_t *extradata)
} }
else if (work < MAXUNLOCKABLES) else if (work < MAXUNLOCKABLES)
{ {
if (gamedata->unlocked[work] == true) M_ChallengeGridExtraDataAdjacencyRules(extradata+id, work);
{
extradata[id].flags |= CHE_HINT;
}
else
{
extradata[id].flags &= ~CHE_ALLCLEAR;
}
} }
} }
@ -534,14 +541,7 @@ void M_UpdateChallengeGridExtraData(challengegridextradata_t *extradata)
} }
else if (work < MAXUNLOCKABLES) else if (work < MAXUNLOCKABLES)
{ {
if (gamedata->unlocked[work] == true) M_ChallengeGridExtraDataAdjacencyRules(extradata+id, work);
{
extradata[id].flags |= CHE_HINT;
}
else
{
extradata[id].flags &= ~CHE_ALLCLEAR;
}
} }
} }
@ -566,14 +566,7 @@ void M_UpdateChallengeGridExtraData(challengegridextradata_t *extradata)
} }
else if (work < MAXUNLOCKABLES) else if (work < MAXUNLOCKABLES)
{ {
if (gamedata->unlocked[work] == true) M_ChallengeGridExtraDataAdjacencyRules(extradata+id, work);
{
extradata[id].flags |= CHE_HINT;
}
else
{
extradata[id].flags &= ~CHE_ALLCLEAR;
}
} }
} }
@ -595,14 +588,7 @@ void M_UpdateChallengeGridExtraData(challengegridextradata_t *extradata)
} }
else if (work < MAXUNLOCKABLES) else if (work < MAXUNLOCKABLES)
{ {
if (gamedata->unlocked[work] == true) M_ChallengeGridExtraDataAdjacencyRules(extradata+id, work);
{
extradata[id].flags |= CHE_HINT;
}
else
{
extradata[id].flags &= ~CHE_ALLCLEAR;
}
} }
} }
} }

View file

@ -302,7 +302,7 @@ typedef enum {
#define GDCONVERT_ROUNDSTOKEY 5 #define GDCONVERT_ROUNDSTOKEY 5
#define GDINIT_CHAOKEYS 10 // Start with 10 Chao Keys !! #define GDINIT_CHAOKEYS 10 // Start with 10 Chao Keys !!
#define GDINIT_PRISONSTOPRIZE 30 // 30 Prison Eggs to your [Wild Prize] !! #define GDINIT_PRISONSTOPRIZE 15 // 15 Prison Eggs to your [Wild Prize] !!
typedef enum { typedef enum {
GDGONER_INIT = 0, GDGONER_INIT = 0,

View file

@ -535,6 +535,31 @@ void f_difficulty()
} }
} }
void f_keys()
{
INT32 givekeys = 25;
if (gamedata->chaokeys > (GDMAX_CHAOKEYS - givekeys))
{
givekeys = GDMAX_CHAOKEYS - gamedata->chaokeys;
}
if (givekeys > 0)
{
S_StartSound(0, sfx_keygen);
gamedata->chaokeys += givekeys;
gamedata->chaokeytutorial = true;
M_StartMessage("Dr. Robotnik's Ring Racers - Deluxe Edition", va("Claimed %d Chao Keys!", givekeys), NULL, MM_NOTHING, NULL, NULL);
G_SaveGameData();
}
else
{
M_StartMessage("Dr. Robotnik's Ring Racers - Deluxe Edition", "You have the maximum number of Chao Keys!", NULL, MM_NOTHING, NULL, NULL);
}
}
void f_devmode() void f_devmode()
{ {
INT32 i; INT32 i;
@ -737,4 +762,5 @@ void M_PasswordInit(void)
passwords.emplace_back(f_timeattack, "mFu5OB9d6jnc2kth7HE66wJ42F/GHDzSvuciK1Qw++6iGnpBccxcKjpoxgOvD3eIoqR606ruBINuXi23proXHQ=="); passwords.emplace_back(f_timeattack, "mFu5OB9d6jnc2kth7HE66wJ42F/GHDzSvuciK1Qw++6iGnpBccxcKjpoxgOvD3eIoqR606ruBINuXi23proXHQ==");
passwords.emplace_back(f_encore, "i5u5sIsMs5eITy+LzAXvKm6D9OzOVKhUqSy1mTTV/oUxJX6RPsk8OcyLbNaey9Vc6wXOhz+2+mTXILkIRzvXqA=="); passwords.emplace_back(f_encore, "i5u5sIsMs5eITy+LzAXvKm6D9OzOVKhUqSy1mTTV/oUxJX6RPsk8OcyLbNaey9Vc6wXOhz+2+mTXILkIRzvXqA==");
passwords.emplace_back(f_difficulty, "MKjOtEFLkgXf21uiECdBTU6XtbkuFWaGh7i8znKo7JrXXEDrCBJmGwINvPg0T3TLn0zlscLvmC5nve7I+NTrnA=="); passwords.emplace_back(f_difficulty, "MKjOtEFLkgXf21uiECdBTU6XtbkuFWaGh7i8znKo7JrXXEDrCBJmGwINvPg0T3TLn0zlscLvmC5nve7I+NTrnA==");
passwords.emplace_back(f_keys, "jgsD6UJ2Xa10QcS2ZDJwcvpd4iia3AXIG8wDDSsHX7kFH5jEXnym45yaNZG9hIKEvBMpVONKR0YTA6JBAQRCvg==");
} }

View file

@ -507,7 +507,7 @@ static void M_ChallengesTutorial(UINT8 option)
"to break open Big Challenge tiles.\n" "to break open Big Challenge tiles.\n"
"\n" "\n"
"You'll also need to unlock\n" "You'll also need to unlock\n"
"the surrounding tiles first.\n" "any surrounding small tiles first.\n"
), NULL, MM_NOTHING, NULL, NULL); ), NULL, MM_NOTHING, NULL, NULL);
gamedata->majorkeyskipattempted = true; gamedata->majorkeyskipattempted = true;
break; break;