diff --git a/assets/CMakeLists.txt b/assets/CMakeLists.txt index 1eab62cc..12be1c47 100644 --- a/assets/CMakeLists.txt +++ b/assets/CMakeLists.txt @@ -14,7 +14,6 @@ set(SRB2_ASSET_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/installer" set(SRB2_ASSET_HASHED "srb2.srb;\ -patch.kart;\ gfx.kart;\ textures.kart;\ chars.kart;\ diff --git a/src/config.h.in b/src/config.h.in index ff2648dc..0ead749a 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -23,7 +23,7 @@ #define ASSET_HASH_CHARS_KART "${SRB2_ASSET_chars.kart_HASH}" #define ASSET_HASH_MAPS_KART "${SRB2_ASSET_maps.kart_HASH}" #ifdef USE_PATCH_KART -#define ASSET_HASH_PATCH_KART "${SRB2_ASSET_patch.kart_HASH}" +#define ASSET_HASH_PATCH_KART "00000000000000000000000000000000" #endif #define SRB2_COMP_REVISION "${SRB2_COMP_REVISION}" @@ -39,6 +39,7 @@ * Last updated 2019 / 01 / 18 - Kart v1.0.2 - Main assets * Last updated 2020 / 08 / 30 - Kart v1.3 - patch.kart * Last updated 2022 / 08 / 16 - Kart v1.4 - Main assets + * Last updated 2022 / 08 / 19 - Kart v1.5 - gfx.kart */ // Base SRB2 hashes @@ -48,7 +49,7 @@ #endif // SRB2Kart-specific hashes -#define ASSET_HASH_GFX_KART "d25790c21cfcb6c3c02c05ba3eb7f820" +#define ASSET_HASH_GFX_KART "30b2d9fb5009f1b3a3d7216a0fe28e51" #define ASSET_HASH_TEXTURES_KART "abb53d56aba47c3a8cb0f764da1c8b80" #define ASSET_HASH_CHARS_KART "e2c428347dde52858a3dacd29fc5b964" #define ASSET_HASH_MAPS_KART "13e273292576b71af0cdb3a98ca066eb" diff --git a/src/d_main.c b/src/d_main.c index 629c8ee1..a08ed77d 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -799,7 +799,11 @@ void D_SRB2Loop(void) if (!singletics) { INT64 elapsed = (INT64)(finishprecise - enterprecise); - if (elapsed > 0 && (INT64)capbudget > elapsed) + + // in the case of "match refresh rate" + vsync, don't sleep at all + const boolean vsync_with_match_refresh = cv_vidwait.value && cv_fpscap.value == 0; + + if (elapsed > 0 && (INT64)capbudget > elapsed && !vsync_with_match_refresh) { I_SleepDuration(capbudget - (finishprecise - enterprecise)); } diff --git a/src/doomdef.h b/src/doomdef.h index 7f6a74c5..0de781c6 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -149,8 +149,8 @@ extern char logfilename[1024]; #else #define VERSION 1 // Game version #define SUBVERSION 4 // more precise version number -#define VERSIONSTRING "v1.4" -#define VERSIONSTRINGW L"v1.4" +#define VERSIONSTRING "v1.5" +#define VERSIONSTRINGW L"v1.5" // Hey! If you change this, add 1 to the MODVERSION below! Otherwise we can't force updates! // And change CMakeLists.txt (not src/, but in root), for CMake users! // AND appveyor.yml, for the build bots! @@ -204,7 +204,7 @@ extern char logfilename[1024]; // it's only for detection of the version the player is using so the MS can alert them of an update. // Only set it higher, not lower, obviously. // Note that we use this to help keep internal testing in check; this is why v2.1.0 is not version "1". -#define MODVERSION 8 +#define MODVERSION 9 // Filter consvars by version // To version config.cfg, MAJOREXECVERSION is set equal to MODVERSION automatically. diff --git a/src/http-mserv.c b/src/http-mserv.c index 919acf33..cb08a85b 100644 --- a/src/http-mserv.c +++ b/src/http-mserv.c @@ -21,6 +21,7 @@ Documentation available here. #include "doomdef.h" #include "d_clisrv.h" #include "command.h" +#include "console.h" #include "m_argv.h" #include "m_menu.h" #include "mserv.h" @@ -78,6 +79,19 @@ Contact_error (void) ); } +static void +Printf_url (const char *url) +{ + boolean startup; + + I_lock_mutex(&con_mutex); + startup = con_startup; + I_unlock_mutex(con_mutex); + + (startup ? I_OutputMsg : CONS_Printf)( + "HMS: connecting '%s'...\n", url); +} + static size_t HMS_on_read (char *s, size_t _1, size_t n, void *userdata) { @@ -177,7 +191,7 @@ HMS_connect (const char *format, ...) if (quack_token) sprintf(&url[seek], "&token=%s", quack_token); - CONS_Printf("HMS: connecting '%s'...\n", url); + Printf_url(url); buffer = malloc(sizeof *buffer); buffer->curl = curl; diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 3b800fbe..60b1d14d 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -321,7 +321,7 @@ void HU_LoadGraphics(void) pinggfx[i] = (patch_t *)W_CachePatchName(buffer, PU_HUDGFX); } - pingmeasure[0] = W_CachePatchName("PINGF", PU_HUDGFX); + pingmeasure[0] = W_CachePatchName("PINGD", PU_HUDGFX); pingmeasure[1] = W_CachePatchName("PINGMS", PU_HUDGFX); // fps stuff @@ -2552,7 +2552,8 @@ void HU_drawPing(INT32 x, INT32 y, UINT32 lag, INT32 flags) gfxnum = Ping_gfx_num(lag); - V_DrawScaledPatch(x+11 - pingmeasure[measureid]->width, y+9, flags, pingmeasure[measureid]); + if (measureid == 1) + V_DrawScaledPatch(x+11 - pingmeasure[measureid]->width, y+9, flags, pingmeasure[measureid]); V_DrawScaledPatch(x+2, y, flags, pinggfx[gfxnum]); if (servermaxping && lag > servermaxping && hu_tick < 4) @@ -2566,7 +2567,10 @@ void HU_drawPing(INT32 x, INT32 y, UINT32 lag, INT32 flags) lag = (INT32)(lag * (1000.00f / TICRATE)); } - V_DrawPingNum(x+11 - pingmeasure[measureid]->width, y+9, flags, lag, colormap); + x = V_DrawPingNum(x + (measureid == 1 ? 11 - pingmeasure[measureid]->width : 10), y+9, flags, lag, colormap); + + if (measureid == 0) + V_DrawScaledPatch(x+1 - pingmeasure[measureid]->width, y+9, flags, pingmeasure[measureid]); } // diff --git a/src/i_tcp.c b/src/i_tcp.c index 7842f571..f642313f 100644 --- a/src/i_tcp.c +++ b/src/i_tcp.c @@ -713,13 +713,13 @@ static boolean SOCK_Get(void) #ifdef USE_STUN if (STUN_got_response(doomcom->data, c)) { - return false; + break; } #endif if (hole_punch(c)) { - return false; + break; } // find remote node number diff --git a/src/mserv.c b/src/mserv.c index e0078d55..cf0a5f0d 100644 --- a/src/mserv.c +++ b/src/mserv.c @@ -70,7 +70,7 @@ static CV_PossibleValue_t masterserver_update_rate_cons_t[] = { }; consvar_t cv_masterserver = {"masterserver", "https://ms.kartkrew.org/ms/api", CV_SAVE|CV_CALL, NULL, MasterServer_OnChange, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_rendezvousserver = {"rendezvousserver", "relay.kartkrew.org", CV_SAVE, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_rendezvousserver = {"holepunchserver", "relay.kartkrew.org", CV_SAVE, NULL, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_servername = {"servername", "SRB2Kart server", CV_SAVE|CV_CALL|CV_NOINIT, NULL, Update_parameters, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_server_contact = {"server_contact", "", CV_SAVE|CV_CALL|CV_NOINIT, NULL, Update_parameters, 0, NULL, NULL, 0, 0, NULL}; @@ -591,5 +591,8 @@ Advertise_OnChange(void) DRPC_UpdatePresence(); #endif - M_PopupMasterServerRules(); + if (!dedicated) + { + M_PopupMasterServerRules(); + } } diff --git a/src/p_local.h b/src/p_local.h index a4062ff6..cef7e736 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -86,6 +86,7 @@ typedef struct camera_s // Camera demobjerization // Info for drawing: position. fixed_t x, y, z; + boolean reset; //More drawing info: to determine current sprite. angle_t angle; // orientation diff --git a/src/p_user.c b/src/p_user.c index 5cbc6926..82e5fa3f 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -7392,6 +7392,7 @@ void P_ResetCamera(player_t *player, camera_t *thiscam) thiscam->x = x; thiscam->y = y; thiscam->z = z; + thiscam->reset = true; if (!(thiscam == &camera[0] && (cv_cam_still.value || cv_analog.value)) && !(thiscam == &camera[1] && (cv_cam2_still.value || cv_analog2.value)) diff --git a/src/r_main.c b/src/r_main.c index 152ed20d..e5548151 100644 --- a/src/r_main.c +++ b/src/r_main.c @@ -1045,24 +1045,44 @@ void R_SetupFrame(player_t *player, boolean skybox) thiscam = &camera[3]; chasecam = (cv_chasecam4.value != 0); R_SetViewContext(VIEWCONTEXT_PLAYER4); + if (thiscam->reset) + { + R_ResetViewInterpolation(4); + thiscam->reset = false; + } } else if (splitscreen > 1 && player == &players[displayplayers[2]]) { thiscam = &camera[2]; chasecam = (cv_chasecam3.value != 0); R_SetViewContext(VIEWCONTEXT_PLAYER3); + if (thiscam->reset) + { + R_ResetViewInterpolation(3); + thiscam->reset = false; + } } else if (splitscreen && player == &players[displayplayers[1]]) { thiscam = &camera[1]; chasecam = (cv_chasecam2.value != 0); R_SetViewContext(VIEWCONTEXT_PLAYER2); + if (thiscam->reset) + { + R_ResetViewInterpolation(2); + thiscam->reset = false; + } } else { thiscam = &camera[0]; chasecam = (cv_chasecam.value != 0); R_SetViewContext(VIEWCONTEXT_PLAYER1); + if (thiscam->reset) + { + R_ResetViewInterpolation(1); + thiscam->reset = false; + } } if (player->spectator) // no spectator chasecam @@ -1175,11 +1195,11 @@ static void R_PortalFrame(line_t *start, line_t *dest, portal_pair *portal) #endif //R_SetupFrame(player, false); - newview->x = portal->viewx; - newview->y = portal->viewy; - newview->z = portal->viewz; + viewx = portal->viewx; + viewy = portal->viewy; + viewz = portal->viewz; - newview->angle = portal->viewangle; + viewangle = portal->viewangle; // newview->sin = FINESINE(newview->angle>>ANGLETOFINESHIFT); // newview->cos = FINECOSINE(newview->angle>>ANGLETOFINESHIFT); @@ -1207,13 +1227,13 @@ static void R_PortalFrame(line_t *start, line_t *dest, portal_pair *portal) if (dangle == 0) #endif { // the entrance goes straight opposite the exit, so we just need to mess with the offset. - newview->x += dest_c.x - start_c.x; - newview->y += dest_c.y - start_c.y; + viewx += dest_c.x - start_c.x; + viewy += dest_c.y - start_c.y; return; } #ifdef ANGLED_PORTALS - newview->angle += dangle; + viewangle += dangle; // newview->sin = FINESINE(newview->angle>>ANGLETOFINESHIFT); // newview->cos = FINECOSINE(newview->angle>>ANGLETOFINESHIFT); //CONS_Printf("dangle == %u\n", AngleFixed(dangle)>>FRACBITS); @@ -1227,8 +1247,8 @@ static void R_PortalFrame(line_t *start, line_t *dest, portal_pair *portal) angtopoint = R_PointToAngle2(start_c.x, start_c.y, newview->x, newview->y); angtopoint += dangle; - newview->x = dest_c.x+FixedMul(FINECOSINE(angtopoint>>ANGLETOFINESHIFT), disttopoint); - newview->y = dest_c.y+FixedMul(FINESINE(angtopoint>>ANGLETOFINESHIFT), disttopoint); + viewx = dest_c.x+FixedMul(FINECOSINE(angtopoint>>ANGLETOFINESHIFT), disttopoint); + viewy = dest_c.y+FixedMul(FINESINE(angtopoint>>ANGLETOFINESHIFT), disttopoint); } #endif } diff --git a/src/sdl/CMakeLists.txt b/src/sdl/CMakeLists.txt index b285eed5..8f2c6c64 100644 --- a/src/sdl/CMakeLists.txt +++ b/src/sdl/CMakeLists.txt @@ -36,6 +36,7 @@ set(SRB2_SDL2_SOURCES i_system.c i_ttf.c i_video.c + i_threads.c #IMG_xpm.c ogl_sdl.c @@ -261,6 +262,7 @@ if(${SDL2_FOUND}) target_compile_definitions(SRB2SDL2 PRIVATE -DHAVE_SDL + -DHAVE_THREADS ) ## strip debug symbols into separate file when using gcc diff --git a/src/v_video.c b/src/v_video.c index 7bbb2988..09a473ed 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -2028,7 +2028,7 @@ void V_DrawPaddedTallNum(INT32 x, INT32 y, INT32 flags, INT32 num, INT32 digits) // Draws a number using the PING font thingy. // TODO: Merge number drawing functions into one with "font name" selection. -void V_DrawPingNum(INT32 x, INT32 y, INT32 flags, INT32 num, const UINT8 *colormap) +INT32 V_DrawPingNum(INT32 x, INT32 y, INT32 flags, INT32 num, const UINT8 *colormap) { INT32 w = SHORT(pingnum[0]->width); // this SHOULD always be 5 but I guess custom graphics exist. @@ -2045,6 +2045,8 @@ void V_DrawPingNum(INT32 x, INT32 y, INT32 flags, INT32 num, const UINT8 *colorm V_DrawFixedPatch(x<