Visuals and friends #34

Merged
hayaunderscore merged 18 commits from visuals-and-friends into Saturn 2023-08-27 19:16:35 +02:00
12 changed files with 257 additions and 47 deletions

No files matched your search

+11
View File
@@ -957,9 +957,12 @@ static boolean AddIWAD(void)
}
}
boolean found_extra_kart;
static void IdentifyVersion(void)
{
const char *srb2waddir = NULL;
found_extra_kart = false;
#if (defined (__unix__) && !defined (MSDOS)) || defined (UNIXCOMMON) || defined (HAVE_SDL)
// change to the directory where 'srb2.srb' is found
@@ -1012,6 +1015,11 @@ static void IdentifyVersion(void)
#ifdef USE_PATCH_KART
D_AddFile(va(pandf,srb2waddir,"patch.kart"), startupwadfiles);
#endif
// completely optional
if (FIL_ReadFileOK(va(pandf,srb2waddir,"extra.kart"))) {
D_AddFile(va(pandf,srb2waddir,"extra.kart"), startupwadfiles);
found_extra_kart = true;
}
#if !defined (HAVE_SDL) || defined (HAVE_MIXER)
#define MUSICTEST(str) \
@@ -1337,6 +1345,9 @@ void D_SRB2Main(void)
#endif //ifndef DEVELOP
if (found_extra_kart) // found the funny, add it in!
mainwads++;
//
// search for maps
//
+2
View File
@@ -25,6 +25,8 @@ extern boolean usehome; //Alam: which path?
extern const char *pandf; //Alam: how to path?
extern char srb2path[256]; //Alam: SRB2's Home
extern boolean found_extra_kart; // for use in k_kart.c
// the infinite loop of D_SRB2Loop() called from win_main for windows version
void D_SRB2Loop(void) FUNCNORETURN;
+5
View File
@@ -957,6 +957,11 @@ void D_RegisterClientCommands(void)
CV_RegisterVar(&cv_mini_yoffset);
CV_RegisterVar(&cv_want_xoffset);
CV_RegisterVar(&cv_want_yoffset);
CV_RegisterVar(&cv_showinput);
CV_RegisterVar(&cv_newspeedometer);
CV_RegisterVar(&cv_saltyhop);
CV_RegisterVar(&cv_saltyhopsfx);
//CV_RegisterVar(&cv_crosshair);
//CV_RegisterVar(&cv_crosshair2);
+5
View File
@@ -145,6 +145,11 @@ extern consvar_t cv_mini_xoffset;
extern consvar_t cv_mini_yoffset;
extern consvar_t cv_want_xoffset;
extern consvar_t cv_want_yoffset;
extern consvar_t cv_showinput;
extern consvar_t cv_newspeedometer;
extern consvar_t cv_saltyhop;
extern consvar_t cv_saltyhopsfx;
extern consvar_t cv_driftsparkpulse;
extern consvar_t cv_gravstretch;
+4
View File
@@ -81,6 +81,8 @@ patch_t *pingnum[10];
patch_t *pinggfx[5]; // small ping graphic
patch_t *pingmeasure[2]; // ping measurement graphic
patch_t *ranknum[10]; // rank numbers
patch_t *framecounter;
patch_t *frameslash; // framerate stuff. Used in screen.c
@@ -281,6 +283,8 @@ void HU_LoadGraphics(void)
nightsnum[i] = (patch_t *) W_CachePatchName(buffer, PU_HUDGFX);
sprintf(buffer, "PINGN%d", i);
pingnum[i] = (patch_t *) W_CachePatchName(buffer, PU_HUDGFX);
sprintf(buffer, "OPPRNK0%d", i);
ranknum[i] = (patch_t *) W_CachePatchName(buffer, PU_HUDGFX);
}
// minus for negative tallnums
+1
View File
@@ -83,6 +83,7 @@ extern patch_t *hu_font[HU_FONTSIZE], *kart_font[KART_FONTSIZE], *tny_font[HU_FO
extern patch_t *tallnum[10];
extern patch_t *pingnum[10];
extern patch_t *pinggfx[5];
extern patch_t *ranknum[10];
extern patch_t *nightsnum[10];
extern patch_t *framecounter;
extern patch_t *frameslash;
+152 -24
View File
@@ -22,6 +22,7 @@
#include "f_finale.h"
#include "lua_hud.h" // For Lua hud checks
#include "lua_hook.h" // For MobjDamage and ShouldDamage
#include "d_main.h" // found_extra_kart
// Hud offset cvars
consvar_t cv_item_xoffset = {"hud_item_xoffset", "0", CV_SAVE, NULL, NULL, 0, NULL, NULL, 0, 0, NULL};
@@ -53,6 +54,12 @@ consvar_t cv_mini_yoffset = {"hud_minimap_yoffset", "0", CV_SAVE, NULL, NULL, 0,
consvar_t cv_want_xoffset = {"hud_wanted_xoffset", "0", CV_SAVE, NULL, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_want_yoffset = {"hud_wanted_yoffset", "0", CV_SAVE, NULL, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_showinput = {"showinput", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_newspeedometer = {"newspeedometer", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_saltyhop = {"hardcodehop", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
consvar_t cv_saltyhopsfx = {"hardcodehopsfx", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
// SOME IMPORTANT VARIABLES DEFINED IN DOOMDEF.H:
// gamespeed is cc (0 for easy, 1 for normal, 2 for hard)
// franticitems is Frantic Mode items, bool
@@ -3037,6 +3044,67 @@ static void K_StretchPlayerGravity(player_t *p)
}
}
static void K_QuiteSaltyHop(player_t *p)
{
// what the fuck is this haya
fixed_t mos = FRACUNIT; // doesnt work correctly if it isnt :/
// ready?
if (!p->kartstuff[k_jmp]) {
p->mo->salty_ready = true;
p->mo->salty_tapping = false;
} else if (p->mo->salty_ready) {
p->mo->salty_ready = false;
p->mo->salty_tapping = true;
} else {
p->mo->salty_tapping = false;
}
// GO!
if (!p->mo->init_salty) {
p->mo->salty_jump = false;
p->mo->salty_zoffset = 0;
p->mo->salty_momz = 0;
p->mo->init_salty = true;
}
else if (p->mo->salty_jump) {
if (p->mo->eflags & MFE_JUSTHITFLOOR) {
p->mo->salty_zoffset = 0;
} else if (P_IsObjectOnGround(p->mo)) {
p->mo->salty_zoffset += p->mo->salty_momz;
p->mo->salty_momz -= (mos*3/2);
} else {
p->mo->salty_zoffset *= (49/50)*mos;
p->mo->salty_momz = 0;
}
if (p->mo->salty_zoffset <= 0) {
if (!(p->mo->eflags & MFE_JUSTHITFLOOR) && P_IsObjectOnGround(p->mo) && cv_saltyhopsfx.value)
S_StartSound(p->mo, sfx_s268);
p->mo->salty_jump = false;
p->mo->salty_zoffset = 0;
p->mo->salty_momz = 0;
// shlamma damma
p->mo->stretchslam += (8*mos);
} else if (p->mo->salty_zoffset >= 0) {
// goofy ahh hack
p->mo->spriteyscale += (mos/8);
p->mo->spritexscale -= (mos/8);
}
p->mo->spriteyoffset = p->mo->salty_zoffset*P_MobjFlip(p->mo);
if (S_SoundPlaying(p->mo, sfx_screec))
S_StopSoundByID(p->mo, sfx_screec);
if (S_SoundPlaying(p->mo, sfx_drift))
S_StopSoundByID(p->mo, sfx_drift);
}
else if (p->mo->salty_tapping && P_IsObjectOnGround(p->mo) && !p->kartstuff[k_spinouttimer] && !p->kartstuff[k_squishedtimer]) {
p->mo->salty_jump = true;
p->mo->salty_zoffset = 0;
p->mo->salty_momz = 6*mos;
if (cv_saltyhopsfx.value)
S_StartSound(p->mo, sfx_s25a);
}
}
static INT32 K_FindPlayerNum(player_t *plyr)
{
INT32 i;
@@ -6392,6 +6460,16 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
player->kartstuff[k_boostcharge] = 0;
}
// salty hop! i wanna die
if (cv_saltyhop.value)
K_QuiteSaltyHop(player);
else {
player->mo->spriteyoffset = 0;
player->mo->salty_jump = false;
player->mo->salty_zoffset = 0;
player->mo->salty_momz = 0;
}
}
void K_CalculateBattleWanted(void)
@@ -6817,6 +6895,9 @@ static patch_t *kp_lapanim_hand[3];
static patch_t *kp_yougotem;
static patch_t *skp_smallsticker;
static patch_t *skp_speedpatches[5];
void K_LoadKartHUDGraphics(void)
{
INT32 i, j;
@@ -7063,6 +7144,16 @@ void K_LoadKartHUDGraphics(void)
}
kp_yougotem = (patch_t *) W_CachePatchName("YOUGOTEM", PU_HUDGFX);
if (found_extra_kart) // snowy speedometer
{
skp_smallsticker = W_CachePatchName("SP_SMSTC", PU_HUDGFX);
skp_speedpatches[0] = W_CachePatchName("K_TRNULL", PU_HUDGFX); // lolxd
skp_speedpatches[1] = W_CachePatchName("SP_MKMH", PU_HUDGFX);
skp_speedpatches[2] = W_CachePatchName("SP_MMPH", PU_HUDGFX);
skp_speedpatches[3] = W_CachePatchName("SP_MFRAC", PU_HUDGFX);
skp_speedpatches[4] = W_CachePatchName("SP_MPERC", PU_HUDGFX);
}
}
// For the item toggle menu
@@ -7775,6 +7866,7 @@ static void K_DrawKartPositionNum(INT32 num)
patch_t *localpatch = kp_positionnum[0][0];
//INT32 splitflags = K_calcSplitFlags(V_SNAPTOBOTTOM|V_SNAPTORIGHT);
INT32 fx = 0, fy = 0, fflags = 0;
INT32 xoffs = (cv_showinput.value) ? -48 : 0;
boolean flipdraw = false; // flip the order we draw it in for MORE splitscreen bs. fun.
boolean flipvdraw = false; // used only for 2p splitscreen so overtaking doesn't make 1P's position fly off the screen.
boolean overtake = false;
@@ -7786,13 +7878,15 @@ static void K_DrawKartPositionNum(INT32 num)
}
if (splitscreen)
scale /= 2;
if (cv_showinput.value && !splitscreen) // anuther one.
scale /= 2;
W = FixedMul(W<<FRACBITS, scale)>>FRACBITS;
// pain and suffering defined below
if (!splitscreen)
{
fx = POSI_X;
fx = POSI_X + xoffs;
fy = BASEVIDHEIGHT - 8;
fflags = V_SNAPTOBOTTOM|V_SNAPTORIGHT;
}
@@ -8202,35 +8296,60 @@ static void K_drawKartLaps(void)
static void K_drawKartSpeedometer(void)
{
fixed_t convSpeed;
// why?
if (cv_kartspeedometer.value == 0)
return;
fixed_t convSpeed = 0;
INT32 speedtype = 0;
INT32 splitflags = K_calcSplitFlags(V_SNAPTOBOTTOM|V_SNAPTOLEFT);
if (cv_kartspeedometer.value == 1) // Kilometers
switch (cv_kartspeedometer.value)
{
convSpeed = FixedDiv(FixedMul(stplyr->speed, 142371), mapobjectscale)/FRACUNIT; // 2.172409058
V_DrawKartString(SPDM_X, SPDM_Y, V_HUDTRANS|splitflags, va("%3d km/h", convSpeed));
case 1:
convSpeed = FixedDiv(FixedMul(stplyr->speed, 142371), mapobjectscale)/FRACUNIT; // 2.172409058
speedtype = 1;
break;
case 2:
convSpeed = FixedDiv(FixedMul(stplyr->speed, 142371), mapobjectscale)/FRACUNIT; // 2.172409058
speedtype = 2;
break;
case 3:
convSpeed = FixedDiv(FixedMul(stplyr->speed, 88465), mapobjectscale)/FRACUNIT; // 1.349868774
speedtype = 3;
break;
case 4:
if (stplyr->mo)
convSpeed = (FixedDiv(stplyr->speed, FixedMul(K_GetKartSpeed(stplyr, false), ORIG_FRICTION))*100)>>FRACBITS;
speedtype = 4;
break;
default:
break;
}
else if (cv_kartspeedometer.value == 2) // Miles
// man.
if ((!cv_newspeedometer.value) || (cv_newspeedometer.value && !found_extra_kart))
{
convSpeed = FixedDiv(FixedMul(stplyr->speed, 88465), mapobjectscale)/FRACUNIT; // 1.349868774
V_DrawKartString(SPDM_X, SPDM_Y, V_HUDTRANS|splitflags, va("%3d mph", convSpeed));
}
else if (cv_kartspeedometer.value == 3) // Fracunits
{
convSpeed = FixedDiv(stplyr->speed, mapobjectscale)/FRACUNIT;
V_DrawKartString(SPDM_X, SPDM_Y, V_HUDTRANS|splitflags, va("%3d fu/t", convSpeed));
}
else if (cv_kartspeedometer.value == 4) // Percent
{
// so code breaks if someone attempts to join from spectator since it sets
// their mo to NULL
// so can we just check if their mo is NULL????
if (stplyr->mo)
{
convSpeed = (FixedDiv(stplyr->speed, FixedMul(K_GetKartSpeed(stplyr, false), ORIG_FRICTION))*100)>>FRACBITS;
V_DrawKartString(SPDM_X, SPDM_Y, V_HUDTRANS|splitflags, va("%4d P", convSpeed));
switch (speedtype) {
case 1:
V_DrawKartString(SPDM_X, SPDM_Y, V_HUDTRANS|splitflags, va("%03d km/h", convSpeed));
case 2:
V_DrawKartString(SPDM_X, SPDM_Y, V_HUDTRANS|splitflags, va("%03d mph", convSpeed));
case 3:
V_DrawKartString(SPDM_X, SPDM_Y, V_HUDTRANS|splitflags, va("%03d fu/t", convSpeed));
case 4: // if extra.kart is found, use its included % symbol
if (!found_extra_kart)
V_DrawKartString(SPDM_X, SPDM_Y, V_HUDTRANS|splitflags, va("%03d P", convSpeed));
else
V_DrawKartString(SPDM_X, SPDM_Y, V_HUDTRANS|splitflags, va("%03d %%", convSpeed));
}
}
else if (cv_newspeedometer.value && found_extra_kart) { // why bother if we dont?
V_DrawScaledPatch(SPDM_X + 1, SPDM_Y + 4, V_HUDTRANS|splitflags, skp_smallsticker);
V_DrawRankNum(SPDM_X + 26, SPDM_Y + 4, V_HUDTRANS|splitflags, convSpeed, 3, NULL);
V_DrawScaledPatch(SPDM_X + 31, SPDM_Y + 4, V_HUDTRANS|splitflags, skp_speedpatches[cv_kartspeedometer.value]);
}
}
static void K_drawKartBumpersOrKarma(void)
@@ -9004,9 +9123,12 @@ static void K_drawKartFirstPerson(void)
// doesn't need to ever support 4p
static void K_drawInput(void)
{
if (!cv_showinput.value && !modeattacking) // dont bother
return;
static INT32 pn = 0;
INT32 target = 0, splitflags = (V_SNAPTOBOTTOM|V_SNAPTORIGHT);
INT32 x = BASEVIDWIDTH - 32, y = BASEVIDHEIGHT-24, offs, col;
INT32 x = BASEVIDWIDTH - 32 + cv_posi_xoffset.value, y = BASEVIDHEIGHT-24 + cv_posi_yoffset.value, offs, col;
const INT32 accent1 = splitflags|colortranslations[stplyr->skincolor][5];
const INT32 accent2 = splitflags|colortranslations[stplyr->skincolor][9];
ticcmd_t *cmd = &stplyr->cmd;
@@ -9388,6 +9510,12 @@ void K_drawKartHUD(void)
if (!stplyr->spectator && !demo.freecam) // Bottom of the screen elements, don't need in spectate mode
{
if (!(splitscreen || demo.title))
#ifdef HAVE_BLUA
if (LUA_HudEnabled(hud_position))
#endif
K_drawInput();
if (demo.title) // Draw title logo instead in demo.titles
{
INT32 x = BASEVIDWIDTH - 32, y = 128, offs;
+39 -19
View File
@@ -1694,14 +1694,29 @@ static menuitem_t OP_MonitorToggleMenu[] =
static menuitem_t OP_SaturnMenu[] =
{
{IT_HEADER, NULL, "Saturn Options", NULL, 0},
{IT_STRING | IT_CVAR, NULL, "Serverqueue waittime", &cv_connectawaittime, 30},
{IT_STRING | IT_CVAR, NULL, "Serverqueue waittime", &cv_connectawaittime, 20},
//{IT_STRING | IT_CVAR, NULL, "Addon Download Speed", &cv_downloadspeed, 55}, //no idea why you would wanna change it anyways
{IT_STRING | IT_CVAR, NULL, "Skin Select Spinning Speed", &cv_skinselectspin, 50},
{IT_STRING | IT_CVAR, NULL, "No Midnight Channel Flicker", &cv_lessflicker, 75},
{IT_SUBMENU|IT_STRING, NULL, "Player distortion...", &OP_PlayerDistortDef, 100},
{IT_SUBMENU|IT_STRING, NULL, "Hud Offsets...", &OP_HudOffsetDef, 115},
{IT_STRING | IT_CVAR, NULL, "Skin Select Spinning Speed", &cv_skinselectspin, 40},
{IT_STRING | IT_CVAR, NULL, "Input Display outside of RA", &cv_showinput, 50},
{IT_STRING | IT_CVAR, NULL, "V2-ish Speedometer", &cv_newspeedometer, 60},
{IT_STRING | IT_CVAR, NULL, "No Midnight Channel Flicker", &cv_lessflicker, 70},
{IT_SUBMENU|IT_STRING, NULL, "Player distortion...", &OP_PlayerDistortDef, 90},
{IT_SUBMENU|IT_STRING, NULL, "Hud Offsets...", &OP_HudOffsetDef, 100},
{IT_SUBMENU|IT_STRING, NULL, "Saturn Credits", &OP_SaturnCreditsDef, 155}, // uwu
{IT_SUBMENU|IT_STRING, NULL, "Saturn Credits", &OP_SaturnCreditsDef, 120}, // uwu
};
enum
{
sm_header,
sm_waittime,
sm_skinselspeed,
sm_input,
sm_speedometer,
sm_pisschannel,
sm_distortionmenu,
sm_hudoffsets,
sm_credits,
};
static menuitem_t OP_PlayerDistortMenu[] =
@@ -1745,25 +1760,27 @@ static menuitem_t OP_SaturnCreditsMenu[] =
{IT_HEADER, NULL, "Main Devs <3", NULL, 20},
{IT_STRING, NULL, "alufolie91 aka Alug", NULL, 30},
{IT_STRING, NULL, "Indev", NULL, 40},
{IT_STRING2+IT_SPACE, NULL, "alufolie91 aka Alug", NULL, 30},
{IT_STRING2+IT_SPACE, NULL, "Indev", NULL, 40},
{IT_HEADER, NULL, "Testers <3", NULL, 60},
{IT_STRING, NULL, "Sunflower aka AnimeSonic", NULL, 70},
{IT_STRING, NULL, "Yuz aka Yuzler", NULL, 80},
{IT_STRING, NULL, "Democrab", NULL, 90},
{IT_STRING, NULL, "EXpand aka Maver", NULL, 100},
{IT_STRING2+IT_SPACE, NULL, "Sunflower aka AnimeSonic", NULL, 70},
{IT_STRING2+IT_SPACE, NULL, "Yuz aka Yuzler", NULL, 80},
{IT_STRING2+IT_SPACE, NULL, "Democrab", NULL, 90},
{IT_STRING2+IT_SPACE, NULL, "EXpand aka Maver", NULL, 100},
{IT_HEADER, NULL, "Special Thanks <3", NULL, 120},
{IT_STRING, NULL, "xyzzy", NULL, 130},
{IT_STRING, NULL, "Haya", NULL, 140},
{IT_STRING, NULL, "Galactice", NULL, 150},
{IT_STRING, NULL, "Himie and", NULL, 160},
{IT_STRING, NULL, "The Moe Mansion / Birdhouse Team", NULL, 170},
{IT_STRING, NULL, "All of Sunflower's Garden", NULL, 180},
{IT_STRING2+IT_SPACE, NULL, "xyzzy", NULL, 130},
{IT_STRING2+IT_SPACE, NULL, "Haya", NULL, 140},
{IT_STRING2+IT_SPACE, NULL, "Galactice", NULL, 150},
{IT_STRING2+IT_SPACE, NULL, "Himie and", NULL, 160},
{IT_STRING2+IT_SPACE, NULL, "The Moe Mansion / Birdhouse Team", NULL, 170},
{IT_STRING2+IT_SPACE, NULL, "All of Sunflower's Garden", NULL, 180},
{IT_STRING+IT_SPACE, NULL, "", NULL, 190}, // dummy text
{IT_STRING, NULL, "", NULL, 200}, // dummy text II
};
static menuitem_t OP_BirdMenu[] =
@@ -3826,6 +3843,9 @@ void M_Init(void)
OP_VideoOptionsMenu[op_video_ogl].status = IT_DISABLED;
#endif
if (!found_extra_kart) // why bother?
OP_SaturnMenu[sm_speedometer].status = IT_GRAYEDOUT;
#ifndef NONET
CV_RegisterVar(&cv_serversort);
#endif
@@ -11050,7 +11070,7 @@ static void M_DrawJoystick(void)
compareval4 = cv_usejoystick4.value;
compareval3 = cv_usejoystick3.value;
compareval2 = cv_usejoystick2.value;
compareval = cv_usejoystick.value
compareval = cv_usejoystick.value;
#endif
if ((setupcontrolplayer == 4 && (i == compareval4))
+9
View File
@@ -23,6 +23,7 @@
// We need the WAD data structure for Map things, from the THINGS lump.
#include "doomdata.h"
#include "doomtype.h"
// States are tied to finite states are tied to animation frames.
// Needs precompiled tables/data structures.
1
@@ -394,6 +395,14 @@ typedef struct mobj_s
boolean colorized; // Whether the mobj uses the rainbow colormap
boolean rollmodel; // OpenGL: Should this model rotate?
// saltyhop! hardcode edition
boolean salty_ready;
boolean salty_tapping;
fixed_t salty_zoffset;
fixed_t salty_momz;
boolean salty_jump;
boolean init_salty;
// WARNING: New fields must be added separately to savegame and Lua.
} mobj_t;
+4 -4
View File
@@ -293,13 +293,13 @@ void R_InterpolateMobjState(mobj_t *mobj, fixed_t frac, interpmobjstate_t *out)
out->scale = mobj->resetinterp ? mobj->scale : R_LerpFixed(mobj->old_scale, mobj->scale, frac);
out->spritexscale = mobj->resetinterp ? mobj->spritexscale : R_LerpFixed(mobj->old_spritexscale, mobj->spritexscale, frac);
out->spriteyscale = mobj->resetinterp ? mobj->spriteyscale : R_LerpFixed(mobj->old_spriteyscale, mobj->spriteyscale, frac);
//out->spritexoffset = mobj->resetinterp ? mobj->spritexoffset : R_LerpFixed(mobj->old_spritexoffset, mobj->spritexoffset, frac);
//out->spriteyoffset = mobj->resetinterp ? mobj->spriteyoffset : R_LerpFixed(mobj->old_spriteyoffset, mobj->spriteyoffset, frac);
out->spritexoffset = mobj->resetinterp ? mobj->spritexoffset : R_LerpFixed(mobj->old_spritexoffset, mobj->spritexoffset, frac);
out->spriteyoffset = mobj->resetinterp ? mobj->spriteyoffset : R_LerpFixed(mobj->old_spriteyoffset, mobj->spriteyoffset, frac);
// Sprite offsets are not interpolated until we have a way to interpolate them explicitly in Lua.
// It seems existing mods visually break more often than not if it is interpolated.
out->spritexoffset = mobj->spritexoffset;
out->spriteyoffset = mobj->spriteyoffset;
//out->spritexoffset = mobj->spritexoffset;
//out->spriteyoffset = mobj->spriteyoffset;
out->subsector = R_PointInSubsector(out->x, out->y);
+22
View File
@@ -2053,6 +2053,28 @@ INT32 V_DrawPingNum(INT32 x, INT32 y, INT32 flags, INT32 num, const UINT8 *color
return x;
}
// Jaden: Draw a number using the position numbers.
//
void V_DrawRankNum(INT32 x, INT32 y, INT32 flags, INT32 num, INT32 digits, const UINT8 *colormap)
{
INT32 w = SHORT(ranknum[0]->width) - 1;
if (flags & V_NOSCALESTART)
w *= vid.dupx;
if (num < 0)
num = -num;
// draw the number
do
{
x -= (w - 1);
V_DrawFixedPatch(x << FRACBITS, y << FRACBITS, FRACUNIT, flags, ranknum[num % 10], colormap);
num /= 10;
} while (--digits);
}
// Write a string using the credit font
// NOTE: the text is centered for screens larger than the base width
//
+3
View File
@@ -212,6 +212,9 @@ INT32 V_DrawPingNum(INT32 x, INT32 y, INT32 flags, INT32 num, const UINT8 *color
INT32 V_LevelNameWidth(const char *string);
INT32 V_LevelNameHeight(const char *string);
// Rank numbers.
void V_DrawRankNum(INT32 x, INT32 y, INT32 flags, INT32 num, INT32 digits, const UINT8 *colormap);
void V_DrawCreditString(fixed_t x, fixed_t y, INT32 option, const char *string);
INT32 V_CreditStringWidth(const char *string);