mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-01-13 05:11:01 +00:00
Merge branch 'master' (1.5) into futurepk3
This commit is contained in:
commit
3305303ea7
14 changed files with 77 additions and 26 deletions
|
@ -14,7 +14,6 @@ set(SRB2_ASSET_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/installer"
|
||||||
|
|
||||||
set(SRB2_ASSET_HASHED
|
set(SRB2_ASSET_HASHED
|
||||||
"srb2.srb;\
|
"srb2.srb;\
|
||||||
patch.kart;\
|
|
||||||
gfx.kart;\
|
gfx.kart;\
|
||||||
textures.kart;\
|
textures.kart;\
|
||||||
chars.kart;\
|
chars.kart;\
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
#define ASSET_HASH_CHARS_KART "${SRB2_ASSET_chars.kart_HASH}"
|
#define ASSET_HASH_CHARS_KART "${SRB2_ASSET_chars.kart_HASH}"
|
||||||
#define ASSET_HASH_MAPS_KART "${SRB2_ASSET_maps.kart_HASH}"
|
#define ASSET_HASH_MAPS_KART "${SRB2_ASSET_maps.kart_HASH}"
|
||||||
#ifdef USE_PATCH_KART
|
#ifdef USE_PATCH_KART
|
||||||
#define ASSET_HASH_PATCH_KART "${SRB2_ASSET_patch.kart_HASH}"
|
#define ASSET_HASH_PATCH_KART "00000000000000000000000000000000"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define SRB2_COMP_REVISION "${SRB2_COMP_REVISION}"
|
#define SRB2_COMP_REVISION "${SRB2_COMP_REVISION}"
|
||||||
|
@ -39,6 +39,7 @@
|
||||||
* Last updated 2019 / 01 / 18 - Kart v1.0.2 - Main assets
|
* Last updated 2019 / 01 / 18 - Kart v1.0.2 - Main assets
|
||||||
* Last updated 2020 / 08 / 30 - Kart v1.3 - patch.kart
|
* Last updated 2020 / 08 / 30 - Kart v1.3 - patch.kart
|
||||||
* Last updated 2022 / 08 / 16 - Kart v1.4 - Main assets
|
* Last updated 2022 / 08 / 16 - Kart v1.4 - Main assets
|
||||||
|
* Last updated 2022 / 08 / 19 - Kart v1.5 - gfx.kart
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Base SRB2 hashes
|
// Base SRB2 hashes
|
||||||
|
@ -48,7 +49,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// SRB2Kart-specific hashes
|
// SRB2Kart-specific hashes
|
||||||
#define ASSET_HASH_GFX_KART "d25790c21cfcb6c3c02c05ba3eb7f820"
|
#define ASSET_HASH_GFX_KART "30b2d9fb5009f1b3a3d7216a0fe28e51"
|
||||||
#define ASSET_HASH_TEXTURES_KART "abb53d56aba47c3a8cb0f764da1c8b80"
|
#define ASSET_HASH_TEXTURES_KART "abb53d56aba47c3a8cb0f764da1c8b80"
|
||||||
#define ASSET_HASH_CHARS_KART "e2c428347dde52858a3dacd29fc5b964"
|
#define ASSET_HASH_CHARS_KART "e2c428347dde52858a3dacd29fc5b964"
|
||||||
#define ASSET_HASH_MAPS_KART "13e273292576b71af0cdb3a98ca066eb"
|
#define ASSET_HASH_MAPS_KART "13e273292576b71af0cdb3a98ca066eb"
|
||||||
|
|
|
@ -799,7 +799,11 @@ void D_SRB2Loop(void)
|
||||||
if (!singletics)
|
if (!singletics)
|
||||||
{
|
{
|
||||||
INT64 elapsed = (INT64)(finishprecise - enterprecise);
|
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));
|
I_SleepDuration(capbudget - (finishprecise - enterprecise));
|
||||||
}
|
}
|
||||||
|
|
|
@ -149,8 +149,8 @@ extern char logfilename[1024];
|
||||||
#else
|
#else
|
||||||
#define VERSION 1 // Game version
|
#define VERSION 1 // Game version
|
||||||
#define SUBVERSION 4 // more precise version number
|
#define SUBVERSION 4 // more precise version number
|
||||||
#define VERSIONSTRING "v1.4"
|
#define VERSIONSTRING "v1.5"
|
||||||
#define VERSIONSTRINGW L"v1.4"
|
#define VERSIONSTRINGW L"v1.5"
|
||||||
// Hey! If you change this, add 1 to the MODVERSION below! Otherwise we can't force updates!
|
// 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 change CMakeLists.txt (not src/, but in root), for CMake users!
|
||||||
// AND appveyor.yml, for the build bots!
|
// 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.
|
// 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.
|
// 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".
|
// 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
|
// Filter consvars by version
|
||||||
// To version config.cfg, MAJOREXECVERSION is set equal to MODVERSION automatically.
|
// To version config.cfg, MAJOREXECVERSION is set equal to MODVERSION automatically.
|
||||||
|
|
|
@ -21,6 +21,7 @@ Documentation available here.
|
||||||
#include "doomdef.h"
|
#include "doomdef.h"
|
||||||
#include "d_clisrv.h"
|
#include "d_clisrv.h"
|
||||||
#include "command.h"
|
#include "command.h"
|
||||||
|
#include "console.h"
|
||||||
#include "m_argv.h"
|
#include "m_argv.h"
|
||||||
#include "m_menu.h"
|
#include "m_menu.h"
|
||||||
#include "mserv.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
|
static size_t
|
||||||
HMS_on_read (char *s, size_t _1, size_t n, void *userdata)
|
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)
|
if (quack_token)
|
||||||
sprintf(&url[seek], "&token=%s", quack_token);
|
sprintf(&url[seek], "&token=%s", quack_token);
|
||||||
|
|
||||||
CONS_Printf("HMS: connecting '%s'...\n", url);
|
Printf_url(url);
|
||||||
|
|
||||||
buffer = malloc(sizeof *buffer);
|
buffer = malloc(sizeof *buffer);
|
||||||
buffer->curl = curl;
|
buffer->curl = curl;
|
||||||
|
|
|
@ -321,7 +321,7 @@ void HU_LoadGraphics(void)
|
||||||
pinggfx[i] = (patch_t *)W_CachePatchName(buffer, PU_HUDGFX);
|
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);
|
pingmeasure[1] = W_CachePatchName("PINGMS", PU_HUDGFX);
|
||||||
|
|
||||||
// fps stuff
|
// fps stuff
|
||||||
|
@ -2552,6 +2552,7 @@ void HU_drawPing(INT32 x, INT32 y, UINT32 lag, INT32 flags)
|
||||||
|
|
||||||
gfxnum = Ping_gfx_num(lag);
|
gfxnum = Ping_gfx_num(lag);
|
||||||
|
|
||||||
|
if (measureid == 1)
|
||||||
V_DrawScaledPatch(x+11 - pingmeasure[measureid]->width, y+9, flags, pingmeasure[measureid]);
|
V_DrawScaledPatch(x+11 - pingmeasure[measureid]->width, y+9, flags, pingmeasure[measureid]);
|
||||||
V_DrawScaledPatch(x+2, y, flags, pinggfx[gfxnum]);
|
V_DrawScaledPatch(x+2, y, flags, pinggfx[gfxnum]);
|
||||||
|
|
||||||
|
@ -2566,7 +2567,10 @@ void HU_drawPing(INT32 x, INT32 y, UINT32 lag, INT32 flags)
|
||||||
lag = (INT32)(lag * (1000.00f / TICRATE));
|
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]);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -713,13 +713,13 @@ static boolean SOCK_Get(void)
|
||||||
#ifdef USE_STUN
|
#ifdef USE_STUN
|
||||||
if (STUN_got_response(doomcom->data, c))
|
if (STUN_got_response(doomcom->data, c))
|
||||||
{
|
{
|
||||||
return false;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (hole_punch(c))
|
if (hole_punch(c))
|
||||||
{
|
{
|
||||||
return false;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// find remote node number
|
// find remote node number
|
||||||
|
|
|
@ -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_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_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};
|
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();
|
DRPC_UpdatePresence();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (!dedicated)
|
||||||
|
{
|
||||||
M_PopupMasterServerRules();
|
M_PopupMasterServerRules();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -86,6 +86,7 @@ typedef struct camera_s
|
||||||
// Camera demobjerization
|
// Camera demobjerization
|
||||||
// Info for drawing: position.
|
// Info for drawing: position.
|
||||||
fixed_t x, y, z;
|
fixed_t x, y, z;
|
||||||
|
boolean reset;
|
||||||
|
|
||||||
//More drawing info: to determine current sprite.
|
//More drawing info: to determine current sprite.
|
||||||
angle_t angle; // orientation
|
angle_t angle; // orientation
|
||||||
|
|
|
@ -7392,6 +7392,7 @@ void P_ResetCamera(player_t *player, camera_t *thiscam)
|
||||||
thiscam->x = x;
|
thiscam->x = x;
|
||||||
thiscam->y = y;
|
thiscam->y = y;
|
||||||
thiscam->z = z;
|
thiscam->z = z;
|
||||||
|
thiscam->reset = true;
|
||||||
|
|
||||||
if (!(thiscam == &camera[0] && (cv_cam_still.value || cv_analog.value))
|
if (!(thiscam == &camera[0] && (cv_cam_still.value || cv_analog.value))
|
||||||
&& !(thiscam == &camera[1] && (cv_cam2_still.value || cv_analog2.value))
|
&& !(thiscam == &camera[1] && (cv_cam2_still.value || cv_analog2.value))
|
||||||
|
|
38
src/r_main.c
38
src/r_main.c
|
@ -1045,24 +1045,44 @@ void R_SetupFrame(player_t *player, boolean skybox)
|
||||||
thiscam = &camera[3];
|
thiscam = &camera[3];
|
||||||
chasecam = (cv_chasecam4.value != 0);
|
chasecam = (cv_chasecam4.value != 0);
|
||||||
R_SetViewContext(VIEWCONTEXT_PLAYER4);
|
R_SetViewContext(VIEWCONTEXT_PLAYER4);
|
||||||
|
if (thiscam->reset)
|
||||||
|
{
|
||||||
|
R_ResetViewInterpolation(4);
|
||||||
|
thiscam->reset = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (splitscreen > 1 && player == &players[displayplayers[2]])
|
else if (splitscreen > 1 && player == &players[displayplayers[2]])
|
||||||
{
|
{
|
||||||
thiscam = &camera[2];
|
thiscam = &camera[2];
|
||||||
chasecam = (cv_chasecam3.value != 0);
|
chasecam = (cv_chasecam3.value != 0);
|
||||||
R_SetViewContext(VIEWCONTEXT_PLAYER3);
|
R_SetViewContext(VIEWCONTEXT_PLAYER3);
|
||||||
|
if (thiscam->reset)
|
||||||
|
{
|
||||||
|
R_ResetViewInterpolation(3);
|
||||||
|
thiscam->reset = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (splitscreen && player == &players[displayplayers[1]])
|
else if (splitscreen && player == &players[displayplayers[1]])
|
||||||
{
|
{
|
||||||
thiscam = &camera[1];
|
thiscam = &camera[1];
|
||||||
chasecam = (cv_chasecam2.value != 0);
|
chasecam = (cv_chasecam2.value != 0);
|
||||||
R_SetViewContext(VIEWCONTEXT_PLAYER2);
|
R_SetViewContext(VIEWCONTEXT_PLAYER2);
|
||||||
|
if (thiscam->reset)
|
||||||
|
{
|
||||||
|
R_ResetViewInterpolation(2);
|
||||||
|
thiscam->reset = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
thiscam = &camera[0];
|
thiscam = &camera[0];
|
||||||
chasecam = (cv_chasecam.value != 0);
|
chasecam = (cv_chasecam.value != 0);
|
||||||
R_SetViewContext(VIEWCONTEXT_PLAYER1);
|
R_SetViewContext(VIEWCONTEXT_PLAYER1);
|
||||||
|
if (thiscam->reset)
|
||||||
|
{
|
||||||
|
R_ResetViewInterpolation(1);
|
||||||
|
thiscam->reset = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player->spectator) // no spectator chasecam
|
if (player->spectator) // no spectator chasecam
|
||||||
|
@ -1175,11 +1195,11 @@ static void R_PortalFrame(line_t *start, line_t *dest, portal_pair *portal)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//R_SetupFrame(player, false);
|
//R_SetupFrame(player, false);
|
||||||
newview->x = portal->viewx;
|
viewx = portal->viewx;
|
||||||
newview->y = portal->viewy;
|
viewy = portal->viewy;
|
||||||
newview->z = portal->viewz;
|
viewz = portal->viewz;
|
||||||
|
|
||||||
newview->angle = portal->viewangle;
|
viewangle = portal->viewangle;
|
||||||
// newview->sin = FINESINE(newview->angle>>ANGLETOFINESHIFT);
|
// newview->sin = FINESINE(newview->angle>>ANGLETOFINESHIFT);
|
||||||
// newview->cos = FINECOSINE(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)
|
if (dangle == 0)
|
||||||
#endif
|
#endif
|
||||||
{ // the entrance goes straight opposite the exit, so we just need to mess with the offset.
|
{ // the entrance goes straight opposite the exit, so we just need to mess with the offset.
|
||||||
newview->x += dest_c.x - start_c.x;
|
viewx += dest_c.x - start_c.x;
|
||||||
newview->y += dest_c.y - start_c.y;
|
viewy += dest_c.y - start_c.y;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ANGLED_PORTALS
|
#ifdef ANGLED_PORTALS
|
||||||
newview->angle += dangle;
|
viewangle += dangle;
|
||||||
// newview->sin = FINESINE(newview->angle>>ANGLETOFINESHIFT);
|
// newview->sin = FINESINE(newview->angle>>ANGLETOFINESHIFT);
|
||||||
// newview->cos = FINECOSINE(newview->angle>>ANGLETOFINESHIFT);
|
// newview->cos = FINECOSINE(newview->angle>>ANGLETOFINESHIFT);
|
||||||
//CONS_Printf("dangle == %u\n", AngleFixed(dangle)>>FRACBITS);
|
//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 = R_PointToAngle2(start_c.x, start_c.y, newview->x, newview->y);
|
||||||
angtopoint += dangle;
|
angtopoint += dangle;
|
||||||
|
|
||||||
newview->x = dest_c.x+FixedMul(FINECOSINE(angtopoint>>ANGLETOFINESHIFT), disttopoint);
|
viewx = dest_c.x+FixedMul(FINECOSINE(angtopoint>>ANGLETOFINESHIFT), disttopoint);
|
||||||
newview->y = dest_c.y+FixedMul(FINESINE(angtopoint>>ANGLETOFINESHIFT), disttopoint);
|
viewy = dest_c.y+FixedMul(FINESINE(angtopoint>>ANGLETOFINESHIFT), disttopoint);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,7 @@ set(SRB2_SDL2_SOURCES
|
||||||
i_system.c
|
i_system.c
|
||||||
i_ttf.c
|
i_ttf.c
|
||||||
i_video.c
|
i_video.c
|
||||||
|
i_threads.c
|
||||||
#IMG_xpm.c
|
#IMG_xpm.c
|
||||||
ogl_sdl.c
|
ogl_sdl.c
|
||||||
|
|
||||||
|
@ -261,6 +262,7 @@ if(${SDL2_FOUND})
|
||||||
|
|
||||||
target_compile_definitions(SRB2SDL2 PRIVATE
|
target_compile_definitions(SRB2SDL2 PRIVATE
|
||||||
-DHAVE_SDL
|
-DHAVE_SDL
|
||||||
|
-DHAVE_THREADS
|
||||||
)
|
)
|
||||||
|
|
||||||
## strip debug symbols into separate file when using gcc
|
## strip debug symbols into separate file when using gcc
|
||||||
|
|
|
@ -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.
|
// Draws a number using the PING font thingy.
|
||||||
// TODO: Merge number drawing functions into one with "font name" selection.
|
// 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.
|
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<<FRACBITS, y<<FRACBITS, FRACUNIT, flags, pingnum[num%10], colormap);
|
V_DrawFixedPatch(x<<FRACBITS, y<<FRACBITS, FRACUNIT, flags, pingnum[num%10], colormap);
|
||||||
num /= 10;
|
num /= 10;
|
||||||
} while (num);
|
} while (num);
|
||||||
|
|
||||||
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write a string using the credit font
|
// Write a string using the credit font
|
||||||
|
|
|
@ -205,7 +205,7 @@ void V_DrawPaddedTallNum(INT32 x, INT32 y, INT32 flags, INT32 num, INT32 digits)
|
||||||
|
|
||||||
// Draw ping numbers. Used by the scoreboard and that one ping option. :P
|
// Draw ping numbers. Used by the scoreboard and that one ping option. :P
|
||||||
// This is a separate function because IMO lua should have access to it as well.
|
// This is a separate function because IMO lua should have access to it as well.
|
||||||
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);
|
||||||
|
|
||||||
// Find string width from lt_font chars
|
// Find string width from lt_font chars
|
||||||
INT32 V_LevelNameWidth(const char *string);
|
INT32 V_LevelNameWidth(const char *string);
|
||||||
|
|
Loading…
Reference in a new issue