revamp gamemodes section in the ifrontend and update ios game modes
authorkoda
Sun, 07 Nov 2010 23:47:29 +0100
changeset 4208 dd54999c2822
parent 4207 31e77dcf18fe
child 4209 f133a26e05dd
revamp gamemodes section in the ifrontend and update ios game modes move minestime and turntime *1000 away from frontend and move it in engine (preserving lua compatibility)
QTfrontend/gamecfgwidget.cpp
hedgewars/CCHandlers.inc
hedgewars/uAI.pas
hedgewars/uConsole.pas
hedgewars/uGears.pas
hedgewars/uMisc.pas
hedgewars/uWorld.pas
project_files/HedgewarsMobile/Classes/CommodityFunctions.m
project_files/HedgewarsMobile/Classes/EditableCellView.m
project_files/HedgewarsMobile/Classes/GameSetup.m
project_files/HedgewarsMobile/Classes/SingleSchemeViewController.m
project_files/HedgewarsMobile/Resources/Settings/Schemes/Barrel Mayhem.plist
project_files/HedgewarsMobile/Resources/Settings/Schemes/Default.plist
project_files/HedgewarsMobile/Resources/Settings/Schemes/Minefield.plist
project_files/HedgewarsMobile/Resources/Settings/Schemes/Pro Mode.plist
project_files/HedgewarsMobile/Resources/Settings/Schemes/Shoppa.plist
project_files/HedgewarsMobile/Resources/Settings/Schemes/Timeless.plist
project_files/HedgewarsMobile/Resources/Settings/Schemes/Tunnel Hogs.plist
project_files/HedgewarsMobile/Resources/Settings/iFrontend/basicFlags_en.plist
--- a/QTfrontend/gamecfgwidget.cpp	Sun Nov 07 17:40:55 2010 -0500
+++ b/QTfrontend/gamecfgwidget.cpp	Sun Nov 07 23:47:29 2010 +0100
@@ -157,8 +157,8 @@
     sl.append("eseed " + pMapContainer->getCurrentSeed());
     sl.append(QString("e$gmflags %1").arg(getGameFlags()));
     sl.append(QString("e$damagepct %1").arg(schemeData(22).toInt()));
-    sl.append(QString("e$turntime %1").arg(schemeData(23).toInt() * 1000));
-    sl.append(QString("e$minestime %1").arg(schemeData(27).toInt() * 1000));
+    sl.append(QString("e$turntime %1").arg(schemeData(23).toInt()));
+    sl.append(QString("e$minestime %1").arg(schemeData(27).toInt()));
     sl.append(QString("e$minesnum %1").arg(schemeData(28).toInt()));
     sl.append(QString("e$sd_turns %1").arg(schemeData(25).toInt()));
     sl.append(QString("e$casefreq %1").arg(schemeData(26).toInt()));
--- a/hedgewars/CCHandlers.inc	Sun Nov 07 17:40:55 2010 -0500
+++ b/hedgewars/CCHandlers.inc	Sun Nov 07 23:47:29 2010 +0100
@@ -145,6 +145,13 @@
 ScriptLoad(s)
 end;
 
+procedure chTurnTime(var s: shortstring);
+var temp: Longint;
+begin
+val(s, temp);
+cHedgehogTurnTime:= temp * 1000;
+end;
+
 procedure chAddHH(var id: shortstring);
 var s: shortstring;
     Gear: PGear;
--- a/hedgewars/uAI.pas	Sun Nov 07 17:40:55 2010 -0500
+++ b/hedgewars/uAI.pas	Sun Nov 07 23:47:29 2010 +0100
@@ -333,7 +333,7 @@
 with CurrentHedgehog^ do
      if (Gear <> nil)
         and ((Gear^.State and gstHHDriven) <> 0)
-        and (TurnTimeLeft < cHedgehogTurnTime - 50) then
+        and (TurnTimeLeft + 50 > cHedgehogTurnTime ) then
         if ((Gear^.State and gstHHThinking) = 0) then
            if (BestActions.Pos >= BestActions.Count)
               and (TurnTimeLeft > cStopThinkTime) then
--- a/hedgewars/uConsole.pas	Sun Nov 07 17:40:55 2010 -0500
+++ b/hedgewars/uConsole.pas	Sun Nov 07 23:47:29 2010 +0100
@@ -245,7 +245,7 @@
     RegisterVariable('explosives',vtLongInt,@cExplosives    , false);
     RegisterVariable('gmflags' , vtLongInt, @GameFlags      , false);
     RegisterVariable('trflags' , vtLongInt, @TrainingFlags  , false);
-    RegisterVariable('turntime', vtLongInt, @cHedgehogTurnTime, false);
+    RegisterVariable('turntime', vtCommand, @chTurnTime     , false);
     RegisterVariable('minestime',vtLongInt, @cMinesTime     , false);
     RegisterVariable('fort'    , vtCommand, @chFort         , false);
     RegisterVariable('voicepack',vtCommand, @chVoicepack    , false);
--- a/hedgewars/uGears.pas	Sun Nov 07 17:40:55 2010 -0500
+++ b/hedgewars/uGears.pas	Sun Nov 07 23:47:29 2010 +0100
@@ -365,9 +365,9 @@
                 gear^.Elasticity:= _0_55;
                 gear^.Friction:= _0_995;
                 if cMinesTime < 0 then
-                    gear^.Timer:= getrandom(6)*1000
+                    gear^.Timer:= getrandom(51)*100
                 else
-                    gear^.Timer:= cMinesTime*1;
+                    gear^.Timer:= cMinesTime*1000;
                 end;
        gtSMine: begin
                 gear^.Health:= 10;
--- a/hedgewars/uMisc.pas	Sun Nov 07 17:40:55 2010 -0500
+++ b/hedgewars/uMisc.pas	Sun Nov 07 23:47:29 2010 +0100
@@ -758,7 +758,7 @@
     cMapGen             := 0;   // MAPGEN_REGULAR
     cMazeSize           := 0;
     cHedgehogTurnTime   := 45000;
-    cMinesTime          := 3000;
+    cMinesTime          := 3;
     cMaxAIThinkTime     := 9000;
     cCloudsNumber       := 9;
     cHealthCaseProb     := 35;
--- a/hedgewars/uWorld.pas	Sun Nov 07 17:40:55 2010 -0500
+++ b/hedgewars/uWorld.pas	Sun Nov 07 23:47:29 2010 +0100
@@ -149,14 +149,14 @@
 ScreenFadeSpeed:= 1;
 
 // modified mine timers?
-if cMinesTime <> 3000 then
+if cMinesTime <> 3 then
     begin
     if cMinesTime = 0 then
         g:= AddGoal(g, gfAny, gidNoMineTimer)
     else if cMinesTime < 0 then
         g:= AddGoal(g, gfAny, gidRandomMineTimer)
     else
-        g:= AddGoal(g, gfAny, gidMineTimer, cMinesTime div 1000);
+        g:= AddGoal(g, gfAny, gidMineTimer, cMinesTime);
     end;
 
 // if the string has been set, show it for (default timeframe) seconds
--- a/project_files/HedgewarsMobile/Classes/CommodityFunctions.m	Sun Nov 07 17:40:55 2010 -0500
+++ b/project_files/HedgewarsMobile/Classes/CommodityFunctions.m	Sun Nov 07 23:47:29 2010 +0100
@@ -138,10 +138,12 @@
     }
     
     NSMutableArray *basicArray  = [[NSMutableArray alloc] initWithObjects:
+                                   [NSNumber numberWithInt:100],      //initialhealth
                                    [NSNumber numberWithInt:100],      //damagemodifier
                                    [NSNumber numberWithInt:45],       //turntime
-                                   [NSNumber numberWithInt:100],      //initialhealth
                                    [NSNumber numberWithInt:15],       //suddendeathtimeout
+                                   [NSNumber numberWithInt:47],       //waterrise
+                                   [NSNumber numberWithInt:5],        //healthdecrease
                                    [NSNumber numberWithInt:5],        //cratedrops
                                    [NSNumber numberWithInt:35],       //healthprob
                                    [NSNumber numberWithInt:25],       //healthamount
--- a/project_files/HedgewarsMobile/Classes/EditableCellView.m	Sun Nov 07 17:40:55 2010 -0500
+++ b/project_files/HedgewarsMobile/Classes/EditableCellView.m	Sun Nov 07 23:47:29 2010 +0100
@@ -31,7 +31,6 @@
 
         textField = [[UITextField alloc] initWithFrame:CGRectZero];
         textField.backgroundColor = [UIColor clearColor];
-        textField.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]];
         textField.delegate = self;
         textField.clearButtonMode = UITextFieldViewModeWhileEditing;
         textField.clearsOnBeginEditing = NO;
@@ -77,6 +76,8 @@
         skew +=2;
     }
 
+    // sometimes the bold property gets lost
+    textField.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]];
     textField.frame = CGRectMake(boundsX+offset+10, skew+10, 300, [UIFont labelFontSize] + 4);
 }
 
--- a/project_files/HedgewarsMobile/Classes/GameSetup.m	Sun Nov 07 17:40:55 2010 -0500
+++ b/project_files/HedgewarsMobile/Classes/GameSetup.m	Sun Nov 07 23:47:29 2010 +0100
@@ -168,7 +168,6 @@
     int i = 0;
     int result = 0;
     int mask = 0x00000004;
-    int basicArraySize = [basicArray count] - 1;
 
     // pack the gameflags in a single var and send it
     for (NSNumber *value in gamemodArray) {
@@ -180,64 +179,26 @@
     [self sendToEngine:flags];
     [flags release];
 
-    NSString *dmgMod = [[NSString alloc] initWithFormat:@"e$damagepct %d",[[basicArray objectAtIndex:i] intValue]];
-    [self sendToEngine:dmgMod];
-    [dmgMod release];
-    if (i < basicArraySize) i++;
+    /* basic game flags */
+    NSString *path = [[NSString alloc] initWithFormat:@"%@/basicFlags_en.plist",IFRONTEND_DIRECTORY()];
+    NSArray *mods = [[NSArray alloc] initWithContentsOfFile:path];
+    [path release];
 
-    // support for endless games
-    NSInteger tentativeTurntime = [[basicArray objectAtIndex:i] intValue];
-    if (tentativeTurntime >= 100)
-        tentativeTurntime = 9999;
-    NSString *turnTime = [[NSString alloc] initWithFormat:@"e$turntime %d",tentativeTurntime * 1000];
-    [self sendToEngine:turnTime];
-    [turnTime release];
-    if (i < basicArraySize) i++;
-
-    result = [[basicArray objectAtIndex:i] intValue]; // initial health
-    if (i < basicArraySize) i++;
-
-    NSString *sdTime = [[NSString alloc] initWithFormat:@"e$sd_turns %d",[[basicArray objectAtIndex:i] intValue]];
-    [self sendToEngine:sdTime];
-    [sdTime release];
-    if (i < basicArraySize) i++;
-
-    NSString *crateDrops = [[NSString alloc] initWithFormat:@"e$casefreq %d",[[basicArray objectAtIndex:i] intValue]];
-    [self sendToEngine:crateDrops];
-    [crateDrops release];
-    if (i < basicArraySize) i++;
+    // initial health
+    result = [[basicArray objectAtIndex:0] intValue];
 
-    NSString *healthProb = [[NSString alloc] initWithFormat:@"e$healthprob %d",[[basicArray objectAtIndex:i] intValue]];
-    [self sendToEngine:healthProb];
-    [healthProb release];
-    if (i < basicArraySize) i++;
-
-    NSString *healthAmount = [[NSString alloc] initWithFormat:@"e$hcaseamount %d",[[basicArray objectAtIndex:i] intValue]];
-    [self sendToEngine:healthAmount];
-    [healthAmount release];
-    if (i < basicArraySize) i++;
-
-    NSString *minesTime = [[NSString alloc] initWithFormat:@"e$minestime %d",[[basicArray objectAtIndex:i] intValue] * 1000];
-    [self sendToEngine:minesTime];
-    [minesTime release];
-    if (i < basicArraySize) i++;
+    for (i = 1; i < [basicArray count]; i++) {
+        NSDictionary *basicDict = [mods objectAtIndex:i];
+        NSString *command = [basicDict objectForKey:@"command"];
+        NSInteger value = [[basicArray objectAtIndex:i] intValue];
+        if ([basicDict objectForKey:@"checkOverMax"] && value >= [[basicDict objectForKey:@"max"] intValue])
+            value = 9999;
+        NSString *strToSend = [[NSString alloc] initWithFormat:@"%@ %d",command,value];
+        [self sendToEngine:strToSend];
+        [strToSend release];
+    }
+    [mods release];
 
-    NSString *minesNumber = [[NSString alloc] initWithFormat:@"e$minesnum %d",[[basicArray objectAtIndex:i] intValue]];
-    [self sendToEngine:minesNumber];
-    [minesNumber release];
-    if (i < basicArraySize) i++;
-
-    NSString *dudMines = [[NSString alloc] initWithFormat:@"e$minedudpct %d",[[basicArray objectAtIndex:i] intValue]];
-    [self sendToEngine:dudMines];
-    [dudMines release];
-    if (i < basicArraySize) i++;
-
-    NSString *explosives = [[NSString alloc] initWithFormat:@"e$explosives %d",[[basicArray objectAtIndex:i] intValue]];
-    [self sendToEngine:explosives];
-    [explosives release];
-    if (i < basicArraySize) i++;
-
-    DLog(@"Sent %d flags and %d modes", [gamemodArray count], i);
     [schemeDictionary release];
     return result;
 }
--- a/project_files/HedgewarsMobile/Classes/SingleSchemeViewController.m	Sun Nov 07 17:40:55 2010 -0500
+++ b/project_files/HedgewarsMobile/Classes/SingleSchemeViewController.m	Sun Nov 07 23:47:29 2010 +0100
@@ -28,6 +28,21 @@
 #define SLIDER_TAG 54321
 #define SWITCH_TAG 67890
 
+#define checkValueString(detailString,labelSting,sliderRef); \
+    if ([labelSting isEqualToString:@"Turn Time"] && (NSInteger) sliderRef.value == 100) \
+        detailString = @"∞"; \
+    else if ([labelSting isEqualToString:@"Sudden Death Timeout"] && (NSInteger) sliderRef.value == 100) \
+        detailString = NSLocalizedString(@"Nvr",@"Short for 'Never'"); \
+    else if ([labelSting isEqualToString:@"Water Rise Amount"] && (NSInteger) sliderRef.value == 100) \
+        detailString = NSLocalizedString(@"Nvr",@"Short for 'Never'"); \
+    else if ([labelSting isEqualToString:@"Crate Drop Turns"] && (NSInteger) sliderRef.value == 0) \
+        detailString = NSLocalizedString(@"Nvr",@"Short for 'Never'"); \
+    else if ([labelSting isEqualToString:@"Mines Time"] && (NSInteger) sliderRef.value == -1) \
+        detailString = NSLocalizedString(@"Rnd",@"Short for 'Random'"); \
+    else \
+        detailString = [NSString stringWithFormat:@"%d",(NSInteger) sliderRef.value];
+
+
 @implementation SingleSchemeViewController
 @synthesize schemeName, schemeDictionary, basicSettingList, gameModifierArray;
 
@@ -161,8 +176,6 @@
                     offset = 50;
 
                 UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(offset+260, 12, offset+150, 23)];
-                slider.maximumValue = [[detail objectForKey:@"max"] floatValue];
-                slider.minimumValue = [[detail objectForKey:@"min"] floatValue];
                 [slider addTarget:self action:@selector(sliderChanged:) forControlEvents:UIControlEventValueChanged];
                 [cell.contentView addSubview:slider];
                 [slider release];
@@ -191,19 +204,14 @@
                 } 
             }
             cellSlider.tag = SLIDER_TAG + row;
+            cellSlider.maximumValue = [[detail objectForKey:@"max"] floatValue];
+            cellSlider.minimumValue = [[detail objectForKey:@"min"] floatValue];
             cellSlider.value = [[[self.schemeDictionary objectForKey:@"basic"] objectAtIndex:row] floatValue];
 
+            NSString *prestring = nil;
+            checkValueString(prestring,cellLabel.text,cellSlider);
+
             // forced to use this weird format otherwise the label disappears when size of the text is bigger than the original
-            NSString *prestring = [NSString stringWithFormat:@"%d",(NSInteger) cellSlider.value];
-
-            // turntime 100 means unlimited time turns (set in GameSetup)
-            if (row == 1 && (NSInteger) cellSlider.value == 100)
-                prestring = @"∞";
-            else
-                // mines less than 0 means random
-                if (row == 5 && (NSInteger) cellSlider.value == -1)
-                    prestring = NSLocalizedString(@"Rnd",@"Short for 'Random'");
-            
             while ([prestring length] <= 4)
                 prestring = [NSString stringWithFormat:@" %@",prestring];
             cell.detailTextLabel.text = prestring;
@@ -254,16 +262,13 @@
     NSIndexPath *indexPath = [NSIndexPath indexPathForRow:theSlider.tag-SLIDER_TAG inSection:1];
     // get its cell
     UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
-    // grab the associated label
-    UILabel *label = (UILabel *)cell.detailTextLabel;
+    // grab the associated labels
+    UILabel *detailLabel = (UILabel *)cell.detailTextLabel;
+    UILabel *cellLabel = (UILabel *)[cell.contentView viewWithTag:LABEL_TAG];
     // modify it
-    if ([indexPath row] == 1 && [indexPath section] == 1 && (NSInteger) theSlider.value == 100)
-        label.text = @"∞";
-    else
-        if ([indexPath row] == 5 && [indexPath section] == 1 && (NSInteger) theSlider.value == -1)
-            label.text = NSLocalizedString(@"Rnd",@"Short for 'Random'");
-        else
-            label.text = [NSString stringWithFormat:@"%d",(NSInteger) theSlider.value];
+
+    checkValueString(detailLabel.text,cellLabel.text,theSlider);
+
     // save changes in the main array
     NSMutableArray *array = [self.schemeDictionary objectForKey:@"basic"];
     [array replaceObjectAtIndex:theSlider.tag-SLIDER_TAG withObject:[NSNumber numberWithInt:(NSInteger) theSlider.value]];
--- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Barrel Mayhem.plist	Sun Nov 07 17:40:55 2010 -0500
+++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Barrel Mayhem.plist	Sun Nov 07 23:47:29 2010 +0100
@@ -5,9 +5,11 @@
 	<key>basic</key>
 	<array>
 		<integer>100</integer>
+		<integer>100</integer>
 		<integer>30</integer>
-		<integer>100</integer>
 		<integer>15</integer>
+		<integer>47</integer>
+		<integer>5</integer>
 		<integer>0</integer>
 		<integer>35</integer>
 		<integer>25</integer>
--- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Default.plist	Sun Nov 07 17:40:55 2010 -0500
+++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Default.plist	Sun Nov 07 23:47:29 2010 +0100
@@ -5,9 +5,11 @@
 	<key>basic</key>
 	<array>
 		<integer>100</integer>
+		<integer>100</integer>
 		<integer>45</integer>
-		<integer>100</integer>
 		<integer>15</integer>
+		<integer>47</integer>
+		<integer>5</integer>
 		<integer>5</integer>
 		<integer>35</integer>
 		<integer>25</integer>
--- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Minefield.plist	Sun Nov 07 17:40:55 2010 -0500
+++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Minefield.plist	Sun Nov 07 23:47:29 2010 +0100
@@ -4,10 +4,12 @@
 <dict>
 	<key>basic</key>
 	<array>
+		<integer>50</integer>
 		<integer>150</integer>
 		<integer>30</integer>
-		<integer>50</integer>
 		<integer>15</integer>
+		<integer>47</integer>
+		<integer>5</integer>
 		<integer>0</integer>
 		<integer>35</integer>
 		<integer>25</integer>
--- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Pro Mode.plist	Sun Nov 07 17:40:55 2010 -0500
+++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Pro Mode.plist	Sun Nov 07 23:47:29 2010 +0100
@@ -5,9 +5,11 @@
 	<key>basic</key>
 	<array>
 		<integer>100</integer>
-		<integer>15</integer>
 		<integer>100</integer>
 		<integer>15</integer>
+		<integer>15</integer>
+		<integer>47</integer>
+		<integer>5</integer>
 		<integer>0</integer>
 		<integer>35</integer>
 		<integer>25</integer>
--- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Shoppa.plist	Sun Nov 07 17:40:55 2010 -0500
+++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Shoppa.plist	Sun Nov 07 23:47:29 2010 +0100
@@ -5,9 +5,11 @@
 	<key>basic</key>
 	<array>
 		<integer>100</integer>
+		<integer>100</integer>
 		<integer>300</integer>
-		<integer>100</integer>
 		<integer>50</integer>
+		<integer>47</integer>
+		<integer>5</integer>
 		<integer>1</integer>
 		<integer>0</integer>
 		<integer>35</integer>
--- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Timeless.plist	Sun Nov 07 17:40:55 2010 -0500
+++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Timeless.plist	Sun Nov 07 23:47:29 2010 +0100
@@ -7,7 +7,9 @@
 		<integer>100</integer>
 		<integer>100</integer>
 		<integer>100</integer>
-		<integer>999</integer>
+		<integer>100</integer>
+		<integer>47</integer>
+		<integer>5</integer>
 		<integer>5</integer>
 		<integer>35</integer>
 		<integer>30</integer>
--- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Tunnel Hogs.plist	Sun Nov 07 17:40:55 2010 -0500
+++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Tunnel Hogs.plist	Sun Nov 07 23:47:29 2010 +0100
@@ -5,9 +5,11 @@
 	<key>basic</key>
 	<array>
 		<integer>100</integer>
+		<integer>100</integer>
 		<integer>30</integer>
-		<integer>100</integer>
 		<integer>15</integer>
+		<integer>47</integer>
+		<integer>5</integer>
 		<integer>5</integer>
 		<integer>35</integer>
 		<integer>25</integer>
--- a/project_files/HedgewarsMobile/Resources/Settings/iFrontend/basicFlags_en.plist	Sun Nov 07 17:40:55 2010 -0500
+++ b/project_files/HedgewarsMobile/Resources/Settings/iFrontend/basicFlags_en.plist	Sun Nov 07 23:47:29 2010 +0100
@@ -3,30 +3,10 @@
 <plist version="1.0">
 <array>
 	<dict>
-		<key>default</key>
-		<integer>100</integer>
-		<key>image</key>
-		<string>Damage</string>
-		<key>max</key>
-		<integer>300</integer>
-		<key>min</key>
-		<integer>10</integer>
-		<key>title</key>
-		<string>Damage Modifier</string>
-	</dict>
-	<dict>
-		<key>default</key>
-		<integer>45</integer>
-		<key>image</key>
-		<string>Time</string>
-		<key>max</key>
-		<integer>100</integer>
-		<key>min</key>
-		<integer>1</integer>
-		<key>title</key>
-		<string>Turn Time</string>
-	</dict>
-	<dict>
+		<key>checkOverMax</key>
+		<false/>
+		<key>command</key>
+		<string></string>
 		<key>default</key>
 		<integer>100</integer>
 		<key>image</key>
@@ -39,18 +19,90 @@
 		<string>Initial Health</string>
 	</dict>
 	<dict>
+		<key>checkOverMax</key>
+		<false/>
+		<key>command</key>
+		<string>e$damagepct</string>
+		<key>default</key>
+		<integer>100</integer>
+		<key>image</key>
+		<string>Damage</string>
+		<key>max</key>
+		<integer>300</integer>
+		<key>min</key>
+		<integer>10</integer>
+		<key>title</key>
+		<string>Damage Modifier</string>
+	</dict>
+	<dict>
+		<key>checkOverMax</key>
+		<true/>
+		<key>command</key>
+		<string>e$turntime</string>
+		<key>default</key>
+		<integer>45</integer>
+		<key>image</key>
+		<string>Time</string>
+		<key>max</key>
+		<integer>100</integer>
+		<key>min</key>
+		<integer>1</integer>
+		<key>title</key>
+		<string>Turn Time</string>
+	</dict>
+	<dict>
+		<key>checkOverMax</key>
+		<true/>
+		<key>command</key>
+		<string>e$sd_turns</string>
 		<key>default</key>
 		<integer>15</integer>
 		<key>image</key>
 		<string>SuddenDeath</string>
 		<key>max</key>
-		<integer>999</integer>
+		<integer>100</integer>
 		<key>min</key>
 		<integer>0</integer>
 		<key>title</key>
 		<string>Sudden Death Timeout</string>
 	</dict>
 	<dict>
+		<key>checkOverMax</key>
+		<false/>
+		<key>command</key>
+		<string>e$waterrise</string>
+		<key>default</key>
+		<integer>47</integer>
+		<key>image</key>
+		<string>SuddenDeath</string>
+		<key>max</key>
+		<integer>100</integer>
+		<key>min</key>
+		<integer>0</integer>
+		<key>title</key>
+		<string>Water Rise Amount</string>
+	</dict>
+	<dict>
+		<key>checkOverMax</key>
+		<false/>
+		<key>command</key>
+		<string>e$healthdec</string>
+		<key>default</key>
+		<integer>5</integer>
+		<key>image</key>
+		<string>SuddenDeath</string>
+		<key>max</key>
+		<integer>100</integer>
+		<key>min</key>
+		<integer>0</integer>
+		<key>title</key>
+		<string>Health Decrease</string>
+	</dict>
+	<dict>
+		<key>checkOverMax</key>
+		<false/>
+		<key>command</key>
+		<string>e$casefreq</string>
 		<key>default</key>
 		<integer>5</integer>
 		<key>image</key>
@@ -60,9 +112,13 @@
 		<key>min</key>
 		<integer>0</integer>
 		<key>title</key>
-		<string>Crate Drops</string>
+		<string>Crate Drop Turns</string>
 	</dict>
 	<dict>
+		<key>checkOverMax</key>
+		<false/>
+		<key>command</key>
+		<string>e$healthprob</string>
 		<key>default</key>
 		<integer>35</integer>
 		<key>image</key>
@@ -75,6 +131,10 @@
 		<string>Health Kit Probability</string>
 	</dict>
 	<dict>
+		<key>checkOverMax</key>
+		<false/>
+		<key>command</key>
+		<string>e$hcaseamount</string>
 		<key>default</key>
 		<integer>25</integer>
 		<key>image</key>
@@ -87,6 +147,10 @@
 		<string>Health Amount in Kit</string>
 	</dict>
 	<dict>
+		<key>checkOverMax</key>
+		<false/>
+		<key>command</key>
+		<string>e$minestime</string>
 		<key>default</key>
 		<integer>3</integer>
 		<key>image</key>
@@ -99,6 +163,10 @@
 		<string>Mines Time</string>
 	</dict>
 	<dict>
+		<key>checkOverMax</key>
+		<false/>
+		<key>command</key>
+		<string>e$minesnum</string>
 		<key>default</key>
 		<integer>4</integer>
 		<key>image</key>
@@ -111,6 +179,10 @@
 		<string>Mines Number</string>
 	</dict>
 	<dict>
+		<key>checkOverMax</key>
+		<false/>
+		<key>command</key>
+		<string>e$minedudpct</string>
 		<key>default</key>
 		<integer>0</integer>
 		<key>image</key>
@@ -123,6 +195,10 @@
 		<string>Dud Mines Probability</string>
 	</dict>
 	<dict>
+		<key>checkOverMax</key>
+		<false/>
+		<key>command</key>
+		<string>e$explosives</string>
 		<key>default</key>
 		<integer>2</integer>
 		<key>image</key>