mirror of
https://git.do.srb2.org/STJr/ZoneBuilder.git
synced 2024-11-10 06:41:49 +00:00
3D floor types are now handled via the config, including changes when certain linedef flags are set
This commit is contained in:
parent
cbb210e1ae
commit
057a5b16c3
9 changed files with 221 additions and 129 deletions
|
@ -781,12 +781,16 @@ linedeftypes
|
|||
{
|
||||
title = "Solid, Opaque";
|
||||
prefix = "(100)";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "19F";
|
||||
}
|
||||
|
||||
101
|
||||
{
|
||||
title = "Solid, Opaque, No Shadow";
|
||||
prefix = "(101)";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "1DF";
|
||||
}
|
||||
|
||||
102
|
||||
|
@ -794,12 +798,17 @@ linedeftypes
|
|||
title = "Solid, Translucent";
|
||||
prefix = "(102)";
|
||||
flags64text = "[6] Render insides";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "195F";
|
||||
flags643dfloorflagsadd = "7C80";
|
||||
}
|
||||
|
||||
103
|
||||
{
|
||||
title = "Solid, Sides Only";
|
||||
prefix = "(103)";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "1CF";
|
||||
}
|
||||
|
||||
104
|
||||
|
@ -807,12 +816,17 @@ linedeftypes
|
|||
title = "Solid, No Sides";
|
||||
prefix = "(104)";
|
||||
flags64text = "[6] Cast shadow";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "1D7";
|
||||
flags643dfloorflagsremove = "40";
|
||||
}
|
||||
|
||||
105
|
||||
{
|
||||
title = "Solid, Invisible";
|
||||
prefix = "(105)";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "47";
|
||||
}
|
||||
|
||||
140
|
||||
|
@ -820,6 +834,9 @@ linedeftypes
|
|||
title = "Intangible from Bottom, Opaque";
|
||||
prefix = "(140)";
|
||||
flags64text = "[6] Don't cast shadow";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "200841F";
|
||||
flags643dfloorflagsadd = "40";
|
||||
}
|
||||
|
||||
141
|
||||
|
@ -828,6 +845,10 @@ linedeftypes
|
|||
prefix = "(141)";
|
||||
flags64text = "[6] Don't cast shadow";
|
||||
flags128text = "[7] Render insides";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "200191F";
|
||||
flags1283dfloorflagsadd = "7C80";
|
||||
flags643dfloorflagsadd = "40";
|
||||
}
|
||||
|
||||
142
|
||||
|
@ -836,6 +857,10 @@ linedeftypes
|
|||
prefix = "(142)";
|
||||
flags64text = "[6] Don't cast shadow";
|
||||
flags128text = "[7] Render insides";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "2001917";
|
||||
flags1283dfloorflagsadd = "7C80";
|
||||
flags643dfloorflagsadd = "40";
|
||||
}
|
||||
|
||||
143
|
||||
|
@ -843,6 +868,9 @@ linedeftypes
|
|||
title = "Intangible from Top, Opaque";
|
||||
prefix = "(143)";
|
||||
flags64text = "[6] Don't cast shadow";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "400841F";
|
||||
flags643dfloorflagsadd = "40";
|
||||
}
|
||||
|
||||
144
|
||||
|
@ -851,6 +879,10 @@ linedeftypes
|
|||
prefix = "(144)";
|
||||
flags64text = "[6] Don't cast shadow";
|
||||
flags128text = "[7] Render insides";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "400191F";
|
||||
flags1283dfloorflagsadd = "7C80";
|
||||
flags643dfloorflagsadd = "40";
|
||||
}
|
||||
|
||||
145
|
||||
|
@ -859,12 +891,18 @@ linedeftypes
|
|||
prefix = "(145)";
|
||||
flags64text = "[6] Don't cast shadow";
|
||||
flags128text = "[7] Render insides";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "4001917";
|
||||
flags1283dfloorflagsadd = "7C80";
|
||||
flags643dfloorflagsadd = "40";
|
||||
}
|
||||
|
||||
146
|
||||
{
|
||||
title = "Only Tangible from Sides";
|
||||
prefix = "(146)";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "600800F";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -879,6 +917,11 @@ linedeftypes
|
|||
flags64text = "[6] Use two light levels";
|
||||
flags512text = "[9] Use target light level";
|
||||
flags1024text = "[10] Ripple effect";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "8F39";
|
||||
flags643dfloorflagsadd = "20000";
|
||||
flags5123dfloorflagsadd = "80000000";
|
||||
flags10243dfloorflagsadd = "40000000";
|
||||
}
|
||||
|
||||
121
|
||||
|
@ -888,6 +931,11 @@ linedeftypes
|
|||
flags64text = "[6] Use two light levels";
|
||||
flags512text = "[9] Use target light level";
|
||||
flags1024text = "[10] Ripple effect";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "9F39";
|
||||
flags643dfloorflagsadd = "20000";
|
||||
flags5123dfloorflagsadd = "80000000";
|
||||
flags10243dfloorflagsadd = "40000000";
|
||||
}
|
||||
|
||||
122
|
||||
|
@ -897,6 +945,11 @@ linedeftypes
|
|||
flags64text = "[6] Use two light levels";
|
||||
flags512text = "[9] Use target light level";
|
||||
flags1024text = "[10] Ripple effect";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "F31";
|
||||
flags643dfloorflagsadd = "20000";
|
||||
flags5123dfloorflagsadd = "80000000";
|
||||
flags10243dfloorflagsadd = "40000000";
|
||||
}
|
||||
|
||||
123
|
||||
|
@ -906,6 +959,11 @@ linedeftypes
|
|||
flags64text = "[6] Use two light levels";
|
||||
flags512text = "[9] Use target light level";
|
||||
flags1024text = "[10] Ripple effect";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "1F31";
|
||||
flags643dfloorflagsadd = "20000";
|
||||
flags5123dfloorflagsadd = "80000000";
|
||||
flags10243dfloorflagsadd = "40000000";
|
||||
}
|
||||
|
||||
124
|
||||
|
@ -915,6 +973,11 @@ linedeftypes
|
|||
flags64text = "[6] Use two light levels";
|
||||
flags512text = "[9] Use target light level";
|
||||
flags1024text = "[10] Ripple effect";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "209F39";
|
||||
flags643dfloorflagsadd = "20000";
|
||||
flags5123dfloorflagsadd = "80000000";
|
||||
flags10243dfloorflagsadd = "40000000";
|
||||
}
|
||||
|
||||
125
|
||||
|
@ -924,12 +987,19 @@ linedeftypes
|
|||
flags64text = "[6] Use two light levels";
|
||||
flags512text = "[9] Use target light level";
|
||||
flags1024text = "[10] Ripple effect";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "201F31";
|
||||
flags643dfloorflagsadd = "20000";
|
||||
flags5123dfloorflagsadd = "80000000";
|
||||
flags10243dfloorflagsadd = "40000000";
|
||||
}
|
||||
|
||||
220
|
||||
{
|
||||
title = "Intangible, Opaque";
|
||||
prefix = "(220)";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "8F19";
|
||||
}
|
||||
|
||||
221
|
||||
|
@ -937,6 +1007,9 @@ linedeftypes
|
|||
title = "Intangible, Translucent";
|
||||
prefix = "(221)";
|
||||
flags64text = "[6] Cast shadow";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "1B59";
|
||||
flags643dfloorflagsremove = "40";
|
||||
}
|
||||
|
||||
222
|
||||
|
@ -944,12 +1017,17 @@ linedeftypes
|
|||
title = "Intangible, Sides Only";
|
||||
prefix = "(222)";
|
||||
flags64text = "[6] Cast shadow";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "8249";
|
||||
flags643dfloorflagsremove = "240";
|
||||
}
|
||||
|
||||
223
|
||||
{
|
||||
title = "Intangible, Invisible";
|
||||
prefix = "(223)";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "41";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -962,6 +1040,8 @@ linedeftypes
|
|||
title = "Air Bobbing";
|
||||
prefix = "(150)";
|
||||
flags64text = "[6] Spindash to move";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "19F";
|
||||
}
|
||||
|
||||
151
|
||||
|
@ -969,6 +1049,8 @@ linedeftypes
|
|||
title = "Air Bobbing (Adjustable)";
|
||||
prefix = "(151)";
|
||||
flags64text = "[6] Spindash to move";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "19F";
|
||||
}
|
||||
|
||||
152
|
||||
|
@ -976,12 +1058,16 @@ linedeftypes
|
|||
title = "Reverse Air Bobbing (Adjustable)";
|
||||
prefix = "(152)";
|
||||
flags64text = "[6] Spindash to move";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "19F";
|
||||
}
|
||||
|
||||
160
|
||||
{
|
||||
title = "Floating, Bobbing";
|
||||
prefix = "(160)";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "4019F";
|
||||
}
|
||||
|
||||
190
|
||||
|
@ -990,6 +1076,8 @@ linedeftypes
|
|||
prefix = "(190)";
|
||||
flags2text = "[1] Sink when stepped on";
|
||||
flags64text = "[6] Spindash to move";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "19F";
|
||||
}
|
||||
|
||||
191
|
||||
|
@ -998,6 +1086,8 @@ linedeftypes
|
|||
prefix = "(191)";
|
||||
flags2text = "[1] Sink when stepped on";
|
||||
flags64text = "[6] Spindash to move";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "1DF";
|
||||
}
|
||||
|
||||
192
|
||||
|
@ -1006,6 +1096,8 @@ linedeftypes
|
|||
prefix = "(192)";
|
||||
flags2text = "[1] Sink when stepped on";
|
||||
flags64text = "[6] Spindash to move";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "195F";
|
||||
}
|
||||
|
||||
193
|
||||
|
@ -1014,6 +1106,8 @@ linedeftypes
|
|||
prefix = "(193)";
|
||||
flags2text = "[1] Sink when stepped on";
|
||||
flags64text = "[6] Spindash to move";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "47";
|
||||
}
|
||||
|
||||
194
|
||||
|
@ -1022,6 +1116,9 @@ linedeftypes
|
|||
prefix = "(194)";
|
||||
flags2text = "[1] Sink when stepped on";
|
||||
flags64text = "[6] Spindash, no shadow";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "200841F";
|
||||
flags643dfloorflagsadd = "40";
|
||||
}
|
||||
|
||||
195
|
||||
|
@ -1030,6 +1127,9 @@ linedeftypes
|
|||
prefix = "(195)";
|
||||
flags2text = "[1] Sink when stepped on";
|
||||
flags64text = "[6] Spindash, no shadow";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "2009D1F";
|
||||
flags643dfloorflagsadd = "40";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1041,12 +1141,16 @@ linedeftypes
|
|||
{
|
||||
title = "Crumbling, Respawn";
|
||||
prefix = "(170)";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "10019F";
|
||||
}
|
||||
|
||||
171
|
||||
{
|
||||
title = "Crumbling, No Respawn";
|
||||
prefix = "(171)";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "80019F";
|
||||
}
|
||||
|
||||
172
|
||||
|
@ -1054,6 +1158,9 @@ linedeftypes
|
|||
title = "Crumbling, Respawn, Intangible from Bottom";
|
||||
prefix = "(172)";
|
||||
flags64text = "[6] Don't cast shadow";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "210841F";
|
||||
flags643dfloorflagsadd = "40";
|
||||
}
|
||||
|
||||
173
|
||||
|
@ -1061,6 +1168,9 @@ linedeftypes
|
|||
title = "Crumbling, No Respawn, Intangible from Bottom";
|
||||
prefix = "(173)";
|
||||
flags64text = "[6] Don't cast shadow";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "218841F";
|
||||
flags643dfloorflagsadd = "40";
|
||||
}
|
||||
|
||||
174
|
||||
|
@ -1068,42 +1178,59 @@ linedeftypes
|
|||
title = "Crumbling, Respawn, Int. from Bottom, Translucent";
|
||||
prefix = "(174)";
|
||||
flags64text = "[6] Don't cast shadow";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "210959F";
|
||||
flags643dfloorflagsadd = "40";
|
||||
}
|
||||
|
||||
175
|
||||
{
|
||||
title = "Crumbling, No Respawn, Int. from Bottom, Translucent";
|
||||
prefix = "(175)";
|
||||
flags64text = "[6] Don't cast shadow";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "218959F";
|
||||
flags643dfloorflagsadd = "40";
|
||||
}
|
||||
|
||||
176
|
||||
{
|
||||
title = "Crumbling, Respawn, Floating, Bobbing";
|
||||
prefix = "(176)";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "14019F";
|
||||
}
|
||||
|
||||
177
|
||||
{
|
||||
title = "Crumbling, No Respawn, Floating, Bobbing";
|
||||
prefix = "(177)";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "1C019F";
|
||||
}
|
||||
|
||||
178
|
||||
{
|
||||
title = "Crumbling, Respawn, Floating";
|
||||
prefix = "(178)";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "14019F";
|
||||
}
|
||||
|
||||
179
|
||||
{
|
||||
title = "Crumbling, No Respawn, Floating";
|
||||
prefix = "(179)";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "1C019F";
|
||||
}
|
||||
|
||||
180
|
||||
{
|
||||
title = "Crumbling, Respawn, Air Bobbing";
|
||||
prefix = "(180)";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "10019F";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1115,24 +1242,32 @@ linedeftypes
|
|||
{
|
||||
title = "Light Block";
|
||||
prefix = "(200)";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "20201";
|
||||
}
|
||||
|
||||
201
|
||||
{
|
||||
title = "Half Light Block";
|
||||
prefix = "(201)";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "201";
|
||||
}
|
||||
|
||||
202
|
||||
{
|
||||
title = "Fog Block";
|
||||
prefix = "(202)";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "3EF19";
|
||||
}
|
||||
|
||||
250
|
||||
{
|
||||
title = "Mario Block";
|
||||
prefix = "(250)";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "40019F";
|
||||
}
|
||||
|
||||
251
|
||||
|
@ -1141,6 +1276,8 @@ linedeftypes
|
|||
prefix = "(251)";
|
||||
flags512text = "[9] Custom crushing sound";
|
||||
flags1024text = "[10] Custom speed";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "19F";
|
||||
}
|
||||
|
||||
252
|
||||
|
@ -1150,6 +1287,9 @@ linedeftypes
|
|||
flags64text = "[6] Shatter only from below";
|
||||
flags512text = "[9] Shattered by pushables";
|
||||
flags1024text = "[10] Trigger linedef executor";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "8800019";
|
||||
flags643dfloorflagsadd = "200006";
|
||||
}
|
||||
|
||||
253
|
||||
|
@ -1158,6 +1298,8 @@ linedeftypes
|
|||
prefix = "(253)";
|
||||
flags512text = "[9] Shattered by pushables";
|
||||
flags1024text = "[10] Trigger linedef executor";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "8801019";
|
||||
}
|
||||
|
||||
254
|
||||
|
@ -1167,6 +1309,9 @@ linedeftypes
|
|||
flags64text = "[6] Only bustable by Knuckles";
|
||||
flags512text = "[9] Shattered by pushables";
|
||||
flags1024text = "[10] Trigger linedef executor";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "80001F";
|
||||
flags643dfloorflagsadd = "20000000";
|
||||
}
|
||||
|
||||
255
|
||||
|
@ -1175,6 +1320,8 @@ linedeftypes
|
|||
prefix = "(255)";
|
||||
flags512text = "[9] Shattered by pushables";
|
||||
flags1024text = "[10] Trigger linedef executor";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "1080001F";
|
||||
}
|
||||
|
||||
256
|
||||
|
@ -1183,6 +1330,8 @@ linedeftypes
|
|||
prefix = "(256)";
|
||||
flags512text = "[9] Shattered by pushables";
|
||||
flags1024text = "[10] Trigger linedef executor";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "1080101F";
|
||||
}
|
||||
|
||||
257
|
||||
|
@ -1190,6 +1339,9 @@ linedeftypes
|
|||
title = "Quicksand";
|
||||
prefix = "(257)";
|
||||
flags1024text = "[10] Ripple effect";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "1008219";
|
||||
flags10243dfloorflagsadd = "40000000";
|
||||
}
|
||||
|
||||
258
|
||||
|
@ -1197,6 +1349,8 @@ linedeftypes
|
|||
title = "Laser";
|
||||
prefix = "(258)";
|
||||
flags32text = "[5] Don't damage bosses";
|
||||
3dfloor = true;
|
||||
3dfloorflags = "959";
|
||||
}
|
||||
|
||||
259
|
||||
|
@ -1207,6 +1361,8 @@ linedeftypes
|
|||
flags128text = "[7] Only block non-players";
|
||||
flags512text = "[9] Shattered by pushables";
|
||||
flags1024text = "[10] Trigger linedef executor";
|
||||
3dfloor = true;
|
||||
3dfloorcustom = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -48,7 +48,10 @@ namespace CodeImp.DoomBuilder.Config
|
|||
private IDictionary<string, string> flags;
|
||||
private readonly bool slope;
|
||||
private readonly int slopetype;
|
||||
|
||||
private readonly bool threedfloor;
|
||||
private readonly bool threedfloorcustom;
|
||||
private readonly int threedfloorflags;
|
||||
private readonly IDictionary<string,int> threedfloorflagsadditions;
|
||||
#endregion
|
||||
|
||||
#region ================== Properties
|
||||
|
@ -70,7 +73,9 @@ namespace CodeImp.DoomBuilder.Config
|
|||
public bool IsRegularSlope { get { return slope && (slopetype & 0x3) == 1; } }
|
||||
public bool IsCopySlope { get { return slope && (slopetype & 0x3) == 2; } }
|
||||
public bool IsVertexSlope { get { return slope && (slopetype & 0x3) == 3; } }
|
||||
|
||||
public bool ThreeDFloor { get { return threedfloor; } }
|
||||
public bool ThreeDFloorCustom { get { return threedfloorcustom; } }
|
||||
public int ThreeDFloorFlags { get { return threedfloorflags; } }
|
||||
#endregion
|
||||
|
||||
#region ================== Constructor / Disposer
|
||||
|
@ -95,9 +100,24 @@ namespace CodeImp.DoomBuilder.Config
|
|||
this.title = this.prefix + " " + this.name;
|
||||
this.title = this.title.Trim();
|
||||
this.flags = new Dictionary<string, string>(ac.Flags);
|
||||
ReadLinedefSpecificFlags(cfg);
|
||||
this.slope = cfg.ReadSetting(actionsetting + ".slope", false);
|
||||
this.slopetype = cfg.ReadSetting(actionsetting + ".slopetype", 0);
|
||||
ReadLinedefSpecificFlags(cfg);
|
||||
this.threedfloor = cfg.ReadSetting(actionsetting + ".3dfloor", false);
|
||||
this.threedfloorcustom = cfg.ReadSetting(actionsetting + ".3dfloorcustom", false);
|
||||
try { this.threedfloorflags = Convert.ToInt32(cfg.ReadSetting(actionsetting + ".3dfloorflags", "0"), 16); }
|
||||
catch (FormatException e) { this.threedfloorflags = 0; }
|
||||
this.threedfloorflagsadditions = new Dictionary<string, int>();
|
||||
foreach (KeyValuePair<string,string> p in flags)
|
||||
{
|
||||
int value = 0;
|
||||
try { value = Convert.ToInt32(cfg.ReadSetting(actionsetting + ".flags" + p.Key + "3dfloorflagsadd", "0"), 16); }
|
||||
catch (FormatException e) { }
|
||||
try { value -= Convert.ToInt32(cfg.ReadSetting(actionsetting + ".flags" + p.Key + "3dfloorflagsremove", "0"), 16); }
|
||||
catch (FormatException e) { }
|
||||
this.threedfloorflagsadditions.Add(p.Key, value);
|
||||
|
||||
}
|
||||
|
||||
// Read the args
|
||||
for (int i = 0; i < Linedef.NUM_ARGS; i++)
|
||||
|
@ -118,6 +138,10 @@ namespace CodeImp.DoomBuilder.Config
|
|||
this.flags = new Dictionary<string, string>();
|
||||
this.slope = false;
|
||||
this.slopetype = 0;
|
||||
this.threedfloor = false;
|
||||
this.threedfloorcustom = false;
|
||||
this.threedfloorflags = 0;
|
||||
this.threedfloorflagsadditions = new Dictionary<string, int>();
|
||||
this.args = new ArgumentInfo[Linedef.NUM_ARGS];
|
||||
for(int i = 0; i < Linedef.NUM_ARGS; i++)
|
||||
this.args[i] = new ArgumentInfo(i);
|
||||
|
@ -152,6 +176,16 @@ namespace CodeImp.DoomBuilder.Config
|
|||
flags = newflags;
|
||||
}
|
||||
|
||||
public int Get3DFloorFlags(IDictionary<string,bool> setflags)
|
||||
{
|
||||
int value = threedfloorflags;
|
||||
foreach (KeyValuePair<string,int> p in threedfloorflagsadditions)
|
||||
{
|
||||
if (setflags[p.Key]) value += p.Value;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,7 +42,6 @@ namespace CodeImp.DoomBuilder.IO
|
|||
// Constructor
|
||||
public DoomMapSetIO(WAD wad, MapManager manager) : base(wad, manager)
|
||||
{
|
||||
threeDFloorTypes = new Dictionary<int, int[]>() { { 160, new int[3] { -1, -1, -1 } } };
|
||||
translucentLineTypes = new Dictionary<int, float>() { { 208, -1.0f } };
|
||||
startTypes = new List<int>();
|
||||
}
|
||||
|
@ -94,7 +93,6 @@ namespace CodeImp.DoomBuilder.IO
|
|||
public override int MinThingAngle { get { return short.MinValue; } }
|
||||
public override Dictionary<MapElementType, Dictionary<string, UniversalType>> UIFields { get { return uifields; } } //mxd
|
||||
public override int SlopeVertexType { get { return 9500; } }
|
||||
public override int Custom3DFloorType { get { return 160; } }
|
||||
public override int ColormapType { get { return -1; } }
|
||||
public override int FlatAlignmentType { get { return -1; } }
|
||||
public override int AxisType { get { return -1; } }
|
||||
|
|
|
@ -42,7 +42,6 @@ namespace CodeImp.DoomBuilder.IO
|
|||
// Constructor
|
||||
public HexenMapSetIO(WAD wad, MapManager manager) : base(wad, manager)
|
||||
{
|
||||
threeDFloorTypes = new Dictionary<int, int[]>() { { 160, new int[3] { -1, -1, -1 } } };
|
||||
translucentLineTypes = new Dictionary<int, float>() { { 208, -1.0f } };
|
||||
startTypes = new List<int>();
|
||||
}
|
||||
|
@ -94,7 +93,6 @@ namespace CodeImp.DoomBuilder.IO
|
|||
public override int MinThingAngle { get { return short.MinValue; } }
|
||||
public override Dictionary<MapElementType, Dictionary<string, UniversalType>> UIFields { get { return uifields; } } //mxd
|
||||
public override int SlopeVertexType { get { return 9500; } }
|
||||
public override int Custom3DFloorType { get { return 160; } }
|
||||
public override int ColormapType { get { return -1; } }
|
||||
public override int FlatAlignmentType { get { return -1; } }
|
||||
public override int AxisType { get { return -1; } }
|
||||
|
|
|
@ -70,10 +70,8 @@ namespace CodeImp.DoomBuilder.IO
|
|||
Dictionary<MapElementType, Dictionary<string, UniversalType>> UIFields { get; } //mxd. Element type (like "sector"), list of uifields.
|
||||
string GetElementName(MapElementType elementtype); //mxd
|
||||
MapElementType GetElementType(string elementname); //mxd
|
||||
Dictionary<int, int[]> ThreeDFloorTypes { get; }
|
||||
Dictionary<int, float> TranslucentLineTypes { get; }
|
||||
int SlopeVertexType { get; }
|
||||
int Custom3DFloorType { get; }
|
||||
int ColormapType { get; }
|
||||
int FlatAlignmentType { get; }
|
||||
int AxisType { get; }
|
||||
|
|
|
@ -45,7 +45,6 @@ namespace CodeImp.DoomBuilder.IO
|
|||
//mxd
|
||||
protected Dictionary<MapElementType, Dictionary<string, UniversalType>> uifields;
|
||||
|
||||
protected Dictionary<int, int[]> threeDFloorTypes;
|
||||
protected Dictionary<int, float> translucentLineTypes;
|
||||
protected List<int> startTypes;
|
||||
#endregion
|
||||
|
@ -94,10 +93,8 @@ namespace CodeImp.DoomBuilder.IO
|
|||
public abstract int MaxThingAngle { get; }
|
||||
public abstract int MinThingAngle { get; }
|
||||
public abstract Dictionary<MapElementType, Dictionary<string, UniversalType>> UIFields { get; } //mxd
|
||||
public Dictionary<int, int[]> ThreeDFloorTypes { get { return threeDFloorTypes; } }
|
||||
public Dictionary<int, float> TranslucentLineTypes { get { return translucentLineTypes; } }
|
||||
public abstract int SlopeVertexType { get; }
|
||||
public abstract int Custom3DFloorType { get; }
|
||||
public abstract int ColormapType { get; }
|
||||
public abstract int FlatAlignmentType { get; }
|
||||
public abstract int AxisType { get; }
|
||||
|
|
|
@ -38,70 +38,6 @@ namespace CodeImp.DoomBuilder.IO
|
|||
// Constructor
|
||||
public SRB2MapSetIO(WAD wad, MapManager manager) : base(wad, manager)
|
||||
{
|
||||
//Dictionary contents: Type, flags, translucency, flags when noclimb is active
|
||||
//Type: 1 = solid, 2 = water, 3 = intangible, +4 = render insides, +64 = don't render planes, +128 = don't render sides
|
||||
//Flags: 1 = disable lighting effects (e.g. shadows), 2 = restrict lighting effects to insides, 4 = fog
|
||||
//Translucency: 0 = invisible, 1 = read from front upper texture, 2 = opaque
|
||||
threeDFloorTypes = new Dictionary<int, int[]>() {
|
||||
{ 100, new int[4] { 1, 0, 2, 0} },
|
||||
{ 101, new int[4] { 1, 1, 2, 1} },
|
||||
{ 102, new int[4] { 1, 1, 1, 1} },
|
||||
{ 103, new int[4] { 65, 1, 2, 1} },
|
||||
{ 104, new int[4] { 129, 1, 2, 0} },
|
||||
{ 105, new int[4] { 1, 1, 0, 1} },
|
||||
{ 120, new int[4] { 6, 0, 2, 2} },
|
||||
{ 121, new int[4] { 6, 0, 1, 2} },
|
||||
{ 122, new int[4] { 134, 0, 2, 2} },
|
||||
{ 123, new int[4] { 134, 0, 1, 2} },
|
||||
{ 124, new int[4] { 6, 0, 1, 2} },
|
||||
{ 125, new int[4] { 134, 0, 1, 2} },
|
||||
{ 140, new int[4] { 1, 0, 2, 1} },
|
||||
{ 141, new int[4] { 1, 0, 1, 1} },
|
||||
{ 142, new int[4] { 129, 0, 1, 1} },
|
||||
{ 143, new int[4] { 1, 0, 2, 1} },
|
||||
{ 144, new int[4] { 1, 0, 1, 1} },
|
||||
{ 145, new int[4] { 129, 0, 1, 1} },
|
||||
{ 146, new int[4] { 65, 0, 2, 1} },
|
||||
{ 150, new int[4] { 1, 0, 2, 0} },
|
||||
{ 151, new int[4] { 1, 0, 2, 0} },
|
||||
{ 152, new int[4] { 1, 0, 2, 0} },
|
||||
{ 160, new int[4] { 1, 0, 2, 0} },
|
||||
{ 170, new int[4] { 1, 0, 2, 0} },
|
||||
{ 171, new int[4] { 1, 0, 2, 0} },
|
||||
{ 172, new int[4] { 1, 0, 2, 1} },
|
||||
{ 173, new int[4] { 1, 0, 2, 1} },
|
||||
{ 174, new int[4] { 1, 0, 1, 1} },
|
||||
{ 175, new int[4] { 1, 0, 1, 1} },
|
||||
{ 176, new int[4] { 1, 0, 2, 0} },
|
||||
{ 177, new int[4] { 1, 0, 2, 0} },
|
||||
{ 178, new int[4] { 1, 0, 2, 0} },
|
||||
{ 179, new int[4] { 1, 0, 2, 0} },
|
||||
{ 180, new int[4] { 1, 0, 2, 0} },
|
||||
{ 190, new int[4] { 1, 0, 2, 0} },
|
||||
{ 191, new int[4] { 1, 1, 2, 1} },
|
||||
{ 192, new int[4] { 1, 1, 1, 1} },
|
||||
{ 193, new int[4] { 1, 1, 0, 1} },
|
||||
{ 194, new int[4] { 1, 0, 2, 1} },
|
||||
{ 195, new int[4] { 1, 0, 1, 1} },
|
||||
{ 200, new int[4] { 3, 1, 0, 1} },
|
||||
{ 201, new int[4] { 3, 0, 0, 0} },
|
||||
{ 202, new int[4] { 7, 5, 2, 5} },
|
||||
{ 220, new int[4] { 3, 0, 2, 0} },
|
||||
{ 221, new int[4] { 3, 1, 1, 0} },
|
||||
{ 222, new int[4] { 67, 1, 2, 0} },
|
||||
{ 223, new int[4] { 3, 1, 0, 1} },
|
||||
{ 250, new int[4] { 1, 0, 2, 0} },
|
||||
{ 251, new int[4] { 1, 0, 2, 0} },
|
||||
{ 252, new int[4] { 1, 0, 2, 0} },
|
||||
{ 253, new int[4] { 1, 0, 1, 0} },
|
||||
{ 254, new int[4] { 1, 0, 2, 0} },
|
||||
{ 255, new int[4] { 1, 0, 2, 0} },
|
||||
{ 256, new int[4] { 1, 0, 1, 0} },
|
||||
{ 257, new int[4] { 5, 0, 2, 0} },
|
||||
{ 258, new int[4] { 1, 1, 2, 0} },
|
||||
{ 259, new int[4] { 1, 0, 2, 0} }
|
||||
};
|
||||
|
||||
translucentLineTypes = new Dictionary<int, float>() {
|
||||
{ 900, 0.9f },
|
||||
{ 901, 0.8f },
|
||||
|
@ -123,7 +59,6 @@ namespace CodeImp.DoomBuilder.IO
|
|||
public override bool HasThingHeight { get { return true; } }
|
||||
public override bool HasLinedefParameters { get { return false; } }
|
||||
public override bool HasTranslucent3DFloors { get { return true; } }
|
||||
public override int Custom3DFloorType { get { return 259; } }
|
||||
public override int SlopeVertexType { get { return 750; } }
|
||||
public override int MaxThingHeight { get { return 4095; } }
|
||||
public override int MinThingHeight { get { return 0; } }
|
||||
|
|
|
@ -47,7 +47,6 @@ namespace CodeImp.DoomBuilder.IO
|
|||
{
|
||||
if((manager != null) && (manager.Config != null))
|
||||
{
|
||||
threeDFloorTypes = new Dictionary<int, int[]>() { { 160, new int[3] { -1, -1, -1 } } };
|
||||
translucentLineTypes = new Dictionary<int, float>() { { 208, -1.0f } };
|
||||
startTypes = new List<int>();
|
||||
|
||||
|
@ -145,7 +144,6 @@ namespace CodeImp.DoomBuilder.IO
|
|||
public override int MinThingAngle { get { return int.MinValue; } }
|
||||
public override Dictionary<MapElementType, Dictionary<string, UniversalType>> UIFields { get { return uifields; } } //mxd
|
||||
public override int SlopeVertexType { get { return 9500; } }
|
||||
public override int Custom3DFloorType { get { return 160; } }
|
||||
public override int ColormapType { get { return -1; } }
|
||||
public override int FlatAlignmentType { get { return -1; } }
|
||||
public override int AxisType { get { return -1; } }
|
||||
|
|
|
@ -91,7 +91,8 @@ namespace CodeImp.DoomBuilder.Map
|
|||
internal Dictionary<string, bool> Flags { get { return flags; } }
|
||||
public int Action { get { return action; } set { BeforePropsChange(); action = value; UpdateColorPreset(); } }
|
||||
public int Activate { get { return activate; } set { BeforePropsChange(); activate = value; UpdateColorPreset(); } }
|
||||
public bool Is3DFloor { get { return General.Map.FormatInterface.ThreeDFloorTypes.ContainsKey(Action); } }
|
||||
public bool Is3DFloor { get { return (!General.Map.SRB2 && Action == 160) || General.Map.Config.GetLinedefActionInfo(Action).ThreeDFloor; } }
|
||||
public bool IsCustom3DFloor { get { return General.Map.Config.GetLinedefActionInfo(Action).ThreeDFloorCustom; } }
|
||||
public bool IsRegularSlope { get { return (!General.Map.SRB2 && Action == 181) || General.Map.Config.GetLinedefActionInfo(Action).IsRegularSlope; } }
|
||||
public bool IsCopySlope { get { return (!General.Map.SRB2 && Action == 118) || General.Map.Config.GetLinedefActionInfo(Action).IsCopySlope; } }
|
||||
public bool IsVertexSlope { get { return General.Map.Config.GetLinedefActionInfo(Action).IsVertexSlope; } }
|
||||
|
@ -771,61 +772,38 @@ namespace CodeImp.DoomBuilder.Map
|
|||
Args[3] = 0; //alpha
|
||||
Args[4] = 0; //hi-tag/line ID (irrelevant for SRB2)
|
||||
|
||||
//Handle the custom 3D floor type (259)
|
||||
if (Action == General.Map.FormatInterface.Custom3DFloorType && Back != null)
|
||||
int value;
|
||||
if (IsCustom3DFloor && Back != null)
|
||||
{
|
||||
//Read 3D floor flags from upper back texture
|
||||
string tex = Back.HighTexture;
|
||||
Regex r = new Regex("^[A-F0-9]*$");
|
||||
if (r.IsMatch(tex))
|
||||
{
|
||||
int value = Convert.ToInt32(tex, 16);
|
||||
bool exists = (value & 0x1) == 0x1; //FF_EXISTS
|
||||
bool solid = ((value & 0x2) == 0x2) || ((value & 0x4) == 0x4); //FF_BLOCKPLAYER/FF_BLOCKOTHERS/FF_SOLID
|
||||
bool rendersides = (value & 0x8) == 0x8; //FF_RENDERSIDES
|
||||
bool renderplanes = (value & 0x10) == 0x10; //FF_RENDERPLANES
|
||||
bool render = rendersides || renderplanes;
|
||||
bool water = (value & 0x20) == 0x20; //FF_SWIMMABLE
|
||||
bool noshade = (value & 0x40) == 0x40; //FF_NOSHADE
|
||||
bool translucent = (value & 0x1000) == 0x1000; //FF_TRANSLUCENT
|
||||
bool fog = (value & 0x2000) == 0x2000; //FF_FOG
|
||||
bool inside = ((value & 0x8000) == 0x8000) || ((value & 0x10000) == 0x10000); //FF_ALLSIDES/FF_INVERTSIDES
|
||||
bool doubleshadow = (value & 0x20000) == 0x20000; //FF_DOUBLESHADOW
|
||||
if (exists)
|
||||
{
|
||||
Args[1] = water ? 2 : (solid ? 1 : 3);
|
||||
if (inside) Args[1] += 4;
|
||||
if (!renderplanes) Args[1] += 64;
|
||||
if (!rendersides) Args[1] += 128;
|
||||
}
|
||||
if (noshade) Args[2] += 1;
|
||||
if (doubleshadow) Args[2] += 2;
|
||||
if (fog) Args[2] += 4;
|
||||
Args[3] = render ? (translucent ? ParseTranslucency(Front.HighTexture) : 255) : 0;
|
||||
}
|
||||
try { value = Convert.ToInt32(Back.HighTexture, 16); }
|
||||
catch (FormatException e) { return; }
|
||||
}
|
||||
else
|
||||
else value = General.Map.Config.GetLinedefActionInfo(Action).Get3DFloorFlags(flags);
|
||||
|
||||
bool exists = (value & 0x1) == 0x1; //FF_EXISTS
|
||||
bool solid = ((value & 0x2) == 0x2) || ((value & 0x4) == 0x4); //FF_BLOCKPLAYER/FF_BLOCKOTHERS/FF_SOLID
|
||||
bool rendersides = (value & 0x8) == 0x8; //FF_RENDERSIDES
|
||||
bool renderplanes = (value & 0x10) == 0x10; //FF_RENDERPLANES
|
||||
bool render = rendersides || renderplanes;
|
||||
bool water = (value & 0x20) == 0x20; //FF_SWIMMABLE
|
||||
bool noshade = (value & 0x40) == 0x40; //FF_NOSHADE
|
||||
bool translucent = (value & 0x1000) == 0x1000; //FF_TRANSLUCENT
|
||||
bool fog = (value & 0x2000) == 0x2000; //FF_FOG
|
||||
bool inside = ((value & 0x8000) == 0x8000) || ((value & 0x10000) == 0x10000); //FF_ALLSIDES/FF_INVERTSIDES
|
||||
bool doubleshadow = (value & 0x20000) == 0x20000; //FF_DOUBLESHADOW
|
||||
if (exists)
|
||||
{
|
||||
//Read settings for preconfigured 3D floor type
|
||||
int[] settings = General.Map.FormatInterface.ThreeDFloorTypes[Action];
|
||||
Args[1] = settings[0];
|
||||
Args[2] = IsFlagSet("64") ? settings[3] : settings[1]; //Flags may depend on whether the noclimb flag is set
|
||||
switch (settings[2])
|
||||
{
|
||||
case 0:
|
||||
Args[3] = 0;
|
||||
break;
|
||||
case 1:
|
||||
Args[3] = ParseTranslucency(Front.HighTexture);
|
||||
break;
|
||||
case 2:
|
||||
Args[3] = 255;
|
||||
break;
|
||||
default:
|
||||
Args[3] = 0;
|
||||
break;
|
||||
}
|
||||
Args[1] = water ? 2 : (solid ? 1 : 3);
|
||||
if (inside) Args[1] += 4;
|
||||
if (!renderplanes) Args[1] += 64;
|
||||
if (!rendersides) Args[1] += 128;
|
||||
}
|
||||
if (noshade) Args[2] += 1;
|
||||
if (doubleshadow) Args[2] += 2;
|
||||
if (fog) Args[2] += 4;
|
||||
Args[3] = render ? (translucent ? ParseTranslucency(Front.HighTexture) : 255) : 0;
|
||||
}
|
||||
|
||||
//Read translucency value from texture name (#000-#255)
|
||||
|
|
Loading…
Reference in a new issue