diff --git a/src/g_level.h b/src/g_level.h index 8a4702639..f94fefa42 100644 --- a/src/g_level.h +++ b/src/g_level.h @@ -336,6 +336,7 @@ struct level_info_t TArray specialactions; TArray PrecacheSounds; + TArray PrecacheTextures; level_info_t() { diff --git a/src/g_mapinfo.cpp b/src/g_mapinfo.cpp index 6d49b9c17..306c3645a 100644 --- a/src/g_mapinfo.cpp +++ b/src/g_mapinfo.cpp @@ -1065,6 +1065,25 @@ DEFINE_MAP_OPTION(PrecacheSounds, true) } while (parse.sc.CheckString(",")); } +DEFINE_MAP_OPTION(PrecacheTextures, true) +{ + parse.ParseAssign(); + + do + { + parse.sc.MustGetString(); + FTextureID tex = TexMan.CheckForTexture(parse.sc.String, FTexture::TEX_Wall, FTextureManager::TEXMAN_Overridable|FTextureManager::TEXMAN_TryAny|FTextureManager::TEXMAN_ReturnFirst); + if (!tex.isValid()) + { + parse.sc.ScriptMessage("Unknown texture \"%s\"", parse.sc.String); + } + else + { + info->PrecacheTextures.Push(tex); + } + } while (parse.sc.CheckString(",")); +} + DEFINE_MAP_OPTION(redirect, true) { parse.ParseAssign(); diff --git a/src/textures/texturemanager.cpp b/src/textures/texturemanager.cpp index b8256bc65..be0426e98 100644 --- a/src/textures/texturemanager.cpp +++ b/src/textures/texturemanager.cpp @@ -1243,6 +1243,12 @@ void FTextureManager::PrecacheLevel (void) memset (hitlist, 0, cnt); screen->GetHitlist(hitlist); + + for (unsigned i = 0; i < level.info->PrecacheTextures.Size(); i++) + { + hitlist[level.info->PrecacheTextures[i].GetIndex()] |= 1; + } + for (int i = cnt - 1; i >= 0; i--) { Renderer->PrecacheTexture(ByIndex(i), hitlist[i]);