-- from quake retexturing project diff --git a/Quake/gl_model.c b/Quake/gl_model.c index 239d361..80948f1 100644 --- a/Quake/gl_model.c +++ b/Quake/gl_model.c @@ -39,6 +39,8 @@ static cvar_t external_ents = {"external_ents", "1", CVAR_ARCHIVE}; static cvar_t external_vis = {"external_vis", "1", CVAR_ARCHIVE}; +extern cvar_t r_externaltexture_fix; //mk + static byte *mod_novis; static int mod_novis_capacity; @@ -549,6 +551,13 @@ static void Mod_LoadTextures (lump_t *l) { if (!common::strncasecmp(tx->name,"sky",3)) //sky texture //also note -- was Q_strncmp, changed to match qbsp { + if (r_externaltexture_fix.value) { //mk + if (strstr(tx->name,"sky4")) { + if (CRC_Block((byte *)(tx+1), tx->width * tx->height)==13039) + q_strlcpy(tx->name, "sky1", sizeof(tx->name)); + console::info(" using %s\n", tx->name); + } + } if (loadmodel->bspversion == BSPVERSION_QUAKE64) Sky_LoadTextureQ64 (loadmodel, tx); else @@ -606,6 +615,50 @@ static void Mod_LoadTextures (lump_t *l) //external textures -- first look in "textures/mapname/" then look in "textures/" mark = Hunk_LowMark (); COM_StripExtension (loadmodel->name + 5, mapname, sizeof(mapname)); + + if (r_externaltexture_fix.value) { //mk + if (strstr(tx->name,"plat_top1")) { + if (CRC_Block((byte *)(tx+1), tx->width * tx->height)==24428) + q_strlcpy(tx->name, "plat_top1_cable", sizeof(tx->name)); + else + q_strlcpy(tx->name, "plat_top1_bolt", sizeof(tx->name)); + console::info(" using %s\n", tx->name); + } + if (strstr(tx->name,"metal5_2")) { + if (CRC_Block((byte *)(tx+1), tx->width * tx->height)==49173) + q_strlcpy(tx->name, "metal5_2_x", sizeof(tx->name)); + else + q_strlcpy(tx->name, "metal5_2_arc", sizeof(tx->name)); + console::info(" using %s\n", tx->name); + } + if (strstr(tx->name,"metal5_4")) { + if (CRC_Block((byte *)(tx+1), tx->width * tx->height)==20977) + q_strlcpy(tx->name, "metal5_4_double", sizeof(tx->name)); + else + q_strlcpy(tx->name, "metal5_4_arc", sizeof(tx->name)); + console::info(" using %s\n", tx->name); + } + if (strstr(tx->name,"metal5_8")) { + if (CRC_Block((byte *)(tx+1), tx->width * tx->height)==48444) + q_strlcpy(tx->name, "metal5_8_rune", sizeof(tx->name)); + else + q_strlcpy(tx->name, "metal5_8_back", sizeof(tx->name)); + console::info(" using %s\n", tx->name); + } + if (strstr(tx->name,"metal5_8")) { + if (CRC_Block((byte *)(tx+1), tx->width * tx->height)==48444) + q_strlcpy(tx->name, "metal5_8_rune", sizeof(tx->name)); + else + q_strlcpy(tx->name, "metal5_8_back", sizeof(tx->name)); + console::info(" using %s\n", tx->name); + } + if (strstr(tx->name,"window03")) { + if (CRC_Block((byte *)(tx+1), tx->width * tx->height)==63697) // e4m2 variant + q_strlcpy(tx->name, "window03_e4m2", sizeof(tx->name)); + console::info(" using %s\n", tx->name); + } + } + q_snprintf (filename, sizeof(filename), "textures/%s/%s", mapname, tx->name); data = Image_LoadImage (filename, &fwidth, &fheight); if (!data) diff --git a/Quake/gl_rmain.c b/Quake/gl_rmain.c index 6883161..4a8a745 100644 --- a/Quake/gl_rmain.c +++ b/Quake/gl_rmain.c @@ -100,6 +100,8 @@ extern cvar_t r_vfog; //johnfitz +cvar_t r_externaltexture_fix = {"r_externaltexture_fix", "0", CVAR_ARCHIVE}; //mk + cvar_t gl_zfix = {"gl_zfix", "0", CVAR_NONE}; // QuakeSpasm z-fighting fix cvar_t r_lavaalpha = {"r_lavaalpha","0",CVAR_NONE}; diff --git a/Quake/gl_rmisc.c b/Quake/gl_rmisc.c index 963d55e..e9b251b 100644 --- a/Quake/gl_rmisc.c +++ b/Quake/gl_rmisc.c @@ -47,6 +47,7 @@ extern cvar_t r_noshadow_list; //johnfitz extern cvar_t gl_zfix; // QuakeSpasm z-fighting fix +extern cvar_t r_externaltexture_fix; //mk extern gltexture_t *playertextures[MAX_SCOREBOARD]; //johnfitz @@ -230,6 +231,7 @@ void R_Init (void) r_lavaalpha.set_callback(R_SetLavaalpha_f); r_telealpha.set_callback(R_SetTelealpha_f); r_slimealpha.set_callback(R_SetSlimealpha_f); + r_externaltexture_fix.inscribe();//mk R_InitParticles (); R_SetClearColor_f (&r_clearcolor); //johnfitz