Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • STJr/UltimateZoneBuilder
  • KartKrew/high-voltage-ring
  • ashi/ultimate-zone-builder
  • Alam/UltimateZoneBuilder
  • Indev/UltimateZoneBuilder
  • Acelite/UltimateZoneBuilder
  • LoganAir/high-voltage-ring
  • coatlessali/high-voltage-ring
  • spherallic/high-voltage-ring
  • EeveeEuphoria/high-voltage-ring
  • StarManiaKG/the-story-of-horsepowering-vetted-racing
  • frostu8/high-voltage-ring
  • Benji_Menji/high-voltage-ring
  • Nep2Disk/UltimateZoneBuilder
  • PencilVoid/high-voltage-ring
15 results
Show changes
Showing
with 1405 additions and 261 deletions
...@@ -55,16 +55,30 @@ universalfields ...@@ -55,16 +55,30 @@ universalfields
type = 2; type = 2;
default = ""; default = "";
} }
/* FIXME: should I add renderstyle and alpha? */
renderstyle
{
type = 2;
default = "";
}
alpha
{
type = 1;
default = 1.0;
}
tranmap tranmap
{ {
type = 2; type = 2;
default = ""; default = "";
managed = false;
} }
portal portal
{ {
type = 0; type = 0;
default = 0; default = 0;
managed = false;
} }
} }
...@@ -76,40 +90,16 @@ universalfields ...@@ -76,40 +90,16 @@ universalfields
default = ""; default = "";
} }
offsetx_top light
{
type = 1;
default = 0.0;
}
offsety_bottom
{
type = 1;
default = 0.0;
}
offsetx_bottom
{ {
type = 1; type = 0;
default = 0.0; default = 0;
}
offsetx_mid
{
type = 1;
default = 0.0;
} }
offsety_top lightabsolute
{ {
type = 1; type = 3;
default = 0.0; default = false;
}
offsety_mid
{
type = 1;
default = 0.0;
} }
light_top light_top
...@@ -153,6 +143,7 @@ universalfields ...@@ -153,6 +143,7 @@ universalfields
type = 16; type = 16;
enum = "skew_type"; enum = "skew_type";
default = "none"; default = "none";
managed = false;
} }
skew_middle_type skew_middle_type
...@@ -160,6 +151,7 @@ universalfields ...@@ -160,6 +151,7 @@ universalfields
type = 16; type = 16;
enum = "skew_type"; enum = "skew_type";
default = "none"; default = "none";
managed = false;
} }
skew_bottom_type skew_bottom_type
...@@ -167,6 +159,43 @@ universalfields ...@@ -167,6 +159,43 @@ universalfields
type = 16; type = 16;
enum = "skew_type"; enum = "skew_type";
default = "none"; default = "none";
managed = false;
}
offsetx_bottom
{
type = 1;
default = 0.0;
}
offsetx_mid
{
type = 1;
default = 0.0;
}
offsetx_top
{
type = 1;
default = 0.0;
}
offsety_bottom
{
type = 1;
default = 0.0;
}
offsety_mid
{
type = 1;
default = 0.0;
}
offsety_top
{
type = 1;
default = 0.0;
} }
} }
...@@ -177,6 +206,12 @@ universalfields ...@@ -177,6 +206,12 @@ universalfields
type = 2; type = 2;
default = ""; default = "";
} }
health
{
type = 1;
default = 1.0;
}
} }
sector sector
...@@ -186,48 +221,138 @@ universalfields ...@@ -186,48 +221,138 @@ universalfields
type = 2; type = 2;
default = ""; default = "";
} }
friction friction
{ {
type = 0; type = 0;
default = -1; default = -1;
} }
/* FIXME: should I add damagetype? Or lightfloor, lightceiling,
floorterain, ceilingterrain, floor/ceiling panning/rotation */ ceilingterrain
{
type = 2;
default = "";
}
floorterrain
{
type = 2;
default = "";
}
soundsequence
{
type = 2;
default = "";
}
lightceiling
{
type = 0;
default = 0;
}
lightceilingabsolute
{
type = 3;
default = false;
}
lightfloor
{
type = 0;
default = 0;
}
lightfloorabsolute
{
type = 3;
default = false;
}
rotationfloor
{
type = 1;
default = 0.0;
}
rotationceiling
{
type = 1;
default = 0.0;
}
damagetype
{
type = 2;
default = "";
}
damageamount
{
type = 0;
default = 0;
}
damageinterval
{
type = 0;
default = 32;
}
leakiness
{
type = 0;
default = 0;
}
colormaptop colormaptop
{ {
type = 2; type = 2;
default = "@default"; default = "@default";
managed = false;
} }
colormapmid colormapmid
{ {
type = 2; type = 2;
default = "@default"; default = "@default";
managed = false;
} }
colormapbottom colormapbottom
{ {
type = 2; type = 2;
default = "@default"; default = "@default";
managed = false;
} }
portal_ceil_overlaytype portal_ceil_overlaytype
{ {
type = 2; type = 2;
default = "none"; default = "none";
managed = true;
} }
alphaceiling alphaceiling
{ {
type = 1; type = 1;
default = 1; default = 1.0;
} }
portal_floor_overlaytype portal_floor_overlaytype
{ {
type = 2; type = 2;
default = "none"; default = "none";
managed = true;
} }
alphafloor alphafloor
{ {
type = 1; type = 1;
default = 1; default = 1.0;
} }
portalfloor portalfloor
{ {
type = 0; type = 0;
...@@ -250,7 +375,9 @@ floorterain, ceilingterrain, floor/ceiling panning/rotation */ ...@@ -250,7 +375,9 @@ floorterain, ceilingterrain, floor/ceiling panning/rotation */
consolidateeventlines = true; consolidateeventlines = true;
} }
} }
managed = false;
} }
portalceiling portalceiling
{ {
type = 0; type = 0;
...@@ -270,7 +397,8 @@ floorterain, ceilingterrain, floor/ceiling panning/rotation */ ...@@ -270,7 +397,8 @@ floorterain, ceilingterrain, floor/ceiling panning/rotation */
modify = "abs"; modify = "abs";
consolidateeventlines = true; consolidateeventlines = true;
} }
} }
managed = false;
} }
floorid floorid
...@@ -293,7 +421,9 @@ floorterain, ceilingterrain, floor/ceiling panning/rotation */ ...@@ -293,7 +421,9 @@ floorterain, ceilingterrain, floor/ceiling panning/rotation */
consolidateeventlines = true; consolidateeventlines = true;
} }
} }
managed = false;
} }
ceilingid ceilingid
{ {
type = 0; type = 0;
...@@ -313,8 +443,10 @@ floorterain, ceilingterrain, floor/ceiling panning/rotation */ ...@@ -313,8 +443,10 @@ floorterain, ceilingterrain, floor/ceiling panning/rotation */
modify = "abs"; modify = "abs";
consolidateeventlines = true; consolidateeventlines = true;
} }
} }
managed = false;
} }
attachfloor attachfloor
{ {
type = 0; type = 0;
...@@ -349,7 +481,9 @@ floorterain, ceilingterrain, floor/ceiling panning/rotation */ ...@@ -349,7 +481,9 @@ floorterain, ceilingterrain, floor/ceiling panning/rotation */
consolidateeventlines = true; consolidateeventlines = true;
} }
} }
managed = false;
} }
attachceiling attachceiling
{ {
type = 0; type = 0;
...@@ -383,37 +517,98 @@ floorterain, ceilingterrain, floor/ceiling panning/rotation */ ...@@ -383,37 +517,98 @@ floorterain, ceilingterrain, floor/ceiling panning/rotation */
modify = "abs"; modify = "abs";
consolidateeventlines = true; consolidateeventlines = true;
} }
} }
managed = false;
} }
scroll_ceil_x scroll_ceil_x
{ {
type = 1; type = 1;
managed = false;
} }
scroll_ceil_y scroll_ceil_y
{ {
type = 1; type = 1;
managed = false;
} }
scroll_ceil_type scroll_ceil_type
{ {
type = 2; type = 2;
default = "none"; default = "none";
tooltip = "Available options: none, visual. Controls whether to scroll the texture. Currently thing transporting is not supported for ceiling scrollers."; tooltip = "Available options: none, visual. Controls whether to scroll the texture. Currently thing transporting is not supported for ceiling scrollers.";
managed = false;
} }
scroll_floor_x scroll_floor_x
{ {
type = 1; type = 1;
managed = false;
} }
scroll_floor_y scroll_floor_y
{ {
type = 1; type = 1;
managed = false;
} }
scroll_floor_type scroll_floor_type
{ {
type = 2; type = 2;
default = "none"; default = "none";
tooltip = "Available options: none, visual, physical or both. Controls whether to scroll the texture and/or transport the things"; tooltip = "Available options: none, visual, physical or both. Controls whether to scroll the texture and/or transport the things";
managed = false;
} }
xpanningceiling
{
type = 1;
default = 0.0;
}
ypanningceiling
{
type = 1;
default = 0.0;
}
xscaleceiling
{
type = 1;
default = 1.0;
}
yscaleceiling
{
type = 1;
default = 1.0;
}
xpanningfloor
{
type = 1;
default = 0.0;
}
xpanningfloor
{
type = 1;
default = 0.0;
}
xscalefloor
{
type = 1;
default = 1.0;
}
yscalefloor
{
type = 1;
default = 1.0;
}
} }
} }
...@@ -703,39 +898,39 @@ enums ...@@ -703,39 +898,39 @@ enums
front_ceiling = "Skew to front-sector ceiling slope"; front_ceiling = "Skew to front-sector ceiling slope";
back_floor = "Skew to back-sector floor slope"; back_floor = "Skew to back-sector floor slope";
back_ceiling = "Skew to back-sector ceiling slope"; back_ceiling = "Skew to back-sector ceiling slope";
} }
} }
// Default thing filters // Default thing filters
// (these are not required, just useful for new users) // (these are not required, just useful for new users)
thingsfilters_udmf thingsfilters_udmf
{ {
filter0 filter0
{ {
name = "Keys only"; name = "Keys only";
category = "keys"; category = "keys";
type = -1; type = -1;
} }
filter1 filter1
{ {
name = "Deathmatch"; name = "Deathmatch";
category = ""; category = "";
type = -1; type = -1;
fields fields
{ {
dm = true; dm = true;
} }
} }
filter2 filter2
{ {
name = "Cooperative"; name = "Cooperative";
category = ""; category = "";
type = -1; type = -1;
fields fields
{ {
coop = true; coop = true;
...@@ -747,55 +942,55 @@ thingsfilters_udmf ...@@ -747,55 +942,55 @@ thingsfilters_udmf
name = "Skill 1"; name = "Skill 1";
category = ""; category = "";
type = -1; type = -1;
fields fields
{ {
skill1 = true; skill1 = true;
} }
} }
filter4 filter4
{ {
name = "Skill 2"; name = "Skill 2";
category = ""; category = "";
type = -1; type = -1;
fields fields
{ {
skill2 = true; skill2 = true;
} }
} }
filter5 filter5
{ {
name = "Skill 3"; name = "Skill 3";
category = ""; category = "";
type = -1; type = -1;
fields fields
{ {
skill3 = true; skill3 = true;
} }
} }
filter6 filter6
{ {
name = "Skill 4"; name = "Skill 4";
category = ""; category = "";
type = -1; type = -1;
fields fields
{ {
skill4 = true; skill4 = true;
} }
} }
filter7 filter7
{ {
name = "Skill 5"; name = "Skill 5";
category = ""; category = "";
type = -1; type = -1;
fields fields
{ {
skill5 = true; skill5 = true;
......
...@@ -107,6 +107,9 @@ mapformat_udmf ...@@ -107,6 +107,9 @@ mapformat_udmf
// Enables support for plane equation slopes // Enables support for plane equation slopes
planeequationsupport = true; planeequationsupport = true;
// Enables support for vertex heights
vertexheightsupport = true;
// Enables setting distinct brightness for floor, ceiling, and walls // Enables setting distinct brightness for floor, ceiling, and walls
distinctfloorandceilingbrightness = true; distinctfloorandceilingbrightness = true;
distinctwallbrightness = false; distinctwallbrightness = false;
......
...@@ -229,20 +229,350 @@ Field data types: ...@@ -229,20 +229,350 @@ Field data types:
*/ */
universalfields universalfields
{ {
sector
{
}
linedef linedef
{ {
alpha
{
type = 1;
default = 1.0;
}
comment
{
type = 2;
default = "";
}
renderstyle
{
type = 2;
default = "";
}
stringarg0
{
type = 2;
default = "";
}
stringarg1
{
type = 2;
default = "";
}
} }
sidedef sidedef
{ {
comment
{
type = 2;
default = "";
}
//light
//{
// type = 0;
// default = 0;
//}
//
//lightabsolute
//{
// type = 3;
// default = false;
//}
//
//light_top
//{
// type = 0;
// default = 0;
//}
//
//lightabsolute_top
//{
// type = 3;
// default = false;
//}
//
//light_mid
//{
// type = 0;
// default = 0;
//}
//
//lightabsolute_mid
//{
// type = 3;
// default = false;
//}
//
//light_bottom
//{
// type = 0;
// default = 0;
//}
//
//lightabsolute_bottom
//{
// type = 3;
// default = false;
//}
offsetx_bottom
{
type = 1;
default = 0.0;
}
offsetx_mid
{
type = 1;
default = 0.0;
}
offsetx_top
{
type = 1;
default = 0.0;
}
offsety_bottom
{
type = 1;
default = 0.0;
}
offsety_mid
{
type = 1;
default = 0.0;
}
offsety_top
{
type = 1;
default = 0.0;
}
//scalex_bottom
//{
// type = 1;
// default = 1.0;
//}
//
//scalex_mid
//{
// type = 1;
// default = 1.0;
//}
//
//scalex_top
//{
// type = 1;
// default = 1.0;
//}
//
//scaley_bottom
//{
// type = 1;
// default = 1.0;
//}
//
//scaley_mid
//{
// type = 1;
// default = 1.0;
//}
//
//scaley_top
//{
// type = 1;
// default = 1.0;
//}
} }
thing thing
{ {
comment
{
type = 2;
default = "";
}
pitch
{
type = 0;
}
roll
{
type = 0;
}
scalex
{
type = 1;
default = 1.0;
}
scaley
{
type = 1;
default = 1.0;
}
stringarg0
{
type = 2;
default = "";
}
stringarg1
{
type = 2;
default = "";
}
}
sector
{
comment
{
type = 2;
default = "";
}
damagetype
{
type = 2;
default = "";
}
gravity
{
type = 1;
default = 1.0;
}
lightcolor
{
type = 0;
default = 0;
}
fadecolor
{
type = 0;
default = 0;
}
lightalpha
{
type = 0;
default = 25;
}
fadealpha
{
type = 0;
default = 25;
}
fadestart
{
type = 0;
default = 0;
}
fadeend
{
type = 0;
default = 31;
}
xpanningfloor
{
type = 1;
default = 0.0;
}
ypanningfloor
{
type = 1;
default = 0.0;
}
rotationfloor
{
type = 1;
default = 0.0;
}
//xscalefloor
//{
// type = 1;
// default = 1.0;
//}
//
//yscalefloor
//{
// type = 1;
// default = 1.0;
//}
lightfloor
{
type = 0;
default = 0;
}
lightfloorabsolute
{
type = 3;
default = false;
}
xpanningceiling
{
type = 1;
default = 0.0;
}
ypanningceiling
{
type = 1;
default = 0.0;
}
rotationceiling
{
type = 1;
default = 0.0;
}
//xscaleceiling
//{
// type = 1;
// default = 1.0;
//}
//
//yscaleceiling
//{
// type = 1;
// default = 1.0;
//}
lightceiling
{
type = 0;
default = 0;
}
lightceilingabsolute
{
type = 3;
default = false;
}
} }
} }
......
...@@ -363,6 +363,9 @@ mapformat_udmf ...@@ -363,6 +363,9 @@ mapformat_udmf
// Enables support for plane equation slopes // Enables support for plane equation slopes
planeequationsupport = true; planeequationsupport = true;
// Enables support for vertex heights
vertexheightsupport = true;
// Enables setting brightness for floor, ceiling, and walls independently from each other // Enables setting brightness for floor, ceiling, and walls independently from each other
distinctfloorandceilingbrightness = true; distinctfloorandceilingbrightness = true;
...@@ -370,6 +373,9 @@ mapformat_udmf ...@@ -370,6 +373,9 @@ mapformat_udmf
// Enabled setting brightness for upper, middle, and lower sidedef independently from each other // Enabled setting brightness for upper, middle, and lower sidedef independently from each other
distinctsidedefpartbrightness = true; distinctsidedefpartbrightness = true;
// Enables support for skewing sidedef textures
sidedeftextureskewing = true;
// Enables multiple tags on sectors // Enables multiple tags on sectors
sectormultitag = true; sectormultitag = true;
......
...@@ -298,38 +298,18 @@ universalfields ...@@ -298,38 +298,18 @@ universalfields
{ {
linedef linedef
{ {
comment alpha
{
type = 2;
default = "";
}
health
{
type = 0;
default = 0;
}
healthgroup
{
type = 0;
default = 0;
}
// Should be moved to flags eventually
damagespecial
{ {
type = 3; type = 1;
default = false; default = 1.0;
} }
// Should be moved to flags eventually arg0str
deathspecial
{ {
type = 3; type = 2;
default = false; default = "";
} }
automapstyle automapstyle
{ {
type = 11; type = 11;
...@@ -351,20 +331,45 @@ universalfields ...@@ -351,20 +331,45 @@ universalfields
12 = "Unexplored secret wall"; 12 = "Unexplored secret wall";
13 = "Portal line"; 13 = "Portal line";
} }
managed = false;
} }
arg0str comment
{ {
type = 2; type = 2;
default = ""; default = "";
} }
// Should be moved to flags eventually
damagespecial
{
type = 3;
default = false;
managed = false;
}
// Should be moved to flags eventually
deathspecial
{
type = 3;
default = false;
managed = false;
}
alpha health
{ {
type = 1; type = 0;
default = 1.0; default = 0;
managed = false;
} }
healthgroup
{
type = 0;
default = 0;
managed = false;
}
locknumber locknumber
{ {
type = 0; type = 0;
...@@ -381,25 +386,35 @@ universalfields ...@@ -381,25 +386,35 @@ universalfields
{ {
type = 0; type = 0;
default = 0; default = 0;
managed = false;
} }
lm_sampledist_top lm_sampledist_top
{ {
type = 0; type = 0;
default = 0; default = 0;
managed = false;
} }
lm_sampledist_mid lm_sampledist_mid
{ {
type = 0; type = 0;
default = 0; default = 0;
managed = false;
} }
lm_sampledist_bot lm_sampledist_bot
{ {
type = 0; type = 0;
default = 0; default = 0;
managed = false;
} }
renderstyle
{
type = 2;
default = "";
}
} }
sidedef sidedef
...@@ -410,10 +425,10 @@ universalfields ...@@ -410,10 +425,10 @@ universalfields
default = ""; default = "";
} }
scalex_mid light
{ {
type = 1; type = 0;
default = 1.0; default = 0;
} }
lightabsolute lightabsolute
...@@ -421,65 +436,65 @@ universalfields ...@@ -421,65 +436,65 @@ universalfields
type = 3; type = 3;
default = false; default = false;
} }
offsetx_top light_top
{
type = 1;
default = 0.0;
}
scalex_bottom
{ {
type = 1; type = 0;
default = 1.0; default = 0;
} }
offsety_bottom lightabsolute_top
{ {
type = 1; type = 3;
default = 0.0; default = false;
} }
offsetx_bottom light_mid
{ {
type = 1; type = 0;
default = 0.0; default = 0;
} }
scaley_bottom lightabsolute_mid
{ {
type = 1; type = 3;
default = 1.0; default = false;
} }
light light_bottom
{ {
type = 0; type = 0;
default = 0; default = 0;
} }
lightabsolute_bottom
{
type = 3;
default = false;
}
offsetx_mid offsetx_bottom
{ {
type = 1; type = 1;
default = 0.0; default = 0.0;
} }
offsety_top offsetx_mid
{ {
type = 1; type = 1;
default = 0.0; default = 0.0;
} }
scaley_top offsetx_top
{ {
type = 1; type = 1;
default = 1.0; default = 0.0;
} }
scaley_mid offsety_bottom
{ {
type = 1; type = 1;
default = 1.0; default = 0.0;
} }
offsety_mid offsety_mid
...@@ -487,47 +502,47 @@ universalfields ...@@ -487,47 +502,47 @@ universalfields
type = 1; type = 1;
default = 0.0; default = 0.0;
} }
scalex_top offsety_top
{ {
type = 1; type = 1;
default = 1.0; default = 0.0;
} }
light_top scalex_bottom
{ {
type = 0; type = 1;
default = 0; default = 1.0;
} }
lightabsolute_top scalex_mid
{ {
type = 3; type = 1;
default = false; default = 1.0;
} }
light_mid scalex_top
{ {
type = 0; type = 1;
default = 0; default = 1.0;
} }
lightabsolute_mid scaley_bottom
{ {
type = 3; type = 1;
default = false; default = 1.0;
} }
light_bottom scaley_mid
{ {
type = 0; type = 1;
default = 0; default = 1.0;
} }
lightabsolute_bottom scaley_top
{ {
type = 3; type = 1;
default = false; default = 1.0;
} }
lm_sampledist lm_sampledist
...@@ -552,165 +567,196 @@ universalfields ...@@ -552,165 +567,196 @@ universalfields
{ {
type = 0; type = 0;
default = 0; default = 0;
} }
}
skew_top
thing
{
comment
{ {
type = 2; type = 11;
default = ""; default = 0;
enum = "skew_options";
managed = false;
} }
skill6 skew_middle
{ {
type = 3; type = 11;
default = false; default = 0;
enum = "skew_options";
managed = false;
} }
skill7 skew_bottom
{ {
type = 3; type = 11;
default = false; default = 0;
enum = "skew_options";
managed = false;
} }
skill8 xscroll
{ {
type = 3; type = 1;
default = false; default = 0.0;
managed = false;
} }
skill9 yscroll
{ {
type = 3; type = 1;
default = false; default = 0.0;
managed = false;
} }
skill10 xscrolltop
{ {
type = 3; type = 1;
default = false; default = 0.0;
managed = false;
} }
skill11 yscrolltop
{ {
type = 3; type = 1;
default = false; default = 0.0;
managed = false;
} }
skill12 xscrollmid
{ {
type = 3; type = 1;
default = false; default = 0.0;
managed = false;
} }
skill13 yscrollmid
{ {
type = 3; type = 1;
default = false; default = 0.0;
managed = false;
} }
skill14 xscrollbottom
{ {
type = 3; type = 1;
default = false; default = 0.0;
managed = false;
}
yscrollbottom
{
type = 1;
default = 0.0;
managed = false;
} }
}
skill15
thing
{
alpha
{ {
type = 3; type = 1;
default = false; default = 1.0;
} }
skill16 arg0str
{ {
type = 3; type = 2;
default = false; default = "";
} }
class6 class6
{ {
type = 3; type = 3;
default = false; default = false;
managed = false;
} }
class7 class7
{ {
type = 3; type = 3;
default = false; default = false;
managed = false;
} }
class8 class8
{ {
type = 3; type = 3;
default = false; default = false;
managed = false;
} }
class9 class9
{ {
type = 3; type = 3;
default = false; default = false;
managed = false;
} }
class10 class10
{ {
type = 3; type = 3;
default = false; default = false;
managed = false;
} }
class11 class11
{ {
type = 3; type = 3;
default = false; default = false;
managed = false;
} }
class12 class12
{ {
type = 3; type = 3;
default = false; default = false;
managed = false;
} }
class13 class13
{ {
type = 3; type = 3;
default = false; default = false;
managed = false;
} }
class14 class14
{ {
type = 3; type = 3;
default = false; default = false;
managed = false;
} }
class15 class15
{ {
type = 3; type = 3;
default = false; default = false;
managed = false;
} }
class16 class16
{ {
type = 3; type = 3;
default = false; default = false;
managed = false;
} }
score comment
{
type = 0;
default = 0;
}
renderstyle
{ {
type = 2; type = 2;
default = ""; default = "";
} }
gravity conversation
{ {
type = 1; type = 0;
default = 0.0; default = 0;
}
fillcolor
{
type = 0;
default = 0;
} }
floatbobphase floatbobphase
...@@ -718,35 +764,57 @@ universalfields ...@@ -718,35 +764,57 @@ universalfields
type = 0; type = 0;
default = -1; default = -1;
} }
alpha gravity
{ {
type = 1; type = 1;
default = 1.0; default = 0.0;
} }
health health
{ {
type = 1; type = 1;
default = 1.0; default = 1.0;
} }
lm_gridsize
{
type = 1;
default = 32.0;
thingtypespecific = true;
managed = false;
}
arg0str lm_sampledistance
{ {
type = 2; type = 0;
default = ""; default = 8;
thingtypespecific = true;
managed = false;
} }
fillcolor lm_suncolor
{
type = 10;
default = 16777215;
thingtypespecific = true;
managed = false;
}
pitch
{ {
type = 0; type = 0;
default = 0;
} }
conversation renderstyle
{
type = 2;
default = "";
}
roll
{ {
type = 0; type = 0;
default = 0;
} }
scalex scalex
...@@ -761,19 +829,86 @@ universalfields ...@@ -761,19 +829,86 @@ universalfields
default = 1.0; default = 1.0;
} }
lm_suncolor score
{ {
type = 10; type = 0;
default = 16777215; default = 0;
thingtypespecific = true;
} }
skill6
{
type = 3;
default = false;
lm_sampledist }
skill7
{ {
type = 0; type = 3;
default = 16; default = false;
thingtypespecific = true; }
skill8
{
type = 3;
default = false;
}
skill9
{
type = 3;
default = false;
managed = false;
}
skill10
{
type = 3;
default = false;
managed = false;
}
skill11
{
type = 3;
default = false;
managed = false;
}
skill12
{
type = 3;
default = false;
managed = false;
}
skill13
{
type = 3;
default = false;
managed = false;
}
skill14
{
type = 3;
default = false;
managed = false;
}
skill15
{
type = 3;
default = false;
managed = false;
} }
skill16
{
type = 3;
default = false;
managed = false;
}
} }
sector sector
...@@ -788,36 +923,42 @@ universalfields ...@@ -788,36 +923,42 @@ universalfields
{ {
type = 0; type = 0;
default = 0; default = 0;
managed = false;
} }
healthceiling healthceiling
{ {
type = 0; type = 0;
default = 0; default = 0;
managed = false;
} }
health3d health3d
{ {
type = 0; type = 0;
default = 0; default = 0;
managed = false;
} }
healthfloorgroup healthfloorgroup
{ {
type = 0; type = 0;
default = 0; default = 0;
managed = false;
} }
healthceilinggroup healthceilinggroup
{ {
type = 0; type = 0;
default = 0; default = 0;
managed = false;
} }
health3dgroup health3dgroup
{ {
type = 0; type = 0;
default = 0; default = 0;
managed = false;
} }
color_ceiling color_ceiling
...@@ -1082,12 +1223,168 @@ universalfields ...@@ -1082,12 +1223,168 @@ universalfields
{ {
type = 0; type = 0;
default = 0; default = 0;
managed = false;
} }
lm_sampledist_ceiling lm_sampledist_ceiling
{ {
type = 0; type = 0;
default = 0; default = 0;
managed = false;
}
lm_dynamic
{
type = 3;
default = false;
managed = false;
}
frictionfactor
{
type = 1;
default = 0.90625;
managed = false;
}
movefactor
{
type = 1;
default = 0.03125;
managed = false;
}
skyfloor
{
type = 2;
default = "";
managed = false;
}
skyceiling
{
type = 2;
default = "";
managed = false;
}
skyfloor2
{
type = 2;
default = "";
managed = false;
}
skyceiling2
{
type = 2;
default = "";
managed = false;
}
colormap
{
type = 2;
default = "";
managed = false;
}
xscrollfloor
{
type = 1;
default = 0.0;
managed = false;
}
yscrollfloor
{
type = 1;
default = 0.0;
managed = false;
}
scrollfloormode
{
type = 12;
default = 0;
enum
{
1 = "Affects textures";
2 = "Affects static objects";
4 = "Affects players";
8 = "Affects monsters";
}
managed = false;
}
xscrollceiling
{
type = 1;
default = 0.0;
managed = false;
}
yscrollceiling
{
type = 1;
default = 0.0;
managed = false;
}
scrollceilingmode
{
type = 12;
default = 0;
enum
{
1 = "Affects textures";
2 = "Affects static objects";
4 = "Affects players";
8 = "Affects monsters";
}
managed = false;
}
xthrust
{
type = 1;
default = 0.0;
managed = false;
}
ythrust
{
type = 1;
default = 0.0;
managed = false;
}
thrustgroup
{
type = 12;
default = 0;
enum
{
1 = "Affects static objects";
2 = "Affects players";
4 = "Affects monsters";
8 = "Affects projectiles";
16 = "Affects WINDTHRUST actors";
}
managed = false;
}
thrustlocation
{
type = 12;
default = 0;
enum
{
1 = "Affects grounded actors";
2 = "Affects airborne actors";
4 = "Affects ceiling actors";
}
managed = false;
} }
} }
} }
...@@ -1607,6 +1904,15 @@ enums ...@@ -1607,6 +1904,15 @@ enums
{ {
0 = "None"; 0 = "None";
} }
skew_options
{
0 = "0: No skewing";
1 = "1: Align to this sidedef's sector floor";
2 = "2: Align to this sidedef's sector ceiling";
3 = "3: Align to other sidedef's sector floor";
4 = "4: Align to other sidedef's sector ceiling";
}
} }
enums_doom enums_doom
......
BUILDTYPE ?= Release BUILDTYPE ?= Release
all: linux ifdef MINGW
TARGET_EXEC := BuilderNative.dll
else
TARGET_EXEC := libBuilderNative.so
endif
BUILD_DIR := ./Build.Native
SRC_DIRS := ./Source/Native
SRCS := $(shell find $(SRC_DIRS) -name '*.cpp' -or -name '*.c' -or -name '*.s')
OBJS := $(SRCS:%=$(BUILD_DIR)/%.o)
DEPS := $(OBJS:.o=.d)
INC_DIRS := ./Source/Native
INC_FLAGS := $(addprefix -I,$(INC_DIRS))
CPPFLAGS_ := $(INC_FLAGS) -MMD -MP
CFLAGS_ = -O2 -g3 -fPIC -Wall -Wextra -Wno-unused-parameter -Werror
ifdef MINGW
CFLAGS_ += -msse2
endif
CXXFLAGS_ = -std=c++14 $(CFLAGS_)
ifdef MINGW
LDFLAGS_ = -lopengl32 -lgdi32 -shared -Wl,--subsystem,windows
else
LDFLAGS_ = -lX11 -ldl -shared
endif
all: builder Build/$(TARGET_EXEC)
$(BUILD_DIR)/%.c.o: %.c
@mkdir -p $(dir $@)
$(CC) $(CPPFLAGS_) $(CPPFLAGS) $(CFLAGS_) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/%.cpp.o: %.cpp
@mkdir -p $(dir $@)
$(CXX) $(CPPFLAGS_) $(CPPFLAGS) $(CXXFLAGS_) $(CXXFLAGS) -c $< -o $@
$(BUILD_DIR)/$(TARGET_EXEC): $(OBJS)
$(CXX) $(OBJS) $(LDFLAGS_) $(LDFLAGS) -o $@
Build/$(TARGET_EXEC): $(BUILD_DIR)/$(TARGET_EXEC)
cp $< $@
.PHONY: clean
clean:
-rm --force --recursive $(BUILD_DIR)/Source $(BUILD_DIR)/$(TARGET_EXEC) $(BUILD_DIR)/builder $(BUILD_DIR)/Builder.exe Build/libBuilderNative.so
run: run:
cd Build && mono Builder.exe cd Build && mono Builder.exe
...@@ -10,13 +62,19 @@ linux: builder native ...@@ -10,13 +62,19 @@ linux: builder native
mac: builder nativemac mac: builder nativemac
builder: builder: $(BUILD_DIR)/Builder.exe Build/builder
$(BUILD_DIR)/Builder.exe: BuilderMono.sln Build/builder
msbuild /nologo /verbosity:minimal -p:Configuration=$(BUILDTYPE) BuilderMono.sln msbuild /nologo /verbosity:minimal -p:Configuration=$(BUILDTYPE) BuilderMono.sln
Build/builder:
cp builder.sh Build/builder cp builder.sh Build/builder
chmod +x Build/builder chmod +x Build/builder
nativemac: nativemac:
g++ -std=c++14 -O2 --shared -g3 -o Build/libBuilderNative.so -fPIC -I Source/Native Source/Native/*.cpp Source/Native/OpenGL/*.cpp Source/Native/OpenGL/gl_load/*.c -ldl $(CXX) -std=c++14 -O2 --shared -g3 -o Build/libBuilderNative.so -fPIC -I Source/Native Source/Native/*.cpp Source/Native/OpenGL/*.cpp Source/Native/OpenGL/gl_load/*.c -ldl
native: native:
g++ -std=c++14 -O2 --shared -g3 -o Build/libBuilderNative.so -fPIC -I Source/Native Source/Native/*.cpp Source/Native/OpenGL/*.cpp Source/Native/OpenGL/gl_load/*.c -lX11 -ldl $(CXX) -std=c++14 -O2 --shared -g3 -o Build/libBuilderNative.so -fPIC -I Source/Native Source/Native/*.cpp Source/Native/OpenGL/*.cpp Source/Native/OpenGL/gl_load/*.c -lX11 -ldl
-include $(DEPS)
...@@ -17,7 +17,7 @@ AppVersion={#UDB_GetVersionString} ({#UDB_arch}) ...@@ -17,7 +17,7 @@ AppVersion={#UDB_GetVersionString} ({#UDB_arch})
AppPublisher=ZZYZX AppPublisher=ZZYZX
AppPublisherURL=https://forum.zdoom.org/memberlist.php?mode=viewprofile&u=7527 AppPublisherURL=https://forum.zdoom.org/memberlist.php?mode=viewprofile&u=7527
AppSupportURL=https://forum.zdoom.org/viewtopic.php?f=232&t=66745 AppSupportURL=https://forum.zdoom.org/viewtopic.php?f=232&t=66745
AppUpdatesURL=https://devbuilds.drdteam.org/ultimatedoombuilder/ AppUpdatesURL=https://ultimatedoombuilder.github.io/
DefaultDirName={userpf}\Ultimate Doom Builder DefaultDirName={userpf}\Ultimate Doom Builder
DefaultGroupName=Ultimate Doom Builder DefaultGroupName=Ultimate Doom Builder
AllowNoIcons=true AllowNoIcons=true
......
...@@ -247,6 +247,7 @@ ...@@ -247,6 +247,7 @@
<Compile Include="Dehacked\DehackedFrame.cs" /> <Compile Include="Dehacked\DehackedFrame.cs" />
<Compile Include="Dehacked\DehackedParser.cs" /> <Compile Include="Dehacked\DehackedParser.cs" />
<Compile Include="Dehacked\DehackedThing.cs" /> <Compile Include="Dehacked\DehackedThing.cs" />
<Compile Include="General\AutoSaver.cs" />
<Compile Include="General\Hasher.cs" /> <Compile Include="General\Hasher.cs" />
<Compile Include="General\SHA256Hash.cs" /> <Compile Include="General\SHA256Hash.cs" />
<Compile Include="General\ToastManager.cs" /> <Compile Include="General\ToastManager.cs" />
...@@ -1483,7 +1484,6 @@ ...@@ -1483,7 +1484,6 @@
<None Include="Resources\PuzzlePiece.png" /> <None Include="Resources\PuzzlePiece.png" />
<None Include="Resources\Search.png" /> <None Include="Resources\Search.png" />
<None Include="Resources\SnapVerts.png" /> <None Include="Resources\SnapVerts.png" />
<EmbeddedResource Include="Resources\UDMF_UI.cfg" />
<None Include="Resources\Unlink.png" /> <None Include="Resources\Unlink.png" />
<None Include="Resources\Unpin.png" /> <None Include="Resources\Unpin.png" />
<None Include="Resources\Pin.png" /> <None Include="Resources\Pin.png" />
......
...@@ -239,6 +239,7 @@ ...@@ -239,6 +239,7 @@
<Compile Include="Data\FileImage.cs" /> <Compile Include="Data\FileImage.cs" />
<Compile Include="Data\FlatImage.cs" /> <Compile Include="Data\FlatImage.cs" />
<Compile Include="Data\ImageLoadState.cs" /> <Compile Include="Data\ImageLoadState.cs" />
<Compile Include="General\AutoSaver.cs" />
<Compile Include="General\Hasher.cs" /> <Compile Include="General\Hasher.cs" />
<Compile Include="General\SHA256Hash.cs" /> <Compile Include="General\SHA256Hash.cs" />
<Compile Include="General\ToastManager.cs" /> <Compile Include="General\ToastManager.cs" />
...@@ -1461,7 +1462,6 @@ ...@@ -1461,7 +1462,6 @@
<None Include="Resources\PuzzlePiece.png" /> <None Include="Resources\PuzzlePiece.png" />
<None Include="Resources\Search.png" /> <None Include="Resources\Search.png" />
<None Include="Resources\SnapVerts.png" /> <None Include="Resources\SnapVerts.png" />
<EmbeddedResource Include="Resources\UDMF_UI.cfg" />
<None Include="Resources\Unlink.png" /> <None Include="Resources\Unlink.png" />
<None Include="Resources\Unpin.png" /> <None Include="Resources\Unpin.png" />
<None Include="Resources\Pin.png" /> <None Include="Resources\Pin.png" />
......
...@@ -47,6 +47,13 @@ namespace CodeImp.DoomBuilder.Config ...@@ -47,6 +47,13 @@ namespace CodeImp.DoomBuilder.Config
} }
} }
public enum SkewStyle
{
None,
GZDoom,
EternityEngine
}
public class GameConfiguration public class GameConfiguration
{ {
#region ================== Constants #region ================== Constants
...@@ -113,6 +120,7 @@ namespace CodeImp.DoomBuilder.Config ...@@ -113,6 +120,7 @@ namespace CodeImp.DoomBuilder.Config
private readonly bool localsidedeftextureoffsets; //MaxW private readonly bool localsidedeftextureoffsets; //MaxW
private readonly bool effect3dfloorsupport; private readonly bool effect3dfloorsupport;
private readonly bool planeequationsupport; private readonly bool planeequationsupport;
private readonly bool vertexheightsupport;
private readonly bool distinctfloorandceilingbrightness; private readonly bool distinctfloorandceilingbrightness;
private readonly bool distinctwallbrightness; private readonly bool distinctwallbrightness;
private readonly bool distinctsidedefpartbrightness; private readonly bool distinctsidedefpartbrightness;
...@@ -229,6 +237,9 @@ namespace CodeImp.DoomBuilder.Config ...@@ -229,6 +237,9 @@ namespace CodeImp.DoomBuilder.Config
// Dehacked // Dehacked
private DehackedData dehackeddata; private DehackedData dehackeddata;
// Skew style
private SkewStyle skewstyle;
#endregion #endregion
#region ================== Properties #region ================== Properties
...@@ -306,6 +317,7 @@ namespace CodeImp.DoomBuilder.Config ...@@ -306,6 +317,7 @@ namespace CodeImp.DoomBuilder.Config
public bool UseLocalSidedefTextureOffsets { get { return localsidedeftextureoffsets; } } //MaxW public bool UseLocalSidedefTextureOffsets { get { return localsidedeftextureoffsets; } } //MaxW
public bool Effect3DFloorSupport { get { return effect3dfloorsupport; } } public bool Effect3DFloorSupport { get { return effect3dfloorsupport; } }
public bool PlaneEquationSupport { get { return planeequationsupport; } } public bool PlaneEquationSupport { get { return planeequationsupport; } }
public bool VertexHeightSupport { get { return vertexheightsupport; } }
public bool DistinctFloorAndCeilingBrightness { get { return distinctfloorandceilingbrightness; } } public bool DistinctFloorAndCeilingBrightness { get { return distinctfloorandceilingbrightness; } }
public bool DistinctWallBrightness { get { return distinctwallbrightness; } } public bool DistinctWallBrightness { get { return distinctwallbrightness; } }
public bool DistinctSidedefPartBrightness { get { return distinctsidedefpartbrightness; } } public bool DistinctSidedefPartBrightness { get { return distinctsidedefpartbrightness; } }
...@@ -333,6 +345,7 @@ namespace CodeImp.DoomBuilder.Config ...@@ -333,6 +345,7 @@ namespace CodeImp.DoomBuilder.Config
public List<FlagTranslation> ThingFlagsTranslation { get { return thingflagstranslation; } } public List<FlagTranslation> ThingFlagsTranslation { get { return thingflagstranslation; } }
public Dictionary<string, ThingFlagsCompareGroup> ThingFlagsCompare { get { return thingflagscompare; } } //mxd public Dictionary<string, ThingFlagsCompareGroup> ThingFlagsCompare { get { return thingflagscompare; } } //mxd
public Dictionary<string, string> ThingRenderStyles { get { return thingrenderstyles; } } //mxd public Dictionary<string, string> ThingRenderStyles { get { return thingrenderstyles; } } //mxd
public IReadOnlyDictionary<int, ThingTypeInfo> ThingTypes { get { return things; } }
// Linedefs // Linedefs
public IDictionary<string, string> LinedefFlags { get { return linedefflags; } } public IDictionary<string, string> LinedefFlags { get { return linedefflags; } }
...@@ -401,6 +414,9 @@ namespace CodeImp.DoomBuilder.Config ...@@ -401,6 +414,9 @@ namespace CodeImp.DoomBuilder.Config
// Dehacked // Dehacked
public DehackedData DehackedData { get { return dehackeddata; } } public DehackedData DehackedData { get { return dehackeddata; } }
// Skew style
public SkewStyle SkewStyle { get { return skewstyle; } }
#endregion #endregion
...@@ -499,13 +515,14 @@ namespace CodeImp.DoomBuilder.Config ...@@ -499,13 +515,14 @@ namespace CodeImp.DoomBuilder.Config
localsidedeftextureoffsets = (cfg.ReadSetting("localsidedeftextureoffsets", false)); //MaxW localsidedeftextureoffsets = (cfg.ReadSetting("localsidedeftextureoffsets", false)); //MaxW
effect3dfloorsupport = cfg.ReadSetting("effect3dfloorsupport", false); effect3dfloorsupport = cfg.ReadSetting("effect3dfloorsupport", false);
planeequationsupport = cfg.ReadSetting("planeequationsupport", false); planeequationsupport = cfg.ReadSetting("planeequationsupport", false);
vertexheightsupport = cfg.ReadSetting("vertexheightsupport", false);
sidedeftextureskewing = cfg.ReadSetting("sidedeftextureskewing", false); sidedeftextureskewing = cfg.ReadSetting("sidedeftextureskewing", false);
distinctfloorandceilingbrightness = cfg.ReadSetting("distinctfloorandceilingbrightness", false); distinctfloorandceilingbrightness = cfg.ReadSetting("distinctfloorandceilingbrightness", false);
distinctwallbrightness = cfg.ReadSetting("distinctwallbrightness", false); distinctwallbrightness = cfg.ReadSetting("distinctwallbrightness", false);
distinctsidedefpartbrightness = cfg.ReadSetting("distinctsidedefpartbrightness", false); distinctsidedefpartbrightness = cfg.ReadSetting("distinctsidedefpartbrightness", false);
sectormultitag = cfg.ReadSetting("sectormultitag", false); sectormultitag = cfg.ReadSetting("sectormultitag", false);
for (int i = 0; i < Linedef.NUM_ARGS; i++) makedoorargs[i] = cfg.ReadSetting("makedoorarg" + i.ToString(CultureInfo.InvariantCulture), 0); for (int i = 0; i < Linedef.NUM_ARGS; i++) makedoorargs[i] = cfg.ReadSetting("makedoorarg" + i.ToString(CultureInfo.InvariantCulture), 0);
maxcolormapalpha = cfg.ReadSetting("maxcolormapalpha", 25); maxcolormapalpha = cfg.ReadSetting("maxcolormapalpha", 25); //TODO: update to 255
numbrightnesslevels = cfg.ReadSetting("numbrightnesslevels", 32); numbrightnesslevels = cfg.ReadSetting("numbrightnesslevels", 32);
for (int i = 0; i < makedoorargs.Length; i++) makedoorargs[i] = cfg.ReadSetting("makedoorarg" + i.ToString(CultureInfo.InvariantCulture), 0); for (int i = 0; i < makedoorargs.Length; i++) makedoorargs[i] = cfg.ReadSetting("makedoorarg" + i.ToString(CultureInfo.InvariantCulture), 0);
soundsupport = cfg.ReadSetting("soundsupport", true); soundsupport = cfg.ReadSetting("soundsupport", true);
...@@ -658,6 +675,16 @@ namespace CodeImp.DoomBuilder.Config ...@@ -658,6 +675,16 @@ namespace CodeImp.DoomBuilder.Config
// Dehacked // Dehacked
dehackeddata = new DehackedData(cfg, "dehacked"); dehackeddata = new DehackedData(cfg, "dehacked");
// Determine skew style
skewstyle = SkewStyle.None;
if (sidedeftextureskewing)
{
if (sidedeffields.Any(lf => lf.Name == "skew_top" || lf.Name == "skew_middle" || lf.Name == "skew_bottom"))
skewstyle = SkewStyle.GZDoom;
else if (sidedeffields.Any(lf => lf.Name == "skew_top_type" || lf.Name == "skew_middle_type" || lf.Name == "skew_bottom_type"))
skewstyle = SkewStyle.EternityEngine;
}
} }
// Destructor // Destructor
...@@ -1429,7 +1456,58 @@ namespace CodeImp.DoomBuilder.Config ...@@ -1429,7 +1456,58 @@ namespace CodeImp.DoomBuilder.Config
return supported; return supported;
} }
/// <summary>
/// Checks if a MapElement type has a UDMF field or flag defined.
/// </summary>
/// <typeparam name="T">Type inherited from MapElement</typeparam>
/// <param name="name">Name of the UDMF field or flag</param>
/// <returns>true if the field or flag exists, false if it doesn't</returns>
public bool HasUniversalFieldOrFlag<T>(string name) where T : MapElement
{
Type type = typeof(T);
List<UniversalFieldInfo> ufi;
Dictionary<string, string> flags;
if (type == typeof(Thing))
{
ufi = thingfields;
flags = thingflags;
}
else if (type == typeof(Linedef))
{
ufi = linedeffields;
flags = linedefflags;
}
else if (type == typeof(Sidedef))
{
ufi = sidedeffields;
flags = sidedefflags;
}
else if (type == typeof(Sector))
{
ufi = sectorfields;
flags = sectorflags;
}
else if (type == typeof(Vertex))
{
ufi = vertexfields;
flags = new Dictionary<string, string>(); // Vertices don't have flags
}
else
throw new NotSupportedException("Unsupported MapElement type: " + type.Name);
// Check for regular UDMF fields
if (ufi.Where(f => f.Name == name).FirstOrDefault() != null)
return true;
// Check for flags
if (flags.ContainsKey(name))
return true;
return false;
}
#endregion #endregion
} }
} }
...@@ -165,6 +165,11 @@ namespace CodeImp.DoomBuilder.Config ...@@ -165,6 +165,11 @@ namespace CodeImp.DoomBuilder.Config
private int defaultthingtype = 1; private int defaultthingtype = 1;
private double defaultthingangle; private double defaultthingangle;
private List<string> defaultthingflags; private List<string> defaultthingflags;
// Autosave
private bool autosave;
private int autosavecount;
private int autosaveinterval;
#endregion #endregion
...@@ -308,6 +313,11 @@ namespace CodeImp.DoomBuilder.Config ...@@ -308,6 +313,11 @@ namespace CodeImp.DoomBuilder.Config
public int DefaultThingType { get { return defaultthingtype; } set { defaultthingtype = value; } } public int DefaultThingType { get { return defaultthingtype; } set { defaultthingtype = value; } }
public double DefaultThingAngle { get { return defaultthingangle; } set { defaultthingangle = value; } } public double DefaultThingAngle { get { return defaultthingangle; } set { defaultthingangle = value; } }
// Autosave
public bool Autosave { get { return autosave; } internal set { autosave = value; } }
public int AutosaveCount { get { return autosavecount; } internal set { autosavecount = value; } }
public int AutosaveInterval { get { return autosaveinterval; } internal set { autosaveinterval = value; } }
#endregion #endregion
#region ================== Constructor / Disposer #region ================== Constructor / Disposer
...@@ -471,6 +481,11 @@ namespace CodeImp.DoomBuilder.Config ...@@ -471,6 +481,11 @@ namespace CodeImp.DoomBuilder.Config
} }
} }
// Autosave
autosave = cfg.ReadSetting("autosave", true);
autosavecount = cfg.ReadSetting("autosavecount", 5);
autosaveinterval = cfg.ReadSetting("autosaveinterval", 5);
// Success // Success
return true; return true;
} }
...@@ -605,6 +620,11 @@ namespace CodeImp.DoomBuilder.Config ...@@ -605,6 +620,11 @@ namespace CodeImp.DoomBuilder.Config
for (int i = 0; i < 16; i++) for (int i = 0; i < 16; i++)
cfg.WriteSetting("colordialogcustomcolors.color" + i, colordialogcustomcolors[i]); cfg.WriteSetting("colordialogcustomcolors.color" + i, colordialogcustomcolors[i]);
// Autosave
cfg.WriteSetting("autosave", autosave);
cfg.WriteSetting("autosavecount", autosavecount);
cfg.WriteSetting("autosaveinterval", autosaveinterval);
// Save settings configuration // Save settings configuration
General.WriteLogLine("Saving program configuration to \"" + filepathname + "\"..."); General.WriteLogLine("Saving program configuration to \"" + filepathname + "\"...");
cfg.SaveConfiguration(filepathname); cfg.SaveConfiguration(filepathname);
......
...@@ -61,6 +61,7 @@ namespace CodeImp.DoomBuilder.Config ...@@ -61,6 +61,7 @@ namespace CodeImp.DoomBuilder.Config
private int type; private int type;
private object defaultvalue; private object defaultvalue;
private bool thingtypespecific; private bool thingtypespecific;
private bool managed;
private EnumList enumlist; private EnumList enumlist;
private Dictionary<string, UDMFFieldAssociation> associations; private Dictionary<string, UDMFFieldAssociation> associations;
...@@ -72,6 +73,7 @@ namespace CodeImp.DoomBuilder.Config ...@@ -72,6 +73,7 @@ namespace CodeImp.DoomBuilder.Config
public int Type { get { return type; } } public int Type { get { return type; } }
public object Default { get { return defaultvalue; } } public object Default { get { return defaultvalue; } }
public bool ThingTypeSpecific { get { return thingtypespecific; } } public bool ThingTypeSpecific { get { return thingtypespecific; } }
public bool Managed { get { return managed; } }
public EnumList Enum { get { return enumlist; } } public EnumList Enum { get { return enumlist; } }
public Dictionary<string, UDMFFieldAssociation> Associations { get { return associations; } } public Dictionary<string, UDMFFieldAssociation> Associations { get { return associations; } }
...@@ -92,6 +94,7 @@ namespace CodeImp.DoomBuilder.Config ...@@ -92,6 +94,7 @@ namespace CodeImp.DoomBuilder.Config
type = cfg.ReadSetting(setting + ".type", int.MinValue); type = cfg.ReadSetting(setting + ".type", int.MinValue);
defaultvalue = cfg.ReadSettingObject(setting + ".default", null); defaultvalue = cfg.ReadSettingObject(setting + ".default", null);
thingtypespecific = cfg.ReadSetting(setting + ".thingtypespecific", false); thingtypespecific = cfg.ReadSetting(setting + ".thingtypespecific", false);
managed = cfg.ReadSetting(setting + ".managed", true);
// Read enum // Read enum
object enumsetting = cfg.ReadSettingObject(setting + ".enum", null); object enumsetting = cfg.ReadSettingObject(setting + ".enum", null);
......
...@@ -107,7 +107,7 @@ namespace CodeImp.DoomBuilder.Controls ...@@ -107,7 +107,7 @@ namespace CodeImp.DoomBuilder.Controls
for (int i = 0; i < stringargs.Length; i++) for (int i = 0; i < stringargs.Length; i++)
if (!string.IsNullOrEmpty(stringargs[i].Text)) if (!string.IsNullOrEmpty(stringargs[i].Text))
UniFields.SetString(l.Fields, "stringarg" + i, stringargs[i].Text, string.Empty); l.Fields["stringarg" + i] = new UniValue(UniversalType.String, stringargs[i].Text);
} }
public void Apply(Thing t, int step) public void Apply(Thing t, int step)
...@@ -117,7 +117,7 @@ namespace CodeImp.DoomBuilder.Controls ...@@ -117,7 +117,7 @@ namespace CodeImp.DoomBuilder.Controls
for (int i = 0; i < stringargs.Length; i++) for (int i = 0; i < stringargs.Length; i++)
if (!string.IsNullOrEmpty(stringargs[i].Text)) if (!string.IsNullOrEmpty(stringargs[i].Text))
UniFields.SetString(t.Fields, "stringarg" + i, stringargs[i].Text, string.Empty); t.Fields["stringarg" + i] = new UniValue(UniversalType.String, stringargs[i].Text);
} }
#endregion #endregion
......
...@@ -130,8 +130,10 @@ namespace CodeImp.DoomBuilder.Controls ...@@ -130,8 +130,10 @@ namespace CodeImp.DoomBuilder.Controls
// Add all fields // Add all fields
foreach(UniversalFieldInfo uf in list) foreach(UniversalFieldInfo uf in list)
{ {
if(uifields.ContainsKey(uf.Name)) continue; //mxd //if(uifields.ContainsKey(uf.Name)) continue; //mxd
fieldslist.Rows.Add(new FieldsEditorRow(fieldslist, uf)); // Only add fields that are not managed by the UI
if(!uf.Managed)
fieldslist.Rows.Add(new FieldsEditorRow(fieldslist, uf));
} }
// Sort fields // Sort fields
......
...@@ -47,6 +47,8 @@ namespace CodeImp.DoomBuilder.Controls ...@@ -47,6 +47,8 @@ namespace CodeImp.DoomBuilder.Controls
this.panelLightColor = new System.Windows.Forms.Panel(); this.panelLightColor = new System.Windows.Forms.Panel();
this.labelFade = new System.Windows.Forms.Label(); this.labelFade = new System.Windows.Forms.Label();
this.labelLight = new System.Windows.Forms.Label(); this.labelLight = new System.Windows.Forms.Label();
this.lightalpha = new System.Windows.Forms.Label();
this.fadealpha = new System.Windows.Forms.Label();
this.brightness = new System.Windows.Forms.Label(); this.brightness = new System.Windows.Forms.Label();
this.height = new System.Windows.Forms.Label(); this.height = new System.Windows.Forms.Label();
this.tag = new System.Windows.Forms.Label(); this.tag = new System.Windows.Forms.Label();
...@@ -221,6 +223,8 @@ namespace CodeImp.DoomBuilder.Controls ...@@ -221,6 +223,8 @@ namespace CodeImp.DoomBuilder.Controls
this.sectorinfo.Controls.Add(this.panelLightColor); this.sectorinfo.Controls.Add(this.panelLightColor);
this.sectorinfo.Controls.Add(this.labelFade); this.sectorinfo.Controls.Add(this.labelFade);
this.sectorinfo.Controls.Add(this.labelLight); this.sectorinfo.Controls.Add(this.labelLight);
this.sectorinfo.Controls.Add(this.lightalpha);
this.sectorinfo.Controls.Add(this.fadealpha);
this.sectorinfo.Controls.Add(this.brightness); this.sectorinfo.Controls.Add(this.brightness);
this.sectorinfo.Controls.Add(label13); this.sectorinfo.Controls.Add(label13);
this.sectorinfo.Controls.Add(this.height); this.sectorinfo.Controls.Add(this.height);
...@@ -244,7 +248,7 @@ namespace CodeImp.DoomBuilder.Controls ...@@ -244,7 +248,7 @@ namespace CodeImp.DoomBuilder.Controls
// panelFadeColor // panelFadeColor
// //
this.panelFadeColor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.panelFadeColor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panelFadeColor.Location = new System.Drawing.Point(260, 50); this.panelFadeColor.Location = new System.Drawing.Point(230, 50);
this.panelFadeColor.Name = "panelFadeColor"; this.panelFadeColor.Name = "panelFadeColor";
this.panelFadeColor.Size = new System.Drawing.Size(20, 12); this.panelFadeColor.Size = new System.Drawing.Size(20, 12);
this.panelFadeColor.TabIndex = 21; this.panelFadeColor.TabIndex = 21;
...@@ -252,14 +256,14 @@ namespace CodeImp.DoomBuilder.Controls ...@@ -252,14 +256,14 @@ namespace CodeImp.DoomBuilder.Controls
// panelLightColor // panelLightColor
// //
this.panelLightColor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.panelLightColor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panelLightColor.Location = new System.Drawing.Point(260, 35); this.panelLightColor.Location = new System.Drawing.Point(230, 35);
this.panelLightColor.Name = "panelLightColor"; this.panelLightColor.Name = "panelLightColor";
this.panelLightColor.Size = new System.Drawing.Size(20, 12); this.panelLightColor.Size = new System.Drawing.Size(20, 12);
this.panelLightColor.TabIndex = 20; this.panelLightColor.TabIndex = 20;
// //
// labelFade // labelFade
// //
this.labelFade.Location = new System.Drawing.Point(183, 49); this.labelFade.Location = new System.Drawing.Point(158, 49);
this.labelFade.Name = "labelFade"; this.labelFade.Name = "labelFade";
this.labelFade.Size = new System.Drawing.Size(70, 14); this.labelFade.Size = new System.Drawing.Size(70, 14);
this.labelFade.TabIndex = 19; this.labelFade.TabIndex = 19;
...@@ -268,13 +272,29 @@ namespace CodeImp.DoomBuilder.Controls ...@@ -268,13 +272,29 @@ namespace CodeImp.DoomBuilder.Controls
// //
// labelLight // labelLight
// //
this.labelLight.Location = new System.Drawing.Point(183, 34); this.labelLight.Location = new System.Drawing.Point(158, 34);
this.labelLight.Name = "labelLight"; this.labelLight.Name = "labelLight";
this.labelLight.Size = new System.Drawing.Size(70, 14); this.labelLight.Size = new System.Drawing.Size(70, 14);
this.labelLight.TabIndex = 18; this.labelLight.TabIndex = 18;
this.labelLight.Text = "Light:"; this.labelLight.Text = "Light:";
this.labelLight.TextAlign = System.Drawing.ContentAlignment.TopRight; this.labelLight.TextAlign = System.Drawing.ContentAlignment.TopRight;
// //
// lightalpha
//
this.lightalpha.Location = new System.Drawing.Point(257, 34);
this.lightalpha.Name = "lightalpha";
this.lightalpha.Size = new System.Drawing.Size(38, 14);
this.lightalpha.TabIndex = 18;
this.lightalpha.Text = "0";
//
// fadealpha
//
this.fadealpha.Location = new System.Drawing.Point(257, 49);
this.fadealpha.Name = "fadealpha";
this.fadealpha.Size = new System.Drawing.Size(38, 14);
this.fadealpha.TabIndex = 18;
this.fadealpha.Text = "0";
//
// brightness // brightness
// //
this.brightness.Location = new System.Drawing.Point(257, 64); this.brightness.Location = new System.Drawing.Point(257, 64);
...@@ -667,6 +687,8 @@ namespace CodeImp.DoomBuilder.Controls ...@@ -667,6 +687,8 @@ namespace CodeImp.DoomBuilder.Controls
private System.Windows.Forms.Panel panelLightColor; private System.Windows.Forms.Panel panelLightColor;
private System.Windows.Forms.Label labelFade; private System.Windows.Forms.Label labelFade;
private System.Windows.Forms.Label labelLight; private System.Windows.Forms.Label labelLight;
private System.Windows.Forms.Label lightalpha;
private System.Windows.Forms.Label fadealpha;
private System.Windows.Forms.GroupBox flagsPanel; private System.Windows.Forms.GroupBox flagsPanel;
private CodeImp.DoomBuilder.Controls.TransparentListView flags; private CodeImp.DoomBuilder.Controls.TransparentListView flags;
private System.Windows.Forms.GroupBox triggerPanel; private System.Windows.Forms.GroupBox triggerPanel;
......
...@@ -162,8 +162,14 @@ namespace CodeImp.DoomBuilder.Controls ...@@ -162,8 +162,14 @@ namespace CodeImp.DoomBuilder.Controls
labelFade.Enabled = false; labelFade.Enabled = false;
} }
lightalpha.Text = s.Fields.GetValue("lightalpha", General.Map.Config.MaxColormapAlpha).ToString();
fadealpha.Text = s.Fields.GetValue("fadealpha", General.Map.Config.MaxColormapAlpha).ToString();
lightalpha.Enabled = s.Fields.ContainsKey("lightalpha");
fadealpha.Enabled = s.Fields.ContainsKey("fadealpha");
//light //light
if(s.Fields.ContainsKey("lightceiling") || s.Fields.ContainsKey("lightceilingabsolute")) if (s.Fields.ContainsKey("lightceiling") || s.Fields.ContainsKey("lightceilingabsolute"))
{ {
showExtededCeilingInfo = true; showExtededCeilingInfo = true;
ceilingLight.Enabled = true; ceilingLight.Enabled = true;
......
...@@ -138,14 +138,6 @@ namespace CodeImp.DoomBuilder.Controls ...@@ -138,14 +138,6 @@ namespace CodeImp.DoomBuilder.Controls
{ {
reset.Visible = (cbAbsolute.CheckState != CheckState.Unchecked || light.GetResult(0) != 0); reset.Visible = (cbAbsolute.CheckState != CheckState.Unchecked || light.GetResult(0) != 0);
if (!General.Map.Config.DistinctSidedefPartBrightness)
{
lbLight.Enabled = false;
light.Enabled = false;
cbAbsolute.Enabled = false;
reset.Enabled = false;
}
preventchanges = false; preventchanges = false;
} }
......
...@@ -264,6 +264,9 @@ namespace CodeImp.DoomBuilder.Editing ...@@ -264,6 +264,9 @@ namespace CodeImp.DoomBuilder.Editing
// This should be called by global actions (i.e. that are not part of an editing mode) when they changed map elements, // This should be called by global actions (i.e. that are not part of an editing mode) when they changed map elements,
// so that the mode can react to it (for example by rebuilding a blockmap) // so that the mode can react to it (for example by rebuilding a blockmap)
public virtual void OnMapElementsChanged() { } public virtual void OnMapElementsChanged() { }
public virtual bool OnAutoSaveBegin() { return attributes.Volatile ? false : true; } // Called before autosave is done. Returns false if autosave should not be done. By default volatile modes prevent autosave
public virtual void OnAutoSaveEnd() { }
#endregion #endregion
} }
......
...@@ -165,7 +165,7 @@ namespace CodeImp.DoomBuilder.Editing ...@@ -165,7 +165,7 @@ namespace CodeImp.DoomBuilder.Editing
internal void SetGridSize(double size) internal void SetGridSize(double size)
{ {
//mxd. Bad things happen when size <= 0 //mxd. Bad things happen when size <= 0
size = Math.Max(size, ((General.Map != null && General.Map.UDMF) ? MINIMUM_GRID_SIZE_UDMF : MINIMUM_GRID_SIZE)); size = Math.Max(size, MINIMUM_GRID_SIZE); // ((General.Map != null && General.Map.UDMF) ? MINIMUM_GRID_SIZE_UDMF : MINIMUM_GRID_SIZE));
// Change grid // Change grid
gridsizef = size; gridsizef = size;
...@@ -309,7 +309,7 @@ namespace CodeImp.DoomBuilder.Editing ...@@ -309,7 +309,7 @@ namespace CodeImp.DoomBuilder.Editing
internal void DecreaseGrid() internal void DecreaseGrid()
{ {
//mxd. Not lower than 0.125 in UDMF or 1 otherwise //mxd. Not lower than 0.125 in UDMF or 1 otherwise
float preminsize = (General.Map.UDMF ? MINIMUM_GRID_SIZE_UDMF * 2 : MINIMUM_GRID_SIZE * 2); float preminsize = MINIMUM_GRID_SIZE * 2; // (General.Map.UDMF ? MINIMUM_GRID_SIZE_UDMF * 2 : MINIMUM_GRID_SIZE * 2);
if(gridsizef >= preminsize) if(gridsizef >= preminsize)
{ {
//mxd. Disable automatic grid resizing //mxd. Disable automatic grid resizing
......
#region ================== Copyright (c) 2023 Boris Iwanski
/*
* This program is free software: you can redistribute it and/or modify
*
* it under the terms of the GNU General Public License as published by
*
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
*
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
*
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.If not, see<http://www.gnu.org/licenses/>.
*/
#endregion
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CodeImp.DoomBuilder
{
internal enum AutosaveResult
{
Success,
Error,
NoFileName
}
internal class AutoSaver
{
private static long lasttime;
private static System.Windows.Forms.Timer timer;
/// <summary>
/// Initialized and starts the autosave timer.
/// </summary>
internal void InitializeTimer()
{
if(timer != null)
{
timer.Tick -= TryAutosave;
timer.Dispose();
timer = null;
}
if (General.Settings.Autosave)
{
lasttime = Clock.CurrentTime;
timer = new System.Windows.Forms.Timer() { Interval = 1000 };
timer.Tick += TryAutosave;
timer.Enabled = true;
}
}
/// <summary>
/// Stops the autosave timer.
/// </summary>
internal void StopTimer()
{
if (timer != null) timer.Enabled = false;
}
/// <summary>
/// Resets the autosave timer to the current time.
/// </summary>
internal void ResetTimer()
{
lasttime = Clock.CurrentTime;
}
/// <summary>
/// Makes the autosave timer aware of a clock reset, so that the interval until the next autosave is unaffected.
/// </summary>
internal void BeforeClockReset()
{
lasttime = -(Clock.CurrentTime - lasttime);
}
/// <summary>
/// Tries to perform the autosave.
/// </summary>
/// <param name="sender">The sender</param>
/// <param name="args">The event arguments</param>
private static void TryAutosave(object sender, EventArgs args)
{
if (Clock.CurrentTime > lasttime + General.Settings.AutosaveInterval * 60 * 1000 && General.Map != null && General.Map.Map != null && General.Map.Map.IsSafeToAccess && General.Map.IsChanged)
{
// Check if the current editing mode prevents autosaving. If it does return without setting the time,
// so that autosaving will be retried ASAP
if (!General.Editing.Mode.OnAutoSaveBegin())
return;
lasttime = Clock.CurrentTime;
long start = Clock.CurrentTime;
AutosaveResult success = General.Map.AutoSave();
long duration = Clock.CurrentTime - start;
// Show a toast appropriate for the result of the autosave
if (success == AutosaveResult.Success)
General.ToastManager.ShowToast("autosave", ToastType.INFO, "Autosave", $"Autosave completed successfully in {duration} ms.");
else if (success == AutosaveResult.Error)
General.ToastManager.ShowToast("autosave", ToastType.ERROR, "Autosave", "Autosave failed.");
else if (success == AutosaveResult.NoFileName)
General.ToastManager.ShowToast("autosave", ToastType.WARNING, "Autosave", "Could not autosave because this is a new WAD that wasn't saved yet.");
}
}
}
}