mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Disjointed scroll and selection
* You can be at most 3*16 pixels away from the centerline. * Bonus polish: during unlock sequence, movement is smooth and zips back and forth.
This commit is contained in:
parent
be38ba1511
commit
a657a5e591
3 changed files with 97 additions and 12 deletions
|
|
@ -1085,6 +1085,8 @@ void M_DrawAddons(void);
|
||||||
// Challenges menu:
|
// Challenges menu:
|
||||||
#define UNLOCKTIME 5
|
#define UNLOCKTIME 5
|
||||||
#define MAXUNLOCKTIME TICRATE
|
#define MAXUNLOCKTIME TICRATE
|
||||||
|
#define RIGHTUNLOCKSCROLL 3
|
||||||
|
#define LEFTUNLOCKSCROLL (RIGHTUNLOCKSCROLL-1)
|
||||||
|
|
||||||
// Keep track of some pause menu data for visual goodness.
|
// Keep track of some pause menu data for visual goodness.
|
||||||
extern struct challengesmenu_s {
|
extern struct challengesmenu_s {
|
||||||
|
|
@ -1092,16 +1094,18 @@ extern struct challengesmenu_s {
|
||||||
tic_t ticker; // How long the menu's been open for
|
tic_t ticker; // How long the menu's been open for
|
||||||
INT16 offset; // To make the icons move smoothly when we transition!
|
INT16 offset; // To make the icons move smoothly when we transition!
|
||||||
|
|
||||||
UINT8 fade;
|
|
||||||
UINT8 currentunlock;
|
UINT8 currentunlock;
|
||||||
tic_t unlockanim;
|
tic_t unlockanim;
|
||||||
|
|
||||||
UINT8 row, col, hilix, hiliy;
|
SINT8 row, hilix, focusx;
|
||||||
|
UINT8 col, hiliy;
|
||||||
|
|
||||||
UINT8 *extradata;
|
UINT8 *extradata;
|
||||||
|
|
||||||
boolean pending;
|
boolean pending;
|
||||||
boolean requestnew;
|
boolean requestnew;
|
||||||
|
|
||||||
|
UINT8 fade;
|
||||||
} challengesmenu;
|
} challengesmenu;
|
||||||
|
|
||||||
menu_t *M_InterruptMenuWithChallenges(menu_t *desiredmenu);
|
menu_t *M_InterruptMenuWithChallenges(menu_t *desiredmenu);
|
||||||
|
|
|
||||||
|
|
@ -4611,9 +4611,13 @@ void M_DrawChallenges(void)
|
||||||
|
|
||||||
x -= 16;
|
x -= 16;
|
||||||
|
|
||||||
|
x += challengesmenu.offset;
|
||||||
|
|
||||||
if (challengegridloops)
|
if (challengegridloops)
|
||||||
{
|
{
|
||||||
i = challengesmenu.col;
|
if (!challengesmenu.col && challengesmenu.hilix)
|
||||||
|
x -= gamedata->challengegridwidth*16;
|
||||||
|
i = challengesmenu.col + challengesmenu.focusx;
|
||||||
explodex = x - (i*16);
|
explodex = x - (i*16);
|
||||||
|
|
||||||
while (x < BASEVIDWIDTH-16)
|
while (x < BASEVIDWIDTH-16)
|
||||||
|
|
|
||||||
|
|
@ -6929,6 +6929,12 @@ void M_Challenges(INT32 choice)
|
||||||
|
|
||||||
challengesmenu.col = challengesmenu.hilix = i/CHALLENGEGRIDHEIGHT;
|
challengesmenu.col = challengesmenu.hilix = i/CHALLENGEGRIDHEIGHT;
|
||||||
challengesmenu.row = challengesmenu.hiliy = i%CHALLENGEGRIDHEIGHT;
|
challengesmenu.row = challengesmenu.hiliy = i%CHALLENGEGRIDHEIGHT;
|
||||||
|
|
||||||
|
challengesmenu.focusx = 0;
|
||||||
|
if (challengesmenu.currentunlock < MAXUNLOCKABLES
|
||||||
|
&& !unlockables[challengesmenu.currentunlock].majorunlock
|
||||||
|
&& M_RandomChance(FRACUNIT/2))
|
||||||
|
challengesmenu.focusx--;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -6939,6 +6945,8 @@ void M_Challenges(INT32 choice)
|
||||||
void M_ChallengesTick(void)
|
void M_ChallengesTick(void)
|
||||||
{
|
{
|
||||||
UINT8 i, newunlock = MAXUNLOCKABLES;
|
UINT8 i, newunlock = MAXUNLOCKABLES;
|
||||||
|
SINT8 work;
|
||||||
|
boolean fresh = (challengesmenu.currentunlock >= MAXUNLOCKABLES);
|
||||||
|
|
||||||
challengesmenu.ticker++;
|
challengesmenu.ticker++;
|
||||||
|
|
||||||
|
|
@ -6970,8 +6978,60 @@ void M_ChallengesTick(void)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
work = (challengesmenu.col + challengesmenu.focusx);
|
||||||
|
|
||||||
challengesmenu.col = challengesmenu.hilix = i/CHALLENGEGRIDHEIGHT;
|
challengesmenu.col = challengesmenu.hilix = i/CHALLENGEGRIDHEIGHT;
|
||||||
challengesmenu.row = challengesmenu.hiliy = i%CHALLENGEGRIDHEIGHT;
|
challengesmenu.row = challengesmenu.hiliy = i%CHALLENGEGRIDHEIGHT;
|
||||||
|
|
||||||
|
if (fresh)
|
||||||
|
{
|
||||||
|
challengesmenu.focusx = 0;
|
||||||
|
if (!unlockables[challengesmenu.currentunlock].majorunlock
|
||||||
|
&& M_RandomChance(FRACUNIT/2))
|
||||||
|
challengesmenu.focusx--;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
work -= challengesmenu.col;
|
||||||
|
if (work <= -gamedata->challengegridwidth/2)
|
||||||
|
work += gamedata->challengegridwidth;
|
||||||
|
else if (work >= gamedata->challengegridwidth/2)
|
||||||
|
work -= gamedata->challengegridwidth;
|
||||||
|
|
||||||
|
if (work > 0)
|
||||||
|
{
|
||||||
|
if (work > LEFTUNLOCKSCROLL)
|
||||||
|
{
|
||||||
|
work -= LEFTUNLOCKSCROLL;
|
||||||
|
challengesmenu.focusx = LEFTUNLOCKSCROLL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
challengesmenu.focusx = work;
|
||||||
|
work = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (work < 0)
|
||||||
|
{
|
||||||
|
if (work < -RIGHTUNLOCKSCROLL)
|
||||||
|
{
|
||||||
|
challengesmenu.focusx = -RIGHTUNLOCKSCROLL;
|
||||||
|
work += RIGHTUNLOCKSCROLL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
challengesmenu.focusx = work;
|
||||||
|
work = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
challengesmenu.focusx = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
challengesmenu.offset = -work*16;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -7046,6 +7106,8 @@ void M_ChallengesTick(void)
|
||||||
}
|
}
|
||||||
else if (challengesmenu.fade > 0)
|
else if (challengesmenu.fade > 0)
|
||||||
challengesmenu.fade--;
|
challengesmenu.fade--;
|
||||||
|
|
||||||
|
challengesmenu.offset /= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean M_ChallengesInputs(INT32 ch)
|
boolean M_ChallengesInputs(INT32 ch)
|
||||||
|
|
@ -7087,6 +7149,12 @@ boolean M_ChallengesInputs(INT32 ch)
|
||||||
|
|
||||||
challengesmenu.col = challengesmenu.hilix = i/CHALLENGEGRIDHEIGHT;
|
challengesmenu.col = challengesmenu.hilix = i/CHALLENGEGRIDHEIGHT;
|
||||||
challengesmenu.row = challengesmenu.hiliy = i%CHALLENGEGRIDHEIGHT;
|
challengesmenu.row = challengesmenu.hiliy = i%CHALLENGEGRIDHEIGHT;
|
||||||
|
|
||||||
|
challengesmenu.focusx = 0;
|
||||||
|
if (!unlockables[challengesmenu.currentunlock].majorunlock
|
||||||
|
&& M_RandomChance(FRACUNIT/2))
|
||||||
|
challengesmenu.focusx--;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -7165,6 +7233,8 @@ boolean M_ChallengesInputs(INT32 ch)
|
||||||
i = 2;
|
i = 2;
|
||||||
while (i > 0)
|
while (i > 0)
|
||||||
{
|
{
|
||||||
|
if (challengesmenu.focusx > -RIGHTUNLOCKSCROLL)
|
||||||
|
challengesmenu.focusx--;
|
||||||
if (challengesmenu.col < gamedata->challengegridwidth-1)
|
if (challengesmenu.col < gamedata->challengegridwidth-1)
|
||||||
{
|
{
|
||||||
challengesmenu.col++;
|
challengesmenu.col++;
|
||||||
|
|
@ -7193,6 +7263,8 @@ boolean M_ChallengesInputs(INT32 ch)
|
||||||
& CHE_CONNECTEDLEFT) ? 2 : 1;
|
& CHE_CONNECTEDLEFT) ? 2 : 1;
|
||||||
while (i > 0)
|
while (i > 0)
|
||||||
{
|
{
|
||||||
|
if (challengesmenu.focusx < LEFTUNLOCKSCROLL)
|
||||||
|
challengesmenu.focusx++;
|
||||||
if (challengesmenu.col > 0)
|
if (challengesmenu.col > 0)
|
||||||
{
|
{
|
||||||
challengesmenu.col--;
|
challengesmenu.col--;
|
||||||
|
|
@ -7213,6 +7285,10 @@ boolean M_ChallengesInputs(INT32 ch)
|
||||||
|
|
||||||
challengesmenu.hilix = challengesmenu.col;
|
challengesmenu.hilix = challengesmenu.col;
|
||||||
challengesmenu.hiliy = challengesmenu.row;
|
challengesmenu.hiliy = challengesmenu.row;
|
||||||
|
|
||||||
|
if (challengesmenu.currentunlock < MAXUNLOCKABLES
|
||||||
|
&& unlockables[challengesmenu.currentunlock].majorunlock)
|
||||||
|
{
|
||||||
if (challengesmenu.hiliy > 0 && (challengesmenu.extradata[i] & CHE_CONNECTEDUP))
|
if (challengesmenu.hiliy > 0 && (challengesmenu.extradata[i] & CHE_CONNECTEDUP))
|
||||||
{
|
{
|
||||||
challengesmenu.hiliy--;
|
challengesmenu.hiliy--;
|
||||||
|
|
@ -7231,6 +7307,7 @@ boolean M_ChallengesInputs(INT32 ch)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue