diff --git a/Source/Core/ZDoom/ZScriptStateStructure.cs b/Source/Core/ZDoom/ZScriptStateStructure.cs
index 5a7a141d1bf5bc96f8a57b095e9fc41a27d1fb29..98fdea5e89cf5e72d2f81b2da43c6f24e369e828 100755
--- a/Source/Core/ZDoom/ZScriptStateStructure.cs
+++ b/Source/Core/ZDoom/ZScriptStateStructure.cs
@@ -59,6 +59,7 @@ namespace CodeImp.DoomBuilder.ZDoom
             // todo: parse stuff
             // 
             string[] control_keywords = new string[] { "goto", "loop", "wait", "fail", "stop" };
+			string[] data_types = new string[] { "double", "int", "uint" };
             
             while (true)
             {
@@ -151,20 +152,54 @@ namespace CodeImp.DoomBuilder.ZDoom
                 token = tokenizer.ExpectToken(ZScriptTokenType.Identifier);
                 if (token != null && token.IsValid)
                 {
-                    duration = -1;
-                    tokenizer.SkipWhitespace();
-                    token = tokenizer.ExpectToken(ZScriptTokenType.OpenParen);
-                    if (token != null && token.IsValid)
-                    {
-                        List<ZScriptToken> tokens = parser.ParseExpression(true);
-                        tokenizer.SkipWhitespace();
-                        token = tokenizer.ExpectToken(ZScriptTokenType.CloseParen);
-                        if (token == null || !token.IsValid)
-                        {
-                            parser.ReportError("Expected ), got " + ((Object)token ?? "<null>").ToString());
-                            return;
-                        }
-                    }
+					// Known data type? Then it's hopefully the .min or .max value (like int.min or int.max)
+					if (data_types.Contains(token.Value))
+					{
+						token = tokenizer.ExpectToken(ZScriptTokenType.Dot);
+						if(token == null || !token.IsValid)
+						{
+							parser.ReportError("Expected ., got " + ((Object)token ?? "<null>").ToString());
+							return;
+						}
+
+						token = tokenizer.ExpectToken(ZScriptTokenType.Identifier);
+						if (token == null || !token.IsValid)
+						{
+							parser.ReportError("Expected an identifier, got " + ((Object)token ?? "<null>").ToString());
+							return;
+						}
+
+						if (token.Value == "min")
+						{
+							duration = int.MinValue;
+						}
+						else if (token.Value == "max")
+						{
+							duration = int.MaxValue;
+						}
+						else
+						{
+							parser.ReportError("Expected min or max, got " + ((Object)token ?? "<null>").ToString());
+							return;
+						}
+					}
+					else // No known data type
+					{
+						duration = -1;
+						tokenizer.SkipWhitespace();
+						token = tokenizer.ExpectToken(ZScriptTokenType.OpenParen);
+						if (token != null && token.IsValid)
+						{
+							List<ZScriptToken> tokens = parser.ParseExpression(true);
+							tokenizer.SkipWhitespace();
+							token = tokenizer.ExpectToken(ZScriptTokenType.CloseParen);
+							if (token == null || !token.IsValid)
+							{
+								parser.ReportError("Expected ), got " + ((Object)token ?? "<null>").ToString());
+								return;
+							}
+						}
+					}
                 }
                 else
                 {