mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Use circle code for followers
Better than list with only 3 entries, will get further improved by categories later
This commit is contained in:
parent
c4ff86a7f3
commit
4f9fc51b80
1 changed files with 142 additions and 165 deletions
307
src/k_menudraw.c
307
src/k_menudraw.c
|
|
@ -841,15 +841,31 @@ void M_DrawImageDef(void)
|
||||||
static void M_DrawCharSelectCircle(setup_player_t *p, INT16 x, INT16 y)
|
static void M_DrawCharSelectCircle(setup_player_t *p, INT16 x, INT16 y)
|
||||||
{
|
{
|
||||||
angle_t angamt = ANGLE_MAX;
|
angle_t angamt = ANGLE_MAX;
|
||||||
UINT16 i, numoptions;
|
UINT16 i, numoptions = 0;
|
||||||
UINT16 l = 0, r = 0;
|
UINT16 l = 0, r = 0;
|
||||||
|
|
||||||
if (p->mdepth == CSSTEP_ALTS)
|
switch (p->mdepth)
|
||||||
numoptions = setup_chargrid[p->gridx][p->gridy].numskins;
|
{
|
||||||
else if (p->mdepth == CSSTEP_FOLLOWERCOLORS)
|
case CSSTEP_ALTS:
|
||||||
numoptions = nummenucolors+2;
|
numoptions = setup_chargrid[p->gridx][p->gridy].numskins;
|
||||||
else
|
break;
|
||||||
numoptions = nummenucolors;
|
case CSSTEP_COLORS:
|
||||||
|
numoptions = nummenucolors;
|
||||||
|
break;
|
||||||
|
case CSSTEP_FOLLOWER:
|
||||||
|
numoptions = numfollowers+1;
|
||||||
|
break;
|
||||||
|
case CSSTEP_FOLLOWERCOLORS:
|
||||||
|
numoptions = nummenucolors+2;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (numoptions == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
angamt /= numoptions;
|
angamt /= numoptions;
|
||||||
|
|
||||||
|
|
@ -863,88 +879,131 @@ static void M_DrawCharSelectCircle(setup_player_t *p, INT16 x, INT16 y)
|
||||||
fixed_t radius = 28<<FRACBITS;
|
fixed_t radius = 28<<FRACBITS;
|
||||||
UINT16 n = 0;
|
UINT16 n = 0;
|
||||||
|
|
||||||
if (p->mdepth == CSSTEP_ALTS)
|
switch (p->mdepth)
|
||||||
{
|
{
|
||||||
INT16 skin;
|
case CSSTEP_ALTS:
|
||||||
|
|
||||||
n = (p->clonenum) + numoptions/2;
|
|
||||||
if (subtract)
|
|
||||||
n -= ((i+1)/2);
|
|
||||||
else
|
|
||||||
n += ((i+1)/2);
|
|
||||||
n %= numoptions;
|
|
||||||
|
|
||||||
skin = setup_chargrid[p->gridx][p->gridy].skinlist[n];
|
|
||||||
patch = faceprefix[skin][FACE_RANK];
|
|
||||||
colormap = R_GetTranslationColormap(skin, skins[skin].prefcolor, GTC_MENUCACHE);
|
|
||||||
radius = 24<<FRACBITS;
|
|
||||||
|
|
||||||
cx -= (SHORT(patch->width) << FRACBITS) >> 1;
|
|
||||||
cy -= (SHORT(patch->height) << FRACBITS) >> 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (p->mdepth == CSSTEP_FOLLOWERCOLORS)
|
|
||||||
{
|
|
||||||
INT16 diff;
|
|
||||||
UINT16 col;
|
|
||||||
|
|
||||||
if (i == 0)
|
|
||||||
{
|
{
|
||||||
n = l = r = M_GetColorBefore(p->followercolor, numoptions/2, true);
|
INT16 skin;
|
||||||
}
|
|
||||||
else if (subtract)
|
n = (p->clonenum) + numoptions/2;
|
||||||
{
|
if (subtract)
|
||||||
n = l = M_GetColorBefore(l, 1, true);
|
n -= ((i+1)/2);
|
||||||
}
|
else
|
||||||
else
|
n += ((i+1)/2);
|
||||||
{
|
n %= numoptions;
|
||||||
n = r = M_GetColorAfter(r, 1, true);
|
|
||||||
|
skin = setup_chargrid[p->gridx][p->gridy].skinlist[n];
|
||||||
|
patch = faceprefix[skin][FACE_RANK];
|
||||||
|
colormap = R_GetTranslationColormap(skin, skins[skin].prefcolor, GTC_MENUCACHE);
|
||||||
|
radius = 24<<FRACBITS;
|
||||||
|
|
||||||
|
cx -= (SHORT(patch->width) << FRACBITS) >> 1;
|
||||||
|
cy -= (SHORT(patch->height) << FRACBITS) >> 1;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
col = K_GetEffectiveFollowerColor(n, p->color);
|
case CSSTEP_COLORS:
|
||||||
|
|
||||||
colormap = R_GetTranslationColormap(TC_DEFAULT, col, GTC_MENUCACHE);
|
|
||||||
|
|
||||||
diff = (numoptions - i)/2; // only 0 when i == numoptions-1
|
|
||||||
|
|
||||||
if (diff == 0)
|
|
||||||
patch = W_CachePatchName("COLORSP2", PU_CACHE);
|
|
||||||
else if (abs(diff) < 25)
|
|
||||||
patch = W_CachePatchName("COLORSP1", PU_CACHE);
|
|
||||||
else
|
|
||||||
patch = W_CachePatchName("COLORSP0", PU_CACHE);
|
|
||||||
|
|
||||||
cx -= (SHORT(patch->width) << FRACBITS) >> 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
INT16 diff;
|
|
||||||
|
|
||||||
if (i == 0)
|
|
||||||
{
|
{
|
||||||
n = l = r = M_GetColorBefore(p->color, numoptions/2, false);
|
INT16 diff;
|
||||||
}
|
|
||||||
else if (subtract)
|
if (i == 0)
|
||||||
{
|
{
|
||||||
n = l = M_GetColorBefore(l, 1, false);
|
n = l = r = M_GetColorBefore(p->color, numoptions/2, false);
|
||||||
}
|
}
|
||||||
else
|
else if (subtract)
|
||||||
{
|
{
|
||||||
n = r = M_GetColorAfter(r, 1, false);
|
n = l = M_GetColorBefore(l, 1, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
n = r = M_GetColorAfter(r, 1, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
colormap = R_GetTranslationColormap(TC_DEFAULT, n, GTC_MENUCACHE);
|
||||||
|
|
||||||
|
diff = (numoptions - i)/2; // only 0 when i == numoptions-1
|
||||||
|
|
||||||
|
if (diff == 0)
|
||||||
|
patch = W_CachePatchName("COLORSP2", PU_CACHE);
|
||||||
|
else if (abs(diff) < 25)
|
||||||
|
patch = W_CachePatchName("COLORSP1", PU_CACHE);
|
||||||
|
else
|
||||||
|
patch = W_CachePatchName("COLORSP0", PU_CACHE);
|
||||||
|
|
||||||
|
cx -= (SHORT(patch->width) << FRACBITS) >> 1;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
colormap = R_GetTranslationColormap(TC_DEFAULT, n, GTC_MENUCACHE);
|
case CSSTEP_FOLLOWER:
|
||||||
|
{
|
||||||
|
follower_t *fl = NULL;
|
||||||
|
|
||||||
diff = (numoptions - i)/2; // only 0 when i == numoptions-1
|
n = (p->followern + 1) + numoptions/2;
|
||||||
|
if (subtract)
|
||||||
|
n -= ((i+1)/2);
|
||||||
|
else
|
||||||
|
n += ((i+1)/2);
|
||||||
|
n %= numoptions;
|
||||||
|
|
||||||
if (diff == 0)
|
if (n == 0)
|
||||||
patch = W_CachePatchName("COLORSP2", PU_CACHE);
|
{
|
||||||
else if (abs(diff) < 25)
|
patch = W_CachePatchName("K_NOBLNS", PU_CACHE);
|
||||||
patch = W_CachePatchName("COLORSP1", PU_CACHE);
|
}
|
||||||
else
|
else
|
||||||
patch = W_CachePatchName("COLORSP0", PU_CACHE);
|
{
|
||||||
|
fl = &followers[n - 1];
|
||||||
|
patch = W_CachePatchName(fl->icon, PU_CACHE);
|
||||||
|
|
||||||
cx -= (SHORT(patch->width) << FRACBITS) >> 1;
|
colormap = R_GetTranslationColormap(TC_DEFAULT,
|
||||||
|
K_GetEffectiveFollowerColor(p->followercolor, p->color),
|
||||||
|
GTC_MENUCACHE
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
radius = 24<<FRACBITS;
|
||||||
|
|
||||||
|
cx -= (SHORT(patch->width) << FRACBITS) >> 1;
|
||||||
|
cy -= (SHORT(patch->height) << FRACBITS) >> 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case CSSTEP_FOLLOWERCOLORS:
|
||||||
|
{
|
||||||
|
INT16 diff;
|
||||||
|
UINT16 col;
|
||||||
|
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
|
n = l = r = M_GetColorBefore(p->followercolor, numoptions/2, true);
|
||||||
|
}
|
||||||
|
else if (subtract)
|
||||||
|
{
|
||||||
|
n = l = M_GetColorBefore(l, 1, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
n = r = M_GetColorAfter(r, 1, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
col = K_GetEffectiveFollowerColor(n, p->color);
|
||||||
|
|
||||||
|
colormap = R_GetTranslationColormap(TC_DEFAULT, col, GTC_MENUCACHE);
|
||||||
|
|
||||||
|
diff = (numoptions - i)/2; // only 0 when i == numoptions-1
|
||||||
|
|
||||||
|
if (diff == 0)
|
||||||
|
patch = W_CachePatchName("COLORSP2", PU_CACHE);
|
||||||
|
else if (abs(diff) < 25)
|
||||||
|
patch = W_CachePatchName("COLORSP1", PU_CACHE);
|
||||||
|
else
|
||||||
|
patch = W_CachePatchName("COLORSP0", PU_CACHE);
|
||||||
|
|
||||||
|
cx -= (SHORT(patch->width) << FRACBITS) >> 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (subtract)
|
if (subtract)
|
||||||
|
|
@ -1007,72 +1066,6 @@ static boolean M_DrawCharacterSprite(INT16 x, INT16 y, INT16 skin, INT32 addflag
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draws the follower list.
|
|
||||||
static void M_DrawFollowerList(setup_player_t *p, UINT8 num)
|
|
||||||
{
|
|
||||||
INT16 x = 82;
|
|
||||||
INT16 y = 3;
|
|
||||||
INT32 cf = p->followern;
|
|
||||||
UINT8 i;
|
|
||||||
UINT8 *colormap = NULL;
|
|
||||||
|
|
||||||
if (num & 1)
|
|
||||||
x = 172;
|
|
||||||
|
|
||||||
if (num >= 2)
|
|
||||||
y = 176;
|
|
||||||
|
|
||||||
// this places it at the bottom of the card!
|
|
||||||
if (optionsmenu.profile)
|
|
||||||
{
|
|
||||||
x = 35;
|
|
||||||
y = 143;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start 1 follower below.
|
|
||||||
cf--;
|
|
||||||
if (cf < -1)
|
|
||||||
cf = numfollowers-1;
|
|
||||||
|
|
||||||
for (i = 0; i < 3; i++)
|
|
||||||
{
|
|
||||||
patch_t *pp = NULL;
|
|
||||||
follower_t fl = followers[cf];
|
|
||||||
|
|
||||||
if (W_LumpExists(fl.icon) && cf >= 0)
|
|
||||||
{
|
|
||||||
UINT16 col = K_GetEffectiveFollowerColor(p->followercolor, p->color);
|
|
||||||
pp = W_CachePatchName(fl.icon, PU_CACHE);
|
|
||||||
|
|
||||||
colormap = R_GetTranslationColormap(TC_DEFAULT, col, GTC_MENUCACHE);
|
|
||||||
V_DrawMappedPatch(x, y, 0, pp, colormap);
|
|
||||||
if (i == 1)
|
|
||||||
V_DrawMappedPatch(x, y, 0, W_CachePatchName(va("K_CHILI%d", p->follower_timer%16 /2 +1), PU_CACHE), NULL);
|
|
||||||
|
|
||||||
}
|
|
||||||
// No patch....
|
|
||||||
else
|
|
||||||
{
|
|
||||||
V_DrawFill(x, y, 16, 16, 0);
|
|
||||||
|
|
||||||
if (i == 1)
|
|
||||||
V_DrawMappedPatch(x, y, 0, W_CachePatchName(va("K_CHILI%d", p->follower_timer%16 /2 +1), PU_CACHE), NULL);
|
|
||||||
|
|
||||||
if (cf >= 0)
|
|
||||||
V_DrawString(x, y, 0, va("%d\n", cf));
|
|
||||||
else
|
|
||||||
V_DrawMappedPatch(x-4, y-3, 0, W_CachePatchName("K_NOBLNS", PU_CACHE), NULL);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
cf++;
|
|
||||||
if (cf >= numfollowers)
|
|
||||||
cf = -1;
|
|
||||||
|
|
||||||
x += 23;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns false is the follower shouldn't be rendered.
|
// Returns false is the follower shouldn't be rendered.
|
||||||
// 'num' can be used to directly specify the follower number, but doing this will not animate it.
|
// 'num' can be used to directly specify the follower number, but doing this will not animate it.
|
||||||
// if a setup_player_t is specified instead, its data will be used to animate the follower sprite.
|
// if a setup_player_t is specified instead, its data will be used to animate the follower sprite.
|
||||||
|
|
@ -1185,15 +1178,9 @@ static void M_DrawCharSelectPreview(UINT8 num)
|
||||||
if (p->mdepth >= CSSTEP_FOLLOWER)
|
if (p->mdepth >= CSSTEP_FOLLOWER)
|
||||||
{
|
{
|
||||||
M_DrawFollowerSprite(x+16, y+75, -1, !(num & 1) ? V_FLIP : 0, 0, p);
|
M_DrawFollowerSprite(x+16, y+75, -1, !(num & 1) ? V_FLIP : 0, 0, p);
|
||||||
|
|
||||||
if (p->mdepth == CSSTEP_FOLLOWER)
|
|
||||||
M_DrawFollowerList(p, num);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p->mdepth == CSSTEP_ALTS || p->mdepth == CSSTEP_COLORS || p->mdepth == CSSTEP_FOLLOWERCOLORS)
|
M_DrawCharSelectCircle(p, x+32, y+64);
|
||||||
{
|
|
||||||
M_DrawCharSelectCircle(p, x+32, y+64);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((setup_animcounter/10) & 1 && gamestate == GS_MENU) // Not drawn outside of GS_MENU.
|
if ((setup_animcounter/10) & 1 && gamestate == GS_MENU) // Not drawn outside of GS_MENU.
|
||||||
|
|
@ -1432,14 +1419,10 @@ static void M_DrawProfileCard(INT32 x, INT32 y, boolean greyedout, profile_t *p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sp->mdepth == CSSTEP_ALTS || sp->mdepth == CSSTEP_COLORS || sp->mdepth == CSSTEP_FOLLOWERCOLORS)
|
M_DrawCharSelectCircle(sp, x-22, y+104);
|
||||||
{
|
|
||||||
M_DrawCharSelectCircle(sp, x-22, y+104);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (skinnum > -1) // otherwise, read from profile.
|
else if (skinnum > -1) // otherwise, read from profile.
|
||||||
{
|
{
|
||||||
|
|
||||||
UINT16 col = K_GetEffectiveFollowerColor(p->followercolor, p->color);;
|
UINT16 col = K_GetEffectiveFollowerColor(p->followercolor, p->color);;
|
||||||
UINT8 fln = K_FollowerAvailable(p->follower);
|
UINT8 fln = K_FollowerAvailable(p->follower);
|
||||||
|
|
||||||
|
|
@ -1476,11 +1459,6 @@ void M_DrawCharacterSelect(void)
|
||||||
INT16 skin;
|
INT16 skin;
|
||||||
INT32 basex = optionsmenu.profile != NULL ? 64 : 0;
|
INT32 basex = optionsmenu.profile != NULL ? 64 : 0;
|
||||||
|
|
||||||
// Draw page num.
|
|
||||||
// @TODO: make it fancier than the default string lol.
|
|
||||||
if (setup_numplayers < 2)
|
|
||||||
V_DrawCenteredString(160, 1, 0, va("%d/%d", setup_page+1, setup_maxpage+1));
|
|
||||||
|
|
||||||
if (setup_numplayers > 0)
|
if (setup_numplayers > 0)
|
||||||
{
|
{
|
||||||
priority = setup_animcounter % setup_numplayers;
|
priority = setup_animcounter % setup_numplayers;
|
||||||
|
|
@ -1553,13 +1531,12 @@ void M_DrawCharacterSelect(void)
|
||||||
{
|
{
|
||||||
// Draw a preview for each player
|
// Draw a preview for each player
|
||||||
if (optionsmenu.profile == NULL)
|
if (optionsmenu.profile == NULL)
|
||||||
|
{
|
||||||
M_DrawCharSelectPreview(i);
|
M_DrawCharSelectPreview(i);
|
||||||
|
}
|
||||||
else if (i == 0)
|
else if (i == 0)
|
||||||
{
|
{
|
||||||
M_DrawProfileCard(optionsmenu.optx, optionsmenu.opty, false, optionsmenu.profile);
|
M_DrawProfileCard(optionsmenu.optx, optionsmenu.opty, false, optionsmenu.profile);
|
||||||
|
|
||||||
if (setup_player[0].mdepth == CSSTEP_FOLLOWER)
|
|
||||||
M_DrawFollowerList(&setup_player[0], 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i >= setup_numplayers)
|
if (i >= setup_numplayers)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue