Let level darkness be changed per splitscreen, use player_t variables

Modifies netsave.

- Add darkness_start, darkness_end to player_t
This commit is contained in:
James R 2024-01-05 14:17:57 -08:00
parent 8430489673
commit df0d342e04
5 changed files with 52 additions and 23 deletions

View file

@ -982,6 +982,9 @@ struct player_t
icecubevars_t icecube;
level_tally_t tally;
tic_t darkness_start;
tic_t darkness_end;
};
// WARNING FOR ANYONE ABOUT TO ADD SOMETHING TO THE PLAYER STRUCT, G_PlayerReborn WANTS YOU TO SUFFER

View file

@ -807,7 +807,7 @@ extern exitcondition_t g_exit;
extern struct darkness_t
{
tic_t start, end;
fixed_t value;
fixed_t value[MAXSPLITSCREENPLAYERS];
} g_darkness;
#define DEFAULT_GRAVITY (4*FRACUNIT/5)

View file

@ -787,6 +787,10 @@ static void P_NetArchivePlayers(savebuffer_t *save)
WRITEUINT8(save->p, players[i].icecube.wiggle);
WRITEUINT32(save->p, players[i].icecube.frozenat);
WRITEUINT8(save->p, players[i].icecube.shaketimer);
// darkness
WRITEUINT32(save->p, players[i].darkness_start);
WRITEUINT32(save->p, players[i].darkness_end);
}
TracyCZoneEnd(__zone);
@ -1358,6 +1362,10 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
players[i].icecube.frozenat = READUINT32(save->p);
players[i].icecube.shaketimer = READUINT8(save->p);
// darkness
players[i].darkness_start = READUINT32(save->p);
players[i].darkness_end = READUINT32(save->p);
//players[i].viewheight = P_GetPlayerViewHeight(players[i]); // scale cannot be factored in at this point
}

View file

@ -768,6 +768,43 @@ void P_RunChaseCameras(void)
}
}
static fixed_t P_GetDarkness(tic_t start, tic_t end)
{
if (leveltime <= end)
{
tic_t fade = end - DARKNESS_FADE_TIME;
tic_t t;
if (leveltime < fade) // dark or darkening
{
t = leveltime - start;
t = min(t, DARKNESS_FADE_TIME);
}
else // lightening
{
t = end - leveltime;
}
return Easing_Linear((t * FRACUNIT) / DARKNESS_FADE_TIME, 0, FRACUNIT/7);
}
return 0;
}
static void P_TickDarkness(void)
{
const fixed_t globalValue = P_GetDarkness(g_darkness.start, g_darkness.end);
UINT8 i;
for (i = 0; i <= r_splitscreen; ++i)
{
const player_t *p = &players[displayplayers[i]];
fixed_t value = P_GetDarkness(p->darkness_start, p->darkness_end);
g_darkness.value[i] = value ? value : globalValue;
}
}
//
// P_Ticker
//
@ -1046,27 +1083,7 @@ void P_Ticker(boolean run)
if (racecountdown > 1)
racecountdown--;
if (leveltime <= g_darkness.end)
{
tic_t fade = g_darkness.end - DARKNESS_FADE_TIME;
tic_t t;
if (leveltime < fade) // dark or darkening
{
t = leveltime - g_darkness.start;
t = min(t, DARKNESS_FADE_TIME);
}
else // lightening
{
t = g_darkness.end - leveltime;
}
g_darkness.value = Easing_Linear((t * FRACUNIT) / DARKNESS_FADE_TIME, 0, FRACUNIT/7);
}
else // light
{
g_darkness.value = 0;
}
P_TickDarkness();
if (exitcountdown >= 1)
{

View file

@ -18,6 +18,7 @@
#include "i_time.h"
#include "m_fixed.h"
#include "r_draw.h"
#include "r_fps.h"
#include "r_main.h"
#include "g_game.h"
@ -43,7 +44,7 @@ INT32 R_AdjustLightLevel(INT32 light)
if (!debugrender_highlight && cv_debugrender_contrast.value == 0)
{
const fixed_t darken = FixedMul(FixedMul(g_darkness.value, mapheaderinfo[gamemap-1]->darkness), kRange);
const fixed_t darken = FixedMul(FixedMul(g_darkness.value[R_GetViewNumber()], mapheaderinfo[gamemap-1]->darkness), kRange);
return std::clamp((light * FRACUNIT) - darken, 0, kRange) / FRACUNIT;
}