diff --git a/src/d_main.c b/src/d_main.c index 10fdd380c..34b940494 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -69,6 +69,7 @@ #include "filesrch.h" // refreshdirmenu, pathisdirectory #include "d_protocol.h" #include "m_perfstats.h" +#include "k_kart.h" #include "lua_script.h" @@ -1073,8 +1074,14 @@ static boolean AddIWAD(void) // extra graphic patches for saturn specific thingies boolean found_extra_kart; boolean found_extra2_kart; +boolean found_extra3_kart; -boolean snw_speedo; // snowy speedometer check +boolean xtra_speedo; // extra speedometer check +boolean xtra_speedo_clr; // extra speedometer colour check +boolean xtra_speedo3; // 80x 11 extra speedometer check +boolean xtra_speedo_clr3; // 80x 11 extra speedometer colour check +boolean achi_speedo; // achiiro speedometer check +boolean achi_speedo_clr; // extra speedometer colour check boolean clr_hud; // colour hud check boolean big_lap; // bigger lap counter boolean big_lap_color; // bigger lap counter but colour @@ -1088,6 +1095,7 @@ static void IdentifyVersion(void) const char *srb2waddir = NULL; found_extra_kart = false; found_extra2_kart = false; + found_extra3_kart = false; #if defined (__unix__) || defined (UNIXCOMMON) || defined (HAVE_SDL) // change to the directory where 'srb2.srb' is found @@ -1145,6 +1153,11 @@ static void IdentifyVersion(void) D_AddFile(va(pandf,srb2waddir,"extra2.kart"), startupwadfiles); found_extra2_kart = true; } + + if (FIL_ReadFileOK(va(pandf,srb2waddir,"extra3.kart"))) { + D_AddFile(va(pandf,srb2waddir,"extra3.kart"), startupwadfiles); + found_extra3_kart = true; + } #if !defined (HAVE_SDL) || defined (HAVE_MIXER) #define MUSICTEST(str) \ @@ -1435,6 +1448,11 @@ void D_SRB2Main(void) #endif //ifndef DEVELOP + // Possible value that changes depending on whether required files for speedometer are found or not + CV_PossibleValue_t speedo_cons_temp[NUMSPEEDOSTUFF] = {{1, "Default"}, {0, NULL}, {0, NULL}, {0, NULL}, {0, NULL}, {0, NULL}}; + unsigned last_speedo_i = 0; +#define PUSHSPEEDO(id, name) { ++last_speedo_i; speedo_cons_temp[last_speedo_i].value = id; speedo_cons_temp[last_speedo_i].strvalue = name; } + if (found_extra_kart || found_extra2_kart) // found the funny, add it in! { // HAYA: These are seperated for a reason lmao @@ -1443,9 +1461,25 @@ void D_SRB2Main(void) if (found_extra2_kart) mainwads++; - // now check for speedometer stuff + // now check for extra speedometer stuff if (W_CheckMultipleLumps("SP_SMSTC", "K_TRNULL", "SP_MKMH", "SP_MMPH", "SP_MFRAC", "SP_MPERC", NULL)) - snw_speedo = true; + { + xtra_speedo = true; + PUSHSPEEDO(2, "Small"); + } + + if (W_CheckMultipleLumps("SC_SMSTC", NULL)) + xtra_speedo_clr = true; + + // now check for achii speedometer stuff + if (W_CheckMultipleLumps("SP_AMSTC", "K_TRNULL", "SP_AKMH", "SP_AMPH", "SP_AFRAC", "SP_APERC", NULL)) + { + achi_speedo = true; + PUSHSPEEDO(3, "Achii"); + } + + if (W_CheckMultipleLumps("SC_AMSTC", "K_TRNULL", "SC_AKMH", "SC_AMPH", "SC_AFRAC", "SC_APERC", NULL)) + achi_speedo_clr = true; // check for bigger lap count if (W_CheckMultipleLumps("K_STLAPB", "K_STLA2B", NULL)) @@ -1453,7 +1487,7 @@ void D_SRB2Main(void) // now check for colour hud stuff if (W_CheckMultipleLumps("K_SCTIME", "K_SCTIMW", "K_SCLAPS", "K_SCLAPW", \ - "K_SCBALN", "K_SCBALW", "K_SCKARM", "K_SCTOUT", "K_ISMULC", "K_ITMULC", "K_ITBC","K_ITBCD", "K_ISBC", "K_ISBCD", NULL)) + "K_SCBALN", "K_SCBALW", "K_SCKARM", "K_SCTOUT", "K_ISMULC", "K_ITMULC", "K_ITBC", "K_ITBCD", "K_ISBC", "K_ISBCD", NULL)) clr_hud = true; // check for bigger lap count but color** its color bitch @@ -1464,8 +1498,11 @@ void D_SRB2Main(void) if (W_CheckMultipleLumps("K_KZSP1", "K_KZSP2", "K_KZSP3", "K_KZSP4", "K_KZSP5", \ "K_KZSP6", "K_KZSP7", "K_KZSP8", "K_KZSP9", "K_KZSP10", "K_KZSP11", "K_KZSP12", \ "K_KZSP13", "K_KZSP14", "K_KZSP15", "K_KZSP16", "K_KZSP17", "K_KZSP18", "K_KZSP19", \ - "K_KZSP20", "K_KZSP21", "K_KZSP22", "K_KZSP23", "K_KZSP24", "K_KZSP25", NULL)) + "K_KZSP20", "K_KZSP21", "K_KZSP22", "K_KZSP23", "K_KZSP24", "K_KZSP25", NULL)) + { kartzspeedo = true; + PUSHSPEEDO(4, "P-Meter"); + } // stat display for extended player setup if (W_CheckMultipleLumps("K_STATNB", "K_STATN1", "K_STATN2", "K_STATN3", "K_STATN4", \ @@ -1475,11 +1512,30 @@ void D_SRB2Main(void) // Nametag stuffs if (W_CheckMultipleLumps("NTLINE", "NTLINEV", "NTSP", "NTWH", NULL)) nametaggfx = true; - + if (W_CheckMultipleLumps("K_DGAU","K_DCAU","K_DGSU","K_DCSU", NULL)) driftgaugegfx = true; } + if (found_extra3_kart) + { + if (found_extra3_kart) + mainwads++; + + // 80x11 speedometer crap + if (W_CheckMultipleLumps("SP_SM3TC", NULL)) + { + xtra_speedo3 = true; + PUSHSPEEDO(5, "Extra"); + } + + if (W_CheckMultipleLumps("SC_SM3TC", NULL)) + xtra_speedo_clr3 = true; + } + +#undef PUSHSPEEDO + memcpy(speedo_cons_t, speedo_cons_temp, sizeof(speedo_cons_t)); + // // search for maps // diff --git a/src/d_main.h b/src/d_main.h index 2709dc389..23fb31619 100644 --- a/src/d_main.h +++ b/src/d_main.h @@ -27,8 +27,14 @@ extern char srb2path[256]; //Alam: SRB2's Home extern boolean found_extra_kart; // for use in k_kart.c extern boolean found_extra2_kart; // for use in k_kart.c +extern boolean found_extra3_kart; // for use in k_kart.c -extern boolean snw_speedo; // snowy speedometer check +extern boolean xtra_speedo; // extra speedometer check +extern boolean xtra_speedo_clr; // extra speedometer colour check +extern boolean xtra_speedo3; // 80x11 extra speedometer check +extern boolean xtra_speedo_clr3; // 80x11 extra speedometer colour check +extern boolean achi_speedo; // achiiro speedometer check +extern boolean achi_speedo_clr; // extra speedometer colour check extern boolean clr_hud; // colour hud check extern boolean big_lap; // bigger lap counter extern boolean big_lap_color; // bigger lap counter but colour diff --git a/src/k_kart.c b/src/k_kart.c index 082520c78..c854ed116 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -74,7 +74,7 @@ IMPL_HUD_OFFSET(stat); // Stats consvar_t cv_showstats = {"showstats", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_showinput = {"showinput", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; -static CV_PossibleValue_t speedo_cons_t[] = {{1, "Default"}, {2, "Small"}, {3, "P-Meter"}, {0, NULL}}; +CV_PossibleValue_t speedo_cons_t[NUMSPEEDOSTUFF]; consvar_t cv_newspeedometer = {"newspeedometer", "Default", CV_SAVE, speedo_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; //hardcode saltyhop mhhm @@ -6941,6 +6941,7 @@ static patch_t *kp_bumperstickerwideclr; static patch_t *kp_karmastickerclr; static patch_t *kp_timeoutstickerclr; static patch_t *skp_smallstickerclr; +static patch_t *skp_smallstickerclr3; static patch_t *kp_itemmulstickerclr[2]; static patch_t *kp_itembgclr[4]; @@ -7021,8 +7022,14 @@ static patch_t *driftgaugesmallcolor; static patch_t *kp_yougotem; static patch_t *skp_smallsticker; +static patch_t *skp_smallsticker3; static patch_t *skp_speedpatches[5]; +static patch_t *skp_smallstickerachi; +static patch_t *skp_speedpatchesachi[5]; +static patch_t *skp_smallstickerachiclr; +static patch_t *skp_speedpatchesachiclr[5]; + void K_LoadKartHUDGraphics(void) { INT32 i, j; @@ -7043,10 +7050,35 @@ void K_LoadKartHUDGraphics(void) kp_karmasticker = W_CachePatchName("K_STKARM", PU_HUDGFX); kp_splitkarmabomb = W_CachePatchName("K_SPTKRM", PU_HUDGFX); kp_timeoutsticker = W_CachePatchName("K_STTOUT", PU_HUDGFX); + + if (xtra_speedo) // 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); + } + + if (xtra_speedo3) // 80x11 patch scaled to size + { + skp_smallsticker3 = W_CachePatchName("SP_SM3TC", PU_HUDGFX); + } + + if (achi_speedo) + { + skp_smallstickerachi = W_CachePatchName("SP_AMSTC", PU_HUDGFX); + skp_speedpatchesachi[0] = W_CachePatchName("K_TRNULL", PU_HUDGFX); // lolxd + skp_speedpatchesachi[1] = W_CachePatchName("SP_AKMH", PU_HUDGFX); + skp_speedpatchesachi[2] = W_CachePatchName("SP_AMPH", PU_HUDGFX); + skp_speedpatchesachi[3] = W_CachePatchName("SP_AFRAC", PU_HUDGFX); + skp_speedpatchesachi[4] = W_CachePatchName("SP_APERC", PU_HUDGFX); + } if (big_lap){ - kp_lapstickerbig = W_CachePatchName("K_STLAPB", PU_HUDGFX); - kp_lapstickerbig2 = W_CachePatchName("K_STLA2B", PU_HUDGFX); + kp_lapstickerbig = W_CachePatchName("K_STLAPB", PU_HUDGFX); + kp_lapstickerbig2 = W_CachePatchName("K_STLA2B", PU_HUDGFX); } // Colourized hud @@ -7071,8 +7103,21 @@ void K_LoadKartHUDGraphics(void) kp_lapstickerbig2clr = W_CachePatchName("K_SCLA2B", PU_HUDGFX); } - if (snw_speedo) + if (xtra_speedo && xtra_speedo_clr) skp_smallstickerclr = W_CachePatchName("SC_SMSTC", PU_HUDGFX); + + if (xtra_speedo3 && xtra_speedo_clr3) // 80x11 patch scaled to size + skp_smallstickerclr3 = W_CachePatchName("SC_SM3TC", PU_HUDGFX); + + if (achi_speedo && achi_speedo_clr) + { + skp_smallstickerachiclr = W_CachePatchName("SC_AMSTC", PU_HUDGFX); + skp_speedpatchesachiclr[0] = W_CachePatchName("K_TRNULL", PU_HUDGFX); // lolxd + skp_speedpatchesachiclr[1] = W_CachePatchName("SC_AKMH", PU_HUDGFX); + skp_speedpatchesachiclr[2] = W_CachePatchName("SC_AMPH", PU_HUDGFX); + skp_speedpatchesachiclr[3] = W_CachePatchName("SC_AFRAC", PU_HUDGFX); + skp_speedpatchesachiclr[4] = W_CachePatchName("SC_APERC", PU_HUDGFX); + } } // KartZ speedo @@ -7347,16 +7392,6 @@ void K_LoadKartHUDGraphics(void) } kp_yougotem = (patch_t *) W_CachePatchName("YOUGOTEM", PU_HUDGFX); - - if (snw_speedo) // 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 @@ -7743,7 +7778,7 @@ static void K_drawKartStats(void) //Internal offset for speedometer if (cv_kartspeedometer.value) { - if (cv_newspeedometer.value == 2 && snw_speedo) + if ((cv_newspeedometer.value == 2 && xtra_speedo) || (cv_newspeedometer.value == 3 && achi_speedo) || (cv_newspeedometer.value == 5 && xtra_speedo3)) spdoffset = -10; else spdoffset = -14; @@ -8741,7 +8776,7 @@ static void K_drawKartSpeedometer(void) } // man. - if ((cv_newspeedometer.value == 1) || (cv_newspeedometer.value == 2 && !snw_speedo) || (cv_newspeedometer.value == 3 && !kartzspeedo)) + if ((cv_newspeedometer.value == 1) || (cv_newspeedometer.value == 2 && !xtra_speedo) || (cv_newspeedometer.value == 3 && !achi_speedo) || (cv_newspeedometer.value == 4 && !kartzspeedo) || (cv_newspeedometer.value == 5 && !xtra_speedo3)) { switch (speedtype) { case 1: @@ -8754,7 +8789,7 @@ static void K_drawKartSpeedometer(void) V_DrawKartString(SPDM_X, SPDM_Y, V_HUDTRANS|splitflags, va("%3d fu/t", convSpeed)); break; case 4: // if extra.kart is found, use its included % symbol - if (!snw_speedo) + if (!xtra_speedo) V_DrawKartString(SPDM_X, SPDM_Y, V_HUDTRANS|splitflags, va("%4d P", convSpeed)); else V_DrawKartString(SPDM_X, SPDM_Y, V_HUDTRANS|splitflags, va("%4d %%", convSpeed)); @@ -8763,25 +8798,53 @@ static void K_drawKartSpeedometer(void) break; } } - else if (cv_newspeedometer.value == 2 && snw_speedo) // why bother if we dont? + else if (cv_newspeedometer.value == 2 && xtra_speedo) // why bother if we dont? { - if (!K_UseColorHud()) - V_DrawScaledPatch(SPDM_X + 1, SPDM_Y + 4, (V_HUDTRANS|splitflags), (skp_smallsticker)); - else //Colourized hud + if (K_UseColorHud() && xtra_speedo_clr) //Colourized hud { UINT8 *colormap = R_GetTranslationColormap(TC_DEFAULT, K_GetHudColor(), GTC_CACHE); V_DrawMappedPatch(SPDM_X + 1, SPDM_Y + 4, (V_HUDTRANS|splitflags), (skp_smallstickerclr), colormap); } + else + 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]); + } + else if (cv_newspeedometer.value == 3 && achi_speedo) // why bother if we dont? + { + if (K_UseColorHud() && achi_speedo_clr) //Colourized hud + { + UINT8 *colormap = R_GetTranslationColormap(TC_DEFAULT, K_GetHudColor(), GTC_CACHE); + V_DrawMappedPatch(SPDM_X + 1, SPDM_Y + 4, (V_HUDTRANS|splitflags), (skp_smallstickerachiclr), colormap); + V_DrawRankNum(SPDM_X + 26, SPDM_Y + 4, V_HUDTRANS|splitflags, convSpeed, 3, NULL); + V_DrawMappedPatch(SPDM_X + 31, SPDM_Y + 4, V_HUDTRANS|splitflags, skp_speedpatchesachiclr[cv_kartspeedometer.value], colormap); + } + else + { + V_DrawScaledPatch(SPDM_X + 1, SPDM_Y + 4, (V_HUDTRANS|splitflags), (skp_smallstickerachi)); + 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_speedpatchesachi[cv_kartspeedometer.value]); + } + } + else if (cv_newspeedometer.value == 5 && xtra_speedo3) // why bother if we dont? + { + if (K_UseColorHud() && xtra_speedo_clr3) //Colourized hud + { + UINT8 *colormap = R_GetTranslationColormap(TC_DEFAULT, K_GetHudColor(), GTC_CACHE); + V_DrawStretchyFixedPatch((SPDM_X-1)<speed, mapobjectscale)/FRACUNIT; diff --git a/src/k_kart.h b/src/k_kart.h index a486f8cf2..66307aa8a 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -32,6 +32,9 @@ extern consvar_t cv_stat_xoffset; extern consvar_t cv_stat_yoffset; extern consvar_t cv_showstats; +#define NUMSPEEDOSTUFF 6 +extern CV_PossibleValue_t speedo_cons_t[NUMSPEEDOSTUFF]; + boolean K_IsPlayerLosing(player_t *player); boolean K_IsPlayerWanted(player_t *player); void K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce, boolean solid); diff --git a/src/m_menu.c b/src/m_menu.c index 36ba581f1..d12c95867 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -4498,14 +4498,15 @@ void M_Init(void) } #endif - if (!snw_speedo && !kartzspeedo) // why bother? + if (!xtra_speedo && !kartzspeedo && !achi_speedo) // why bother? OP_SaturnMenu[sm_speedometer].status = IT_GRAYEDOUT; - if (!snw_speedo && kartzspeedo) - OP_SaturnMenu[sm_speedometer].text = "Speedometer (No Small)"; + //if (!xtra_speedo && kartzspeedo) + //OP_SaturnMenu[sm_speedometer].text = "Speedometer (No Small)"; - if (snw_speedo && !kartzspeedo) - OP_SaturnMenu[sm_speedometer].text = "Speedometer (No PMeter)"; + //if (xtra_speedo && !kartzspeedo) + //OP_SaturnMenu[sm_speedometer].text = "Speedometer (No PMeter)"; + // idk i dont wanna bother with this tbh lmao if (!clr_hud){ // uhguauhauguuhee OP_SaturnMenu[sm_colorhud].status = IT_GRAYEDOUT;