Introducing... M_GetMapThumbnail and arbitrarily scaled thumbnails
* only supports two sizes
This commit is contained in:
parent
ec5f317f28
commit
6db125c0f3
5 changed files with 57 additions and 81 deletions
|
|
@ -99,6 +99,8 @@ static char hu_tick;
|
|||
|
||||
patch_t *missingpat;
|
||||
patch_t *blanklvl;
|
||||
patch_t *randomlvl;
|
||||
patch_t *nolvl;
|
||||
|
||||
// song credits
|
||||
static patch_t *songcreditbg;
|
||||
|
|
@ -188,6 +190,8 @@ void HU_LoadGraphics(void)
|
|||
Font_Load();
|
||||
|
||||
HU_UpdatePatch(&blanklvl, "BLANKLVL");
|
||||
HU_UpdatePatch(&randomlvl, "RANDOMLV");
|
||||
HU_UpdatePatch(&nolvl, "M_NOLVL");
|
||||
|
||||
HU_UpdatePatch(&songcreditbg, "K_SONGCR");
|
||||
|
||||
|
|
|
|||
75
src/m_menu.c
75
src/m_menu.c
|
|
@ -1785,6 +1785,23 @@ INT32 HU_GetHighlightColor(void)
|
|||
return highlightflags;
|
||||
}
|
||||
|
||||
fixed_t M_GetMapThumbnail(INT16 mapnum, patch_t **out)
|
||||
{
|
||||
patch_t *patch = NULL;
|
||||
if (mapnum == -1)
|
||||
patch = randomlvl;
|
||||
else if (mapnum >= 0 && mapnum < nummapheaders && mapheaderinfo[mapnum])
|
||||
patch = mapheaderinfo[mapnum]->thumbnailPic;
|
||||
|
||||
if (!patch)
|
||||
patch = blanklvl;
|
||||
|
||||
*out = patch;
|
||||
|
||||
// check width instead of height because haha big winton
|
||||
return patch->width >= 320 ? FRACUNIT/4 : FRACUNIT/2;
|
||||
}
|
||||
|
||||
// Sky Room
|
||||
menu_t SR_PandoraDef =
|
||||
{
|
||||
|
|
@ -5619,19 +5636,18 @@ static void DrawReplayHutReplayInfo(void)
|
|||
// Draw level stuff
|
||||
x = 15; y = 15;
|
||||
|
||||
// A 160x100 image of the level
|
||||
//CONS_Printf("%d %s\n", demolist[dir_on[menudepthleft]].map, G_BuildMapName(demolist[dir_on[menudepthleft]].map));
|
||||
patch = mapheaderinfo[demolist[dir_on[menudepthleft]].map-1]
|
||||
? mapheaderinfo[demolist[dir_on[menudepthleft]].map-1]->thumbnailPic
|
||||
: W_CachePatchName("M_NOLVL", PU_CACHE);
|
||||
fixed_t scale = M_GetMapThumbnail(demolist[dir_on[menudepthleft]].map, &patch);
|
||||
if (patch == blanklvl)
|
||||
patch = nolvl;
|
||||
|
||||
if (!(demolist[dir_on[menudepthleft]].kartspeed & DF_ENCORE))
|
||||
V_DrawSmallScaledPatch(x, y, V_SNAPTOTOP, patch);
|
||||
V_DrawFixedPatch(x<<FRACBITS, y<<FRACBITS, scale, V_SNAPTOTOP, patch, NULL);
|
||||
else
|
||||
{
|
||||
w = SHORT(patch->width);
|
||||
h = SHORT(patch->height);
|
||||
V_DrawSmallScaledPatch(x+(w>>1), y, V_SNAPTOTOP|V_FLIP, patch);
|
||||
w = FixedMul(SHORT(patch->width), scale);
|
||||
h = FixedMul(SHORT(patch->height), scale);
|
||||
V_DrawFixedPatch((x+(w>>1))<<FRACBITS, y<<FRACBITS, scale, V_SNAPTOTOP|V_FLIP, patch, NULL);
|
||||
|
||||
{
|
||||
static angle_t rubyfloattime = 0;
|
||||
|
|
@ -8983,19 +8999,10 @@ static void M_DrawLevelSelectOnly(boolean leftfade, boolean rightfade)
|
|||
{
|
||||
patch_t *PictureOfLevel;
|
||||
INT32 x, y, w, i, oldval, trans, dupadjust = ((vid.width/vid.dupx) - BASEVIDWIDTH)>>1;
|
||||
fixed_t scale = M_GetMapThumbnail(cv_nextmap.value-1, &PictureOfLevel);
|
||||
|
||||
// A 160x100 image of the level
|
||||
if (cv_nextmap.value)
|
||||
{
|
||||
PictureOfLevel = mapheaderinfo[cv_nextmap.value-1]->thumbnailPic;
|
||||
if (!PictureOfLevel)
|
||||
PictureOfLevel = blanklvl;
|
||||
}
|
||||
else
|
||||
PictureOfLevel = W_CachePatchName("RANDOMLV", PU_CACHE);
|
||||
|
||||
w = SHORT(PictureOfLevel->width)/2;
|
||||
i = SHORT(PictureOfLevel->height)/2;
|
||||
w = FixedMul(SHORT(PictureOfLevel->width), scale);
|
||||
i = FixedMul(SHORT(PictureOfLevel->height), scale);
|
||||
x = BASEVIDWIDTH/2 - w/2;
|
||||
y = currentMenu->y + 130 + 8 - i;
|
||||
|
||||
|
|
@ -9007,14 +9014,14 @@ static void M_DrawLevelSelectOnly(boolean leftfade, boolean rightfade)
|
|||
V_DrawFill(x-1, y-1, w+2, i+2, trans); // variable reuse...
|
||||
|
||||
if ((cv_kartencore.value != 1) || gamestate == GS_TIMEATTACK || cv_newgametype.value != GT_RACE)
|
||||
V_DrawSmallScaledPatch(x, y, 0, PictureOfLevel);
|
||||
V_DrawFixedPatch(x<<FRACBITS, y<<FRACBITS, scale, 0, PictureOfLevel, NULL);
|
||||
else
|
||||
{
|
||||
/*UINT8 *mappingforencore = NULL;
|
||||
if ((lumpnum = W_CheckNumForName(va("%sE", mapname))) != LUMPERROR)
|
||||
mappingforencore = W_CachePatchNum(lumpnum, PU_CACHE);*/
|
||||
|
||||
V_DrawFixedPatch((x+w)<<FRACBITS, (y)<<FRACBITS, FRACUNIT/2, V_FLIP, PictureOfLevel, 0);
|
||||
V_DrawFixedPatch((x+w)<<FRACBITS, y<<FRACBITS, scale, V_FLIP, PictureOfLevel, NULL);
|
||||
|
||||
{
|
||||
static angle_t rubyfloattime = 0;
|
||||
|
|
@ -9048,19 +9055,11 @@ static void M_DrawLevelSelectOnly(boolean leftfade, boolean rightfade)
|
|||
|
||||
} while (!M_CanShowLevelInList(i, cv_newgametype.value));
|
||||
|
||||
// A 160x100 image of the level as entry MAPxxP
|
||||
if (i >= 0)
|
||||
{
|
||||
PictureOfLevel = mapheaderinfo[i]->thumbnailPic;
|
||||
if (!PictureOfLevel)
|
||||
PictureOfLevel = blanklvl;
|
||||
}
|
||||
else
|
||||
PictureOfLevel = W_CachePatchName("RANDOMLV", PU_CACHE);
|
||||
scale = M_GetMapThumbnail(i, &PictureOfLevel)/2;
|
||||
|
||||
x -= horizspac + w/2;
|
||||
|
||||
V_DrawTinyScaledPatch(x, y, trans, PictureOfLevel);
|
||||
V_DrawFixedPatch(x<<FRACBITS, y<<FRACBITS, scale, trans, PictureOfLevel, NULL);
|
||||
} while (x > horizspac-dupadjust);
|
||||
|
||||
x = (BASEVIDWIDTH + w)/2 + horizspac;
|
||||
|
|
@ -9084,17 +9083,9 @@ static void M_DrawLevelSelectOnly(boolean leftfade, boolean rightfade)
|
|||
|
||||
} while (!M_CanShowLevelInList(i, cv_newgametype.value));
|
||||
|
||||
// A 160x100 image of the level as entry MAPxxP
|
||||
if (i >= 0)
|
||||
{
|
||||
PictureOfLevel = mapheaderinfo[i]->thumbnailPic;
|
||||
if (!PictureOfLevel)
|
||||
PictureOfLevel = blanklvl;
|
||||
}
|
||||
else
|
||||
PictureOfLevel = W_CachePatchName("RANDOMLV", PU_CACHE);
|
||||
scale = M_GetMapThumbnail(i, &PictureOfLevel)/2;
|
||||
|
||||
V_DrawTinyScaledPatch(x, y, trans, PictureOfLevel);
|
||||
V_DrawFixedPatch(x<<FRACBITS, y<<FRACBITS, scale, trans, PictureOfLevel, NULL);
|
||||
|
||||
x += horizspac + w/2;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -479,6 +479,8 @@ void M_RefreshPauseMenu(void);
|
|||
|
||||
INT32 HU_GetHighlightColor(void);
|
||||
|
||||
fixed_t M_GetMapThumbnail(INT16 mapnum, patch_t **out);
|
||||
|
||||
// Moviemode menu updating
|
||||
void Moviemode_option_Onchange(void);
|
||||
|
||||
|
|
|
|||
|
|
@ -906,6 +906,8 @@ struct patch_t
|
|||
|
||||
extern patch_t *missingpat;
|
||||
extern patch_t *blanklvl;
|
||||
extern patch_t *randomlvl;
|
||||
extern patch_t *nolvl;
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#pragma pack(1)
|
||||
|
|
|
|||
|
|
@ -174,7 +174,6 @@ static patch_t *cursor1 = NULL;
|
|||
static patch_t *cursor2 = NULL;
|
||||
static patch_t *cursor3 = NULL;
|
||||
static patch_t *cursor4 = NULL;
|
||||
static patch_t *randomlvl = NULL;
|
||||
static patch_t *rubyicon = NULL;
|
||||
|
||||
static void Y_UnloadVoteData(void);
|
||||
|
|
@ -1188,6 +1187,9 @@ void Y_VoteDrawer(void)
|
|||
INT32 i, x, y = 0, height = 0;
|
||||
UINT8 selected[4];
|
||||
fixed_t rubyheight = 0;
|
||||
fixed_t scale;
|
||||
patch_t *pic;
|
||||
INT16 mapnum;
|
||||
|
||||
if (rendermode == render_none)
|
||||
return;
|
||||
|
|
@ -1256,29 +1258,19 @@ void Y_VoteDrawer(void)
|
|||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
const char *str;
|
||||
patch_t *pic;
|
||||
UINT8 j, color;
|
||||
|
||||
if (i == 3)
|
||||
{
|
||||
str = "RANDOM";
|
||||
pic = randomlvl;
|
||||
mapnum = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
str = levelinfo[i].str;
|
||||
pic = NULL;
|
||||
|
||||
if (mapheaderinfo[votelevels[i][0]])
|
||||
{
|
||||
pic = mapheaderinfo[votelevels[i][0]]->thumbnailPic;
|
||||
}
|
||||
|
||||
if (!pic)
|
||||
{
|
||||
pic = blanklvl;
|
||||
}
|
||||
mapnum = votelevels[i][0];
|
||||
}
|
||||
scale = M_GetMapThumbnail(mapnum, &pic);
|
||||
|
||||
if (selected[i])
|
||||
{
|
||||
|
|
@ -1342,10 +1334,10 @@ void Y_VoteDrawer(void)
|
|||
}
|
||||
|
||||
if (!levelinfo[i].encore)
|
||||
V_DrawSmallScaledPatch(BASEVIDWIDTH-100, y, V_SNAPTORIGHT, pic);
|
||||
V_DrawFixedPatch((BASEVIDWIDTH-100)<<FRACBITS, y<<FRACBITS, scale, V_SNAPTORIGHT, pic, NULL);
|
||||
else
|
||||
{
|
||||
V_DrawFixedPatch((BASEVIDWIDTH-20)<<FRACBITS, (y)<<FRACBITS, FRACUNIT/2, V_FLIP|V_SNAPTORIGHT, pic, 0);
|
||||
V_DrawFixedPatch((BASEVIDWIDTH-20)<<FRACBITS, y<<FRACBITS, scale, V_FLIP|V_SNAPTORIGHT, pic, NULL);
|
||||
V_DrawFixedPatch((BASEVIDWIDTH-60)<<FRACBITS, ((y+25)<<FRACBITS) - (rubyheight<<1), FRACUNIT, V_SNAPTORIGHT, rubyicon, NULL);
|
||||
}
|
||||
|
||||
|
|
@ -1365,11 +1357,12 @@ void Y_VoteDrawer(void)
|
|||
}
|
||||
else
|
||||
{
|
||||
scale /= 2;
|
||||
if (!levelinfo[i].encore)
|
||||
V_DrawTinyScaledPatch(BASEVIDWIDTH-60, y, V_SNAPTORIGHT, pic);
|
||||
V_DrawFixedPatch((BASEVIDWIDTH-60)<<FRACBITS, y<<FRACBITS, scale, V_SNAPTORIGHT, pic, NULL);
|
||||
else
|
||||
{
|
||||
V_DrawFixedPatch((BASEVIDWIDTH-20)<<FRACBITS, y<<FRACBITS, FRACUNIT/4, V_FLIP|V_SNAPTORIGHT, pic, 0);
|
||||
V_DrawFixedPatch((BASEVIDWIDTH-20)<<FRACBITS, y<<FRACBITS, scale, V_FLIP|V_SNAPTORIGHT, pic, NULL);
|
||||
V_DrawFixedPatch((BASEVIDWIDTH-40)<<FRACBITS, (y<<FRACBITS) + (25<<(FRACBITS-1)) - rubyheight, FRACUNIT/2, V_SNAPTORIGHT, rubyicon, NULL);
|
||||
}
|
||||
|
||||
|
|
@ -1394,26 +1387,12 @@ void Y_VoteDrawer(void)
|
|||
|
||||
if ((playeringame[i] && !players[i].spectator) && votes[i] != -1)
|
||||
{
|
||||
patch_t *pic;
|
||||
|
||||
if (votes[i] >= 3 && (i != pickedvote || voteendtic == -1))
|
||||
{
|
||||
pic = randomlvl;
|
||||
}
|
||||
mapnum = -1; // randomlvl
|
||||
else
|
||||
{
|
||||
pic = NULL;
|
||||
mapnum = votelevels[votes[i]][0];
|
||||
|
||||
if (mapheaderinfo[votelevels[votes[i]][0]])
|
||||
{
|
||||
pic = mapheaderinfo[votelevels[votes[i]][0]]->thumbnailPic;
|
||||
}
|
||||
|
||||
if (!pic)
|
||||
{
|
||||
pic = blanklvl;
|
||||
}
|
||||
}
|
||||
scale = M_GetMapThumbnail(mapnum, &pic)/2;
|
||||
|
||||
if (!timer && i == voteclient.ranim)
|
||||
{
|
||||
|
|
@ -1425,10 +1404,10 @@ void Y_VoteDrawer(void)
|
|||
}
|
||||
|
||||
if (!levelinfo[votes[i]].encore)
|
||||
V_DrawTinyScaledPatch(x, y, V_SNAPTOLEFT, pic);
|
||||
V_DrawFixedPatch(x<<FRACBITS, y<<FRACBITS, scale, V_SNAPTOLEFT, pic, NULL);
|
||||
else
|
||||
{
|
||||
V_DrawFixedPatch((x+40)<<FRACBITS, (y)<<FRACBITS, FRACUNIT/4, V_SNAPTOLEFT|V_FLIP, pic, 0);
|
||||
V_DrawFixedPatch((x+FixedMul(pic->width, scale))<<FRACBITS, y<<FRACBITS, scale, V_SNAPTOLEFT|V_FLIP, pic, NULL);
|
||||
V_DrawFixedPatch((x+20)<<FRACBITS, (y<<FRACBITS) + (25<<(FRACBITS-1)) - rubyheight, FRACUNIT/2, V_SNAPTOLEFT, rubyicon, NULL);
|
||||
}
|
||||
|
||||
|
|
@ -1760,7 +1739,6 @@ void Y_StartVote(void)
|
|||
cursor2 = W_CachePatchName("P2CURSOR", PU_STATIC);
|
||||
cursor3 = W_CachePatchName("P3CURSOR", PU_STATIC);
|
||||
cursor4 = W_CachePatchName("P4CURSOR", PU_STATIC);
|
||||
randomlvl = W_CachePatchName("RANDOMLV", PU_STATIC);
|
||||
rubyicon = W_CachePatchName("RUBYICON", PU_STATIC);
|
||||
|
||||
timer = cv_votetime.value*TICRATE;
|
||||
|
|
@ -1860,7 +1838,6 @@ static void Y_UnloadVoteData(void)
|
|||
UNLOAD(cursor2);
|
||||
UNLOAD(cursor3);
|
||||
UNLOAD(cursor4);
|
||||
UNLOAD(randomlvl);
|
||||
UNLOAD(rubyicon);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue