Merge branch 'blankart-dev' into refactornetsave

This commit is contained in:
NepDisk 2025-10-07 10:57:10 -04:00
commit ce70e05d30
9 changed files with 73 additions and 45 deletions

View file

@ -12,7 +12,8 @@ git_current_branch(SRB2_COMP_BRANCH)
git_working_tree_dirty(SRB2_COMP_UNCOMMITTED) git_working_tree_dirty(SRB2_COMP_UNCOMMITTED)
git_latest_commit(SRB2_COMP_REVISION) git_latest_commit(SRB2_COMP_REVISION)
git_subject(SRB2_COMP_LASTCOMMIT) git_subject(subject)
string(REGEX REPLACE "([\"\\])" "\\\\\\1" SRB2_COMP_LASTCOMMIT "${subject}")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in" "${CMAKE_CURRENT_SOURCE_DIR}/src/config.h") configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in" "${CMAKE_CURRENT_SOURCE_DIR}/src/config.h")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in" "${CMAKE_CURRENT_SOURCE_DIR}/build/src/config.h") configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in" "${CMAKE_CURRENT_SOURCE_DIR}/build/src/config.h")

View file

@ -410,10 +410,8 @@ void K_HandleFollower(player_t *player)
if (fl.mode == FOLLOWERMODE_GROUND) if (fl.mode == FOLLOWERMODE_GROUND)
{ {
sector_t *sec = R_PointInSubsector(sx, sy)->sector; fh = min(fh, P_FloorzAtPos(sx, sy, player->follower->z, ourheight));
ch = max(ch, P_CeilingzAtPos(sx, sy, player->follower->z, ourheight) - ourheight);
fh = min(fh, P_GetFloorZ(player->follower, sec, sx, sy, NULL));
ch = max(ch, P_GetCeilingZ(player->follower, sec, sx, sy, NULL) - ourheight);
if (P_IsObjectOnGround(player->mo) == false) if (P_IsObjectOnGround(player->mo) == false)
{ {

View file

@ -5282,7 +5282,7 @@ static void K_drawLapSplitTimestamp(void)
ahead >= 0 ? "-" : "+" ahead >= 0 ? "-" : "+"
); );
V_DrawMappedPatch(TIME_X - 8, TIME_Y + 3, splitflags, faceprefix[skin][FACE_MINIMAP], skincolor); V_DrawMappedPatch(TIME_X, TIME_Y + 10, splitflags, faceprefix[skin][FACE_MINIMAP], skincolor);
} }
} }
@ -5352,11 +5352,11 @@ static void K_drawLapSplitComparison(void)
INT32 stwidth = V_StringWidth(buffer, splitflags) / 2; INT32 stwidth = V_StringWidth(buffer, splitflags) / 2;
// vibes offset // vibes offset
V_DrawMappedPatch(row_position[0] - stwidth - 35, row_position[1], splitflags, faceprefix[skin][FACE_MINIMAP], skincolor); V_DrawMappedPatch(row_position[0] - stwidth, row_position[1] + 4, splitflags, faceprefix[skin][FACE_MINIMAP], skincolor);
if (pos > 1) if (pos > 1)
{ {
V_DrawPingNum(row_position[0] - stwidth - 35, row_position[1], splitflags, pos, NULL); V_DrawPingNum(row_position[0] - stwidth, row_position[1], splitflags, pos, NULL);
} }
// vibes offset TWO // vibes offset TWO

View file

@ -402,9 +402,16 @@ static int mobj_get(lua_State *L)
} }
case mobj_eflags: case mobj_eflags:
{ {
UINT32 eflags = mo->eflags; // yes, not UINT16 UINT32 eflags = mo->eflags; // yes, not UINT16
if (lua_compatmode) if (lua_compatmode)
eflags |= (~mo->renderflags & RF_DONTDRAW); {
// The old eflags compat system causes rendering issues for characters like
// the MK64 cast. This system causes rendering issues in certain gameplay
// mods. At least in this case, character mods take priority, so we set
// up compatibility like so:
eflags |=
mo->renderflags & RF_DONTDRAW ? ~mo->renderflags & RF_DONTDRAW : 0;
}
lua_pushinteger(L, eflags); lua_pushinteger(L, eflags);
break; break;
} }

View file

@ -7151,12 +7151,35 @@ void MD_DrawCssCharacter(void)
// draw their follower if there is one // draw their follower if there is one
if (cv_dummyfollower.value > -1) if (cv_dummyfollower.value > -1)
{ {
// animate the follower follower_t fl = followers[cv_dummyfollower.value]; // shortcut for our sanity
tic_t bobspeed = fl.bobspeed;
if (fl.mode == FOLLOWERMODE_GROUND)
bobspeed = FixedDiv(bobspeed*FRACUNIT, fl.bobamp / 6); // rough approximation of bounce speed
// smooth floating, totally not stolen from rocket sneakers.
fixed_t sine = FixedMul(fl.bobamp, FINESINE(((FixedMul(4 * M_TAU_FIXED, bobspeed) * followertimer)>>ANGLETOFINESHIFT) & FINEMASK));
follower_tics -= renderdeltatics; follower_tics -= renderdeltatics;
// restart the ground follower's animation when it lands on the "ground"
if (fl.mode == FOLLOWERMODE_GROUND)
{
// this sucks
fixed_t sine_next = FixedMul(fl.bobamp, FINESINE(((FixedMul(4 * M_TAU_FIXED, bobspeed) * (followertimer + 1))>>ANGLETOFINESHIFT) & FINEMASK));
if ((sine > 0) != (sine_next > 0))
{
st = fl.followstate;
if (st != S_NULL)
follower_state = &states[st];
follower_tics = follower_state->tics*FRACUNIT;
follower_frame = follower_state->frame & FF_FRAMEMASK; // get spritedef
}
}
// animate the follower
if (follower_tics <= 0) if (follower_tics <= 0)
{ {
// FF_ANIMATE; cycle through FRAMES and get back afterwards. This will be prominent amongst followers hence why it's being supported here. // FF_ANIMATE; cycle through FRAMES and get back afterwards. This will be prominent amongst followers hence why it's being supported here.
if (follower_state->frame & FF_ANIMATE) if (follower_state->frame & FF_ANIMATE)
{ {
@ -7171,14 +7194,12 @@ void MD_DrawCssCharacter(void)
if (st != S_NULL) if (st != S_NULL)
follower_state = &states[st]; follower_state = &states[st];
follower_tics = follower_state->tics*FRACUNIT; follower_tics = follower_state->tics*FRACUNIT;
// get spritedef: follower_frame = follower_state->frame & FF_FRAMEMASK; // get spritedef
follower_frame = follower_state->frame & FF_FRAMEMASK;
} }
} }
sprdef = &sprites[follower_state->sprite]; sprdef = &sprites[follower_state->sprite];
// draw the follower // draw the follower
if (follower_frame >= sprdef->numframes) if (follower_frame >= sprdef->numframes)
follower_frame = 0; // frame doesn't exist, we went beyond it... what? follower_frame = 0; // frame doesn't exist, we went beyond it... what?
sprframe = &sprdef->spriteframes[follower_frame]; sprframe = &sprdef->spriteframes[follower_frame];
@ -7189,22 +7210,13 @@ void MD_DrawCssCharacter(void)
// draw follower sprite // draw follower sprite
{ {
// Fake the follower's in game appearance by now also applying some of its variables! coolio, eh? // Fake the follower's in game appearance by now also applying some of its variables! coolio, eh?
follower_t fl = followers[cv_dummyfollower.value]; // shortcut for our sanity
tic_t bobspeed = fl.bobspeed;
if (fl.mode == FOLLOWERMODE_GROUND)
bobspeed = FixedDiv(bobspeed, fl.bobamp / 6); // Rough approximation of bounce speed
// smooth floating, totally not stolen from rocket sneakers.
fixed_t sine = FixedMul(fl.bobamp, FINESINE(((FixedMul(4 * M_TAU_FIXED, bobspeed) * followertimer)>>ANGLETOFINESHIFT) & FINEMASK));
UINT16 color = K_GetEffectiveFollowerColor(cv_followercolor[setupplayer].value, &fl, cv_dummycolor.value, &skins[skintodisplay]); UINT16 color = K_GetEffectiveFollowerColor(cv_followercolor[setupplayer].value, &fl, cv_dummycolor.value, &skins[skintodisplay]);
colormap = R_GetTranslationColormap(TC_DEFAULT, color, 0); // why does GTC_MENUCACHE not work here...? colormap = R_GetTranslationColormap(TC_DEFAULT, color, 0); // why does GTC_MENUCACHE not work here...?
INT32 x = (mx+65)*FRACUNIT; INT32 x = (mx+65)*FRACUNIT;
INT32 y = ((my+100)*FRACUNIT); INT32 y = ((my+105)*FRACUNIT);
if (fl.mode == FOLLOWERMODE_GROUND) if (fl.mode == FOLLOWERMODE_GROUND)
y += 40*FRACUNIT - abs(sine) * 2; // Bounce animation y += 40*FRACUNIT - FixedMul(abs(sine), max(2*FRACUNIT, (fl.bobamp*2)/3)); // bounce animation
else else
y += sine; y += sine;

View file

@ -103,6 +103,21 @@ void P_ClosestPointOnLine3D(const vector3_t *p, const vector3_t *Line, vector3_t
return; return;
} }
//
// P_PointOnLineSide
// Returns 0 or 1
//
// killough 5/3/98: reformatted, cleaned up
// ioanch 20151228: made line const
//
INT32 P_PointOnLineSide(fixed_t x, fixed_t y, const line_t *line)
{
return
!line->dx ? x <= line->v1->x ? line->dy > 0 : line->dy < 0 :
!line->dy ? y <= line->v1->y ? line->dx < 0 : line->dx > 0 :
((INT64)y - line->v1->y) * line->dx >= line->dy * ((INT64)x - line->v1->x);
}
// //
// P_BoxOnLineSide // P_BoxOnLineSide
// Considers the line to be infinite // Considers the line to be infinite
@ -140,11 +155,15 @@ INT32 P_BoxOnLineSide(const fixed_t *tmbox, const line_t *ld)
// P_PointOnDivlineSide // P_PointOnDivlineSide
// Returns 0 or 1. // Returns 0 or 1.
// //
FUNCMATH FUNCINLINE static ATTRINLINE INT32 P_PointOnDivlineSide(fixed_t x, fixed_t y, const divline_t *line) // killough 5/3/98: reformatted, cleaned up
//
static INT32 P_PointOnDivlineSide(fixed_t x, fixed_t y, const divline_t *line)
{ {
// use cross product to determine side quickly return
INT64 v = ((INT64)y - line->y) * line->dx - ((INT64)x - line->x) * line->dy; line->dx == 0 ? x <= line->x ? line->dy > 0 : line->dy < 0 :
return v > 0; line->dy == 0 ? y <= line->y ? line->dx < 0 : line->dx > 0 :
(line->dy ^ line->dx ^ (x -= line->x) ^ (y -= line->y)) < 0 ? (line->dy ^ x) < 0 :
(INT64)(y) * line->dx >= (INT64)(line->dy) * x;
} }
// //

View file

@ -48,18 +48,7 @@ boolean P_PathTraverse(fixed_t px1, fixed_t py1, fixed_t px2, fixed_t py2,
#define P_AproxDistance(dx, dy) FixedHypot(dx, dy) #define P_AproxDistance(dx, dy) FixedHypot(dx, dy)
void P_ClosestPointOnLine(fixed_t x, fixed_t y, const line_t *line, vertex_t *result); void P_ClosestPointOnLine(fixed_t x, fixed_t y, const line_t *line, vertex_t *result);
void P_ClosestPointOnLine3D(const vector3_t *p, const vector3_t *line, vector3_t *result); void P_ClosestPointOnLine3D(const vector3_t *p, const vector3_t *line, vector3_t *result);
INT32 P_PointOnLineSide(fixed_t x, fixed_t y, const line_t *line);
//
// P_PointOnLineSide
// Returns 0 or 1
//
FUNCMATH FUNCINLINE static ATTRINLINE INT32 P_PointOnLineSide(fixed_t x, fixed_t y, const line_t *line)
{
// use cross product to determine side quickly
INT64 v = ((INT64)y - line->v1->y) * line->dx - ((INT64)x - line->v1->x) * line->dy;
return v > 0;
}
void P_MakeDivline(const line_t *li, divline_t *dl); void P_MakeDivline(const line_t *li, divline_t *dl);
struct opening_t struct opening_t

View file

@ -12600,11 +12600,13 @@ void P_MovePlayerToSpawn(INT32 playernum, mapthing_t *mthing)
if (mthing) if (mthing)
{ {
fixed_t offset = udmf ? mthing->z << FRACBITS : 0;
// Setting the spawnpoint's args[0] will make the player start on the ceiling // Setting the spawnpoint's args[0] will make the player start on the ceiling
// Objectflip inverts // Objectflip inverts
if (!!(mthing->args[0]) ^ !!(mthing->options & MTF_OBJECTFLIP)) if (!!(mthing->args[0]) ^ !!(mthing->options & MTF_OBJECTFLIP))
{ {
z = ceiling - mobjinfo[MT_PLAYER].height; z = ceiling - mobjinfo[MT_PLAYER].height - offset;
if (mthing->options >> ZSHIFT) if (mthing->options >> ZSHIFT)
z -= ((mthing->options >> ZSHIFT) << FRACBITS); z -= ((mthing->options >> ZSHIFT) << FRACBITS);
if (p->respawn) if (p->respawn)
@ -12612,7 +12614,7 @@ void P_MovePlayerToSpawn(INT32 playernum, mapthing_t *mthing)
} }
else else
{ {
z = floor; z = floor + offset;
if (mthing->options >> ZSHIFT) if (mthing->options >> ZSHIFT)
z += ((mthing->options >> ZSHIFT) << FRACBITS); z += ((mthing->options >> ZSHIFT) << FRACBITS);
if (p->respawn) if (p->respawn)

View file

@ -52,7 +52,7 @@
#include "k_kart.h" #include "k_kart.h"
#include "r_fps.h" #include "r_fps.h"
#define MINZ (FRACUNIT*4) #define MINZ (FRACUNIT*16)
#define BASEYCENTER (BASEVIDHEIGHT/2) #define BASEYCENTER (BASEVIDHEIGHT/2)
typedef struct typedef struct