From deb43343bb0e65f895503a325ff15d33feae7819 Mon Sep 17 00:00:00 2001
From: MaxED
Date: Mon, 22 Dec 2014 21:36:49 +0000
Subject: [PATCH] Visual mode: "Fit Textures" action can now fit textures
across multiple selected surfaces. A number of times to repeat a texture can
now be specified. Visual mode: removed "Fit Texture's Width" and "Fit
Texture's Height" actions. Visual mode: "Auto-align texture offsets" actions
were incorrectly aligning double-sided middle walls in some cases. Visual
mode: "Auto-align texture offsets" actions now align non-wrapped double-sided
middle walls to vertical offset closest to their initial vertical offset.
Visual mode: middle parts of double-sided walls were ignored when
Shift-selecting walls. Nodebuilders/Game configurations: GL nodes definitions
were missing from game configurations. Nodebuilders/Game configurations:
"~MAP" wildcard can now be a part of a lump name. Nodebuilders: GL nodes were
not properly handled by the editor. Main Window: the window is now moved into
the view when stored position is ouside of screen bounds. Classic and Visual
modes: changing thing pitch was ignored in some cases. Visual mode: raising
and lowering a thing with "+SPAWNCEILING" flag now works the same way as when
raising/lowering a regular thing. Visual mode: using "Raise/Lower
Floor/Ceiling to adjacent sector" actions on a thing with "+SPAWNCEILING"
flag now works the same way as when using them on a regular thing. Rendering:
even more fixes to MODELDEF and UDMF properties-related model rendering
logic. Internal, ResourceListEditor: rewritten resource validation check in a
more OOP-ish way. Configurations: fixed an infinite loop crash when a file
was trying to include() itself. UDMF thing flags: added Skill 6-8 to the
flags list (because there are thing filters for these). ZDoom_ACS.cfg: added
definitions for SetTeleFog and SwapTeleFog. ZDoom_DECORATE.cfg: added
definitions for A_SetTeleFog and A_SwapTeleFog. Updated ZDoom ACC. Updated
documentation.
---
Build/Compilers/ZDoom/zspecial.acs | 2 +
Build/Configurations/Includes/Boom_common.cfg | 9 +-
Build/Configurations/Includes/Boom_misc.cfg | 95 +-----
Build/Configurations/Includes/UDMF_misc.cfg | 27 +-
.../Configurations/Includes/ZDoom_common.cfg | 2 +
Build/Configurations/Includes/ZDoom_misc.cfg | 58 +++-
Build/Scripting/ZDoom_ACS.cfg | 2 +
Build/Scripting/ZDoom_DECORATE.cfg | 2 +
.../classic_modes/import_terrain_settings.jpg | Bin 0 -> 17240 bytes
.../classic_modes/mode_importterrain.html | 10 +-
.../gzdb/features/visual_mode/texturefit.html | 25 +-
.../gzdb/features/visual_mode/texturefit1.jpg | Bin 22203 -> 139213 bytes
.../gzdb/features/visual_mode/texturefit2.jpg | Bin 24505 -> 161111 bytes
.../gzdb/features/visual_mode/texturefit3.jpg | Bin 24337 -> 158850 bytes
.../gzdb/features/visual_mode/texturefit4.jpg | Bin 26132 -> 166749 bytes
.../gzdb/features/visual_mode/texturefit5.jpg | Bin 0 -> 189437 bytes
Source/Core/Compilers/NodesCompiler.cs | 4 +-
Source/Core/Controls/ResourceListEditor.cs | 23 +-
Source/Core/Data/DataLocation.cs | 22 ++
Source/Core/Data/DataLocationList.cs | 9 +
Source/Core/GZBuilder/Data/ModelData.cs | 27 +-
.../GZBuilder/GZDoom/ModeldefStructure.cs | 11 +-
Source/Core/GZBuilder/md3/ModelReader.cs | 12 +-
Source/Core/General/MapManager.cs | 58 ++--
Source/Core/Geometry/Tools.cs | 60 +++-
Source/Core/IO/Configuration.cs | 1 +
Source/Core/Map/Thing.cs | 5 +-
Source/Core/Rendering/Renderer2D.cs | 9 +-
Source/Core/Rendering/Renderer3D.cs | 22 +-
Source/Core/VisualModes/VisualGeometry.cs | 11 +-
Source/Core/Windows/ConfigForm.cs | 15 +-
Source/Core/Windows/MainForm.cs | 8 +-
Source/Core/ZDoom/VoxeldefParser.cs | 23 +-
.../Plugins/BuilderModes/BuilderModes.csproj | 9 +
.../BuilderModes/General/BuilderModesTools.cs | 258 +++++++++++++++--
.../Interface/FitTexturesForm.Designer.cs | 257 +++++++++++++++++
.../BuilderModes/Interface/FitTexturesForm.cs | 271 ++++++++++++++++++
.../Interface/FitTexturesForm.resx | 120 ++++++++
.../BuilderModes/Resources/Actions.cfg | 32 +--
.../Plugins/BuilderModes/Resources/Hints.cfg | 2 +-
.../VisualModes/BaseVisualGeometrySector.cs | 8 +-
.../VisualModes/BaseVisualGeometrySidedef.cs | 158 ++++++++--
.../VisualModes/BaseVisualMode.cs | 87 +++---
.../VisualModes/BaseVisualThing.cs | 9 +-
.../VisualModes/BaseVisualVertex.cs | 2 +-
.../VisualModes/IVisualEventReceiver.cs | 2 +-
.../VisualModes/NullVisualEventReceiver.cs | 2 +-
.../BuilderModes/VisualModes/VisualCeiling.cs | 3 +-
.../BuilderModes/VisualModes/VisualFloor.cs | 5 +-
.../BuilderModes/VisualModes/VisualLower.cs | 65 +----
.../VisualModes/VisualMiddle3D.cs | 3 +-
.../VisualModes/VisualMiddleBack.cs | 36 +--
.../VisualModes/VisualMiddleDouble.cs | 65 +----
.../VisualModes/VisualMiddleSingle.cs | 65 +----
.../VisualModes/VisualSidedefParts.cs | 26 +-
.../BuilderModes/VisualModes/VisualUpper.cs | 65 +----
56 files changed, 1452 insertions(+), 650 deletions(-)
create mode 100644 Help/gzdb/features/classic_modes/import_terrain_settings.jpg
create mode 100644 Help/gzdb/features/visual_mode/texturefit5.jpg
create mode 100644 Source/Plugins/BuilderModes/Interface/FitTexturesForm.Designer.cs
create mode 100644 Source/Plugins/BuilderModes/Interface/FitTexturesForm.cs
create mode 100644 Source/Plugins/BuilderModes/Interface/FitTexturesForm.resx
diff --git a/Build/Compilers/ZDoom/zspecial.acs b/Build/Compilers/ZDoom/zspecial.acs
index 10f7c0bc..e78162ca 100644
--- a/Build/Compilers/ZDoom/zspecial.acs
+++ b/Build/Compilers/ZDoom/zspecial.acs
@@ -329,6 +329,8 @@ special
-83:PickActor(5,8),
-84:IsPointerEqual(2,4),
-85:CanRaiseActor(1),
+ -86:SetActorTeleFog(3),
+ -87:SwapActorTeleFog(1),
// Zandronum's
-100:ResetMap(0),
diff --git a/Build/Configurations/Includes/Boom_common.cfg b/Build/Configurations/Includes/Boom_common.cfg
index 9a6dc413..7a0a593b 100644
--- a/Build/Configurations/Includes/Boom_common.cfg
+++ b/Build/Configurations/Includes/Boom_common.cfg
@@ -3,10 +3,11 @@ mapformat_doom
// The format interface handles the map data format
formatinterface = "DoomMapSetIO";
- maplumpnames
- {
- include("Doom_misc.cfg", "doommaplumpnames");
- }
+ maplumpnames
+ {
+ include("Doom_misc.cfg", "doommaplumpnames");
+ include("Boom_misc.cfg", "boommaplumpnames");
+ }
// When this is set to true, sectors with the same tag will light up when a line is highlighted
linetagindicatesectors = true;
diff --git a/Build/Configurations/Includes/Boom_misc.cfg b/Build/Configurations/Includes/Boom_misc.cfg
index 666f0863..d154bd74 100644
--- a/Build/Configurations/Includes/Boom_misc.cfg
+++ b/Build/Configurations/Includes/Boom_misc.cfg
@@ -35,25 +35,29 @@ thingflagstranslation
// How thing flags should be compared (for the stuck thing error check)
thingflagscompare
{
- skills {
+ skills
+ {
1;
2;
4;
}
- gamemodes {
- 16 {
- //invert = true;
+ gamemodes
+ {
+ 16
+ {
ignoredgroup = "skills";
ingnorethisgroupwhenunset = true;
}
- 32 {
+ 32
+ {
invert = true;
requiredflag = "16";
}
- 64 {
+ 64
+ {
invert = true;
requiredflag = "16";
requiredgroup = "skills";
@@ -101,85 +105,8 @@ allowempty = The nodebuilder is allowed to leave this lump empty.
script = This lump is a text-based script. Specify the filename of the script configuration to use.
*/
-doommaplumpnames
+boommaplumpnames
{
- ~MAP
- {
- required = true;
- blindcopy = true;
- nodebuild = false;
- }
-
- THINGS
- {
- required = true;
- nodebuild = true;
- allowempty = true;
- }
-
- LINEDEFS
- {
- required = true;
- nodebuild = true;
- allowempty = false;
- }
-
- SIDEDEFS
- {
- required = true;
- nodebuild = true;
- allowempty = false;
- }
-
- VERTEXES
- {
- required = true;
- nodebuild = true;
- allowempty = false;
- }
-
- SEGS
- {
- required = false;
- nodebuild = true;
- allowempty = false;
- }
-
- SSECTORS
- {
- required = false;
- nodebuild = true;
- allowempty = false;
- }
-
- NODES
- {
- required = false;
- nodebuild = true;
- allowempty = false;
- }
-
- SECTORS
- {
- required = true;
- nodebuild = true;
- allowempty = false;
- }
-
- REJECT
- {
- required = false;
- nodebuild = true;
- allowempty = false;
- }
-
- BLOCKMAP
- {
- required = false;
- nodebuild = true;
- allowempty = false;
- }
-
DEHACKED
{
required = false;
diff --git a/Build/Configurations/Includes/UDMF_misc.cfg b/Build/Configurations/Includes/UDMF_misc.cfg
index 9bf0768d..16d746dd 100644
--- a/Build/Configurations/Includes/UDMF_misc.cfg
+++ b/Build/Configurations/Includes/UDMF_misc.cfg
@@ -9,6 +9,9 @@ thingflags
skill3 = "Skill 3";
skill4 = "Skill 4";
skill5 = "Skill 5";
+ skill6 = "Skill 6";
+ skill7 = "Skill 7";
+ skill8 = "Skill 8";
ambush = "Deaf";
single = "Singleplayer";
dm = "Deathmatch";
@@ -30,6 +33,9 @@ defaultthingflags
skill3;
skill4;
skill5;
+ skill6;
+ skill7;
+ skill8;
single;
coop;
dm;
@@ -39,27 +45,36 @@ defaultthingflags
// How thing flags should be compared (for the stuck thing error check)
thingflagscompare
{
- skills {
+ skills
+ {
skill1;
skill2;
skill3;
skill4;
skill5;
+ skill6;
+ skill7;
+ skill8;
}
- gamemodes {
- single {
+ gamemodes
+ {
+ single
+ {
requiredgroup = "skills";
}
- coop {
+ coop
+ {
requiredgroup = "skills";
}
- dm {
+ dm
+ {
ignoredgroup = "skills";
}
}
- classes {
+ classes
+ {
class1;
class2;
class3;
diff --git a/Build/Configurations/Includes/ZDoom_common.cfg b/Build/Configurations/Includes/ZDoom_common.cfg
index 37f60536..d1d36311 100644
--- a/Build/Configurations/Includes/ZDoom_common.cfg
+++ b/Build/Configurations/Includes/ZDoom_common.cfg
@@ -90,6 +90,7 @@ mapformat_doom
{
include("Doom_misc.cfg", "doommaplumpnames");
include("ZDoom_misc.cfg", "doommaplumpnames");
+ include("ZDoom_misc.cfg", "glmaplumpnames");
}
// When this is set to true, sectors with the same tag will light up when a line is highlighted
@@ -203,6 +204,7 @@ mapformat_hexen
{
include("Doom_misc.cfg", "hexenmaplumpnames");
include("ZDoom_misc.cfg", "hexenmaplumpnames");
+ include("ZDoom_misc.cfg", "glmaplumpnames");
}
// When this is set to true, sectors with the same tag will light up when a line is highlighted
diff --git a/Build/Configurations/Includes/ZDoom_misc.cfg b/Build/Configurations/Includes/ZDoom_misc.cfg
index d213e3b2..8dbf0197 100644
--- a/Build/Configurations/Includes/ZDoom_misc.cfg
+++ b/Build/Configurations/Includes/ZDoom_misc.cfg
@@ -110,6 +110,9 @@ defaultthingflags_udmf
skill3;
skill4;
skill5;
+ skill6;
+ skill7;
+ skill8;
single;
coop;
dm;
@@ -123,10 +126,8 @@ defaultthingflags_udmf
// How thing flags should be compared (for the stuck thing error check)
thingflagscompare_udmf
{
- skills {
- skill6;
- skill7;
- skill8;
+ skills
+ {
skill9;
skill10;
skill11;
@@ -137,7 +138,8 @@ thingflagscompare_udmf
skill16;
}
- classes {
+ classes
+ {
class4;
class5;
class6;
@@ -403,6 +405,52 @@ scriptbuild = This lump is a text-based script, which should be compiled using c
script = This lump is a text-based script. Specify the filename of the script configuration to use.
*/
+// GL nodebuilders generate this stuff
+glmaplumpnames
+{
+ GL_~MAP
+ {
+ required = false;
+ nodebuild = true;
+ allowempty = true;
+ }
+
+ GL_VERT
+ {
+ required = false;
+ nodebuild = true;
+ allowempty = false;
+ }
+
+ GL_SEGS
+ {
+ required = false;
+ nodebuild = true;
+ allowempty = false;
+ }
+
+ GL_SSECT
+ {
+ required = false;
+ nodebuild = true;
+ allowempty = false;
+ }
+
+ GL_NODES
+ {
+ required = false;
+ nodebuild = true;
+ allowempty = false;
+ }
+
+ GL_PVS
+ {
+ required = false;
+ nodebuild = true;
+ allowempty = true;
+ }
+}
+
doommaplumpnames
{
REJECT
diff --git a/Build/Scripting/ZDoom_ACS.cfg b/Build/Scripting/ZDoom_ACS.cfg
index aa3e150b..24566beb 100644
--- a/Build/Scripting/ZDoom_ACS.cfg
+++ b/Build/Scripting/ZDoom_ACS.cfg
@@ -397,6 +397,7 @@ keywords
SetPointer = "bool SetPointer(int assign_slot, int tid[, int pointer_selector[, int flags]])\nSet the value of one of the caller's stored pointers.";
SetResultValue = "void SetResultValue(int value)";
SetSkyScrollSpeed = "void SetSkyScrollSpeed(int sky, fixed skyspeed)\nChanges the scrolling speed of a sky.\nThis is useful in conjunction with ChangeSky.\nsky: either 1 or 2.\nskyspeed: the desired scrolling speed.";
+ SetTeleFog = "void SetTeleFog(int tid, str telefogsrcclass, str telefogdestclass";
SetThingSpecial = "void SetThingSpecial(int tid, int special [, int arg0 [, int arg1 [, int arg2 [, int arg3 [, int arg4]]]]])\nSets the special for any things with the same TID.\nThis is similar to Thing_SetSpecial, except it can only be used from ACS,\nand it can set all of a thing's special arguments.\nIf tid is 0, then the activator is used.";
SetUserArray = "void SetUserArray(int tid, str name, int pos, int value)\nSets one of the affected actor's user array-bound variables.";
SetUserCVar = "bool SetUserCVar(int playernumber, str cvar, int value)\nSets the console variable of a particular player.\nOnly mod-defined console variables through CVARINFO can be changed by using this function.\nReturns FALSE if cvar is invalid, it is not writable, or the player doesn't exist.";
@@ -437,6 +438,7 @@ keywords
StrParam = "int StrParam(type:expression)\nStrParam will create a new string formatted based upon the same method for Print or Log.\nThe return value is the string table index of the new string.";
StrRight = "str StrRight(str string, int length)\nCreates a new string containing the length last characters of string.\nIf string does not exist, an empty string is returned.\nIf string is shorter than length characters, the entire string is returned.";
Suspend = "Suspend";
+ SwapTeleFog = "int SwapTeleFog(int tid)";
Switch = "Switch(expression)";
TagWait = "void TagWait(int tag)";
TakeActorInventory = "void TakeActorInventory(int tid, str inventory_item, int amount)\nThis function will take the amount of items from the specified actor.\nTakeActorInventory can remove items that are flagged as undroppable.";
diff --git a/Build/Scripting/ZDoom_DECORATE.cfg b/Build/Scripting/ZDoom_DECORATE.cfg
index 9f320c3c..15b2d011 100644
--- a/Build/Scripting/ZDoom_DECORATE.cfg
+++ b/Build/Scripting/ZDoom_DECORATE.cfg
@@ -55,6 +55,8 @@ keywords
A_RemoveTracer = "A_RemoveTracer[(int flags)]\nflags: RMVF flags.";
A_Remove = "A_Remove(int pointer, int flags)\nflags: RMVF flags.";
A_SentinelBob = "A_SentinelBob";
+ A_SetTeleFog = "A_SetTeleFog(string telefogsourceclass, string telefogdestclass)";
+ A_SwapTeleFog = "A_SwapTeleFog";
A_TurretLook = "A_TurretLook";
A_Teleport = "A_Teleport[(string teleportstate = \"Teleport\"[, string targettype = \"BossSpot\"[, string fogtype = \"TeleportFog\"[, int flags = 0[, float mindist = 0[, float maxdist = 0]]]]])]";
A_VileChase = "A_VileChase";
diff --git a/Help/gzdb/features/classic_modes/import_terrain_settings.jpg b/Help/gzdb/features/classic_modes/import_terrain_settings.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..02f82bc509e925b634b842f73b7029a891c09180
GIT binary patch
literal 17240
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
M0O)?&@UZlM0EAction category: Tools.
Default key: none.
Usage:
- Create a terrain model in your favorite 3d modeling app (Blender, Earth Sculptor or any other, which can save a model to Wavefront .obj format)
- Use File -> Import -> Wavefront .obj as Terrain action to import it as sectors. Each polygon in your model will be transformed into sector.
+ Create a terrain model in your favorite 3d modeling app (Blender, Earth Sculptor or any other, which can save or export a model to Wavefront .obj format)
+ Use File -> Import -> Wavefront .obj as Terrain action to import it as sectors. Each polygon in your model will be transformed into a sector.
+ Settings:
+ Scale: self explanatory. The default is 1.0.
+ Up axis: should be the same as vertical axis in the 3d modeling app used to create a terrain model.
+ Sloped terrain: when enabled, the mode will generate sloped terrain using floor vertex height offsets ("ZFloor") in UDMF or Vertex slope floor (1504) things. Regardless of this setting, the mode will also set each new sector's floor height to the averaged height of a polygon it was created from.
+
Limitations:
The model should be triangulated.
Polygons should not overlap each other when viewed from the top.
- UDMF only, because the mode uses vertex height offsets to create sloped floors ("zfloor" vertex field).
diff --git a/Help/gzdb/features/visual_mode/texturefit.html b/Help/gzdb/features/visual_mode/texturefit.html
index aaccae6b..3faaa5d5 100644
--- a/Help/gzdb/features/visual_mode/texturefit.html
+++ b/Help/gzdb/features/visual_mode/texturefit.html
@@ -10,20 +10,23 @@
-
"Fit Texture" actions
+ "Fit Textures" action
-
Action names: Fit Texture, Fit Texture's Width, Fit Texture's Height
+
Action name: Fit Textures.
Action category: Visual Modes.
- Default keys: Ctrl-Alt-A, Alt-A, Alt-Shift-A.
-
Example:
- Initial scaling:
-
-
After "Fit Texture's Width" action:
+ Default key: Ctrl-Alt-A.
+
This action allows you to align textures to selected surfaces in Visual mode. "Fit across connected surfaces" setting controls whether adjacent surfaces sharing the same texture are threated as a continuous surface.
+
Examples:
+ Initial setup:
+
+
Examples of various settings in action:
-
After "Fit Texture's Height" action:
-
-
After "Fit Texture" action:
-
+
+
+
+
+
+