diff --git a/src/g_level.cpp b/src/g_level.cpp index 9af836035..282298e0e 100644 --- a/src/g_level.cpp +++ b/src/g_level.cpp @@ -1386,6 +1386,7 @@ void G_DoLoadLevel(const FString &nextmapname, int position, bool autosave, bool void FLevelLocals::DoLoadLevel(const FString &nextmapname, int position, bool autosave, bool newGame) { MapName = nextmapname; + MapFName = MapName; int i; if (NextSkill >= 0) diff --git a/src/g_levellocals.h b/src/g_levellocals.h index a268fbba1..29b23c9a0 100644 --- a/src/g_levellocals.h +++ b/src/g_levellocals.h @@ -540,6 +540,7 @@ public: int lumpnum; FString LevelName; FString MapName; // the lump name (E1M1, MAP01, etc) + FName MapFName; // cache name index for lump FString NextMap; // go here when using the regular exit FString NextSecretMap; // map to go to when used secret exit FString AuthorName; diff --git a/src/r_data/gldefs.cpp b/src/r_data/gldefs.cpp index b87a9b7b4..7eb88724b 100644 --- a/src/r_data/gldefs.cpp +++ b/src/r_data/gldefs.cpp @@ -92,11 +92,10 @@ const GlobalShaderDesc * GetGlobalShader(int shaderNum, PClass * curActor, Globa } } - FName MapName = level.MapName; - shader = mapshaders[shaderNum].CheckKey(MapName); + shader = mapshaders[shaderNum].CheckKey(level.MapFName); if(shader && shader->shaderindex > 0) { - addr = {int16_t(shaderNum), 1, MapName.GetIndex()}; + addr = {int16_t(shaderNum), 1, level.MapFName.GetIndex()}; return shader; } @@ -127,7 +126,7 @@ const GlobalShaderDesc * GetGlobalShader(int shaderNum, PClass * curActor) const GlobalShaderDesc * GetGlobalShader(GlobalShaderAddr index) { - if(index.num > NUM_BUILTIN_SHADERS || index.type > 2) return &nullglobalshader; + if(index.num >= NUM_BUILTIN_SHADERS || index.type > 2) return &nullglobalshader; if(index.type == 0) return &globalshaders[index.num];