Merge branch 'platterwrap' into 'master'

Prevent wraparound on Level platter when there are less than 3 rows

See merge request STJr/SRB2Internal!383
This commit is contained in:
MascaraSnake 2019-10-20 06:45:05 -04:00
commit 57d29a9b65
1 changed files with 48 additions and 12 deletions

View File

@ -4895,13 +4895,25 @@ static void M_HandleLevelPlatter(INT32 choice)
{ {
boolean exitmenu = false; // exit to previous menu boolean exitmenu = false; // exit to previous menu
INT32 selectval; INT32 selectval;
UINT8 iter;
switch (choice) switch (choice)
{ {
case KEY_DOWNARROW: case KEY_DOWNARROW:
if (lsrow == levelselect.numrows-1)
{
if (levelselect.numrows < 3)
{
if (!lsoffs[0]) // prevent sound spam
{
lsoffs[0] = -8;
S_StartSound(NULL,sfx_s3kb7);
}
return;
}
lsrow = UINT8_MAX;
}
lsrow++; lsrow++;
if (lsrow == levelselect.numrows)
lsrow = 0;
lsoffs[0] = lsvseperation(lsrow); lsoffs[0] = lsvseperation(lsrow);
@ -4915,17 +4927,29 @@ static void M_HandleLevelPlatter(INT32 choice)
break; break;
case KEY_UPARROW: case KEY_UPARROW:
lsoffs[0] = -lsvseperation(lsrow); iter = lsrow;
if (!lsrow)
{
if (levelselect.numrows < 3)
{
if (!lsoffs[0]) // prevent sound spam
{
lsoffs[0] = 8;
S_StartSound(NULL,sfx_s3kb7);
}
return;
}
lsrow = levelselect.numrows;
}
lsrow--; lsrow--;
if (lsrow == UINT8_MAX)
lsrow = levelselect.numrows-1; lsoffs[0] = -lsvseperation(iter);
if (levelselect.rows[lsrow].header[0]) if (levelselect.rows[lsrow].header[0])
lshli = lsrow; lshli = lsrow;
else else
{ {
UINT8 iter = lsrow; iter = lsrow;
do do
iter = ((iter == 0) ? levelselect.numrows-1 : iter-1); iter = ((iter == 0) ? levelselect.numrows-1 : iter-1);
while ((iter != lsrow) && !(levelselect.rows[iter].header[0])); while ((iter != lsrow) && !(levelselect.rows[iter].header[0]));
@ -4958,7 +4982,7 @@ static void M_HandleLevelPlatter(INT32 choice)
M_LevelSelectWarp(0); M_LevelSelectWarp(0);
Nextmap_OnChange(); Nextmap_OnChange();
} }
else if (!lsoffs[0]) // prevent sound spam else if (!lsoffs[0]) // prevent sound spam
{ {
lsoffs[0] = -8; lsoffs[0] = -8;
S_StartSound(NULL,sfx_s3kb2); S_StartSound(NULL,sfx_s3kb2);
@ -4988,7 +5012,7 @@ static void M_HandleLevelPlatter(INT32 choice)
ifselectvalnextmap(lscol) else ifselectvalnextmap(0) ifselectvalnextmap(lscol) else ifselectvalnextmap(0)
} }
else if (!lsoffs[1]) // prevent sound spam else if (!lsoffs[1]) // prevent sound spam
{ {
lsoffs[1] = 8; lsoffs[1] = 8;
S_StartSound(NULL,sfx_s3kb7); S_StartSound(NULL,sfx_s3kb7);
@ -5017,7 +5041,7 @@ static void M_HandleLevelPlatter(INT32 choice)
ifselectvalnextmap(lscol) else ifselectvalnextmap(0) ifselectvalnextmap(lscol) else ifselectvalnextmap(0)
} }
else if (!lsoffs[1]) // prevent sound spam else if (!lsoffs[1]) // prevent sound spam
{ {
lsoffs[1] = -8; lsoffs[1] = -8;
S_StartSound(NULL,sfx_s3kb7); S_StartSound(NULL,sfx_s3kb7);
@ -5188,7 +5212,13 @@ static void M_DrawLevelPlatterMenu(void)
// finds row at top of the screen // finds row at top of the screen
while (y > -8) while (y > -8)
{ {
iter = ((iter == 0) ? levelselect.numrows-1 : iter-1); if (iter == 0)
{
if (levelselect.numrows < 3)
break;
iter = levelselect.numrows;
}
iter--;
y -= lsvseperation(iter); y -= lsvseperation(iter);
} }
@ -5197,7 +5227,13 @@ static void M_DrawLevelPlatterMenu(void)
{ {
M_DrawLevelPlatterRow(iter, y); M_DrawLevelPlatterRow(iter, y);
y += lsvseperation(iter); y += lsvseperation(iter);
iter = ((iter == levelselect.numrows-1) ? 0 : iter+1); if (iter == levelselect.numrows-1)
{
if (levelselect.numrows < 3)
break;
iter = UINT8_MAX;
}
iter++;
} }
// draw cursor box // draw cursor box