diff --git a/src/d_main.c b/src/d_main.c index 66ad22211..5467ba655 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -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 // diff --git a/src/d_main.h b/src/d_main.h index af74e7a69..b64d672de 100644 --- a/src/d_main.h +++ b/src/d_main.h @@ -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; diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 859e396b7..acd8b6300 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -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); diff --git a/src/g_game.h b/src/g_game.h index c99404a35..f9d160e7f 100644 --- a/src/g_game.h +++ b/src/g_game.h @@ -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; diff --git a/src/hu_stuff.c b/src/hu_stuff.c index 3d5017961..dc52dfe7f 100644 --- a/src/hu_stuff.c +++ b/src/hu_stuff.c @@ -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 diff --git a/src/hu_stuff.h b/src/hu_stuff.h index 9979427cf..eb2461146 100644 --- a/src/hu_stuff.h +++ b/src/hu_stuff.h @@ -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; diff --git a/src/k_kart.c b/src/k_kart.c index 1f62f7c72..bcea0b0f4 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -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; // 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; diff --git a/src/m_menu.c b/src/m_menu.c index a68d11b52..668052e39 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -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)) diff --git a/src/p_mobj.h b/src/p_mobj.h index 872c9dd5e..5b7b02a88 100644 --- a/src/p_mobj.h +++ b/src/p_mobj.h @@ -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. @@ -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; diff --git a/src/r_fps.c b/src/r_fps.c index ce7d08a7a..67865d016 100644 --- a/src/r_fps.c +++ b/src/r_fps.c @@ -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); diff --git a/src/v_video.c b/src/v_video.c index 0b5231c02..91c47c3c4 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -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 // diff --git a/src/v_video.h b/src/v_video.h index f8024c8a2..8593f9f77 100644 --- a/src/v_video.h +++ b/src/v_video.h @@ -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);