diff --git a/Build/UDBScript/Scripts/Examples/Geometry/createlineportal.js b/Build/UDBScript/Scripts/Examples/Geometry/createlineportal.js index 135d5383..c699bf8d 100644 --- a/Build/UDBScript/Scripts/Examples/Geometry/createlineportal.js +++ b/Build/UDBScript/Scripts/Examples/Geometry/createlineportal.js @@ -77,7 +77,7 @@ let newtag = UDB.Map.getNewTag(); // Set the action, arg, and tag of both lines lines[0].action = lines[1].action = 301; // Line_QuickPortal -lines[0].args[0] = lines[1].args[0] = 0; +for(let i=0; i <= 4; i++) lines[0].args[i] = lines[1].args[i] = 0; lines[0].tag = lines[1].tag = newtag; // Draw the sectors behind the portal diff --git a/Source/Core/Data/DirectoryReader.cs b/Source/Core/Data/DirectoryReader.cs index 90c15345..ab107bab 100755 --- a/Source/Core/Data/DirectoryReader.cs +++ b/Source/Core/Data/DirectoryReader.cs @@ -358,9 +358,28 @@ namespace CodeImp.DoomBuilder.Data try { // Find in voxels directory - string path = Path.Combine(VOXELS_DIR, Path.GetDirectoryName(name)); - string filename = FindFirstFile(path, Path.GetFileName(name), true); - if((filename != null) && FileExists(filename)) + string filename = null; + + // There are different places we have to look for the file, depending on how it was defined. Right now + // there's no way to know if the definition comes from VOXELDEF or spreite replacement, so we're assuming + // it's from VOXELDEF if there's an extension given. + // - Auto-detect for sprite name: must be in the "voxels" directory + // - Just given as file name without path in VOXELDEF: must be in the root directory + // - Given as full path and file name in VOXELDEF: must be in exactly that spot + string path = Path.GetDirectoryName(name); + if (string.IsNullOrWhiteSpace(path)) + { + if (string.IsNullOrWhiteSpace(Path.GetExtension(name))) + filename = FindFirstFile(VOXELS_DIR, Path.GetFileName(name), true); + else + filename = FindFirstFileWithExt("", Path.GetFileName(name), true); + } + else + { + filename = FindFirstFileWithExt(path, Path.GetFileName(name), false); + } + + if ((filename != null) && FileExists(filename)) { voxellocation = location.GetDisplayName(); return LoadFile(filename); diff --git a/Source/Core/Data/PK3Reader.cs b/Source/Core/Data/PK3Reader.cs index 9dd0cd23..4487f850 100755 --- a/Source/Core/Data/PK3Reader.cs +++ b/Source/Core/Data/PK3Reader.cs @@ -454,14 +454,41 @@ namespace CodeImp.DoomBuilder.Data if(voxel != null) return voxel; } - string pfilename = name.Replace('\\', '^'); + name = name.Replace('\\', '^'); - // Find in sprites directory - string filename = FindFirstFile(VOXELS_DIR, pfilename, true); - if((filename != null) && FileExists(filename)) + try { - voxellocation = location.GetDisplayName(); - return LoadFile(filename); + // Find in voxels directory + string filename = null; + + // There are different places we have to look for the file, depending on how it was defined. Right now + // there's no way to know if the definition comes from VOXELDEF or spreite replacement, so we're assuming + // it's from VOXELDEF if there's an extension given. + // - Auto-detect for sprite name: must be in the "voxels" directory + // - Just given as file name without path in VOXELDEF: must be in the root directory + // - Given as full path and file name in VOXELDEF: must be in exactly that spot + string path = Path.GetDirectoryName(name); + if (string.IsNullOrWhiteSpace(path)) + { + if (string.IsNullOrWhiteSpace(Path.GetExtension(name))) + filename = FindFirstFile(VOXELS_DIR, Path.GetFileName(name), true); + else + filename = FindFirstFileWithExt("", Path.GetFileName(name), true); + } + else + { + filename = FindFirstFileWithExt(path, Path.GetFileName(name), false); + } + + if ((filename != null) && FileExists(filename)) + { + voxellocation = location.GetDisplayName(); + return LoadFile(filename); + } + } + catch (Exception e) + { + if (!Silent) General.ErrorLogger.Add(ErrorType.Error, e.GetType().Name + " while loading voxel \"" + name + "\" from PK3: " + e.Message); } // Nothing found diff --git a/Source/Core/GZBuilder/Models/ModelLoader.cs b/Source/Core/GZBuilder/Models/ModelLoader.cs index a1c4e71c..afdebea8 100644 --- a/Source/Core/GZBuilder/Models/ModelLoader.cs +++ b/Source/Core/GZBuilder/Models/ModelLoader.cs @@ -39,14 +39,16 @@ namespace CodeImp.DoomBuilder.GZBuilder.Models } } - //clear unneeded data - mde.SkinNames = null; - mde.ModelNames = null; - if (mde.Model.Meshes == null || mde.Model.Meshes.Count == 0) { - mde.Model = null; - } + mde.Model = null; + } + else + { + //clear unneeded data + mde.SkinNames = null; + mde.ModelNames = null; + } } private static void LoadModel(ModelData mde, List containers)