From 806a71fec28a5d330c9b49c128b9596f16cfb678 Mon Sep 17 00:00:00 2001
From: MaxED <j.maxed@gmail.com>
Date: Mon, 27 Apr 2015 14:56:25 +0000
Subject: [PATCH] Game configurations, Strife: added sprites and proper heights
 to all strife things. Game configurations, Strife, Doom map format: several
 thing flags were named incorrectly. Game configurations, Strife, Doom map
 format: several linedef flags were listed as "Unknown". Edit Selection mode:
 15-degree rotation steps require more precision...

---
 Build/Configurations/GZDoom_StrifeDoom.cfg    |    1 +
 Build/Configurations/Includes/Game_Strife.cfg |    8 +-
 Build/Configurations/Includes/Strife_misc.cfg |  114 +-
 .../Configurations/Includes/Strife_things.cfg | 1170 ++++++++++++++---
 Build/Configurations/ZDoom_StrifeDoom.cfg     |    1 +
 Build/Configurations/Zandronum_StrifeDoom.cfg |    1 +
 .../ClassicModes/EditSelectionMode.cs         |    2 +-
 7 files changed, 1079 insertions(+), 218 deletions(-)

diff --git a/Build/Configurations/GZDoom_StrifeDoom.cfg b/Build/Configurations/GZDoom_StrifeDoom.cfg
index fe6317877..9b6d311b3 100644
--- a/Build/Configurations/GZDoom_StrifeDoom.cfg
+++ b/Build/Configurations/GZDoom_StrifeDoom.cfg
@@ -25,6 +25,7 @@ include("Includes\\ZDoom_common.cfg", "common");
 
 // Settings common to Doom map format
 include("Includes\\ZDoom_common.cfg", "mapformat_doom");
+include("Includes\\Strife_misc.cfg", "mapformat_doom");
 
 // Settings common to Strife games
 include("Includes\\Game_Strife.cfg");
diff --git a/Build/Configurations/Includes/Game_Strife.cfg b/Build/Configurations/Includes/Game_Strife.cfg
index 5fccb6740..952423389 100644
--- a/Build/Configurations/Includes/Game_Strife.cfg
+++ b/Build/Configurations/Includes/Game_Strife.cfg
@@ -14,13 +14,7 @@
 
   // Door making
   makedoortrack = "DORTRK01";
-
-  // Default thing filters
-  // (these are not required, just useful for new users)
-  /*thingsfilters
-  {
-    include("Strife_misc.cfg", "thingsfilters");
-  }*/
+  makedoordoor = "DORML01";
 
   // Default texture sets
   // (these are not required, but useful for new users)
diff --git a/Build/Configurations/Includes/Strife_misc.cfg b/Build/Configurations/Includes/Strife_misc.cfg
index 17af25c81..57e7f17f5 100644
--- a/Build/Configurations/Includes/Strife_misc.cfg
+++ b/Build/Configurations/Includes/Strife_misc.cfg
@@ -10,72 +10,72 @@ skills
 	5 = "Bloodbath";
 }
 
-
-linedefflags
-{
-	512 = "Unknown (512)";
-	1024 = "Unknown (1024)";
-	2048 = "Unknown (2048)";
-	4096 = "Translucent";
-}
-
-
-linedefflagstranslation
-{
-	// TODO: Add 512, 1024 and 2048 when known
-	4096 = "translucent";
-}
-
-
-thingflags
+//mxd. These settings are valid only in native strife map format
+mapformat_doom
 {
-	1 = "Easy";
-	2 = "Medium";
-	4 = "Hard";
-	8 = "Standing";
-	16 = "Multiplayer";
-	32 = "Unknown (32)";
-	64 = "Ally";
-	128 = "Unknown (128)";
-	256 = "Translucent";
-	512 = "Modify visibility";
-}
 
+	linedefflags
+	{
+		512 = "Jump over railing";
+		1024 = "Block floating monsters";
+		2048 = "Translucent (75% opacity)";
+		4096 = "Translucent (25% opacity)";
+	}
 
-// Thing flags UDMF translation table
-// This is needed for copy/paste and prefabs to work properly
-// When the UDMF field name is prefixed with ! it is inverted
-thingflagstranslation
-{
-	1 = "skill1,skill2";
-	2 = "skill3";
-	4 = "skill4,skill5";
-	8 = "standing";
-	16 = "!single";
-	64 = "strifeally";
-	256 = "translucent";
-	512 = "invisible";
-}
+	linedefflagstranslation
+	{
+		512 = "jumpover";
+		1024 = "blockfloating";
+		2048 = "translucent";
+		4096 = "transparent";
+	}
 
+	thingflags
+	{
+		1 = "Easy";
+		2 = "Medium";
+		4 = "Hard";
+		8 = "Standing";
+		16 = "Multiplayer only";
+		32 = "Ambush";
+		64 = "Ally";
+		256 = "Translucent (25%)";
+		512 = "Invisible";
+	}
 
-// Mask for the thing flags which indicates the options
-// that make the same thing appear in the same modes
-thingflagsmasks
-{
-	thingflagsmask1 = 7;	// 1 + 2 + 4
-	thingflagsmask2 = 0;
-}
+	// Thing flags UDMF translation table
+	// This is needed for copy/paste and prefabs to work properly
+	// When the UDMF field name is prefixed with ! it is inverted
+	thingflagstranslation
+	{
+		1 = "skill1,skill2";
+		2 = "skill3";
+		4 = "skill4,skill5";
+		8 = "standing";
+		16 = "!single";
+		32 = "ambush";
+		64 = "strifeally";
+		256 = "translucent";
+		512 = "invisible";
+	}
 
+	// Mask for the thing flags which indicates the options
+	// that make the same thing appear in the same modes
+	thingflagsmasks
+	{
+		thingflagsmask1 = 7;	// 1 + 2 + 4
+		thingflagsmask2 = 0;
+	}
 
-// Default flags for first new thing
-defaultthingflags
-{
-	1;
-	2;
-	4;
+	// Default flags for first new thing
+	defaultthingflags
+	{
+		1;
+		2;
+		4;
+	}
 }
 
-
 // Default thing filters
 // (these are not required, just useful for new users)
 thingsfilters
diff --git a/Build/Configurations/Includes/Strife_things.cfg b/Build/Configurations/Includes/Strife_things.cfg
index 1f81b03fc..3720e333e 100644
--- a/Build/Configurations/Includes/Strife_things.cfg
+++ b/Build/Configurations/Includes/Strife_things.cfg
@@ -3,18 +3,25 @@ players
 	color = 10;	// Light Green
 	arrow = 1;
 	title = "Player Starts";
+	sprite = "PLAYA2";
 	width = 18;
+	height = 56;
 	sort = 1;
 	
-	1 = "Player 1 Tan start";
-	2 = "Player 2 Red start";
-	3 = "Player 3 Rust start";
-	4 = "Player 4 Gray start";
-	5 = "Player 5 DGreen start";
-	6 = "Player 6 Gold start";
-	7 = "Player 7 BGreen start";
-	8 = "Player 8 Blue start";
-	11 = "Player Deathmatch start";
+	1 = "Player 1 start";
+	2 = "Player 2 start";
+	3 = "Player 3 start";
+	4 = "Player 4 start";
+	5 = "Player 5 start";
+	6 = "Player 6 start";
+	7 = "Player 7 start";
+	8 = "Player 8 start";
+	
+	11
+	{
+		title = "Player Deathmatch start";
+		sprite = "PLAYF1";
+	}
 }
 
 teleports
@@ -22,6 +29,7 @@ teleports
 	color = 2;	// Green
 	arrow = 1;
 	title = "Teleports";
+	sprite = "internal:Teleport";
 	width = 18;
 	sort = 1;
 	
@@ -51,88 +59,206 @@ monsters
 	width = 24;
 	sort = 1;
 	
-	3002 = "Acolyte 1 Tan";
-	142 = "Acolyte 2 Red";
-	143 = "Acolyte 3 Rust";
-	146 = "Acolyte 4 Gray";
-	147 = "Acolyte 5 Dark Green";
-	148 = "Acolyte 6 Gold";
-	232 = "Acolyte 7 Bright Green";
-	231 = "Acolyte 8 Blue";
-	58 = "Shadow Acolyte";
+	3002
+	{
+		title = "Acolyte (tan)";
+		sprite = "AGRDA2";
+		height = 64;
+	}
+	
+	142
+	{
+		title = "Acolyte (red)";
+		sprite = "AGRDA2";
+		height = 64;
+	}
+	
+	143
+	{
+		title = "Acolyte (rust)";
+		sprite = "AGRDA2";
+		height = 64;
+	}
+	
+	146
+	{
+		title = "Acolyte (gray)";
+		sprite = "AGRDA2";
+		height = 64;
+	}
+	
+	147
+	{
+		title = "Acolyte (dark green)";
+		sprite = "AGRDA2";
+		height = 64;
+	}
+	
+	148
+	{
+		title = "Acolyte (gold)";
+		sprite = "AGRDA2";
+		height = 64;
+	}
+	
+	232
+	{
+		title = "Acolyte (bright green)";
+		sprite = "AGRDA2";
+		height = 64;
+	}
+	
+	231
+	{
+		title = "Acolyte (blue)";
+		sprite = "AGRDA2";
+		height = 64;
+	}
+	
+	58
+	{
+		title = "Acolyte (shadow armor)";
+		sprite = "AGRDA2";
+		height = 64;
+	}
+	
 	3006
 	{
 		title = "Sentinel";
+		sprite = "SEWRA8A2";
 		width = 23;
+		height = 53;
 	}
+	
 	186
 	{
 		title = "Stalker";
+		sprite = "SPIDJ2";
 		width = 31;
+		height = 25;
 	}
+	
 	27
 	{
 		title = "Ceiling Turret";
+		sprite = "TURTA8A2";
 		width = 20;
+		height = 20;
+		hangs = 1;
+		blocking = 0;
 	}
+	
 	3001
 	{
 		title = "Reaver";
+		sprite = "ROB1C2";
 		width = 20;
+		height = 60;
 	}
+	
 	3005
 	{
 		title = "Crusader";
+		sprite = "ROB2A2";
 		width = 40;
+		height = 56;
 	}
+	
 	3003
 	{
 		title = "Templar";
+		sprite = "PGRDE2";
 		width = 20;
+		height = 60;
 	}
+	
 	16
 	{
 		title = "Inquisitor";
+		sprite = "ROB3A2";
 		width = 40;
+		height = 110;
 	}
+	
 	71
 	{
 		title = "Programmer";
+		sprite = "PRGRD0";
 		width = 45;
+		height = 60;
 	}
+	
 	187
 	{
 		title = "Bishop";
+		sprite = "MLDRF2";
 		width = 40;
+		height = 56;
 	}
+	
 	12
 	{
 		title = "Loremaster";
+		sprite = "PRSTB2";
 		width = 15;
+		height = 56;
 	}
+	
 	129
 	{
 		title = "Specter A";
+		sprite = "ALN1K0";
 		width = 64;
+		height = 64;
 	}
-	75 = "Specter B";
-	76 = "Specter C - put with Oracle";
-	167 = "Specter D";
-	168 = "Specter E";
-	26
+
+	75
 	{
-		title = "Entity Nest";
-		width = 84;
+		title = "Specter B";
+		sprite = "ALN1J0";
+		width = 24;
+		height = 64;
 	}
-	198
+	
+	76
 	{
-		title = "Entity Pod";
-		width = 25;
+		title = "Specter C - put with Oracle";
+		sprite = "ALN1I0";
+		width = 24;
+		height = 64;
+		hangs = 1;
+	}
+	
+	167
+	{
+		title = "Specter D";
+		sprite = "ALN1H0";
+		width = 24;
+		height = 64;
+	}
+	
+	168
+	{
+		title = "Specter E";
+		sprite = "ALN1G0";
+		width = 24;
+		height = 64;
 	}
+	
 	128
 	{
 		title = "Entity";
+		sprite = "MNALH0";
 		width = 130;
+		height = 200;
+	}
+	
+	85
+	{
+		title = "Rat Buddy";
+		sprite = "RATTA2A8";
+		width = 10;
+		height = 16;
 	}
 }
 
@@ -144,23 +270,77 @@ weapons
 	width = 20;
 	sort = 1;
 	
-	10
+	2001
 	{
-		title = "Teleport Beacon";
-		width = 16;
+		title = "Crossbow";
+		sprite = "CBOWA0";
+	}
+	
+	2002
+	{
+		title = "Assault Gun";
+		sprite = "RIFLA0";
+	}
+	
+	2006
+	{
+		title = "Assault Gun (standing)";
+		sprite = "RIFLB0";
+	}
+	
+	2003
+	{
+		title = "Mini-Missile Launcher";
+		sprite = "MMSLA0";
+	}
+	
+	154
+	{
+		title = "Grenade Launcher";
+		sprite = "GRNDA0";
+	}
+	
+	2005
+	{
+		title = "Flame Thrower";
+		sprite = "FLAMA0";
+	}
+	
+	2004
+	{
+		title = "Mauler";
+		sprite = "TRPDA0";
+	}
+	
+	77
+	{
+		title = "Sigil A (lightning strike)";
+		sprite = "SIGLA0";
+	}
+	
+	78
+	{
+		title = "Sigil B (rail lightning shot)";
+		sprite = "SIGLB0";
+	}
+	
+	79
+	{
+		title = "Sigil C (spread shot)";
+		sprite = "SIGLC0";
+	}
+	
+	80
+	{
+		title = "Sigil D (column shot)";
+		sprite = "SIGLD0";
+	}
+	
+	81
+	{
+		title = "Sigil E (big blast)";
+		sprite = "SIGLE0";
 	}
-	2001 = "Crossbow";
-	2002 = "Assault Gun";
-	2006 = "Assault Gun standing";
-	2003 = "Mini-Missile Launcher";
-	154 = "Grenade Launcher";
-	2005 = "Flame Thrower";
-	2004 = "Mauler";
-	77 = "Sigil A lightning strike";
-	78 = "Sigil B rail lightning shot";
-	79 = "Sigil C spread shot";
-	80 = "Sigil D column shot";
-	81 = "Sigil E big blast";
 }
 
 ammunition
@@ -171,18 +351,73 @@ ammunition
 	width = 20;
 	sort = 1;
 	
-	183 = "Ammo Satchel";
-	114 = "Electric Bolts";
-	115 = "Poison Arrows";
-	2007 = "Bullet Clip";
-	2048 = "Box of Bullets";
-	2010 = "Missiles";
-	2046 = "Crate of Missiles";
-	152 = "HE Grenades";
-	153 = "Phosphorous Grenades";
-	84 = "Gas Grenade (demo exe only)";
-	2047 = "Energy Pod";
-	17 = "Energy Pack";
+	183
+	{
+		title = "Ammo Satchel";
+		sprite = "BKPKA0";
+	}
+	
+	114
+	{
+		title = "Electric Bolts";
+		sprite = "XQRLA0";
+	}
+	
+	115
+	{
+		title = "Poison Arrows";
+		sprite = "PQRLA0";
+	}
+	
+	2007
+	{
+		title = "Bullet Clip";
+		sprite = "BLITA0";
+	}
+	
+	2048
+	{
+		title = "Box of Bullets";
+		sprite = "BBOXA0";
+	}
+	
+	2010
+	{
+		title = "Mini Missiles";
+		sprite = "MSSLA0";
+	}
+	
+	2046
+	{
+		title = "Crate of Missiles";
+		sprite = "ROKTA0";
+	}
+	
+	152
+	{
+		title = "HE-Grenade Rounds";
+		sprite = "GRN1A0";
+	}
+	
+	153
+	{
+		title = "Phoshorus-Grenade Rounds";
+		sprite = "GRN2A0";
+	}
+	
+	84 = "Gas-Grenade Rounds (demo only)";
+	
+	2047
+	{
+		title = "Energy Pod";
+		sprite = "BRY1A0";
+	}
+	
+	17
+	{
+		title = "Energy Pack";
+		sprite = "CPACA0";
+	}
 }
 
 health
@@ -193,11 +428,35 @@ health
 	width = 20;
 	sort = 1;
 	
-	2011 = "Med patch";
-	2012 = "Medikit";
-	2018 = "Leather Armor";
-	2019 = "Leather Armor";
-	83 = "Surgery Kit";
+	2011
+	{
+		title = "Med Patch";
+		sprite = "STMPA0";
+	}
+	
+	2012
+	{
+		title = "Medical Kit";
+		sprite = "MDKTA0";
+	}
+	
+	2018
+	{
+		title = "Leather Armor";
+		sprite = "ARM2A0";
+	}
+	
+	2019
+	{
+		title = "Metal Armor";
+		sprite = "ARM1A0";
+	}
+	
+	83
+	{
+		title = "Surgery Kit";
+		sprite = "FULLA0";
+	}
 }
 
 powerups
@@ -209,11 +468,43 @@ powerups
 	height = 20;
 	sort = 1;
 	
-	2024 = "Shadow Armor";
-	2025 = "Environmental Suit";
-	207 = "Targeter";
-	2026 = "Map";
-	2027 = "Scanner/Map-Radar";
+	2024
+	{
+		title = "Shadow Armor";
+		sprite = "SHD1A0";
+	}
+	
+	2025
+	{
+		title = "Environmental Suit";
+		sprite = "MASKA0";
+	}
+	
+	207
+	{
+		title = "Targeter";
+		sprite = "TARGA0";
+	}
+	
+	2026
+	{
+		title = "Map";
+		sprite = "PMAPA0";
+	}
+	
+	2027
+	{
+		title = "Scanner/Map-Radar";
+		sprite = "PMUPA0";
+	}
+	
+	10
+	{
+		title = "Teleport Beacon";
+		sprite = "BEACA0";
+		width = 16;
+		height = 16;
+	}
 }
 
 quests
@@ -224,34 +515,86 @@ quests
 	width = 20;
 	sort = 1;
 	
-	45 = "Gates (Piston)";
+	45
+	{
+		title = "Gates (Piston)";
+		sprite = "PSTNA0";
+		height = 76;
+	}
+	
 	182
 	{
 		title = "Computer";
+		sprite = "SECRA0";
 		width = 26;
+		height = 128;
 	}
+	
 	220
 	{
 		title = "Power Coupling (Only 1)";
+		sprite = "COUPA0";
 		width = 17;
+		height = 64;
 	}
+	
 	226
 	{
 		title = "Broken Power Coupling (Only 1)";
+		sprite = "COUPC0";
 		width = 16;
+		height = 16;
 	}
+	
 	205
 	{
 		title = "Offering Chalice";
+		sprite = "RELCA0";
 		width = 10;
+		height = 16;
+	}
+	
+	90
+	{
+		title = "Guard Uniform (gives token)";
+		sprite = "UNIFA0";
+	}
+	
+	52
+	{
+		title = "Officer's Uniform (no alarm)";
+		sprite = "OFICA0";
+	}
+	
+	206
+	{
+		title = "Communicator";
+		sprite = "COMMA0";
+	}
+	
+	93
+	{
+		title = "Coin";
+		sprite = "COINA0";
+	}
+	
+	138
+	{
+		title = "10 Gold";
+		sprite = "CREDA0";
+	}
+	
+	139
+	{
+		title = "25 Gold";
+		sprite = "SACKA0";
+	}
+	
+	140
+	{
+		title = "50 Gold";
+		sprite = "CHSTA0";
 	}
-	90 = "Guard Uniform-gives token";
-	52 = "Officer Uniform-no alarm";
-	206 = "Communicator";
-	93 = "Gold Coin";
-	138 = "10 Gold";
-	139 = "25 Gold";
-	140 = "50 Gold";
 }
 
 keys
@@ -262,24 +605,113 @@ keys
 	width = 20;
 	sort = 1;
 	
-	13 = "Gold ID Badge";
-	184 = "Blue ID Card";
-	185 = "Travel Passcard";
-	39 = "Brass Key";
-	38 = "Silver Key";
-	40 = "Gold Key";
-	195 = "Chapel Key";
-	230 = "Base Key (Front)";
-	233 = "Mauler Key";
-	234 = "Factory Key";
-	236 = "Core Key";
-	235 = "Mine Key";
-	86 = "Order Key";
-	166 = "Warehouse Key";
-	91 = "Severed Hand";
-	61 = "Oracle Key";
-	192 = "Red Crystal Key";
-	193 = "Blue Crystal Key";
+	13
+	{
+		title = "ID Card";
+		sprite = "CRD2A0";
+	}
+	
+	184
+	{
+		title = "ID Badge";
+		sprite = "CRD1A0";
+	}
+	
+	185
+	{
+		title = "Passcard";
+		sprite = "TPASA0";
+	}
+	
+	39
+	{
+		title = "Brass Key";
+		sprite = "KY3BA0";
+	}
+	
+	38
+	{
+		title = "Silver Key";
+		sprite = "KY2SA0";
+	}
+	
+	40
+	{
+		title = "Gold Key";
+		sprite = "KY1GA0";
+	}
+	
+	195
+	{
+		title = "Chapel Key";
+		sprite = "CHAPA0";
+	}
+	
+	230
+	{
+		title = "Base Key (Front)";
+		sprite = "FUSLA0";
+	}
+	
+	233
+	{
+		title = "Mauler Key";
+		sprite = "BLTKA0";
+	}
+	
+	234
+	{
+		title = "Factory Key";
+		sprite = "PROCA0";
+	}
+	
+	236
+	{
+		title = "Core Key";
+		sprite = "GOIDA0";
+	}
+	
+	235
+	{
+		title = "Mine Key";
+		sprite = "MINEA0";
+	}
+	
+	86
+	{
+		title = "Order Key";
+		sprite = "FUBRA0";
+	}
+	
+	166
+	{
+		title = "Warehouse Key";
+		sprite = "WAREA0";
+	}
+	
+	91
+	{
+		title = "Severed Hand";
+		sprite = "HANDA0";
+	}
+	
+	61
+	{
+		title = "Oracle Key";
+		sprite = "ORACA0";
+	}
+	
+	192
+	{
+		title = "Red Crystal Key";
+		sprite = "RCRYA0";
+	}
+	
+	193
+	{
+		title = "Blue Crystal Key";
+		sprite = "BCRYA0";
+	}
 }
 
 lights
@@ -290,98 +722,170 @@ lights
 	width = 20;
 	sort = 1;
 	
-	24 = "Claxon warning light";
+	24
+	{
+		title = "Claxon warning light";
+		sprite = "KLAXA0";
+		width = 5;
+		hangs = 1;
+	}
+	
 	70
 	{
 		title = "Burning Barrel";
+		sprite = "BARLA0";
 		width = 16;
+		height = 48;
+	}
+	
+	28
+	{
+		title = "Cage Light";
+		sprite = "CAGEA0";
+		height = 3;
+		hangs = 1;
 	}
-	28 = "Cage Light";
-	34 = "Candle";
+	
+	34
+	{
+		title = "Candle";
+		sprite = "CNDLA0";
+	}
+	
 	35
 	{
 		title = "Candelabra";
+		sprite = "CLBRA0";
 		width = 16;
+		height = 40;
 	}
+	
 	43
 	{
 		title = "Outside Lamp";
+		sprite = "LAMPA0";
 		width = 3;
+		height = 80;
 	}
+	
 	46
 	{
 		title = "Pole Lantern";
+		sprite = "LANTA0";
 		width = 3;
+		height = 80;
 	}
+	
 	107
 	{
 		title = "Small Burning Torch";
-		width = 0;
+		sprite = "TRCHA0";
+		width = 3;
+		height = 16;
 	}
+	
 	108
 	{
 		title = "Small Unlit Torch";
-		width = 0;
+		sprite = "TRHOA0";
+		width = 3;
+		height = 16;
 	}
+	
 	111
 	{
 		title = "Medium Torch";
+		sprite = "LTRHA0";
 		width = 4;
+		height = 72;
 	}
+	
 	47
 	{
 		title = "Large Torch";
+		sprite = "LMPCA0";
 		width = 10;
+		height = 72;
 	}
+	
 	50
 	{
 		title = "Huge Torch";
+		sprite = "LOGSA0";
 		width = 10;
+		height = 80;
 	}
+	
 	95
 	{
 		title = "Silver Flourescent Light";
-		width = 4;
+		sprite = "LITSA0";
+		width = 3;
+		height = 16;
 	}
+	
 	96
 	{
 		title = "Brass Flourescent Light";
-		width = 4;
+		sprite = "LITBA0";
+		width = 3;
+		height = 16;
 	}
+	
 	97
 	{
 		title = "Gold Flourescent Light";
-		width = 4;
+		sprite = "LITGA0";
+		width = 3;
+		height = 16;
 	}
+	
 	105
 	{
 		title = "Burning Bowl";
+		sprite = "BOWLA0";
 		width = 16;
+		height = 16;
 	}
+	
 	106
 	{
 		title = "Burning Brazier";
+		sprite = "BRAZA0";
 		width = 10;
+		height = 32;
 	}
+	
 	196
 	{
 		title = "Silver Tech Lamp";
+		sprite = "TLMPA0";
 		width = 11;
+		height = 64;
 	}
+	
 	197
 	{
 		title = "Brass Tech Lamp";
+		sprite = "TLMPB0";
 		width = 8;
+		height = 64;
 	}
+	
 	2028
 	{
-		title = "Globe Light";
+		title = "Light Globe";
+		sprite = "LITEA0";
 		width = 16;
+		height = 16;
 	}
+	
 	225
 	{
 		title = "Alien Spider Light";
+		sprite = "SPDLA0";
 		width = 32;
+		height = 56;
 	}
 }
 
@@ -396,66 +900,172 @@ decoration
 	216
 	{
 		title = "Sigil Banner";
+		sprite = "SBANA1";
 		width = 24;
+		height = 96;
 	}
-	85
-	{
-		title = "Rat";
-		width = 10;
-	}
+
 	82
 	{
 		title = "Wooden Barrel";
+		sprite = "BARWA0";
 		width = 10;
+		height = 32;
+	}
+	
+	117
+	{
+		title = "Surgery Crab";
+		sprite = "CRABA0";
+		height = 16;
 	}
-	117 = "Surgery Crab";
+	
 	68
 	{
 		title = "Tray";
+		sprite = "TRAYA0";
 		width = 24;
+		height = 40;
+	}
+	
+	217
+	{
+		title = "Rebel Boots";
+		sprite = "BOTRA0";
 	}
-	217 = "Rebel Boots";
-	218 = "Rebel Helmet";
-	219 = "Rebel Shirt";
+	
+	218
+	{
+		title = "Rebel Helmet";
+		sprite = "HATRA0";
+	}
+	
+	219
+	{
+		title = "Rebel Shirt";
+		sprite = "TOPRA0";
+	}
+	
 	208
 	{
 		title = "Practice Target";
+		sprite = "HOGNA0";
 		width = 10;
+		height = 72;
 	}
+	
 	194
 	{
 		title = "Anvil";
+		sprite = "ANVLA0";
 		width = 16;
+		height = 32;
 	}
+	
 	228
 	{
 		title = "Ammo Filler";
+		sprite = "AFEDA0";
 		width = 12;
+		height = 24;
 	}
-	109 = "Ceiling Chain";
-	112 = "Fountain";
-	53 = "Ceiling Water Drip";
-	103 = "Floor Water Drip";
-	104 = "Waterfall Splash";
-	164 = "Mug";
-	2014 = "Water Bottle";
+	
+	109
+	{
+		title = "Ceiling Chain";
+		sprite = "CHANA0";
+		height = 93;
+		hangs = 1;
+	}
+	
+	112
+	{
+		title = "Fountain";
+		sprite = "WTFTA0";
+	}
+	
+	53
+	{
+		title = "Ceiling Water Drip";
+		sprite = "CDRPA0";
+		hangs = 1;
+	}
+	
+	103
+	{
+		title = "Floor Water Drip";
+		sprite = "DRIPA0";
+	}
+	
+	104
+	{
+		title = "Waterfall Splash";
+		sprite = "SPLHA0";
+	}
+	
+	164
+	{
+		title = "Mug";
+		sprite = "MUGGA0";
+	}
+	
+	2014
+	{
+		title = "Water Bottle";
+		sprite = "WATRA0";
+	}
+	
 	165
 	{
 		title = "Pot";
+		sprite = "VASEA0";
 		width = 12;
+		height = 24;
+	}
+	
+	190
+	{
+		title = "Metal Pot";
+		sprite = "POT1A0";
 	}
-	190 = "Metal Pot";
+	
 	188
 	{
 		title = "Pitcher";
+		sprite = "VASEB0";
 		width = 12;
+		height = 32;
 	}
+	
 	189
 	{
 		title = "Stool";
+		sprite = "STOLA0";
 		width = 6;
+		height = 24;
+	}
+	
+	191
+	{
+		title = "Tub";
+		sprite = "TUB1A0";
+	}
+	
+	26
+	{
+		title = "Entity Nest";
+		sprite = "NESTA1";
+		width = 84;
+		height = 47;
+	}
+	
+	198
+	{
+		title = "Entity Pod";
+		sprite = "PODDA0";
+		width = 25;
+		height = 91;
 	}
-	191 = "Tub";
 }
 
 obstacles
@@ -469,102 +1079,183 @@ obstacles
 	33
 	{
 		title = "Tree Stub";
+		sprite = "TRE1A0";
 		width = 15;
+		height = 80;
 	}
+	
 	51
 	{
 		title = "Palm Tree";
+		sprite = "TREEA0";
 		width = 15;
+		height = 109;
 	}
+	
 	202
 	{
 		title = "Big Tree";
+		sprite = "TREEB0";
 		width = 15;
+		height = 109;
 	}
+	
 	203
 	{
 		title = "Potted Tree";
+		sprite = "TREEC0";
 		width = 15;
+		height = 64;
 	}
+	
 	60
 	{
 		title = "Short Bush";
+		sprite = "BUSHA0";
 		width = 15;
+		height = 40;
 	}
+	
 	62
 	{
 		title = "Tall Bush";
+		sprite = "SHRBA0";
 		width = 20;
+		height = 64;
 	}
+	
 	215
 	{
 		title = "Stick in Water";
+		sprite = "LOGGA0";
 		width = 20;
 	}
-	98 = "Stalactite";
-	161 = "Small Stalactite";
-	160 = "Stalacmite";
-	163 = "Stalacmite Small";
-	159 = "Cave Pillar Top";
-	162 = "Cave Pillar Bottom";
+	
+	98
+	{
+		title = "Stalactite";
+		sprite = "STLGC0";
+		height = 64;
+		hangs = 1;
+	}
+	
+	161
+	{
+		title = "Small Stalactite";
+		sprite = "STLGA0";
+		height = 40;
+		hangs = 1;
+	}
+	
+	160
+	{
+		title = "Stalagmite";
+		sprite = "STLGB0";
+		height = 40;
+	}
+	
+	163
+	{
+		title = "Small Stalagmite";
+		sprite = "STLGF0";
+		height = 25;
+	}
+	
+	159
+	{
+		title = "Cave Pillar Top";
+		sprite = "STLGD0";
+		height = 128;
+		hangs = 1;
+	}
+	
+	162
+	{
+		title = "Cave Pillar Bottom";
+		sprite = "STLGE0";
+		height = 128;
+	}
+	
 	99
 	{
 		title = "Rock 1";
+		sprite = "ROK1A0";
 		width = 20;
 	}
+	
 	100
 	{
 		title = "Rock 2";
+		sprite = "ROK2A0";
 		width = 20;
 	}
+	
 	101
 	{
 		title = "Rock 3";
+		sprite = "ROK3A0";
 		width = 20;
 	}
+	
 	102
 	{
 		title = "Rock 4";
+		sprite = "ROK4A0";
 		width = 20;
 	}
+	
 	29
 	{
 		title = "Rubble 1";
+		sprite = "RUB1A0";
 		width = 20;
 	}
+	
 	30
 	{
 		title = "Rubble 2";
+		sprite = "RUB2A0";
 		width = 20;
 	}
+	
 	31
 	{
 		title = "Rubble 3";
+		sprite = "RUB3A0";
 		width = 20;
 	}
 	32
 	{
 		title = "Rubble 4";
+		sprite = "RUB4A0";
 		width = 20;
 	}
+	
 	36
 	{
 		title = "Rubble 5";
+		sprite = "RUB5A0";
 		width = 20;
 	}
+	
 	37
 	{
 		title = "Rubble 6";
+		sprite = "RUB6A0";
 		width = 20;
 	}
+	
 	41
 	{
 		title = "Rubble 7";
+		sprite = "RUB7A0";
 		width = 20;
 	}
+	
 	42
 	{
 		title = "Rubble 8";
+		sprite = "RUB8A0";
 		width = 20;
 	}
 }
@@ -580,56 +1271,110 @@ pillars
 	69
 	{
 		title = "Barricade Column";
+		sprite = "BAR1A0";
 		width = 16;
+		height = 128;
 	}
-	63 = "Chimneystack";
-	48 = "Techno Pillar";
+	
+	63
+	{
+		title = "Chimneystack";
+		sprite = "STAKA0";
+		height = 64;
+	}
+	
+	48
+	{
+		title = "Techno Pillar";
+		sprite = "MONIA0";
+		height = 128;
+	}
+	
 	54
 	{
 		title = "Aztec Pillar";
+		sprite = "STELA0";
 		width = 16;
+		height = 128;
 	}
+	
 	55
 	{
 		title = "Damaged Aztec Pillar";
+		sprite = "STLAA0";
 		width = 16;
+		height = 80;
 	}
+	
 	56
 	{
 		title = "Ruined Aztec Pillar";
+		sprite = "STLEA0";
 		width = 16;
+		height = 40;
 	}
+	
 	57
 	{
 		title = "Huge Tech Pillar";
+		sprite = "HUGEA0";
 		width = 24;
+		height = 192;
 	}
+	
 	227
 	{
 		title = "Huge Alien Pillar";
+		sprite = "APOWA0";
 		width = 24;
+		height = 192;
 	}
-	110 = "Statue";
-	44 = "Ruined Statue";
+	
+	110
+	{
+		title = "Statue";
+		sprite = "STATA0";
+		height = 64;
+	}
+	
+	44
+	{
+		title = "Ruined Statue";
+		sprite = "DSTAA0";
+		height = 56;
+	}
+	
 	221
 	{
 		title = "Alien Bubble Column";
+		sprite = "BUBBA0";
 		width = 16;
+		height = 128;
 	}
+	
 	222
 	{
 		title = "Alien Floor Bubble";
+		sprite = "BUBFA0";
 		width = 16;
+		height = 72;
 	}
+	
 	223
 	{
 		title = "Alien Ceiling Bubble";
+		sprite = "BUBCA0";
 		width = 16;
+		height = 72;
+		hangs = 1;
 	}
+	
 	224
 	{
 		title = "Alien Asp Climber";
+		sprite = "ASPRA0";
 		width = 16;
+		height = 128;
 	}
 }
 
@@ -644,45 +1389,100 @@ corpses
 	15
 	{
 		title = "Dead Player, disappears";
+		sprite = "PLAYP0";
 		width = 20;
 	}
+	
 	18
 	{
-		title = "Dead Peasant, disappears";
+		title = "Dead Peasant";
+		sprite = "PEASN0";
 		width = 20;
 	}
+	
 	19
 	{
 		title = "Dead Rebel";
+		sprite = "HMN1N0";
 		width = 20;
 	}
+	
 	20
 	{
 		title = "Dead Reaver";
+		sprite = "ROB1R0";
 		width = 20;
 	}
+	
 	21
 	{
-		title = "Dead Acolyte, disappears";
+		title = "Dead Acolyte";
+		sprite = "AGRDN0";
 		width = 20;
 	}
+	
 	22
 	{
 		title = "Dead Crusader";
+		sprite = "ROB2P0";
 		width = 20;
 	}
+	
 	212
 	{
 		title = "Sacrificed Guy";
+		sprite = "SACRA0";
 		width = 20;
 	}
-	113 =  "Hearts in Tank";
-	209 = "Huge Tank 1 has skeleton";
-	210 = "Huge Tank 2";
-	211 = "Huge Tank 3";
-	213 = "Tank 4 spine with organs";
-	214 = "Tank 5 Stumpy the Acolyte";
-	229 = "Tank 6 Specter";
+	
+	113
+	{
+		title = "Hearts in Tank";
+		sprite = "HERTA0";
+		height = 56;
+	}
+	
+	209
+	{
+		title = "Huge Tank 1 (has skeleton)";
+		sprite = "TNK1A0";
+		height = 192;
+	}
+	
+	210
+	{
+		title = "Huge Tank 2";
+		sprite = "TNK2A0";
+		height = 192;
+	}
+	
+	211
+	{
+		title = "Huge Tank 3";
+		sprite = "TNK3A0";
+		height = 192;
+	}
+	
+	213
+	{
+		title = "Tank 4 (spine with organs)";
+		sprite = "TNK4A0";
+		height = 56;
+	}
+	
+	214
+	{
+		title = "Tank 5 (acolyte)";
+		sprite = "TNK5A0";
+		height = 56;
+	}
+	
+	229
+	{
+		title = "Tank 6 (spectre)";
+		sprite = "TNK6A0";
+		height = 56;
+	}
 }
 
 rebels
@@ -691,6 +1491,8 @@ rebels
 	arrow = 0;
 	title = "Rebels";
 	width = 20;
+	height = 56;
+	sprite = "HMN1A2";
 	sort = 1;
 	
 	9 = "Rebel 1 (summoned by beacon)";
@@ -699,8 +1501,18 @@ rebels
 	149 = "Rebel 4";
 	150 = "Rebel 5";
 	151 = "Rebel 6";
-	64 = "Macil 1 Invincible (Map03,34)";
-	200 = "Macil 2 S (Map10)";
+	
+	64
+	{
+		title = "Macil 1 Invincible (Map03,34)";
+		sprite = "LEADA2";
+	}
+	
+	200
+	{
+		title = "Macil 2 Spectral (Map10)";
+		sprite = "LEADA2";
+	}
 }
 
 peasants
@@ -709,6 +1521,8 @@ peasants
 	arrow = 0;
 	title = "Peasants";
 	width = 20;
+	height = 56;
+	sprite = "PEASA1";
 	sort = 1;
 	
 	3004 = "Peasant Tan 1";
@@ -741,6 +1555,8 @@ npcs
 	arrow = 0;
 	title = "Other NPCs";
 	width = 20;
+	height = 56;
+	sprite = "BEGRA1";
 	sort = 1;
 	
 	141 = "Beggar 1 (Map01 MacGuffin/32 Prisoner)";
@@ -748,21 +1564,61 @@ npcs
 	156 = "Beggar 3";
 	157 = "Beggar 4";
 	158 = "Beggar 5";
+	
 	204
 	{
 		title = "Kneeling Guy";
+		sprite = "NEALA2A8";
 		width = 6;
+		height = 17;
+	}
+	
+	169
+	{
+		title = "Zombie";
+		sprite = "PEASA2";
+	}
+	
+	170
+	{
+		title = "Zombie Spawner";
+		sprite = "internal:Actor";
+	}
+	
+	201
+	{
+		title = "Becoming Acolyte";
+		sprite = "ARMRA0";
+	}
+	
+	72
+	{
+		title = "Bar Keep 1 Gold (Map02,23,33)";
+		sprite = "MRSTA0";
+	}
+	
+	73
+	{
+		title = "Armorer 2 Bright Green (Map02,23,33/10)";
+		sprite = "MRSTA0";
+	}
+	
+	74
+	{
+		title = "Medic 3 Blue (Map02,23,33/03,10/17)";
+		sprite = "MRSTA0";
+	}
+	
+	116
+	{
+		title = "Weapon Smith 4 Tan (Map02,23,33/03,10)";
+		sprite = "MRSTA0";
 	}
-	169 = "Zombie";
-	170 = "Zombie Spawner";
-	201 = "Becoming Acolyte";
-	72 = "Bar Keep 1 Gold (Map02,23,33)";
-	73 = "Armorer 2 Bright Green (Map02,23,33/10)";
-	74 = "Medic 3 Blue (Map02,23,33/03,10/17)";
-	116 = "Weapon Smith 4 Tan (Map02,23,33/03,10)";
+	
 	199
 	{
 		title = "Oracle (Map12)";
+		sprite = "ORCLA0";
 		width = 15;
 	}
 }
@@ -778,23 +1634,31 @@ hints
 	94
 	{
 		title = "Explosive Barrel";
+		sprite = "BARTA0";
 		width = 10;
+		height = 32;
 	}
-	92 = "PowerCrystal-LowSect128Lt0";
+	
+	92
+	{
+		title = "Power Crystal";
+		sprite = "CRYSA0";
+		height = 32;
+	}
+	
 	59
 	{
 		title = "Degnin Ore - for FFG";
+		sprite = "XPRKA0";
 		width = 16;
+		height = 16;
 	}
+	
 	25
 	{
 		title = "Force Field Guard - use ore";
+		sprite = "internal:Actor";
 		width = 2;
+		height = 1;
 	}
-	9001 = "Label Hint 1";
-	9002 = "Label Hint 2";
-	9003 = "Label Hint 3";
-	9004 = "Label Hint 4";
-	9005 = "Label Hint 5";
-	9006 = "Label Hint 6";
 }
diff --git a/Build/Configurations/ZDoom_StrifeDoom.cfg b/Build/Configurations/ZDoom_StrifeDoom.cfg
index 19330974e..6c66ebb48 100644
--- a/Build/Configurations/ZDoom_StrifeDoom.cfg
+++ b/Build/Configurations/ZDoom_StrifeDoom.cfg
@@ -25,6 +25,7 @@ include("Includes\\ZDoom_common.cfg", "common");
 
 // Settings common to Doom map format
 include("Includes\\ZDoom_common.cfg", "mapformat_doom");
+include("Includes\\Strife_misc.cfg", "mapformat_doom");
 
 // Settings common to Strife games
 include("Includes\\Game_Strife.cfg");
diff --git a/Build/Configurations/Zandronum_StrifeDoom.cfg b/Build/Configurations/Zandronum_StrifeDoom.cfg
index 981117760..31a0f2d43 100644
--- a/Build/Configurations/Zandronum_StrifeDoom.cfg
+++ b/Build/Configurations/Zandronum_StrifeDoom.cfg
@@ -25,6 +25,7 @@ include("Includes\\ZDoom_common.cfg", "common");
 
 // Settings common to Doom map format
 include("Includes\\ZDoom_common.cfg", "mapformat_doom");
+include("Includes\\Strife_misc.cfg", "mapformat_doom");
 
 // Settings common to Strife games
 include("Includes\\Game_Strife.cfg");
diff --git a/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs b/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs
index a2e431ab5..45dc7ce80 100644
--- a/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs
@@ -549,7 +549,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 							for(int i = 0; i < 24; i++)
 							{
 								// Make the vectors
-								float angle = i * Angle2D.PI * 0.08333f; //mxd. 15-degree increments
+								float angle = i * Angle2D.PI * 0.08333333333f; //mxd. 15-degree increments
 								Vector2D gridvec = Vector2D.FromAngle(angle);
 								
 								// Check distance
-- 
GitLab