Longer delay for using a Chao Key on a Major Challenge Tile

Also tidies up a lot of the code and constants related to the Key usage timing
This commit is contained in:
toaster 2023-09-27 20:54:32 +01:00
parent 3e901b312c
commit f29430f29c
3 changed files with 26 additions and 10 deletions

View file

@ -1214,9 +1214,11 @@ void M_DrawAddons(void);
#define TILEFLIP_MAX 16 #define TILEFLIP_MAX 16
#define CHAOHOLD_MAX (3*TICRATE/2) #define CHAOHOLD_STANDARD (40) // (Close to 3*TICRATE/2 after padding, but adjusted to evenly divide by 10)
#define CHAOHOLD_BEGIN 7 #define CHAOHOLD_MAJOR (60) //(3*CHAOHOLD_STANDARD/2)
#define CHAOHOLD_END 3 #define CHAOHOLD_BEGIN (7)
#define CHAOHOLD_END (3)
#define CHAOHOLD_PADDING (CHAOHOLD_BEGIN + CHAOHOLD_END)
extern struct timeattackmenu_s { extern struct timeattackmenu_s {

View file

@ -6102,18 +6102,25 @@ challengedesc:
major = true; major = true;
tilex += challengesgridstep/2; tilex += challengesgridstep/2;
tiley += challengesgridstep/2; tiley += challengesgridstep/2;
baseradius *= 2; baseradius = (7*baseradius)/4;
} }
if (challengesmenu.chaokeyhold >= CHAOHOLD_MAX - CHAOHOLD_END) const INT32 chaohold_duration =
CHAOHOLD_PADDING
+ (major
? CHAOHOLD_MAJOR
: CHAOHOLD_STANDARD
);
if (challengesmenu.chaokeyhold >= chaohold_duration - CHAOHOLD_END)
{ {
ending = true; ending = true;
baseradius = ((CHAOHOLD_MAX - challengesmenu.chaokeyhold)*baseradius)*(FRACUNIT/CHAOHOLD_END); baseradius = ((chaohold_duration - challengesmenu.chaokeyhold)*baseradius)*(FRACUNIT/CHAOHOLD_END);
} }
INT16 specifickeyholdtime = challengesmenu.chaokeyhold; INT16 specifickeyholdtime = challengesmenu.chaokeyhold;
for (i = 0; i < (major ? 10 : 1); i++, specifickeyholdtime -= 4) for (i = 0; i < (major ? 10 : 1); i++, specifickeyholdtime -= (CHAOHOLD_STANDARD/10))
{ {
fixed_t radius = baseradius; fixed_t radius = baseradius;
fixed_t thiskeyx, thiskeyy; fixed_t thiskeyx, thiskeyy;
@ -6140,11 +6147,11 @@ challengedesc:
radius <<= FRACBITS; radius <<= FRACBITS;
keyholdrotation += 360 * ((challengesmenu.chaokeyhold - CHAOHOLD_BEGIN)) keyholdrotation += 360 * ((challengesmenu.chaokeyhold - CHAOHOLD_BEGIN))
* (FRACUNIT/(CHAOHOLD_MAX - (CHAOHOLD_BEGIN + CHAOHOLD_END))); * (FRACUNIT/(CHAOHOLD_STANDARD)); // intentionally not chaohold_duration
if (i == 0) if (i == 0)
{ {
INT32 time = 3 - (keyholdrotation - 1) / (90 * FRACUNIT); INT32 time = (major ? 5 : 3) - (keyholdrotation - 1) / (90 * FRACUNIT);
if (time <= 5 && time >= 0) if (time <= 5 && time >= 0)
V_DrawScaledPatch(tilex + 2, tiley - 2, 0, kp_eggnum[time]); V_DrawScaledPatch(tilex + 2, tiley - 2, 0, kp_eggnum[time]);
} }

View file

@ -382,7 +382,14 @@ void M_ChallengesTick(void)
{ {
challengesmenu.chaokeyhold++; challengesmenu.chaokeyhold++;
if (challengesmenu.chaokeyhold > CHAOHOLD_MAX) const UINT32 chaohold_duration =
CHAOHOLD_PADDING
+ ((unlockables[challengesmenu.currentunlock].majorunlock == true)
? CHAOHOLD_MAJOR
: CHAOHOLD_STANDARD
);
if (challengesmenu.chaokeyhold > chaohold_duration)
{ {
#ifndef CHAOKEYDEBUG #ifndef CHAOKEYDEBUG
gamedata->chaokeys -= (unlockables[challengesmenu.currentunlock].majorunlock == true) gamedata->chaokeys -= (unlockables[challengesmenu.currentunlock].majorunlock == true)