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_facehighlight[8];
static patch_t *kp_nocontestminimap; static patch_t *kp_nocontestminimap;
static patch_t *kp_unknownminimap;
static patch_t *kp_spbminimap; static patch_t *kp_spbminimap;
static patch_t *kp_wouldyoustillcatchmeifiwereaworm; static patch_t *kp_wouldyoustillcatchmeifiwereaworm;
static patch_t *kp_catcherminimap; static patch_t *kp_catcherminimap;
@ -386,7 +387,7 @@ void K_LoadKartHUDGraphics(void)
// Special minimap icons // Special minimap icons
HU_UpdatePatch(&kp_nocontestminimap, "MINIDEAD"); HU_UpdatePatch(&kp_nocontestminimap, "MINIDEAD");
HU_UpdatePatch(&kp_unknownminimap, "HUHMAP");
HU_UpdatePatch(&kp_spbminimap, "SPBMMAP"); HU_UpdatePatch(&kp_spbminimap, "SPBMMAP");
HU_UpdatePatch(&kp_wouldyoustillcatchmeifiwereaworm, "MINIPROG"); HU_UpdatePatch(&kp_wouldyoustillcatchmeifiwereaworm, "MINIPROG");
@ -4401,6 +4402,9 @@ static void K_drawKartMinimap(void)
skin = ((skin_t*)g->mo->skin)-skins; skin = ((skin_t*)g->mo->skin)-skins;
else else
skin = 0; skin = 0;
workingPic = R_CanShowSkinInDemo(skin) ? faceprefix[skin][FACE_MINIMAP] : kp_unknownminimap;
if (g->mo->color) if (g->mo->color)
{ {
if (g->mo->colorized) if (g->mo->colorized)
@ -4414,7 +4418,7 @@ static void K_drawKartMinimap(void)
interpx = R_InterpolateFixed(g->mo->old_x, g->mo->x); interpx = R_InterpolateFixed(g->mo->old_x, g->mo->x);
interpy = R_InterpolateFixed(g->mo->old_y, g->mo->y); 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; g = g->next;
} }
} }
@ -4470,7 +4474,7 @@ static void K_drawKartMinimap(void)
{ {
skin = ((skin_t*)mobj->skin)-skins; skin = ((skin_t*)mobj->skin)-skins;
workingPic = faceprefix[skin][FACE_MINIMAP]; workingPic = R_CanShowSkinInDemo(skin) ? faceprefix[skin][FACE_MINIMAP] : kp_unknownminimap;
if (mobj->color) if (mobj->color)
{ {
@ -4666,7 +4670,7 @@ static void K_drawKartMinimap(void)
{ {
skin = ((skin_t*)mobj->skin)-skins; skin = ((skin_t*)mobj->skin)-skins;
workingPic = faceprefix[skin][FACE_MINIMAP]; workingPic = R_CanShowSkinInDemo(skin) ? faceprefix[skin][FACE_MINIMAP] : kp_unknownminimap;
if (mobj->color) 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 R_SkinUsable(INT32 playernum, INT32 skinnum, boolean demoskins)
{ {
boolean needsunlocked = false; boolean needsunlocked = false;
boolean useplayerstruct = ((Playing() || demo.playback) && playernum != -1); boolean useplayerstruct = ((Playing() || demo.playback) && playernum >= 0);
UINT16 i; UINT16 i;
INT32 skinid; INT32 skinid;
@ -299,6 +299,13 @@ boolean R_SkinUsable(INT32 playernum, INT32 skinnum, boolean demoskins)
return (boolean)(gamedata->unlocked[i]); 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. // Returns a random unlocked skin ID.
UINT32 R_GetLocalRandomSkin(void) UINT32 R_GetLocalRandomSkin(void)
{ {
@ -307,7 +314,7 @@ UINT32 R_GetLocalRandomSkin(void)
for (i = 0; i < numskins; i++) for (i = 0; i < numskins; i++)
{ {
if (!R_SkinUsable(-1, i, false)) if (!R_SkinUsable(-2, i, false))
continue; continue;
grabskins[usableskins++] = i; grabskins[usableskins++] = i;
} }

View file

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

View file

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

View file

@ -835,37 +835,42 @@ boolean R_ThingIsFlashing(mobj_t *thing)
UINT8 *R_GetSpriteTranslation(vissprite_t *vis) UINT8 *R_GetSpriteTranslation(vissprite_t *vis)
{ {
if (!(vis->cut & SC_PRECIP) && if (vis->cut & SC_PRECIP)
R_ThingIsFlashing(vis->mobj))
{ {
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) skinnum = (skin_t*)vis->mobj->skin-skins;
return R_GetTranslationColormap(TC_ALLWHITE, 0, GTC_CACHE);
else if (vis->mobj->type == MT_METALSONIC_BATTLE) // Hide not-yet-unlocked characters in replays from other people
return R_GetTranslationColormap(TC_METALSONIC, 0, GTC_CACHE); if (!R_CanShowSkinInDemo(skinnum))
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!
{ {
size_t skinnum = (skin_t*)vis->mobj->skin-skins; skinnum = TC_BLINK;
return R_GetTranslationColormap((INT32)skinnum, static_cast<skincolornum_t>(vis->mobj->color), GTC_CACHE);
} }
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; return NULL;
} }