reworked the initialization functions, now it should be safe to update and no more need of spinning wheel at first launch
authorkoda
Fri, 13 Aug 2010 02:13:18 +0200
changeset 3737 2ba6ac8a114b
parent 3736 d8982f9e7e2c
child 3738 f10626e18b8a
reworked the initialization functions, now it should be safe to update and no more need of spinning wheel at first launch adjusted default zoom value polished lobby interface updated ammosets to new weapons
hedgewars/PascalExports.pas
hedgewars/uConsts.pas
project_files/HedgewarsMobile/Classes/CommodityFunctions.h
project_files/HedgewarsMobile/Classes/CommodityFunctions.m
project_files/HedgewarsMobile/Classes/GameConfigViewController.m
project_files/HedgewarsMobile/Classes/InGameMenuViewController.m
project_files/HedgewarsMobile/Classes/MainMenuViewController.m
project_files/HedgewarsMobile/Classes/MasterViewController.m
project_files/HedgewarsMobile/Classes/OverlayViewController.h
project_files/HedgewarsMobile/Classes/OverlayViewController.m
project_files/HedgewarsMobile/Classes/PascalImports.h
project_files/HedgewarsMobile/Classes/SDL_uikitappdelegate.m
project_files/HedgewarsMobile/Classes/SingleWeaponViewController.m
project_files/HedgewarsMobile/Classes/WeaponSettingsViewController.m
project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj
project_files/HedgewarsMobile/Info.plist
project_files/HedgewarsMobile/Resources/MapConfigViewController-iPad.xib
project_files/HedgewarsMobile/Resources/Settings/Schemes/Barrel Mayhem.plist
project_files/HedgewarsMobile/Resources/Settings/Schemes/Basketball.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/Tunnel Hogs.plist
project_files/HedgewarsMobile/Resources/Settings/Teams/Ninjas.plist
project_files/HedgewarsMobile/Resources/Settings/Teams/Pirates.plist
project_files/HedgewarsMobile/Resources/Settings/settings.plist
--- a/hedgewars/PascalExports.pas	Thu Aug 12 23:15:11 2010 +0200
+++ b/hedgewars/PascalExports.pas	Fri Aug 13 02:13:18 2010 +0200
@@ -18,8 +18,8 @@
 {$INCLUDE "config.inc"}
 
 implementation
-
 {$IFDEF HWLIBRARY}
+var cZoomVal: GLfloat;
 
 // retrieve protocol information
 procedure HW_versionInfo(netProto: PShortInt; versionStr: PPChar); cdecl; export;
@@ -34,6 +34,17 @@
     leftClick:= true;
 end;
 
+procedure HW_ammoMenu; cdecl; export;
+begin
+    rightClick:= true;
+end;
+
+procedure HW_zoomSet(value: GLfloat); cdecl; export;
+begin
+    cZoomVal:= value;
+    ZoomValue:= value;
+end;
+
 procedure HW_zoomIn; cdecl; export;
 begin
     if wheelDown = false then
@@ -48,7 +59,8 @@
 
 procedure HW_zoomReset; cdecl; export;
 begin
-    middleClick:= true;
+    ZoomValue:= cZoomVal;
+    //middleClick:= true;
     // center the camera at current hog
     if CurrentHedgehog <> nil then
         followGear:= CurrentHedgehog^.Gear;
@@ -65,11 +77,6 @@
     exit( trunc((ZoomValue - cDefaultZoomLevel) / cZoomDelta) );
 end;
 
-procedure HW_ammoMenu; cdecl; export;
-begin
-    rightClick:= true;
-end;
-
 procedure HW_walkingKeysUp; cdecl; export;
 begin
     leftKey:= false;
@@ -183,31 +190,16 @@
     y^:= CursorPoint.Y;
 end;
 
-procedure HW_setPianoSound(snd: LongInt); cdecl; export;
-var CurSlot, CurAmmo: LongWord;
-begin
-    CurSlot:= CurrentHedgehog^.CurSlot;
-    CurAmmo:= CurrentHedgehog^.CurAmmo;
-    // this most likely won't work in network game
-    if (CurrentHedgehog^.Ammo^[CurSlot, CurAmmo].AmmoType = amPiano) then
-        case snd of
-            0: PlaySound(sndPiano0);
-            1: PlaySound(sndPiano1);
-            2: PlaySound(sndPiano2);
-            3: PlaySound(sndPiano3);
-            4: PlaySound(sndPiano4);
-            5: PlaySound(sndPiano5);
-            6: PlaySound(sndPiano6);
-            7: PlaySound(sndPiano7);
-            else PlaySound(sndPiano8);
-        end;
-end;
-
 function HW_isAmmoOpen: boolean; cdecl; export;
 begin
     exit(bShowAmmoMenu);
 end;
 
+function HW_isPaused: boolean; cdecl; export;
+begin
+    exit( isPaused );
+end;
+
 function HW_isWeaponRequiringClick: boolean; cdecl; export;
 begin
     if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) then
@@ -232,9 +224,12 @@
         exit(false)
 end;
 
-function HW_isPaused: boolean; cdecl; export;
+function HW_isWeaponRope: boolean cdecl; export;
+var CurSlot, CurAmmo: LongWord;
 begin
-    exit( isPaused );
+    CurSlot:= CurrentHedgehog^.CurSlot;
+    CurAmmo:= CurrentHedgehog^.CurAmmo;
+    exit (CurrentHedgehog^.Ammo^[CurSlot, CurAmmo].AmmoType = amRope)
 end;
 
 procedure HW_setGrenadeTime(time: LongInt); cdecl; export;
@@ -242,6 +237,26 @@
     ParseCommand('/timer ' + inttostr(time), true);
 end;
 
+procedure HW_setPianoSound(snd: LongInt); cdecl; export;
+var CurSlot, CurAmmo: LongWord;
+begin
+    CurSlot:= CurrentHedgehog^.CurSlot;
+    CurAmmo:= CurrentHedgehog^.CurAmmo;
+    // this most likely won't work in network game
+    if (CurrentHedgehog^.Ammo^[CurSlot, CurAmmo].AmmoType = amPiano) then
+        case snd of
+            0: PlaySound(sndPiano0);
+            1: PlaySound(sndPiano1);
+            2: PlaySound(sndPiano2);
+            3: PlaySound(sndPiano3);
+            4: PlaySound(sndPiano4);
+            5: PlaySound(sndPiano5);
+            6: PlaySound(sndPiano6);
+            7: PlaySound(sndPiano7);
+            else PlaySound(sndPiano8);
+        end;
+end;
+
 //amSwitch
 {$ENDIF}
 
--- a/hedgewars/uConsts.pas	Thu Aug 12 23:15:11 2010 +0200
+++ b/hedgewars/uConsts.pas	Fri Aug 13 02:13:18 2010 +0200
@@ -304,7 +304,9 @@
 
     cKeyMaxIndex = 1023;
 
+    // do not change this value
     cDefaultZoomLevel = 2.0;
+
 {$IFDEF IPHONEOS}
     cMaxZoomLevel = 0.5;
     cMinZoomLevel = 3.5;
--- a/project_files/HedgewarsMobile/Classes/CommodityFunctions.h	Thu Aug 12 23:15:11 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/CommodityFunctions.h	Fri Aug 13 02:13:18 2010 +0200
@@ -10,18 +10,14 @@
 
 #define MAX_HOGS 8
 
-
-#define SETTINGS_FILE()         [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) \
-                                 objectAtIndex:0] stringByAppendingString:@"/settings.plist"]
-#define DEBUG_FILE()            [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) \
-                                 objectAtIndex:0] stringByAppendingString:@"/debug.txt"]
+#define DOCUMENTS_FOLDER()      [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
 
-#define TEAMS_DIRECTORY()       [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) \
-                                 objectAtIndex:0] stringByAppendingString:@"/Teams/"]
-#define WEAPONS_DIRECTORY()     [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) \
-                                 objectAtIndex:0] stringByAppendingString:@"/Weapons/"]
-#define SCHEMES_DIRECTORY()     [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) \
-                                 objectAtIndex:0] stringByAppendingString:@"/Schemes/"]
+#define SETTINGS_FILE()         [DOCUMENTS_FOLDER() stringByAppendingString:@"/settings.plist"]
+#define DEBUG_FILE()            [DOCUMENTS_FOLDER() stringByAppendingString:@"/debug.txt"]
+
+#define TEAMS_DIRECTORY()       [DOCUMENTS_FOLDER() stringByAppendingString:@"/Teams/"]
+#define WEAPONS_DIRECTORY()     [DOCUMENTS_FOLDER() stringByAppendingString:@"/Weapons/"]
+#define SCHEMES_DIRECTORY()     [DOCUMENTS_FOLDER() stringByAppendingString:@"/Schemes/"]
 
 #define GRAPHICS_DIRECTORY()    [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Graphics/"]
 #define HATS_DIRECTORY()        [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Graphics/Hats/"]
@@ -37,13 +33,13 @@
 #define MSG_MEMCLEAN()          DLog(@"has cleaned up some memory");
 #define MSG_DIDUNLOAD()         DLog(@"unloaded");
 
-#define CURRENT_AMMOSIZE        46
+#define CURRENT_AMMOSIZE        48      // also add a line in SingleWeaponViewController array
 
 #define UICOLOR_HW_YELLOW_BODER [UIColor colorWithRed:(CGFloat)0xFE/255 green:(CGFloat)0xC0/255 blue:0 alpha:1]
 #define UICOLOR_HW_YELLOW_TEXT  [UIColor colorWithRed:(CGFloat)0xF0/255 green:(CGFloat)0xD0/255 blue:0 alpha:1]
 
 void createTeamNamed (NSString *nameWithoutExt);
-void createWeaponNamed (NSString *nameWithoutExt);
+void createWeaponNamed (NSString *nameWithoutExt, int type);
 void createSchemeNamed (NSString *nameWithoutExt);
 BOOL rotationManager (UIInterfaceOrientation interfaceOrientation);
 NSInteger randomPort ();
--- a/project_files/HedgewarsMobile/Classes/CommodityFunctions.m	Thu Aug 12 23:15:11 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/CommodityFunctions.m	Fri Aug 13 02:13:18 2010 +0200
@@ -45,7 +45,7 @@
     [theTeam release];
 }
 
-void createWeaponNamed (NSString *nameWithoutExt) {
+void createWeaponNamed (NSString *nameWithoutExt, int type) {
     NSString *weaponsDirectory = WEAPONS_DIRECTORY();
 
     if (![[NSFileManager defaultManager] fileExistsAtPath: weaponsDirectory]) {
@@ -55,13 +55,61 @@
                                                         error:NULL];
     }
 
-    NSDictionary *theWeapon = [[NSDictionary alloc] initWithObjectsAndKeys:
-                               [NSNumber numberWithInt:CURRENT_AMMOSIZE],@"version",
-                               @"9391929422199121032235111001201000000211110111",@"ammostore_initialqt",
-                               @"0405040541600655546554464776576666666155510111",@"ammostore_probability",
-                               @"0000000000000205500000040007004000000000200000",@"ammostore_delay",
-                               @"1311110312111111123114111111111111111211111111",@"ammostore_crate", nil];
-
+    NSDictionary *theWeapon;
+    switch (type) {
+        case 0: //default
+            theWeapon = [[NSDictionary alloc] initWithObjectsAndKeys:
+                         [NSNumber numberWithInt:CURRENT_AMMOSIZE],@"version",
+                         @"939192942219912103223511100120100000021111011101",@"ammostore_initialqt",
+                         @"040504054160065554655446477657666666615551011111",@"ammostore_probability",
+                         @"000000000000020550000004000700400000000020000000",@"ammostore_delay",
+                         @"131111031211111112311411111111111111121111111111",@"ammostore_crate", nil];
+            break;
+        case 1: //crazy
+            theWeapon = [[NSDictionary alloc] initWithObjectsAndKeys:
+                         [NSNumber numberWithInt:CURRENT_AMMOSIZE],@"version",
+                         @"999999999999999999299999999999999929999999999999",@"ammostore_initialqt",
+                         @"111111011111111111111111111111111111111111111111",@"ammostore_probability",
+                         @"000000000000000000000000000000000000000000000000",@"ammostore_delay",
+                         @"131111031211111112311411111111111111121111010111",@"ammostore_crate", nil];
+            break;
+        case 2: //pro mode
+            theWeapon = [[NSDictionary alloc] initWithObjectsAndKeys:
+                         [NSNumber numberWithInt:CURRENT_AMMOSIZE],@"version",
+                         @"909000900000000000000900000000000000000000090000",@"ammostore_initialqt",
+                         @"000000000000000000000000000000000000000000000000",@"ammostore_probability",
+                         @"000000000000020550000004000700400000000020000000",@"ammostore_delay",
+                         @"111111111111111111111111111111111111111110011111",@"ammostore_crate", nil];
+            break;
+        case 3: //shoppa
+            theWeapon = [[NSDictionary alloc] initWithObjectsAndKeys:
+                         [NSNumber numberWithInt:CURRENT_AMMOSIZE],@"version",
+                         @"000000990000000000000000000000000000000000000000",@"ammostore_initialqt",
+                         @"444441004424440221011212122242200000000200040001",@"ammostore_probability",
+                         @"000000000000000000000000000000000000000000000000",@"ammostore_delay",
+                         @"111111111111111111111111111111111111111110111111",@"ammostore_crate", nil];
+            break;
+        case 4: //basketball
+            theWeapon = [[NSDictionary alloc] initWithObjectsAndKeys:
+                         [NSNumber numberWithInt:CURRENT_AMMOSIZE],@"version",
+                         @"939192942219912103223511100120100000021111011100",@"ammostore_initialqt",
+                         @"000000000000000000000000000000000000000000000000",@"ammostore_probability",
+                         @"000000000000000550000004000700400000000020000000",@"ammostore_delay",
+                         @"111111111111111111111111111111111111111111111111",@"ammostore_crate", nil];
+            break;
+        case 5: //minefield
+            theWeapon = [[NSDictionary alloc] initWithObjectsAndKeys:
+                         [NSNumber numberWithInt:CURRENT_AMMOSIZE],@"version",
+                         @"000000990009000000030000000000000000000000000000",@"ammostore_initialqt",
+                         @"000000000000000000000000000000000000000000000000",@"ammostore_probability",
+                         @"000000000000020550000004000700400000000020000000",@"ammostore_delay",
+                         @"111111111111111111111111111111111111111111111111",@"ammostore_crate", nil];
+            break;
+        default:
+            NSLog(@"Nope");
+            break;
+    }
+    
     NSString *weaponFile = [[NSString alloc] initWithFormat:@"%@/%@.plist", weaponsDirectory, nameWithoutExt];
 
     [theWeapon writeToFile:weaponFile atomically:YES];
--- a/project_files/HedgewarsMobile/Classes/GameConfigViewController.m	Thu Aug 12 23:15:11 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/GameConfigViewController.m	Fri Aug 13 02:13:18 2010 +0200
@@ -192,19 +192,14 @@
         mapConfigViewController.delegate = self;
         if (teamConfigViewController == nil)
             teamConfigViewController = [[TeamConfigViewController alloc] initWithStyle:UITableViewStyleGrouped];
-        teamConfigViewController.view.frame = CGRectMake(10, 70, 300, 600);
+        teamConfigViewController.view.frame = CGRectMake(362, 200, 300, 480);
         teamConfigViewController.view.backgroundColor = [UIColor clearColor];
         [mapConfigViewController.view addSubview:teamConfigViewController.view];
         if (schemeWeaponConfigViewController == nil)
             schemeWeaponConfigViewController = [[SchemeWeaponConfigViewController alloc] initWithStyle:UITableViewStyleGrouped];
-        schemeWeaponConfigViewController.view.frame = CGRectMake(362, 200, 300, 480);
+        schemeWeaponConfigViewController.view.frame = CGRectMake(10, 70, 300, 550);
         [mapConfigViewController.view addSubview:schemeWeaponConfigViewController.view];
-        for (UIView *oneView in self.view.subviews) {
-            if ([oneView isMemberOfClass:[UIToolbar class]]) {
-                [oneView setHidden:YES];
-                break;
-            }
-        }
+        mapConfigViewController.view.frame = CGRectMake(0, 0, screen.size.height, screen.size.width);
     } else {
         // this is the visible controller
         mapConfigViewController = [[MapConfigViewController alloc] initWithNibName:@"MapConfigViewController-iPhone" bundle:nil];
--- a/project_files/HedgewarsMobile/Classes/InGameMenuViewController.m	Thu Aug 12 23:15:11 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/InGameMenuViewController.m	Fri Aug 13 02:13:18 2010 +0200
@@ -28,7 +28,7 @@
 -(void) viewDidLoad {
     NSArray *array = [[NSArray alloc] initWithObjects:
                       NSLocalizedString(@"Show Help", @""),
-                      NSLocalizedString(@"Chat", @""),
+                      NSLocalizedString(@"Tag", @""),
                       NSLocalizedString(@"End Game", @""),
                       nil];
     self.menuList = array;
--- a/project_files/HedgewarsMobile/Classes/MainMenuViewController.m	Thu Aug 12 23:15:11 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/MainMenuViewController.m	Fri Aug 13 02:13:18 2010 +0200
@@ -35,7 +35,7 @@
 // using a different thread for audio 'cos it's slow
 -(void) initAudioThread {
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-    Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 1, 512);
+    // do somthing in the future
     [pool release];
 }
 
@@ -55,72 +55,102 @@
                                              selector:@selector(dismissModalViewController)
                                                  name: @"dismissModalView"
                                                object:nil];
+    
+    // now check if some configuration files are already set; if they are present it means that the current copy must be updated
+    NSError *err = nil;
+    NSString *fileToCheck, *teamToCheck, *teamToUpdate, *schemeToCheck, *schemeToUpdate;
+    NSString *resDir = [[NSBundle mainBundle] resourcePath];
+    
+    NSString *dirToCheck = [NSString stringWithFormat:@"%@/Settings/", resDir];
+    if ([[NSFileManager defaultManager] fileExistsAtPath:dirToCheck] == YES) {
 
-    // initialize some files the first time we load the game
-    if (!([[NSFileManager defaultManager] fileExistsAtPath:SETTINGS_FILE()]))
-        [NSThread detachNewThreadSelector:@selector(checkFirstRun) toTarget:self withObject:nil];
+        // if the settings file is already present, we merge current preferences with the update
+        fileToCheck = [NSString stringWithFormat:@"%@/Settings/settings.plist",resDir];
+        if ([[NSFileManager defaultManager] fileExistsAtPath:SETTINGS_FILE()]) {
+            NSDictionary *settings = [[NSDictionary alloc] initWithContentsOfFile:SETTINGS_FILE()];
+            NSMutableDictionary *update = [[NSMutableDictionary alloc] initWithContentsOfFile:fileToCheck];
+            [update addEntriesFromDictionary:settings];
+            [settings release];
+            [update writeToFile:SETTINGS_FILE() atomically:YES];
+            [update release];
+        } else 
+            [[NSFileManager defaultManager] copyItemAtPath:fileToCheck toPath:SETTINGS_FILE() error:&err];
+        
+        // if the teams are already present we merge the old teams if they still exist
+        fileToCheck = [NSString stringWithFormat:@"%@/Settings/Teams",resDir];
+        if ([[NSFileManager defaultManager] fileExistsAtPath:TEAMS_DIRECTORY()]) {
+            for (NSString *str in [[NSFileManager defaultManager] contentsAtPath:fileToCheck]) {
+                teamToCheck = [NSString stringWithFormat:@"%@/%@",TEAMS_DIRECTORY(),str];
+                teamToUpdate = [NSString stringWithFormat:@"%@/Settings/Teams/%@",resDir,str];
+                if ([[NSFileManager defaultManager] fileExistsAtPath:teamToCheck]) {
+                    NSDictionary *team = [[NSDictionary alloc] initWithContentsOfFile:teamToCheck];
+                    NSMutableDictionary *update = [[NSMutableDictionary alloc] initWithContentsOfFile:teamToUpdate];
+                    [update addEntriesFromDictionary:team];
+                    [team release];
+                    [update writeToFile:teamToCheck atomically:YES];
+                    [update release];
+                }
+            }
+        } else
+            [[NSFileManager defaultManager] copyItemAtPath:fileToCheck toPath:TEAMS_DIRECTORY() error:&err];
 
+        // the same holds for schemes (but they're arrays)
+        fileToCheck = [NSString stringWithFormat:@"%@/Settings/Schemes",resDir];
+        if ([[NSFileManager defaultManager] fileExistsAtPath:SCHEMES_DIRECTORY()]) {
+            for (NSString *str in [[NSFileManager defaultManager] contentsAtPath:fileToCheck]) {
+                schemeToCheck = [NSString stringWithFormat:@"%@/%@",SCHEMES_DIRECTORY(),str];
+                schemeToUpdate = [NSString stringWithFormat:@"%@/Settings/Schemes/%@",resDir,str];
+                if ([[NSFileManager defaultManager] fileExistsAtPath:schemeToCheck]) {
+                    NSArray *scheme = [[NSArray alloc] initWithContentsOfFile:schemeToCheck];
+                    NSArray *update = [[NSArray alloc] initWithContentsOfFile:schemeToUpdate];
+                    if ([update count] > [scheme count])
+                        [update writeToFile:schemeToCheck atomically:YES];
+                    [update release];
+                    [scheme release];
+                }
+            }
+        } else
+            [[NSFileManager defaultManager] copyItemAtPath:fileToCheck toPath:SCHEMES_DIRECTORY() error:&err];
+        
+        // we create weapons the first time only, they are autoupdated each time
+        if ([[NSFileManager defaultManager] fileExistsAtPath:WEAPONS_DIRECTORY()] == NO) {
+            [[NSFileManager defaultManager] createDirectoryAtPath:WEAPONS_DIRECTORY()
+                                      withIntermediateDirectories:YES
+                                                       attributes:nil
+                                                            error:&err];
+            createWeaponNamed(@"Default", 0);
+            createWeaponNamed(@"Crazy", 1);
+            createWeaponNamed(@"Pro mode", 2);
+            createWeaponNamed(@"Shoppa", 3);
+            createWeaponNamed(@"Basketball", 4);
+            createWeaponNamed(@"Minefield", 5);
+        }
+        
+        // clean this dir so that it doesn't get called again
+        [[NSFileManager defaultManager] removeItemAtPath:dirToCheck error:&err];
+        if (err != nil) 
+            DLog(@"%@", err);
+    }
+    
     [super viewDidLoad];
 }
 
-// this is called to verify whether it's the first time the app is launched
-// if it is it blocks user interaction with an alertView until files are created
--(void) checkFirstRun {
-    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-    DLog(@"First time run, creating settings files at %@", SETTINGS_FILE());
-
-    // show a popup with an indicator to make the user wait
-    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Please wait",@"")
-                                                    message:nil
-                                                   delegate:nil
-                                          cancelButtonTitle:nil
-                                          otherButtonTitles:nil];
-    [alert show];
-
-    UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc]
-                                          initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
-    indicator.center = CGPointMake(alert.bounds.size.width / 2, alert.bounds.size.height - 50);
-    [indicator startAnimating];
-    [alert addSubview:indicator];
-    [indicator release];
-
-    // create default files (teams/weapons/scheme)
-    createTeamNamed(@"Pirates");
-    createTeamNamed(@"Ninjas");
-    createWeaponNamed(@"Default");
-    createSchemeNamed(@"Default");
-
-    // create settings.plist
-    NSMutableDictionary *saveDict = [[NSMutableDictionary alloc] init];
-
-    [saveDict setObject:@"" forKey:@"username"];
-    [saveDict setObject:@"" forKey:@"password"];
-    [saveDict setObject:[NSNumber numberWithBool:YES] forKey:@"music"];
-    [saveDict setObject:[NSNumber numberWithBool:YES] forKey:@"sound"];
-    [saveDict setObject:[NSNumber numberWithBool:NO] forKey:@"alternate"];
-
-    [saveDict writeToFile:SETTINGS_FILE() atomically:YES];
-    [saveDict release];
-
-    // ok let the user take control
-    [alert dismissWithClickedButtonIndex:0 animated:YES];
-    [alert release];
-
-    [pool release];
-
-    // TODO: instead of this useless runtime initialization, check that all ammos remain compatible with engine
-}
 
 #pragma mark -
 -(IBAction) switchViews:(id) sender {
     UIButton *button = (UIButton *)sender;
     UIAlertView *alert;
-    NSString *debugStr;
+    NSString *xib;
 
     switch (button.tag) {
         case 0:
             if (nil == self.gameConfigViewController) {
-                GameConfigViewController *gcvc = [[GameConfigViewController alloc] initWithNibName:@"GameConfigViewController" bundle:nil];
+                if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
+                    xib = nil;
+                else
+                    xib = @"GameConfigViewController";
+                
+                GameConfigViewController *gcvc = [[GameConfigViewController alloc] initWithNibName:xib bundle:nil];
                 self.gameConfigViewController = gcvc;
                 [gcvc release];
             }
--- a/project_files/HedgewarsMobile/Classes/MasterViewController.m	Thu Aug 12 23:15:11 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/MasterViewController.m	Fri Aug 13 02:13:18 2010 +0200
@@ -42,6 +42,7 @@
         if (nil == generalSettingsViewController)
             generalSettingsViewController = [[GeneralSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
         generalSettingsViewController.navigationItem.hidesBackButton = YES;
+        [generalSettingsViewController viewWillAppear:YES];
         [self.navigationController pushViewController:generalSettingsViewController animated:NO];
     } else {
         self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
--- a/project_files/HedgewarsMobile/Classes/OverlayViewController.h	Thu Aug 12 23:15:11 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/OverlayViewController.h	Fri Aug 13 02:13:18 2010 +0200
@@ -24,6 +24,7 @@
     CGFloat initialDistanceForPinching;
     CGPoint startingPoint;
     BOOL isSegmentVisible;
+    BOOL isAttacking;
 
     // the sdl window underneath
     SDL_Window *sdlwindow;
--- a/project_files/HedgewarsMobile/Classes/OverlayViewController.m	Thu Aug 12 23:15:11 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/OverlayViewController.m	Fri Aug 13 02:13:18 2010 +0200
@@ -71,6 +71,7 @@
             break;
         */
         default:
+            // a debug log would spam too much
             break;
     }
     self.view.frame = usefulRect;
@@ -81,12 +82,15 @@
 #pragma mark -
 #pragma mark View Management
 -(void) viewDidLoad {
+    isAttacking = NO;
+    
+    // i called it a popover even on the iphone
     isPopoverVisible = NO;
     self.view.alpha = 0;
     self.view.center = CGPointMake(self.view.frame.size.height/2.0, self.view.frame.size.width/2.0);
 
-    // set initial orientation
-    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
+    // set initial orientation wrt the controller orientation
+    UIDeviceOrientation orientation = self.interfaceOrientation;
     UIView *sdlView = [[[UIApplication sharedApplication] keyWindow] viewWithTag:SDL_VIEW_TAG];
     switch (orientation) {
         case UIDeviceOrientationLandscapeLeft:
@@ -98,6 +102,7 @@
             self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(-90));
             break;
         default:
+            DLog(@"unknown orientation");
             break;
     }
     CGRect rect = [[UIScreen mainScreen] bounds];
@@ -201,6 +206,7 @@
             break;
     }
 
+    isAttacking = NO;
     doDim();
 }
 
@@ -218,23 +224,26 @@
 
     switch (theButton.tag) {
         case 0:
-            HW_walkLeft();
+            if (isAttacking == NO)
+                HW_walkLeft();
             break;
         case 1:
-            HW_walkRight();
+            if (isAttacking == NO)
+                HW_walkRight();
             break;
         case 2:
             [self performSelector:@selector(unsetPreciseStatus) withObject:nil afterDelay:0.8];
-            HW_preciseSet(YES);
+            HW_preciseSet(!HW_isWeaponRope());
             HW_aimUp();
             break;
         case 3:
             [self performSelector:@selector(unsetPreciseStatus) withObject:nil afterDelay:0.8];
-            HW_preciseSet(YES);
+            HW_preciseSet(!HW_isWeaponRope());
             HW_aimDown();
             break;
         case 4:
             HW_shoot();
+            isAttacking = YES;
             break;
         case 5:
             HW_jump();
@@ -242,9 +251,6 @@
         case 6:
             HW_backjump();
             break;
-        case 7:
-            HW_tab();
-            break;
         case 10:
             HW_pause();
             removeConfirmationInput();
@@ -528,6 +534,7 @@
     UIActivityIndicatorView *indicator = (UIActivityIndicatorView *)[[[[UIApplication sharedApplication] keyWindow] viewWithTag:SDL_VIEW_TAG] viewWithTag:987654];
     [indicator stopAnimating];
     isGameRunning = YES;
+    HW_zoomSet(1.7);
 }
 
 void clearView() {
--- a/project_files/HedgewarsMobile/Classes/PascalImports.h	Thu Aug 12 23:15:11 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/PascalImports.h	Fri Aug 13 02:13:18 2010 +0200
@@ -25,11 +25,14 @@
     void HW_versionInfo(short int *netProto, char **versionStr);
 
     void HW_click(void);
-
+    void HW_ammoMenu(void);
+    
+    void HW_zoomSet(float value);
     void HW_zoomIn(void);
     void HW_zoomOut(void);
     void HW_zoomReset(void);
-    void HW_ammoMenu(void);
+    float HW_zoomFactor(void);
+    int HW_zoomLevel(void);
 
     void HW_walkingKeysUp(void);
     void HW_otherKeysUp(void);
@@ -56,18 +59,15 @@
     void HW_setCursor(int x, int y);
     void HW_getCursor(int *x, int *y);
 
-    void HW_setPianoSound(int snd);
-
-    float HW_zoomFactor(void);
-    int HW_zoomLevel(void);
-
     BOOL HW_isAmmoOpen(void);
     BOOL HW_isPaused(void);
     BOOL HW_isWeaponRequiringClick(void);
     BOOL HW_isWeaponTimerable(void);
     BOOL HW_isWeaponSwitch(void);
+    BOOL HW_isWeaponRope(void);
 
     void HW_setGrenadeTime(int time);
+    void HW_setPianoSound(int snd);
 
 #ifdef __cplusplus
 }
--- a/project_files/HedgewarsMobile/Classes/SDL_uikitappdelegate.m	Thu Aug 12 23:15:11 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/SDL_uikitappdelegate.m	Fri Aug 13 02:13:18 2010 +0200
@@ -133,7 +133,6 @@
 }
 
 -(void) applicationWillTerminate:(UIApplication *)application {
-    Mix_CloseAudio();
     SDL_SendQuit();
 
     if (isInGame) {
--- a/project_files/HedgewarsMobile/Classes/SingleWeaponViewController.m	Thu Aug 12 23:15:11 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/SingleWeaponViewController.m	Fri Aug 13 02:13:18 2010 +0200
@@ -23,6 +23,7 @@
 -(void) viewDidLoad {
     [super viewDidLoad];
 
+    // also increment CURRENT_AMMOSIZE in CommodityFunctions.h
     NSArray *array = [[NSArray alloc] initWithObjects:
                       NSLocalizedString(@"Grenade",@""),
                       NSLocalizedString(@"Cluster Bomb",@""),
@@ -70,6 +71,8 @@
                       NSLocalizedString(@"Old Limburger",@""),
                       NSLocalizedString(@"Sine Gun",@""),
                       NSLocalizedString(@"Flamethrower",@""),
+                      NSLocalizedString(@"Sticky Mine",@""),
+                      NSLocalizedString(@"Hammer",@""),
                       nil];
     self.ammoNames = array;
     [array release];
--- a/project_files/HedgewarsMobile/Classes/WeaponSettingsViewController.m	Thu Aug 12 23:15:11 2010 +0200
+++ b/project_files/HedgewarsMobile/Classes/WeaponSettingsViewController.m	Fri Aug 13 02:13:18 2010 +0200
@@ -66,7 +66,7 @@
 -(void) addWeapon:(id) sender {
     NSString *fileName = [[NSString alloc] initWithFormat:@"Weapon %u.plist", [self.listOfWeapons count]];
 
-    createWeaponNamed([fileName stringByDeletingPathExtension]);
+    createWeaponNamed([fileName stringByDeletingPathExtension], 0);
 
     [self.listOfWeapons addObject:fileName];
     [fileName release];
--- a/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj	Thu Aug 12 23:15:11 2010 +0200
+++ b/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj	Fri Aug 13 02:13:18 2010 +0200
@@ -112,6 +112,8 @@
 		61799289114AE08700BA94A9 /* Data in Resources */ = {isa = PBXBuildFile; fileRef = 61798A5E114AE08600BA94A9 /* Data */; };
 		6183D83E11E2BCE200A88903 /* LI-ipad-Landscape.png in Resources */ = {isa = PBXBuildFile; fileRef = 6183D83C11E2BCE200A88903 /* LI-ipad-Landscape.png */; };
 		6183D83F11E2BCE200A88903 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 6183D83D11E2BCE200A88903 /* Default.png */; };
+		6187AEBD120781B900B31A27 /* Settings in Resources */ = {isa = PBXBuildFile; fileRef = 6187AEA5120781B900B31A27 /* Settings */; };
+		6187AEBE120781C000B31A27 /* Settings in CopyFiles */ = {isa = PBXBuildFile; fileRef = 6187AEA5120781B900B31A27 /* Settings */; };
 		619C09EA11E8B8D600F1DF16 /* title_small.png in Resources */ = {isa = PBXBuildFile; fileRef = 619C09E911E8B8D600F1DF16 /* title_small.png */; };
 		61A1188511683A8C00359010 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 61A117FE1168322700359010 /* CoreGraphics.framework */; settings = {ATTRIBUTES = (Required, ); }; };
 		61A118D311683CD100359010 /* HedgewarsTitle.png in Resources */ = {isa = PBXBuildFile; fileRef = 611FD9CB1155A28C00C2203D /* HedgewarsTitle.png */; };
@@ -683,6 +685,19 @@
 		};
 /* End PBXContainerItemProxy section */
 
+/* Begin PBXCopyFilesBuildPhase section */
+		6187AE9E12077F9600B31A27 /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = .;
+			dstSubfolderSpec = 7;
+			files = (
+				6187AEBE120781C000B31A27 /* Settings in CopyFiles */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
 /* Begin PBXFileReference section */
 		1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
 		1D6058910D05DD3D006BFB54 /* Hedgewars.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Hedgewars.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -817,6 +832,7 @@
 		6183D83C11E2BCE200A88903 /* LI-ipad-Landscape.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "LI-ipad-Landscape.png"; path = "Resources/Icons/LI-ipad-Landscape.png"; sourceTree = "<group>"; };
 		6183D83D11E2BCE200A88903 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = Resources/Icons/Default.png; sourceTree = "<group>"; };
 		618736B8118CA28600123B23 /* GearDrawing.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = GearDrawing.inc; path = ../../hedgewars/GearDrawing.inc; sourceTree = SOURCE_ROOT; };
+		6187AEA5120781B900B31A27 /* Settings */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Settings; path = Resources/Settings; sourceTree = "<group>"; };
 		619C09E911E8B8D600F1DF16 /* title_small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = title_small.png; path = "Resources/Frontend-iPhone/title_small.png"; sourceTree = "<group>"; };
 		61A117FE1168322700359010 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
 		61C079E211F35A300072BF46 /* EditableCellView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditableCellView.h; sourceTree = "<group>"; };
@@ -968,6 +984,7 @@
 				61F903E311DF584D0068B24D /* Frontend-iPhone */,
 				6179936611501D1E00BA94A9 /* Overlay */,
 				61798A5E114AE08600BA94A9 /* Data */,
+				6187AEA5120781B900B31A27 /* Settings */,
 				611FD9CB1155A28C00C2203D /* HedgewarsTitle.png */,
 				8D1107310486CEB800E47090 /* Info.plist */,
 				61F9040811DF58B00068B24D /* settingsButton.png */,
@@ -1355,6 +1372,7 @@
 				1D60588D0D05DD3D006BFB54 /* Resources */,
 				1D60588E0D05DD3D006BFB54 /* Sources */,
 				1D60588F0D05DD3D006BFB54 /* Frameworks */,
+				6187AE9E12077F9600B31A27 /* CopyFiles */,
 			);
 			buildRules = (
 				9283015B0F10E46D00CC5A3C /* PBXBuildRule */,
@@ -1999,6 +2017,7 @@
 				615AD96212073B4D00F2FF04 /* startGameButton.png in Resources */,
 				615AD9E9120764CA00F2FF04 /* backButton.png in Resources */,
 				615AD9EB1207654E00F2FF04 /* helpButton.png in Resources */,
+				6187AEBD120781B900B31A27 /* Settings in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
--- a/project_files/HedgewarsMobile/Info.plist	Thu Aug 12 23:15:11 2010 +0200
+++ b/project_files/HedgewarsMobile/Info.plist	Fri Aug 13 02:13:18 2010 +0200
@@ -40,8 +40,6 @@
 	</array>
 	<key>UILaunchImageFile~ipad</key>
 	<string>LI-ipad</string>
-	<key>UILaunchImageFile~iphone</key>
-	<string>LI-iphone</string>
 	<key>UIApplicationExitsOnSuspend</key>
 	<true/>
 </dict>
--- a/project_files/HedgewarsMobile/Resources/MapConfigViewController-iPad.xib	Thu Aug 12 23:15:11 2010 +0200
+++ b/project_files/HedgewarsMobile/Resources/MapConfigViewController-iPad.xib	Fri Aug 13 02:13:18 2010 +0200
@@ -334,7 +334,7 @@
 					<object class="IBUITableView" id="394383001">
 						<reference key="NSNextResponder" ref="191373211"/>
 						<int key="NSvFlags">274</int>
-						<string key="NSFrame">{{714, 225}, {300, 485}}</string>
+						<string key="NSFrame">{{714, 225}, {300, 445}}</string>
 						<reference key="NSSuperview" ref="191373211"/>
 						<object class="NSColor" key="IBUIBackgroundColor">
 							<int key="NSColorSpace">3</int>
@@ -577,34 +577,6 @@
 						<nil key="parent"/>
 					</object>
 					<object class="IBObjectRecord">
-						<int key="objectID">1</int>
-						<reference key="object" ref="191373211"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="553937568"/>
-							<reference ref="68378447"/>
-							<reference ref="420136851"/>
-							<reference ref="438802257"/>
-							<reference ref="867832822"/>
-							<reference ref="246022224"/>
-							<reference ref="88728219"/>
-							<reference ref="326163764"/>
-							<reference ref="394383001"/>
-							<reference ref="550636851"/>
-							<reference ref="403581306"/>
-							<reference ref="1065439841"/>
-							<reference ref="920829014"/>
-							<reference ref="967260168"/>
-							<reference ref="743202682"/>
-							<reference ref="938256702"/>
-							<reference ref="634417433"/>
-							<reference ref="742028380"/>
-							<reference ref="696928530"/>
-							<reference ref="848132519"/>
-						</object>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
 						<int key="objectID">-1</int>
 						<reference key="object" ref="372490531"/>
 						<reference key="parent" ref="0"/>
@@ -616,13 +588,71 @@
 						<reference key="parent" ref="0"/>
 					</object>
 					<object class="IBObjectRecord">
-						<int key="objectID">7</int>
-						<reference key="object" ref="88728219"/>
+						<int key="objectID">1</int>
+						<reference key="object" ref="191373211"/>
+						<object class="NSMutableArray" key="children">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<reference ref="1065439841"/>
+							<reference ref="403581306"/>
+							<reference ref="550636851"/>
+							<reference ref="394383001"/>
+							<reference ref="920829014"/>
+							<reference ref="68378447"/>
+							<reference ref="967260168"/>
+							<reference ref="743202682"/>
+							<reference ref="634417433"/>
+							<reference ref="326163764"/>
+							<reference ref="938256702"/>
+							<reference ref="88728219"/>
+							<reference ref="848132519"/>
+							<reference ref="696928530"/>
+							<reference ref="742028380"/>
+							<reference ref="246022224"/>
+							<reference ref="438802257"/>
+							<reference ref="867832822"/>
+							<reference ref="553937568"/>
+							<reference ref="420136851"/>
+						</object>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">75</int>
+						<reference key="object" ref="1065439841"/>
 						<reference key="parent" ref="191373211"/>
 					</object>
 					<object class="IBObjectRecord">
-						<int key="objectID">8</int>
-						<reference key="object" ref="938256702"/>
+						<int key="objectID">72</int>
+						<reference key="object" ref="403581306"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">70</int>
+						<reference key="object" ref="550636851"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">66</int>
+						<reference key="object" ref="394383001"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">57</int>
+						<reference key="object" ref="920829014"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">51</int>
+						<reference key="object" ref="68378447"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">39</int>
+						<reference key="object" ref="967260168"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">17</int>
+						<reference key="object" ref="743202682"/>
 						<reference key="parent" ref="191373211"/>
 					</object>
 					<object class="IBObjectRecord">
@@ -631,28 +661,38 @@
 						<reference key="parent" ref="191373211"/>
 					</object>
 					<object class="IBObjectRecord">
-						<int key="objectID">17</int>
-						<reference key="object" ref="743202682"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">39</int>
-						<reference key="object" ref="967260168"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
 						<int key="objectID">9</int>
 						<reference key="object" ref="326163764"/>
 						<reference key="parent" ref="191373211"/>
 					</object>
 					<object class="IBObjectRecord">
-						<int key="objectID">51</int>
-						<reference key="object" ref="68378447"/>
+						<int key="objectID">8</int>
+						<reference key="object" ref="938256702"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">7</int>
+						<reference key="object" ref="88728219"/>
 						<reference key="parent" ref="191373211"/>
 					</object>
 					<object class="IBObjectRecord">
-						<int key="objectID">53</int>
-						<reference key="object" ref="867832822"/>
+						<int key="objectID">78</int>
+						<reference key="object" ref="848132519"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">80</int>
+						<reference key="object" ref="696928530"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">79</int>
+						<reference key="object" ref="742028380"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">61</int>
+						<reference key="object" ref="246022224"/>
 						<reference key="parent" ref="191373211"/>
 					</object>
 					<object class="IBObjectRecord">
@@ -661,13 +701,13 @@
 						<reference key="parent" ref="191373211"/>
 					</object>
 					<object class="IBObjectRecord">
-						<int key="objectID">55</int>
-						<reference key="object" ref="553937568"/>
+						<int key="objectID">53</int>
+						<reference key="object" ref="867832822"/>
 						<reference key="parent" ref="191373211"/>
 					</object>
 					<object class="IBObjectRecord">
-						<int key="objectID">57</int>
-						<reference key="object" ref="920829014"/>
+						<int key="objectID">55</int>
+						<reference key="object" ref="553937568"/>
 						<reference key="parent" ref="191373211"/>
 					</object>
 					<object class="IBObjectRecord">
@@ -675,46 +715,6 @@
 						<reference key="object" ref="420136851"/>
 						<reference key="parent" ref="191373211"/>
 					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">61</int>
-						<reference key="object" ref="246022224"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">66</int>
-						<reference key="object" ref="394383001"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">70</int>
-						<reference key="object" ref="550636851"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">72</int>
-						<reference key="object" ref="403581306"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">75</int>
-						<reference key="object" ref="1065439841"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">78</int>
-						<reference key="object" ref="848132519"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">79</int>
-						<reference key="object" ref="742028380"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">80</int>
-						<reference key="object" ref="696928530"/>
-						<reference key="parent" ref="191373211"/>
-					</object>
 				</object>
 			</object>
 			<object class="NSMutableDictionary" key="flattenedProperties">
@@ -750,7 +750,7 @@
 					<bool key="EncodedWithXMLCoder">YES</bool>
 					<string>MapConfigViewController</string>
 					<string>UIResponder</string>
-					<string>{{82, 256}, {1024, 768}}</string>
+					<string>{{255, 272}, {1024, 768}}</string>
 					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
 					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
 					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
@@ -790,7 +790,7 @@
 				</object>
 			</object>
 			<nil key="sourceID"/>
-			<int key="maxID">80</int>
+			<int key="maxID">112</int>
 		</object>
 		<object class="IBClassDescriber" key="IBDocument.Classes">
 			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Barrel Mayhem.plist	Fri Aug 13 02:13:18 2010 +0200
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<array>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<true/>
+	<false/>
+	<false/>
+	<true/>
+	<false/>
+	<false/>
+	<integer>100</integer>
+	<integer>30</integer>
+	<integer>100</integer>
+	<integer>15</integer>
+	<integer>0</integer>
+	<integer>0</integer>
+	<integer>1</integer>
+	<integer>0</integer>
+	<integer>40</integer>
+</array>
+</plist>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Basketball.plist	Fri Aug 13 02:13:18 2010 +0200
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<array>
+	<false/>
+	<false/>
+	<true/>
+	<true/>
+	<true/>
+	<false/>
+	<true/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<true/>
+	<false/>
+	<false/>
+	<true/>
+	<true/>
+	<false/>
+	<integer>100</integer>
+	<integer>30</integer>
+	<integer>100</integer>
+	<integer>15</integer>
+	<integer>0</integer>
+	<integer>3</integer>
+	<integer>4</integer>
+	<integer>0</integer>
+	<integer>0</integer>
+</array>
+</plist>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Default.plist	Fri Aug 13 02:13:18 2010 +0200
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<array>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<true/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<integer>100</integer>
+	<integer>45</integer>
+	<integer>100</integer>
+	<integer>15</integer>
+	<integer>5</integer>
+	<integer>3</integer>
+	<integer>4</integer>
+	<integer>0</integer>
+	<integer>2</integer>
+</array>
+</plist>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Minefield.plist	Fri Aug 13 02:13:18 2010 +0200
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<array>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<true/>
+	<false/>
+	<false/>
+	<false/>
+	<true/>
+	<false/>
+	<false/>
+	<true/>
+	<true/>
+	<false/>
+	<integer>150</integer>
+	<integer>30</integer>
+	<integer>50</integer>
+	<integer>15</integer>
+	<integer>0</integer>
+	<integer>0</integer>
+	<integer>80</integer>
+	<integer>0</integer>
+	<integer>0</integer>
+</array>
+</plist>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Pro Mode.plist	Fri Aug 13 02:13:18 2010 +0200
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<array>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<true/>
+	<false/>
+	<false/>
+	<true/>
+	<false/>
+	<false/>
+	<integer>100</integer>
+	<integer>15</integer>
+	<integer>100</integer>
+	<integer>15</integer>
+	<integer>0</integer>
+	<integer>3</integer>
+	<integer>4</integer>
+	<integer>0</integer>
+	<integer>2</integer>
+</array>
+</plist>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Shoppa.plist	Fri Aug 13 02:13:18 2010 +0200
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<array>
+	<false/>
+	<false/>
+	<true/>
+	<true/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<false/>
+	<true/>
+	<false/>
+	<false/>
+	<true/>
+	<true/>
+	<false/>
+	<integer>100</integer>
+	<integer>30</integer>
+	<integer>100</integer>
+	<integer>50</integer>
+	<integer>1</integer>
+	<integer>3</integer>
+	<integer>4</integer>
+	<integer>0</integer>
+	<integer>0</integer>
+</array>
+</plist>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Tunnel Hogs.plist	Fri Aug 13 02:13:18 2010 +0200
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<array>
+	<false/>
+	<false/>
+	<false/>
+	<true/>
+	<false/>
+	<false/>
+	<false/>
+	<true/>
+	<false/>
+	<false/>
+	<false/>
+	<true/>
+	<false/>
+	<false/>
+	<true/>
+	<true/>
+	<true/>
+	<integer>100</integer>
+	<integer>30</integer>
+	<integer>100</integer>
+	<integer>15</integer>
+	<integer>5</integer>
+	<integer>3</integer>
+	<integer>10</integer>
+	<integer>10</integer>
+	<integer>10</integer>
+</array>
+</plist>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Resources/Settings/Teams/Ninjas.plist	Fri Aug 13 02:13:18 2010 +0200
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>flag</key>
+	<string>japan</string>
+	<key>fort</key>
+	<string>Plane</string>
+	<key>grave</key>
+	<string>bp2</string>
+	<key>hash</key>
+	<string>0</string>
+	<key>hedgehogs</key>
+	<array>
+		<dict>
+			<key>hat</key>
+			<string>NoHat</string>
+			<key>hogname</key>
+			<string>Ukemi</string>
+			<key>level</key>
+			<integer>0</integer>
+		</dict>
+		<dict>
+			<key>hat</key>
+			<string>NoHat</string>
+			<key>hogname</key>
+			<string>Godai</string>
+			<key>level</key>
+			<integer>0</integer>
+		</dict>
+		<dict>
+			<key>hat</key>
+			<string>NoHat</string>
+			<key>hogname</key>
+			<string>Ninpo</string>
+			<key>level</key>
+			<integer>0</integer>
+		</dict>
+		<dict>
+			<key>hat</key>
+			<string>NoHat</string>
+			<key>hogname</key>
+			<string>Shinobi</string>
+			<key>level</key>
+			<integer>0</integer>
+		</dict>
+		<dict>
+			<key>hat</key>
+			<string>NoHat</string>
+			<key>hogname</key>
+			<string>Tatsujin</string>
+			<key>level</key>
+			<integer>0</integer>
+		</dict>
+		<dict>
+			<key>hat</key>
+			<string>NoHat</string>
+			<key>hogname</key>
+			<string>Arashi</string>
+			<key>level</key>
+			<integer>0</integer>
+		</dict>
+		<dict>
+			<key>hat</key>
+			<string>NoHat</string>
+			<key>hogname</key>
+			<string>Bushi</string>
+			<key>level</key>
+			<integer>0</integer>
+		</dict>
+		<dict>
+			<key>hat</key>
+			<string>NoHat</string>
+			<key>hogname</key>
+			<string>Itami</string>
+			<key>level</key>
+			<integer>0</integer>
+		</dict>
+	</array>
+	<key>voicepack</key>
+	<string>Default</string>
+</dict>
+</plist>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Resources/Settings/Teams/Pirates.plist	Fri Aug 13 02:13:18 2010 +0200
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>flag</key>
+	<string>cm_pirate</string>
+	<key>fort</key>
+	<string>Plane</string>
+	<key>grave</key>
+	<string>chest</string>
+	<key>hash</key>
+	<string>0</string>
+	<key>hedgehogs</key>
+	<array>
+		<dict>
+			<key>hat</key>
+			<string>NoHat</string>
+			<key>hogname</key>
+			<string>Toothless Wayne</string>
+			<key>level</key>
+			<integer>0</integer>
+		</dict>
+		<dict>
+			<key>hat</key>
+			<string>NoHat</string>
+			<key>hogname</key>
+			<string>Long-nose Kidd</string>
+			<key>level</key>
+			<integer>0</integer>
+		</dict>
+		<dict>
+			<key>hat</key>
+			<string>NoHat</string>
+			<key>hogname</key>
+			<string>Eye-patch Jim</string>
+			<key>level</key>
+			<integer>0</integer>
+		</dict>
+		<dict>
+			<key>hat</key>
+			<string>NoHat</string>
+			<key>hogname</key>
+			<string>Rackham Blood</string>
+			<key>level</key>
+			<integer>0</integer>
+		</dict>
+		<dict>
+			<key>hat</key>
+			<string>NoHat</string>
+			<key>hogname</key>
+			<string>One-eyed Ayee</string>
+			<key>level</key>
+			<integer>0</integer>
+		</dict>
+		<dict>
+			<key>hat</key>
+			<string>NoHat</string>
+			<key>hogname</key>
+			<string>Dirty Ben</string>
+			<key>level</key>
+			<integer>0</integer>
+		</dict>
+		<dict>
+			<key>hat</key>
+			<string>NoHat</string>
+			<key>hogname</key>
+			<string>Morris</string>
+			<key>level</key>
+			<integer>0</integer>
+		</dict>
+		<dict>
+			<key>hat</key>
+			<string>NoHat</string>
+			<key>hogname</key>
+			<string>Cruise Seymour</string>
+			<key>level</key>
+			<integer>0</integer>
+		</dict>
+	</array>
+	<key>voicepack</key>
+	<string>Pirates</string>
+</dict>
+</plist>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Resources/Settings/settings.plist	Fri Aug 13 02:13:18 2010 +0200
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>alternate</key>
+	<false/>
+	<key>music</key>
+	<true/>
+	<key>password</key>
+	<string></string>
+	<key>sound</key>
+	<true/>
+	<key>username</key>
+	<string></string>
+</dict>
+</plist>