diff --git a/src/k_menu.h b/src/k_menu.h index 2cea14781..8c91a612c 100644 --- a/src/k_menu.h +++ b/src/k_menu.h @@ -1214,9 +1214,11 @@ void M_DrawAddons(void); #define TILEFLIP_MAX 16 -#define CHAOHOLD_MAX (3*TICRATE/2) -#define CHAOHOLD_BEGIN 7 -#define CHAOHOLD_END 3 +#define CHAOHOLD_STANDARD (40) // (Close to 3*TICRATE/2 after padding, but adjusted to evenly divide by 10) +#define CHAOHOLD_MAJOR (60) //(3*CHAOHOLD_STANDARD/2) +#define CHAOHOLD_BEGIN (7) +#define CHAOHOLD_END (3) +#define CHAOHOLD_PADDING (CHAOHOLD_BEGIN + CHAOHOLD_END) extern struct timeattackmenu_s { diff --git a/src/k_menudraw.c b/src/k_menudraw.c index 2f721c682..691ccf65e 100644 --- a/src/k_menudraw.c +++ b/src/k_menudraw.c @@ -6102,18 +6102,25 @@ challengedesc: major = true; tilex += 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; - baseradius = ((CHAOHOLD_MAX - challengesmenu.chaokeyhold)*baseradius)*(FRACUNIT/CHAOHOLD_END); + baseradius = ((chaohold_duration - challengesmenu.chaokeyhold)*baseradius)*(FRACUNIT/CHAOHOLD_END); } 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 thiskeyx, thiskeyy; @@ -6140,11 +6147,11 @@ challengedesc: radius <<= FRACBITS; keyholdrotation += 360 * ((challengesmenu.chaokeyhold - CHAOHOLD_BEGIN)) - * (FRACUNIT/(CHAOHOLD_MAX - (CHAOHOLD_BEGIN + CHAOHOLD_END))); + * (FRACUNIT/(CHAOHOLD_STANDARD)); // intentionally not chaohold_duration if (i == 0) { - INT32 time = 3 - (keyholdrotation - 1) / (90 * FRACUNIT); + INT32 time = (major ? 5 : 3) - (keyholdrotation - 1) / (90 * FRACUNIT); if (time <= 5 && time >= 0) V_DrawScaledPatch(tilex + 2, tiley - 2, 0, kp_eggnum[time]); } diff --git a/src/menus/extras-challenges.c b/src/menus/extras-challenges.c index 33a87fed5..6eba38d84 100644 --- a/src/menus/extras-challenges.c +++ b/src/menus/extras-challenges.c @@ -382,7 +382,14 @@ void M_ChallengesTick(void) { 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 gamedata->chaokeys -= (unlockables[challengesmenu.currentunlock].majorunlock == true)