Merge public master

This commit is contained in:
Eidolon 2025-02-13 20:05:29 -06:00
commit a2d11a61f1
6 changed files with 40 additions and 28 deletions

View file

@ -17,9 +17,12 @@ Debian testing GCC:
name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-testing-gcc" name: "$CI_PROJECT_PATH_SLUG-$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA-testing-gcc"
variables: variables:
CC: gcc CC: /usr/bin/x86_64-linux-gnu-gcc
CXX: g++ CXX: /usr/bin/x86_64-linux-gnu-g++
LDFLAGS: -Wl,-fuse-ld=gold OBJCOPY: /usr/bin/x86_64-linux-gnu-objcopy
OBJDUMP: /usr/bin/x86_64-linux-gnu-objdump
PKG_CONFIG_PATH: /usr/lib/x86_64-linux-gnu/pkgconfig
LD: /usr/bin/x86_64-linux-gnu-ld
script: script:
- - | - - |

View file

@ -5,6 +5,8 @@ Windows x64:
when: manual when: manual
timeout: 2h
allow_failure: true allow_failure: true
artifacts: artifacts:

View file

@ -5,6 +5,8 @@ Windows x86:
when: on_success when: on_success
timeout: 2h
cache: cache:
- key: ccache-$CI_JOB_NAME_SLUG-$CI_COMMIT_REF_SLUG - key: ccache-$CI_JOB_NAME_SLUG-$CI_COMMIT_REF_SLUG
fallback_keys: fallback_keys:

View file

@ -1762,7 +1762,7 @@ static void HWR_ProcessSeg(void) // Sort of like GLWall::Process in GZDoom
if (rover->alpha < 256 || rover->blend) if (rover->alpha < 256 || rover->blend)
{ {
blendmode = HWR_GetBlendModeFlag(rover->blend); blendmode = HWR_GetBlendModeFlag(rover->blend);
Surf.PolyColor.s.alpha = (UINT8)(rover->alpha-1); Surf.PolyColor.s.alpha = max(0, min(rover->alpha, 255));
} }
} }
@ -1891,7 +1891,7 @@ static void HWR_ProcessSeg(void) // Sort of like GLWall::Process in GZDoom
if (rover->alpha < 256 || rover->blend) if (rover->alpha < 256 || rover->blend)
{ {
blendmode = HWR_GetBlendModeFlag(rover->blend); blendmode = HWR_GetBlendModeFlag(rover->blend);
Surf.PolyColor.s.alpha = (UINT8)(rover->alpha-1); Surf.PolyColor.s.alpha = max(0, min(rover->alpha, 255));
} }
} }
@ -2636,7 +2636,7 @@ static void HWR_Subsector(size_t num)
false, false,
*rover->bottomheight, *rover->bottomheight,
*gl_frontsector->lightlist[light].lightlevel, *gl_frontsector->lightlist[light].lightlevel,
rover->alpha-1, rover->master->frontsector, blendmode, max(0, min(rover->alpha, 255)), rover->master->frontsector, blendmode,
false, *gl_frontsector->lightlist[light].extra_colormap); false, *gl_frontsector->lightlist[light].extra_colormap);
} }
else else
@ -2684,7 +2684,7 @@ static void HWR_Subsector(size_t num)
true, true,
*rover->topheight, *rover->topheight,
*gl_frontsector->lightlist[light].lightlevel, *gl_frontsector->lightlist[light].lightlevel,
rover->alpha-1, rover->master->frontsector, blendmode, max(0, min(rover->alpha, 255)), rover->master->frontsector, blendmode,
false, *gl_frontsector->lightlist[light].extra_colormap); false, *gl_frontsector->lightlist[light].extra_colormap);
} }
else else

View file

@ -724,6 +724,8 @@ static int player_get(lua_State *L)
lua_pushinteger(L, plr->griefWarned); lua_pushinteger(L, plr->griefWarned);
else if (fastcmp(field,"splitscreenindex")) else if (fastcmp(field,"splitscreenindex"))
lua_pushinteger(L, plr->splitscreenindex); lua_pushinteger(L, plr->splitscreenindex);
else if (fastcmp(field,"whip"))
LUA_PushUserdata(L, plr->whip, META_MOBJ);
#ifdef HWRENDER #ifdef HWRENDER
else if (fastcmp(field,"fovadd")) else if (fastcmp(field,"fovadd"))
lua_pushfixed(L, plr->fovadd); lua_pushfixed(L, plr->fovadd);
@ -1321,6 +1323,13 @@ static int player_set(lua_State *L)
plr->griefWarned = luaL_checkinteger(L, 3); plr->griefWarned = luaL_checkinteger(L, 3);
else if (fastcmp(field,"splitscreenindex")) else if (fastcmp(field,"splitscreenindex"))
return NOSET; return NOSET;
else if (fastcmp(field,"whip"))
{
mobj_t *mo = NULL;
if (!lua_isnil(L, 3))
mo = *((mobj_t **)luaL_checkudata(L, 3, META_MOBJ));
P_SetTarget(&plr->whip, mo);
}
#ifdef HWRENDER #ifdef HWRENDER
else if (fastcmp(field,"fovadd")) else if (fastcmp(field,"fovadd"))
plr->fovadd = luaL_checkfixed(L, 3); plr->fovadd = luaL_checkfixed(L, 3);

View file

@ -3883,19 +3883,18 @@ boolean P_ProcessSpecial(activator_t *activator, INT16 special, INT32 *args, cha
foundrover = true; foundrover = true;
// If fading an invisible FOF whose render flags we did not yet set, // If fading an invisible FOF whose render flags we did not yet set,
// initialize its alpha to 1 // initialize its alpha to 0 for relative alpha calculation
// for relative alpha calc
if (!(args[3] & TMST_DONTDOTRANSLUCENT) && // do translucent if (!(args[3] & TMST_DONTDOTRANSLUCENT) && // do translucent
(rover->spawnflags & FOF_NOSHADE) && // do not include light blocks, which don't set FOF_NOSHADE (rover->spawnflags & FOF_NOSHADE) && // do not include light blocks, which don't set FOF_NOSHADE
!(rover->spawnflags & FOF_RENDERSIDES) && !(rover->spawnflags & FOF_RENDERSIDES) &&
!(rover->spawnflags & FOF_RENDERPLANES) && !(rover->spawnflags & FOF_RENDERPLANES) &&
!(rover->fofflags & FOF_RENDERALL)) !(rover->fofflags & FOF_RENDERALL))
rover->alpha = 1; rover->alpha = 0;
P_RemoveFakeFloorFader(rover); P_RemoveFakeFloorFader(rover);
P_FadeFakeFloor(rover, P_FadeFakeFloor(rover,
rover->alpha, rover->alpha,
max(1, min(256, (args[3] & TMST_RELATIVE) ? rover->alpha + destvalue : destvalue)), max(0, min(255, (args[3] & TMST_RELATIVE) ? rover->alpha + destvalue : destvalue)),
0, // set alpha immediately 0, // set alpha immediately
false, NULL, // tic-based logic false, NULL, // tic-based logic
false, // do not handle FOF_EXISTS false, // do not handle FOF_EXISTS
@ -3969,19 +3968,18 @@ boolean P_ProcessSpecial(activator_t *activator, INT16 special, INT32 *args, cha
else else
{ {
// If fading an invisible FOF whose render flags we did not yet set, // If fading an invisible FOF whose render flags we did not yet set,
// initialize its alpha to 1 // initialize its alpha to 0 for relative alpha calculation
// for relative alpha calc
if (!(args[4] & TMFT_DONTDOTRANSLUCENT) && // do translucent if (!(args[4] & TMFT_DONTDOTRANSLUCENT) && // do translucent
(rover->spawnflags & FOF_NOSHADE) && // do not include light blocks, which don't set FOF_NOSHADE (rover->spawnflags & FOF_NOSHADE) && // do not include light blocks, which don't set FOF_NOSHADE
!(rover->spawnflags & FOF_RENDERSIDES) && !(rover->spawnflags & FOF_RENDERSIDES) &&
!(rover->spawnflags & FOF_RENDERPLANES) && !(rover->spawnflags & FOF_RENDERPLANES) &&
!(rover->fofflags & FOF_RENDERALL)) !(rover->fofflags & FOF_RENDERALL))
rover->alpha = 1; rover->alpha = 0;
P_RemoveFakeFloorFader(rover); P_RemoveFakeFloorFader(rover);
P_FadeFakeFloor(rover, P_FadeFakeFloor(rover,
rover->alpha, rover->alpha,
max(1, min(256, (args[4] & TMFT_RELATIVE) ? rover->alpha + destvalue : destvalue)), max(0, min(255, (args[4] & TMFT_RELATIVE) ? rover->alpha + destvalue : destvalue)),
0, // set alpha immediately 0, // set alpha immediately
false, NULL, // tic-based logic false, NULL, // tic-based logic
!(args[4] & TMFT_DONTDOEXISTS), // do not handle FOF_EXISTS !(args[4] & TMFT_DONTDOEXISTS), // do not handle FOF_EXISTS
@ -8557,15 +8555,14 @@ static boolean P_FadeFakeFloor(ffloor_t *rover, INT16 sourcevalue, INT16 destval
if (rover->master->special == 258) // Laser block if (rover->master->special == 258) // Laser block
return false; return false;
// If fading an invisible FOF whose render flags we did not yet set, // If fading an invisible FOF whose render flags we did not yet set, initialize its alpha to 0
// initialize its alpha to 1
if (dotranslucent && if (dotranslucent &&
(rover->spawnflags & FOF_NOSHADE) && // do not include light blocks, which don't set FOF_NOSHADE (rover->spawnflags & FOF_NOSHADE) && // do not include light blocks, which don't set FOF_NOSHADE
!(rover->fofflags & FOF_FOG) && // do not include fog !(rover->fofflags & FOF_FOG) && // do not include fog
!(rover->spawnflags & FOF_RENDERSIDES) && !(rover->spawnflags & FOF_RENDERSIDES) &&
!(rover->spawnflags & FOF_RENDERPLANES) && !(rover->spawnflags & FOF_RENDERPLANES) &&
!(rover->fofflags & FOF_RENDERALL)) !(rover->fofflags & FOF_RENDERALL))
rover->alpha = 1; rover->alpha = 0;
if (fadingdata) if (fadingdata)
alpha = fadingdata->alpha; alpha = fadingdata->alpha;
@ -8651,7 +8648,7 @@ static boolean P_FadeFakeFloor(ffloor_t *rover, INT16 sourcevalue, INT16 destval
{ {
if (doexists && !(rover->spawnflags & FOF_BUSTUP)) if (doexists && !(rover->spawnflags & FOF_BUSTUP))
{ {
if (alpha <= 1) if (alpha <= 0)
rover->fofflags &= ~FOF_EXISTS; rover->fofflags &= ~FOF_EXISTS;
else else
rover->fofflags |= FOF_EXISTS; rover->fofflags |= FOF_EXISTS;
@ -8663,7 +8660,7 @@ static boolean P_FadeFakeFloor(ffloor_t *rover, INT16 sourcevalue, INT16 destval
if (dotranslucent && !(rover->fofflags & FOF_FOG)) if (dotranslucent && !(rover->fofflags & FOF_FOG))
{ {
if (alpha >= 256) if (alpha >= 255)
{ {
if (!(rover->fofflags & FOF_CUTSOLIDS) && if (!(rover->fofflags & FOF_CUTSOLIDS) &&
(rover->spawnflags & FOF_CUTSOLIDS)) (rover->spawnflags & FOF_CUTSOLIDS))
@ -8763,11 +8760,11 @@ static boolean P_FadeFakeFloor(ffloor_t *rover, INT16 sourcevalue, INT16 destval
else // clamp fadingdata->alpha to software's alpha levels else // clamp fadingdata->alpha to software's alpha levels
{ {
if (alpha < 12) if (alpha < 12)
rover->alpha = destvalue < 12 ? destvalue : 1; // Don't even draw it rover->alpha = destvalue < 12 ? destvalue : 0; // Don't even draw it
else if (alpha < 38) else if (alpha < 38)
rover->alpha = destvalue >= 12 && destvalue < 38 ? destvalue : 25; rover->alpha = destvalue >= 12 && destvalue < 38 ? destvalue : 25;
else if (alpha < 64) else if (alpha < 64)
rover->alpha = destvalue >=38 && destvalue < 64 ? destvalue : 51; rover->alpha = destvalue >= 38 && destvalue < 64 ? destvalue : 51;
else if (alpha < 89) else if (alpha < 89)
rover->alpha = destvalue >= 64 && destvalue < 89 ? destvalue : 76; rover->alpha = destvalue >= 64 && destvalue < 89 ? destvalue : 76;
else if (alpha < 115) else if (alpha < 115)
@ -8783,7 +8780,7 @@ static boolean P_FadeFakeFloor(ffloor_t *rover, INT16 sourcevalue, INT16 destval
else if (alpha < 243) else if (alpha < 243)
rover->alpha = destvalue >= 217 && destvalue < 243 ? destvalue : 230; rover->alpha = destvalue >= 217 && destvalue < 243 ? destvalue : 230;
else // Opaque else // Opaque
rover->alpha = destvalue >= 243 ? destvalue : 256; rover->alpha = destvalue >= 243 ? destvalue : 255;
} }
} }
@ -8813,17 +8810,16 @@ static void P_AddFakeFloorFader(ffloor_t *rover, size_t sectornum, size_t ffloor
{ {
fade_t *d; fade_t *d;
// If fading an invisible FOF whose render flags we did not yet set, // If fading an invisible FOF whose render flags we did not yet set, initialize its alpha to 0
// initialize its alpha to 1
if (dotranslucent && if (dotranslucent &&
(rover->spawnflags & FOF_NOSHADE) && // do not include light blocks, which don't set FOF_NOSHADE (rover->spawnflags & FOF_NOSHADE) && // do not include light blocks, which don't set FOF_NOSHADE
!(rover->spawnflags & FOF_RENDERSIDES) && !(rover->spawnflags & FOF_RENDERSIDES) &&
!(rover->spawnflags & FOF_RENDERPLANES) && !(rover->spawnflags & FOF_RENDERPLANES) &&
!(rover->fofflags & FOF_RENDERALL)) !(rover->fofflags & FOF_RENDERALL))
rover->alpha = 1; rover->alpha = 0;
// already equal, nothing to do // already equal, nothing to do
if (rover->alpha == max(1, min(256, relative ? rover->alpha + destvalue : destvalue))) if (rover->alpha == max(0, min(255, relative ? rover->alpha + destvalue : destvalue)))
return; return;
d = Z_LevelPoolCalloc(sizeof (*d)); d = Z_LevelPoolCalloc(sizeof (*d));
@ -8836,7 +8832,7 @@ static void P_AddFakeFloorFader(ffloor_t *rover, size_t sectornum, size_t ffloor
d->ffloornum = (UINT32)ffloornum; d->ffloornum = (UINT32)ffloornum;
d->alpha = d->sourcevalue = rover->alpha; d->alpha = d->sourcevalue = rover->alpha;
d->destvalue = max(1, min(256, relative ? rover->alpha + destvalue : destvalue)); // rover->alpha is 1-256 d->destvalue = max(0, min(255, relative ? rover->alpha + destvalue : destvalue)); // rover->alpha is 0-255
if (ticbased) if (ticbased)
{ {