Merge branch 'replay-unlock-hide' into 'replay-unlock-bodge'

Ghost/Replay locked character hide

See merge request KartKrew/Kart!2012
This commit is contained in:
Oni 2024-03-06 00:39:56 +00:00
commit f24ee80cc1
5 changed files with 55 additions and 31 deletions

View file

@ -88,6 +88,7 @@ patch_t *kp_facenum[MAXPLAYERS+1];
static patch_t *kp_facehighlight[8];
static patch_t *kp_nocontestminimap;
static patch_t *kp_unknownminimap;
static patch_t *kp_spbminimap;
static patch_t *kp_wouldyoustillcatchmeifiwereaworm;
static patch_t *kp_catcherminimap;
@ -386,7 +387,7 @@ void K_LoadKartHUDGraphics(void)
// Special minimap icons
HU_UpdatePatch(&kp_nocontestminimap, "MINIDEAD");
HU_UpdatePatch(&kp_unknownminimap, "HUHMAP");
HU_UpdatePatch(&kp_spbminimap, "SPBMMAP");
HU_UpdatePatch(&kp_wouldyoustillcatchmeifiwereaworm, "MINIPROG");
@ -4401,6 +4402,9 @@ static void K_drawKartMinimap(void)
skin = ((skin_t*)g->mo->skin)-skins;
else
skin = 0;
workingPic = R_CanShowSkinInDemo(skin) ? faceprefix[skin][FACE_MINIMAP] : kp_unknownminimap;
if (g->mo->color)
{
if (g->mo->colorized)
@ -4414,7 +4418,7 @@ static void K_drawKartMinimap(void)
interpx = R_InterpolateFixed(g->mo->old_x, g->mo->x);
interpy = R_InterpolateFixed(g->mo->old_y, g->mo->y);
K_drawKartMinimapIcon(interpx, interpy, x, y, splitflags, faceprefix[skin][FACE_MINIMAP], colormap);
K_drawKartMinimapIcon(interpx, interpy, x, y, splitflags, workingPic, colormap);
g = g->next;
}
}
@ -4470,7 +4474,7 @@ static void K_drawKartMinimap(void)
{
skin = ((skin_t*)mobj->skin)-skins;
workingPic = faceprefix[skin][FACE_MINIMAP];
workingPic = R_CanShowSkinInDemo(skin) ? faceprefix[skin][FACE_MINIMAP] : kp_unknownminimap;
if (mobj->color)
{
@ -4666,7 +4670,7 @@ static void K_drawKartMinimap(void)
{
skin = ((skin_t*)mobj->skin)-skins;
workingPic = faceprefix[skin][FACE_MINIMAP];
workingPic = R_CanShowSkinInDemo(skin) ? faceprefix[skin][FACE_MINIMAP] : kp_unknownminimap;
if (mobj->color)
{

View file

@ -229,7 +229,7 @@ UINT8 *R_GetSkinAvailabilities(boolean demolock, INT32 botforcecharacter)
boolean R_SkinUsable(INT32 playernum, INT32 skinnum, boolean demoskins)
{
boolean needsunlocked = false;
boolean useplayerstruct = ((Playing() || demo.playback) && playernum != -1);
boolean useplayerstruct = ((Playing() || demo.playback) && playernum >= 0);
UINT16 i;
INT32 skinid;
@ -299,6 +299,13 @@ boolean R_SkinUsable(INT32 playernum, INT32 skinnum, boolean demoskins)
return (boolean)(gamedata->unlocked[i]);
}
boolean R_CanShowSkinInDemo(INT32 skinnum)
{
if (modeattacking == ATTACKING_NONE && !(demo.playback && demo.attract))
return true;
return R_SkinUsable(-2, skinnum, false);
}
// Returns a random unlocked skin ID.
UINT32 R_GetLocalRandomSkin(void)
{
@ -307,7 +314,7 @@ UINT32 R_GetLocalRandomSkin(void)
for (i = 0; i < numskins; i++)
{
if (!R_SkinUsable(-1, i, false))
if (!R_SkinUsable(-2, i, false))
continue;
grabskins[usableskins++] = i;
}

View file

@ -115,6 +115,7 @@ INT32 R_SkinAvailable(const char *name);
INT32 R_SkinAvailableEx(const char *name, boolean demoskins);
boolean R_SkinUsable(INT32 playernum, INT32 skinnum, boolean demoskins);
UINT8 *R_GetSkinAvailabilities(boolean demolock, INT32 botforcecharacter);
boolean R_CanShowSkinInDemo(INT32 skinnum);
// Setting
void SetPlayerSkin(INT32 playernum,const char *skinname);

View file

@ -44,6 +44,13 @@ INT32 R_ThingLightLevel(mobj_t* thing)
{
lightlevel -= 255;
}
if (!R_CanShowSkinInDemo((skin_t*)thing->skin-skins)
&& !thing->colorized
&& !thing->hitlag)
{
lightlevel -= 128;
}
}
return lightlevel;

View file

@ -835,37 +835,42 @@ boolean R_ThingIsFlashing(mobj_t *thing)
UINT8 *R_GetSpriteTranslation(vissprite_t *vis)
{
if (!(vis->cut & SC_PRECIP) &&
R_ThingIsFlashing(vis->mobj))
if (vis->cut & SC_PRECIP)
{
return R_GetTranslationColormap(TC_HITLAG, static_cast<skincolornum_t>(0), GTC_CACHE);
// Simplified func, less safe properties to check
if (vis->mobj->color)
R_GetTranslationColormap(TC_DEFAULT, static_cast<skincolornum_t>(vis->mobj->color), GTC_CACHE);
return NULL;
}
/*
else if (R_SpriteIsFlashing(vis)) // Bosses "flash"
size_t skinnum = TC_DEFAULT;
if (vis->mobj->skin && vis->mobj->sprite == SPR_PLAY) // This thing is a player!
{
if (vis->mobj->type == MT_CYBRAKDEMON || vis->mobj->colorized)
return R_GetTranslationColormap(TC_ALLWHITE, 0, GTC_CACHE);
else if (vis->mobj->type == MT_METALSONIC_BATTLE)
return R_GetTranslationColormap(TC_METALSONIC, 0, GTC_CACHE);
else
return R_GetTranslationColormap(TC_BOSS, 0, GTC_CACHE);
}
*/
else if (vis->mobj->color)
{
// New colormap stuff for skins Tails 06-07-2002
if (!(vis->cut & SC_PRECIP) && vis->mobj->colorized)
return R_GetTranslationColormap(TC_RAINBOW, static_cast<skincolornum_t>(vis->mobj->color), GTC_CACHE);
else if (!(vis->cut & SC_PRECIP) && vis->mobj->skin && vis->mobj->sprite == SPR_PLAY) // This thing is a player!
skinnum = (skin_t*)vis->mobj->skin-skins;
// Hide not-yet-unlocked characters in replays from other people
if (!R_CanShowSkinInDemo(skinnum))
{
size_t skinnum = (skin_t*)vis->mobj->skin-skins;
return R_GetTranslationColormap((INT32)skinnum, static_cast<skincolornum_t>(vis->mobj->color), GTC_CACHE);
skinnum = TC_BLINK;
}
else // Use the defaults
return R_GetTranslationColormap(TC_DEFAULT, static_cast<skincolornum_t>(vis->mobj->color), GTC_CACHE);
}
else if (vis->mobj->sprite == SPR_PLAY) // Looks like a player, but doesn't have a color? Get rid of green sonic syndrome.
return R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_BLUE, GTC_CACHE);
if (R_ThingIsFlashing(vis->mobj))
{
if (skinnum != (size_t)TC_BLINK)
skinnum = TC_HITLAG;
return R_GetTranslationColormap(skinnum, static_cast<skincolornum_t>(0), GTC_CACHE);
}
if (vis->mobj->color)
{
if (skinnum != (size_t)TC_BLINK && vis->mobj->colorized)
skinnum = TC_RAINBOW;
return R_GetTranslationColormap(skinnum, static_cast<skincolornum_t>(vis->mobj->color), GTC_CACHE);
}
return NULL;
}