# HG changeset patch
# User koda
# Date 1289170049 -3600
# Node ID dd54999c2822b25e21b96e83272b9f274f6c7422
# Parent 31e77dcf18fe0e7117e217c742c7b8a16a64e983
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)
diff -r 31e77dcf18fe -r dd54999c2822 QTfrontend/gamecfgwidget.cpp
--- 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()));
diff -r 31e77dcf18fe -r dd54999c2822 hedgewars/CCHandlers.inc
--- 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;
diff -r 31e77dcf18fe -r dd54999c2822 hedgewars/uAI.pas
--- 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
diff -r 31e77dcf18fe -r dd54999c2822 hedgewars/uConsole.pas
--- 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);
diff -r 31e77dcf18fe -r dd54999c2822 hedgewars/uGears.pas
--- 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;
diff -r 31e77dcf18fe -r dd54999c2822 hedgewars/uMisc.pas
--- 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;
diff -r 31e77dcf18fe -r dd54999c2822 hedgewars/uWorld.pas
--- 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
diff -r 31e77dcf18fe -r dd54999c2822 project_files/HedgewarsMobile/Classes/CommodityFunctions.m
--- 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
diff -r 31e77dcf18fe -r dd54999c2822 project_files/HedgewarsMobile/Classes/EditableCellView.m
--- 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);
}
diff -r 31e77dcf18fe -r dd54999c2822 project_files/HedgewarsMobile/Classes/GameSetup.m
--- 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;
}
diff -r 31e77dcf18fe -r dd54999c2822 project_files/HedgewarsMobile/Classes/SingleSchemeViewController.m
--- 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]];
diff -r 31e77dcf18fe -r dd54999c2822 project_files/HedgewarsMobile/Resources/Settings/Schemes/Barrel Mayhem.plist
--- 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 @@
basic
100
+ 100
30
- 100
15
+ 47
+ 5
0
35
25
diff -r 31e77dcf18fe -r dd54999c2822 project_files/HedgewarsMobile/Resources/Settings/Schemes/Default.plist
--- 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 @@
basic
100
+ 100
45
- 100
15
+ 47
+ 5
5
35
25
diff -r 31e77dcf18fe -r dd54999c2822 project_files/HedgewarsMobile/Resources/Settings/Schemes/Minefield.plist
--- 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 @@
basic
+ 50
150
30
- 50
15
+ 47
+ 5
0
35
25
diff -r 31e77dcf18fe -r dd54999c2822 project_files/HedgewarsMobile/Resources/Settings/Schemes/Pro Mode.plist
--- 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 @@
basic
100
- 15
100
15
+ 15
+ 47
+ 5
0
35
25
diff -r 31e77dcf18fe -r dd54999c2822 project_files/HedgewarsMobile/Resources/Settings/Schemes/Shoppa.plist
--- 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 @@
basic
100
+ 100
300
- 100
50
+ 47
+ 5
1
0
35
diff -r 31e77dcf18fe -r dd54999c2822 project_files/HedgewarsMobile/Resources/Settings/Schemes/Timeless.plist
--- 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 @@
100
100
100
- 999
+ 100
+ 47
+ 5
5
35
30
diff -r 31e77dcf18fe -r dd54999c2822 project_files/HedgewarsMobile/Resources/Settings/Schemes/Tunnel Hogs.plist
--- 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 @@
basic
100
+ 100
30
- 100
15
+ 47
+ 5
5
35
25
diff -r 31e77dcf18fe -r dd54999c2822 project_files/HedgewarsMobile/Resources/Settings/iFrontend/basicFlags_en.plist
--- 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 @@
- default
- 100
- image
- Damage
- max
- 300
- min
- 10
- title
- Damage Modifier
-
-
- default
- 45
- image
- Time
- max
- 100
- min
- 1
- title
- Turn Time
-
-
+ checkOverMax
+
+ command
+
default
100
image
@@ -39,18 +19,90 @@
Initial Health
+ checkOverMax
+
+ command
+ e$damagepct
+ default
+ 100
+ image
+ Damage
+ max
+ 300
+ min
+ 10
+ title
+ Damage Modifier
+
+
+ checkOverMax
+
+ command
+ e$turntime
+ default
+ 45
+ image
+ Time
+ max
+ 100
+ min
+ 1
+ title
+ Turn Time
+
+
+ checkOverMax
+
+ command
+ e$sd_turns
default
15
image
SuddenDeath
max
- 999
+ 100
min
0
title
Sudden Death Timeout
+ checkOverMax
+
+ command
+ e$waterrise
+ default
+ 47
+ image
+ SuddenDeath
+ max
+ 100
+ min
+ 0
+ title
+ Water Rise Amount
+
+
+ checkOverMax
+
+ command
+ e$healthdec
+ default
+ 5
+ image
+ SuddenDeath
+ max
+ 100
+ min
+ 0
+ title
+ Health Decrease
+
+
+ checkOverMax
+
+ command
+ e$casefreq
default
5
image
@@ -60,9 +112,13 @@
min
0
title
- Crate Drops
+ Crate Drop Turns
+ checkOverMax
+
+ command
+ e$healthprob
default
35
image
@@ -75,6 +131,10 @@
Health Kit Probability
+ checkOverMax
+
+ command
+ e$hcaseamount
default
25
image
@@ -87,6 +147,10 @@
Health Amount in Kit
+ checkOverMax
+
+ command
+ e$minestime
default
3
image
@@ -99,6 +163,10 @@
Mines Time
+ checkOverMax
+
+ command
+ e$minesnum
default
4
image
@@ -111,6 +179,10 @@
Mines Number
+ checkOverMax
+
+ command
+ e$minedudpct
default
0
image
@@ -123,6 +195,10 @@
Dud Mines Probability
+ checkOverMax
+
+ command
+ e$explosives
default
2
image