Merge ios-develop into default
authorantonc27 <antonc27@mail.ru>
Sun, 10 Jun 2018 19:01:50 +0200
changeset 13412 236cc4cf2448
parent 13410 7487e683c6b6 (current diff)
parent 13411 6e8b807bda4b (diff)
child 13413 ba39a1d396c0
child 13414 28b314ad566d
Merge ios-develop into default
.hgtags
hedgewars/uInputHandler.pas
hedgewars/uTeams.pas
hedgewars/uWorld.pas
project_files/HedgewarsMobile/Default-568h@2x.png
project_files/HedgewarsMobile/Locale/Bulgarian.lproj/About.strings
project_files/HedgewarsMobile/Locale/Bulgarian.lproj/Localizable.strings
project_files/HedgewarsMobile/Locale/Bulgarian.lproj/Scheme.strings
project_files/HedgewarsMobile/Locale/Danish.lproj/About.strings
project_files/HedgewarsMobile/Locale/Danish.lproj/Localizable.strings
project_files/HedgewarsMobile/Locale/Danish.lproj/Scheme.strings
project_files/HedgewarsMobile/Locale/English.lproj/About.strings
project_files/HedgewarsMobile/Locale/English.lproj/Localizable.strings
project_files/HedgewarsMobile/Locale/English.lproj/Scheme.strings
project_files/HedgewarsMobile/Locale/French.lproj/About.strings
project_files/HedgewarsMobile/Locale/French.lproj/Localizable.strings
project_files/HedgewarsMobile/Locale/French.lproj/Scheme.strings
project_files/HedgewarsMobile/Locale/German.lproj/About.strings
project_files/HedgewarsMobile/Locale/German.lproj/Localizable.strings
project_files/HedgewarsMobile/Locale/German.lproj/Scheme.strings
project_files/HedgewarsMobile/Locale/Italian.lproj/About.strings
project_files/HedgewarsMobile/Locale/Italian.lproj/Localizable.strings
project_files/HedgewarsMobile/Locale/Italian.lproj/Scheme.strings
project_files/HedgewarsMobile/Locale/Japanese.lproj/About.strings
project_files/HedgewarsMobile/Locale/Japanese.lproj/Localizable.strings
project_files/HedgewarsMobile/Locale/Japanese.lproj/Scheme.strings
project_files/HedgewarsMobile/Locale/Polish.lproj/About.strings
project_files/HedgewarsMobile/Locale/Polish.lproj/Localizable.strings
project_files/HedgewarsMobile/Locale/Polish.lproj/Scheme.strings
project_files/HedgewarsMobile/Locale/Portuguese.lproj/About.strings
project_files/HedgewarsMobile/Locale/Portuguese.lproj/Localizable.strings
project_files/HedgewarsMobile/Locale/Portuguese.lproj/Scheme.strings
project_files/HedgewarsMobile/Locale/Romanian.lproj/About.strings
project_files/HedgewarsMobile/Locale/Romanian.lproj/Localizable.strings
project_files/HedgewarsMobile/Locale/Romanian.lproj/Scheme.strings
project_files/HedgewarsMobile/Locale/Spanish.lproj/About.strings
project_files/HedgewarsMobile/Locale/Spanish.lproj/Localizable.strings
project_files/HedgewarsMobile/Locale/Spanish.lproj/Scheme.strings
project_files/HedgewarsMobile/Resources/Icons/Default-ipad-Landscape.png
project_files/HedgewarsMobile/Resources/Icons/Default.png
project_files/HedgewarsMobile/Resources/Icons/Default@2x.png
project_files/HedgewarsMobile/Resources/Icons/Icon-60@2x.png
project_files/HedgewarsMobile/Resources/Icons/Icon-72.png
project_files/HedgewarsMobile/Resources/Icons/Icon-76.png
project_files/HedgewarsMobile/Resources/Icons/Icon-76@2x.png
project_files/HedgewarsMobile/Resources/Icons/Icon-Small-50.png
project_files/HedgewarsMobile/Resources/Icons/Icon-Small.png
project_files/HedgewarsMobile/Resources/Icons/Icon-Small@2x.png
project_files/HedgewarsMobile/Resources/Icons/Icon.png
project_files/HedgewarsMobile/Resources/Icons/Icon@2x.png
project_files/HedgewarsMobile/Resources/Icons/iTunesArtwork.png
--- a/.hgtags	Thu May 31 01:50:49 2018 +0200
+++ b/.hgtags	Sun Jun 10 19:01:50 2018 +0200
@@ -87,3 +87,4 @@
 0000000000000000000000000000000000000000 0.9.24.1-release
 0000000000000000000000000000000000000000 0.9.24.1-release
 afc089c39556bdd895892fa36ed47aaec83c3825 0.9.24.1-release
+195208deff1dd3e22d303d4a92c2ba14be3b6623 Hedgewars-iOS-2.1
--- a/hedgewars/uInputHandler.pas	Thu May 31 01:50:49 2018 +0200
+++ b/hedgewars/uInputHandler.pas	Sun Jun 10 19:01:50 2018 +0200
@@ -497,7 +497,7 @@
 var j: Integer;
 begin
 ControllerEnabled:= 0;
-{$IFDEF IPHONE}
+{$IFDEF IPHONEOS}
 exit; // joystick subsystem disabled on iPhone
 {$ENDIF}
 
--- a/hedgewars/uTeams.pas	Thu May 31 01:50:49 2018 +0200
+++ b/hedgewars/uTeams.pas	Sun Jun 10 19:01:50 2018 +0200
@@ -872,7 +872,7 @@
 LocalClan:= -1;
 LocalTeam:= -1;
 LocalAmmo:= -1;
-GameOver:= false;
+TeamsGameOver:= false;
 NextClan:= true;
 MaxTeamHealth:= 0;
 end;
--- a/hedgewars/uWorld.pas	Thu May 31 01:50:49 2018 +0200
+++ b/hedgewars/uWorld.pas	Sun Jun 10 19:01:50 2018 +0200
@@ -2014,12 +2014,14 @@
 
 procedure onFocusStateChanged;
 begin
-if (not cHasFocus) and (GameState <> gsConfirm) then
-    ParseCommand('quit', true);
 {$IFDEF MOBILE}
+if (not cHasFocus) and (not isPaused) then
+    ParseCommand('pause', true);
 // when created SDL receives an exposure event that calls UndampenAudio at full power, muting audio
 exit;
 {$ENDIF}
+if (not cHasFocus) and (GameState <> gsConfirm) then
+    ParseCommand('quit', true);
 
 {$IFDEF USE_VIDEO_RECORDING}
 // do not change volume during prerecording as it will affect sound in video file
--- a/misc/liblua/Xcode/Lua.xcodeproj/project.pbxproj	Thu May 31 01:50:49 2018 +0200
+++ b/misc/liblua/Xcode/Lua.xcodeproj/project.pbxproj	Sun Jun 10 19:01:50 2018 +0200
@@ -397,6 +397,7 @@
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				ENABLE_BITCODE = NO;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				ENABLE_TESTABILITY = YES;
 				GCC_C_LANGUAGE_STANDARD = c99;
@@ -430,6 +431,7 @@
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				ENABLE_BITCODE = NO;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				GCC_C_LANGUAGE_STANDARD = c99;
 				GCC_FAST_MATH = YES;
--- a/misc/liblua/loslib.c	Thu May 31 01:50:49 2018 +0200
+++ b/misc/liblua/loslib.c	Sun Jun 10 19:01:50 2018 +0200
@@ -19,6 +19,17 @@
 #include "lauxlib.h"
 #include "lualib.h"
 
+#if ((defined __MACH__) && (defined __APPLE__))
+  #include <TargetConditionals.h>
+  #if TARGET_OS_IPHONE
+    #define LUA_PLATFORM_IOS 1
+  #endif
+#endif
+
+#ifdef LUA_PLATFORM_IOS
+  #include <spawn.h>
+  extern char **environ;
+#endif
 
 static int os_pushresult (lua_State *L, int i, const char *filename) {
   int en = errno;  /* calls to Lua API may change this value */
@@ -36,7 +47,18 @@
 
 
 static int os_execute (lua_State *L) {
-  lua_pushinteger(L, system(luaL_optstring(L, 1, NULL)));
+  const char *command = luaL_optstring(L, 1, NULL);
+  int status;
+#ifndef LUA_PLATFORM_IOS
+  status = system(command);
+#else
+  // untested, may require adjustments depending on `command`
+  pid_t pid;
+  char *argv[] = { (char *)command, NULL };
+  posix_spawn(&pid, argv[0], NULL, NULL, argv, environ);
+  waitpid(pid, &status, 0);
+#endif
+  lua_pushinteger(L, status);
   return 1;
 }
 
--- a/misc/libphysfs/Xcode/Physfs.xcodeproj/project.pbxproj	Thu May 31 01:50:49 2018 +0200
+++ b/misc/libphysfs/Xcode/Physfs.xcodeproj/project.pbxproj	Sun Jun 10 19:01:50 2018 +0200
@@ -272,6 +272,7 @@
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				ENABLE_BITCODE = NO;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				ENABLE_TESTABILITY = YES;
 				GCC_C_LANGUAGE_STANDARD = c99;
@@ -309,6 +310,7 @@
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				ENABLE_BITCODE = NO;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				GCC_C_LANGUAGE_STANDARD = c99;
 				GCC_NO_COMMON_BLOCKS = YES;
--- a/misc/libphyslayer/Xcode/Physlayer.xcodeproj/project.pbxproj	Thu May 31 01:50:49 2018 +0200
+++ b/misc/libphyslayer/Xcode/Physlayer.xcodeproj/project.pbxproj	Sun Jun 10 19:01:50 2018 +0200
@@ -203,6 +203,7 @@
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				ENABLE_BITCODE = NO;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				ENABLE_TESTABILITY = YES;
 				GCC_C_LANGUAGE_STANDARD = c99;
@@ -220,6 +221,7 @@
 					"\"$(SRCROOT)/../../liblua\"",
 					"\"$(SRCROOT)/../../../../Library/SDL/include\"",
 				);
+				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
 				ONLY_ACTIVE_ARCH = YES;
 				OTHER_LDFLAGS = "-ObjC";
 				PREBINDING = NO;
@@ -238,6 +240,7 @@
 				CLANG_WARN_INT_CONVERSION = YES;
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				ENABLE_BITCODE = NO;
 				ENABLE_STRICT_OBJC_MSGSEND = YES;
 				GCC_C_LANGUAGE_STANDARD = c99;
 				GCC_NO_COMMON_BLOCKS = YES;
@@ -253,6 +256,7 @@
 					"\"$(SRCROOT)/../../liblua\"",
 					"\"$(SRCROOT)/../../../../Library/SDL/include\"",
 				);
+				IPHONEOS_DEPLOYMENT_TARGET = 7.0;
 				OTHER_LDFLAGS = "-ObjC";
 				PREBINDING = NO;
 				SDKROOT = iphoneos;
--- a/project_files/HedgewarsMobile/Classes/AboutViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/AboutViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -26,11 +26,11 @@
     NSArray *people;
 }
 
-@property (nonatomic,retain) IBOutlet UITableView *tableView;
-@property (nonatomic,retain) IBOutlet UISegmentedControl *segmentedControl;
-@property (nonatomic,retain) NSArray *people;
+@property (nonatomic, strong) IBOutlet UITableView *tableView;
+@property (nonatomic, strong) IBOutlet UISegmentedControl *segmentedControl;
+@property (nonatomic, strong) NSArray *people;
 
--(IBAction) buttonPressed:(id) sender;
--(IBAction) segmentedControlChanged:(id) sender;
+- (IBAction)buttonPressed:(id)sender;
+- (IBAction)segmentedControlChanged:(id)sender;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/AboutViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/AboutViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -23,11 +23,11 @@
 @implementation AboutViewController
 @synthesize tableView, segmentedControl, people;
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
--(void) viewDidLoad
+- (void)viewDidLoad
 {
     [super viewDidLoad];
     
@@ -36,7 +36,6 @@
 
     NSArray *array = [[NSArray alloc] initWithContentsOfFile:CREDITS_FILE()];
     self.people = array;
-    [array release];
 
     NSString *imgName;
     if (IS_IPAD())
@@ -45,16 +44,14 @@
         imgName = @"smallerBackground~iphone.png";
     UIImage *img = [[UIImage alloc] initWithContentsOfFile:imgName];
     UIImageView *background = [[UIImageView alloc] initWithImage:img];
-    [img release];
     background.frame = self.view.frame;
     background.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
     [self.view insertSubview:background atIndex:0];
-    [background release];
 
     [self localizeSegmentedControl];
 }
 
--(IBAction) buttonPressed:(id) sender {
+- (IBAction)buttonPressed:(id)sender {
     [[AudioManagerController mainManager] playBackSound];
     [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
 }
@@ -70,7 +67,7 @@
     }
 }
 
--(IBAction) segmentedControlChanged:(id) sender {
+- (IBAction)segmentedControlChanged:(id)sender {
     [[AudioManagerController mainManager] playClickSound];
     [self.tableView setContentOffset:CGPointMake(0, 0) animated:NO];
     [self.tableView reloadData];
@@ -91,7 +88,7 @@
 
     UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil)
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
+        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
 
     // first all the names, then the title (which is offset 5)
     cell.textLabel.text = [[self.people objectAtIndex:self.segmentedControl.selectedSegmentIndex] objectAtIndex:[indexPath row]];
@@ -105,15 +102,15 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     // do nothing
 }
 
--(CGFloat) tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
+- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
     return 95;
 }
 
--(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger) section {
+-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
     NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
     char *fullver;
     int proto;
@@ -133,33 +130,18 @@
     label.textColor = [UIColor lightGrayColor];
     label.numberOfLines = 5;
     label.text = footerString;
-    [footerString release];
 
     label.backgroundColor = [UIColor clearColor];
     [footer addSubview:label];
-    [label release];
-    return [footer autorelease];
+    return footer;
 }
 
 #pragma mark -
 #pragma mark Memory Management
--(void) didReceiveMemoryWarning {
+
+- (void)didReceiveMemoryWarning {
     self.people = nil;
     [super didReceiveMemoryWarning];
 }
 
--(void) viewDidUnload {
-    self.tableView = nil;
-    self.segmentedControl = nil;
-    self.people = nil;
-    [super viewDidUnload];
-}
-
--(void) dealloc {
-    releaseAndNil(tableView);
-    releaseAndNil(segmentedControl);
-    releaseAndNil(people);
-    [super dealloc];
-}
-
 @end
--- a/project_files/HedgewarsMobile/Classes/AudioManagerController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/AudioManagerController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -33,26 +33,26 @@
     NSOperationQueue *audioFaderQueue;
 }
 
-@property (nonatomic,retain) AVAudioPlayer *backgroundMusic;
+@property (nonatomic, strong) AVAudioPlayer *backgroundMusic;
 @property (assign) SystemSoundID clickSound;
 @property (assign) SystemSoundID backSound;
 @property (assign) SystemSoundID selSound;
 
-@property (nonatomic,retain) NSOperationQueue *audioFaderQueue;
+@property (nonatomic, strong) NSOperationQueue *audioFaderQueue;
 
 +(id) mainManager;
 
--(void) playBackgroundMusic;
--(void) pauseBackgroundMusic;
--(void) stopBackgroundMusic;
+- (void)playBackgroundMusic;
+- (void)pauseBackgroundMusic;
+- (void)stopBackgroundMusic;
 
--(void) fadeInBackgroundMusic;
--(void) fadeOutBackgroundMusic;
+- (void)fadeInBackgroundMusic;
+- (void)fadeOutBackgroundMusic;
 
--(void) playClickSound;
--(void) playBackSound;
--(void) playSelectSound;
+- (void)playClickSound;
+- (void)playBackSound;
+- (void)playSelectSound;
 -(SystemSoundID) loadSound:(NSString *)snd;
--(void) unloadSounds;
+- (void)unloadSounds;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/AudioManagerController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/AudioManagerController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -37,7 +37,7 @@
     return mainInstance;
 }
 
--(id) init {
+- (id)init {
     if ((self = [super init])) {
         self.backgroundMusic = nil;
         self.clickSound = -1;
@@ -49,15 +49,12 @@
     return self;
 }
 
--(void) dealloc {
+- (void)dealloc {
     [self unloadSounds];
-    releaseAndNil(backgroundMusic);
-    releaseAndNil(audioFaderQueue);
     mainInstance = nil;
-    [super dealloc];
 }
 
--(void) didReceiveMemoryWarning {
+- (void)didReceiveMemoryWarning {
     if (self.backgroundMusic.playing == NO)
         self.backgroundMusic = nil;
     if ([self.audioFaderQueue operationCount] == 0)
@@ -69,7 +66,7 @@
 
 #pragma mark -
 #pragma mark background music control
--(void) playBackgroundMusic {
+- (void)playBackgroundMusic {
     if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"music"] boolValue] == NO)
         return;
 
@@ -84,15 +81,15 @@
     [self.backgroundMusic play];
 }
 
--(void) pauseBackgroundMusic {
+- (void)pauseBackgroundMusic {
     [self.backgroundMusic pause];
 }
 
--(void) stopBackgroundMusic {
+- (void)stopBackgroundMusic {
     [self.backgroundMusic stop];
 }
 
--(void) fadeOutBackgroundMusic {
+- (void)fadeOutBackgroundMusic {
     if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"music"] boolValue] == NO)
         return;
 
@@ -103,10 +100,9 @@
                                                                                              toVolume:0.0
                                                                                          overDuration:FADEOUT_DURATION];
     [self.audioFaderQueue addOperation:fadeOut];
-    [fadeOut release];
 }
 
--(void) fadeInBackgroundMusic {
+- (void)fadeInBackgroundMusic {
     if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"music"] boolValue] == NO)
         return;
 
@@ -118,7 +114,6 @@
                                                                                             toVolume:DEFAULT_VOLUME
                                                                                         overDuration:FADEIN_DURATION];
     [audioFaderQueue addOperation:fadeIn];
-    [fadeIn release];
 }
 
 #pragma mark -
@@ -131,17 +126,17 @@
     NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
 
     // use audio sevices to create and play the sound
-    AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
+    AudioServicesCreateSystemSoundID((__bridge CFURLRef)filePath, &soundID);
     return soundID;
 }
 
--(void) unloadSounds {
+- (void)unloadSounds {
     AudioServicesDisposeSystemSoundID(clickSound), clickSound = -1;
     AudioServicesDisposeSystemSoundID(backSound), backSound = -1;
     AudioServicesDisposeSystemSoundID(selSound), selSound = -1;
 }
 
--(void) playClickSound {
+- (void)playClickSound {
     if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"sound"] boolValue] == NO)
         return;
 
@@ -151,7 +146,7 @@
     AudioServicesPlaySystemSound(self.clickSound);
 }
 
--(void) playBackSound {
+- (void)playBackSound {
     if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"sound"] boolValue] == NO)
         return;
 
@@ -161,7 +156,7 @@
     AudioServicesPlaySystemSound(self.backSound);
 }
 
--(void) playSelectSound {
+- (void)playSelectSound {
     if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"sound"] boolValue] == NO)
         return;
 
--- a/project_files/HedgewarsMobile/Classes/CampaignViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/CampaignViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -20,6 +20,6 @@
 
 @interface CampaignViewController : UITableViewController
 
-@property (nonatomic, retain) NSString *campaignName;
+@property (nonatomic, strong) NSString *campaignName;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/CampaignViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/CampaignViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -21,7 +21,7 @@
 #import "GameInterfaceBridge.h"
 
 @interface CampaignViewController ()
-@property (nonatomic, retain) NSArray *campaignMissions;
+@property (nonatomic, strong) NSArray *campaignMissions;
 @end
 
 @implementation CampaignViewController
@@ -40,7 +40,6 @@
     
     IniParser *iniParser = [[IniParser alloc] initWithIniFilePath:campaignIniPath];
     NSArray *parsedMissions = [iniParser newParsedSections];
-    [iniParser release];
     
     return parsedMissions;
 }
@@ -52,7 +51,6 @@
     
     UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismiss)];
     self.navigationItem.rightBarButtonItem = doneButton;
-    [doneButton release];
     
     [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"campaignMissionCell"];
 }
@@ -95,10 +93,5 @@
 
 #pragma mark - Dealloc
 
-- (void)dealloc {
-    [_campaignName release];
-    [_campaignMissions release];
-    [super dealloc];
-}
 
 @end
--- a/project_files/HedgewarsMobile/Classes/CampaignsViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/CampaignsViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -20,7 +20,7 @@
 #import "CampaignViewController.h"
 
 @interface CampaignsViewController ()
-@property (nonatomic, retain) NSArray *campaigns;
+@property (nonatomic, strong) NSArray *campaigns;
 @end
 
 @implementation CampaignsViewController
@@ -48,7 +48,6 @@
     }
     
     NSArray *campaigns = [tempCampaigns copy];
-    [tempCampaigns release];
     return campaigns;
 }
 
@@ -59,7 +58,6 @@
     
     UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismiss)];
     self.navigationItem.rightBarButtonItem = doneButton;
-    [doneButton release];
     
     [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"campaignCell"];
 }
@@ -100,14 +98,9 @@
     campaign.campaignName = self.campaigns[indexPath.row];
     
     [self.navigationController pushViewController:campaign animated:YES];
-    [campaign release];
 }
 
 #pragma mark - Dealloc
 
-- (void)dealloc {
-    [_campaigns release];
-    [super dealloc];
-}
 
 @end
--- a/project_files/HedgewarsMobile/Classes/CreationChamber.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/CreationChamber.h	Sun Jun 10 19:01:50 2018 +0200
@@ -24,18 +24,18 @@
 
 }
 
-+(void) createFirstLaunch;
-+(void) createSettings;
++ (void)createFirstLaunch;
++ (void)createSettings;
 
-+(void) createTeamNamed:(NSString *)nameWithoutExt;
-+(void) createTeamNamed:(NSString *)nameWithoutExt ofType:(NSInteger) type;
-+(void) createTeamNamed:(NSString *)nameWithoutExt ofType:(NSInteger) type controlledByAI:(BOOL) shouldAITakeOver;
++ (void)createTeamNamed:(NSString *)nameWithoutExt;
++ (void)createTeamNamed:(NSString *)nameWithoutExt ofType:(NSInteger)type;
++ (void)createTeamNamed:(NSString *)nameWithoutExt ofType:(NSInteger)type controlledByAI:(BOOL) shouldAITakeOver;
 
-+(void) createWeaponNamed:(NSString *)nameWithoutExt;
-+(void) createWeaponNamed:(NSString *)nameWithoutExt ofType:(NSInteger) type;
++ (void)createWeaponNamed:(NSString *)nameWithoutExt;
++ (void)createWeaponNamed:(NSString *)nameWithoutExt ofType:(NSInteger)type;
 
-+(void) createSchemeNamed:(NSString *)nameWithoutExt;
-+(void) createSchemeNamed:(NSString *)nameWithoutExt ofType:(NSInteger) type;
++ (void)createSchemeNamed:(NSString *)nameWithoutExt;
++ (void)createSchemeNamed:(NSString *)nameWithoutExt ofType:(NSInteger)type;
 
 @end
 
--- a/project_files/HedgewarsMobile/Classes/CreationChamber.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/CreationChamber.m	Sun Jun 10 19:01:50 2018 +0200
@@ -23,7 +23,7 @@
 @implementation CreationChamber
 
 #pragma mark Checking status
-+(void) createFirstLaunch {
++ (void)createFirstLaunch {
     DLog(@"Creating necessary files");
     NSInteger index;
 
@@ -50,7 +50,6 @@
     index = 0;
     for (NSString *name in teamNames)
         [self createTeamNamed:name ofType:index++ controlledByAI:[name isEqualToString:@"Robots"]];
-    [teamNames release];
 
     // SCHEMES - always overwrite and delete custom ones
     if ([[NSFileManager defaultManager] fileExistsAtPath:SCHEMES_DIRECTORY()] == YES)
@@ -61,7 +60,6 @@
     index = 0;
     for (NSString *name in schemeNames)
         [self createSchemeNamed:name ofType:index++];
-    [schemeNames release];
 
     // WEAPONS - always overwrite as merge is not needed (missing weaps are 0ed automatically)
     NSArray *weaponNames = [[NSArray alloc] initWithObjects:@"Default",@"Crazy",@"Pro Mode",@"Shoppa",@"Clean Slate",
@@ -69,36 +67,34 @@
     index = 0;
     for (NSString *name in weaponNames)
         [self createWeaponNamed:name ofType:index++];
-    [weaponNames release];
 }
 
 #pragma mark Settings
-+(void) createSettings {
++ (void)createSettings {
     NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];
-    [settings setObject:[NSNumber numberWithBool:NO] forKey:@"alternate"];
-    [settings setObject:[NSNumber numberWithBool:YES] forKey:@"music"];
-    [settings setObject:[NSNumber numberWithBool:YES] forKey:@"sound"];
-    [settings setObject:[NSNumber numberWithBool:YES] forKey:@"sync_ws"];
+    
+    [settings setDefaultBool:NO forNonExistingKey:@"alternate"];
+    [settings setDefaultBool:YES forNonExistingKey:@"music"];
+    [settings setDefaultBool:YES forNonExistingKey:@"sound"];
+    [settings setDefaultBool:YES forNonExistingKey:@"sync_ws"];
 
     // don't overwrite these two strings when present
-    if ([settings objectForKey:@"username"] == nil)
-        [settings setObject:@"" forKey:@"username"];
-    if ([settings objectForKey:@"password"] == nil)
-        [settings setObject:@"" forKey:@"password"];
+    [settings setDefaultValue:@"" forNonExistingKey:@"username"];
+    [settings setDefaultValue:@"" forNonExistingKey:@"password"];
 
     [settings synchronize];
 }
 
 #pragma mark Teams
-+(void) createTeamNamed:(NSString *)nameWithoutExt {
++ (void)createTeamNamed:(NSString *)nameWithoutExt {
     [self createTeamNamed:nameWithoutExt ofType:0 controlledByAI:NO];
 }
 
-+(void) createTeamNamed:(NSString *)nameWithoutExt ofType:(NSInteger) type {
++ (void)createTeamNamed:(NSString *)nameWithoutExt ofType:(NSInteger)type {
     [self createTeamNamed:nameWithoutExt ofType:type controlledByAI:NO];
 }
 
-+(void) createTeamNamed:(NSString *)nameWithoutExt ofType:(NSInteger) type controlledByAI:(BOOL) shouldAITakeOver {
++ (void)createTeamNamed:(NSString *)nameWithoutExt ofType:(NSInteger)type controlledByAI:(BOOL) shouldAITakeOver {
     NSString *teamsDirectory = TEAMS_DIRECTORY();
 
     if (![[NSFileManager defaultManager] fileExistsAtPath: teamsDirectory]) {
@@ -159,10 +155,7 @@
                              [customHats objectAtIndex:i],@"hat",
                              nil];
         [hedgehogs addObject:hog];
-        [hog release];
     }
-    [customHats release];
-    [customNames release];
 
     NSDictionary *theTeam = [[NSDictionary alloc] initWithObjectsAndKeys:
                              @"0",@"hash",
@@ -172,21 +165,18 @@
                              flag,@"flag",
                              hedgehogs,@"hedgehogs",
                              nil];
-    [hedgehogs release];
 
     NSString *teamFile = [[NSString alloc] initWithFormat:@"%@/%@.plist", teamsDirectory, nameWithoutExt];
 
     [theTeam writeToFile:teamFile atomically:YES];
-    [teamFile release];
-    [theTeam release];
 }
 
 #pragma mark Weapons
-+(void) createWeaponNamed:(NSString *)nameWithoutExt {
++ (void)createWeaponNamed:(NSString *)nameWithoutExt {
     [self createWeaponNamed:nameWithoutExt ofType:0];
 }
 
-+(void) createWeaponNamed:(NSString *)nameWithoutExt ofType:(NSInteger) type {
++ (void)createWeaponNamed:(NSString *)nameWithoutExt ofType:(NSInteger)type {
     NSString *weaponsDirectory = WEAPONS_DIRECTORY();
 
     if (![[NSFileManager defaultManager] fileExistsAtPath: weaponsDirectory]) {
@@ -269,23 +259,17 @@
 
     NSDictionary *theWeapon = [[NSDictionary alloc] initWithObjectsAndKeys: qt,@"ammostore_initialqt",
                                prob,@"ammostore_probability", delay,@"ammostore_delay", crate,@"ammostore_crate", nil];
-    [qt release];
-    [prob release];
-    [delay release];
-    [crate release];
 
     NSString *weaponFile = [[NSString alloc] initWithFormat:@"%@/%@.plist", weaponsDirectory, nameWithoutExt];
     [theWeapon writeToFile:weaponFile atomically:YES];
-    [weaponFile release];
-    [theWeapon release];
 }
 
 #pragma mark Schemes
-+(void) createSchemeNamed:(NSString *)nameWithoutExt {
++ (void)createSchemeNamed:(NSString *)nameWithoutExt {
     [self createSchemeNamed:nameWithoutExt ofType:0];
 }
 
-+(void) createSchemeNamed:(NSString *)nameWithoutExt ofType:(NSInteger) type {
++ (void)createSchemeNamed:(NSString *)nameWithoutExt ofType:(NSInteger)type {
     NSString *schemesDirectory = SCHEMES_DIRECTORY();
 
     if (![[NSFileManager defaultManager] fileExistsAtPath: schemesDirectory]) {
@@ -300,13 +284,11 @@
     NSMutableArray *basicArray  = [[NSMutableArray alloc] initWithCapacity:[basicSettings count]];
     for (NSDictionary *basicDict in basicSettings)
         [basicArray addObject:[basicDict objectForKey:@"default"]];
-    [basicSettings release];
 
     NSArray *mods = [[NSArray alloc] initWithContentsOfFile:GAMEMODS_FILE()];
     NSMutableArray *gamemodArray= [[NSMutableArray alloc] initWithCapacity:[mods count]];
     for (NSUInteger i = 0; i < [mods count]; i++)
         [gamemodArray addObject:[NSNumber numberWithBool:NO]];
-    [mods release];
 
     switch (type) {
         default: // default
@@ -422,14 +404,10 @@
                                       basicArray,@"basic",
                                       gamemodArray,@"gamemod",
                                       nil];
-    [gamemodArray release];
-    [basicArray release];
 
     NSString *schemeFile = [[NSString alloc] initWithFormat:@"%@/%@.plist", schemesDirectory, nameWithoutExt];
 
     [theScheme writeToFile:schemeFile atomically:YES];
-    [schemeFile release];
-    [theScheme release];
 }
 
 @end
--- a/project_files/HedgewarsMobile/Classes/DefinesAndMacros.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/DefinesAndMacros.h	Sun Jun 10 19:01:50 2018 +0200
@@ -24,14 +24,12 @@
 #ifdef DEBUG
   #define DLog(...) NSLog(@"%s %@", __PRETTY_FUNCTION__, [NSString stringWithFormat:__VA_ARGS__])
   #define ALog(...) [[NSAssertionHandler currentHandler] handleFailureInFunction:[NSString stringWithCString:__PRETTY_FUNCTION__ encoding:NSUTF8StringEncoding] file:[NSString stringWithCString:__FILE__ encoding:NSUTF8StringEncoding] lineNumber:__LINE__ description:__VA_ARGS__]
-  #define releaseAndNil(x) [x release]
 #else
-  #define DLog(...) do { } while (0)
   #ifndef NS_BLOCK_ASSERTIONS
     #define NS_BLOCK_ASSERTIONS
   #endif
+  #define DLog(...)
   #define ALog(...) NSLog(@"%s %@", __PRETTY_FUNCTION__, [NSString stringWithFormat:__VA_ARGS__])
-  #define releaseAndNil(x) [x release], x = nil
 #endif
 
 
@@ -66,6 +64,8 @@
 #define MAPS_DIRECTORY()        [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Maps/"]
 #define MISSIONS_DIRECTORY()    [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Missions/Maps/"]
 #define TRAININGS_DIRECTORY()   [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Missions/Training/"]
+#define SCENARIO_DIRECTORY()   [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Missions/Scenario/"]
+#define CHALLENGE_DIRECTORY()   [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Missions/Challenge/"]
 #define CAMPAIGNS_DIRECTORY()   [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Missions/Campaign/"]
 #define LOCALE_DIRECTORY()      [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Locale/"]
 #define SCRIPTS_DIRECTORY()     [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Scripts/Multiplayer/"]
--- a/project_files/HedgewarsMobile/Classes/EditableCellView.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/EditableCellView.h	Sun Jun 10 19:01:50 2018 +0200
@@ -22,12 +22,12 @@
 
 @protocol EditableCellViewDelegate <NSObject>
 
--(void) saveTextFieldValue:(NSString *)textString withTag:(NSInteger) tagValue;
+- (void)saveTextFieldValue:(NSString *)textString withTag:(NSInteger)tagValue;
 
 @end
 
 @interface EditableCellView : UITableViewCell <UITextFieldDelegate> {
-    id<EditableCellViewDelegate> delegate;
+    id<EditableCellViewDelegate> __weak delegate;
     UITextField *textField;
     UILabel *titleLabel;
     NSUInteger minimumCharacters;
@@ -38,16 +38,16 @@
     NSString *oldValue;
 }
 
-@property (nonatomic,assign) id<EditableCellViewDelegate> delegate;
-@property (nonatomic,retain,readonly) UITextField *textField;
-@property (nonatomic,retain,readonly) UILabel *titleLabel;
-@property (nonatomic,assign) NSUInteger minimumCharacters;
-@property (nonatomic,assign) NSUInteger maximumCharacters;
-@property (nonatomic,assign) BOOL respectEditing;
-@property (nonatomic,retain) NSString *oldValue;
+@property (nonatomic, weak) id<EditableCellViewDelegate> delegate;
+@property (nonatomic, strong, readonly) UITextField *textField;
+@property (nonatomic, strong, readonly) UILabel *titleLabel;
+@property (assign) NSUInteger minimumCharacters;
+@property (assign) NSUInteger maximumCharacters;
+@property (assign) BOOL respectEditing;
+@property (nonatomic, strong) NSString *oldValue;
 
--(void) replyKeyboard;
--(void) cancel:(id) sender;
--(void) save:(id) sender;
+- (void)replyKeyboard;
+- (void)cancel:(id)sender;
+- (void)save:(id)sender;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/EditableCellView.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/EditableCellView.m	Sun Jun 10 19:01:50 2018 +0200
@@ -23,7 +23,7 @@
 @implementation EditableCellView
 @synthesize delegate, textField, titleLabel, minimumCharacters, maximumCharacters, respectEditing, oldValue;
 
--(id) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
     if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
         delegate = nil;
 
@@ -40,14 +40,12 @@
         [textField addTarget:self action:@selector(save:) forControlEvents:UIControlEventEditingDidEndOnExit];
 
         [self.contentView addSubview:textField];
-        //[textField release];
 
         titleLabel = [[UILabel alloc] init];
         titleLabel.textAlignment = NSTextAlignmentLeft;
         titleLabel.backgroundColor = [UIColor clearColor];
         titleLabel.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]];
         [self.contentView addSubview:titleLabel];
-        //[titleLabel release];
 
         minimumCharacters = 1;
         maximumCharacters = 64;
@@ -57,7 +55,7 @@
     return self;
 }
 
--(void) layoutSubviews {
+- (void)layoutSubviews {
     [super layoutSubviews];
 
     CGRect contentRect = self.contentView.bounds;
@@ -79,35 +77,27 @@
     textField.frame = CGRectMake(boundsX+offset+10, skew+10, 300, [UIFont labelFontSize] + 4);
 }
 
--(void) setSelected:(BOOL)selected animated:(BOOL)animated {
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
     [super setSelected:selected animated:animated];
     // Configure the view for the selected state
 }
 
--(void) dealloc {
-    self.delegate = nil;
-    releaseAndNil(oldValue);
-    releaseAndNil(titleLabel);
-    releaseAndNil(textField);
-    [super dealloc];
-}
-
 #pragma mark -
 #pragma mark textField delegate
 // limit the size of the field to 64 characters like in original frontend
--(BOOL) textField:(UITextField *)aTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
+- (BOOL)textField:(UITextField *)aTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
     return !([aTextField.text length] > self.maximumCharacters && [string length] > range.length);
 }
 
 // allow editing only if delegate is set and conformant to protocol, and if editableOnlyWhileEditing
--(BOOL) textFieldShouldBeginEditing:(UITextField *)aTextField {
+- (BOOL)textFieldShouldBeginEditing:(UITextField *)aTextField {
     return (delegate != nil) &&
            [delegate respondsToSelector:@selector(saveTextFieldValue:withTag:)] &&
            (respectEditing) ? [self findTable].editing : YES;
 }
 
 // the textfield is being modified, update the navigation controller
--(void) textFieldDidBeginEditing:(UITextField *)aTextField{
+- (void)textFieldDidBeginEditing:(UITextField *)aTextField{
     // don't interact with table below
     [self findTable].scrollEnabled = NO;
 
@@ -118,30 +108,28 @@
                                                                     target:self
                                                                     action:@selector(cancel:)];
     [(UITableViewController *)delegate navigationItem].leftBarButtonItem = cancelButton;
-    [cancelButton release];
 
     UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Save",@"")
                                                                      style:UIBarButtonItemStyleDone
                                                                     target:self
                                                                     action:@selector(save:)];
     [(UITableViewController *)delegate navigationItem].rightBarButtonItem = saveButton;
-    [saveButton release];
 }
 
 /* with this a field might remain in editing status even if the view moved;
    use method below instead that allows some more interaction
 // don't accept 0-length strings
--(BOOL) textFieldShouldEndEditing:(UITextField *)aTextField {
+- (BOOL)textFieldShouldEndEditing:(UITextField *)aTextField {
     return ([aTextField.text length] > 0);
 }
 */
 
--(BOOL) textFieldShouldReturn:(UITextField *)aTextField {
+- (BOOL)textFieldShouldReturn:(UITextField *)aTextField {
     return ([aTextField.text length] >= self.minimumCharacters);
 }
 
 // the textfield has been modified, tell the delegate to do something
--(void) textFieldDidEndEditing:(UITextField *)aTextField {
+- (void)textFieldDidEndEditing:(UITextField *)aTextField {
     // this forces a save when user selects a new field
     if ([self.textField.text isEqualToString:self.oldValue] == NO)
         [self save:aTextField];
@@ -155,19 +143,19 @@
 #pragma mark -
 #pragma mark instance methods
 // the user wants to show the keyboard
--(void) replyKeyboard {
+- (void)replyKeyboard {
     [self.textField becomeFirstResponder];
 }
 
 // the user pressed cancel so hide keyboard
--(void) cancel:(id) sender {
+- (void)cancel:(id)sender {
     // reverts any changes and performs a fake save for removing the keyboard
     self.textField.text = self.oldValue;
     [self save:sender];
 }
 
 // send the value to the delegate (called before textFieldDidEndEditing)
--(void) save:(id) sender {
+- (void)save:(id)sender {
     if (delegate == nil || [delegate respondsToSelector:@selector(saveTextFieldValue:withTag:)] == NO)
         return;
 
@@ -181,7 +169,7 @@
 }
 
 // when field is editable only when the tableview is editable, resign responder when exiting editing mode
--(void) willTransitionToState:(UITableViewCellStateMask)state {
+- (void)willTransitionToState:(UITableViewCellStateMask)state {
     if (respectEditing && state == UITableViewCellStateDefaultMask)
         [self save:nil];
 
--- a/project_files/HedgewarsMobile/Classes/EngineProtocolNetwork.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/EngineProtocolNetwork.h	Sun Jun 10 19:01:50 2018 +0200
@@ -23,32 +23,32 @@
 
 @protocol EngineProtocolDelegate <NSObject>
 
--(void) gameEndedWithStatistics:(NSArray *)stats;
+- (void)gameEndedWithStatistics:(NSArray *)stats;
 
 @end
 
 
 @interface EngineProtocolNetwork : NSObject {
-    id<EngineProtocolDelegate> delegate;
+    id<EngineProtocolDelegate> __weak delegate;
     NSOutputStream *stream;
     TCPsocket csd;
     NSInteger enginePort;
 }
 
-@property (nonatomic,assign) id<EngineProtocolDelegate> delegate;
-@property (nonatomic,retain) NSOutputStream *stream;
+@property (nonatomic, weak) id<EngineProtocolDelegate> delegate;
+@property (nonatomic, strong) NSOutputStream *stream;
 @property (assign) TCPsocket csd;
 @property (assign) NSInteger enginePort;
 
--(id)   init;
--(id)   initWithPort:(NSInteger) port;
--(void) spawnThread:(NSString *)onSaveFile withOptions:(NSDictionary *)dictionary;
--(void) engineProtocol:(id) object;
+- (id)  init;
+- (id)  initWithPort:(NSInteger)port;
+- (void)spawnThread:(NSString *)onSaveFile withOptions:(NSDictionary *)dictionary;
+- (void)engineProtocol:(id)object;
 
 -(int)  sendToEngine:(NSString *)string;
 -(int)  sendToEngineNoSave:(NSString *)string;
--(void) provideTeamData:(NSString *)teamName forHogs:(NSInteger) numberOfPlayingHogs withHealth:(NSInteger) initialHealth ofColor:(NSNumber *)teamColor;
--(void) provideAmmoData:(NSString *)ammostoreName forPlayingTeams:(NSInteger) numberOfTeams;
--(NSInteger) provideScheme:(NSString *)schemeName;
+- (void)provideTeamData:(NSString *)teamName forHogs:(NSInteger)numberOfPlayingHogs withHealth:(NSInteger)initialHealth ofColor:(NSNumber *)teamColor;
+- (void)provideAmmoData:(NSString *)ammostoreName forPlayingTeams:(NSInteger)numberOfTeams;
+- (NSInteger)provideScheme:(NSString *)schemeName;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/EngineProtocolNetwork.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/EngineProtocolNetwork.m	Sun Jun 10 19:01:50 2018 +0200
@@ -25,7 +25,7 @@
 @implementation EngineProtocolNetwork
 @synthesize delegate, stream, csd, enginePort;
 
--(id) initWithPort:(NSInteger) port {
+- (id)initWithPort:(NSInteger)port {
     if ((self = [super init])) {
         self.delegate = nil;
         self.csd = NULL;
@@ -35,19 +35,13 @@
     return self;
 }
 
--(id) init {
+- (id)init {
     return [self initWithPort:[HWUtils randomPort]];
 }
 
--(void) dealloc {
-    self.delegate = nil;
-    releaseAndNil(stream);
-    [super dealloc];
-}
-
 #pragma mark -
 #pragma mark Spawner functions
--(void) spawnThread:(NSString *)onSaveFile withOptions:(NSDictionary *)dictionary {
+- (void)spawnThread:(NSString *)onSaveFile withOptions:(NSDictionary *)dictionary {
     self.stream = (onSaveFile) ? [[NSOutputStream alloc] initToFileAtPath:onSaveFile append:YES] : nil;
     [self.stream open];
 
@@ -60,7 +54,7 @@
 #pragma mark -
 #pragma mark Provider functions
 // unpacks team data from the selected team.plist to a sequence of engine commands
--(void) provideTeamData:(NSString *)teamName forHogs:(NSInteger) numberOfPlayingHogs withHealth:(NSInteger) initialHealth ofColor:(NSNumber *)teamColor {
+- (void)provideTeamData:(NSString *)teamName forHogs:(NSInteger)numberOfPlayingHogs withHealth:(NSInteger)initialHealth ofColor:(NSNumber *)teamColor {
     /*
      addteam <32charsMD5hash> <color> <team name>
      addhh <level> <health> <hedgehog name>
@@ -69,28 +63,22 @@
 
     NSString *teamFile = [[NSString alloc] initWithFormat:@"%@/%@", TEAMS_DIRECTORY(), teamName];
     NSDictionary *teamData = [[NSDictionary alloc] initWithContentsOfFile:teamFile];
-    [teamFile release];
 
     NSString *teamHashColorAndName = [[NSString alloc] initWithFormat:@"eaddteam %@ %@ %@",
                                       [teamData objectForKey:@"hash"], [teamColor stringValue], [teamName stringByDeletingPathExtension]];
     [self sendToEngine: teamHashColorAndName];
-    [teamHashColorAndName release];
 
     NSString *grave = [[NSString alloc] initWithFormat:@"egrave %@", [teamData objectForKey:@"grave"]];
     [self sendToEngine: grave];
-    [grave release];
 
     NSString *fort = [[NSString alloc] initWithFormat:@"efort %@", [teamData objectForKey:@"fort"]];
     [self sendToEngine: fort];
-    [fort release];
 
     NSString *voicepack = [[NSString alloc] initWithFormat:@"evoicepack %@", [teamData objectForKey:@"voicepack"]];
     [self sendToEngine: voicepack];
-    [voicepack release];
 
     NSString *flag = [[NSString alloc] initWithFormat:@"eflag %@", [teamData objectForKey:@"flag"]];
     [self sendToEngine: flag];
-    [flag release];
 
     NSArray *hogs = [teamData objectForKey:@"hedgehogs"];
     for (int i = 0; i < numberOfPlayingHogs; i++) {
@@ -99,21 +87,16 @@
         NSString *hogLevelHealthAndName = [[NSString alloc] initWithFormat:@"eaddhh %@ %ld %@",
                                            [hog objectForKey:@"level"], (long)initialHealth, [hog objectForKey:@"hogname"]];
         [self sendToEngine: hogLevelHealthAndName];
-        [hogLevelHealthAndName release];
 
         NSString *hogHat = [[NSString alloc] initWithFormat:@"ehat %@", [hog objectForKey:@"hat"]];
         [self sendToEngine: hogHat];
-        [hogHat release];
     }
-
-    [teamData release];
 }
 
 // unpacks ammostore data from the selected ammo.plist to a sequence of engine commands
--(void) provideAmmoData:(NSString *)ammostoreName forPlayingTeams:(NSInteger) numberOfTeams {
+- (void)provideAmmoData:(NSString *)ammostoreName forPlayingTeams:(NSInteger)numberOfTeams {
     NSString *weaponPath = [[NSString alloc] initWithFormat:@"%@/%@",WEAPONS_DIRECTORY(),ammostoreName];
     NSDictionary *ammoData = [[NSDictionary alloc] initWithContentsOfFile:weaponPath];
-    [weaponPath release];
 
     // if we're loading an older version of ammos fill the engine message with 0s
     int diff = HW_getNumberOfWeapons() - [[ammoData objectForKey:@"ammostore_initialqt"] length];
@@ -123,34 +106,28 @@
 
     NSString *ammloadt = [[NSString alloc] initWithFormat:@"eammloadt %@%@", [ammoData objectForKey:@"ammostore_initialqt"], update];
     [self sendToEngine: ammloadt];
-    [ammloadt release];
 
     NSString *ammprob = [[NSString alloc] initWithFormat:@"eammprob %@%@", [ammoData objectForKey:@"ammostore_probability"], update];
     [self sendToEngine: ammprob];
-    [ammprob release];
 
     NSString *ammdelay = [[NSString alloc] initWithFormat:@"eammdelay %@%@", [ammoData objectForKey:@"ammostore_delay"], update];
     [self sendToEngine: ammdelay];
-    [ammdelay release];
 
     NSString *ammreinf = [[NSString alloc] initWithFormat:@"eammreinf %@%@", [ammoData objectForKey:@"ammostore_crate"], update];
     [self sendToEngine: ammreinf];
-    [ammreinf release];
 
     // send this for each team so it applies the same ammostore to all teams
     NSString *ammstore = [[NSString alloc] initWithString:@"eammstore"];
-    for (int i = 0; i < numberOfTeams; i++)
+    for (int i = 0; i < numberOfTeams; i++) {
         [self sendToEngine: ammstore];
-    [ammstore release];
-
-    [ammoData release];
+    }
 }
 
 // unpacks scheme data from the selected scheme.plist to a sequence of engine commands
--(NSInteger) provideScheme:(NSString *)schemeName {
+- (NSInteger)provideScheme:(NSString *)schemeName {
     NSString *schemePath = [[NSString alloc] initWithFormat:@"%@/%@",SCHEMES_DIRECTORY(),schemeName];
     NSDictionary *schemeDictionary = [[NSDictionary alloc] initWithContentsOfFile:schemePath];
-    [schemePath release];
+
     NSArray *basicArray = [schemeDictionary objectForKey:@"basic"];
     NSArray *gamemodArray = [schemeDictionary objectForKey:@"gamemod"];
     int result = 0;
@@ -164,7 +141,6 @@
     }
     NSString *flags = [[NSString alloc] initWithFormat:@"e$gmflags %d",result];
     [self sendToEngine:flags];
-    [flags release];
 
     // basic game flags
     result = [[basicArray objectAtIndex:0] intValue];
@@ -180,17 +156,14 @@
             value = value * 1000;
         NSString *strToSend = [[NSString alloc] initWithFormat:@"%@ %d",command,value];
         [self sendToEngine:strToSend];
-        [strToSend release];
     }
-    [basic release];
 
-    [schemeDictionary release];
     return result;
 }
 
 #pragma mark -
 #pragma mark Network relevant code
--(void) dumpRawData:(const char *)buffer ofSize:(uint8_t) length {
+- (void)dumpRawData:(const char *)buffer ofSize:(uint8_t) length {
     [self.stream write:&length maxLength:1];
     [self.stream write:(const uint8_t *)buffer maxLength:length];
 }
@@ -213,7 +186,7 @@
 }
 
 // this is launched as thread and handles all IPC with engine
--(void) engineProtocol:(id) object {
+- (void)engineProtocol:(id)object {
     @autoreleasepool {
     
     NSDictionary *gameConfig = (NSDictionary *)object;
@@ -259,7 +232,7 @@
             break;
 
         switch (buffer[0]) {
-            case 'C':
+            case 'C': {
                 DLog(@"Sending game config...\n%@", gameConfig);
 
                 /*if (isNetGame == YES)
@@ -310,15 +283,18 @@
                                   ofColor:[teamData objectForKey:@"color"]];
                 }
                 break;
-            case '?':
+            }
+            case '?': {
                 DLog(@"Ping? Pong!");
                 [self sendToEngine:@"!"];
                 break;
-            case 'E':
+            }
+            case 'E': {
                 DLog(@"ERROR - last console line: [%s]", &buffer[1]);
                 clientQuit = YES;
                 break;
-            case 'e':
+            }
+            case 'e': {
                 [self dumpRawData:buffer ofSize:msgSize];
 
                 sscanf((char *)buffer, "%*s %d", &eProto);
@@ -333,21 +309,22 @@
                     clientQuit = YES;
                 }
                 break;
-            case 'i':
+            }
+            case 'i': {
                 if (statsArray == nil) {
                     statsArray = [[NSMutableArray alloc] initWithCapacity:10 - 2];
                     NSMutableArray *ranking = [[NSMutableArray alloc] initWithCapacity:4];
                     [statsArray insertObject:ranking atIndex:0];
-                    [ranking release];
                 }
                 NSString *tempStr = [NSString stringWithUTF8String:&buffer[2]];
                 NSArray *info = [tempStr componentsSeparatedByString:@" "];
                 NSString *arg = [info objectAtIndex:0];
                 int index = [arg lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 3;
                 switch (buffer[1]) {
-                    case 'r':           // winning team
+                    case 'r': {           // winning team
                         [statsArray insertObject:[NSString stringWithUTF8String:&buffer[2]] atIndex:1];
                         break;
+                    }
                     case 'D':           // best shot
                     {
                         NSString *hogName = [NSString stringWithUTF8String:&buffer[index]];
@@ -394,19 +371,21 @@
                         break;
                 }
                 break;
-            case 'q':
+            }
+            case 'q': {
                 // game ended and match finished, statsArray is full of delicious statistics
                 if (self.delegate != nil && [self.delegate respondsToSelector:@selector(gameEndedWithStatistics:)])
                     [self.delegate gameEndedWithStatistics:statsArray];
-                [statsArray release];
                 [HWUtils setGameStatus:gsEnded];
                 // closing connection here would trigger a "IPC connection lost" error, so we have to wait until recv fails
                 break;
-            case 'Q':
+            }
+            case 'Q': {
                 // game exited but not completed, skip this message in the savefile
                 [HWUtils setGameStatus:gsInterrupted];
                 // same here, don't set clientQuit to YES
                 break;
+            }
             default:
                 [self dumpRawData:buffer ofSize:msgSize];
                 break;
@@ -415,7 +394,6 @@
     DLog(@"Engine exited, ending thread");
 
     [self.stream close];
-    [self.stream release];
 
     // Close the client socket
     [HWUtils freePort:self.enginePort];
--- a/project_files/HedgewarsMobile/Classes/ExtraCategories.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/ExtraCategories.h	Sun Jun 10 19:01:50 2018 +0200
@@ -22,33 +22,33 @@
 
 @interface UIScreen (safe)
 
--(CGFloat) safeScale;
--(CGRect) safeBounds;
+- (CGFloat)safeScale;
+- (CGRect)safeBounds;
 
 @end
 
 
 @interface UITableView (backgroundColor)
 
--(void) setBackgroundColorForAnyTable:(UIColor *)color;
+- (void)setBackgroundColorForAnyTable:(UIColor *)color;
 
 @end
 
 
 @interface UIColor (HWColors)
 
-+(UIColor *)darkYellowColor;
-+(UIColor *)lightYellowColor;
-+(UIColor *)darkBlueColor;
-+(UIColor *)darkBlueColorTransparent;
-+(UIColor *)blackColorTransparent;
++ (UIColor *)darkYellowColor;
++ (UIColor *)lightYellowColor;
++ (UIColor *)darkBlueColor;
++ (UIColor *)darkBlueColorTransparent;
++ (UIColor *)blackColorTransparent;
 
 @end
 
 
 @interface UIButton (quickStyle)
 
--(id) initWithFrame:(CGRect) frame andTitle:(NSString *)title;
+- (id)initWithFrame:(CGRect)frame andTitle:(NSString *)title;
 
 - (void)applyBlackQuickStyle;
 - (void)applyDarkBlueQuickStyle;
@@ -58,9 +58,9 @@
 
 @interface UILabel (quickStyle)
 
--(id) initWithFrame:(CGRect)frame andTitle:(NSString *)title;
--(id) initWithFrame:(CGRect)frame andTitle:(NSString *)title withBorderWidth:(CGFloat) borderWidth;
--(id) initWithFrame:(CGRect)frame andTitle:(NSString *)title withBorderWidth:(CGFloat) borderWidth
+- (id)initWithFrame:(CGRect)frame andTitle:(NSString *)title;
+- (id)initWithFrame:(CGRect)frame andTitle:(NSString *)title withBorderWidth:(CGFloat)borderWidth;
+- (id)initWithFrame:(CGRect)frame andTitle:(NSString *)title withBorderWidth:(CGFloat)borderWidth
     withBorderColor:(UIColor *)borderColor withBackgroundColor:(UIColor *)backColor;
 
 @end
@@ -68,7 +68,13 @@
 
 @interface NSString (MD5)
 
--(NSString *)MD5hash;
+- (NSString *)MD5hash;
 
 @end
 
+@interface NSUserDefaults (setNonExisting)
+
+- (void)setDefaultValue:(nullable id)value forNonExistingKey:(NSString *_Nonnull)key;
+- (void)setDefaultBool:(BOOL)boolValue forNonExistingKey:(NSString *_Nonnull)key;
+
+@end
--- a/project_files/HedgewarsMobile/Classes/ExtraCategories.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/ExtraCategories.m	Sun Jun 10 19:01:50 2018 +0200
@@ -25,14 +25,14 @@
 #pragma mark -
 @implementation UIScreen (safe)
 
--(CGFloat) safeScale {
+- (CGFloat)safeScale {
     CGFloat theScale = 1.0f;
 //    if ([self respondsToSelector:@selector(scale)])
 //         theScale = [self scale];
     return theScale;
 }
 
--(CGRect) safeBounds {
+- (CGRect)safeBounds {
     return [self bounds];
 //    CGRect original = [self bounds];
 //    if (IS_ON_PORTRAIT())
@@ -47,12 +47,11 @@
 #pragma mark -
 @implementation UITableView (backgroundColor)
 
--(void) setBackgroundColorForAnyTable:(UIColor *) color {
+- (void)setBackgroundColorForAnyTable:(UIColor *) color {
     if ([self respondsToSelector:@selector(backgroundView)]) {
         UIView *backView = [[UIView alloc] initWithFrame:self.frame];
         backView.backgroundColor = color;
         self.backgroundView = backView;
-        [backView release];
         self.backgroundColor = [UIColor clearColor];
     } else
         self.backgroundColor = color;
@@ -64,27 +63,27 @@
 #pragma mark -
 @implementation UIColor (HWColors)
 
-+(UIColor *)darkYellowColor {
++ (UIColor *)darkYellowColor {
     return [UIColor colorWithRed:(CGFloat)0xFE/255 green:(CGFloat)0xC0/255 blue:0 alpha:1];
 }
 
-+(UIColor *)lightYellowColor {
++ (UIColor *)lightYellowColor {
     return [UIColor colorWithRed:(CGFloat)0xF0/255 green:(CGFloat)0xD0/255 blue:0 alpha:1];
 }
 
-+(UIColor *)darkBlueColor {
++ (UIColor *)darkBlueColor {
     return [UIColor colorWithRed:(CGFloat)0x0F/255 green:0 blue:(CGFloat)0x42/255 alpha:1];
 }
 
 // older devices don't get any transparency for performance reasons
-+(UIColor *)darkBlueColorTransparent {
++ (UIColor *)darkBlueColorTransparent {
     return [UIColor colorWithRed:(CGFloat)0x0F/255
                            green:0
                             blue:(CGFloat)0x55/255
                            alpha:IS_NOT_POWERFUL([HWUtils modelType]) ? 1 : 0.6f];
 }
 
-+(UIColor *)blackColorTransparent {
++ (UIColor *)blackColorTransparent {
     return [UIColor colorWithRed:0
                            green:0
                             blue:0
@@ -97,8 +96,8 @@
 #pragma mark -
 @implementation UIButton (quickStyle)
 
--(id) initWithFrame:(CGRect) frame andTitle:(NSString *)title {
-    [self initWithFrame:frame];
+- (id)initWithFrame:(CGRect)frame andTitle:(NSString *)title {
+    if (!(self = [self initWithFrame:frame])) return nil;
     [self setTitle:title forState:UIControlStateNormal];
     [self applyBlackQuickStyle];
 
@@ -137,7 +136,7 @@
 #pragma mark -
 @implementation UILabel (quickStyle)
 
--(id) initWithFrame:(CGRect)frame andTitle:(NSString *)title {
+- (id)initWithFrame:(CGRect)frame andTitle:(NSString *)title {
     return [self initWithFrame:frame
                       andTitle:title
                withBorderWidth:1.5f
@@ -145,7 +144,7 @@
            withBackgroundColor:[UIColor darkBlueColor]];
 }
 
--(id) initWithFrame:(CGRect)frame andTitle:(NSString *)title withBorderWidth:(CGFloat) borderWidth {
+- (id)initWithFrame:(CGRect)frame andTitle:(NSString *)title withBorderWidth:(CGFloat)borderWidth {
     return [self initWithFrame:frame
                       andTitle:title
                withBorderWidth:borderWidth
@@ -153,7 +152,7 @@
            withBackgroundColor:[UIColor darkBlueColorTransparent]];
 }
 
--(id) initWithFrame:(CGRect)frame andTitle:(NSString *)title withBorderWidth:(CGFloat) borderWidth
+- (id)initWithFrame:(CGRect)frame andTitle:(NSString *)title withBorderWidth:(CGFloat)borderWidth
           withBorderColor:(UIColor *)borderColor withBackgroundColor:(UIColor *)backColor {
     UILabel *theLabel = [self initWithFrame:frame];
     theLabel.backgroundColor = backColor;
@@ -179,7 +178,7 @@
 #pragma mark -
 @implementation NSString (MD5)
 
--(NSString *)MD5hash {
+- (NSString *)MD5hash {
     const char *cStr = [self UTF8String];
     unsigned char result[16];
     CC_MD5( cStr, strlen(cStr), result );
@@ -191,3 +190,19 @@
 }
 
 @end
+
+
+#pragma mark -
+@implementation NSUserDefaults (setNonExisting)
+
+- (void)setDefaultValue:(nullable id)value forNonExistingKey:(NSString *_Nonnull)key {
+    if ([self objectForKey:key] == nil) {
+        [self setObject:value forKey:key];
+    }
+}
+
+- (void)setDefaultBool:(BOOL)boolValue forNonExistingKey:(NSString *_Nonnull)key {
+    [self setDefaultValue:[NSNumber numberWithBool:boolValue] forNonExistingKey:key];
+}
+
+@end
--- a/project_files/HedgewarsMobile/Classes/FlagsViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/FlagsViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -28,9 +28,9 @@
     NSIndexPath *lastIndexPath;
 }
 
-@property (nonatomic,retain) NSDictionary * teamDictionary;
-@property (nonatomic,retain) NSArray *flagArray;
-@property (nonatomic,retain) NSArray *communityArray;
-@property (nonatomic,retain) NSIndexPath *lastIndexPath;
+@property (nonatomic, strong) NSDictionary * teamDictionary;
+@property (nonatomic, strong) NSArray *flagArray;
+@property (nonatomic, strong) NSArray *communityArray;
+@property (nonatomic, strong) NSIndexPath *lastIndexPath;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/FlagsViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/FlagsViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -24,13 +24,13 @@
 @implementation FlagsViewController
 @synthesize teamDictionary, flagArray, communityArray, lastIndexPath;
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 #pragma mark -
 #pragma mark View lifecycle
--(void) viewDidLoad {
+- (void)viewDidLoad {
     [super viewDidLoad];
 
     NSMutableArray *array_na = [[NSMutableArray alloc] init];
@@ -45,14 +45,12 @@
     }
 
     self.flagArray = array_na;
-    [array_na release];
     self.communityArray = array_cm;
-    [array_cm release];
 
     self.title = NSLocalizedString(@"Set team flag",@"");
 }
 
--(void) viewWillAppear:(BOOL)animated {
+- (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
     // reloadData needed because team might change
     [self.tableView reloadData];
@@ -62,11 +60,11 @@
 
 #pragma mark -
 #pragma mark Table view data source
--(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
     return 2;
 }
 
--(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
     if (section == 0)
         return [self.flagArray count];
     else
@@ -80,7 +78,7 @@
 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil) {
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
+        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
     }
 
     NSString *flagName = nil;
@@ -94,9 +92,7 @@
     }
     NSString *flagFile = [[NSString alloc] initWithFormat:@"%@/%@", FLAGS_DIRECTORY(), flagName];
     UIImage *flagSprite = [[UIImage alloc] initWithContentsOfFile:flagFile];
-    [flagFile release];
     cell.imageView.image = flagSprite;
-    [flagSprite release];
     cell.imageView.layer.borderWidth = 1;
     cell.imageView.layer.borderColor = [[UIColor blackColor] CGColor];
 
@@ -111,7 +107,7 @@
     return cell;
 }
 
--(NSString *)tableView:(UITableView *)aTableView titleForHeaderInSection:(NSInteger)section {
+- (NSString *)tableView:(UITableView *)aTableView titleForHeaderInSection:(NSInteger)section {
     NSString *sectionTitle = nil;
     switch (section) {
         case 0:
@@ -130,7 +126,7 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     NSInteger newRow = [indexPath row];
     NSInteger oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
     NSInteger newSection = [indexPath section];
@@ -163,29 +159,12 @@
 
 #pragma mark -
 #pragma mark Memory management
--(void) didReceiveMemoryWarning {
+
+- (void)didReceiveMemoryWarning {
     self.lastIndexPath = nil;
     MSG_MEMCLEAN();
     [super didReceiveMemoryWarning];
 }
 
--(void) viewDidUnload {
-    self.teamDictionary = nil;
-    self.lastIndexPath = nil;
-    self.flagArray = nil;
-    self.communityArray = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
-}
-
--(void) dealloc {
-    releaseAndNil(teamDictionary);
-    releaseAndNil(lastIndexPath);
-    releaseAndNil(flagArray);
-    releaseAndNil(communityArray);
-    [super dealloc];
-}
-
-
 @end
 
--- a/project_files/HedgewarsMobile/Classes/FortsViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/FortsViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -27,8 +27,8 @@
     NSIndexPath *lastIndexPath;
 }
 
-@property (nonatomic,retain) NSDictionary * teamDictionary;
-@property (nonatomic,retain) NSArray *fortArray;
-@property (nonatomic,retain) NSIndexPath *lastIndexPath;
+@property (nonatomic, strong) NSDictionary * teamDictionary;
+@property (nonatomic, strong) NSArray *fortArray;
+@property (nonatomic, strong) NSIndexPath *lastIndexPath;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/FortsViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/FortsViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -26,14 +26,14 @@
 @synthesize teamDictionary, fortArray, lastIndexPath;
 
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 
 #pragma mark -
 #pragma mark View lifecycle
--(void) viewDidLoad {
+- (void)viewDidLoad {
     [super viewDidLoad];
 
     NSArray *directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:FORTS_DIRECTORY() error:NULL];
@@ -49,7 +49,6 @@
         }
     }
     self.fortArray = filteredContents;
-    [filteredContents release];
 
     // statically set row height instead of using delegate method for performance reasons
     self.tableView.rowHeight = 128;
@@ -58,7 +57,7 @@
 }
 
 
--(void) viewWillAppear:(BOOL)animated {
+- (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
     [self.tableView reloadData];
     [self.tableView setContentOffset:CGPointMake(0,0) animated:NO];
@@ -67,11 +66,11 @@
 
 #pragma mark -
 #pragma mark Table view data source
--(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
     return 1;
 }
 
--(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
     return [self.fortArray count];
 }
 
@@ -81,17 +80,15 @@
 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil)
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
-                                       reuseIdentifier:CellIdentifier] autorelease];
+        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
+                                       reuseIdentifier:CellIdentifier];
 
     NSString *fortName = [fortArray objectAtIndex:[indexPath row]];
     cell.textLabel.text = fortName;
 
     NSString *fortFile = [[NSString alloc] initWithFormat:@"%@/%@-preview.png", FORTS_DIRECTORY(), fortName];
     UIImage *fortSprite = [[UIImage alloc] initWithContentsOfFile:fortFile];
-    [fortFile release];
     cell.imageView.image = fortSprite;
-    [fortSprite release];
 
     //cell.detailTextLabel.text = @"Insert funny description here";
     if ([cell.textLabel.text isEqualToString:[self.teamDictionary objectForKey:@"fort"]]) {
@@ -107,7 +104,7 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     NSInteger newRow = [indexPath row];
     NSInteger oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
 
@@ -132,28 +129,12 @@
 
 #pragma mark -
 #pragma mark Memory management
--(void) didReceiveMemoryWarning {
+
+- (void)didReceiveMemoryWarning {
     self.lastIndexPath = nil;
     MSG_MEMCLEAN();
     [super didReceiveMemoryWarning];
 }
 
--(void) viewDidUnload {
-    self.teamDictionary = nil;
-    self.lastIndexPath = nil;
-    self.fortArray = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
-}
-
-
--(void) dealloc {
-    releaseAndNil(teamDictionary);
-    releaseAndNil(lastIndexPath);
-    releaseAndNil(fortArray);
-    [super dealloc];
-}
-
-
 @end
 
--- a/project_files/HedgewarsMobile/Classes/GameConfigViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/GameConfigViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -45,9 +45,9 @@
 @property (nonatomic,retain) IBOutlet MapConfigViewController *mapConfigViewController;
 @property (nonatomic,retain) HelpPageLobbyViewController *helpPage;
 
--(IBAction) buttonPressed:(id) sender;
--(IBAction) segmentPressed:(id) sender;
--(void) startGame:(UIButton *)button;
--(BOOL) isEverythingSet;
+- (IBAction)buttonPressed:(id)sender;
+- (IBAction)segmentPressed:(id)sender;
+- (void)startGame:(UIButton *)button;
+- (BOOL)isEverythingSet;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/GameConfigViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/GameConfigViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -35,13 +35,13 @@
 @synthesize imgContainer, titleImage, sliderBackground, helpPage,
             mapConfigViewController, teamConfigViewController, schemeWeaponConfigViewController;
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 #pragma mark - Buttons
 
--(IBAction) buttonPressed:(id) sender {
+- (IBAction)buttonPressed:(id)sender {
     UIButton *theButton = (UIButton *)sender;
 
     switch (theButton.tag) {
@@ -53,7 +53,6 @@
                                                       cancelButtonTitle:NSLocalizedString(@"Ok, got it",@"")
                                                       otherButtonTitles:nil];
                 [alert show];
-                [alert release];
             } else {
                 [[AudioManagerController mainManager] playBackSound];
                 [[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];
@@ -68,7 +67,7 @@
             [self startGame:theButton];
 
             break;
-        case 2:
+        case 2: {
             [[AudioManagerController mainManager] playClickSound];
             if (self.helpPage == nil)
                 self.helpPage = [[HelpPageLobbyViewController alloc] initWithNibName:@"HelpPageLobbyViewController-iPad" bundle:nil];
@@ -79,6 +78,7 @@
                 self.helpPage.view.alpha = 1;
             }];
             break;
+        }
         default:
             DLog(@"Nope");
             break;
@@ -96,7 +96,7 @@
     }
 }
 
--(IBAction) segmentPressed:(id) sender {
+- (IBAction)segmentPressed:(id)sender {
 
     UISegmentedControl *theSegment = (UISegmentedControl *)sender;
 
@@ -138,7 +138,7 @@
 
 #pragma mark -
 
--(BOOL) isEverythingSet {
+- (BOOL)isEverythingSet {
     // don't start playing if the preview is in progress
     if ([self.mapConfigViewController busy]) {
         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Wait for the Preview",@"")
@@ -147,7 +147,6 @@
                                               cancelButtonTitle:NSLocalizedString(@"Ok, got it",@"")
                                               otherButtonTitles:nil];
         [alert show];
-        [alert release];
         return NO;
     }
 
@@ -159,7 +158,6 @@
                                               cancelButtonTitle:NSLocalizedString(@"Ok, got it",@"")
                                               otherButtonTitles:nil];
         [alert show];
-        [alert release];
         return NO;
     }
 
@@ -174,7 +172,6 @@
                                               cancelButtonTitle:NSLocalizedString(@"Ok, got it",@"")
                                               otherButtonTitles:nil];
         [alert show];
-        [alert release];
         return NO;
     }
 
@@ -186,7 +183,6 @@
                                               cancelButtonTitle:NSLocalizedString(@"Ok, got it",@"")
                                               otherButtonTitles:nil];
         [alert show];
-        [alert release];
         return NO;
     }
 
@@ -198,14 +194,12 @@
                                               cancelButtonTitle:NSLocalizedString(@"Ok, got it",@"")
                                               otherButtonTitles:nil];
         [alert show];
-        [alert release];
         return NO;
     }
 
     // play if the gameflags are set correctly (divideteam works only with 2 teams)
     NSString *schemePath = [[NSString alloc] initWithFormat:@"%@/%@",SCHEMES_DIRECTORY(),self.schemeWeaponConfigViewController.selectedScheme];
     NSArray *gameFlags = [[NSDictionary dictionaryWithContentsOfFile:schemePath] objectForKey:@"gamemod"];
-    [schemePath release];
     if ([[gameFlags objectAtIndex:2] boolValue] && [self.teamConfigViewController.listOfSelectedTeams count] != 2) {
         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Scheme mismatch",@"")
                                                         message:NSLocalizedString(@"The scheme you selected allows only for two teams",@"")
@@ -213,14 +207,13 @@
                                               cancelButtonTitle:NSLocalizedString(@"Ok, got it",@"")
                                               otherButtonTitles:nil];
         [alert show];
-        [alert release];
         return NO;
     }
 
     return YES;
 }
 
--(void) startGame:(UIButton *)button {
+- (void)startGame:(UIButton *)button {
     button.enabled = YES;
 
     NSString *script = self.mapConfigViewController.missionCommand;
@@ -243,17 +236,14 @@
 
     [GameInterfaceBridge registerCallingController:self];
     [GameInterfaceBridge startLocalGame:gameDictionary];
-    [gameDictionary release];
 }
 
--(void) loadNiceHogs
+- (void)loadNiceHogs
 {
     @autoreleasepool
     {
-    
         NSString *filePath = [[NSString alloc] initWithFormat:@"%@/Hedgehog/Idle.png",GRAPHICS_DIRECTORY()];
         UIImage *hogSprite = [[UIImage alloc] initWithContentsOfFile:filePath];
-        [filePath release];
 
         NSArray *hatArray = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:HATS_DIRECTORY() error:NULL];
         NSUInteger numberOfHats = [hatArray count];
@@ -274,15 +264,14 @@
                 UIImage *hatSpriteFrame = [hatSprite cutAt:CGRectMake(x, y, 32, 32)];
                 UIImage *hogSpriteFrame = [hogSprite cutAt:CGRectMake(x, y, 32, 32)];
                 UIImage *hogWithHat = [hogSpriteFrame mergeWith:hatSpriteFrame atPoint:CGPointMake(0, 5)];
-                [animation addObject:hogWithHat];
+                if (hogWithHat) {
+                    [animation addObject:hogWithHat];
+                }
             }
-            [hatSprite release];
-            [hatFile release];
 
-            UIImageView *hog = [[UIImageView alloc] initWithImage:[animation objectAtIndex:0]];
+            UIImageView *hog = [[UIImageView alloc] initWithImage:[animation firstObject]];
             hog.animationImages = animation;
             hog.animationDuration = 3;
-            [animation release];
 
             int x = 20*i+arc4random_uniform(128);
             while (x > 320 - 32)
@@ -291,9 +280,7 @@
             hog.frame = CGRectMake(x, 25, hog.frame.size.width, hog.frame.size.height);
             [self.imgContainer addSubview:hog];
             [hog startAnimating];
-            [hog release];
         }
-        [hogSprite release];
         
         dispatch_async(dispatch_get_main_queue(), ^{
             
@@ -324,7 +311,7 @@
     self.imgContainer = nil;
 }
 
--(void) viewDidLoad
+- (void)viewDidLoad
 {
     [super viewDidLoad];
     
@@ -340,7 +327,6 @@
                                                    andTitle:nil
                                             withBorderWidth:2.0f];
         self.sliderBackground = backLabel;
-        [backLabel release];
         [self.view addSubview:self.sliderBackground];
 
         // the label for max hogs
@@ -352,7 +338,6 @@
         maxLabel.textAlignment = NSTextAlignmentCenter;
         [self.view addSubview:maxLabel];
         self.mapConfigViewController.maxLabel = maxLabel;
-        [maxLabel release];
     }
     else
     {
@@ -368,7 +353,7 @@
     [self.view bringSubviewToFront:self.mapConfigViewController.slider];
 }
 
--(void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval) duration {
+- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval) duration {
     if (IS_IPAD() == NO)
         return;
 
@@ -404,7 +389,7 @@
     }
 }
 
--(void) viewWillAppear:(BOOL)animated
+- (void)viewWillAppear:(BOOL)animated
 {
     [super viewWillAppear:animated];
     
@@ -434,7 +419,7 @@
     }
 }
 
--(void) didReceiveMemoryWarning
+- (void)didReceiveMemoryWarning
 {
     [self clearImgContainer];
 
@@ -455,30 +440,4 @@
     [super didReceiveMemoryWarning];
 }
 
--(void) viewDidUnload {
-    self.imgContainer = nil;
-    self.titleImage = nil;
-    self.sliderBackground = nil;
-    self.schemeWeaponConfigViewController = nil;
-    self.teamConfigViewController = nil;
-    self.mapConfigViewController = nil;
-    self.helpPage = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
-}
-
--(void) dealloc {
-    releaseAndNil(_tabsSegmentedControl);
-    releaseAndNil(_backButton);
-    releaseAndNil(_startButton);
-    releaseAndNil(imgContainer);
-    releaseAndNil(titleImage);
-    releaseAndNil(sliderBackground);
-    releaseAndNil(schemeWeaponConfigViewController);
-    releaseAndNil(teamConfigViewController);
-    releaseAndNil(mapConfigViewController);
-    releaseAndNil(helpPage);
-    [super dealloc];
-}
-
 @end
--- a/project_files/HedgewarsMobile/Classes/GameInterfaceBridge.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/GameInterfaceBridge.h	Sun Jun 10 19:01:50 2018 +0200
@@ -27,16 +27,16 @@
     NSInteger port;
 }
 
-@property (nonatomic,retain) UIView *blackView;
-@property (nonatomic,retain) NSString *savePath;
+@property (nonatomic, strong) UIView *blackView;
+@property (nonatomic, strong) NSString *savePath;
 @property (assign) NSInteger port;
 
-+(void) startLocalGame:(NSDictionary *)withOptions;
-+(void) startSaveGame:(NSString *)atPath;
-+(void) startMissionGame:(NSString *)withScript;
-+(void) startCampaignMissionGameWithScript:(NSString *)missionScriptName forCampaign:(NSString *)campaignName;
-+(void) startSimpleGame;
++ (void)startLocalGame:(NSDictionary *)withOptions;
++ (void)startSaveGame:(NSString *)atPath;
++ (void)startMissionGame:(NSString *)withScript;
++ (void)startCampaignMissionGameWithScript:(NSString *)missionScriptName forCampaign:(NSString *)campaignName;
++ (void)startSimpleGame;
 
-+(void) registerCallingController:(UIViewController *)controller;
++ (void)registerCallingController:(UIViewController *)controller;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m	Sun Jun 10 19:01:50 2018 +0200
@@ -30,15 +30,13 @@
 #pragma mark -
 #pragma mark Instance methods for engine interaction
 // prepares the controllers for hosting a game
--(void) earlyEngineLaunch:(NSDictionary *)optionsOrNil {
-    [self retain];
+- (void)earlyEngineLaunch:(NSDictionary *)optionsOrNil {
     [[AudioManagerController mainManager] fadeOutBackgroundMusic];
 
     EngineProtocolNetwork *engineProtocol = [[EngineProtocolNetwork alloc] init];
     self.port = engineProtocol.enginePort;
     engineProtocol.delegate = self;
     [engineProtocol spawnThread:self.savePath withOptions:optionsOrNil];
-    [engineProtocol release];
 
     // add a black view hiding the background
     UIWindow *thisWindow = [[HedgewarsAppDelegate sharedAppDelegate] uiwindow];
@@ -52,7 +50,6 @@
     self.blackView.alpha = 1;
     [UIView commitAnimations];
     [thisWindow addSubview:self.blackView];
-    [self.blackView release];
 
     // keep the point of return for games that completed loading
     NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
@@ -65,7 +62,7 @@
 }
 
 // cleans up everything
--(void) lateEngineLaunch {
+- (void)lateEngineLaunch {
     // notify views below that they are getting the spotlight again
     [[[HedgewarsAppDelegate sharedAppDelegate] uiwindow] makeKeyAndVisible];
     [callingController viewWillAppear:YES];
@@ -91,11 +88,10 @@
     [[AudioManagerController mainManager] fadeInBackgroundMusic];
     [HWUtils setGameStatus:gsNone];
     [HWUtils setGameType:gtNone];
-    [self release];
 }
 
 // main routine for calling the actual game engine
--(void) engineLaunch {
+- (void)engineLaunch {
     CGFloat width, height;
     CGFloat screenScale = [[UIScreen mainScreen] safeScale];
     NSString *ipcString = [[NSString alloc] initWithFormat:@"%d",self.port];
@@ -141,11 +137,6 @@
                                       @"--prefix", resourcePath,
                                       @"--user-prefix", documentsDirectory,
                                       nil];
-    [verticalSize release];
-    [horizontalSize release];
-    [resourcePath release];
-    [localeString release];
-    [ipcString release];
 
     NSString *username = [settings objectForKey:@"username"];
     if ([username length] > 0) {
@@ -175,7 +166,6 @@
     const char **argv = (const char **)malloc(sizeof(const char*)*argc);
     for (int i = 0; i < argc; i++)
         argv[i] = strdup([[gameParameters objectAtIndex:i] UTF8String]);
-    [gameParameters release];
 
     // this is the pascal function that starts the game
     RunEngine(argc, argv);
@@ -189,88 +179,76 @@
     [self lateEngineLaunch];
 }
 
--(void) dealloc {
-    releaseAndNil(blackView);
-    releaseAndNil(savePath);
-    [super dealloc];
-}
 
 #pragma mark -
 #pragma mark EngineProtocolDelegate methods
--(void) gameEndedWithStatistics:(NSArray *)stats {
+- (void)gameEndedWithStatistics:(NSArray *)stats {
+    [self performSelectorOnMainThread:@selector(presentStats:) withObject:stats waitUntilDone:NO];
+}
+
+- (void)presentStats:(NSArray *)stats {
     if (stats != nil) {
         StatsPageViewController *statsPage = [[StatsPageViewController alloc] init];
         statsPage.statsArray = stats;
         statsPage.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
 
         [callingController presentViewController:statsPage animated:YES completion:nil];
-        [statsPage release];
     }
 }
 
 #pragma mark -
 #pragma mark Class methods for setting up the engine from outsite
-+(void) registerCallingController:(UIViewController *)controller {
++ (void)registerCallingController:(UIViewController *)controller {
     callingController = controller;
 }
 
-+(void) startGame:(TGameType) type atPath:(NSString *)path withOptions:(NSDictionary *)config {
++ (void)startGame:(TGameType)type atPath:(NSString *)path withOptions:(NSDictionary *)config {
     [HWUtils setGameType:type];
     id bridge = [[self alloc] init];
     [bridge setSavePath:path];
     [bridge earlyEngineLaunch:config];
-    [bridge release];
 }
 
-+(void) startLocalGame:(NSDictionary *)withOptions {
++ (void)startLocalGame:(NSDictionary *)withOptions {
     NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
     [outputFormatter setDateFormat:@"yyyy-MM-dd '@' HH.mm"];
     NSString *savePath = [[NSString alloc] initWithFormat:@"%@%@.hws",SAVES_DIRECTORY(),[outputFormatter stringFromDate:[NSDate date]]];
-    [outputFormatter release];
 
     // in the rare case in which a savefile with the same name exists the older one must be removed (otherwise it gets corrupted)
     if ([[NSFileManager defaultManager] fileExistsAtPath:savePath])
         [[NSFileManager defaultManager] removeItemAtPath:savePath error:nil];
 
     [self startGame:gtLocal atPath:savePath withOptions:withOptions];
-    [savePath release];
 }
 
-+(void) startSaveGame:(NSString *)atPath {
++ (void)startSaveGame:(NSString *)atPath {
     [self startGame:gtSave atPath:atPath withOptions:nil];
 }
 
-+(void) startMissionGame:(NSString *)withScript {
++ (void)startMissionGame:(NSString *)withSubPath {
     NSString *seedCmd = [self seedCommand];
-    NSString *missionPath = [[NSString alloc] initWithFormat:@"escript Missions/Training/%@.lua",withScript];
+    NSString *missionPath = [[NSString alloc] initWithFormat:@"escript Missions/%@.lua", withSubPath];
     NSDictionary *missionDict = [[NSDictionary alloc] initWithObjectsAndKeys:missionPath, @"mission_command", seedCmd, @"seed_command", nil];
-    [missionPath release];
-    [seedCmd release];
 
     [self startGame:gtMission atPath:nil withOptions:missionDict];
-    [missionDict release];
 }
 
-+(NSString *) seedCommand {
++ (NSString *)seedCommand {
     // generate a seed
     NSString *seed = [HWUtils seed];
     NSString *seedCmd = [[NSString alloc] initWithFormat:@"eseed {%@}", seed];
-    [seed release];
     return seedCmd;
 }
 
-+(void) startCampaignMissionGameWithScript:(NSString *)missionScriptName forCampaign:(NSString *)campaignName {
++ (void)startCampaignMissionGameWithScript:(NSString *)missionScriptName forCampaign:(NSString *)campaignName {
     NSString *seedCmd = [self seedCommand];
     NSString *campaignMissionPath = [[NSString alloc] initWithFormat:@"escript Missions/Campaign/%@/%@", campaignName, missionScriptName];
     NSDictionary *campaignMissionDict = [[NSDictionary alloc] initWithObjectsAndKeys:campaignMissionPath, @"mission_command", seedCmd, @"seed_command", nil];
-    [campaignMissionPath release];
-    [seedCmd release];
     
     [self startGame:gtCampaign atPath:nil withOptions:campaignMissionDict];
-    [campaignMissionDict release];
 }
 
-+(void) startSimpleGame {
++ (void)startSimpleGame {
     NSString *seedCmd = [self seedCommand];
 
     // pick a random static map
@@ -278,9 +256,7 @@
     NSString *mapName = [listOfMaps objectAtIndex:arc4random_uniform((int)[listOfMaps count])];
     NSString *fileCfg = [[NSString alloc] initWithFormat:@"%@/%@/map.cfg",MAPS_DIRECTORY(),mapName];
     NSString *contents = [[NSString alloc] initWithContentsOfFile:fileCfg encoding:NSUTF8StringEncoding error:NULL];
-    [fileCfg release];
     NSArray *split = [contents componentsSeparatedByString:@"\n"];
-    [contents release];
     NSString *themeCommand = [[NSString alloc] initWithFormat:@"etheme %@", [split objectAtIndex:0]];
     NSString *staticMapCommand = [[NSString alloc] initWithFormat:@"emap %@", mapName];
 
@@ -301,8 +277,6 @@
                                                                             [NSNumber numberWithUnsignedInt:secondColor],@"color",
                                                                             @"Robots.plist",@"team",nil];
     NSArray *listOfTeams = [[NSArray alloc] initWithObjects:firstTeam,secondTeam,nil];
-    [firstTeam release];
-    [secondTeam release];
 
     // create the configuration
     NSDictionary *gameDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
@@ -317,14 +291,9 @@
                                     @"Default.plist",@"weapon",
                                     @"",@"mission_command",
                                     nil];
-    [listOfTeams release];
-    [staticMapCommand release];
-    [themeCommand release];
-    [seedCmd release];
 
     // launch game
     [GameInterfaceBridge startLocalGame:gameDictionary];
-    [gameDictionary release];
 }
 
 @end
--- a/project_files/HedgewarsMobile/Classes/GameLogViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/GameLogViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -41,14 +41,12 @@
     
     UIBarButtonItem *closeButton = [[UIBarButtonItem alloc] initWithTitle:@"Close" style:UIBarButtonItemStylePlain target:self action:@selector(dismissAction)];
     self.navigationItem.rightBarButtonItem = closeButton;
-    [closeButton release];
     
 #ifdef DEBUG
     if ([self allowSendLogByEmail])
     {
         UIBarButtonItem *sendButton = [[UIBarButtonItem alloc] initWithTitle:@"Send" style:UIBarButtonItemStylePlain target:self action:@selector(sendLogByEmailAction)];
         self.navigationItem.leftBarButtonItem = sendButton;
-        [sendButton release];
     }
 #endif
     
@@ -61,11 +59,9 @@
     UITextView *logView = [[UITextView alloc] initWithFrame:self.view.frame];
     [logView setAutoresizingMask:(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth)];
     logView.text = debugStr;
-    [debugStr release];
     logView.editable = NO;
     
     [self.view addSubview:logView];
-    [logView release];
 }
 
 #pragma mark - Parameters
@@ -95,7 +91,6 @@
     [picker setMessageBody:emailBody isHTML:NO];
     
     [self presentViewController:picker animated:YES completion:nil];
-    [picker release];
 }
 #endif
 
--- a/project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -23,23 +23,23 @@
 @implementation GeneralSettingsViewController
 
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 #pragma mark -
 #pragma mark View Lifecycle
--(void) viewDidLoad {
+- (void)viewDidLoad {
     self.navigationItem.title = NSLocalizedString(@"Edit game options", nil);
     [super viewDidLoad];
 }
 
--(void) viewWillAppear:(BOOL)animated {
+- (void)viewWillAppear:(BOOL)animated {
     [self.tableView setContentOffset:CGPointMake(0,0) animated:NO];
     [super viewWillAppear:animated];
 }
 
--(void) viewWillDisappear:(BOOL)animated {
+- (void)viewWillDisappear:(BOOL)animated {
     NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
     [userDefaults synchronize];
     if ([[userDefaults objectForKey:@"music"] boolValue] == NO)
@@ -49,7 +49,7 @@
 }
 
 #pragma mark -
--(void) switchValueChanged:(id) sender {
+- (void)switchValueChanged:(id)sender {
     UISwitch *theSwitch = (UISwitch *)sender;
     NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];
 
@@ -76,7 +76,7 @@
     }
 }
 
--(void) saveTextFieldValue:(NSString *)textString withTag:(NSInteger) tagValue {
+- (void)saveTextFieldValue:(NSString *)textString withTag:(NSInteger)tagValue {
     NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];
 
     if (tagValue == 40)
@@ -87,11 +87,11 @@
 
 #pragma mark -
 #pragma mark TableView Methods
--(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
     return 3;
 }
 
--(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger )section {
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger )section {
     switch (section) {
         case 0:     // user and pass
             return 1;   // set 2 here to show the password field
@@ -109,7 +109,7 @@
     return 0;
 }
 
--(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
+- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
     NSString *sectionTitle = nil;
     switch (section) {
         case 0:
@@ -143,7 +143,7 @@
         case 0:
             editableCell = (EditableCellView *)[aTableView dequeueReusableCellWithIdentifier:cellIdentifier0];
             if (nil == editableCell) {
-                editableCell = [[[EditableCellView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier0] autorelease];
+                editableCell = [[EditableCellView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier0];
                 editableCell.minimumCharacters = 0;
                 editableCell.delegate = self;
                 editableCell.textField.font = [UIFont systemFontOfSize:[UIFont systemFontSize]];
@@ -170,11 +170,10 @@
         case 1:
             cell = [aTableView dequeueReusableCellWithIdentifier:cellIdentifier1];
             if (nil == cell) {
-                cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier1] autorelease];
+                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier1];
                 UISwitch *theSwitch = [[UISwitch alloc] init];
                 [theSwitch addTarget:self action:@selector(switchValueChanged:) forControlEvents:UIControlEventValueChanged];
                 cell.accessoryView = theSwitch;
-                [theSwitch release];
             }
 
             switchContent = (UISwitch *)cell.accessoryView;
@@ -191,11 +190,10 @@
         case 2:
             cell = [aTableView dequeueReusableCellWithIdentifier:cellIdentifier2];
             if (nil == cell) {
-                cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier2] autorelease];
+                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier2];
                 UISwitch *theSwitch = [[UISwitch alloc] init];
                 [theSwitch addTarget:self action:@selector(switchValueChanged:) forControlEvents:UIControlEventValueChanged];
                 cell.accessoryView = theSwitch;
-                [theSwitch release];
             }
 
             switchContent = (UISwitch *)cell.accessoryView;
@@ -231,7 +229,7 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
     if (0 == [indexPath section]) {
         EditableCellView *cell = (EditableCellView *)[aTableView cellForRowAtIndexPath:indexPath];
@@ -242,16 +240,9 @@
 
 #pragma mark -
 #pragma mark Memory management
--(void) didReceiveMemoryWarning {
+
+- (void)didReceiveMemoryWarning {
     [super didReceiveMemoryWarning];
 }
 
--(void) viewDidUnload {
-    [super viewDidUnload];
-}
-
--(void) dealloc {
-    [super dealloc];
-}
-
 @end
--- a/project_files/HedgewarsMobile/Classes/GravesViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/GravesViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -27,8 +27,8 @@
     NSIndexPath *lastIndexPath;
 }
 
-@property (nonatomic,retain) NSMutableDictionary *teamDictionary;
-@property (nonatomic,retain) NSArray *graveArray;
-@property (nonatomic,retain) NSIndexPath *lastIndexPath;
+@property (nonatomic, strong) NSMutableDictionary *teamDictionary;
+@property (nonatomic, strong) NSArray *graveArray;
+@property (nonatomic, strong) NSIndexPath *lastIndexPath;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/GravesViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/GravesViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -23,13 +23,13 @@
 @implementation GravesViewController
 @synthesize teamDictionary, graveArray, lastIndexPath;
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 #pragma mark -
 #pragma mark View lifecycle
--(void) viewDidLoad {
+- (void)viewDidLoad {
     [super viewDidLoad];
 
     // load all the grave names and store them into graveArray
@@ -38,7 +38,7 @@
     self.title = NSLocalizedString(@"Choose hedgehog graves",@"");
 }
 
--(void) viewWillAppear:(BOOL)animated {
+- (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
     [self.tableView reloadData];
     // this moves the tableview to the top
@@ -48,11 +48,11 @@
 
 #pragma mark -
 #pragma mark Table view data source
--(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
     return 1;
 }
 
--(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
     return [self.graveArray count];
 }
 
@@ -62,7 +62,7 @@
 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil)
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
+        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
 
     NSString *grave = [self.graveArray objectAtIndex:[indexPath row]];
     cell.textLabel.text = [grave stringByDeletingPathExtension];
@@ -77,9 +77,7 @@
     NSString *graveFilePath = [[NSString alloc] initWithFormat:@"%@/%@",GRAVES_DIRECTORY(),grave];
     // because we also have multi frame graves, let's take the first one only
     UIImage *graveSprite = [[UIImage alloc] initWithContentsOfFile:graveFilePath andCutAt:CGRectMake(0, 0, 32, 32)];
-    [graveFilePath release];
     cell.imageView.image = graveSprite;
-    [graveSprite release];
 
     return cell;
 }
@@ -87,7 +85,7 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     NSInteger newRow = [indexPath row];
     NSInteger oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
 
@@ -111,27 +109,12 @@
 
 #pragma mark -
 #pragma mark Memory management
--(void) didReceiveMemoryWarning {
+
+- (void)didReceiveMemoryWarning {
     self.lastIndexPath = nil;
     MSG_MEMCLEAN();
     [super didReceiveMemoryWarning];
 }
 
--(void) viewDidUnload {
-    self.lastIndexPath = nil;
-    self.teamDictionary = nil;
-    self.graveArray = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
-}
-
--(void) dealloc {
-    releaseAndNil(graveArray);
-    releaseAndNil(teamDictionary);
-    releaseAndNil(lastIndexPath);
-    [super dealloc];
-}
-
-
 @end
 
--- a/project_files/HedgewarsMobile/Classes/HWUtils.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/HWUtils.h	Sun Jun 10 19:01:50 2018 +0200
@@ -27,23 +27,23 @@
 
 }
 
-+(TGameType) gameType;
-+(void) setGameType:(TGameType) type;
-+(TGameStatus) gameStatus;
-+(void) setGameStatus:(TGameStatus) status;
-+(BOOL) isGameLaunched;
-+(BOOL) isGameRunning;
++ (TGameType)gameType;
++ (void)setGameType:(TGameType)type;
++ (TGameStatus)gameStatus;
++ (void)setGameStatus:(TGameStatus)status;
++ (BOOL)isGameLaunched;
++ (BOOL)isGameRunning;
 
-+(NSString *)modelType;
-+(NSArray *)teamColors;
-+(void) releaseCache;
++ (NSString *)modelType;
++ (NSArray *)teamColors;
++ (void)releaseCache;
 
-+(NSInteger) randomPort;
-+(void) freePort:(NSInteger) port;
-+(BOOL) isNetworkReachable;
-+(NSString *) languageID;
-//+(UIView *)mainSDLViewInstance;
-+(NSString *) seed;
++ (NSInteger)randomPort;
++ (void)freePort:(NSInteger)port;
++ (BOOL)isNetworkReachable;
++ (NSString *)languageID;
+//+ (UIView *)mainSDLViewInstance;
++ (NSString *)seed;
 
 @end
 
--- a/project_files/HedgewarsMobile/Classes/HWUtils.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/HWUtils.m	Sun Jun 10 19:01:50 2018 +0200
@@ -35,33 +35,33 @@
 
 #pragma mark -
 #pragma mark game status and type info
-+(TGameType) gameType {
++ (TGameType)gameType {
     return gameType;
 }
 
-+(void) setGameType:(TGameType) type {
++ (void)setGameType:(TGameType)type {
     gameType = type;
 }
 
-+(TGameStatus) gameStatus {
++ (TGameStatus)gameStatus {
     return gameStatus;
 }
 
-+(void) setGameStatus:(TGameStatus) status {
++ (void)setGameStatus:(TGameStatus)status {
     gameStatus = status;
 }
 
-+(BOOL) isGameLaunched {
++ (BOOL)isGameLaunched {
     return ((gameStatus == gsLoading) || (gameStatus == gsInGame));
 }
 
-+(BOOL) isGameRunning {
++ (BOOL)isGameRunning {
     return (gameStatus == gsInGame);
 }
 
 #pragma mark -
 #pragma mark Helper Functions with cache
-+(NSString *)modelType {
++ (NSString *)modelType {
     if (cachedModel == nil) {
         size_t size;
         // set 'oldp' parameter to NULL to get the size of the data returned so we can allocate appropriate amount of space
@@ -70,13 +70,13 @@
         // get the platform name
         sysctlbyname("hw.machine", name, &size, NULL, 0);
 
-        cachedModel = [[NSString stringWithUTF8String:name] retain];
+        cachedModel = [NSString stringWithUTF8String:name];
         free(name);
     }
     return cachedModel;
 }
 
-+(NSArray *)teamColors {
++ (NSArray *)teamColors {
     if (cachedColors == nil) {
         // by default colors are ARGB but we do computation over RGB, hence we have to "& 0x00FFFFFF" before processing
         unsigned int colors[] = HW_TEAMCOLOR_ARRAY;
@@ -86,24 +86,23 @@
         while(colors[i] != 0)
             [array addObject:[NSNumber numberWithUnsignedInt:(colors[i++] & 0x00FFFFFF)]];
 
-        cachedColors = [[NSArray arrayWithArray:array] retain];
-        [array release];
+        cachedColors = [NSArray arrayWithArray:array];
     }
     return cachedColors;
 }
 
-+(void) releaseCache {
-    [cachedModel release], cachedModel = nil;
-    [cachedColors release], cachedColors = nil;
++ (void)releaseCache {
+    cachedModel = nil;
+    cachedColors = nil;
     // don't release activePorts here
 }
 
 #pragma mark -
 #pragma mark Helper Functions without cache
-+(NSInteger) randomPort {
++ (NSInteger)randomPort {
     // set a new feed only at initialization time and forbid connecting to the server port
     if (activePorts == nil) {
-        activePorts = [[NSMutableArray arrayWithObject:[NSNumber numberWithInt:NETGAME_DEFAULT_PORT]] retain];
+        activePorts = [NSMutableArray arrayWithObject:[NSNumber numberWithInt:NETGAME_DEFAULT_PORT]];
     }
 
     // pick a random number from the free ports list
@@ -117,11 +116,11 @@
     return res;
 }
 
-+(void) freePort:(NSInteger) port {
++ (void)freePort:(NSInteger)port {
     [activePorts removeObject:[NSNumber numberWithInteger:port]];
 }
 
-+(BOOL) isNetworkReachable {
++ (BOOL)isNetworkReachable {
     // Create zero addy
     struct sockaddr_in zeroAddress;
     bzero(&zeroAddress, sizeof(zeroAddress));
@@ -150,7 +149,6 @@
                                              timeoutInterval:20.0];
     NSURLConnection *testConnection = [[NSURLConnection alloc] initWithRequest:testRequest delegate:nil];
     BOOL testResult = testConnection ? YES : NO;
-    [testConnection release];
 
     return ((isReachable && !needsConnection) || nonWiFi) ? testResult : NO;
 }
@@ -162,7 +160,7 @@
 }
 
 /*
-+(UIView *)mainSDLViewInstance {
++ (UIView *)mainSDLViewInstance {
     SDL_Window *window = HW_getSDLWindow();
     if (window == NULL) {
         SDL_SetError("Window does not exist");
@@ -177,7 +175,7 @@
 + (NSString *)seed
 {
     CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault);
-    NSString *seed = (NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuid);
+    NSString *seed = (NSString *)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, uuid));
     CFRelease(uuid);
     return seed;
 }
--- a/project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.h	Sun Jun 10 19:01:50 2018 +0200
@@ -28,8 +28,8 @@
     UIWindow *uiwindow;
 }
 
-@property (nonatomic,retain) MainMenuViewController *mainViewController;
-@property (nonatomic,retain) UIWindow *uiwindow;
+@property (nonatomic, strong) MainMenuViewController *mainViewController;
+@property (nonatomic, strong) UIWindow *uiwindow;
 
 @end
 
--- a/project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.m	Sun Jun 10 19:01:50 2018 +0200
@@ -24,7 +24,7 @@
 @implementation SDLUIKitDelegate (customDelegate)
 
 // hijack the the SDL_UIKitAppDelegate to use the UIApplicationDelegate we implement here
-+(NSString *)getAppDelegateClassName {
++ (NSString *)getAppDelegateClassName {
     return @"HedgewarsAppDelegate";
 }
 
@@ -35,7 +35,7 @@
 
 #pragma mark -
 #pragma mark AppDelegate methods
--(id) init {
+- (id)init {
     if ((self = [super init])) {
         mainViewController = nil;
         uiwindow = nil;
@@ -43,14 +43,9 @@
     return self;
 }
 
--(void) dealloc {
-    [mainViewController release];
-    [uiwindow release];
-    [super dealloc];
-}
 
 // override the direct execution of SDL_main to allow us to implement our own frontend
--(void) postFinishLaunch
+- (void)postFinishLaunch
 {
     // Setup Appirater
     [Appirater setAppId:@"391234866"];
@@ -70,12 +65,11 @@
     NSString *controllerName = (IS_IPAD() ? @"MainMenuViewController-iPad" : @"MainMenuViewController-iPhone");
     self.mainViewController = [[MainMenuViewController alloc] initWithNibName:controllerName bundle:nil];
     self.uiwindow.rootViewController = self.mainViewController;
-    [self.mainViewController release];
 
     [self.uiwindow makeKeyAndVisible];
 }
 
--(void) applicationDidReceiveMemoryWarning:(UIApplication *)application {
+- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
     [HWUtils releaseCache];
     // don't stop music if it is playing
     if ([HWUtils isGameLaunched]) {
@@ -87,7 +81,7 @@
 }
 
 // true multitasking with SDL works only on 4.2 and above; we close the game to avoid a black screen at return
--(void) applicationWillResignActive:(UIApplication *)application {
+- (void)applicationWillResignActive:(UIApplication *)application {
     if ([HWUtils isGameLaunched] && [[[UIDevice currentDevice] systemVersion] floatValue] < 4.2f)
         HW_terminate(NO);
 
--- a/project_files/HedgewarsMobile/Classes/HelpPageLobbyViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/HelpPageLobbyViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -24,8 +24,8 @@
     UIScrollView *scrollView;
 }
 
-@property (nonatomic, retain) IBOutlet UIScrollView *scrollView;
+@property (nonatomic, strong) IBOutlet UIScrollView *scrollView;
 
--(IBAction) dismiss;
+- (IBAction)dismiss;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/HelpPageLobbyViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/HelpPageLobbyViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -23,17 +23,17 @@
 @implementation HelpPageLobbyViewController
 @synthesize scrollView;
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
--(void) didReceiveMemoryWarning {
+- (void)didReceiveMemoryWarning {
     [super didReceiveMemoryWarning];
     self.scrollView = nil;
 }
 
 // on iPhone the XIBs contain UIScrollView
--(void) viewDidLoad {
+- (void)viewDidLoad {
     if (IS_IPAD() == NO){
         scrollView.contentSize = CGSizeMake(self.view.frame.size.width, 650);
         scrollView.maximumZoomScale = 4.0;
@@ -44,17 +44,7 @@
     [super viewDidLoad];
 }
 
--(void) viewDidUnload {
-    [super viewDidUnload];
-    self.scrollView = nil;
-}
-
--(void) dealloc {
-    releaseAndNil(scrollView);
-    [super dealloc];
-}
-
--(IBAction) dismiss {
+- (IBAction)dismiss {
     [UIView animateWithDuration:0.5 animations:^{
         self.view.alpha = 0;
     } completion:^(BOOL finished){
--- a/project_files/HedgewarsMobile/Classes/HogHatViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/HogHatViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -28,9 +28,9 @@
     UIImage *normalHogSprite;
 }
 
-@property (nonatomic,retain) NSDictionary *teamDictionary;
+@property (nonatomic, strong) NSDictionary *teamDictionary;
 @property (nonatomic) NSInteger selectedHog;
-@property (nonatomic,retain) NSArray *hatArray;
-@property (nonatomic,retain) UIImage *normalHogSprite;
+@property (nonatomic, strong) NSArray *hatArray;
+@property (nonatomic, strong) UIImage *normalHogSprite;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/HogHatViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/HogHatViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -24,13 +24,13 @@
 @synthesize teamDictionary, hatArray, normalHogSprite, selectedHog;
 
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 #pragma mark -
 #pragma mark View lifecycle
--(void) viewDidLoad {
+- (void)viewDidLoad {
     [super viewDidLoad];
 
     // load all the hat file names and store them into hatArray
@@ -41,14 +41,12 @@
     // load the base hog image, drawing will occure in cellForRow...
     NSString *normalHogFile = [[NSString alloc] initWithFormat:@"%@/basehat-hedgehog.png",[[NSBundle mainBundle] resourcePath]];
     UIImage *hogSprite = [[UIImage alloc] initWithContentsOfFile:normalHogFile];
-    [normalHogFile release];
     self.normalHogSprite = hogSprite;
-    [hogSprite release];
 
     self.title = NSLocalizedString(@"Change hedgehogs' hat",@"");
 }
 
--(void) viewWillAppear:(BOOL)animated {
+- (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
 
     // this updates the hog name and its hat
@@ -60,11 +58,11 @@
 
 #pragma mark -
 #pragma mark Table view data source
--(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
     return 1;
 }
 
--(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
     return [self.hatArray count];
 }
 
@@ -75,16 +73,14 @@
 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil)
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
+        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
 
     NSString *hat = [self.hatArray objectAtIndex:[indexPath row]];
     cell.textLabel.text = [hat stringByDeletingPathExtension];
 
     NSString *hatFile = [[NSString alloc] initWithFormat:@"%@/%@", HATS_DIRECTORY(), hat];
     UIImage *hatSprite = [[UIImage alloc] initWithContentsOfFile: hatFile andCutAt:CGRectMake(0, 0, 32, 32)];
-    [hatFile release];
     cell.imageView.image = [self.normalHogSprite mergeWith:hatSprite atPoint:CGPointMake(0, 5)];
-    [hatSprite release];
 
     NSDictionary *hog = (self.selectedHog != -1) ? [[self.teamDictionary objectForKey:@"hedgehogs"] objectAtIndex:self.selectedHog] : nil;
     if ([[hat stringByDeletingPathExtension] isEqualToString:[hog objectForKey:@"hat"]]) {
@@ -99,7 +95,7 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {
     NSInteger selectedRow = [indexPath row];
     NSString *newHat = [[self.hatArray objectAtIndex:selectedRow] stringByDeletingPathExtension];
@@ -134,32 +130,16 @@
         NSMutableDictionary *newHog = [[NSMutableDictionary alloc] initWithDictionary:oldHog];
         [newHog setObject:newHat forKey:@"hat"];
         [hogsArray replaceObjectAtIndex:i withObject:newHog];
-        [newHog release];
     }
 }
 
 #pragma mark -
 #pragma mark Memory management
--(void) didReceiveMemoryWarning {
+
+- (void)didReceiveMemoryWarning {
     MSG_MEMCLEAN();
     [super didReceiveMemoryWarning];
 }
 
--(void) viewDidUnload {
-    self.normalHogSprite = nil;
-    self.teamDictionary = nil;
-    self.hatArray = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
-}
-
--(void) dealloc {
-    releaseAndNil(hatArray);
-    releaseAndNil(teamDictionary);
-    releaseAndNil(normalHogSprite);
-    [super dealloc];
-}
-
-
 @end
 
--- a/project_files/HedgewarsMobile/Classes/HoldTableViewCell.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/HoldTableViewCell.h	Sun Jun 10 19:01:50 2018 +0200
@@ -22,17 +22,17 @@
 
 @protocol HoldTableViewCellDelegate <NSObject>
 
--(void) holdAction:(NSString *)content onTable:(UITableView *)aTableView;
+- (void)holdAction:(NSString *)content onTable:(UITableView *)aTableView;
 
 @end
 
 @interface HoldTableViewCell : UITableViewCell {
-    id<HoldTableViewCellDelegate> delegate;
+    id<HoldTableViewCellDelegate> __weak delegate;
     NSTimeInterval time;
 }
 
-@property (nonatomic,assign) id<HoldTableViewCellDelegate> delegate;
+@property (nonatomic, weak) id<HoldTableViewCellDelegate> delegate;
 
--(void) holdAction;
+- (void)holdAction;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/HoldTableViewCell.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/HoldTableViewCell.m	Sun Jun 10 19:01:50 2018 +0200
@@ -26,14 +26,14 @@
 #define SWIPE_DRAG_HORIZ_MIN 10
 #define SWIPE_DRAG_VERT_MAX 40
 
--(id) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
     if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
         delegate = nil;
     }
     return self;
 }
 
--(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
+- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
     UITouch *touch = [[event allTouches] anyObject];
 
     time = touch.timestamp;
@@ -42,7 +42,7 @@
     [super touchesBegan:touches withEvent:event];
 }
 
--(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
+- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
     UITouch *touch = [[event allTouches] anyObject];
 
     if ( touch.timestamp - time < 0.25 ) {
@@ -55,7 +55,7 @@
         [super touchesCancelled:touches withEvent:event];
 }
 
--(void) holdAction {
+- (void)holdAction {
     if (self.delegate != nil && [self.delegate respondsToSelector:@selector(holdAction:onTable:)])
     {
         UITableView *tableView = [self findTable];
@@ -66,9 +66,4 @@
     }
 }
 
--(void) dealloc {
-    self.delegate = nil;
-    [super dealloc];
-}
-
 @end
--- a/project_files/HedgewarsMobile/Classes/IniParser.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/IniParser.m	Sun Jun 10 19:01:50 2018 +0200
@@ -22,10 +22,10 @@
 #define  SECTION_START_CHAR '['
 
 @interface IniParser ()
-@property (nonatomic, retain) NSString *iniFilePath;
+@property (nonatomic, strong) NSString *iniFilePath;
 
-@property (nonatomic, retain) NSMutableArray *mutableSections;
-@property (nonatomic, retain) NSMutableDictionary *currentSection;
+@property (nonatomic, strong) NSMutableArray *mutableSections;
+@property (nonatomic, strong) NSMutableDictionary *currentSection;
 @end
 
 @implementation IniParser
@@ -85,7 +85,6 @@
 - (void)addPreviousSectionToSectionsIfNecessary {
     if (self.currentSection != nil) {
         [self.mutableSections addObject:self.currentSection];
-        [self.currentSection release];
     }
 }
 
@@ -110,13 +109,4 @@
     return [self.mutableSections copy];
 }
 
-#pragma mark - Dealloc
-
-- (void)dealloc {
-    [_iniFilePath release];
-    [_mutableSections release];
-    [_currentSection release];
-    [super dealloc];
-}
-
 @end
--- a/project_files/HedgewarsMobile/Classes/LevelViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/LevelViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -30,9 +30,9 @@
     NSInteger numberOfSections;
 }
 
-@property (nonatomic,retain) NSDictionary *teamDictionary;
-@property (nonatomic,retain) NSArray *levelArray;
-@property (nonatomic,retain) NSArray *levelSprites;
-@property (nonatomic,retain) NSIndexPath *lastIndexPath;
+@property (nonatomic, strong) NSDictionary *teamDictionary;
+@property (nonatomic, strong) NSArray *levelArray;
+@property (nonatomic, strong) NSArray *levelSprites;
+@property (nonatomic, strong) NSIndexPath *lastIndexPath;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/LevelViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/LevelViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -23,13 +23,13 @@
 @implementation LevelViewController
 @synthesize teamDictionary, levelArray, levelSprites, lastIndexPath;
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 #pragma mark -
 #pragma mark View lifecycle
--(void) viewDidLoad {
+- (void)viewDidLoad {
     [super viewDidLoad];
 
     NSArray *array = [[NSArray alloc] initWithObjects:
@@ -40,12 +40,11 @@
                       NSLocalizedString(@"Weaky",@""),
                       nil];
     self.levelArray = array;
-    [array release];
 
     self.title = NSLocalizedString(@"Set difficulty level",@"");
 }
 
--(void) viewWillAppear:(BOOL)animated {
+- (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
 
     if ([[[[self.teamDictionary objectForKey:@"hedgehogs"] objectAtIndex:0] objectForKey:@"level"] intValue] == 0)
@@ -60,11 +59,11 @@
 
 #pragma mark -
 #pragma mark Table view data source
--(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
     return numberOfSections;
 }
 
--(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger) section {
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
     if (section == 0)
         return 1;
     else
@@ -83,11 +82,10 @@
     if (section == 0) {
         cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier0];
         if (cell == nil) {
-            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier0] autorelease];
+            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier0];
             UISwitch *theSwitch = [[UISwitch alloc] init];
             [theSwitch addTarget:self action:@selector(switchValueChanged:) forControlEvents:UIControlEventValueChanged];
             cell.accessoryView = theSwitch;
-            [theSwitch release];
         }
         UISwitch *theSwitch = (UISwitch *)cell.accessoryView;
         if (numberOfSections == 1)
@@ -98,7 +96,7 @@
     } else {
         cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1];
         if (cell == nil)
-            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier1] autorelease];
+            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier1];
 
         cell.textLabel.text = [levelArray objectAtIndex:row];
         NSDictionary *hog = [[self.teamDictionary objectForKey:@"hedgehogs"] objectAtIndex:0];
@@ -111,15 +109,13 @@
 
         NSString *botlevelPath = [[NSString alloc] initWithFormat:@"%@/bot%d.png",[[NSBundle mainBundle] resourcePath],row+1];
         UIImage *levelImage = [[UIImage alloc] initWithContentsOfFile:botlevelPath];
-        [botlevelPath release];
         cell.imageView.image = levelImage;
-        [levelImage release];
     }
 
     return cell;
 }
 
--(void) switchValueChanged:(id) sender {
+- (void)switchValueChanged:(id)sender {
     UISwitch *theSwitch = (UISwitch *)sender;
     NSIndexSet *sections = [[NSIndexSet alloc] initWithIndex:1];
     NSMutableArray *hogs = [self.teamDictionary objectForKey:@"hedgehogs"];
@@ -134,7 +130,6 @@
         [self.tableView deleteSections:sections withRowAnimation:UITableViewRowAnimationFade];
         level = 0;
     }
-    [sections release];
 
     DLog(@"New level is %ld", (long)level);
     for (NSMutableDictionary *hog in hogs)
@@ -147,7 +142,7 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     NSInteger newRow = [indexPath row];
     NSInteger oldRow = (self.lastIndexPath != nil) ? [self.lastIndexPath row] : -1;
 
@@ -174,29 +169,12 @@
 
 #pragma mark -
 #pragma mark Memory management
--(void) didReceiveMemoryWarning {
+
+- (void)didReceiveMemoryWarning {
     self.lastIndexPath = nil;
     MSG_MEMCLEAN();
     [super didReceiveMemoryWarning];
 }
 
--(void) viewDidUnload {
-    self.lastIndexPath = nil;
-    self.teamDictionary = nil;
-    self.levelArray = nil;
-    self.levelSprites = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
-}
-
--(void) dealloc {
-    releaseAndNil(levelArray);
-    releaseAndNil(levelSprites);
-    releaseAndNil(teamDictionary);
-    releaseAndNil(lastIndexPath);
-    [super dealloc];
-}
-
-
 @end
 
--- a/project_files/HedgewarsMobile/Classes/MNEValueTrackingSlider.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/MNEValueTrackingSlider.h	Sun Jun 10 19:01:50 2018 +0200
@@ -17,6 +17,6 @@
 }
 
 @property (nonatomic, readonly) CGRect thumbRect;
-@property (nonatomic, retain) NSString *textValue;
+@property (nonatomic, strong) NSString *textValue;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/MNEValueTrackingSlider.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/MNEValueTrackingSlider.m	Sun Jun 10 19:01:50 2018 +0200
@@ -12,7 +12,7 @@
 #pragma mark -
 #pragma mark Private UIView subclass rendering the popup showing slider value
 @interface SliderValuePopupView : UIView
-@property (nonatomic, retain) UIFont *font;
+@property (nonatomic, strong) UIFont *font;
 @property (nonatomic, copy) NSString *text;
 @property (nonatomic) float arrowOffset;
 @end
@@ -23,7 +23,7 @@
 @synthesize text = _text;
 @synthesize arrowOffset = _arrowOffset;
 
--(id) initWithFrame:(CGRect) frame {
+- (id)initWithFrame:(CGRect)frame {
     self = [super initWithFrame:frame];
     if (self) {
         self.font = [UIFont boldSystemFontOfSize:18];
@@ -31,13 +31,8 @@
     return self;
 }
 
--(void) dealloc {
-    self.text = nil;
-    self.font = nil;
-    [super dealloc];
-}
 
--(void) drawRect:(CGRect) rect {
+- (void)drawRect:(CGRect)rect {
     // Create the path for the rounded rectangle
     CGRect roundedRect = CGRectMake(self.bounds.origin.x, self.bounds.origin.y, self.bounds.size.width, floorf(self.bounds.size.height * 0.8));
     UIBezierPath *roundedRectPath = [UIBezierPath bezierPathWithRoundedRect:roundedRect cornerRadius:6.0];
@@ -95,14 +90,14 @@
 
 #pragma mark Private methods
 
--(void) _constructSlider {
+- (void)_constructSlider {
     valuePopupView = [[SliderValuePopupView alloc] initWithFrame:CGRectZero];
     valuePopupView.backgroundColor = [UIColor clearColor];
     valuePopupView.alpha = 0.0;
     [self addSubview:valuePopupView];
 }
 
--(void) _fadePopupViewInAndOut:(BOOL)aFadeIn {
+- (void)_fadePopupViewInAndOut:(BOOL)aFadeIn {
     [UIView beginAnimations:nil context:NULL];
     [UIView setAnimationDuration:0.25];
     if (aFadeIn) {
@@ -113,7 +108,7 @@
     [UIView commitAnimations];
 }
 
--(void) _positionAndUpdatePopupView {
+- (void)_positionAndUpdatePopupView {
     CGRect _thumbRect = self.thumbRect;
     CGRect popupRect = CGRectOffset(_thumbRect, 0, -floorf(_thumbRect.size.height * 1.5));
     // (-100, -15) determines the size of the the rect
@@ -136,7 +131,7 @@
 
 #pragma mark Memory management
 
--(id) initWithFrame:(CGRect) frame {
+- (id)initWithFrame:(CGRect)frame {
     self = [super initWithFrame:frame];
     if (self) {
         [self _constructSlider];
@@ -144,7 +139,7 @@
     return self;
 }
 
--(id) initWithCoder:(NSCoder *)aDecoder {
+- (id)initWithCoder:(NSCoder *)aDecoder {
     self = [super initWithCoder:aDecoder];
     if (self) {
         [self _constructSlider];
@@ -152,15 +147,10 @@
     return self;
 }
 
--(void) dealloc {
-    [valuePopupView release];
-    [textValue release];
-    [super dealloc];
-}
 
 #pragma mark -
 #pragma mark UIControl touch event tracking
--(BOOL) beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
+- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
     // Fade in and update the popup view
     CGPoint touchPoint = [touch locationInView:self];
     // Check if the knob is touched. Only in this case show the popup-view
@@ -171,17 +161,17 @@
     return [super beginTrackingWithTouch:touch withEvent:event];
 }
 
--(BOOL) continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
+- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
     // Update the popup view as slider knob is being moved
     [self _positionAndUpdatePopupView];
     return [super continueTrackingWithTouch:touch withEvent:event];
 }
 
--(void) cancelTrackingWithEvent:(UIEvent *)event {
+- (void)cancelTrackingWithEvent:(UIEvent *)event {
     [super cancelTrackingWithEvent:event];
 }
 
--(void) endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
+- (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
     // Fade out the popoup view
     [self _fadePopupViewInAndOut:NO];
     [super endTrackingWithTouch:touch withEvent:event];
@@ -189,7 +179,7 @@
 
 #pragma mark -
 #pragma mark Custom property accessors
--(CGRect) thumbRect {
+- (CGRect)thumbRect {
     CGRect trackRect = [self trackRectForBounds:self.bounds];
     CGRect thumbR = [self thumbRectForBounds:self.bounds
                                          trackRect:trackRect
--- a/project_files/HedgewarsMobile/Classes/MXAudioPlayerFadeOperation.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/MXAudioPlayerFadeOperation.h	Sun Jun 10 19:01:50 2018 +0200
@@ -20,7 +20,7 @@
 // The AVAudioPlayer that the volume fade will be applied to.
 // Retained until the fade is completed.
 // Must be set with init method.
-@property (nonatomic, retain, readonly) AVAudioPlayer *audioPlayer;
+@property (nonatomic, strong, readonly) AVAudioPlayer *audioPlayer;
 
 // The duration of the volume fade.
 // Default value is 1.0
--- a/project_files/HedgewarsMobile/Classes/MXAudioPlayerFadeOperation.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/MXAudioPlayerFadeOperation.m	Sun Jun 10 19:01:50 2018 +0200
@@ -10,7 +10,7 @@
 #define SKVolumeChangesPerSecond 15
 
 @interface MXAudioPlayerFadeOperation ()
-@property (nonatomic, retain, readwrite) AVAudioPlayer *audioPlayer;
+@property (nonatomic, strong, readwrite) AVAudioPlayer *audioPlayer;
 - (void)beginFadeOperation;
 - (void)finishFadeOperation;
 @end
@@ -31,23 +31,22 @@
 - (AVAudioPlayer *)audioPlayer {
   AVAudioPlayer *result;
   @synchronized(self) {
-    result = [_audioPlayer retain];
+    result = _audioPlayer;
   }
-  return [result autorelease];
+  return result;
 }
 
 - (void)setAudioPlayer:(AVAudioPlayer *)anAudioPlayer {
   @synchronized(self) {
     if (_audioPlayer != anAudioPlayer) {
-      [_audioPlayer release];
-      _audioPlayer = [anAudioPlayer retain];
+      _audioPlayer = anAudioPlayer;
     }
   }
 }
 
 #pragma mark -
 #pragma mark NSOperation
--(id) initFadeWithAudioPlayer:(AVAudioPlayer*)player toVolume:(float)volume overDuration:(NSTimeInterval)duration withDelay:(NSTimeInterval)timeDelay {
+- (id)initFadeWithAudioPlayer:(AVAudioPlayer*)player toVolume:(float)volume overDuration:(NSTimeInterval)duration withDelay:(NSTimeInterval)timeDelay {
   if ((self = [super init])) {
     self.audioPlayer = player;
     [player prepareToPlay];
@@ -125,10 +124,6 @@
   if ([self.audioPlayer isPlaying] && _stopAfterFade) [self.audioPlayer stop];
 }
 
-- (void)dealloc {
-  releaseAndNil(_audioPlayer);
-  [super dealloc];
-}
 
 @end
 
--- a/project_files/HedgewarsMobile/Classes/MainMenuViewController-iPad.xib	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/MainMenuViewController-iPad.xib	Sun Jun 10 19:01:50 2018 +0200
@@ -18,7 +18,7 @@
             <rect key="frame" x="0.0" y="0.0" width="1024" height="768"/>
             <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
             <subviews>
-                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="background.png" id="37">
+                <imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" image="background.png" id="37">
                     <rect key="frame" x="0.0" y="0.0" width="1024" height="768"/>
                     <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                 </imageView>
--- a/project_files/HedgewarsMobile/Classes/MainMenuViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/MainMenuViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -21,6 +21,6 @@
 
 @interface MainMenuViewController : UIViewController <UIAlertViewDelegate>
 
--(IBAction) switchViews:(id)sender;
+- (IBAction)switchViews:(id)sender;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/MainMenuViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/MainMenuViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -50,12 +50,12 @@
 
 @implementation MainMenuViewController
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 #pragma mark -
--(void) viewDidLoad {
+- (void)viewDidLoad {
     self.view.frame = [[UIScreen mainScreen] safeBounds];
     [super viewDidLoad];
     
@@ -67,6 +67,9 @@
     [self.missionsButton applyDarkBlueQuickStyle];
     [self.campaignButton applyDarkBlueQuickStyle];
     
+    // not yet ready for release...
+    [self.campaignButton setHidden:YES];
+    
     // get the app's version
     NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey];
 
@@ -108,31 +111,30 @@
 - (void) presentViewController:(UIViewController *)vc
 {
     [self presentViewController:vc animated:NO completion:nil];
-    [vc release];
 }
 
--(void) viewWillAppear:(BOOL)animated {
+- (void)viewWillAppear:(BOOL)animated {
     [[AudioManagerController mainManager] playBackgroundMusic];
     [super viewWillAppear:animated];
 }
 
 #pragma mark -
--(IBAction) switchViews:(id) sender {
+- (IBAction)switchViews:(id)sender {
     UIButton *button = (UIButton *)sender;
     UIAlertView *alert;
     NSString *xib = nil;
 
     [[AudioManagerController mainManager] playClickSound];
     switch (button.tag) {
-        case 0:
+        case 0: {
             xib = IS_IPAD() ? @"GameConfigViewController-iPad" : @"GameConfigViewController-iPhone";
 
             GameConfigViewController *gcvc = [[GameConfigViewController alloc] initWithNibName:xib bundle:nil];
             gcvc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
 
             [self presentViewController:gcvc animated:YES completion:nil];
-            [gcvc release];
             break;
+        }
         case 2:
             if (IS_IPAD())
             {
@@ -140,23 +142,18 @@
                 SettingsBaseViewController *rightController = [[SettingsBaseViewController alloc] init];
                 rightController.targetController = nil;
                 UINavigationController *rightNavController = [[UINavigationController alloc] initWithRootViewController:rightController];
-                [rightController release];
                 
                 // the contens on the left of the splitview, setting targetController that will receive push/pop actions
                 SettingsBaseViewController *leftController = [[SettingsBaseViewController alloc] init];
                 leftController.targetController = rightNavController.topViewController;
                 UINavigationController *leftNavController = [[UINavigationController alloc] initWithRootViewController:leftController];
-                [leftController release];
                 
                 MGSplitViewController *splitViewRootController = [[MGSplitViewController alloc] init];
                 splitViewRootController.delegate = nil;
                 splitViewRootController.showsMasterInPortrait = YES;
                 splitViewRootController.viewControllers = [NSArray arrayWithObjects:leftNavController, rightNavController, nil];
-                [leftNavController release];
-                [rightNavController release];
 
                 [self presentViewController:splitViewRootController animated:YES completion:nil];
-                [splitViewRootController release];
             }
             else
             {
@@ -165,44 +162,32 @@
                 UIViewController *generalSettingsViewController = [[GeneralSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
                 generalSettingsViewController.tabBarItem = [self tabBarItemWithTitle:NSLocalizedString(@"General",@"") imageName:@"flower" selectedImageName:@"flower_filled"];
                 UINavigationController *generalNavController = [[UINavigationController alloc] initWithRootViewController:generalSettingsViewController];
-                [generalSettingsViewController release];
                 [tabBarNavigationControllers addObject:generalNavController];
-                [generalNavController release];
                 
                 UIViewController *teamSettingsViewController = [[TeamSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
                 teamSettingsViewController.tabBarItem = [self tabBarItemWithTitle:NSLocalizedString(@"Teams",@"") imageName:@"teams" selectedImageName:@"teams_filled"];
                 UINavigationController *teamNavController = [[UINavigationController alloc] initWithRootViewController:teamSettingsViewController];
-                [teamSettingsViewController release];
                 [tabBarNavigationControllers addObject:teamNavController];
-                [teamNavController release];
                 
                 UIViewController *weaponSettingsViewController = [[WeaponSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
                 weaponSettingsViewController.tabBarItem = [self tabBarItemWithTitle:NSLocalizedString(@"Weapons",@"") imageName:@"bullet" selectedImageName:@"bullet_filled"];
                 UINavigationController *weaponNavController = [[UINavigationController alloc] initWithRootViewController:weaponSettingsViewController];
-                [weaponSettingsViewController release];
                 [tabBarNavigationControllers addObject:weaponNavController];
-                [weaponNavController release];
                 
                 UIViewController *schemeSettingsViewController = [[SchemeSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped];
                 schemeSettingsViewController.tabBarItem = [self tabBarItemWithTitle:NSLocalizedString(@"Schemes",@"") imageName:@"target" selectedImageName:@"target_filled"];
                 UINavigationController *schemeNavController = [[UINavigationController alloc] initWithRootViewController:schemeSettingsViewController];
-                [schemeSettingsViewController release];
                 [tabBarNavigationControllers addObject:schemeNavController];
-                [schemeNavController release];
                 
                 UIViewController *supportViewController = [[SupportViewController alloc] initWithStyle:UITableViewStyleGrouped];
                 supportViewController.tabBarItem = [self tabBarItemWithTitle:NSLocalizedString(@"Support",@"") imageName:@"heart" selectedImageName:@"heart_filled"];
                 UINavigationController *supportNavController = [[UINavigationController alloc] initWithRootViewController:supportViewController];
-                [supportViewController release];
                 [tabBarNavigationControllers addObject:supportNavController];
-                [supportNavController release];
                 
                 UITabBarController *settingsTabController = [[UITabBarController alloc] init];
                 settingsTabController.viewControllers = tabBarNavigationControllers;
-                [tabBarNavigationControllers release];
                 
                 [self presentViewController:settingsTabController animated:YES completion:nil];
-                [settingsTabController release];
             }
             break;
         case 3:
@@ -210,10 +195,8 @@
             {
                 GameLogViewController *gameLogVC = [[GameLogViewController alloc] init];
                 UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:gameLogVC];
-                [gameLogVC release];
                 
                 [self presentViewController:navController animated:YES completion:nil];
-                [navController release];
             }
 #else
             {
@@ -222,7 +205,6 @@
                 about.modalPresentationStyle = UIModalPresentationFormSheet;
                 
                 [self presentViewController:about animated:YES completion:nil];
-                [about release];
             }
 #endif
             break;
@@ -233,7 +215,6 @@
                 savedgames.modalPresentationStyle = UIModalPresentationPageSheet;
                 
                 [self presentViewController:savedgames animated:YES completion:nil];
-                [savedgames release];
             }
             break;
         case 5:
@@ -244,36 +225,34 @@
                 missions.modalPresentationStyle = UIModalPresentationPageSheet;
                 
                 [self presentViewController:missions animated:YES completion:nil];
-                [missions release];
             }
             break;
-        case 6:
+        case 6: {
             [GameInterfaceBridge registerCallingController:self];
             [GameInterfaceBridge startSimpleGame];
             break;
+        }
         case 7:
             {
                 xib = IS_IPAD() ? @"CampaignsViewController-iPad" : @"CampaignsViewController-iPhone";
                 CampaignsViewController *campaigns = [[CampaignsViewController alloc] initWithNibName:xib bundle:nil];
                 UINavigationController *campaignNavigationController = [[UINavigationController alloc] initWithRootViewController:campaigns];
-                [campaigns release];
                 
                 campaignNavigationController.modalTransitionStyle = IS_IPAD() ? UIModalTransitionStyleCoverVertical : UIModalTransitionStyleCrossDissolve;
                 campaignNavigationController.modalPresentationStyle = UIModalPresentationPageSheet;
                 
                 [self presentViewController:campaignNavigationController animated:YES completion:nil];
-                [campaignNavigationController release];
             }
             break;
-        default:
+        default: {
             alert = [[UIAlertView alloc] initWithTitle:@"Not Yet Implemented"
                                                message:@"Sorry, this feature is not yet implemented"
                                               delegate:nil
                                      cancelButtonTitle:@"Well, don't worry"
                                      otherButtonTitles:nil];
             [alert show];
-            [alert release];
             break;
+        }
     }
 }
 
@@ -281,27 +260,16 @@
                             imageName: (NSString *)imageName
                     selectedImageName: (NSString *)selectedImageName
 {
-    return [[[UITabBarItem alloc] initWithTitle:title
+    return [[UITabBarItem alloc] initWithTitle:title
                                           image:[UIImage imageNamed:imageName]
-                                  selectedImage:[UIImage imageNamed:selectedImageName]] autorelease];
+                                  selectedImage:[UIImage imageNamed:selectedImageName]];
 }
 
 #pragma mark -
--(void) viewDidUnload {
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
-}
 
--(void) didReceiveMemoryWarning {
+- (void)didReceiveMemoryWarning {
     MSG_MEMCLEAN();
     [super didReceiveMemoryWarning];
 }
 
--(void) dealloc {
-    [_simpleGameButton release];
-    [_missionsButton release];
-    [_campaignButton release];
-    [super dealloc];
-}
-
 @end
--- a/project_files/HedgewarsMobile/Classes/MapConfigViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/MapConfigViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -54,32 +54,32 @@
 @property (nonatomic,assign) NSInteger oldPage;
 @property (nonatomic,assign) BOOL busy;
 @property (nonatomic,assign) NSInteger maxHogs;
-@property (nonatomic,retain) NSString *seedCommand;
-@property (nonatomic,retain) NSString *templateFilterCommand;
-@property (nonatomic,retain) NSString *mapGenCommand;
-@property (nonatomic,retain) NSString *mazeSizeCommand;
-@property (nonatomic,retain) NSString *themeCommand;
-@property (nonatomic,retain) NSString *staticMapCommand;
-@property (nonatomic,retain) NSString *missionCommand;
+@property (nonatomic, strong) NSString *seedCommand;
+@property (nonatomic, strong) NSString *templateFilterCommand;
+@property (nonatomic, strong) NSString *mapGenCommand;
+@property (nonatomic, strong) NSString *mazeSizeCommand;
+@property (nonatomic, strong) NSString *themeCommand;
+@property (nonatomic, strong) NSString *staticMapCommand;
+@property (nonatomic, strong) NSString *missionCommand;
 
-@property (nonatomic,retain) IBOutlet MapPreviewButtonView *previewButton;
-@property (nonatomic,retain) IBOutlet UITableView *tableView;
-@property (nonatomic,retain) IBOutlet UILabel *maxLabel;
-@property (nonatomic,retain) IBOutlet UISegmentedControl *segmentedControl;
-@property (nonatomic,retain) IBOutlet MNEValueTrackingSlider *slider;
+@property (nonatomic, strong) IBOutlet MapPreviewButtonView *previewButton;
+@property (nonatomic, strong) IBOutlet UITableView *tableView;
+@property (nonatomic, strong) IBOutlet UILabel *maxLabel;
+@property (nonatomic, strong) IBOutlet UISegmentedControl *segmentedControl;
+@property (nonatomic, strong) IBOutlet MNEValueTrackingSlider *slider;
 
-@property (nonatomic,retain) NSIndexPath *lastIndexPath;
-@property (nonatomic,retain) NSArray *dataSourceArray;
+@property (nonatomic, strong) NSIndexPath *lastIndexPath;
+@property (nonatomic, strong) NSArray *dataSourceArray;
 
 
--(IBAction) mapButtonPressed:(id) sender;
--(IBAction) sliderChanged:(id) sender;
--(IBAction) sliderEndedChanging:(id) sender;
--(IBAction) segmentedControlChanged:(id) sender;
+- (IBAction)mapButtonPressed:(id)sender;
+- (IBAction)sliderChanged:(id)sender;
+- (IBAction)sliderEndedChanging:(id)sender;
+- (IBAction)segmentedControlChanged:(id)sender;
 
--(void) turnOnWidgets;
--(void) turnOffWidgets;
--(void) setMaxLabelText:(NSString *)str;
--(void) updatePreview;
+- (void)turnOnWidgets;
+- (void)turnOffWidgets;
+- (void)setMaxLabelText:(NSString *)str;
+- (void)updatePreview;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/MapConfigViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/MapConfigViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -30,16 +30,16 @@
             oldPage, oldValue;
 
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
--(IBAction) mapButtonPressed:(id) sender {
+- (IBAction)mapButtonPressed:(id)sender {
     [[AudioManagerController mainManager] playClickSound];
     [self updatePreview];
 }
 
--(void) updatePreview {
+- (void)updatePreview {
     // don't generate a new preview while it's already generating one
     if (self.busy)
         return;
@@ -48,7 +48,6 @@
     NSString *seed = [HWUtils seed];
     NSString *seedCmd = [[NSString alloc] initWithFormat:@"eseed {%@}", seed];
     self.seedCommand = seedCmd;
-    [seedCmd release];
 
     NSArray *source = [self.dataSourceArray objectAtIndex:scIndex];
     if (isRandomness()) {
@@ -57,7 +56,6 @@
         [self.previewButton updatePreviewWithSeed:seed];
         // the preview for static maps is loaded in didSelectRowAtIndexPath
     }
-    [seed release];
 
     // perform as if user clicked on an entry
     NSIndexPath *theIndex = [NSIndexPath indexPathForRow:arc4random_uniform((int)[source count]) inSection:0];
@@ -66,7 +64,7 @@
         [self.tableView scrollToRowAtIndexPath:theIndex atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
 }
 
--(void) turnOffWidgets {
+- (void)turnOffWidgets {
     busy = YES;
     self.previewButton.alpha = 0.5f;
     self.previewButton.enabled = NO;
@@ -77,7 +75,7 @@
 
 #pragma mark -
 #pragma mark MapPreviewButtonView delegate methods
--(void) turnOnWidgets {
+- (void)turnOnWidgets {
     self.previewButton.alpha = 1.0f;
     self.previewButton.enabled = YES;
     self.segmentedControl.enabled = YES;
@@ -85,12 +83,12 @@
     self.busy = NO;
 }
 
--(void) setMaxLabelText:(NSString *)str {
+- (void)setMaxLabelText:(NSString *)str {
     self.maxHogs = [str intValue];
     self.maxLabel.text = [NSString stringWithFormat:@"%@ %@",NSLocalizedString(@"Max Hogs:",@""),str];
 }
 
--(NSDictionary *)getDataForEngine {
+- (NSDictionary *)getDataForEngine {
     NSDictionary *dictForEngine = [NSDictionary dictionaryWithObjectsAndKeys:
                                    self.seedCommand,@"seedCommand",
                                    self.templateFilterCommand,@"templateFilterCommand",
@@ -102,11 +100,11 @@
 
 #pragma mark -
 #pragma mark Table view data source
--(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
     return 1;
 }
 
--(NSInteger) tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger) section {
+- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section {
     return [[self.dataSourceArray objectAtIndex:scIndex] count];
 }
 
@@ -116,7 +114,7 @@
 
     UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil)
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
+        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
 
     NSArray *source = [self.dataSourceArray objectAtIndex:scIndex];
 
@@ -130,14 +128,12 @@
     if (isRandomness()) {
         UIImage *image = [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/%@/icon.png",THEMES_DIRECTORY(),labelString]];
         cell.imageView.image = image;
-        [image release];
     } else
         cell.imageView.image = nil;
 
     if (row == [self.lastIndexPath row]) {
         UIImageView *checkbox = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:@"checkbox.png"]];
         cell.accessoryView = checkbox;
-        [checkbox release];
     } else
         cell.accessoryView = nil;
 
@@ -146,15 +142,13 @@
 }
 
 // this set details for a static map (called by didSelectRowAtIndexPath)
--(void) setDetailsForStaticMap:(NSInteger) index {
+- (void)setDetailsForStaticMap:(NSInteger)index {
     NSArray *source = [self.dataSourceArray objectAtIndex:scIndex];
 
     NSString *fileCfg = [[NSString alloc] initWithFormat:@"%@/%@/map.cfg",
                          (scIndex == 1) ? MAPS_DIRECTORY() : MISSIONS_DIRECTORY(),[source objectAtIndex:index]];
     NSString *contents = [[NSString alloc] initWithContentsOfFile:fileCfg encoding:NSUTF8StringEncoding error:NULL];
-    [fileCfg release];
     NSArray *split = [contents componentsSeparatedByString:@"\n"];
-    [contents release];
 
     // if the number is not set we keep 18 standard;
     // sometimes it's not set but there are trailing characters, we get around them with the second equation
@@ -176,7 +170,7 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     NSInteger newRow = [indexPath row];
     NSInteger oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
 
@@ -195,7 +189,6 @@
         UITableViewCell *newCell = [aTableView cellForRowAtIndexPath:indexPath];
         UIImageView *checkbox = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:@"checkbox.png"]];
         newCell.accessoryView = checkbox;
-        [checkbox release];
         UITableViewCell *oldCell = [aTableView cellForRowAtIndexPath:self.lastIndexPath];
         oldCell.accessoryView = nil;
 
@@ -209,7 +202,7 @@
 #pragma mark slider & segmentedControl & button
 // this updates the label and the command keys when the slider is moved, depending of the selection in segmentedControl
 // no methods are called by this routine and you can pass nil to it
--(IBAction) sliderChanged:(id) sender {
+- (IBAction)sliderChanged:(id)sender {
     NSString *labelText;
     NSString *templateCommand;
     NSString *mazeCommand;
@@ -282,7 +275,7 @@
 }
 
 // update preview (if not busy and if its value really changed) as soon as the user lifts its finger up
--(IBAction) sliderEndedChanging:(id) sender {
+- (IBAction)sliderEndedChanging:(id)sender {
     int num = (int) (self.slider.value * 100);
     if (oldValue != num) {
         [self updatePreview];
@@ -293,7 +286,7 @@
 
 // perform actions based on the activated section, then call updatePreview to visually update the selection
 // and if necessary update the table with a slide animation
--(IBAction) segmentedControlChanged:(id) sender {
+- (IBAction)segmentedControlChanged:(id)sender {
     NSString *mapgen, *staticmap, *mission;
     NSInteger newPage = self.segmentedControl.selectedSegmentIndex;
 
@@ -372,7 +365,6 @@
             NSString *checkPath = [[NSString alloc] initWithFormat:@"%@/%@/icon.png",THEMES_DIRECTORY(),themeName];
             if ([[NSFileManager defaultManager] fileExistsAtPath:checkPath])
                 [themeArray addObject:themeName];
-            [checkPath release];
         }
 
         // remove images that are too big for certain devices without loading the whole image
@@ -398,17 +390,13 @@
             [missionArray addObject:str];
         }
         NSArray *array = [[NSArray alloc] initWithObjects:themeArray,mapArray,themeArray,missionArray,nil];
-        [missionArray release];
-        [themeArray release];
-        [mapArray release];
 
         self.dataSourceArray = array;
-        [array release];
     }
     return dataSourceArray;
 }
 
--(void) viewDidLoad {
+- (void)viewDidLoad {
     [super viewDidLoad];
     
     [self localizeSegmentedControl];
@@ -436,44 +424,21 @@
         UILabel *backLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 14, 300, 190) andTitle:nil withBorderWidth:2.3f];
         backLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
         [self.view insertSubview:backLabel belowSubview:self.segmentedControl];
-        [backLabel release];
     }
     self.tableView.separatorColor = [UIColor whiteColor];
     self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
 }
 
--(void) viewWillAppear:(BOOL)animated {
+- (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
 }
 
--(void) viewDidAppear:(BOOL) animated {
+- (void)viewDidAppear:(BOOL) animated {
     [self updatePreview];
     [super viewDidAppear:animated];
 }
 
--(void) viewDidUnload {
-    self.previewButton = nil;
-    self.seedCommand = nil;
-    self.templateFilterCommand = nil;
-    self.mapGenCommand = nil;
-    self.mazeSizeCommand = nil;
-    self.themeCommand = nil;
-    self.staticMapCommand = nil;
-    self.missionCommand = nil;
-
-    self.tableView = nil;
-    self.maxLabel = nil;
-    self.segmentedControl = nil;
-    self.slider = nil;
-
-    self.lastIndexPath = nil;
-    self.dataSourceArray = nil;
-
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
-}
-
--(void) didReceiveMemoryWarning {
+- (void)didReceiveMemoryWarning {
     self.dataSourceArray = nil;
     [super didReceiveMemoryWarning];
 
@@ -487,25 +452,4 @@
     MSG_MEMCLEAN();
 }
 
--(void) dealloc {
-    releaseAndNil(seedCommand);
-    releaseAndNil(templateFilterCommand);
-    releaseAndNil(mapGenCommand);
-    releaseAndNil(mazeSizeCommand);
-    releaseAndNil(themeCommand);
-    releaseAndNil(staticMapCommand);
-    releaseAndNil(missionCommand);
-
-    releaseAndNil(previewButton);
-    releaseAndNil(tableView);
-    releaseAndNil(maxLabel);
-    releaseAndNil(segmentedControl);
-    releaseAndNil(slider);
-
-    releaseAndNil(lastIndexPath);
-    releaseAndNil(dataSourceArray);
-
-    [super dealloc];
-}
-
 @end
--- a/project_files/HedgewarsMobile/Classes/MapPreviewButtonView.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/MapPreviewButtonView.h	Sun Jun 10 19:01:50 2018 +0200
@@ -23,25 +23,25 @@
 
 @protocol MapPreviewViewDelegate <NSObject>
 
--(void) turnOnWidgets;
--(void) setMaxLabelText:(NSString *)string;
--(NSDictionary *)getDataForEngine;
+- (void)turnOnWidgets;
+- (void)setMaxLabelText:(NSString *)string;
+- (NSDictionary *)getDataForEngine;
 
 @end
 
 @interface MapPreviewButtonView : UIButton {
-    id<MapPreviewViewDelegate> delegate;
+    id<MapPreviewViewDelegate> __weak delegate;
     TCPsocket sd, csd;
     NSInteger maxHogs;
 }
 
-@property (nonatomic,assign) id<MapPreviewViewDelegate> delegate;
+@property (nonatomic,weak) id<MapPreviewViewDelegate> delegate;
 
--(void) setImageRounded:(UIImage *)image forState:(UIControlState) controlState;
--(void) setImageRounded:(UIImage *)image;
--(void) updatePreviewWithSeed:(NSString *)seed;
--(void) updatePreviewWithFile:(NSString *)filePath;
--(void) turnOnWidgets;
--(NSDictionary *)getDataForEngine;
+- (void)setImageRounded:(UIImage *)image forState:(UIControlState)controlState;
+- (void)setImageRounded:(UIImage *)image;
+- (void)updatePreviewWithSeed:(NSString *)seed;
+- (void)updatePreviewWithFile:(NSString *)filePath;
+- (void)turnOnWidgets;
+- (NSDictionary *)getDataForEngine;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/MapPreviewButtonView.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/MapPreviewButtonView.m	Sun Jun 10 19:01:50 2018 +0200
@@ -31,7 +31,7 @@
 @implementation MapPreviewButtonView
 @synthesize delegate;
 
--(id) initWithFrame:(CGRect)frame {
+- (id)initWithFrame:(CGRect)frame {
     if ((self = [super initWithFrame:frame])) {
         delegate = nil;
         self.backgroundColor = [UIColor whiteColor];
@@ -40,18 +40,13 @@
     return self;
 }
 
--(void) dealloc {
-    self.delegate = nil;
-    [super dealloc];
-}
-
 #pragma mark -
 #pragma mark image wrappers
--(void) setImageRounded:(UIImage *)image forState:(UIControlState)controlState {
+- (void)setImageRounded:(UIImage *)image forState:(UIControlState)controlState {
     [self setImage:[image makeRoundCornersOfSize:CGSizeMake(12, 12)] forState:controlState];
 }
 
--(void) setImageRounded:(UIImage *)image {
+- (void)setImageRounded:(UIImage *)image {
     [self setImageRounded:image forState:UIControlStateNormal];
 }
 
@@ -64,7 +59,7 @@
     return SDLNet_TCP_Send(csd, [string UTF8String], length);
 }
 
--(void) engineProtocol:(uint8_t *)unpackedMap {
+- (void)engineProtocol:(uint8_t *)unpackedMap {
     IPaddress ip;
     BOOL serverQuit = NO;
     uint8_t packedMap[128*32];
@@ -98,13 +93,11 @@
                                           @"--user-prefix", documentsDirectory,
                                           @"--landpreview",
                                           nil];
-        [ipcString release];
         
         int argc = [gameParameters count];
         const char **argv = (const char **)malloc(sizeof(const char*)*argc);
         for (int i = 0; i < argc; i++)
             argv[i] = strdup([[gameParameters objectAtIndex:i] UTF8String]);
-        [gameParameters release];
         
         RunEngine(argc, argv);
         
@@ -154,7 +147,7 @@
     return;
 }
 
--(void) drawingThread {
+- (void)drawingThread {
     @autoreleasepool {
     
     uint8_t unpackedMap[128*32*8];
@@ -174,7 +167,6 @@
     [self performSelectorOnMainThread:@selector(setImageRounded:)
                            withObject:previewImage
                         waitUntilDone:NO];
-    [previewImage release];
     [self performSelectorOnMainThread:@selector(setLabelText:)
                            withObject:[NSString stringWithFormat:@"%ld", (long)maxHogs]
                         waitUntilDone:NO];
@@ -188,7 +180,7 @@
     }
 }
 
--(void) updatePreviewWithSeed:(NSString *)seed {
+- (void)updatePreviewWithSeed:(NSString *)seed {
     // remove the current preview and title
     [self setImage:nil forState:UIControlStateNormal];
     [self setTitle:nil forState:UIControlStateNormal];
@@ -205,22 +197,20 @@
         indicator.tag = INDICATOR_TAG;
         [indicator startAnimating];
         [self addSubview:indicator];
-        [indicator release];
 
         // let's draw in a separate thread so the gui can work; at the end it restore other widgets
         [NSThread detachNewThreadSelector:@selector(drawingThread) toTarget:self withObject:nil];
     }
 }
 
--(void) updatePreviewWithFile:(NSString *)filePath {
+- (void)updatePreviewWithFile:(NSString *)filePath {
     UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath];
     [self setImageRounded:image forState:UIControlStateNormal];
     self.backgroundColor = [UIColor whiteColor];
     self.layer.cornerRadius = 12;
-    [image release];
 }
 
--(void) removeIndicator {
+- (void)removeIndicator {
     UIActivityIndicatorView *indicator = (UIActivityIndicatorView *)[self viewWithTag:INDICATOR_TAG];
     if (indicator) {
         [indicator stopAnimating];
@@ -230,17 +220,17 @@
 
 #pragma mark -
 #pragma mark delegate
--(void) turnOnWidgets {
+- (void)turnOnWidgets {
     if ([self.delegate respondsToSelector:@selector(turnOnWidgets)])
         [self.delegate turnOnWidgets];
 }
 
--(void) setLabelText:(NSString *)string {
+- (void)setLabelText:(NSString *)string {
     if ([self.delegate respondsToSelector:@selector(setMaxLabelText:)])
         [self.delegate setMaxLabelText:string];
 }
 
--(NSDictionary *)getDataForEngine {
+- (NSDictionary *)getDataForEngine {
     if ([self.delegate respondsToSelector:@selector(getDataForEngine)])
         return [self.delegate getDataForEngine];
     return nil;
--- a/project_files/HedgewarsMobile/Classes/MissionTrainingViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/MissionTrainingViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -22,14 +22,24 @@
 
 @interface MissionTrainingViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
 
-@property (nonatomic, retain) NSArray *listOfMissionIDs;
-@property (nonatomic, retain) NSDictionary *dictOfMissions;
-@property (nonatomic, retain) NSString *missionName;
+@property (nonatomic, strong) NSArray *missionsTypes;
+@property (nonatomic, strong) NSDictionary *dictOfAllMissions;
+
+@property (nonatomic, strong) NSString *missionSubPath;
+
+@property (nonatomic, strong) NSArray *listOfTrainingIDs;
+@property (nonatomic, strong) NSDictionary *dictOfTraining;
 
-@property (nonatomic, retain) IBOutlet UIImageView *previewImage;
-@property (nonatomic, retain) IBOutlet UITableView *tableView;
-@property (nonatomic, retain) IBOutlet UILabel *descriptionLabel;
+@property (nonatomic, strong) NSArray *listOfChallengeIDs;
+@property (nonatomic, strong) NSDictionary *dictOfChallenge;
+
+@property (nonatomic, strong) NSArray *listOfScenarioIDs;
+@property (nonatomic, strong) NSDictionary *dictOfScenario;
 
--(IBAction) buttonPressed:(id) sender;
+@property (nonatomic, strong) IBOutlet UIImageView *previewImage;
+@property (nonatomic, strong) IBOutlet UITableView *tableView;
+@property (nonatomic, strong) IBOutlet UILabel *descriptionLabel;
+
+- (IBAction)buttonPressed:(id)sender;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/MissionTrainingViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/MissionTrainingViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -21,16 +21,19 @@
 #import <QuartzCore/QuartzCore.h>
 #import "GameInterfaceBridge.h"
 
+#define TRAINING_MISSION_TYPE @"Training"
+#define CHALLENGE_MISSION_TYPE @"Challenge"
+#define SCENARIO_MISSION_TYPE @"Scenario"
 
 @implementation MissionTrainingViewController
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 #pragma mark -
 #pragma mark View management
--(void) viewDidLoad
+- (void)viewDidLoad
 {
     [super viewDidLoad];
     
@@ -54,14 +57,19 @@
     self.descriptionLabel.textColor = [UIColor lightYellowColor];
 }
 
--(void) viewWillAppear:(BOOL)animated {
-    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:arc4random_uniform((int)[self.listOfMissionIDs count]) inSection:0];
+- (void)viewWillAppear:(BOOL)animated {
+    NSInteger randomSection = arc4random_uniform((int)[self.missionsTypes count]);
+    NSString *type = self.missionsTypes[randomSection];
+    NSArray *listOfIDs = [self listOfMissionsIDsForType:type];
+    NSInteger randomRow = arc4random_uniform((int)[listOfIDs count]);
+    
+    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:randomRow inSection:randomSection];
     [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionMiddle];
     [self tableView:self.tableView didSelectRowAtIndexPath:indexPath];
     [super viewWillAppear:animated];
 }
 
--(IBAction) buttonPressed:(id) sender {
+- (IBAction)buttonPressed:(id)sender {
     UIButton *button = (UIButton *)sender;
 
     if (button.tag == 0) {
@@ -69,26 +77,24 @@
         [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
     } else {
         [GameInterfaceBridge registerCallingController:self];
-        [GameInterfaceBridge startMissionGame:self.missionName];
+        [GameInterfaceBridge startMissionGame:self.missionSubPath];
     }
 }
 
 #pragma mark - Missions dictionaries methods
 
-- (NSDictionary *)newLocalizedMissionsDictionary
+- (NSDictionary *)newLocalizedMissionsDictionaryForType: (NSString *)type
 {
     NSString *languageID = [HWUtils languageID];
     
-    NSString *missionsDescLocation = [[NSString alloc] initWithFormat:@"%@/missions_en.txt",LOCALE_DIRECTORY()];
+    NSString *missionsDescLocation = [[NSString alloc] initWithFormat:@"%@/missions_en.txt", LOCALE_DIRECTORY()];
     NSString *localizedMissionsDescLocation = [[NSString alloc] initWithFormat:@"%@/missions_%@.txt", LOCALE_DIRECTORY(), languageID];
     
     if (![languageID isEqualToString:@"en"] && [[NSFileManager defaultManager] fileExistsAtPath:localizedMissionsDescLocation])
     {
-        NSDictionary *missionsDict = [self newMissionsDictionaryFromMissionsFile:missionsDescLocation];
-        NSDictionary *localizedMissionsDict = [self newMissionsDictionaryFromMissionsFile:localizedMissionsDescLocation];
+        NSDictionary *missionsDict = [self newMissionsDictionaryForType:type fromMissionsFile:missionsDescLocation];
+        NSDictionary *localizedMissionsDict = [self newMissionsDictionaryForType:type fromMissionsFile:localizedMissionsDescLocation];
         
-        [missionsDescLocation release];
-        [localizedMissionsDescLocation release];
         
         NSMutableDictionary *tempMissionsDict = [[NSMutableDictionary alloc] init];
         
@@ -104,30 +110,26 @@
             }
         }
         
-        [missionsDict release];
-        [localizedMissionsDict release];
         
         return tempMissionsDict;
     }
     else
     {
-        NSDictionary *missionsDict = [self newMissionsDictionaryFromMissionsFile:missionsDescLocation];
+        NSDictionary *missionsDict = [self newMissionsDictionaryForType:type fromMissionsFile:missionsDescLocation];
         
-        [missionsDescLocation release];
-        [localizedMissionsDescLocation release];
         
         return missionsDict;
     }
 }
 
-- (NSDictionary *)newMissionsDictionaryFromMissionsFile:(NSString *)filePath
+- (NSDictionary *)newMissionsDictionaryForType:(NSString *)type fromMissionsFile:(NSString *)filePath
 {
     NSMutableDictionary *missionsDict = [[NSMutableDictionary alloc] init];
     
     NSString *missionsFileContents = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL];
     NSArray *missionsLines = [missionsFileContents componentsSeparatedByString:@"\n"];
-    [missionsFileContents release];
     
+    NSString *directory = [self missionsDirectoryForType:type];
     for (NSString *line in missionsLines)
     {
         if ([line length] > 0)
@@ -136,7 +138,7 @@
             
             NSString *missionID = [line substringToIndex:firstDotLocation];
             
-            NSString *missionFullPath = [NSString stringWithFormat:@"%@%@.lua", TRAININGS_DIRECTORY(), missionID];
+            NSString *missionFullPath = [NSString stringWithFormat:@"%@%@.lua", directory, missionID];
             if (![[NSFileManager defaultManager] fileExistsAtPath:missionFullPath])
             {
                 continue;
@@ -151,7 +153,6 @@
             {
                 NSMutableDictionary *missionDict = [[NSMutableDictionary alloc] init];
                 [missionsDict setObject:missionDict forKey:missionID];
-                [missionDict release];
             }
             
             NSMutableDictionary *missionDict = [missionsDict objectForKey:missionID];
@@ -177,38 +178,141 @@
 #pragma mark -
 #pragma mark override setters/getters for better memory handling
 
--(NSArray *)listOfMissionIDs
+- (NSArray *)missionsTypes
+{
+    if (!_missionsTypes)
+    {
+        _missionsTypes = @[ TRAINING_MISSION_TYPE, CHALLENGE_MISSION_TYPE, SCENARIO_MISSION_TYPE ];
+    }
+    
+    return _missionsTypes;
+}
+
+- (NSDictionary *)dictOfAllMissions
+{
+    if (!_dictOfAllMissions)
+    {
+        NSArray *types = [self missionsTypes];
+        _dictOfAllMissions = @{ types[0] : self.dictOfTraining,
+                                types[1] : self.dictOfChallenge,
+                                types[2] : self.dictOfScenario };
+    }
+    
+    return _dictOfAllMissions;
+}
+
+- (NSArray *)listOfTrainingIDs
 {
-    if (!_listOfMissionIDs)
+    if (!_listOfTrainingIDs)
+    {
+        _listOfTrainingIDs = [[self.dictOfTraining allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
+    }
+    
+    return _listOfTrainingIDs;
+}
+
+- (NSDictionary *)dictOfTraining
+{
+    if (!_dictOfTraining)
     {
-        NSArray *sortedKeys = [[self.dictOfMissions allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
-        _listOfMissionIDs = [[NSArray alloc] initWithArray:sortedKeys];
+        _dictOfTraining = [self newLocalizedMissionsDictionaryForType:TRAINING_MISSION_TYPE];
+    }
+    
+    return _dictOfTraining;
+}
+
+- (NSArray *)listOfChallengeIDs
+{
+    if (!_listOfChallengeIDs)
+    {
+        _listOfChallengeIDs = [[self.dictOfChallenge allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
+    }
+    
+    return _listOfChallengeIDs;
+}
+
+- (NSDictionary *)dictOfChallenge
+{
+    if (!_dictOfChallenge)
+    {
+        _dictOfChallenge = [self newLocalizedMissionsDictionaryForType:CHALLENGE_MISSION_TYPE];
     }
     
-    return _listOfMissionIDs;
+    return _dictOfChallenge;
+}
+
+- (NSArray *)listOfScenarioIDs
+{
+    if (!_listOfScenarioIDs)
+    {
+        _listOfScenarioIDs = [[self.dictOfScenario allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
+    }
+
+    return _listOfScenarioIDs;
+}
+
+- (NSDictionary *)dictOfScenario
+{
+    if (!_dictOfScenario)
+    {
+        _dictOfScenario = [self newLocalizedMissionsDictionaryForType:SCENARIO_MISSION_TYPE];
+    }
+
+    return _dictOfScenario;
 }
 
-- (NSDictionary *)dictOfMissions
+#pragma mark -
+#pragma mark Missions types
+
+- (NSString *)missionsDirectoryForType:(NSString *)type
+{
+    if ([type isEqualToString:TRAINING_MISSION_TYPE]) {
+        return TRAININGS_DIRECTORY();
+    } else if ([type isEqualToString:CHALLENGE_MISSION_TYPE]) {
+        return CHALLENGE_DIRECTORY();
+    } else if ([type isEqualToString:SCENARIO_MISSION_TYPE]) {
+        return SCENARIO_DIRECTORY();
+    }
+    return nil;
+}
+
+- (NSArray *)listOfMissionsIDsForType:(NSString *)type
 {
-    if (!_dictOfMissions)
-    {
-        _dictOfMissions = [self newLocalizedMissionsDictionary];
+    if ([type isEqualToString:TRAINING_MISSION_TYPE]) {
+        return self.listOfTrainingIDs;
+    } else if ([type isEqualToString:CHALLENGE_MISSION_TYPE]) {
+        return self.listOfChallengeIDs;
+    } else if ([type isEqualToString:SCENARIO_MISSION_TYPE]) {
+        return self.listOfScenarioIDs;
     }
-    
-    return _dictOfMissions;
+    return nil;
+}
+
+- (NSDictionary *)dictOfMissionsForType:(NSString *)type
+{
+    if ([type isEqualToString:TRAINING_MISSION_TYPE]) {
+        return self.dictOfTraining;
+    } else if ([type isEqualToString:CHALLENGE_MISSION_TYPE]) {
+        return self.dictOfChallenge;
+    } else if ([type isEqualToString:SCENARIO_MISSION_TYPE]) {
+        return self.dictOfScenario;
+    }
+    return nil;
 }
 
 #pragma mark -
 #pragma mark Table view data source
--(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
-    return 1;
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+    return [self.missionsTypes count];
 }
 
--(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
-    return [self.listOfMissionIDs count];
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    NSString *type = self.missionsTypes[section];
+    NSArray *listOfIDs = [self listOfMissionsIDsForType:type];
+    return [listOfIDs count];
 }
 
--(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
     return (IS_IPAD()) ? self.tableView.rowHeight : 80;
 }
 
@@ -218,18 +322,23 @@
 
     UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil)
-        cell = [[[UITableViewCell alloc] initWithStyle:(IS_IPAD()) ? UITableViewCellStyleDefault : UITableViewCellStyleSubtitle
-                                       reuseIdentifier:CellIdentifier] autorelease];
+        cell = [[UITableViewCell alloc] initWithStyle:(IS_IPAD()) ? UITableViewCellStyleDefault : UITableViewCellStyleSubtitle
+                                       reuseIdentifier:CellIdentifier];
     
-    NSString *missionID = [self.listOfMissionIDs objectAtIndex:row];
-    cell.textLabel.text = self.dictOfMissions[missionID][@"name"];
+    NSInteger section = [indexPath section];
+    NSString *type = self.missionsTypes[section];
+    NSArray *listOfIDs = [self listOfMissionsIDsForType:type];
+    NSDictionary *dict = [self dictOfMissionsForType:type];
+    
+    NSString *missionID = [listOfIDs objectAtIndex:row];
+    cell.textLabel.text = dict[missionID][@"name"];
     
     cell.textLabel.textColor = [UIColor lightYellowColor];
     //cell.textLabel.font = [UIFont fontWithName:@"Bradley Hand Bold" size:[UIFont labelFontSize]];
     cell.textLabel.textAlignment = (IS_IPAD()) ? NSTextAlignmentCenter : NSTextAlignmentLeft;
     cell.textLabel.backgroundColor = [UIColor clearColor];
     cell.textLabel.adjustsFontSizeToFitWidth = YES;
-    cell.detailTextLabel.text = (IS_IPAD()) ? nil : self.dictOfMissions[missionID][@"desc"];
+    cell.detailTextLabel.text = (IS_IPAD()) ? nil : dict[missionID][@"desc"];
     cell.detailTextLabel.textColor = [UIColor whiteColor];
     cell.detailTextLabel.backgroundColor = [UIColor clearColor];
     cell.detailTextLabel.adjustsFontSizeToFitWidth = YES;
@@ -240,7 +349,6 @@
     bgColorView.backgroundColor = [UIColor colorWithRed:(85.0/255.0) green:(15.0/255.0) blue:(106.0/255.0) alpha:1.0];
     bgColorView.layer.masksToBounds = YES;
     cell.selectedBackgroundView = bgColorView;
-    [bgColorView release];
     
     cell.backgroundColor = [UIColor blackColorTransparent];
     return cell;
@@ -248,56 +356,35 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    NSInteger section = [indexPath section];
+    NSString *type = self.missionsTypes[section];
+    NSArray *listOfIDs = [self listOfMissionsIDsForType:type];
+    
     NSInteger row = [indexPath row];
-
-    self.missionName = [self.listOfMissionIDs objectAtIndex:row];
+    NSString *missionID = [listOfIDs objectAtIndex:row];
+    self.missionSubPath = [NSString stringWithFormat:@"%@/%@", type, missionID];
     NSString *size = IS_IPAD() ? @"@2x" : @"";
-    NSString *filePath = [[NSString alloc] initWithFormat:@"%@/Missions/Training/%@%@.png",GRAPHICS_DIRECTORY(),self.missionName,size];
+    NSString *filePath = [NSString stringWithFormat:@"%@/Missions/%@%@.png",GRAPHICS_DIRECTORY(), self.missionSubPath, size];
     UIImage *img = [[UIImage alloc] initWithContentsOfFile:filePath];
-    [filePath release];
     [self.previewImage setImage:img];
-    [img release];
 
-    self.descriptionLabel.text = self.dictOfMissions[self.missionName][@"desc"];
+    NSDictionary *dict = [self dictOfMissionsForType:type];
+    self.descriptionLabel.text = dict[missionID][@"desc"];
 }
 
 #pragma mark -
 #pragma mark Memory management
 
--(void) didReceiveMemoryWarning
+- (void)didReceiveMemoryWarning
 {
-    self.missionName = nil;
-    self.listOfMissionIDs = nil;
-    self.dictOfMissions = nil;
+    self.listOfTrainingIDs = nil;
+    self.dictOfTraining = nil;
+    self.dictOfAllMissions = nil;
+    self.missionsTypes = nil;
     // if you nil this one it won't get updated anymore
     //self.previewImage = nil;
     [super didReceiveMemoryWarning];
 }
 
--(void) viewDidUnload
-{
-    self.listOfMissionIDs = nil;
-    self.dictOfMissions = nil;
-    self.previewImage = nil;
-    self.tableView = nil;
-    self.descriptionLabel = nil;
-    self.missionName = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
-}
-
-
--(void) dealloc
-{
-    releaseAndNil(_listOfMissionIDs);
-    releaseAndNil(_dictOfMissions);
-    releaseAndNil(_previewImage);
-    releaseAndNil(_tableView);
-    releaseAndNil(_descriptionLabel);
-    releaseAndNil(_missionName);
-    [super dealloc];
-}
-
-
 @end
--- a/project_files/HedgewarsMobile/Classes/ObjcExports.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/ObjcExports.m	Sun Jun 10 19:01:50 2018 +0200
@@ -50,7 +50,6 @@
                                                          UIViewAutoresizingFlexibleBottomMargin;
     [overlay_instance.loadingIndicator startAnimating];
     [overlay_instance.view addSubview:overlay_instance.loadingIndicator];
-    [overlay_instance.loadingIndicator release];
     */
 }
 
--- a/project_files/HedgewarsMobile/Classes/RestoreViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/RestoreViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -24,6 +24,6 @@
 
 }
 
--(IBAction) buttonReleased:(id) sender;
+- (IBAction)buttonReleased:(id)sender;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/RestoreViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/RestoreViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -21,17 +21,17 @@
 #import "GameInterfaceBridge.h"
 
 @interface RestoreViewController ()
-@property (retain, nonatomic) IBOutlet UIButton *restoreButton;
-@property (retain, nonatomic) IBOutlet UIButton *dismissButton;
+@property (strong, nonatomic) IBOutlet UIButton *restoreButton;
+@property (strong, nonatomic) IBOutlet UIButton *dismissButton;
 @end
 
 @implementation RestoreViewController
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
--(IBAction) buttonReleased:(id) sender {
+- (IBAction)buttonReleased:(id)sender {
     UIButton *theButton = (UIButton *)sender;
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
 
@@ -54,7 +54,7 @@
     [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
 }
 
--(void) viewDidLoad {
+- (void)viewDidLoad {
     [super viewDidLoad];
     
     [self.restoreButton setTitle:NSLocalizedString(@"Restore", nil) forState:UIControlStateNormal];
@@ -64,19 +64,12 @@
     [self.dismissButton applyDarkBlueQuickStyle];
 }
 
--(void) didReceiveMemoryWarning {
+#pragma mark -
+#pragma mark Memory Management
+
+- (void)didReceiveMemoryWarning {
+    MSG_MEMCLEAN();
     [super didReceiveMemoryWarning];
 }
 
--(void) viewDidUnload {
-    [super viewDidUnload];
-}
-
--(void) dealloc {
-    [_restoreButton release];
-    [_dismissButton release];
-    [super dealloc];
-}
-
-
 @end
--- a/project_files/HedgewarsMobile/Classes/SavedGamesViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/SavedGamesViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -26,9 +26,9 @@
     NSMutableArray *listOfSavegames;
 }
 
-@property (nonatomic,retain) IBOutlet UITableView *tableView;
-@property (nonatomic,retain) NSMutableArray *listOfSavegames;
+@property (nonatomic, strong) IBOutlet UITableView *tableView;
+@property (nonatomic, strong) NSMutableArray *listOfSavegames;
 
--(IBAction) buttonPressed:(id) sender;
+- (IBAction)buttonPressed:(id)sender;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/SavedGamesViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/SavedGamesViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -21,26 +21,25 @@
 #import "GameInterfaceBridge.h"
 
 @interface SavedGamesViewController ()
-@property (retain, nonatomic) IBOutlet UIBarButtonItem *clearAllButton;
+@property (strong, nonatomic) IBOutlet UIBarButtonItem *clearAllButton;
 @end
 
 @implementation SavedGamesViewController
 @synthesize tableView, listOfSavegames;
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
--(void) updateTable {
+- (void)updateTable {
     NSArray *contentsOfDir = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:SAVES_DIRECTORY() error:NULL];
     NSMutableArray *array = [[NSMutableArray alloc] initWithArray:contentsOfDir copyItems:YES];
     self.listOfSavegames = array;
-    [array release];
 
     [self.tableView reloadData];
 }
 
--(void) viewDidLoad
+- (void)viewDidLoad
 {
     [super viewDidLoad];
     
@@ -49,11 +48,9 @@
     NSString *imgName = (IS_IPAD()) ? @"mediumBackground~ipad.png" : @"smallerBackground~iphone.png";
     UIImage *img = [[UIImage alloc] initWithContentsOfFile:imgName];
     UIImageView *background = [[UIImageView alloc] initWithImage:img];
-    [img release];
     background.frame = self.view.frame;
     background.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
     [self.view insertSubview:background atIndex:0];
-    [background release];
     
     [self.clearAllButton setTitle:NSLocalizedString(@"Clear All", nil)];
     
@@ -61,14 +58,14 @@
         [self updateTable];
 }
 
--(void) viewWillAppear:(BOOL)animated {
+- (void)viewWillAppear:(BOOL)animated {
     [self updateTable];
     [super viewWillAppear:animated];
 }
 
 #pragma mark -
 #pragma mark button functions
--(IBAction) buttonPressed:(id) sender {
+- (IBAction)buttonPressed:(id)sender {
     UIButton *button = (UIButton *)sender;
 
     if (button.tag == 0) {
@@ -91,11 +88,10 @@
             [actionSheet showFromBarButtonItem:(UIBarButtonItem *)sender animated:YES];
         else
             [actionSheet showInView:self.view];
-        [actionSheet release];
     }
 }
 
--(void) actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger) buttonIndex {
+- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
     if ([actionSheet cancelButtonIndex] != buttonIndex) {
         // remove all files and recreate the directory
         [[NSFileManager defaultManager] removeItemAtPath:SAVES_DIRECTORY() error:NULL];
@@ -108,17 +104,16 @@
         [self.listOfSavegames removeAllObjects];
         
         [self.tableView deleteRowsAtIndexPaths:array withRowAnimation:UITableViewRowAnimationTop];
-        [array release];
     }
 }
 
 #pragma mark -
 #pragma mark Table view data source
--(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
     return 1;
 }
 
--(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
     return [self.listOfSavegames count];
 }
 
@@ -127,7 +122,7 @@
 
     EditableCellView *editableCell = (EditableCellView *)[aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (editableCell == nil) {
-        editableCell = [[[EditableCellView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
+        editableCell = [[EditableCellView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
         editableCell.delegate = nil;
         editableCell.textField.userInteractionEnabled = NO;
     }
@@ -138,7 +133,7 @@
     return (UITableViewCell *)editableCell;
 }
 
--(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger) section {
+-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
     UIView *footer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 60)];
     footer.backgroundColor = [UIColor clearColor];
 
@@ -152,15 +147,14 @@
 
     label.backgroundColor = [UIColor clearColor];
     [footer addSubview:label];
-    [label release];
-    return [footer autorelease];
+    return footer;
 }
 
--(CGFloat) tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
+- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
     return 60;
 }
 
--(void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
     [(EditableCellView *)[self.tableView cellForRowAtIndexPath:indexPath] save:nil];
     [self fixTagsForStartTag:[indexPath row]];
 
@@ -189,7 +183,7 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
     if (self.listOfSavegames == nil)
         [self updateTable];
@@ -203,21 +197,18 @@
     NSString *newFilePath = [[NSString alloc] initWithFormat:@"%@/%@",SAVES_DIRECTORY(),newSaveName];
 
     [self.listOfSavegames addObject:newSaveName];
-    [newSaveName release];
     [[NSFileManager defaultManager] copyItemAtPath:currentFilePath toPath:newFilePath error:nil];
-    [newFilePath release];
 
     [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
 
     [GameInterfaceBridge registerCallingController:self];
     [GameInterfaceBridge startSaveGame:currentFilePath];
-    [currentFilePath release];
 }
 
 #pragma mark -
 #pragma mark editableCellView delegate
 // rename old file if names differ
--(void) saveTextFieldValue:(NSString *)textString withTag:(NSInteger) tagValue {
+- (void)saveTextFieldValue:(NSString *)textString withTag:(NSInteger)tagValue {
     if (self.listOfSavegames == nil)
         [self updateTable];
     NSString *oldFilePath = [NSString stringWithFormat:@"%@/%@",SAVES_DIRECTORY(),[self.listOfSavegames objectAtIndex:tagValue]];
@@ -232,24 +223,11 @@
 
 #pragma mark -
 #pragma mark Memory Management
--(void) didReceiveMemoryWarning {
+
+- (void)didReceiveMemoryWarning {
     self.listOfSavegames = nil;
     MSG_MEMCLEAN();
     [super didReceiveMemoryWarning];
 }
 
--(void) viewDidUnload {
-    self.tableView = nil;
-    self.listOfSavegames = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
-}
-
--(void) dealloc {
-    releaseAndNil(tableView);
-    releaseAndNil(listOfSavegames);
-    releaseAndNil(_clearAllButton);
-    [super dealloc];
-}
-
 @end
--- a/project_files/HedgewarsMobile/Classes/SchemeSettingsViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/SchemeSettingsViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -24,6 +24,6 @@
     NSMutableArray *listOfSchemes;
 }
 
-@property (nonatomic, retain) NSMutableArray *listOfSchemes;
+@property (nonatomic, strong) NSMutableArray *listOfSchemes;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/SchemeSettingsViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/SchemeSettingsViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -24,13 +24,13 @@
 @implementation SchemeSettingsViewController
 @synthesize listOfSchemes;
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 #pragma mark -
 #pragma mark View lifecycle
--(void) viewDidLoad {
+- (void)viewDidLoad {
     [super viewDidLoad];
 
     UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Edit",@"")
@@ -38,24 +38,22 @@
                                                                   target:self
                                                                   action:@selector(toggleEdit:)];
     self.navigationItem.rightBarButtonItem = editButton;
-    [editButton release];
 
     self.navigationItem.title = NSLocalizedString(@"List of schemes", nil);
 }
 
--(void) viewWillAppear:(BOOL) animated {
+- (void)viewWillAppear:(BOOL) animated {
     [super viewWillAppear:animated];
 
     NSArray *contentsOfDir = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:SCHEMES_DIRECTORY() error:NULL];
     NSMutableArray *array = [[NSMutableArray alloc] initWithArray:contentsOfDir copyItems:YES];
     self.listOfSchemes = array;
-    [array release];
 
     [self.tableView reloadData];
 }
 
 // modifies the navigation bar to add the "Add" and "Done" buttons
--(void) toggleEdit:(id) sender {
+- (void)toggleEdit:(id)sender {
     BOOL isEditing = self.tableView.editing;
     [self.tableView setEditing:!isEditing animated:YES];
 
@@ -71,11 +69,10 @@
                                                                      target:self
                                                                      action:@selector(addScheme:)];
         self.navigationItem.leftBarButtonItem = addButton;
-        [addButton release];
     }
 }
 
--(void) addScheme:(id) sender {
+- (void)addScheme:(id)sender {
     NSString *fileName = [[NSString alloc] initWithFormat:@"Scheme %u.plist", [self.listOfSchemes count]];
 
     [CreationChamber createSchemeNamed:[fileName stringByDeletingPathExtension]];
@@ -88,7 +85,6 @@
 
     NSInteger index = [self.listOfSchemes indexOfObject:fileName];
     [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
-    [fileName release];
 }
 
 #pragma mark -
@@ -106,7 +102,7 @@
 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil) {
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
+        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
     }
 
     NSUInteger row = [indexPath row];
@@ -118,12 +114,11 @@
 }
 
 // delete the row and the file
--(void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
     NSUInteger row = [indexPath row];
 
     NSString *schemeFile = [[NSString alloc] initWithFormat:@"%@/%@",SCHEMES_DIRECTORY(),[self.listOfSchemes objectAtIndex:row]];
     [[NSFileManager defaultManager] removeItemAtPath:schemeFile error:NULL];
-    [schemeFile release];
 
     [self.listOfSchemes removeObjectAtIndex:row];
     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
@@ -131,7 +126,7 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {
     SingleSchemeViewController *singleSchemeViewController = [[SingleSchemeViewController alloc] initWithStyle:UITableViewStyleGrouped];
     
@@ -143,7 +138,6 @@
     [singleSchemeViewController.tableView setContentOffset:CGPointMake(0,0) animated:NO];
 
     [self.navigationController pushViewController:singleSchemeViewController animated:YES];
-    [singleSchemeViewController release];
     
     [tableView deselectRowAtIndexPath:indexPath animated:YES];
 }
@@ -151,26 +145,12 @@
 
 #pragma mark -
 #pragma mark Memory management
+
 -(void)didReceiveMemoryWarning
 {
     [super didReceiveMemoryWarning];
     MSG_MEMCLEAN();
 }
 
--(void) viewDidUnload
-{
-    self.listOfSchemes = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
-}
-
-
--(void) dealloc
-{
-    releaseAndNil(listOfSchemes);
-    [super dealloc];
-}
-
-
 @end
 
--- a/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -38,20 +38,20 @@
     BOOL sectionsHidden;
 }
 
-@property (nonatomic,retain) NSArray *listOfSchemes;
-@property (nonatomic,retain) NSArray *listOfWeapons;
-@property (nonatomic,retain) NSArray *listOfScripts;
-@property (nonatomic,retain) NSIndexPath *lastIndexPath_sc;
-@property (nonatomic,retain) NSIndexPath *lastIndexPath_we;
-@property (nonatomic,retain) NSIndexPath *lastIndexPath_lu;
-@property (nonatomic,retain) NSString *selectedScheme;
-@property (nonatomic,retain) NSString *selectedWeapon;
-@property (nonatomic,retain) NSString *selectedScript;
-@property (nonatomic,retain) NSString *scriptCommand;
-@property (nonatomic,retain) UISegmentedControl *topControl;
-@property (nonatomic,assign) BOOL sectionsHidden;
+@property (nonatomic, strong) NSArray *listOfSchemes;
+@property (nonatomic, strong) NSArray *listOfWeapons;
+@property (nonatomic, strong) NSArray *listOfScripts;
+@property (nonatomic, strong) NSIndexPath *lastIndexPath_sc;
+@property (nonatomic, strong) NSIndexPath *lastIndexPath_we;
+@property (nonatomic, strong) NSIndexPath *lastIndexPath_lu;
+@property (nonatomic, strong) NSString *selectedScheme;
+@property (nonatomic, strong) NSString *selectedWeapon;
+@property (nonatomic, strong) NSString *selectedScript;
+@property (nonatomic, strong) NSString *scriptCommand;
+@property (nonatomic, strong) UISegmentedControl *topControl;
+@property (assign) BOOL sectionsHidden;
 
--(void) fillSections;
--(void) emptySections;
+- (void)fillSections;
+- (void)emptySections;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -29,31 +29,31 @@
 @synthesize listOfSchemes, listOfWeapons, listOfScripts, lastIndexPath_sc, lastIndexPath_we, lastIndexPath_lu,
             selectedScheme, selectedWeapon, selectedScript, scriptCommand, topControl, sectionsHidden;
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 #pragma mark -
 #pragma mark custom setters/getters
--(NSString *)selectedScheme {
+- (NSString *)selectedScheme {
     if (selectedScheme == nil)
         self.selectedScheme = @"Default.plist";
     return selectedScheme;
 }
 
--(NSString *)selectedWeapon {
+- (NSString *)selectedWeapon {
     if (selectedWeapon == nil)
         self.selectedWeapon = @"Default.plist";
     return selectedWeapon;
 }
 
--(NSString *)selectedScript {
+- (NSString *)selectedScript {
     if (selectedScript == nil)
         self.selectedScript = @"";
     return selectedScript;
 }
 
--(NSString *)scriptCommand {
+- (NSString *)scriptCommand {
     if (scriptCommand == nil)
         self.scriptCommand = @"";
     return scriptCommand;
@@ -85,19 +85,17 @@
                           NSLocalizedString(@"Weapon",@""),
                           NSLocalizedString(@"Style",@""),nil];
         UISegmentedControl *controller = [[UISegmentedControl alloc] initWithItems:array];
-        [array release];
         controller.segmentedControlStyle = UISegmentedControlStyleBar;
         controller.tintColor = [UIColor lightGrayColor];
         controller.selectedSegmentIndex = 0;
         self.topControl = controller;
-        [controller release];
     }
     return topControl;
 }
 
 #pragma mark -
 #pragma mark View lifecycle
--(void) viewDidLoad {
+- (void)viewDidLoad {
     self.sectionsHidden = NO;
 
     NSInteger topOffset = IS_IPAD() ? 45 : 0;
@@ -116,7 +114,6 @@
                                              withBorderWidth:2.7f];
         background.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
         [self.view insertSubview:background atIndex:0];
-        [background release];
 
         self.topControl.frame = CGRectMake(0, 4, self.view.frame.size.width * 80/100, 30);
         self.topControl.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
@@ -128,9 +125,7 @@
         UIImageView *background = [[UIImageView alloc] initWithImage:backgroundImage];
         background.contentMode = UIViewContentModeScaleAspectFill;
         background.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
-        [backgroundImage release];
         [self.view addSubview:background];
-        [background release];
         [aTableView setBackgroundColorForAnyTable:[UIColor clearColor]];
     }
 
@@ -140,7 +135,6 @@
     aTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
     aTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
     [self.view addSubview:aTableView];
-    [aTableView release];
 
     [super viewDidLoad];
 
@@ -157,11 +151,11 @@
 
 #pragma mark -
 #pragma mark Table view data source
--(NSInteger) numberOfSectionsInTableView:(UITableView *)aTableView {
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)aTableView {
     return (self.sectionsHidden ? 0 : 1);
 }
 
--(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
     if (self.topControl.selectedSegmentIndex == 0)
         return [self.listOfSchemes count];
     else if (self.topControl.selectedSegmentIndex == 1)
@@ -178,7 +172,7 @@
 
     UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil)
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
+        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
 
     cell.accessoryView = nil;
     if (0 == index) {
@@ -186,11 +180,9 @@
         NSString *str = [NSString stringWithFormat:@"%@/%@",SCHEMES_DIRECTORY(),[self.listOfSchemes objectAtIndex:row]];
         NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:str];
         cell.detailTextLabel.text = [dict objectForKey:@"description"];
-        [dict release];
         if ([[self.listOfSchemes objectAtIndex:row] isEqualToString:self.selectedScheme]) {
             UIImageView *checkbox = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:@"checkbox.png"]];
             cell.accessoryView = checkbox;
-            [checkbox release];
             self.lastIndexPath_sc = indexPath;
         }
     } else if (1 == index) {
@@ -198,11 +190,9 @@
         NSString *str = [NSString stringWithFormat:@"%@/%@",WEAPONS_DIRECTORY(),[self.listOfWeapons objectAtIndex:row]];
         NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:str];
         cell.detailTextLabel.text = [dict objectForKey:@"description"];
-        [dict release];
         if ([[self.listOfWeapons objectAtIndex:row] isEqualToString:self.selectedWeapon]) {
             UIImageView *checkbox = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:@"checkbox.png"]];
             cell.accessoryView = checkbox;
-            [checkbox release];
             self.lastIndexPath_we = indexPath;
         }
     } else {
@@ -214,7 +204,6 @@
             {
                 UIImageView *checkbox = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:@"checkbox.png"]];
                 cell.accessoryView = checkbox;
-                [checkbox release];
                 self.lastIndexPath_lu = indexPath;
             }
         }
@@ -228,7 +217,6 @@
             if ([[self.listOfScripts objectAtIndex:row] isEqualToString:self.selectedScript]) {
                 UIImageView *checkbox = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:@"checkbox.png"]];
                 cell.accessoryView = checkbox;
-                [checkbox release];
                 self.lastIndexPath_lu = indexPath;
             }
         }
@@ -242,11 +230,11 @@
     return cell;
 }
 
--(CGFloat) tableView:(UITableView *)aTableView heightForHeaderInSection:(NSInteger) section {
+- (CGFloat)tableView:(UITableView *)aTableView heightForHeaderInSection:(NSInteger)section {
     return IS_IPAD() ? 0 : 50;
 }
 
--(UIView *)tableView:(UITableView *)aTableView viewForHeaderInSection:(NSInteger) section {
+-(UIView *)tableView:(UITableView *)aTableView viewForHeaderInSection:(NSInteger)section {
     if (IS_IPAD())
         return nil;
     UIView *theView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 30)];
@@ -255,14 +243,14 @@
     self.topControl.center = CGPointMake(self.view.frame.size.width/2, 24);
     [self.topControl addTarget:aTableView action:@selector(reloadData) forControlEvents:UIControlEventValueChanged];
     [theView addSubview:self.topControl];
-    return [theView autorelease];
+    return theView;
 }
 
--(CGFloat) tableView:(UITableView *)aTableView heightForFooterInSection:(NSInteger) section {
+- (CGFloat)tableView:(UITableView *)aTableView heightForFooterInSection:(NSInteger)section {
     return 40;
 }
 
--(UIView *)tableView:(UITableView *)aTableView viewForFooterInSection:(NSInteger) section {
+-(UIView *)tableView:(UITableView *)aTableView viewForFooterInSection:(NSInteger)section {
     NSInteger height = 40;
     UIView *footer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, aTableView.frame.size.width, height)];
     footer.backgroundColor = [UIColor clearColor];
@@ -280,13 +268,12 @@
     label.text = NSLocalizedString(@"Setting a Style might force a particular Scheme or Weapon configuration.",@"");
 
     [footer addSubview:label];
-    [label release];
-    return [footer autorelease];
+    return footer;
 }
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     NSIndexPath *lastIndexPath;
     NSInteger index = self.topControl.selectedSegmentIndex;
     if (index == 0)
@@ -304,7 +291,6 @@
         UITableViewCell *newCell = [aTableView cellForRowAtIndexPath:indexPath];
         UIImageView *checkbox = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:@"checkbox.png"]];
         newCell.accessoryView = checkbox;
-        [checkbox release];
         UITableViewCell *oldCell = [aTableView cellForRowAtIndexPath:lastIndexPath];
         oldCell.accessoryView = nil;
 
@@ -350,9 +336,7 @@
                 // some styles disable or force the choice of a particular scheme/weaponset
                 NSString *path = [[NSString alloc] initWithFormat:@"%@/%@.cfg",SCRIPTS_DIRECTORY(),[self.selectedScript stringByDeletingPathExtension]];
                 NSString *configFile = [[NSString alloc] initWithContentsOfFile:path];
-                [path release];
                 NSArray *scriptOptions = [configFile componentsSeparatedByString:@"\n"];
-                [configFile release];
                 
                 self.scriptCommand = [NSString stringWithFormat:@"escript Scripts/Multiplayer/%@",self.selectedScript];
                 NSString *scheme = [scriptOptions objectAtIndex:0];
@@ -396,7 +380,7 @@
 
 #pragma mark -
 #pragma mark called by an NSNotification to empty or fill the sections completely
--(void) fillSections {
+- (void)fillSections {
     if (self.sectionsHidden == YES) {
         self.sectionsHidden = NO;
         NSIndexSet *sections = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 1)];
@@ -407,7 +391,7 @@
     }
 }
 
--(void) emptySections {
+- (void)emptySections {
     if (self.sectionsHidden == NO) {
         self.sectionsHidden = YES;
         NSIndexSet *sections = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 1)];
@@ -426,13 +410,13 @@
                                     UIViewAutoresizingFlexibleBottomMargin;
 
         [self.view addSubview:theLabel];
-        [theLabel release];
     }
 }
 
 #pragma mark -
 #pragma mark Memory management
--(void) didReceiveMemoryWarning {
+
+- (void)didReceiveMemoryWarning {
     self.listOfSchemes = nil;
     self.listOfWeapons = nil;
     self.listOfScripts = nil;
@@ -440,37 +424,9 @@
     [super didReceiveMemoryWarning];
 }
 
--(void) viewDidUnload {
-    self.listOfSchemes = nil;
-    self.listOfWeapons = nil;
-    self.listOfScripts = nil;
-    self.lastIndexPath_sc = nil;
-    self.lastIndexPath_we = nil;
-    self.lastIndexPath_lu = nil;
-    self.selectedScheme = nil;
-    self.selectedWeapon = nil;
-    self.selectedScript = nil;
-    self.scriptCommand = nil;
-    self.topControl = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
-}
-
--(void) dealloc
+- (void)dealloc
 {
     [[NSNotificationCenter defaultCenter] removeObserver:self];
-    releaseAndNil(listOfSchemes);
-    releaseAndNil(listOfWeapons);
-    releaseAndNil(listOfScripts);
-    releaseAndNil(lastIndexPath_sc);
-    releaseAndNil(lastIndexPath_we);
-    releaseAndNil(lastIndexPath_lu);
-    releaseAndNil(selectedScheme);
-    releaseAndNil(selectedWeapon);
-    releaseAndNil(selectedScript);
-    releaseAndNil(scriptCommand);
-    releaseAndNil(topControl);
-    [super dealloc];
 }
 
 
--- a/project_files/HedgewarsMobile/Classes/ServerProtocolNetwork.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/ServerProtocolNetwork.h	Sun Jun 10 19:01:50 2018 +0200
@@ -29,12 +29,12 @@
 
 @property (assign) TCPsocket ssd;
 @property (assign) NSInteger serverPort;
-@property (nonatomic,retain) NSString *serverAddress;
+@property (nonatomic, strong) NSString *serverAddress;
 
--(id) init;
--(id) init:(NSInteger) onPort withAddress:(NSString *)address;
--(id) initOnPort:(NSInteger) port;
--(id) initToAddress:(NSString *)address;
+- (id)init;
+- (id)init:(NSInteger)onPort withAddress:(NSString *)address;
+- (id)initOnPort:(NSInteger)port;
+- (id)initToAddress:(NSString *)address;
 +(id) openServerConnection;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/ServerProtocolNetwork.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/ServerProtocolNetwork.m	Sun Jun 10 19:01:50 2018 +0200
@@ -29,7 +29,7 @@
 
 #pragma mark -
 #pragma mark init and class methods
--(id) init:(NSInteger) onPort withAddress:(NSString *)address {
+- (id)init:(NSInteger)onPort withAddress:(NSString *)address {
     if ((self = [super init])) {
         self.serverPort = onPort;
         self.serverAddress = address;
@@ -38,22 +38,20 @@
     return self;
 }
 
--(id) init {
+- (id)init {
     return [self init:NETGAME_DEFAULT_PORT withAddress:@"netserver.hedgewars.org"];
 }
 
--(id) initOnPort:(NSInteger) port {
+- (id)initOnPort:(NSInteger)port {
     return [self init:port withAddress:@"netserver.hedgewars.org"];
 }
 
--(id) initToAddress:(NSString *)address {
+- (id)initToAddress:(NSString *)address {
     return [self init:NETGAME_DEFAULT_PORT withAddress:address];
 }
 
--(void) dealloc {
-    releaseAndNil(serverAddress);
+- (void)dealloc {
     serverConnection = nil;
-    [super dealloc];
 }
 
 +(id) openServerConnection {
@@ -61,7 +59,7 @@
     [NSThread detachNewThreadSelector:@selector(serverProtocol)
                              toTarget:connection
                            withObject:nil];
-    [connection retain];    // retain count here is +2
+        // retain count here is +2
     return connection;
 }
 
@@ -70,18 +68,16 @@
 -(int) sendToServer:(NSString *)command {
     NSString *message = [[NSString alloc] initWithFormat:@"%@\n\n",command];
     int result = SDLNet_TCP_Send(self.ssd, [message UTF8String], [message lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
-    [message release];
     return result;
 }
 
 -(int) sendToServer:(NSString *)command withArgument:(NSString *)argument {
     NSString *message = [[NSString alloc] initWithFormat:@"%@\n%@\n\n",command,argument];
     int result = SDLNet_TCP_Send(self.ssd, [message UTF8String], [message lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
-    [message release];
     return result;
 }
 
--(void) serverProtocol {
+- (void)serverProtocol {
     @autoreleasepool {
     
     IPaddress ip;
@@ -143,7 +139,6 @@
 
         NSString *bufferedMessage = [[NSString alloc] initWithBytes:buffer length:index-2 encoding:NSASCIIStringEncoding];
         NSArray *listOfCommands = [bufferedMessage componentsSeparatedByString:@"\n"];
-        [bufferedMessage release];
         NSString *command = [listOfCommands objectAtIndex:0];
         DLog(@"size = %d, %@", index-2, listOfCommands);
         if ([command isEqualToString:@"PING"]) {
--- a/project_files/HedgewarsMobile/Classes/SettingsBaseViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/SettingsBaseViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -26,10 +26,10 @@
     UITabBarController *tabController;
 }
 
-@property (nonatomic, retain) UIViewController *targetController;
-@property (nonatomic, retain) NSArray *controllerNames;
-@property (nonatomic, retain) NSIndexPath *lastIndexPath;
+@property (nonatomic, strong) UIViewController *targetController;
+@property (nonatomic, strong) NSArray *controllerNames;
+@property (nonatomic, strong) NSIndexPath *lastIndexPath;
 
--(void) dismissSplitView;
+- (void)dismissSplitView;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/SettingsBaseViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/SettingsBaseViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -28,13 +28,13 @@
 @implementation SettingsBaseViewController
 @synthesize targetController, controllerNames, lastIndexPath;
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 #pragma mark -
 #pragma mark View lifecycle
--(void) viewDidLoad {
+- (void)viewDidLoad {
     // the list of available controllers
     NSArray *array = [[NSArray alloc] initWithObjects:NSLocalizedString(@"General",@""),
                                                       NSLocalizedString(@"Teams",@""),
@@ -43,7 +43,6 @@
                                                       NSLocalizedString(@"Support",@""),
                                                       nil];
     self.controllerNames = array;
-    [array release];
 
     if (IS_IPAD())
     {
@@ -57,7 +56,6 @@
             [tableView reloadData];
             [self.view addSubview:tableView];
             [self tableView:tableView didSelectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
-            [tableView release];
             self.navigationItem.leftBarButtonItem = [self doneButton];
         }
     }
@@ -71,23 +69,24 @@
 
 - (UIBarButtonItem *)doneButton
 {
-    return [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
+    return [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                                                          target:self
-                                                         action:@selector(dismissSplitView)] autorelease];
+                                                         action:@selector(dismissSplitView)];
 }
 
--(void) dismissSplitView {
+- (void)dismissSplitView {
     [[AudioManagerController mainManager] playBackSound];
-    [[[HedgewarsAppDelegate sharedAppDelegate] mainViewController] dismissViewControllerAnimated:YES completion:nil];
+    UIViewController *vc = [[HedgewarsAppDelegate sharedAppDelegate] mainViewController];
+    [vc dismissViewControllerAnimated:YES completion:nil];
 }
 
 #pragma mark -
 #pragma mark Table view data source
--(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
     return 1;
 }
 
--(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
     return [self.controllerNames count];
 }
 
@@ -97,7 +96,7 @@
 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil)
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
+        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
 
     NSString *iconStr = nil;
     switch ([indexPath row]) {
@@ -125,14 +124,13 @@
     cell.textLabel.text = [controllerNames objectAtIndex:[indexPath row]];
     UIImage *icon = [[UIImage alloc] initWithContentsOfFile:iconStr];
     cell.imageView.image = icon;
-    [icon release];
 
     return cell;
 }
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {
     NSInteger newRow = [indexPath row];
     NSInteger oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
@@ -168,7 +166,6 @@
         nextController.navigationItem.hidesBackButton = YES;
         [nextController viewWillAppear:NO];
         [targetController.navigationController pushViewController:nextController animated:NO];
-        [nextController release];
         
         [[AudioManagerController mainManager] playClickSound];
     }
@@ -177,28 +174,12 @@
 
 #pragma mark -
 #pragma mark Memory management
--(void) didReceiveMemoryWarning
+
+- (void)didReceiveMemoryWarning
 {
     MSG_MEMCLEAN();
     [super didReceiveMemoryWarning];
 }
 
--(void) viewDidUnload
-{
-    self.controllerNames = nil;
-    self.lastIndexPath = nil;
-    self.targetController = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
-}
-
--(void) dealloc
-{
-    releaseAndNil(targetController);
-    releaseAndNil(controllerNames);
-    releaseAndNil(lastIndexPath);
-    [super dealloc];
-}
-
 @end
 
--- a/project_files/HedgewarsMobile/Classes/SingleSchemeViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/SingleSchemeViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -29,52 +29,47 @@
 @implementation SingleSchemeViewController
 @synthesize schemeName, schemeDictionary, basicSettingList, gameModifierArray;
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 #pragma mark -
 #pragma mark View lifecycle
--(void) viewDidLoad {
+- (void)viewDidLoad {
     [super viewDidLoad];
 
     // title, description, image name (+btn)
     NSArray *mods = [[NSArray alloc] initWithContentsOfFile:GAMEMODS_FILE()];
     self.gameModifierArray = mods;
-    [mods release];
 
     // title, image name (+icon), default value, max value, min value
     NSArray *basicSettings = [[NSArray alloc] initWithContentsOfFile:BASICFLAGS_FILE()];
     self.basicSettingList = basicSettings;
-    [basicSettings release];
 
     self.title = NSLocalizedString(@"Edit scheme preferences",@"");
 }
 
 // load from file
--(void) viewWillAppear:(BOOL) animated {
+- (void)viewWillAppear:(BOOL) animated {
     [super viewWillAppear:animated];
 
     NSString *schemeFile = [[NSString alloc] initWithFormat:@"%@/%@.plist",SCHEMES_DIRECTORY(),self.schemeName];
     NSMutableDictionary *scheme = [[NSMutableDictionary alloc] initWithContentsOfFile:schemeFile];
-    [schemeFile release];
     self.schemeDictionary = scheme;
-    [scheme release];
 
     [self.tableView reloadData];
 }
 
 // save to file
--(void) viewWillDisappear:(BOOL) animated {
+- (void)viewWillDisappear:(BOOL) animated {
     [super viewWillDisappear:animated];
 
     NSString *schemeFile = [[NSString alloc] initWithFormat:@"%@/%@.plist",SCHEMES_DIRECTORY(),self.schemeName];
     [self.schemeDictionary writeToFile:schemeFile atomically:YES];
-    [schemeFile release];
 }
 
 // force a redraw of the game mod section to reposition the slider
--(void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
+- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
     if (IS_IPAD() == NO)
         return;
     [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationFade];
@@ -83,7 +78,7 @@
 #pragma mark -
 #pragma mark editableCellView delegate
 // set the new value
--(void) saveTextFieldValue:(NSString *)textString withTag:(NSInteger) tagValue {
+- (void)saveTextFieldValue:(NSString *)textString withTag:(NSInteger)tagValue {
     if (tagValue == 0) {
         // delete old file
         [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@.plist",SCHEMES_DIRECTORY(),self.schemeName] error:NULL];
@@ -98,11 +93,11 @@
 
 #pragma mark -
 #pragma mark Table view data source
--(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
     return 3;
 }
 
--(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
     switch (section) {
         case 0:
             return 2;
@@ -128,11 +123,11 @@
     NSInteger row = [indexPath row];
 
     switch ([indexPath section]) {
-        case 0:
+        case 0: {
             editableCell = (EditableCellView *)[aTableView dequeueReusableCellWithIdentifier:CellIdentifier0];
             if (editableCell == nil) {
-                editableCell = [[[EditableCellView alloc] initWithStyle:UITableViewCellStyleDefault
-                                               reuseIdentifier:CellIdentifier0] autorelease];
+                editableCell = [[EditableCellView alloc] initWithStyle:UITableViewCellStyleDefault
+                                                        reuseIdentifier:CellIdentifier0];
                 editableCell.delegate = self;
             }
             editableCell.tag = row;
@@ -151,31 +146,29 @@
             }
             cell = editableCell;
             break;
-        case 1:
+        }
+        case 1: {
             cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier1];
             NSDictionary *detail = [self.basicSettingList objectAtIndex:row];
             // need to offset this section (see format in CommodityFunctions.m and above)
             if (cell == nil) {
-                cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1
-                                               reuseIdentifier:CellIdentifier1] autorelease];
+                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1
+                                               reuseIdentifier:CellIdentifier1];
 
                 UISlider *slider = [[UISlider alloc] init];
                 [slider addTarget:self action:@selector(sliderChanged:) forControlEvents:UIControlEventValueChanged];
                 [cell.contentView addSubview:slider];
-                [slider release];
 
                 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 7, 200, 30)];
                 label.tag = LABEL_TAG;
                 label.backgroundColor = [UIColor clearColor];
                 label.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]];
                 [cell.contentView addSubview:label];
-                [label release];
             }
 
             UIImage *img = [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/icon%@.png",ICONS_DIRECTORY(),
                                                                     [[self.basicSettingList objectAtIndex:row] objectForKey:@"image"]]];
             cell.imageView.image = img;
-            [img release];
 
             UILabel *cellLabel = (UILabel *)[cell.contentView viewWithTag:LABEL_TAG];
             NSString *basicSettingTitleKey = [[self.basicSettingList objectAtIndex:row] objectForKey:@"title"];
@@ -218,15 +211,15 @@
 
             cell.selectionStyle = UITableViewCellSelectionStyleBlue;
             break;
-        case 2:
+        }
+        case 2: {
             cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier2];
             if (cell == nil) {
-                cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
-                                               reuseIdentifier:CellIdentifier2] autorelease];
+                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
+                                               reuseIdentifier:CellIdentifier2];
                 UISwitch *onOff = [[UISwitch alloc] init];
                 [onOff addTarget:self action:@selector(toggleSwitch:) forControlEvents:UIControlEventValueChanged];
                 cell.accessoryView = onOff;
-                [onOff release];
             }
 
             UISwitch *switcher = (UISwitch *)cell.accessoryView;
@@ -236,7 +229,6 @@
             UIImage *image = [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/btn%@.png",ICONS_DIRECTORY(),
                                                                       [[self.gameModifierArray objectAtIndex:row] objectForKey:@"image"]]];
             cell.imageView.image = image;
-            [image release];
             cell.imageView.layer.cornerRadius = 6.0f;
             cell.imageView.layer.masksToBounds = YES;
             NSString *gameModTitleKey = [[self.gameModifierArray objectAtIndex:row] objectForKey:@"title"];
@@ -248,17 +240,18 @@
 
             cell.selectionStyle = UITableViewCellSelectionStyleNone;
         }
+    }
 
     return cell;
 }
 
--(void) toggleSwitch:(id) sender {
+- (void)toggleSwitch:(id)sender {
     UISwitch *theSwitch = (UISwitch *)sender;
     NSMutableArray *array = [self.schemeDictionary objectForKey:@"gamemod"];
     [array replaceObjectAtIndex:theSwitch.tag-SWITCH_TAG withObject:[NSNumber numberWithBool:theSwitch.on]];
 }
 
--(void) sliderChanged:(id) sender {
+- (void)sliderChanged:(id)sender {
     // the slider that changed is sent as object
     UISlider *theSlider = (UISlider *)sender;
     // create the indexPath of the row of the slider
@@ -279,7 +272,7 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     UITableViewCell *cell = [aTableView cellForRowAtIndexPath:indexPath];
     EditableCellView *editableCell = nil;
     UISlider *cellSlider = nil;
@@ -307,7 +300,7 @@
     [aTableView deselectRowAtIndexPath:indexPath animated:YES];
 }
 
--(NSString *)tableView:(UITableView *)aTableView titleForHeaderInSection:(NSInteger)section {
+- (NSString *)tableView:(UITableView *)aTableView titleForHeaderInSection:(NSInteger)section {
     NSString *sectionTitle = nil;
     switch (section) {
         case 0:
@@ -326,7 +319,7 @@
     return sectionTitle;
 }
 
--(CGFloat) tableView:(UITableView *)aTableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+- (CGFloat)tableView:(UITableView *)aTableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
     if ([indexPath section] == 0)
         return aTableView.rowHeight;
     else if ([indexPath section] == 1)
@@ -373,27 +366,11 @@
 
 #pragma mark -
 #pragma mark Memory management
--(void) didReceiveMemoryWarning {
+
+- (void)didReceiveMemoryWarning {
     [super didReceiveMemoryWarning];
     self.basicSettingList = nil;
     self.gameModifierArray = nil;
 }
 
--(void) viewDidUnload {
-    self.schemeName = nil;
-    self.schemeDictionary = nil;
-    self.basicSettingList = nil;
-    self.gameModifierArray = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
-}
-
--(void) dealloc {
-    releaseAndNil(schemeName);
-    releaseAndNil(schemeDictionary);
-    releaseAndNil(basicSettingList);
-    releaseAndNil(gameModifierArray);
-    [super dealloc];
-}
-
 @end
--- a/project_files/HedgewarsMobile/Classes/SingleTeamViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/SingleTeamViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -36,7 +36,7 @@
 @property (nonatomic,retain) NSArray *secondaryItems;
 @property (nonatomic,retain) NSArray *moreSecondaryItems;
 
--(void) writeFile;
--(void) setWriteNeeded;
+- (void)writeFile;
+- (void)setWriteNeeded;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/SingleTeamViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/SingleTeamViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -32,14 +32,14 @@
 @implementation SingleTeamViewController
 @synthesize teamDictionary, normalHogSprite, secondaryItems, moreSecondaryItems, teamName;
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 #pragma mark -
 #pragma mark editableCellViewDelegate methods
 // set the new value
--(void) saveTextFieldValue:(NSString *)textString withTag:(NSInteger) tagValue {
+- (void)saveTextFieldValue:(NSString *)textString withTag:(NSInteger)tagValue {
     if (TEAMNAME_TAG == tagValue) {
         // delete old file
         [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@.plist",TEAMS_DIRECTORY(),self.teamName] error:NULL];
@@ -57,7 +57,7 @@
 
 #pragma mark -
 #pragma mark View lifecycle
--(void) viewDidLoad {
+- (void)viewDidLoad {
     [super viewDidLoad];
 
     // labels for the entries
@@ -68,7 +68,6 @@
                       NSLocalizedString(@"Flag",@""),
                       NSLocalizedString(@"Level",@""),nil];
     self.secondaryItems = array;
-    [array release];
 
     // labels for the subtitles
     NSArray *moreArray = [[NSArray alloc] initWithObjects:
@@ -78,14 +77,11 @@
                           NSLocalizedString(@"Choose a charismatic symbol for your team",@""),
                           NSLocalizedString(@"Opt for controlling the team or let the AI lead",@""),nil];
     self.moreSecondaryItems = moreArray;
-    [moreArray release];
 
     // load the base hog image, drawing will occure in cellForRow...
     NSString *normalHogFile = [[NSString alloc] initWithFormat:@"%@/basehat-hedgehog.png",[[NSBundle mainBundle] resourcePath]];
     UIImage *hogSprite = [[UIImage alloc] initWithContentsOfFile:normalHogFile];
-    [normalHogFile release];
     self.normalHogSprite = hogSprite;
-    [hogSprite release];
 
     // listen if any childController modifies the plist and write it if needed
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setWriteNeeded) name:@"setWriteNeedTeams" object:nil];
@@ -94,7 +90,7 @@
     self.title = NSLocalizedString(@"Edit team settings",@"");
 }
 
--(void) viewWillAppear:(BOOL)animated {
+- (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
 
     // load data about the team and write if there has been a change from other childControllers
@@ -104,14 +100,12 @@
     NSString *teamFile = [[NSString alloc] initWithFormat:@"%@/%@.plist",TEAMS_DIRECTORY(),self.teamName];
     NSMutableDictionary *teamDict = [[NSMutableDictionary alloc] initWithContentsOfFile:teamFile];
     self.teamDictionary = teamDict;
-    [teamDict release];
-    [teamFile release];
 
     [self.tableView reloadData];
 }
 
 // write on file if there has been a change
--(void) viewWillDisappear:(BOOL)animated {
+- (void)viewWillDisappear:(BOOL)animated {
     [super viewWillDisappear:animated];
 
     if (isWriteNeeded)
@@ -120,14 +114,13 @@
 
 #pragma mark -
 // needed by other classes to warn about a user change
--(void) setWriteNeeded {
+- (void)setWriteNeeded {
     isWriteNeeded = YES;
 }
 
--(void) writeFile {
+- (void)writeFile {
     NSString *teamFile = [[NSString alloc] initWithFormat:@"%@/%@.plist",TEAMS_DIRECTORY(),self.teamName];
     [self.teamDictionary writeToFile:teamFile atomically:YES];
-    [teamFile release];
 
     //DLog(@"%@",teamDictionary);
     isWriteNeeded = NO;
@@ -135,11 +128,11 @@
 
 #pragma mark -
 #pragma mark Table view data source
--(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
     return 3;
 }
 
--(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
     NSInteger rows = 0;
     switch (section) {
         case 0: // team name
@@ -157,7 +150,7 @@
     return rows;
 }
 
--(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
+- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
     NSString *sectionTitle = nil;
     switch (section) {
         case 0:
@@ -189,11 +182,11 @@
     UIImage *accessoryImage;
 
     switch ([indexPath section]) {
-        case 0:
+        case 0: {
             editableCell = (EditableCellView *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier0];
             if (editableCell == nil) {
-                editableCell = [[[EditableCellView alloc] initWithStyle:UITableViewCellStyleDefault
-                                               reuseIdentifier:CellIdentifier0] autorelease];
+                editableCell = [[EditableCellView alloc] initWithStyle:UITableViewCellStyleDefault
+                                                        reuseIdentifier:CellIdentifier0];
                 editableCell.delegate = self;
                 editableCell.tag = TEAMNAME_TAG;
             }
@@ -204,14 +197,15 @@
 
             cell = editableCell;
             break;
-        case 1:
+        }
+        case 1: {
             if ([indexPath row] == HW_getMaxNumberOfHogs())
             {
                 cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifierDefault];
                 if (cell == nil)
                 {
-                    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
-                                                   reuseIdentifier:CellIdentifierDefault] autorelease];
+                    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
+                                                   reuseIdentifier:CellIdentifierDefault];
                     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
                 }
                 
@@ -222,8 +216,8 @@
             
             editableCell = (EditableCellView *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier1];
             if (editableCell == nil) {
-                editableCell = [[[EditableCellView alloc] initWithStyle:UITableViewCellStyleDefault
-                                               reuseIdentifier:CellIdentifier1] autorelease];
+                editableCell = [[EditableCellView alloc] initWithStyle:UITableViewCellStyleDefault
+                                                        reuseIdentifier:CellIdentifier1];
                 editableCell.delegate = self;
             }
             editableCell.tag = [indexPath row];
@@ -233,20 +227,19 @@
             // draw the hat on top of the hog
             NSString *hatFile = [[NSString alloc] initWithFormat:@"%@/%@.png", HATS_DIRECTORY(), [[hogArray objectAtIndex:row] objectForKey:@"hat"]];
             UIImage *hatSprite = [[UIImage alloc] initWithContentsOfFile: hatFile andCutAt:CGRectMake(0, 0, 32, 32)];
-            [hatFile release];
             editableCell.imageView.image = [self.normalHogSprite mergeWith:hatSprite atPoint:CGPointMake(0, 5)];
-            [hatSprite release];
 
             editableCell.textField.text = [[hogArray objectAtIndex:row] objectForKey:@"hogname"];
             editableCell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
 
             cell = editableCell;
             break;
-        case 2:
+        }
+        case 2: {
             cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier2];
             if (cell == nil) {
-                cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
-                                               reuseIdentifier:CellIdentifier2] autorelease];
+                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
+                                               reuseIdentifier:CellIdentifier2];
             }
 
             cell.textLabel.text = [self.secondaryItems objectAtIndex:row];
@@ -258,25 +251,21 @@
                                                                               GRAVES_DIRECTORY(),[teamDictionary objectForKey:@"grave"]]
                                                                     andCutAt:CGRectMake(0,0,32,32)];
                     cell.imageView.image = accessoryImage;
-                    [accessoryImage release];
                     break;
                 case 1: // voice
                     accessoryImage = [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/HellishBomb.png",
                                                                               GRAPHICS_DIRECTORY()]];
                     cell.imageView.image = accessoryImage;
-                    [accessoryImage release];
                     break;
                 case 2: // fort
                     accessoryImage = [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/%@-icon.png",
                                                                               FORTS_DIRECTORY(),[teamDictionary objectForKey:@"fort"]]];
                     cell.imageView.image = accessoryImage;
-                    [accessoryImage release];
                     break;
                 case 3: // flags
                     accessoryImage = [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/%@.png",
                                                                               FLAGS_DIRECTORY(),[teamDictionary objectForKey:@"flag"]]];
                     cell.imageView.image = [accessoryImage scaleToSize:CGSizeMake(26, 18)];
-                    [accessoryImage release];
                     cell.imageView.layer.borderWidth = 1;
                     cell.imageView.layer.borderColor = [[UIColor blackColor] CGColor];
                     break;
@@ -287,13 +276,13 @@
                                                                                  objectAtIndex:0] objectForKey:@"level"]
                                                                                intValue]]];
                     cell.imageView.image = accessoryImage;
-                    [accessoryImage release];
                     break;
                 default:
                     cell.imageView.image = nil;
                     break;
             }
             break;
+        }
     }
 
     return cell;
@@ -302,7 +291,7 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     NSInteger row = [indexPath row];
     NSInteger section = [indexPath section];
 
@@ -316,7 +305,6 @@
 
                 [gravesViewController setTeamDictionary:teamDictionary];
                 [self.navigationController pushViewController:gravesViewController animated:YES];
-                [gravesViewController release];
                 break;
             }
             case 1: // voice
@@ -325,7 +313,6 @@
 
                 [voicesViewController setTeamDictionary:teamDictionary];
                 [self.navigationController pushViewController:voicesViewController animated:YES];
-                [voicesViewController release];
                 break;
             }
             case 2: // fort
@@ -334,7 +321,6 @@
 
                 [fortsViewController setTeamDictionary:teamDictionary];
                 [self.navigationController pushViewController:fortsViewController animated:YES];
-                [fortsViewController release];
                 break;
             }
             case 3: // flag
@@ -343,7 +329,6 @@
 
                 [flagsViewController setTeamDictionary:teamDictionary];
                 [self.navigationController pushViewController:flagsViewController animated:YES];
-                [flagsViewController release];
                 break;
             }
             case 4: // level
@@ -352,7 +337,6 @@
 
                 [levelViewController setTeamDictionary:teamDictionary];
                 [self.navigationController pushViewController:levelViewController animated:YES];
-                [levelViewController release];
                 break;
             }
             default:
@@ -373,7 +357,7 @@
 }
 
 // action to perform when you want to change a hog hat
--(void) tableView:(UITableView *)aTableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)aTableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
     // if we are editing the field undo any change before proceeding
     EditableCellView *cell = (EditableCellView *)[aTableView cellForRowAtIndexPath:indexPath];
     [cell cancel:nil];
@@ -390,37 +374,15 @@
     hogHatViewController.selectedHog = hogIndex;
     
     [self.navigationController pushViewController:hogHatViewController animated:YES];
-    [hogHatViewController release];
 }
 
 #pragma mark -
 #pragma mark Memory management
--(void) didReceiveMemoryWarning {
+
+- (void)didReceiveMemoryWarning {
     [super didReceiveMemoryWarning];
     MSG_MEMCLEAN();
 }
 
--(void) viewDidUnload {
-    self.teamDictionary = nil;
-    self.teamName = nil;
-    self.normalHogSprite = nil;
-    self.secondaryItems = nil;
-    self.moreSecondaryItems = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
-}
-
--(void) dealloc
-{
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
-    releaseAndNil(teamDictionary);
-    releaseAndNil(teamName);
-    releaseAndNil(normalHogSprite);
-    releaseAndNil(secondaryItems);
-    releaseAndNil(moreSecondaryItems);
-    [super dealloc];
-}
-
-
 @end
 
--- a/project_files/HedgewarsMobile/Classes/SingleWeaponViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/SingleWeaponViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -37,6 +37,6 @@
 @property (nonatomic,retain) NSString *description;
 @property (nonatomic,retain) UIImage *ammoStoreImage;
 
--(void) saveAmmos;
+- (void)saveAmmos;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/SingleWeaponViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/SingleWeaponViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -20,20 +20,20 @@
 #import "SingleWeaponViewController.h"
 
 @interface SingleWeaponViewController ()
-@property (nonatomic, retain) NSString *trPath;
-@property (nonatomic, retain) NSString *trFileName;
+@property (nonatomic, strong) NSString *trPath;
+@property (nonatomic, strong) NSString *trFileName;
 @end
 
 @implementation SingleWeaponViewController
 @synthesize weaponName, description, ammoStoreImage;
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 #pragma mark -
 #pragma mark View lifecycle
--(void) viewDidLoad {
+- (void)viewDidLoad {
     [super viewDidLoad];
 
     self.trPath = [NSString stringWithFormat:@"%@", LOCALE_DIRECTORY()];
@@ -46,27 +46,24 @@
     delay = (char *)malloc(sizeof(char)*(HW_getNumberOfWeapons()+1));
     crateness = (char *)malloc(sizeof(char)*(HW_getNumberOfWeapons()+1));
 
-    NSString *str = [NSString stringWithFormat:@"%@/AmmoMenu/Ammos.png",GRAPHICS_DIRECTORY()];
+    NSString *str = [NSString stringWithFormat:@"%@/AmmoMenu/Ammos_base.png", GRAPHICS_DIRECTORY()];
     UIImage *img = [[UIImage alloc] initWithContentsOfFile:str];
     self.ammoStoreImage = img;
-    [img release];
 
     self.title = NSLocalizedString(@"Edit weapons preferences",@"");
 }
 
--(void) viewWillAppear:(BOOL) animated {
+- (void)viewWillAppear:(BOOL) animated {
     [super viewWillAppear:animated];
 
     NSString *ammoFile = [[NSString alloc] initWithFormat:@"%@/%@.plist",WEAPONS_DIRECTORY(),self.weaponName];
     NSDictionary *weapon = [[NSDictionary alloc] initWithContentsOfFile:ammoFile];
-    [ammoFile release];
 
     self.description = [weapon objectForKey:@"description"];
     const char *tmp1 = [[weapon objectForKey:@"ammostore_initialqt"] UTF8String];
     const char *tmp2 = [[weapon objectForKey:@"ammostore_probability"] UTF8String];
     const char *tmp3 = [[weapon objectForKey:@"ammostore_delay"] UTF8String];
     const char *tmp4 = [[weapon objectForKey:@"ammostore_crate"] UTF8String];
-    [weapon release];
 
     // if the new weaponset is diffrent from the older we need to update it replacing
     // the missing ammos with 0 quantity
@@ -87,12 +84,12 @@
     [self.tableView reloadData];
 }
 
--(void) viewWillDisappear:(BOOL) animated {
+- (void)viewWillDisappear:(BOOL) animated {
     [super viewWillDisappear:animated];
     [self saveAmmos];
 }
 
--(void) saveAmmos {
+- (void)saveAmmos {
     quantity[HW_getNumberOfWeapons()] = '\0';
     probability[HW_getNumberOfWeapons()] = '\0';
     delay[HW_getNumberOfWeapons()] = '\0';
@@ -113,17 +110,15 @@
 
     NSString *ammoFile = [[NSString alloc] initWithFormat:@"%@/%@.plist",WEAPONS_DIRECTORY(),self.weaponName];
     [weapon writeToFile:ammoFile atomically:YES];
-    [ammoFile release];
-    [weapon release];
 }
 
 #pragma mark -
 #pragma mark Table view data source
--(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
     return 2;
 }
 
--(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
     if (section == 0)
         return 2;
     else
@@ -140,8 +135,8 @@
     if (0 == [indexPath section]) {
         EditableCellView *editableCell = (EditableCellView *)[aTableView dequeueReusableCellWithIdentifier:CellIdentifier0];
         if (editableCell == nil) {
-            editableCell = [[[EditableCellView alloc] initWithStyle:UITableViewCellStyleDefault
-                                                    reuseIdentifier:CellIdentifier0] autorelease];
+            editableCell = [[EditableCellView alloc] initWithStyle:UITableViewCellStyleDefault
+                                                    reuseIdentifier:CellIdentifier0];
             editableCell.delegate = self;
         }
         editableCell.tag = row;
@@ -162,7 +157,7 @@
     } else {
         WeaponCellView *weaponCell = (WeaponCellView *)[aTableView dequeueReusableCellWithIdentifier:CellIdentifier1];
         if (weaponCell == nil) {
-            weaponCell = [[[WeaponCellView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier1] autorelease];
+            weaponCell = [[WeaponCellView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier1];
             weaponCell.delegate = self;
         }
 
@@ -188,14 +183,14 @@
     return cell;
 }
 
--(CGFloat) tableView:(UITableView *)aTableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+- (CGFloat)tableView:(UITableView *)aTableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
     if (0 == [indexPath section])
         return aTableView.rowHeight;
     else
         return IS_ON_PORTRAIT() ? 208 : 120;
 }
 
--(NSString *)tableView:(UITableView *)aTableView titleForHeaderInSection:(NSInteger)section {
+- (NSString *)tableView:(UITableView *)aTableView titleForHeaderInSection:(NSInteger)section {
     NSString *sectionTitle = nil;
     switch (section) {
         case 0:
@@ -213,7 +208,7 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     if (0 == [indexPath section]) {
         EditableCellView *editableCell = (EditableCellView *)[aTableView cellForRowAtIndexPath:indexPath];
         [editableCell replyKeyboard];
@@ -223,7 +218,7 @@
 #pragma mark -
 #pragma mark editableCellView delegate
 // set the new value
--(void) saveTextFieldValue:(NSString *)textString withTag:(NSInteger) tagValue {
+- (void)saveTextFieldValue:(NSString *)textString withTag:(NSInteger)tagValue {
     if (tagValue == 0) {
         // delete old file
         [[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@.plist",WEAPONS_DIRECTORY(),self.weaponName] error:NULL];
@@ -238,7 +233,7 @@
 
 #pragma mark -
 #pragma mark WeaponButtonControllerDelegate
--(void) updateValues:(NSArray *)withArray atIndex:(NSInteger) index {
+- (void)updateValues:(NSArray *)withArray atIndex:(NSInteger)index {
     quantity[index] = [[NSString stringWithFormat:@"%d",[[withArray objectAtIndex:0] intValue]] characterAtIndex:0];
     probability[index] = [[NSString stringWithFormat:@"%d",[[withArray objectAtIndex:1] intValue]] characterAtIndex:0];
     delay[index] = [[NSString stringWithFormat:@"%d",[[withArray objectAtIndex:2] intValue]] characterAtIndex:0];
@@ -247,34 +242,13 @@
 
 #pragma mark -
 #pragma mark Memory management
--(void) didReceiveMemoryWarning {
-    [super didReceiveMemoryWarning];
-}
 
--(void) viewDidUnload {
+- (void)dealloc {
     free(quantity); quantity = NULL;
     free(probability); probability = NULL;
     free(delay); delay = NULL;
     free(crateness); crateness = NULL;
-    [super viewDidUnload];
-    self.description = nil;
-    self.weaponName = nil;
-    self.ammoStoreImage = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
 }
 
-
--(void) dealloc {
-    releaseAndNil(_trPath);
-    releaseAndNil(_trFileName);
-    
-    releaseAndNil(weaponName);
-    releaseAndNil(description);
-    releaseAndNil(ammoStoreImage);
-    [super dealloc];
-}
-
-
 @end
 
--- a/project_files/HedgewarsMobile/Classes/SquareButtonView.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/SquareButtonView.h	Sun Jun 10 19:01:50 2018 +0200
@@ -27,12 +27,12 @@
     NSArray *colorArray;
 }
 
-@property (nonatomic,retain) NSMutableDictionary *ownerDictionary;
-@property (nonatomic,retain) NSArray *colorArray;
-@property (nonatomic,assign) NSUInteger selectedColor;
-@property (nonatomic,assign) NSUInteger colorIndex;
+@property (nonatomic, strong) NSMutableDictionary *ownerDictionary;
+@property (nonatomic, strong) NSArray *colorArray;
+@property (assign) NSUInteger selectedColor;
+@property (assign) NSUInteger colorIndex;
 
--(void) nextColor;
--(void) selectColor:(NSUInteger) color;
+- (void)nextColor;
+- (void)selectColor:(NSUInteger) color;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/SquareButtonView.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/SquareButtonView.m	Sun Jun 10 19:01:50 2018 +0200
@@ -24,7 +24,7 @@
 @implementation SquareButtonView
 @synthesize ownerDictionary, colorIndex, selectedColor, colorArray;
 
--(id) initWithFrame:(CGRect)frame {
+- (id)initWithFrame:(CGRect)frame {
     if ((self = [super initWithFrame:frame])) {
         self.colorIndex = 0;
         self.selectedColor = 0;
@@ -46,7 +46,7 @@
     return self;
 }
 
--(void) nextColor {
+- (void)nextColor {
     self.colorIndex++;
 
     if (self.colorIndex >= [self.colorArray count])
@@ -58,7 +58,7 @@
     [self selectColor:color];
 }
 
--(void) selectColor:(NSUInteger) color {
+- (void)selectColor:(NSUInteger) color {
     if (color != self.selectedColor) {
         self.selectedColor = color;
         self.colorIndex = [self.colorArray indexOfObject:[NSNumber numberWithUnsignedInteger:color]];
@@ -70,11 +70,6 @@
     }
 }
 
--(void) dealloc {
-    releaseAndNil(ownerDictionary);
-    releaseAndNil(colorArray);
-    [super dealloc];
-}
 
 
 @end
--- a/project_files/HedgewarsMobile/Classes/StatsPageViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/StatsPageViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -24,6 +24,6 @@
     NSArray *statsArray;
 }
 
-@property (nonatomic,retain) NSArray *statsArray;
+@property (nonatomic, strong) NSArray *statsArray;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/StatsPageViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/StatsPageViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -23,11 +23,11 @@
 @implementation StatsPageViewController
 @synthesize statsArray;
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
--(void) viewDidLoad {
+- (void)viewDidLoad {
     UITableView *aTableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStyleGrouped];
     aTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
     [aTableView setBackgroundColorForAnyTable:[UIColor clearColor]];
@@ -35,11 +35,9 @@
     NSString *imgName = (IS_IPAD()) ? @"mediumBackground~ipad.png" : @"smallerBackground~iphone.png";
     UIImage *img = [[UIImage alloc] initWithContentsOfFile:imgName];
     UIImageView *background = [[UIImageView alloc] initWithImage:img];
-    [img release];
     background.frame = self.view.frame;
     background.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
     [self.view insertSubview:background atIndex:0];
-    [background release];
 
     aTableView.separatorColor = [UIColor darkYellowColor];
     aTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
@@ -49,7 +47,6 @@
     aTableView.rowHeight = 44;
     
     [self.view addSubview:aTableView];
-    [aTableView release];
 
     [super viewDidLoad];
 }
@@ -70,11 +67,11 @@
 
 #pragma mark -
 #pragma mark Table view data source
--(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
     return 3;
 }
 
--(NSInteger) tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section {
+- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section {
     if (section == 0)
         return 1;
     else if (section == 1)
@@ -92,7 +89,7 @@
 
     UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier0];
     if (cell == nil)
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier0] autorelease];
+        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier0];
 
     if (section == 0) {         // winning team
         imgName = @"star";
@@ -117,12 +114,9 @@
 
     NSString *imgString = [[NSString alloc] initWithFormat:@"%@/%@.png",imgPath,imgName];
     UIImage *img = [[UIImage alloc] initWithContentsOfFile:imgString];
-    [imgString release];
     UIImageView *imgView = [[UIImageView alloc] initWithImage:img];
     cell.imageView.image = img;
-    [img release];
     cell.accessoryView = imgView;
-    [imgView release];
 
     cell.textLabel.textAlignment = NSTextAlignmentCenter;
     cell.textLabel.adjustsFontSizeToFitWidth = YES;
@@ -132,7 +126,7 @@
     return cell;
 }
 
--(CGFloat) tableView:(UITableView *)aTableView heightForHeaderInSection:(NSInteger)section {
+- (CGFloat)tableView:(UITableView *)aTableView heightForHeaderInSection:(NSInteger)section {
     return (section == 0) ? 160 : 40;
 }
 
@@ -143,18 +137,16 @@
 
         UIImage *img = [[UIImage alloc] initWithContentsOfFile:@"smallerTitle.png"];
         UIImageView *imgView = [[UIImageView alloc] initWithImage:img];
-        [img release];
         imgView.center = CGPointMake(aTableView.frame.size.width/2, 160/2);
         imgView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
         [header addSubview:imgView];
-        [imgView release];
 
-        return [header autorelease];
+        return header;
     } else
         return nil;
 }
 
--(CGFloat) tableView:(UITableView *)aTableView heightForFooterInSection:(NSInteger)section {
+- (CGFloat)tableView:(UITableView *)aTableView heightForFooterInSection:(NSInteger)section {
     return aTableView.rowHeight + 30;
 }
 
@@ -168,32 +160,27 @@
         button.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
         [button addTarget:self action:@selector(dismissView) forControlEvents:UIControlEventTouchUpInside];
         [footer addSubview:button];
-        [button release];
 
-        return [footer autorelease];
+        return footer;
     } else
         return nil;
 }
 
 #pragma mark -
 #pragma mark button delegate
--(void) dismissView {
+- (void)dismissView {
     [[AudioManagerController mainManager] playClickSound];
     [self dismissViewControllerAnimated:YES completion:nil];
 }
 
 #pragma mark -
 #pragma mark Memory management
--(void) didReceiveMemoryWarning {
+- (void)didReceiveMemoryWarning {
     // Releases the view if it doesn't have a superview.
     [super didReceiveMemoryWarning];
     self.statsArray = nil;
 }
 
--(void) dealloc {
-    releaseAndNil(statsArray);
-    [super dealloc];
-}
 
 
 @end
--- a/project_files/HedgewarsMobile/Classes/SupportViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/SupportViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -24,6 +24,6 @@
     NSArray *waysToSupport;
 }
 
-@property (nonatomic, retain) NSArray *waysToSupport;
+@property (nonatomic, strong) NSArray *waysToSupport;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/SupportViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/SupportViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -23,13 +23,13 @@
 @implementation SupportViewController
 @synthesize waysToSupport;
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 #pragma mark -
 #pragma mark View lifecycle
--(void) viewDidLoad {
+- (void)viewDidLoad {
     [super viewDidLoad];
 
     NSArray *array = [[NSArray alloc] initWithObjects:
@@ -40,7 +40,6 @@
                       NSLocalizedString(@"Chat with the devs in IRC",@""),
                       nil];
     self.waysToSupport = array;
-    [array release];
 
     self.navigationItem.title = @"♥";
     self.tableView.rowHeight = 50;
@@ -67,7 +66,7 @@
 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil)
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
+        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
 
     NSString *rowString = [self.waysToSupport objectAtIndex:(row + section)];
     cell.textLabel.text = rowString;
@@ -100,21 +99,18 @@
 
     NSString *imgString = [[NSString alloc] initWithFormat:@"%@/%@.png",[[NSBundle mainBundle] resourcePath],imgName];
     UIImage *img = [[UIImage alloc] initWithContentsOfFile:imgString];
-    [imgString release];
     cell.imageView.image = img;
     if (section == 0) {
         UIImageView *imgView = [[UIImageView alloc] initWithImage:img];
         cell.accessoryView = imgView;
-        [imgView release];
     }
-    [img release];
 
     return cell;
 }
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {
     if ([indexPath section] == 0)
     {
@@ -145,18 +141,16 @@
     }
 }
 
--(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger) section {
+-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
     if (section == 1) {
         UIView *footer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 240)];
         footer.autoresizingMask = UIViewAutoresizingFlexibleWidth;
 
         UIImage *img = [[UIImage alloc] initWithContentsOfFile:@"surprise.png"];
         UIImageView *imgView = [[UIImageView alloc] initWithImage:img];
-        [img release];
         imgView.center = CGPointMake(self.tableView.frame.size.width/2, 120);
         imgView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
         [footer addSubview:imgView];
-        [imgView release];
 
         UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 20)];
         label.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
@@ -165,33 +159,23 @@
         label.backgroundColor = [UIColor clearColor];
         label.center = CGPointMake(self.tableView.frame.size.width/2, 250);
         [footer addSubview:label];
-        [label release];
 
-        return [footer autorelease];
+        return footer;
     } else
         return nil;
 }
 
--(CGFloat) tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
+- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
     // image height + label height
     return (section == 1) ? 265 : 20;
 }
 
 #pragma mark -
 #pragma mark Memory management
+
 -(void)didReceiveMemoryWarning {
     [super didReceiveMemoryWarning];
-}
-
--(void) viewDidUnload {
-    self.waysToSupport = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
-}
-
--(void) dealloc {
-    releaseAndNil(waysToSupport);
-    [super dealloc];
+    MSG_MEMCLEAN();
 }
 
 @end
--- a/project_files/HedgewarsMobile/Classes/TableViewControllerWithDoneButton.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/TableViewControllerWithDoneButton.m	Sun Jun 10 19:01:50 2018 +0200
@@ -38,15 +38,16 @@
 
 - (UIBarButtonItem *)doneButton
 {
-    return [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
+    return [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                                                           target:self
-                                                          action:@selector(dismissView)] autorelease];
+                                                          action:@selector(dismissView)];
 }
 
 - (void)dismissView
 {
     [[AudioManagerController mainManager] playBackSound];
-    [[[HedgewarsAppDelegate sharedAppDelegate] mainViewController] dismissViewControllerAnimated:YES completion:nil];
+    UIViewController *vc = [[HedgewarsAppDelegate sharedAppDelegate] mainViewController];
+    [vc dismissViewControllerAnimated:YES completion:nil];
 }
 
 @end
--- a/project_files/HedgewarsMobile/Classes/TeamConfigViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/TeamConfigViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -32,11 +32,11 @@
     NSArray *cachedContentsOfDir;
 }
 
-@property (nonatomic,retain) UITableView *tableView;
-@property (nonatomic,assign) NSInteger selectedTeamsCount;
-@property (nonatomic,assign) NSInteger allTeamsCount;
-@property (nonatomic,retain) NSMutableArray *listOfAllTeams;
-@property (nonatomic,retain) NSMutableArray *listOfSelectedTeams;
-@property (nonatomic,retain) NSArray *cachedContentsOfDir;
+@property (nonatomic, strong) UITableView *tableView;
+@property (assign) NSInteger selectedTeamsCount;
+@property (assign) NSInteger allTeamsCount;
+@property (nonatomic, strong) NSMutableArray *listOfAllTeams;
+@property (nonatomic, strong) NSMutableArray *listOfSelectedTeams;
+@property (nonatomic, strong) NSArray *cachedContentsOfDir;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/TeamConfigViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/TeamConfigViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -25,13 +25,13 @@
 @implementation TeamConfigViewController
 @synthesize tableView, selectedTeamsCount, allTeamsCount, listOfAllTeams, listOfSelectedTeams, cachedContentsOfDir;
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 #pragma mark -
 #pragma mark View lifecycle
--(void) viewDidLoad {
+- (void)viewDidLoad {
     UITableView *aTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)
                                                            style:UITableViewStyleGrouped];
     aTableView.delegate = self;
@@ -47,9 +47,7 @@
         UIImageView *background = [[UIImageView alloc] initWithImage:backgroundImage];
         background.contentMode = UIViewContentModeScaleAspectFill;
         background.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
-        [backgroundImage release];
         [self.view addSubview:background];
-        [background release];
         [aTableView setBackgroundColorForAnyTable:[UIColor clearColor]];
     }
 
@@ -58,13 +56,12 @@
     aTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
     aTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
     self.tableView = aTableView;
-    [aTableView release];
 
     [self.view addSubview:self.tableView];
     [super viewDidLoad];
 }
 
--(void) viewWillAppear:(BOOL)animated {
+- (void)viewWillAppear:(BOOL)animated {
     NSArray *contentsOfDir = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:TEAMS_DIRECTORY() error:NULL];
     if ([self.cachedContentsOfDir isEqualToArray:contentsOfDir] == NO) {
         self.cachedContentsOfDir = contentsOfDir;
@@ -76,14 +73,11 @@
                                          [NSNumber numberWithInt:4],@"number",
                                          [colors objectAtIndex:i%[colors count]],@"color",nil];
             [array addObject:dict];
-            [dict release];
         }
         self.listOfAllTeams = array;
-        [array release];
 
         NSMutableArray *emptyArray = [[NSMutableArray alloc] initWithObjects:nil];
         self.listOfSelectedTeams = emptyArray;
-        [emptyArray release];
 
         self.selectedTeamsCount = [self.listOfSelectedTeams count];
         self.allTeamsCount = [self.listOfAllTeams count];
@@ -93,7 +87,7 @@
     [super viewWillAppear:animated];
 }
 
--(NSInteger) filterNumberOfHogs:(NSInteger) hogs {
+- (NSInteger)filterNumberOfHogs:(NSInteger)hogs {
     NSInteger numberOfHogs;
     if (hogs <= HW_getMaxNumberOfHogs() && hogs >= 1)
         numberOfHogs = hogs;
@@ -108,11 +102,11 @@
 
 #pragma mark -
 #pragma mark Table view data source
--(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
     return 2;
 }
 
--(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
     return (section == 0 ? self.selectedTeamsCount : self.allTeamsCount);
 }
 
@@ -126,11 +120,10 @@
     if (section == 0) {
         cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier0];
         if (cell == nil) {
-            cell = [[[HoldTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier0] autorelease];
+            cell = [[HoldTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier0];
 
             SquareButtonView *squareButton = [[SquareButtonView alloc] initWithFrame:CGRectMake(0, 0, 36, 36)];
             cell.accessoryView = squareButton;
-            [squareButton release];
         }
 
         NSMutableDictionary *selectedRow = [listOfSelectedTeams objectAtIndex:[indexPath row]];
@@ -148,7 +141,7 @@
     } else {
         cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier1];
         if (cell == nil)
-            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier1] autorelease];
+            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier1];
 
         cell.textLabel.text = [[[self.listOfAllTeams objectAtIndex:[indexPath row]] objectForKey:@"team"] stringByDeletingPathExtension];
         cell.textLabel.backgroundColor = [UIColor clearColor];
@@ -158,12 +151,9 @@
         if ([[firstHog objectForKey:@"level"] intValue] != 0) {
             NSString *imgString = [[NSString alloc] initWithFormat:@"%@/robotBadge.png",[[NSBundle mainBundle] resourcePath]];
             UIImage *sprite = [[UIImage alloc] initWithContentsOfFile:imgString];
-            [imgString release];
             UIImageView *spriteView = [[UIImageView alloc] initWithImage:sprite];
-            [sprite release];
 
             cell.accessoryView = spriteView;
-            [spriteView release];
         } else
             cell.accessoryView = nil;
     }
@@ -175,7 +165,7 @@
     return cell;
 }
 
--(CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
+- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
     return 45.0;
 }
 
@@ -189,15 +179,14 @@
     UIView *theView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, aTableView.frame.size.width, 30)];
     theView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
     [theView addSubview:theLabel];
-    [theLabel release];
-    return [theView autorelease];
+    return theView;
 }
 
--(CGFloat) tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
+- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
     return IS_IPAD() ? 40 : 30;
 }
 
--(UIView *)tableView:(UITableView *)aTableView viewForFooterInSection:(NSInteger) section {
+-(UIView *)tableView:(UITableView *)aTableView viewForFooterInSection:(NSInteger)section {
     NSInteger height = IS_IPAD() ? 40 : 30;
     UIView *footer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, aTableView.frame.size.width, height)];
     footer.backgroundColor = [UIColor clearColor];
@@ -218,14 +207,13 @@
         label.text = NSLocalizedString(@"The robot badge indicates an AI-controlled team.",@"");
 
     [footer addSubview:label];
-    [label release];
-    return [footer autorelease];
+    return footer;
 }
 
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     NSUInteger row = [indexPath row];
     NSUInteger section = [indexPath section];
 
@@ -255,7 +243,7 @@
     }
 }
 
--(void) holdAction:(NSString *)content onTable:(UITableView *)aTableView {
+- (void)holdAction:(NSString *)content onTable:(UITableView *)aTableView {
     NSUInteger row;
     for (row = 0; row < [self.listOfSelectedTeams count]; row++) {
         NSDictionary *dict = [self.listOfSelectedTeams objectAtIndex:row];
@@ -276,30 +264,12 @@
 
 #pragma mark -
 #pragma mark Memory management
--(void) didReceiveMemoryWarning {
+
+- (void)didReceiveMemoryWarning {
     self.cachedContentsOfDir = nil;
     MSG_MEMCLEAN();
     [super didReceiveMemoryWarning];
 }
 
--(void) viewDidUnload {
-    self.tableView = nil;
-    self.listOfAllTeams = nil;
-    self.listOfSelectedTeams = nil;
-    self.cachedContentsOfDir = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
-}
-
-
--(void) dealloc {
-    releaseAndNil(tableView);
-    releaseAndNil(listOfAllTeams);
-    releaseAndNil(listOfSelectedTeams);
-    releaseAndNil(cachedContentsOfDir);
-    [super dealloc];
-}
-
-
 @end
 
--- a/project_files/HedgewarsMobile/Classes/TeamSettingsViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/TeamSettingsViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -24,6 +24,6 @@
     NSMutableArray *listOfTeams;
 }
 
-@property (nonatomic, retain) NSMutableArray *listOfTeams;
+@property (nonatomic, strong) NSMutableArray *listOfTeams;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/TeamSettingsViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/TeamSettingsViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -24,14 +24,14 @@
 @implementation TeamSettingsViewController
 @synthesize listOfTeams;
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 #pragma mark -
 #pragma mark View lifecycle
 // add an edit button
--(void) viewDidLoad {
+- (void)viewDidLoad {
     [super viewDidLoad];
 
     UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Edit",@"")
@@ -39,25 +39,23 @@
                                                                   target:self
                                                                   action:@selector(toggleEdit:)];
     self.navigationItem.rightBarButtonItem = editButton;
-    [editButton release];
 
     self.navigationItem.title = NSLocalizedString(@"List of teams", nil);
 }
 
 // load the list of teams in the teams directory
--(void) viewWillAppear:(BOOL)animated {
+- (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
 
     NSArray *contentsOfDir = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:TEAMS_DIRECTORY() error:NULL];
     NSMutableArray *array = [[NSMutableArray alloc] initWithArray:contentsOfDir copyItems:YES];
     self.listOfTeams = array;
-    [array release];
 
     [self.tableView reloadData];
 }
 
 // modifies the navigation bar to add the "Add" and "Done" buttons
--(void) toggleEdit:(id) sender {
+- (void)toggleEdit:(id)sender {
     BOOL isEditing = self.tableView.editing;
     [self.tableView setEditing:!isEditing animated:YES];
 
@@ -73,12 +71,11 @@
                                                                      target:self
                                                                      action:@selector(addTeam:)];
         self.navigationItem.leftBarButtonItem = addButton;
-        [addButton release];
     }
 }
 
 // add a team file with default values and updates the table
--(void) addTeam:(id) sender {
+- (void)addTeam:(id)sender {
     NSString *fileName = [[NSString alloc] initWithFormat:@"Default Team %u.plist", [self.listOfTeams count]];
 
     [CreationChamber createTeamNamed:[fileName stringByDeletingPathExtension]];
@@ -91,16 +88,15 @@
 
     NSInteger index = [self.listOfTeams indexOfObject:fileName];
     [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
-    [fileName release];
 }
 
 #pragma mark -
 #pragma mark Table view data source
--(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
     return 1;
 }
 
--(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
     return [self.listOfTeams count];
 }
 
@@ -110,7 +106,7 @@
 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil) {
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
+        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
     }
 
     NSUInteger row = [indexPath row];
@@ -122,12 +118,11 @@
 }
 
 // delete the row and the file
--(void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
     NSUInteger row = [indexPath row];
 
     NSString *teamFile = [[NSString alloc] initWithFormat:@"%@/%@",TEAMS_DIRECTORY(),[self.listOfTeams objectAtIndex:row]];
     [[NSFileManager defaultManager] removeItemAtPath:teamFile error:NULL];
-    [teamFile release];
 
     [self.listOfTeams removeObjectAtIndex:row];
     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
@@ -136,7 +131,7 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {
     SingleTeamViewController *singleTeamViewController = [[SingleTeamViewController alloc] initWithStyle:UITableViewStyleGrouped];
     
@@ -148,7 +143,6 @@
     [singleTeamViewController.tableView setContentOffset:CGPointMake(0,0) animated:NO];
 
     [self.navigationController pushViewController:singleTeamViewController animated:YES];
-    [singleTeamViewController release];
     
     [tableView deselectRowAtIndexPath:indexPath animated:YES];
 }
@@ -156,26 +150,13 @@
 
 #pragma mark -
 #pragma mark Memory management
--(void) didReceiveMemoryWarning
+
+- (void)didReceiveMemoryWarning
 {
     // Releases the view if it doesn't have a superview.
     [super didReceiveMemoryWarning];
     // Relinquish ownership any cached data, images, etc that aren't in use.
 }
 
--(void) viewDidUnload
-{
-    self.listOfTeams = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
-}
-
--(void) dealloc
-{
-    releaseAndNil(listOfTeams);
-    [super dealloc];
-}
-
-
 @end
 
--- a/project_files/HedgewarsMobile/Classes/UIImageExtra.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/UIImageExtra.h	Sun Jun 10 19:01:50 2018 +0200
@@ -22,17 +22,17 @@
 
 @interface UIImage (extra)
 
-+(UIImage *)whiteImage:(CGSize) ofSize;
-+(UIImage *)drawHogsRepeated:(NSInteger) manyTimes;
-+(CGSize) imageSizeFromMetadataOf:(NSString *)aFileName;
++ (UIImage *)whiteImage:(CGSize)ofSize;
++ (UIImage *)drawHogsRepeated:(NSInteger)manyTimes;
++ (CGSize)imageSizeFromMetadataOf:(NSString *)aFileName;
 
--(UIImage *)scaleToSize:(CGSize) size;
--(UIImage *)mergeWith:(UIImage *)secondImage atPoint:(CGPoint) secondImagePoint;
--(id) initWithContentsOfFile:(NSString *)path andCutAt:(CGRect) rect;
--(UIImage *)cutAt:(CGRect) rect;
--(UIImage *)convertToGrayScale;
--(UIImage *)convertToNegative;
--(UIImage *)maskImageWith:(UIImage *)maskImage;
--(UIImage *)makeRoundCornersOfSize:(CGSize) sizewh;
+- (UIImage *)scaleToSize:(CGSize)size;
+- (UIImage *)mergeWith:(UIImage *)secondImage atPoint:(CGPoint)secondImagePoint;
+- (id)initWithContentsOfFile:(NSString *)path andCutAt:(CGRect)rect;
+- (UIImage *)cutAt:(CGRect)rect;
+- (UIImage *)convertToGrayScale;
+- (UIImage *)convertToNegative;
+- (UIImage *)maskImageWith:(UIImage *)maskImage;
+- (UIImage *)makeRoundCornersOfSize:(CGSize)sizewh;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/UIImageExtra.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/UIImageExtra.m	Sun Jun 10 19:01:50 2018 +0200
@@ -22,7 +22,7 @@
 
 @implementation UIImage (extra)
 
--(UIImage *)scaleToSize:(CGSize) size {
+- (UIImage *)scaleToSize:(CGSize)size {
     // Create a bitmap graphics context; this will also set it as the current context
     CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
     CGContextRef context = CGBitmapContextCreate(NULL, size.width, size.height, 8, 4 * size.width, colorSpace, kCGImageAlphaPremultipliedFirst);
@@ -49,7 +49,7 @@
     return resultImage;
 }
 
--(UIImage *)mergeWith:(UIImage *)secondImage atPoint:(CGPoint) secondImagePoint {
+- (UIImage *)mergeWith:(UIImage *)secondImage atPoint:(CGPoint)secondImagePoint {
     if (secondImage == nil) {
         DLog(@"Warning, secondImage == nil");
         return self;
@@ -90,7 +90,7 @@
     return resultImage;
 }
 
--(id) initWithContentsOfFile:(NSString *)path andCutAt:(CGRect) rect {
+- (id)initWithContentsOfFile:(NSString *)path andCutAt:(CGRect)rect {
     // load image from path
     UIImage *image = [[UIImage alloc] initWithContentsOfFile: path];
 
@@ -99,7 +99,6 @@
         CGImageRef cgImage = CGImageCreateWithImageInRect([image CGImage], rect);
 
         // clean memory
-        [image release];
 
         // create a UIImage from the CGImage (memory must be allocated already)
         UIImage *sprite = [self initWithCGImage:cgImage];
@@ -115,7 +114,7 @@
     }
 }
 
--(UIImage *)cutAt:(CGRect) rect {
+- (UIImage *)cutAt:(CGRect)rect {
     CGImageRef cgImage = CGImageCreateWithImageInRect([self CGImage], rect);
 
     UIImage *res = [UIImage imageWithCGImage:cgImage];
@@ -124,7 +123,7 @@
     return res;
 }
 
--(UIImage *)convertToGrayScale {
+- (UIImage *)convertToGrayScale {
     // Create image rectangle with current image width/height
     CGRect imageRect = CGRectMake(0, 0, self.size.width, self.size.height);
 
@@ -197,7 +196,7 @@
     CGContextRestoreGState(context);
 }
 
--(UIImage *)makeRoundCornersOfSize:(CGSize) sizewh {
+- (UIImage *)makeRoundCornersOfSize:(CGSize)sizewh {
     CGFloat cornerWidth = sizewh.width;
     CGFloat cornerHeight = sizewh.height;
     CGFloat screenScale = [[UIScreen mainScreen] safeScale];
@@ -230,7 +229,7 @@
 }
 
 // by http://www.sixtemia.com/journal/2010/06/23/uiimage-negative-color-effect/
--(UIImage *)convertToNegative {
+- (UIImage *)convertToNegative {
     UIGraphicsBeginImageContext(self.size);
     CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeCopy);
     [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)];
@@ -243,7 +242,7 @@
     return result;
 }
 
-+(UIImage *)whiteImage:(CGSize) ofSize {
++ (UIImage *)whiteImage:(CGSize)ofSize {
     CGFloat w = ofSize.width;
     CGFloat h = ofSize.height;
     DLog(@"w: %f, h: %f", w, h);
@@ -264,10 +263,9 @@
     return bkgImg;
 }
 
-+(UIImage *)drawHogsRepeated:(NSInteger) manyTimes {
++ (UIImage *)drawHogsRepeated:(NSInteger)manyTimes {
     NSString *imgString = [[NSString alloc] initWithFormat:@"%@/hedgehog.png",[[NSBundle mainBundle] resourcePath]];
     UIImage *hogSprite = [[UIImage alloc] initWithContentsOfFile:imgString];
-    [imgString release];
     CGFloat screenScale = [[UIScreen mainScreen] safeScale];
     int w = hogSprite.size.width * screenScale;
     int h = hogSprite.size.height * screenScale;
@@ -277,7 +275,6 @@
     // draw the two images in the current context
     for (int i = 0; i < manyTimes; i++)
         CGContextDrawImage(context, CGRectMake(i*8*screenScale, 0, w, h), [hogSprite CGImage]);
-    [hogSprite release];
 
     // Create bitmap image info from pixel data in current context
     CGImageRef imageRef = CGBitmapContextCreateImage(context);
@@ -299,7 +296,7 @@
 
 // this routine checks for the PNG size without loading it in memory
 // https://github.com/steipete/PSFramework/blob/master/PSFramework%20Version%200.3/PhotoshopFramework/PSMetaDataFunctions.m
-+(CGSize) imageSizeFromMetadataOf:(NSString *)aFileName {
++ (CGSize)imageSizeFromMetadataOf:(NSString *)aFileName {
     // File Name to C String.
     const char *fileName = [aFileName UTF8String];
     // source file
--- a/project_files/HedgewarsMobile/Classes/VoicesViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/VoicesViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -31,8 +31,8 @@
     int lastChannel;
 }
 
-@property (nonatomic,retain) NSMutableDictionary *teamDictionary;
-@property (nonatomic,retain) NSArray *voiceArray;
-@property (nonatomic,retain) NSIndexPath *lastIndexPath;
+@property (nonatomic, strong) NSMutableDictionary *teamDictionary;
+@property (nonatomic, strong) NSArray *voiceArray;
+@property (nonatomic, strong) NSIndexPath *lastIndexPath;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/VoicesViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/VoicesViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -24,13 +24,13 @@
 @synthesize teamDictionary, voiceArray, lastIndexPath;
 
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 #pragma mark -
 #pragma mark View lifecycle
--(void) viewDidLoad {
+- (void)viewDidLoad {
     [super viewDidLoad];
 
     voiceBeingPlayed = NULL;
@@ -43,19 +43,19 @@
     self.title = NSLocalizedString(@"Set hedgehog voices",@"");
 }
 
--(void) viewWillAppear:(BOOL)animated {
+- (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
 
     // this moves the tableview to the top
     [self.tableView setContentOffset:CGPointMake(0,0) animated:NO];
 }
 
--(void) viewDidAppear:(BOOL)animated {
+- (void)viewDidAppear:(BOOL)animated {
     [super viewDidAppear:animated];
     Mix_OpenAudio(44100, 0x8010, 1, 1024);
 }
 
--(void) viewDidDisappear:(BOOL)animated {
+- (void)viewDidDisappear:(BOOL)animated {
     [super viewDidDisappear:animated];
     if(voiceBeingPlayed != NULL) {
         Mix_HaltChannel(lastChannel);
@@ -68,11 +68,11 @@
 
 #pragma mark -
 #pragma mark Table view data source
--(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
     return 1;
 }
 
--(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
     return [self.voiceArray count];
 }
 
@@ -83,7 +83,7 @@
 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil) {
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
+        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
     }
 
     NSString *voice = [[voiceArray objectAtIndex:[indexPath row]] stringByDeletingPathExtension];
@@ -102,7 +102,7 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     NSInteger newRow = [indexPath row];
     NSInteger oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;
 
@@ -131,14 +131,14 @@
     int index = arc4random_uniform((int)[array count]);
 
     voiceBeingPlayed = Mix_LoadWAV([[voiceDir stringByAppendingString:[array objectAtIndex:index]] UTF8String]);
-    [voiceDir release];
     lastChannel = Mix_PlayChannel(-1, voiceBeingPlayed, 0);
 }
 
 
 #pragma mark -
 #pragma mark Memory management
--(void) didReceiveMemoryWarning {
+
+- (void)didReceiveMemoryWarning {
     if (voiceBeingPlayed != NULL) {
         Mix_HaltChannel(lastChannel);
         Mix_FreeChunk(voiceBeingPlayed);
@@ -149,26 +149,13 @@
     [super didReceiveMemoryWarning];
 }
 
--(void) viewDidUnload {
+- (void)dealloc {
     if (voiceBeingPlayed != NULL) {
         Mix_HaltChannel(lastChannel);
         Mix_FreeChunk(voiceBeingPlayed);
         voiceBeingPlayed = NULL;
     }
-    self.lastIndexPath = nil;
-    self.teamDictionary = nil;
-    self.voiceArray = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
 }
 
--(void) dealloc {
-    releaseAndNil(voiceArray);
-    releaseAndNil(teamDictionary);
-    releaseAndNil(lastIndexPath);
-    [super dealloc];
-}
-
-
 @end
 
--- a/project_files/HedgewarsMobile/Classes/WeaponCellView.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/WeaponCellView.h	Sun Jun 10 19:01:50 2018 +0200
@@ -22,12 +22,12 @@
 
 @protocol WeaponButtonControllerDelegate <NSObject>
 
--(void) updateValues:(NSArray *)withArray atIndex:(NSInteger) index;
+- (void)updateValues:(NSArray *)withArray atIndex:(NSInteger)index;
 
 @end
 
 @interface WeaponCellView : UITableViewCell {
-    id<WeaponButtonControllerDelegate> delegate;
+    id<WeaponButtonControllerDelegate> __weak delegate;
     UILabel *weaponName;
     UIImageView *weaponIcon;
 
@@ -50,26 +50,26 @@
     UILabel *helpLabel;
 }
 
-@property (nonatomic,assign) id<WeaponButtonControllerDelegate> delegate;
+@property (nonatomic, weak) id<WeaponButtonControllerDelegate> delegate;
 
-@property (nonatomic,retain) UILabel *weaponName;
-@property (nonatomic,retain) UIImageView *weaponIcon;
+@property (nonatomic, strong) UILabel *weaponName;
+@property (nonatomic, strong) UIImageView *weaponIcon;
 
-@property (nonatomic,retain) UISlider *initialSli;
-@property (nonatomic,retain) UISlider *probabilitySli;
-@property (nonatomic,retain) UISlider *delaySli;
-@property (nonatomic,retain) UISlider *crateSli;
+@property (nonatomic, strong) UISlider *initialSli;
+@property (nonatomic, strong) UISlider *probabilitySli;
+@property (nonatomic, strong) UISlider *delaySli;
+@property (nonatomic, strong) UISlider *crateSli;
 
-@property (nonatomic,retain) UIImageView *initialImg;
-@property (nonatomic,retain) UIImageView *probabilityImg;
-@property (nonatomic,retain) UIImageView *delayImg;
-@property (nonatomic,retain) UIImageView *crateImg;
+@property (nonatomic, strong) UIImageView *initialImg;
+@property (nonatomic, strong) UIImageView *probabilityImg;
+@property (nonatomic, strong) UIImageView *delayImg;
+@property (nonatomic, strong) UIImageView *crateImg;
 
-@property (nonatomic,retain) UILabel *initialLab;
-@property (nonatomic,retain) UILabel *probabilityLab;
-@property (nonatomic,retain) UILabel *delayLab;
-@property (nonatomic,retain) UILabel *crateLab;
+@property (nonatomic, strong) UILabel *initialLab;
+@property (nonatomic, strong) UILabel *probabilityLab;
+@property (nonatomic, strong) UILabel *delayLab;
+@property (nonatomic, strong) UILabel *crateLab;
 
-@property (nonatomic,retain) UILabel *helpLabel;
+@property (nonatomic, strong) UILabel *helpLabel;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/WeaponCellView.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/WeaponCellView.m	Sun Jun 10 19:01:50 2018 +0200
@@ -24,7 +24,7 @@
 @synthesize delegate, weaponName, weaponIcon, initialSli, probabilitySli, delaySli, crateSli, helpLabel,
             initialImg, probabilityImg, delayImg, crateImg, initialLab, probabilityLab, delayLab, crateLab;
 
--(id) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
+- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
     if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
         delegate = nil;
 
@@ -67,16 +67,12 @@
 
         NSString *imgAmmoStr = [[NSString alloc] initWithFormat:@"%@/ammopic.png",ICONS_DIRECTORY()];
         initialImg = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:imgAmmoStr]];
-        [imgAmmoStr release];
         NSString *imgDamageStr = [[NSString alloc] initWithFormat:@"%@/iconDamage.png",ICONS_DIRECTORY()];
         probabilityImg = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:imgDamageStr]];
-        [imgDamageStr release];
         NSString *imgTimeStr = [[NSString alloc] initWithFormat:@"%@/iconTime.png",ICONS_DIRECTORY()];
         delayImg = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:imgTimeStr]];
-        [imgTimeStr release];
         NSString *imgBoxStr = [[NSString alloc] initWithFormat:@"%@/iconBox.png",ICONS_DIRECTORY()];
         crateImg = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:imgBoxStr]];
-        [imgBoxStr release];
 
         initialLab = [[UILabel alloc] init];
         initialLab.backgroundColor = [UIColor clearColor];
@@ -128,7 +124,7 @@
     return self;
 }
 
--(void) layoutSubviews {
+- (void)layoutSubviews {
     [super layoutSubviews];
 
     CGFloat hOffset = 80;
@@ -186,13 +182,13 @@
 }
 
 /*
--(void) setSelected:(BOOL)selected animated:(BOOL)animated {
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
     [super setSelected:selected animated:animated];
     // Configure the view for the selected state
 }
 */
 
--(void) valueChanged:(id) sender {
+- (void)valueChanged:(id)sender {
     if (self.delegate != nil) {
         initialLab.text = ((int)initialSli.value == 9) ? @"∞" : [NSString stringWithFormat:@"%d",(int)initialSli.value];
         probabilityLab.text = ((int)probabilitySli.value == 9) ? @"∞" : [NSString stringWithFormat:@"%d",(int)probabilitySli.value];
@@ -209,7 +205,7 @@
         DLog(@"error - delegate = nil!");
 }
 
--(void) startDragging:(id) sender {
+- (void)startDragging:(id)sender {
     UISlider *slider = (UISlider *)sender;
     NSString *str = nil;
 
@@ -242,28 +238,8 @@
     self.helpLabel.text = str;
 }
 
--(void) stopDragging:(id) sender {
+- (void)stopDragging:(id)sender {
     self.helpLabel.text = @"";
 }
 
--(void) dealloc {
-    self.delegate = nil;
-    releaseAndNil(weaponName);
-    releaseAndNil(weaponIcon);
-    releaseAndNil(initialSli);
-    releaseAndNil(probabilitySli);
-    releaseAndNil(delaySli);
-    releaseAndNil(crateSli);
-    releaseAndNil(initialImg);
-    releaseAndNil(probabilityImg);
-    releaseAndNil(delayImg);
-    releaseAndNil(crateImg);
-    releaseAndNil(initialLab);
-    releaseAndNil(probabilityLab);
-    releaseAndNil(delayLab);
-    releaseAndNil(crateLab);
-    releaseAndNil(helpLabel);
-    [super dealloc];
-}
-
 @end
--- a/project_files/HedgewarsMobile/Classes/WeaponSettingsViewController.h	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/WeaponSettingsViewController.h	Sun Jun 10 19:01:50 2018 +0200
@@ -24,6 +24,6 @@
     NSMutableArray *listOfWeapons;
 }
 
-@property (nonatomic, retain) NSMutableArray *listOfWeapons;
+@property (nonatomic, strong) NSMutableArray *listOfWeapons;
 
 @end
--- a/project_files/HedgewarsMobile/Classes/WeaponSettingsViewController.m	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Classes/WeaponSettingsViewController.m	Sun Jun 10 19:01:50 2018 +0200
@@ -24,13 +24,13 @@
 @implementation WeaponSettingsViewController
 @synthesize listOfWeapons;
 
--(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
     return rotationManager(interfaceOrientation);
 }
 
 #pragma mark -
 #pragma mark View lifecycle
--(void) viewDidLoad {
+- (void)viewDidLoad {
     [super viewDidLoad];
 
     UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Edit",@"")
@@ -38,24 +38,22 @@
                                                                   target:self
                                                                   action:@selector(toggleEdit:)];
     self.navigationItem.rightBarButtonItem = editButton;
-    [editButton release];
 
     self.navigationItem.title = NSLocalizedString(@"List of weapons", nil);
 }
 
--(void) viewWillAppear:(BOOL) animated {
+- (void)viewWillAppear:(BOOL) animated {
     [super viewWillAppear:animated];
 
     NSArray *contentsOfDir = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:WEAPONS_DIRECTORY() error:NULL];
     NSMutableArray *array = [[NSMutableArray alloc] initWithArray:contentsOfDir copyItems:YES];
     self.listOfWeapons = array;
-    [array release];
 
     [self.tableView reloadData];
 }
 
 // modifies the navigation bar to add the "Add" and "Done" buttons
--(void) toggleEdit:(id) sender {
+- (void)toggleEdit:(id)sender {
     BOOL isEditing = self.tableView.editing;
     [self.tableView setEditing:!isEditing animated:YES];
 
@@ -71,11 +69,10 @@
                                                                      target:self
                                                                      action:@selector(addWeapon:)];
         self.navigationItem.leftBarButtonItem = addButton;
-        [addButton release];
     }
 }
 
--(void) addWeapon:(id) sender {
+- (void)addWeapon:(id)sender {
     NSString *fileName = [[NSString alloc] initWithFormat:@"Weapon %u.plist", [self.listOfWeapons count]];
 
     [CreationChamber createWeaponNamed:[fileName stringByDeletingPathExtension]];
@@ -88,7 +85,6 @@
 
     NSInteger index = [self.listOfWeapons indexOfObject:fileName];
     [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0] atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
-    [fileName release];
 }
 
 #pragma mark -
@@ -106,7 +102,7 @@
 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil) {
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
+        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
     }
 
     NSUInteger row = [indexPath row];
@@ -118,12 +114,11 @@
 }
 
 // delete the row and the file
--(void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
+- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
     NSUInteger row = [indexPath row];
 
     NSString *schemeFile = [[NSString alloc] initWithFormat:@"%@/%@",WEAPONS_DIRECTORY(),[self.listOfWeapons objectAtIndex:row]];
     [[NSFileManager defaultManager] removeItemAtPath:schemeFile error:NULL];
-    [schemeFile release];
 
     [self.listOfWeapons removeObjectAtIndex:row];
     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
@@ -131,7 +126,7 @@
 
 #pragma mark -
 #pragma mark Table view delegate
--(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {
     SingleWeaponViewController *singleWeaponViewController = [[SingleWeaponViewController alloc] initWithStyle:UITableViewStyleGrouped];
 
@@ -143,7 +138,6 @@
     [singleWeaponViewController.tableView setContentOffset:CGPointMake(0,0) animated:NO];
 
     [self.navigationController pushViewController:singleWeaponViewController animated:YES];
-    [singleWeaponViewController release];
     
     [tableView deselectRowAtIndexPath:indexPath animated:YES];
 }
@@ -151,25 +145,12 @@
 
 #pragma mark -
 #pragma mark Memory management
+
 -(void)didReceiveMemoryWarning
 {
     [super didReceiveMemoryWarning];
-}
-
--(void) viewDidUnload
-{
-    self.listOfWeapons = nil;
-    MSG_DIDUNLOAD();
-    [super viewDidUnload];
+    MSG_MEMCLEAN();
 }
 
-
--(void) dealloc
-{
-    releaseAndNil(listOfWeapons);
-    [super dealloc];
-}
-
-
 @end
 
Binary file project_files/HedgewarsMobile/Default-568h@2x.png has changed
--- a/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj	Sun Jun 10 19:01:50 2018 +0200
@@ -33,8 +33,6 @@
 		610782971440EE5C00645B29 /* credits.plist in Resources */ = {isa = PBXBuildFile; fileRef = 610782941440EE5C00645B29 /* credits.plist */; };
 		610782981440EE5C00645B29 /* gameMods.plist in Resources */ = {isa = PBXBuildFile; fileRef = 610782951440EE5C00645B29 /* gameMods.plist */; };
 		610C8E3714E018D200CF5C4C /* MNEValueTrackingSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = 610C8E3614E018D200CF5C4C /* MNEValueTrackingSlider.m */; };
-		610D5FB21270E2660033333A /* Icon-Small@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 61F7A43411E290650040BA66 /* Icon-Small@2x.png */; };
-		610D5FB31270E26C0033333A /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 61F7A43611E290650040BA66 /* Icon@2x.png */; };
 		610FB7C81661390E002FB2A7 /* uPhysFSLayer.pas in Sources */ = {isa = PBXBuildFile; fileRef = 610FB7C71661390E002FB2A7 /* uPhysFSLayer.pas */; };
 		61156521147F48B6006729A9 /* About.strings in Resources */ = {isa = PBXBuildFile; fileRef = 61156520147F48B6006729A9 /* About.strings */; };
 		61156523147F48B7006729A9 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 61156522147F48B7006729A9 /* Localizable.strings */; };
@@ -44,8 +42,6 @@
 		61188BF712A6FE5A0026C5DA /* backButton@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 6172FED31298CE6600D73365 /* backButton@2x.png */; };
 		61188BF812A6FE5C0026C5DA /* background@2x~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = 6172FED61298CF9800D73365 /* background@2x~iphone.png */; };
 		61188BF912A6FE5D0026C5DA /* checkbox@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 615FEAD912A2A4C10098EE92 /* checkbox@2x.png */; };
-		61188BFB12A6FE610026C5DA /* Default-ipad-Landscape.png in Resources */ = {isa = PBXBuildFile; fileRef = 6183D83C11E2BCE200A88903 /* Default-ipad-Landscape.png */; };
-		61188BFC12A6FE630026C5DA /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 6172FEA21298C7F900D73365 /* Default@2x.png */; };
 		61188BFD12A6FE730026C5DA /* fb@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 6103D383129B346A00911D8D /* fb@2x.png */; };
 		61188BFE12A6FE7C0026C5DA /* irc@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 6103D384129B347700911D8D /* irc@2x.png */; };
 		61188C0212A6FE840026C5DA /* localplayButton@2x~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = 615FEADE12A2A6640098EE92 /* localplayButton@2x~iphone.png */; };
@@ -74,9 +70,9 @@
 		615AD9EB1207654E00F2FF04 /* helpButton.png in Resources */ = {isa = PBXBuildFile; fileRef = 615AD9EA1207654E00F2FF04 /* helpButton.png */; };
 		615BE3D4155C5DDF003CA34D /* uInputHandler.pas in Sources */ = {isa = PBXBuildFile; fileRef = 615BE3D3155C5DDF003CA34D /* uInputHandler.pas */; };
 		615E755A14E41E8C00FBA131 /* MXAudioPlayerFadeOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 615E755914E41E8C00FBA131 /* MXAudioPlayerFadeOperation.m */; };
-		615E76BC14E4421200FBA131 /* MGSplitCornersView.m in Sources */ = {isa = PBXBuildFile; fileRef = 615E76B714E4421200FBA131 /* MGSplitCornersView.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; };
-		615E76BD14E4421200FBA131 /* MGSplitDividerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 615E76B914E4421200FBA131 /* MGSplitDividerView.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; };
-		615E76BE14E4421200FBA131 /* MGSplitViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 615E76BB14E4421200FBA131 /* MGSplitViewController.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; };
+		615E76BC14E4421200FBA131 /* MGSplitCornersView.m in Sources */ = {isa = PBXBuildFile; fileRef = 615E76B714E4421200FBA131 /* MGSplitCornersView.m */; };
+		615E76BD14E4421200FBA131 /* MGSplitDividerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 615E76B914E4421200FBA131 /* MGSplitDividerView.m */; };
+		615E76BE14E4421200FBA131 /* MGSplitViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 615E76BB14E4421200FBA131 /* MGSplitViewController.m */; };
 		615FEAE212A2A6640098EE92 /* localplayButton~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 615FEADF12A2A6640098EE92 /* localplayButton~ipad.png */; };
 		615FEAE312A2A6640098EE92 /* localplayButton~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = 615FEAE012A2A6640098EE92 /* localplayButton~iphone.png */; };
 		616065A8159A71FD00CFAEF4 /* hwclassic.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 616065A7159A71FD00CFAEF4 /* hwclassic.mp3 */; };
@@ -203,7 +199,6 @@
 		61A4A39D12A5CCC2004D81E6 /* uUtils.pas in Sources */ = {isa = PBXBuildFile; fileRef = 61A4A39212A5CCC2004D81E6 /* uUtils.pas */; };
 		61A4A39E12A5CCC2004D81E6 /* uVariables.pas in Sources */ = {isa = PBXBuildFile; fileRef = 61A4A39312A5CCC2004D81E6 /* uVariables.pas */; };
 		61A4A3A212A5CD56004D81E6 /* uCaptions.pas in Sources */ = {isa = PBXBuildFile; fileRef = 61A4A3A112A5CD56004D81E6 /* uCaptions.pas */; };
-		61A670C012747D9B00B06CE7 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 6183D83D11E2BCE200A88903 /* Default.png */; };
 		61A670C112747DB900B06CE7 /* MainMenuViewController-iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6165924C11CA9CB400D6E256 /* MainMenuViewController-iPhone.xib */; };
 		61A670C212747DBD00B06CE7 /* MapConfigViewController-iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6165924E11CA9CB400D6E256 /* MapConfigViewController-iPhone.xib */; };
 		61A976B3136F668500DD9878 /* uCursor.pas in Sources */ = {isa = PBXBuildFile; fileRef = 61A976B2136F668500DD9878 /* uCursor.pas */; };
@@ -233,15 +228,12 @@
 		61F2E7CF1205EDE0005734F7 /* AboutViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 61F2E7CD1205EDE0005734F7 /* AboutViewController.xib */; };
 		61F2E7EC12060E31005734F7 /* checkbox.png in Resources */ = {isa = PBXBuildFile; fileRef = 61F2E7EB12060E31005734F7 /* checkbox.png */; };
 		61F544C712AF1748007FD913 /* HoldTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 61F544C612AF1748007FD913 /* HoldTableViewCell.m */; };
-		61F7A43811E290650040BA66 /* Icon-72.png in Resources */ = {isa = PBXBuildFile; fileRef = 61F7A43111E290650040BA66 /* Icon-72.png */; };
-		61F7A43911E290650040BA66 /* Icon-Small-50.png in Resources */ = {isa = PBXBuildFile; fileRef = 61F7A43211E290650040BA66 /* Icon-Small-50.png */; };
-		61F7A43A11E290650040BA66 /* Icon-Small.png in Resources */ = {isa = PBXBuildFile; fileRef = 61F7A43311E290650040BA66 /* Icon-Small.png */; };
-		61F7A43C11E290650040BA66 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 61F7A43511E290650040BA66 /* Icon.png */; };
-		61F7A43E11E290650040BA66 /* iTunesArtwork.png in Resources */ = {isa = PBXBuildFile; fileRef = 61F7A43711E290650040BA66 /* iTunesArtwork.png */; };
 		61F9040911DF58B00068B24D /* settingsButton.png in Resources */ = {isa = PBXBuildFile; fileRef = 61F9040811DF58B00068B24D /* settingsButton.png */; };
 		61F9040B11DF59370068B24D /* background.png in Resources */ = {isa = PBXBuildFile; fileRef = 61F9040A11DF59370068B24D /* background.png */; };
 		61F904D711DF7DA30068B24D /* WeaponCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 61F904D611DF7DA30068B24D /* WeaponCellView.m */; };
 		922F64900F10F53100DC6EC0 /* libfpc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 928301170F10CAFC00CC5A3C /* libfpc.a */; };
+		EED893BD205DA16F00FED432 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EED893BC205DA16F00FED432 /* Images.xcassets */; };
+		EED893CB205DBD4000FED432 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = EED893CA205DBD4000FED432 /* LaunchScreen.xib */; };
 		F60ACBB71C7BC08B00385701 /* IniParser.m in Sources */ = {isa = PBXBuildFile; fileRef = F60ACBB61C7BC08B00385701 /* IniParser.m */; };
 		F60D04771BD137B5003ACB00 /* bullet_filled.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D04631BD137B5003ACB00 /* bullet_filled.png */; };
 		F60D04781BD137B5003ACB00 /* bullet_filled@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F60D04641BD137B5003ACB00 /* bullet_filled@2x.png */; };
@@ -275,15 +267,11 @@
 		F65724FF1B7E784700A86262 /* helpleft.png in Resources */ = {isa = PBXBuildFile; fileRef = F65724FA1B7E784700A86262 /* helpleft.png */; };
 		F65725001B7E784700A86262 /* helpplain.png in Resources */ = {isa = PBXBuildFile; fileRef = F65724FB1B7E784700A86262 /* helpplain.png */; };
 		F65725011B7E784700A86262 /* helpright.png in Resources */ = {isa = PBXBuildFile; fileRef = F65724FC1B7E784700A86262 /* helpright.png */; };
-		F65E1DBF1B9B95A400A78ADF /* Icon-60@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F65E1DBC1B9B95A400A78ADF /* Icon-60@2x.png */; };
-		F65E1DC01B9B95A400A78ADF /* Icon-76.png in Resources */ = {isa = PBXBuildFile; fileRef = F65E1DBD1B9B95A400A78ADF /* Icon-76.png */; };
-		F65E1DC11B9B95A400A78ADF /* Icon-76@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F65E1DBE1B9B95A400A78ADF /* Icon-76@2x.png */; };
 		F6756D801BD8550500B6AB6B /* LabelWithIBLocalization.m in Sources */ = {isa = PBXBuildFile; fileRef = F6756D7F1BD8550500B6AB6B /* LabelWithIBLocalization.m */; };
-		F67FC8121BEC06E700A9DC75 /* Appirater.m in Sources */ = {isa = PBXBuildFile; fileRef = F67FC8101BEC06E700A9DC75 /* Appirater.m */; settings = {COMPILER_FLAGS = "-fobjc-arc"; }; };
+		F67FC8121BEC06E700A9DC75 /* Appirater.m in Sources */ = {isa = PBXBuildFile; fileRef = F67FC8101BEC06E700A9DC75 /* Appirater.m */; };
 		F67FC8141BEC072B00A9DC75 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F67FC8131BEC072B00A9DC75 /* StoreKit.framework */; };
 		F67FC8161BEC17AC00A9DC75 /* Appirater.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F67FC8151BEC17AC00A9DC75 /* Appirater.bundle */; };
 		F6BA38461BA7A834005D16EA /* GameLogViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6BA38451BA7A834005D16EA /* GameLogViewController.m */; };
-		F6D7E09F1B76884E004F3BCF /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F6D7E09E1B76884E004F3BCF /* Default-568h@2x.png */; };
 		F6D7E0C21B768F19004F3BCF /* uLandGenPerlin.pas in Sources */ = {isa = PBXBuildFile; fileRef = F6D7E0BF1B768F19004F3BCF /* uLandGenPerlin.pas */; };
 		F6D7E0C31B768F19004F3BCF /* uLandGenTemplateBased.pas in Sources */ = {isa = PBXBuildFile; fileRef = F6D7E0C01B768F19004F3BCF /* uLandGenTemplateBased.pas */; };
 		F6D7E0C41B768F19004F3BCF /* uLandUtils.pas in Sources */ = {isa = PBXBuildFile; fileRef = F6D7E0C11B768F19004F3BCF /* uLandUtils.pas */; };
@@ -429,6 +417,13 @@
 			remoteGlobalIDString = 928301160F10CAFC00CC5A3C;
 			remoteInfo = fpc;
 		};
+		EE3DE44D1FF6BF1100E2DF37 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 61A19AE314D2010A004B1E6D /* SDL.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = FAB598141BB5C1B100BE72C5;
+			remoteInfo = "libSDL-tv";
+		};
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXFileReference section */
@@ -451,24 +446,24 @@
 		610C8E3514E018D200CF5C4C /* MNEValueTrackingSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MNEValueTrackingSlider.h; path = Classes/MNEValueTrackingSlider.h; sourceTree = "<group>"; };
 		610C8E3614E018D200CF5C4C /* MNEValueTrackingSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MNEValueTrackingSlider.m; path = Classes/MNEValueTrackingSlider.m; sourceTree = "<group>"; };
 		610FB7C71661390E002FB2A7 /* uPhysFSLayer.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uPhysFSLayer.pas; path = ../../hedgewars/uPhysFSLayer.pas; sourceTree = SOURCE_ROOT; };
-		6115651A147F48AE006729A9 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = Locale/English.lproj/About.strings; sourceTree = "<group>"; };
-		6115651B147F48AE006729A9 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = Locale/English.lproj/Localizable.strings; sourceTree = "<group>"; };
-		6115651C147F48AE006729A9 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = Locale/English.lproj/Scheme.strings; sourceTree = "<group>"; };
-		61156526147F49E1006729A9 /* Spanish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Spanish; path = Locale/Spanish.lproj/About.strings; sourceTree = "<group>"; };
-		61156527147F4A2E006729A9 /* Spanish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Spanish; path = Locale/Spanish.lproj/Localizable.strings; sourceTree = "<group>"; };
-		61156528147F4A3C006729A9 /* Spanish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Spanish; path = Locale/Spanish.lproj/Scheme.strings; sourceTree = "<group>"; };
-		6115652B147F4C45006729A9 /* French */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = French; path = Locale/French.lproj/Scheme.strings; sourceTree = "<group>"; };
-		6115652C147F4C4C006729A9 /* French */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = French; path = Locale/French.lproj/Localizable.strings; sourceTree = "<group>"; };
-		6115652D147F4C52006729A9 /* French */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = French; path = Locale/French.lproj/About.strings; sourceTree = "<group>"; };
-		61156530147F4D10006729A9 /* Polish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Polish; path = Locale/Polish.lproj/About.strings; sourceTree = "<group>"; };
-		61156531147F4D17006729A9 /* Polish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Polish; path = Locale/Polish.lproj/Localizable.strings; sourceTree = "<group>"; };
-		61156532147F4D1E006729A9 /* Polish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Polish; path = Locale/Polish.lproj/Scheme.strings; sourceTree = "<group>"; };
-		61177BA7148A658900686905 /* German */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = German; path = Locale/German.lproj/Localizable.strings; sourceTree = "<group>"; };
-		61177BA9148A660C00686905 /* German */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = German; path = Locale/German.lproj/Scheme.strings; sourceTree = "<group>"; };
-		61177BAA148A661600686905 /* German */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = German; path = Locale/German.lproj/About.strings; sourceTree = "<group>"; };
-		61177BE4148B881C00686905 /* Danish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Danish; path = Locale/Danish.lproj/About.strings; sourceTree = "<group>"; };
-		61177BF0148B882500686905 /* Danish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Danish; path = Locale/Danish.lproj/Localizable.strings; sourceTree = "<group>"; };
-		61177BF1148B882F00686905 /* Danish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Danish; path = Locale/Danish.lproj/Scheme.strings; sourceTree = "<group>"; };
+		6115651A147F48AE006729A9 /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = Locale/en.lproj/About.strings; sourceTree = "<group>"; };
+		6115651B147F48AE006729A9 /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = Locale/en.lproj/Localizable.strings; sourceTree = "<group>"; };
+		6115651C147F48AE006729A9 /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = Locale/en.lproj/Scheme.strings; sourceTree = "<group>"; };
+		61156526147F49E1006729A9 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Locale/es.lproj/About.strings; sourceTree = "<group>"; };
+		61156527147F4A2E006729A9 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Locale/es.lproj/Localizable.strings; sourceTree = "<group>"; };
+		61156528147F4A3C006729A9 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Locale/es.lproj/Scheme.strings; sourceTree = "<group>"; };
+		6115652B147F4C45006729A9 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = Locale/fr.lproj/Scheme.strings; sourceTree = "<group>"; };
+		6115652C147F4C4C006729A9 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = Locale/fr.lproj/Localizable.strings; sourceTree = "<group>"; };
+		6115652D147F4C52006729A9 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = Locale/fr.lproj/About.strings; sourceTree = "<group>"; };
+		61156530147F4D10006729A9 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = Locale/pl.lproj/About.strings; sourceTree = "<group>"; };
+		61156531147F4D17006729A9 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = Locale/pl.lproj/Localizable.strings; sourceTree = "<group>"; };
+		61156532147F4D1E006729A9 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = Locale/pl.lproj/Scheme.strings; sourceTree = "<group>"; };
+		61177BA7148A658900686905 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Locale/de.lproj/Localizable.strings; sourceTree = "<group>"; };
+		61177BA9148A660C00686905 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Locale/de.lproj/Scheme.strings; sourceTree = "<group>"; };
+		61177BAA148A661600686905 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Locale/de.lproj/About.strings; sourceTree = "<group>"; };
+		61177BE4148B881C00686905 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = Locale/da.lproj/About.strings; sourceTree = "<group>"; };
+		61177BF0148B882500686905 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = Locale/da.lproj/Localizable.strings; sourceTree = "<group>"; };
+		61177BF1148B882F00686905 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = Locale/da.lproj/Scheme.strings; sourceTree = "<group>"; };
 		61177C00148B8BB100686905 /* uLandGenMaze.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uLandGenMaze.pas; path = ../../hedgewars/uLandGenMaze.pas; sourceTree = SOURCE_ROOT; };
 		61177C01148B8BB100686905 /* uLandOutline.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uLandOutline.pas; path = ../../hedgewars/uLandOutline.pas; sourceTree = SOURCE_ROOT; };
 		611D7A4F142FDCD3006E0798 /* uTouch.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uTouch.pas; path = ../../hedgewars/uTouch.pas; sourceTree = SOURCE_ROOT; };
@@ -485,9 +480,9 @@
 		612CABAA1391CE68005E9596 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
 		61370652117B1D50004EE44A /* Entitlements-Distribution.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Entitlements-Distribution.plist"; sourceTree = "<group>"; };
 		6147DAD21253DCDE0010357E /* savesButton.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = savesButton.png; path = Resources/Frontend/savesButton.png; sourceTree = "<group>"; };
-		6154A53114C37E4A00F6EEF6 /* Romanian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Romanian; path = Locale/Romanian.lproj/About.strings; sourceTree = "<group>"; };
-		6154A53E14C37E5400F6EEF6 /* Romanian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Romanian; path = Locale/Romanian.lproj/Localizable.strings; sourceTree = "<group>"; };
-		6154A54014C37EB100F6EEF6 /* Romanian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Romanian; path = Locale/Romanian.lproj/Scheme.strings; sourceTree = "<group>"; };
+		6154A53114C37E4A00F6EEF6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = Locale/ro.lproj/About.strings; sourceTree = "<group>"; };
+		6154A53E14C37E5400F6EEF6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = Locale/ro.lproj/Localizable.strings; sourceTree = "<group>"; };
+		6154A54014C37EB100F6EEF6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = Locale/ro.lproj/Scheme.strings; sourceTree = "<group>"; };
 		61589C5A144B4322007BFAA4 /* config.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = config.inc; sourceTree = "<group>"; };
 		615AD96112073B4D00F2FF04 /* startGameButton.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = startGameButton.png; path = Resources/Frontend/startGameButton.png; sourceTree = "<group>"; };
 		615AD9E8120764CA00F2FF04 /* backButton.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = backButton.png; path = Resources/Frontend/backButton.png; sourceTree = "<group>"; };
@@ -590,7 +585,6 @@
 		6167CA36142A6ED7003DD50F /* bot5@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "bot5@2x.png"; path = "Resources/Icons/bot5@2x.png"; sourceTree = "<group>"; };
 		6167CB46142A8769003DD50F /* basehat-hedgehog.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "basehat-hedgehog.png"; path = "Resources/Icons/basehat-hedgehog.png"; sourceTree = "<group>"; };
 		6167CB47142A8769003DD50F /* basehat-hedgehog@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "basehat-hedgehog@2x.png"; path = "Resources/Icons/basehat-hedgehog@2x.png"; sourceTree = "<group>"; };
-		6172FEA21298C7F900D73365 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "Resources/Icons/Default@2x.png"; sourceTree = "<group>"; };
 		6172FEC81298CE4800D73365 /* savesButton@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "savesButton@2x.png"; path = "Resources/Frontend/savesButton@2x.png"; sourceTree = "<group>"; };
 		6172FECA1298CE4E00D73365 /* settingsButton@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "settingsButton@2x.png"; path = "Resources/Frontend/settingsButton@2x.png"; sourceTree = "<group>"; };
 		6172FED31298CE6600D73365 /* backButton@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "backButton@2x.png"; path = "Resources/Frontend/backButton@2x.png"; sourceTree = "<group>"; };
@@ -635,15 +629,13 @@
 		6179880F114AA34C00BA94A9 /* uWorld.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uWorld.pas; path = ../../hedgewars/uWorld.pas; sourceTree = SOURCE_ROOT; };
 		61798934114AB25F00BA94A9 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
 		61798A5E114AE08600BA94A9 /* Data */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Data; sourceTree = SOURCE_ROOT; };
-		617BC22D1490210E00E1C294 /* Italian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Italian; path = Locale/Italian.lproj/About.strings; sourceTree = "<group>"; };
-		617BC2391490211500E1C294 /* Italian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Italian; path = Locale/Italian.lproj/Localizable.strings; sourceTree = "<group>"; };
-		617BC23A1490211F00E1C294 /* Italian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Italian; path = Locale/Italian.lproj/Scheme.strings; sourceTree = "<group>"; };
+		617BC22D1490210E00E1C294 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = Locale/it.lproj/About.strings; sourceTree = "<group>"; };
+		617BC2391490211500E1C294 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = Locale/it.lproj/Localizable.strings; sourceTree = "<group>"; };
+		617BC23A1490211F00E1C294 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = Locale/it.lproj/Scheme.strings; sourceTree = "<group>"; };
 		617D78D816D932310091D4D6 /* Physfs.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Physfs.xcodeproj; path = ../../misc/libphysfs/Xcode/Physfs.xcodeproj; sourceTree = SOURCE_ROOT; };
 		617D794316D933B00091D4D6 /* Physlayer.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Physlayer.xcodeproj; path = ../../misc/libphyslayer/Xcode/Physlayer.xcodeproj; sourceTree = SOURCE_ROOT; };
 		61806BDA170B963800C601BC /* weapons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = weapons.h; path = ../../QTfrontend/weapons.h; sourceTree = SOURCE_ROOT; };
 		61806BE0170B969D00C601BC /* hwconsts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = hwconsts.h; path = ../../QTfrontend/hwconsts.h; sourceTree = SOURCE_ROOT; };
-		6183D83C11E2BCE200A88903 /* Default-ipad-Landscape.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-ipad-Landscape.png"; path = "Resources/Icons/Default-ipad-Landscape.png"; sourceTree = "<group>"; };
-		6183D83D11E2BCE200A88903 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = Resources/Icons/Default.png; sourceTree = "<group>"; };
 		618899811299516000D55FD6 /* title@2x~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "title@2x~iphone.png"; path = "Resources/Frontend/title@2x~iphone.png"; sourceTree = "<group>"; };
 		61889984129995B500D55FD6 /* title~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "title~ipad.png"; path = "Resources/Frontend/title~ipad.png"; sourceTree = "<group>"; };
 		61915D58143A4E2C00299991 /* MissionTrainingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MissionTrainingViewController.h; sourceTree = "<group>"; };
@@ -658,9 +650,9 @@
 		6199E836124647DE00DADF8C /* SupportViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SupportViewController.h; sourceTree = "<group>"; };
 		6199E837124647DE00DADF8C /* SupportViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SupportViewController.m; sourceTree = "<group>"; };
 		6199E86C12464A8E00DADF8C /* surprise.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = surprise.png; path = Resources/surprise.png; sourceTree = "<group>"; };
-		619BCEC41495615700C1C409 /* Bulgarian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Bulgarian; path = Locale/Bulgarian.lproj/About.strings; sourceTree = "<group>"; };
-		619BCED01495615F00C1C409 /* Bulgarian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Bulgarian; path = Locale/Bulgarian.lproj/Localizable.strings; sourceTree = "<group>"; };
-		619BCED11495616700C1C409 /* Bulgarian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Bulgarian; path = Locale/Bulgarian.lproj/Scheme.strings; sourceTree = "<group>"; };
+		619BCEC41495615700C1C409 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = Locale/bg.lproj/About.strings; sourceTree = "<group>"; };
+		619BCED01495615F00C1C409 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = Locale/bg.lproj/Localizable.strings; sourceTree = "<group>"; };
+		619BCED11495616700C1C409 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = Locale/bg.lproj/Scheme.strings; sourceTree = "<group>"; };
 		619C5AF3124F7E3100D041AE /* LuaPas.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = LuaPas.pas; path = ../../hedgewars/LuaPas.pas; sourceTree = SOURCE_ROOT; };
 		619C5BA0124FA59000D041AE /* MapPreviewButtonView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MapPreviewButtonView.h; path = Classes/MapPreviewButtonView.h; sourceTree = "<group>"; };
 		619C5BA1124FA59000D041AE /* MapPreviewButtonView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MapPreviewButtonView.m; path = Classes/MapPreviewButtonView.m; sourceTree = "<group>"; };
@@ -694,16 +686,16 @@
 		61C079E311F35A300072BF46 /* EditableCellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EditableCellView.m; path = Classes/EditableCellView.m; sourceTree = "<group>"; };
 		61C28D3D142D380400DA16C2 /* AudioManagerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioManagerController.h; path = Classes/AudioManagerController.h; sourceTree = "<group>"; };
 		61C28D3E142D380400DA16C2 /* AudioManagerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AudioManagerController.m; path = Classes/AudioManagerController.m; sourceTree = "<group>"; };
-		61C6783F14B3DD020087425A /* Portuguese */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Portuguese; path = Locale/Portuguese.lproj/About.strings; sourceTree = "<group>"; };
-		61C6784B14B3DD0B0087425A /* Portuguese */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Portuguese; path = Locale/Portuguese.lproj/Localizable.strings; sourceTree = "<group>"; };
-		61C6784C14B3DD140087425A /* Portuguese */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Portuguese; path = Locale/Portuguese.lproj/Scheme.strings; sourceTree = "<group>"; };
+		61C6783F14B3DD020087425A /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = Locale/pt.lproj/About.strings; sourceTree = "<group>"; };
+		61C6784B14B3DD0B0087425A /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = Locale/pt.lproj/Localizable.strings; sourceTree = "<group>"; };
+		61C6784C14B3DD140087425A /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = Locale/pt.lproj/Scheme.strings; sourceTree = "<group>"; };
 		61CADE321402EE290030C3EB /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; };
 		61D08D7114AEA7FE0007C078 /* uGearsHedgehog.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uGearsHedgehog.pas; path = ../../hedgewars/uGearsHedgehog.pas; sourceTree = SOURCE_ROOT; };
 		61D08D7214AEA7FE0007C078 /* uGearsList.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uGearsList.pas; path = ../../hedgewars/uGearsList.pas; sourceTree = SOURCE_ROOT; };
 		61D08D7314AEA7FE0007C078 /* uGearsUtils.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uGearsUtils.pas; path = ../../hedgewars/uGearsUtils.pas; sourceTree = SOURCE_ROOT; };
-		61D08D8714AEA9670007C078 /* Japanese */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Japanese; path = Locale/Japanese.lproj/About.strings; sourceTree = "<group>"; };
-		61D08D8814AEA9700007C078 /* Japanese */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Japanese; path = Locale/Japanese.lproj/Localizable.strings; sourceTree = "<group>"; };
-		61D08D8914AEA9780007C078 /* Japanese */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Japanese; path = Locale/Japanese.lproj/Scheme.strings; sourceTree = "<group>"; };
+		61D08D8714AEA9670007C078 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Locale/ja.lproj/About.strings; sourceTree = "<group>"; };
+		61D08D8814AEA9700007C078 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Locale/ja.lproj/Localizable.strings; sourceTree = "<group>"; };
+		61D08D8914AEA9780007C078 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Locale/ja.lproj/Scheme.strings; sourceTree = "<group>"; };
 		61D0BDF71457508C0011A899 /* ExtraCategories.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExtraCategories.h; path = Classes/ExtraCategories.h; sourceTree = "<group>"; };
 		61D0BDF81457508C0011A899 /* ExtraCategories.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ExtraCategories.m; path = Classes/ExtraCategories.m; sourceTree = "<group>"; };
 		61D2059F127CDD1100ABD83E /* ObjcExports.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ObjcExports.h; path = Classes/ObjcExports.h; sourceTree = "<group>"; };
@@ -724,13 +716,6 @@
 		61F2E7EB12060E31005734F7 /* checkbox.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = checkbox.png; path = Resources/Icons/checkbox.png; sourceTree = "<group>"; };
 		61F544C512AF1748007FD913 /* HoldTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HoldTableViewCell.h; path = Classes/HoldTableViewCell.h; sourceTree = "<group>"; };
 		61F544C612AF1748007FD913 /* HoldTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HoldTableViewCell.m; path = Classes/HoldTableViewCell.m; sourceTree = "<group>"; };
-		61F7A43111E290650040BA66 /* Icon-72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-72.png"; path = "Resources/Icons/Icon-72.png"; sourceTree = "<group>"; };
-		61F7A43211E290650040BA66 /* Icon-Small-50.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-Small-50.png"; path = "Resources/Icons/Icon-Small-50.png"; sourceTree = "<group>"; };
-		61F7A43311E290650040BA66 /* Icon-Small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-Small.png"; path = "Resources/Icons/Icon-Small.png"; sourceTree = "<group>"; };
-		61F7A43411E290650040BA66 /* Icon-Small@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-Small@2x.png"; path = "Resources/Icons/Icon-Small@2x.png"; sourceTree = "<group>"; };
-		61F7A43511E290650040BA66 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon.png; path = Resources/Icons/Icon.png; sourceTree = "<group>"; };
-		61F7A43611E290650040BA66 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon@2x.png"; path = "Resources/Icons/Icon@2x.png"; sourceTree = "<group>"; };
-		61F7A43711E290650040BA66 /* iTunesArtwork.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = iTunesArtwork.png; path = Resources/Icons/iTunesArtwork.png; sourceTree = "<group>"; };
 		61F9040811DF58B00068B24D /* settingsButton.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = settingsButton.png; path = Resources/Frontend/settingsButton.png; sourceTree = "<group>"; };
 		61F9040A11DF59370068B24D /* background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = background.png; path = Resources/Frontend/background.png; sourceTree = "<group>"; };
 		61F9040D11DF59D10068B24D /* netplayButton.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = netplayButton.png; path = Resources/Frontend/netplayButton.png; sourceTree = "<group>"; };
@@ -738,6 +723,8 @@
 		61F904D611DF7DA30068B24D /* WeaponCellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WeaponCellView.m; path = Classes/WeaponCellView.m; sourceTree = "<group>"; };
 		8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		928301170F10CAFC00CC5A3C /* libfpc.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libfpc.a; sourceTree = BUILT_PRODUCTS_DIR; };
+		EED893BC205DA16F00FED432 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Hedgewars/Images.xcassets; sourceTree = "<group>"; };
+		EED893CA205DBD4000FED432 /* LaunchScreen.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = LaunchScreen.xib; path = Resources/LaunchScreen.xib; sourceTree = "<group>"; };
 		F60ACBB51C7BC08B00385701 /* IniParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IniParser.h; path = Classes/IniParser.h; sourceTree = "<group>"; };
 		F60ACBB61C7BC08B00385701 /* IniParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IniParser.m; path = Classes/IniParser.m; sourceTree = "<group>"; };
 		F60D04631BD137B5003ACB00 /* bullet_filled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = bullet_filled.png; path = Resources/Icons/bullet_filled.png; sourceTree = "<group>"; };
@@ -778,9 +765,6 @@
 		F65725291B7EB9CC00A86262 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = Locale/ru.lproj/About.strings; sourceTree = "<group>"; };
 		F657252A1B7EB9CC00A86262 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = Locale/ru.lproj/Localizable.strings; sourceTree = "<group>"; };
 		F657252B1B7EB9CC00A86262 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = Locale/ru.lproj/Scheme.strings; sourceTree = "<group>"; };
-		F65E1DBC1B9B95A400A78ADF /* Icon-60@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-60@2x.png"; path = "Resources/Icons/Icon-60@2x.png"; sourceTree = "<group>"; };
-		F65E1DBD1B9B95A400A78ADF /* Icon-76.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-76.png"; path = "Resources/Icons/Icon-76.png"; sourceTree = "<group>"; };
-		F65E1DBE1B9B95A400A78ADF /* Icon-76@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-76@2x.png"; path = "Resources/Icons/Icon-76@2x.png"; sourceTree = "<group>"; };
 		F6756D7E1BD8550500B6AB6B /* LabelWithIBLocalization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LabelWithIBLocalization.h; sourceTree = "<group>"; };
 		F6756D7F1BD8550500B6AB6B /* LabelWithIBLocalization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LabelWithIBLocalization.m; sourceTree = "<group>"; };
 		F67FC80F1BEC06E700A9DC75 /* Appirater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Appirater.h; sourceTree = "<group>"; };
@@ -793,7 +777,6 @@
 		F67FC8211BEC280D00A9DC75 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = Locale/tr.lproj/Scheme.strings; sourceTree = "<group>"; };
 		F6BA38441BA7A834005D16EA /* GameLogViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameLogViewController.h; sourceTree = "<group>"; };
 		F6BA38451BA7A834005D16EA /* GameLogViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GameLogViewController.m; sourceTree = "<group>"; };
-		F6D7E09E1B76884E004F3BCF /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = "<group>"; };
 		F6D7E0BF1B768F19004F3BCF /* uLandGenPerlin.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uLandGenPerlin.pas; path = ../../hedgewars/uLandGenPerlin.pas; sourceTree = "<group>"; };
 		F6D7E0C01B768F19004F3BCF /* uLandGenTemplateBased.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uLandGenTemplateBased.pas; path = ../../hedgewars/uLandGenTemplateBased.pas; sourceTree = "<group>"; };
 		F6D7E0C11B768F19004F3BCF /* uLandUtils.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uLandUtils.pas; path = ../../hedgewars/uLandUtils.pas; sourceTree = "<group>"; };
@@ -908,7 +891,7 @@
 		29B97317FDCFA39411CA2CEA /* Resources */ = {
 			isa = PBXGroup;
 			children = (
-				F6D7E09E1B76884E004F3BCF /* Default-568h@2x.png */,
+				EED893BC205DA16F00FED432 /* Images.xcassets */,
 				6129B9F611EFB04D0017E305 /* denied.png */,
 				6167C88B14294738003DD50F /* denied@2x.png */,
 				6199E86C12464A8E00DADF8C /* surprise.png */,
@@ -922,6 +905,7 @@
 				610782931440EE5C00645B29 /* basicFlags.plist */,
 				610782941440EE5C00645B29 /* credits.plist */,
 				610782951440EE5C00645B29 /* gameMods.plist */,
+				EED893CA205DBD4000FED432 /* LaunchScreen.xib */,
 			);
 			name = Resources;
 			sourceTree = "<group>";
@@ -1152,6 +1136,7 @@
 			isa = PBXGroup;
 			children = (
 				61A19AEA14D2010A004B1E6D /* libSDL2.a */,
+				EE3DE44E1FF6BF1100E2DF37 /* libSDL2.a */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -1242,19 +1227,6 @@
 				6167CA34142A6ED7003DD50F /* bot4@2x.png */,
 				6167CA35142A6ED7003DD50F /* bot5.png */,
 				6167CA36142A6ED7003DD50F /* bot5@2x.png */,
-				6183D83C11E2BCE200A88903 /* Default-ipad-Landscape.png */,
-				6183D83D11E2BCE200A88903 /* Default.png */,
-				6172FEA21298C7F900D73365 /* Default@2x.png */,
-				61F7A43111E290650040BA66 /* Icon-72.png */,
-				61F7A43211E290650040BA66 /* Icon-Small-50.png */,
-				61F7A43311E290650040BA66 /* Icon-Small.png */,
-				61F7A43411E290650040BA66 /* Icon-Small@2x.png */,
-				61F7A43511E290650040BA66 /* Icon.png */,
-				61F7A43611E290650040BA66 /* Icon@2x.png */,
-				F65E1DBC1B9B95A400A78ADF /* Icon-60@2x.png */,
-				F65E1DBD1B9B95A400A78ADF /* Icon-76.png */,
-				F65E1DBE1B9B95A400A78ADF /* Icon-76@2x.png */,
-				61F7A43711E290650040BA66 /* iTunesArtwork.png */,
 			);
 			name = Icons;
 			sourceTree = "<group>";
@@ -1512,21 +1484,20 @@
 			};
 			buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Hedgewars" */;
 			compatibilityVersion = "Xcode 3.2";
-			developmentRegion = English;
+			developmentRegion = en;
 			hasScannedForEncodings = 1;
 			knownRegions = (
-				English,
-				Japanese,
-				French,
-				German,
-				Spanish,
-				Polish,
-				Turkish,
-				Danish,
-				Italian,
-				Bulgarian,
-				Portuguese,
-				Romanian,
+				en,
+				ja,
+				fr,
+				de,
+				es,
+				pl,
+				da,
+				it,
+				bg,
+				pt,
+				ro,
 				ru,
 				tr,
 			);
@@ -1632,6 +1603,13 @@
 			remoteRef = 61A19C2214D20F51004B1E6D /* PBXContainerItemProxy */;
 			sourceTree = BUILT_PRODUCTS_DIR;
 		};
+		EE3DE44E1FF6BF1100E2DF37 /* libSDL2.a */ = {
+			isa = PBXReferenceProxy;
+			fileType = archive.ar;
+			path = libSDL2.a;
+			remoteRef = EE3DE44D1FF6BF1100E2DF37 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
 /* End PBXReferenceProxy section */
 
 /* Begin PBXResourcesBuildPhase section */
@@ -1649,25 +1627,19 @@
 				61F9040911DF58B00068B24D /* settingsButton.png in Resources */,
 				61F9040B11DF59370068B24D /* background.png in Resources */,
 				61EBA62A11DFF2BC0048B68A /* title~iphone.png in Resources */,
-				61F7A43811E290650040BA66 /* Icon-72.png in Resources */,
 				F60D04781BD137B5003ACB00 /* bullet_filled@2x.png in Resources */,
-				61F7A43911E290650040BA66 /* Icon-Small-50.png in Resources */,
 				F60D04871BD137B5003ACB00 /* teams_filled.png in Resources */,
-				61F7A43A11E290650040BA66 /* Icon-Small.png in Resources */,
-				61F7A43C11E290650040BA66 /* Icon.png in Resources */,
 				F65724FE1B7E784700A86262 /* helpbottom.png in Resources */,
-				61F7A43E11E290650040BA66 /* iTunesArtwork.png in Resources */,
 				F60D04811BD137B5003ACB00 /* heart.png in Resources */,
-				F65E1DC11B9B95A400A78ADF /* Icon-76@2x.png in Resources */,
 				6129B9F711EFB04D0017E305 /* denied.png in Resources */,
 				61F2E7CF1205EDE0005734F7 /* AboutViewController.xib in Resources */,
 				F60D047C1BD137B5003ACB00 /* flower_filled@2x.png in Resources */,
 				61F2E7EC12060E31005734F7 /* checkbox.png in Resources */,
+				EED893BD205DA16F00FED432 /* Images.xcassets in Resources */,
 				F60D04821BD137B5003ACB00 /* heart@2x.png in Resources */,
 				615AD96212073B4D00F2FF04 /* startGameButton.png in Resources */,
 				F6338CDB1C7A709600353945 /* CampaignViewController-iPad.xib in Resources */,
 				F60D048A1BD137B5003ACB00 /* teams@2x.png in Resources */,
-				F6D7E09F1B76884E004F3BCF /* Default-568h@2x.png in Resources */,
 				F60D047E1BD137B5003ACB00 /* flower@2x.png in Resources */,
 				F60D04841BD137B5003ACB00 /* target_filled@2x.png in Resources */,
 				615AD9E9120764CA00F2FF04 /* backButton.png in Resources */,
@@ -1678,11 +1650,7 @@
 				6199E86D12464A8E00DADF8C /* surprise.png in Resources */,
 				611D9BFC12497E9800008271 /* SavedGamesViewController.xib in Resources */,
 				6147DAD31253DCDE0010357E /* savesButton.png in Resources */,
-				610D5FB21270E2660033333A /* Icon-Small@2x.png in Resources */,
 				F6F07BDF1B7E72D40010E48F /* HelpPageLobbyViewController-iPhone.xib in Resources */,
-				610D5FB31270E26C0033333A /* Icon@2x.png in Resources */,
-				F65E1DC01B9B95A400A78ADF /* Icon-76.png in Resources */,
-				61A670C012747D9B00B06CE7 /* Default.png in Resources */,
 				61A670C112747DB900B06CE7 /* MainMenuViewController-iPhone.xib in Resources */,
 				61A670C212747DBD00B06CE7 /* MapConfigViewController-iPhone.xib in Resources */,
 				61E2F7441283752C00E12521 /* fb.png in Resources */,
@@ -1692,7 +1660,6 @@
 				F6338CC91C7A53C100353945 /* CampaignsViewController-iPhone.xib in Resources */,
 				6172FED91298CF9800D73365 /* background~iphone.png in Resources */,
 				6172FEEF1298D25D00D73365 /* mediumBackground~ipad.png in Resources */,
-				F65E1DBF1B9B95A400A78ADF /* Icon-60@2x.png in Resources */,
 				6172FEF11298D25D00D73365 /* smallerBackground~ipad.png in Resources */,
 				F60D047A1BD137B5003ACB00 /* bullet@2x.png in Resources */,
 				F60D04861BD137B5003ACB00 /* target@2x.png in Resources */,
@@ -1706,11 +1673,9 @@
 				61188BF712A6FE5A0026C5DA /* backButton@2x.png in Resources */,
 				61188BF812A6FE5C0026C5DA /* background@2x~iphone.png in Resources */,
 				61188BF912A6FE5D0026C5DA /* checkbox@2x.png in Resources */,
-				61188BFB12A6FE610026C5DA /* Default-ipad-Landscape.png in Resources */,
 				F60D047B1BD137B5003ACB00 /* flower_filled.png in Resources */,
 				F60D04771BD137B5003ACB00 /* bullet_filled.png in Resources */,
 				F60D04881BD137B5003ACB00 /* teams_filled@2x.png in Resources */,
-				61188BFC12A6FE630026C5DA /* Default@2x.png in Resources */,
 				61188BFD12A6FE730026C5DA /* fb@2x.png in Resources */,
 				61188BFE12A6FE7C0026C5DA /* irc@2x.png in Resources */,
 				61188C0212A6FE840026C5DA /* localplayButton@2x~iphone.png in Resources */,
@@ -1744,6 +1709,7 @@
 				6167CA37142A6ED7003DD50F /* bot0.png in Resources */,
 				6167CA38142A6ED7003DD50F /* bot0@2x.png in Resources */,
 				6167CA39142A6ED7003DD50F /* bot1.png in Resources */,
+				EED893CB205DBD4000FED432 /* LaunchScreen.xib in Resources */,
 				6167CA3A142A6ED7003DD50F /* bot1@2x.png in Resources */,
 				6167CA3B142A6ED7003DD50F /* bot2.png in Resources */,
 				6167CA3C142A6ED7003DD50F /* bot2@2x.png in Resources */,
@@ -1799,7 +1765,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "SOURCE_DIR=${PROJECT_DIR}/../../\n\n#copy new stuff over old stuff\nrm -rf ${PROJECT_DIR}/Data\n\necho \"Copying Data...\"\ncp -R ${SOURCE_DIR}/share/hedgewars/Data ${PROJECT_DIR}/Data\n\n#copy some other files\necho \"Fetching additional graphics...\"\nmkdir -p ${PROJECT_DIR}/Data/Graphics/Icons\ncp    ${SOURCE_DIR}/QTfrontend/res/{btn*,icon*,StatsMedal*,ammopic*}.png ${PROJECT_DIR}/Data/Graphics/Icons/\ncp -R ${SOURCE_DIR}/project_files/Android-build/SDL-android-project/assets/Data/Graphics/Buttons ${PROJECT_DIR}/Data/Graphics/\n\necho \"Removing text and dummy files...\"\n#delete all CMakeLists.txt and image source files\nfind ${PROJECT_DIR}/Data -name CMakeLists.txt -delete\nfind ${PROJECT_DIR}/Data -name *.svg* -delete\nfind ${PROJECT_DIR}/Data -name *.psd -delete\nfind ${PROJECT_DIR}/Data -name *.sifz -delete\nfind ${PROJECT_DIR}/Data -name *.xcf -delete\nfind ${PROJECT_DIR}/Data -name *.orig -delete\nfind ${PROJECT_DIR}/Data -name *.ts -delete\n\n#delete all CMake generated files\nfind ${PROJECT_DIR}/Data -name CMakeFiles -type d -exec rm -r {} +\nfind ${PROJECT_DIR}/Data -name Makefile -delete\nfind ${PROJECT_DIR}/Data -name *.cmake -delete\n\n#delete dummy maps and hats, misc stuff\nrm -rf ${PROJECT_DIR}/Data/Maps/test*\nrm -rf ${PROJECT_DIR}/Data/Graphics/Hats/{TeamCap,TeamHeadband,TeamHair}\nrm -rf ${PROJECT_DIR}/Data/misc/\n\n#delete forbidden maps and WIP themes (remember to check that no Map uses them)\nrm -rf ${PROJECT_DIR}/Data/Maps/{FlightJoust,ClimbHome}\nrm -rf ${PROJECT_DIR}/Data/Themes/{Beach,Digital}\n\n#delete all names, reserved hats and unused fonts\nrm -rf ${PROJECT_DIR}/Data/Names/\nrm -rf ${PROJECT_DIR}/Data/Graphics/Hats/Reserved/\nrm -rf ${PROJECT_DIR}/Data/Fonts/{wqy-zenhei.ttc,DroidSansFallback.ttf}\n\necho \"Handling audio files...\"\n#delete the Classic voice\nrm -rf ${PROJECT_DIR}/Data/Sounds/voices/Classic\n#delete the main theme file\nrm -rf ${PROJECT_DIR}/Data/Music/main_theme.ogg\n\n#remove unused voices\nfor i in {Amazing,Brilliant,Bugger,Bungee,Cutitout,Drat,Excellent,Fire,FlawlessPossibility,Gonnagetyou,Grenade,Hmm,Leavemealone,Ohdear,Ouch,Perfect,Revenge,Runaway,Solong,Thisoneismine,VictoryPossibility,Watchthis,Whatthe,Whoopsee}; do find Data/Sounds/voices/ -name $i.ogg -delete; done\n\necho \"Tweaking Data contents...\"\n#move Lua maps in Missions\nmkdir ${PROJECT_DIR}/Data/Missions/Maps/\nfor i in `ls ${PROJECT_DIR}/Data/Maps/`;\ndo \n    if [[ `ls -f ${PROJECT_DIR}/Data/Maps/$i/map.lua 2> /dev/null` != '' ]];\n    then\n        mv ${PROJECT_DIR}/Data/Maps/$i ${PROJECT_DIR}/Data/Missions/Maps/;\n    fi;\ndone;\n\n#workaround for missing map in CTF_Blizzard\nln -s ../../../Maps/Blizzard/map.png ${PROJECT_DIR}/Data/Missions/Maps/CTF_Blizzard/map.png\n\n#reduce the number of flakes for City\nsed -i -e 's/1500/50/' ${PROJECT_DIR}/Data/Themes/City/theme.cfg\n\necho \"Done\"";
+			shellScript = "SOURCE_DIR=${PROJECT_DIR}/../../\n\n#copy new stuff over old stuff\nrm -rf ${PROJECT_DIR}/Data\n\necho \"Copying Data...\"\ncp -R ${SOURCE_DIR}/share/hedgewars/Data ${PROJECT_DIR}/Data\n\n#copy some other files\necho \"Fetching additional graphics...\"\nmkdir -p ${PROJECT_DIR}/Data/Graphics/Icons\ncp    ${SOURCE_DIR}/QTfrontend/res/{btn*,icon*,StatsMedal*,ammopic*}.png ${PROJECT_DIR}/Data/Graphics/Icons/\ncp -R ${SOURCE_DIR}/project_files/Android-build/SDL-android-project/assets/Data/Graphics/Buttons ${PROJECT_DIR}/Data/Graphics/\n\necho \"Removing text and dummy files...\"\n#delete all CMakeLists.txt and image source files\nfind ${PROJECT_DIR}/Data -name CMakeLists.txt -delete\nfind ${PROJECT_DIR}/Data -name *.svg* -delete\nfind ${PROJECT_DIR}/Data -name *.psd -delete\nfind ${PROJECT_DIR}/Data -name *.sifz -delete\nfind ${PROJECT_DIR}/Data -name *.xcf -delete\nfind ${PROJECT_DIR}/Data -name *.orig -delete\nfind ${PROJECT_DIR}/Data -name *.ts -delete\n\n#delete all CMake generated files\nfind ${PROJECT_DIR}/Data -name CMakeFiles -type d -exec rm -r {} +\nfind ${PROJECT_DIR}/Data -name Makefile -delete\nfind ${PROJECT_DIR}/Data -name *.cmake -delete\n\n#delete dummy maps and hats, misc stuff\nrm -rf ${PROJECT_DIR}/Data/Maps/test*\nrm -rf ${PROJECT_DIR}/Data/Graphics/Hats/{TeamCap,TeamHeadband,TeamHair}\nrm -rf ${PROJECT_DIR}/Data/misc/\n\n#delete forbidden maps and WIP themes (remember to check that no Map uses them)\nrm -rf ${PROJECT_DIR}/Data/Maps/{FlightJoust,ClimbHome}\nrm -rf ${PROJECT_DIR}/Data/Themes/Digital\n\n#delete all names, reserved hats and unused fonts\nrm -rf ${PROJECT_DIR}/Data/Names/\nrm -rf ${PROJECT_DIR}/Data/Graphics/Hats/Reserved/\nrm -rf ${PROJECT_DIR}/Data/Fonts/{wqy-zenhei.ttc,DroidSansFallback.ttf}\n\necho \"Handling audio files...\"\n#delete the Classic voice\nrm -rf ${PROJECT_DIR}/Data/Sounds/voices/Classic\n#delete the main theme file\nrm -rf ${PROJECT_DIR}/Data/Music/main_theme.ogg\n\n#remove unused voices\nfor i in {Amazing,Brilliant,Bugger,Bungee,Cutitout,Drat,Excellent,Fire,FlawlessPossibility,Gonnagetyou,Grenade,Hmm,Leavemealone,Ohdear,Ouch,Perfect,Revenge,Runaway,Solong,Thisoneismine,VictoryPossibility,Watchthis,Whatthe,Whoopsee}; do find Data/Sounds/voices/ -name $i.ogg -delete; done\n\necho \"Tweaking Data contents...\"\n#move Lua maps in Missions\nmkdir ${PROJECT_DIR}/Data/Missions/Maps/\nfor i in `ls ${PROJECT_DIR}/Data/Maps/`;\ndo \n    if [[ `ls -f ${PROJECT_DIR}/Data/Maps/$i/map.lua 2> /dev/null` != '' ]];\n    then\n        mv ${PROJECT_DIR}/Data/Maps/$i ${PROJECT_DIR}/Data/Missions/Maps/;\n    fi;\ndone;\n\n#workaround for missing map in CTF_Blizzard\nln -s ../../../Maps/Blizzard/map.png ${PROJECT_DIR}/Data/Missions/Maps/CTF_Blizzard/map.png\n\n#reduce the number of flakes for City\nsed -i -e 's/1500/50/' ${PROJECT_DIR}/Data/Themes/City/theme.cfg\n\necho \"Done\"";
 		};
 		61806B78170B83EA00C601BC /* config.inc */ = {
 			isa = PBXShellScriptBuildPhase;
@@ -2031,17 +1997,17 @@
 		61156520147F48B6006729A9 /* About.strings */ = {
 			isa = PBXVariantGroup;
 			children = (
-				6115651A147F48AE006729A9 /* English */,
-				61156526147F49E1006729A9 /* Spanish */,
-				6115652D147F4C52006729A9 /* French */,
-				61156530147F4D10006729A9 /* Polish */,
-				61177BAA148A661600686905 /* German */,
-				61177BE4148B881C00686905 /* Danish */,
-				617BC22D1490210E00E1C294 /* Italian */,
-				619BCEC41495615700C1C409 /* Bulgarian */,
-				61D08D8714AEA9670007C078 /* Japanese */,
-				61C6783F14B3DD020087425A /* Portuguese */,
-				6154A53114C37E4A00F6EEF6 /* Romanian */,
+				6115651A147F48AE006729A9 /* en */,
+				61156526147F49E1006729A9 /* es */,
+				6115652D147F4C52006729A9 /* fr */,
+				61156530147F4D10006729A9 /* pl */,
+				61177BAA148A661600686905 /* de */,
+				61177BE4148B881C00686905 /* da */,
+				617BC22D1490210E00E1C294 /* it */,
+				619BCEC41495615700C1C409 /* bg */,
+				61D08D8714AEA9670007C078 /* ja */,
+				61C6783F14B3DD020087425A /* pt */,
+				6154A53114C37E4A00F6EEF6 /* ro */,
 				F65725291B7EB9CC00A86262 /* ru */,
 				F67FC81F1BEC280D00A9DC75 /* tr */,
 			);
@@ -2051,17 +2017,17 @@
 		61156522147F48B7006729A9 /* Localizable.strings */ = {
 			isa = PBXVariantGroup;
 			children = (
-				6115651B147F48AE006729A9 /* English */,
-				61156527147F4A2E006729A9 /* Spanish */,
-				6115652C147F4C4C006729A9 /* French */,
-				61156531147F4D17006729A9 /* Polish */,
-				61177BA7148A658900686905 /* German */,
-				61177BF0148B882500686905 /* Danish */,
-				617BC2391490211500E1C294 /* Italian */,
-				619BCED01495615F00C1C409 /* Bulgarian */,
-				61D08D8814AEA9700007C078 /* Japanese */,
-				61C6784B14B3DD0B0087425A /* Portuguese */,
-				6154A53E14C37E5400F6EEF6 /* Romanian */,
+				6115651B147F48AE006729A9 /* en */,
+				61156527147F4A2E006729A9 /* es */,
+				6115652C147F4C4C006729A9 /* fr */,
+				61156531147F4D17006729A9 /* pl */,
+				61177BA7148A658900686905 /* de */,
+				61177BF0148B882500686905 /* da */,
+				617BC2391490211500E1C294 /* it */,
+				619BCED01495615F00C1C409 /* bg */,
+				61D08D8814AEA9700007C078 /* ja */,
+				61C6784B14B3DD0B0087425A /* pt */,
+				6154A53E14C37E5400F6EEF6 /* ro */,
 				F657252A1B7EB9CC00A86262 /* ru */,
 				F67FC8201BEC280D00A9DC75 /* tr */,
 			);
@@ -2071,17 +2037,17 @@
 		61156524147F48B8006729A9 /* Scheme.strings */ = {
 			isa = PBXVariantGroup;
 			children = (
-				6115651C147F48AE006729A9 /* English */,
-				61156528147F4A3C006729A9 /* Spanish */,
-				6115652B147F4C45006729A9 /* French */,
-				61156532147F4D1E006729A9 /* Polish */,
-				61177BA9148A660C00686905 /* German */,
-				61177BF1148B882F00686905 /* Danish */,
-				617BC23A1490211F00E1C294 /* Italian */,
-				619BCED11495616700C1C409 /* Bulgarian */,
-				61D08D8914AEA9780007C078 /* Japanese */,
-				61C6784C14B3DD140087425A /* Portuguese */,
-				6154A54014C37EB100F6EEF6 /* Romanian */,
+				6115651C147F48AE006729A9 /* en */,
+				61156528147F4A3C006729A9 /* es */,
+				6115652B147F4C45006729A9 /* fr */,
+				61156532147F4D1E006729A9 /* pl */,
+				61177BA9148A660C00686905 /* de */,
+				61177BF1148B882F00686905 /* da */,
+				617BC23A1490211F00E1C294 /* it */,
+				619BCED11495616700C1C409 /* bg */,
+				61D08D8914AEA9780007C078 /* ja */,
+				61C6784C14B3DD140087425A /* pt */,
+				6154A54014C37EB100F6EEF6 /* ro */,
 				F657252B1B7EB9CC00A86262 /* ru */,
 				F67FC8211BEC280D00A9DC75 /* tr */,
 			);
@@ -2094,6 +2060,8 @@
 		1D6058940D05DD3E006BFB54 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CLANG_ENABLE_OBJC_ARC = YES;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				GCC_DYNAMIC_NO_PIC = NO;
@@ -2111,6 +2079,8 @@
 		1D6058950D05DD3E006BFB54 /* Release */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CLANG_ENABLE_OBJC_ARC = YES;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				COPY_PHASE_STRIP = YES;
@@ -2203,6 +2173,8 @@
 		61022D7D12305A2800B08935 /* Distro AppStore */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CLANG_ENABLE_OBJC_ARC = YES;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				COPY_PHASE_STRIP = YES;
@@ -2322,6 +2294,8 @@
 		6137064C117B1CB3004EE44A /* Distro Adhoc */ = {
 			isa = XCBuildConfiguration;
 			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				CLANG_ENABLE_OBJC_ARC = YES;
 				CODE_SIGN_IDENTITY = "iPhone Developer";
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
 				COPY_PHASE_STRIP = YES;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Contents.json	Sun Jun 10 19:01:50 2018 +0200
@@ -0,0 +1,182 @@
+{
+    "images":[
+        {
+            "idiom":"iphone",
+            "size":"20x20",
+            "scale":"2x",
+            "filename":"Icon-App-20x20@2x.png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"20x20",
+            "scale":"3x",
+            "filename":"Icon-App-20x20@3x.png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"29x29",
+            "scale":"1x",
+            "filename":"Icon-App-29x29@1x.png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"29x29",
+            "scale":"2x",
+            "filename":"Icon-App-29x29@2x.png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"29x29",
+            "scale":"3x",
+            "filename":"Icon-App-29x29@3x.png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"40x40",
+            "scale":"1x",
+            "filename":"Icon-App-40x40@1x.png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"40x40",
+            "scale":"2x",
+            "filename":"Icon-App-40x40@2x.png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"40x40",
+            "scale":"3x",
+            "filename":"Icon-App-40x40@3x.png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"57x57",
+            "scale":"1x",
+            "filename":"Icon-App-57x57@1x.png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"57x57",
+            "scale":"2x",
+            "filename":"Icon-App-57x57@2x.png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"60x60",
+            "scale":"1x",
+            "filename":"Icon-App-60x60@1x.png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"60x60",
+            "scale":"2x",
+            "filename":"Icon-App-60x60@2x.png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"60x60",
+            "scale":"3x",
+            "filename":"Icon-App-60x60@3x.png"
+        },
+        {
+            "idiom":"iphone",
+            "size":"76x76",
+            "scale":"1x",
+            "filename":"Icon-App-76x76@1x.png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"20x20",
+            "scale":"1x",
+            "filename":"Icon-App-20x20@1x.png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"20x20",
+            "scale":"2x",
+            "filename":"Icon-App-20x20@2x.png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"29x29",
+            "scale":"1x",
+            "filename":"Icon-App-29x29@1x.png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"29x29",
+            "scale":"2x",
+            "filename":"Icon-App-29x29@2x.png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"40x40",
+            "scale":"1x",
+            "filename":"Icon-App-40x40@1x.png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"40x40",
+            "scale":"2x",
+            "filename":"Icon-App-40x40@2x.png"
+        },
+        {
+          "size" : "50x50",
+          "idiom" : "ipad",
+          "filename" : "Icon-Small-50x50@1x.png",
+          "scale" : "1x"
+        },
+        {
+          "size" : "50x50",
+          "idiom" : "ipad",
+          "filename" : "Icon-Small-50x50@2x.png",
+          "scale" : "2x"
+        },
+        {
+            "idiom":"ipad",
+            "size":"72x72",
+            "scale":"1x",
+            "filename":"Icon-App-72x72@1x.png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"72x72",
+            "scale":"2x",
+            "filename":"Icon-App-72x72@2x.png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"76x76",
+            "scale":"1x",
+            "filename":"Icon-App-76x76@1x.png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"76x76",
+            "scale":"2x",
+            "filename":"Icon-App-76x76@2x.png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"76x76",
+            "scale":"3x",
+            "filename":"Icon-App-76x76@3x.png"
+        },
+        {
+            "idiom":"ipad",
+            "size":"83.5x83.5",
+            "scale":"2x",
+            "filename":"Icon-App-83.5x83.5@2x.png"
+        },
+        {
+          "size" : "1024x1024",
+          "idiom" : "ios-marketing",
+          "filename" : "ItunesArtwork@2x.png",
+          "scale" : "1x"
+        }
+    ],
+    "info":{
+        "version":1,
+        "author":"makeappicon"
+    }
+}
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png has changed
Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Hedgewars/Images.xcassets/Contents.json	Sun Jun 10 19:01:50 2018 +0200
@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
--- a/project_files/HedgewarsMobile/Info.plist	Thu May 31 01:50:49 2018 +0200
+++ b/project_files/HedgewarsMobile/Info.plist	Sun Jun 10 19:01:50 2018 +0200
@@ -3,23 +3,11 @@
 <plist version="1.0">
 <dict>
 	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
+	<string>en</string>
 	<key>CFBundleDisplayName</key>
 	<string>${PRODUCT_NAME}</string>
 	<key>CFBundleExecutable</key>
 	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIconFiles</key>
-	<array>
-		<string>Icon.png</string>
-		<string>Icon-72.png</string>
-		<string>Icon@2x.png</string>
-		<string>Icon-Small.png</string>
-		<string>Icon-Small-50.png</string>
-		<string>Icon-Small@2x.png</string>
-		<string>Icon-60@2x.png</string>
-		<string>Icon-76.png</string>
-		<string>Icon-76@2x.png</string>
-	</array>
 	<key>CFBundleIdentifier</key>
 	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 	<key>CFBundleInfoDictionaryVersion</key>
@@ -36,8 +24,8 @@
 	<string>${HEDGEWARS_REVISION}</string>
 	<key>LSRequiresIPhoneOS</key>
 	<true/>
-	<key>UILaunchImageFile~ipad</key>
-	<string>Default-ipad</string>
+	<key>UILaunchStoryboardName</key>
+	<string>LaunchScreen</string>
 	<key>UIPrerenderedIcon</key>
 	<true/>
 	<key>UIRequiresFullScreen</key>
Binary file project_files/HedgewarsMobile/Locale/Bulgarian.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Bulgarian.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Bulgarian.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Danish.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Danish.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Danish.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/English.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/English.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/English.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/French.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/French.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/French.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/German.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/German.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/German.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Italian.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Italian.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Italian.lproj/Scheme.strings has changed
--- a/project_files/HedgewarsMobile/Locale/Japanese.lproj/About.strings	Thu May 31 01:50:49 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-/* code credit */
-"Engine, frontend, net server" = "エンジン、フロントエンド、ネットサーバー";
-"Many desktop frontend improvements" = "多くのデスクトップフロントエンドの改善";
-"Many engine and desktop frontend improvements" = "多くのエンジンとデスクトップフロントエンドの改善";
-"Drillrocket, Ballgun, RC Plane weapons" = "ドリルロケット、ボールガン、ラジコン武器";
-"Mine number and time game settings" = "地雷番号とタイムゲーム設定";
-"Desktop frontend improvements" = "デスクトップフロントエンドの改善";
-"Desktop frontend improvements" = "デスクトップフロントエンドの改善";
-"Mac OS X and iPhone version" = "Mac OS X と iPhone バージョン";
-"Many engine and desktop frontend improvements" = "多くのエンジンとデスクトップフロントエンドの改善";
-"Gamepad and Lua integration" = "ゲームパッドとLuaの統合化";
-"Many engine improvements and graphics" = "多くのエンジン改善とグラフィック";
-"Maze maps" = "迷路地図";
-"Engine and desktop frontend improvements" = "エンジンとデスクトップフロントエンドの改善";
-"Lua game modes and missions" = "Lua ゲームモードとミッション";
-"Desktop frontend improvements" = "デスクトップフロントエンドの改善";
-"Android port" = "アンドロイドポート";
-
-/* art credit */
-"Main graphics" = "メイングラフィック";
-"Some hats" = "帽子";
-"Hedgehogs voice" = "ハリネズミの声";
-
-/* translation credit */
-"Brazilian Portuguese" = "ポルトガル語(ブラジル)";
-"Bulgarian" = "ブルガリア語";
-"Czech" = "チェコ語";
-"Chinese" = "中国語";
-"English" = "英語";
-"Finnish" = "フィンランド語";
-"French" = "フランス語";
-"German" = "ドイツ語";
-"Greek" = "ギリシャ語";
-"Italian" = "イタリア語";
-"Japanese" = "日本語";
-"Korean" = "韓国語";
-"Lithuanian" = "リトアニア語";
-"Polish" = "ポーランド語";
-"Portuguese" = "ポルトガル語";
-"Russian" = "ロシア語";
-"Slovak" = "スロバキア語";
-"Spanish" = "スペイン語";
-"Swedish" = "スウェーデン語";
-"Ukrainian" = "ウクライナ語";
--- a/project_files/HedgewarsMobile/Locale/Japanese.lproj/Localizable.strings	Thu May 31 01:50:49 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,380 +0,0 @@
-/* No comment provided by engineer. */
-"A monitor has been disconnected while playing and this has ended the match! You need to restart the game if you wish to use the second display again." = "モニターの接続が切断され、マッチを終了してしまいました!二番目のディスプレーをまた使用したい場合はゲームをリスタートしなければいけません。";
-
-/* from the scheme panel
-   from the team panel */
-"Add" = "追加";
-
-/* No comment provided by engineer. */
-"Aggressive" = "積極的";
-
-/* No comment provided by engineer. */
-"All" = "全て";
-
-/* from the settings table */
-"Alternate Damage" = "代わりのダメージ";
-
-/* No comment provided by engineer. */
-"Are you reeeeeally sure?" = "本当にいいですか?";
-
-/* from the settings table */
-"Audio Preferences" = "オーディオ設定";
-
-/* No comment provided by engineer. */
-"Available Teams" = "利用可能なチーム";
-
-/* No comment provided by engineer. */
-"Average" = "平均";
-
-/* No comment provided by engineer. */
-"Backup" = "バックアップ";
-
-/* No comment provided by engineer. */
-"Before playing the preview needs to be generated" = "プレーする前にプレビューを生成する必要があります";
-
-/* No comment provided by engineer. */
-"Before returning the preview needs to be generated" = "戻る前にプレビューを生成する必要があります";
-
-/* No comment provided by engineer. */
-"Brutal" = "残忍";
-
-/* No comment provided by engineer. */
-"Bully" = "いじめっ子";
-
-/* No comment provided by engineer. */
-"Cancel" = "キャンセル";
-
-/* No comment provided by engineer. */
-"Cavern" = "洞窟";
-
-/* No comment provided by engineer. */
-"Change hedgehogs' hat" = "ハリネズミの帽子を変える";
-
-/* No comment provided by engineer. */
-"Chat with the devs in IRC" = "IRC でデベロッパ達とチャットする";
-
-/* No comment provided by engineer. */
-"Choose a charismatic symbol for your team" = "チームのためのカリスマ的なシンボルを選択する";
-
-/* No comment provided by engineer. */
-"Choose hedgehog graves" = "ハリネズミの墓を選択する";
-
-/* No comment provided by engineer. */
-"Choose team fort" = "チームの砦を選択する";
-
-/* from the settings table */
-"Choosing a Scheme will select its associated Weapon" = "スキームを選択すると関連した武器を選択します。";
-
-/* No comment provided by engineer. */
-"Classic Ammo Menu" = "クラシックな弾薬メニュー";
-
-/* No comment provided by engineer. */
-"Community" = "コミュニティー";
-
-/* from the settings table */
-"Damage popups will notify you on every single hit" = "ダメージポップアップはすべてのヒットを通知してくれます。";
-
-/* from the scheme panel
-   from the team panel */
-"Done" = "終了";
-
-/* from the scheme panel
-   from the team panel */
-"Edit" = "編集";
-
-/* No comment provided by engineer. */
-"Edit scheme preferences" = "スキーム設定を編集";
-
-/* No comment provided by engineer. */
-"Edit team settings" = "チーム設定を編集";
-
-/* No comment provided by engineer. */
-"Edit weapons preferences" = "武器設定を編集";
-
-/* No comment provided by engineer. */
-"End Game" = "ゲームを終了する";
-
-/* No comment provided by engineer. */
-"Flag" = "フラグ";
-
-/* No comment provided by engineer. */
-"Follow us on Twitter" = "ツイッターでフォローする";
-
-/* No comment provided by engineer. */
-"Fort" = "砦";
-
-/* No comment provided by engineer. */
-"Game Modifiers" = "ゲームの変更";
-
-/* No comment provided by engineer. */
-"Game Settings" = "ゲームの設定";
-
-/* No comment provided by engineer. */
-"General" = "一般";
-
-/* No comment provided by engineer. */
-"Grave" = "墓";
-
-/* No comment provided by engineer. */
-"Hedgewars supports multi-monitor configurations, but the screen has to be connected before launching the game." = "Hedgewarsはマルチモニター設定をサポートしていますが、スクリーンはゲームをスタートする前に接続されていなければいけません。";
-
-/* No comment provided by engineer. */
-"Hogs controlled by AI" = "AIにコントロールされたハリネズミ";
-
-/* No comment provided by engineer. */
-"Hold your finger on a weapon to see what it does.\nTap anywhere to dismiss." = "武器の上でホールドして何をするか見る。\nほかの部分をタップして閉じる。";
-
-/* No comment provided by engineer. */
-"Hold your finger on a weapon to see what it does.\nYou can move this window anywhere on the screen." = "武器の上でホールドして何をするか見る。\nこのウィンドウはスクリーンのどこにでも動かすことができます。";
-
-/* ammo selection */
-"Initial quantity " = "初期量";
-
-/* from the settings table */
-"Insert your password" = "パスワードを入力";
-
-/* from the settings table */
-"Insert your username (if you have one)" = "ユーザーネームを入力 (持っていた場合)";
-
-/* No comment provided by engineer. */
-"Join us on Facebook" = "Facebookで参加する";
-
-/* No comment provided by engineer. */
-"Large" = "大きな";
-
-/* No comment provided by engineer. */
-"Large Floating Islands" = "大きな浮き島";
-
-/* No comment provided by engineer. */
-"Large Tunnels" = "大きなトンネル";
-
-/* No comment provided by engineer. */
-"Leave a positive review on iTunes!" = "iTunesでポジティブなレビューを残す!";
-
-/* No comment provided by engineer. */
-"Level" = "レベル";
-
-/* No comment provided by engineer. */
-"Loading..." = "ロード中...";
-
-/* from the settings table */
-"Main Configuration" = "メイン設定";
-
-/* No comment provided by engineer. */
-"Mark the death of your fallen warriors" = "あなたの倒れた戦士の死をマーク";
-
-/* No comment provided by engineer. */
-"Max Hogs:" = "ハリネズミの最大数:";
-
-/* No comment provided by engineer. */
-"Medium" = "中くらい";
-
-/* No comment provided by engineer. */
-"Medium Floating Islands" = "中くらいの浮き島";
-
-/* No comment provided by engineer. */
-"Medium Tunnels" = "中くらいのトンネル";
-
-/* No comment provided by engineer. */
-"Missing detail" = "詳細が抜けています";
-
-/* No comment provided by engineer. */
-"Missions don't need further configuration" = "ミッションはこれ以上の設定を必要としません";
-
-/* from the settings table */
-"Music" = "音楽";
-
-/* No comment provided by engineer. */
-"Names and Hats" = "ネームと帽子";
-
-/* from the settings table */
-"Nickname" = "ニックネーム";
-
-/* No comment provided by engineer. */
-"No filter" = "フィルターなし";
-
-/* No comment provided by engineer. */
-"No thanks" = "遠慮します";
-
-/* ammo selection */
-"Number of turns before you can use this weapon " = "この武器を使えるようになるまでのターン数";
-
-/* Short for 'Never' */
-"Nvr" = "絶対にない";
-
-/* No comment provided by engineer. */
-"Of course!" = "もちろん!";
-
-/* No comment provided by engineer. */
-"Ok, got it" = "Ok, わかった";
-
-/* No comment provided by engineer. */
-"Opt for controlling the team or let the AI lead" = "チームをコントロールするかAIをリードさせる";
-
-/* from the settings table */
-"Other Settings" = "ほかの設定";
-
-/* from the settings table */
-"Password" = "パスワード";
-
-/* No comment provided by engineer. */
-"Pick a slang your hogs will speak" = "あなたのハリネズミが話すスラングを選択";
-
-/* No comment provided by engineer. */
-"Playing Teams" = "プレー中のチーム";
-
-/* ammo selection */
-"Presence probability in crates " = "クレートの中の存在確率";
-
-/* No comment provided by engineer. */
-"Press to resume playing or swipe to delete the save file." = "押してプレーを再開するか、スワイプしてセーブファイルを削除。";
-
-/* No comment provided by engineer. */
-"Preview not available" = "プレビューが利用できません";
-
-/* ammo selection */
-"Quantity that you will find in a crate " = "クレーとの中で見つかる量";
-
-/* No comment provided by engineer. */
-"Remind me later" = "後で連絡";
-
-/* Short for 'Random' */
-"Rnd" = "ランダム";
-
-/* No comment provided by engineer. */
-"Save" = "保存";
-
-/* No comment provided by engineer. */
-"Scheme" = "スキーム";
-
-/* No comment provided by engineer. */
-"Scheme mismatch" = "スキームミスマッチ";
-
-/* No comment provided by engineer. */
-"Scheme Name" = "スキーム名";
-
-/* No comment provided by engineer. */
-"Schemes" = "スキーム";
-
-/* No comment provided by engineer. */
-"Select at least two teams to play a game" = "ゲームをプレーするには最低二チーム選択してください。";
-
-/* No comment provided by engineer. */
-"Select one Scheme and one Weapon for this game" = "このゲームのためにスキームと武器を一つずつ選択してください。";
-
-/* No comment provided by engineer. */
-"Select the team invincible fortress (only valid for fort games)" = "無敵砦のチームを選択する (砦ゲームのみ有効)";
-
-/* from the settings table */
-"Select which style of ammo menu you prefer" = "弾薬メニューのスタイルを選択してください";
-
-/* No comment provided by engineer. */
-"Set difficulty level" = "難易度レベルをセットする";
-
-/* No comment provided by engineer. */
-"Set hedgehog voices" = "ハリネズミの声をセットする";
-
-/* No comment provided by engineer. */
-"Set team flag" = "チームフラグをセットする";
-
-/* on the overlay */
-"Set!" = "セット!";
-
-/* No comment provided by engineer. */
-"Show Help" = "ヘルプを表示する";
-
-/* No comment provided by engineer. */
-"Small" = "小さい";
-
-/* No comment provided by engineer. */
-"Small Floating Islands" = "小さな浮き島";
-
-/* No comment provided by engineer. */
-"Small Tunnels" = "小さなトンネル";
-
-/* from the settings table */
-"Sound" = "サウンド";
-
-/* No comment provided by engineer. */
-"Style" = "スタイル";
-
-/* No comment provided by engineer. */
-"Support" = "サポート";
-
-/* No comment provided by engineer. */
-"Sync Schemes and Weapons" = "スキームと武器を同期する";
-
-/* No comment provided by engineer. */
-"Tag" = "タグ";
-
-/* No comment provided by engineer. */
-"Tap to add hogs or change color, touch and hold to remove a team." = "ハリネズミを追加するか色を変更するにはタップ、チームを取り除くにはタッチしてホールドしてください。";
-
-/* No comment provided by engineer. */
-"Team Name" = "チーム名";
-
-/* No comment provided by engineer. */
-"Team Preferences" = "チーム設定";
-
-/* No comment provided by engineer. */
-"Teams" = "チーム";
-
-/* No comment provided by engineer. */
-"The map is too small for that many hogs" = "このマップはこれだけのハリネズミには小さすぎます。";
-
-/* No comment provided by engineer. */
-"The robot badge indicates an AI-controlled team." = "ロボットバッジはAIがコントロールするチームを指します。";
-
-/* No comment provided by engineer. */
-"The scheme you selected allows only for two teams" = "選択したスキームは二チーム用です。";
-
-/* No comment provided by engineer. */
-"This weapon is locked" = "この武器はロックされています";
-
-/* No comment provided by engineer. */
-"Too few teams playing" = "プレーしているチームが少なすぎます";
-
-/* No comment provided by engineer. */
-"Too many hogs" = "ハリネズミが多すぎます";
-
-/* No comment provided by engineer. */
-"Too many teams" = "チームが多すぎます";
-
-/* No comment provided by engineer. */
-"Visit our website" = "ウェブサイトを見る";
-
-/* No comment provided by engineer. */
-"Voice" = "音量";
-
-/* No comment provided by engineer. */
-"Wacky" = "奇抜";
-
-/* No comment provided by engineer. */
-"Wait for the Preview" = "プレビューを待つ";
-
-/* No comment provided by engineer. */
-"Weaky" = "弱い者";
-
-/* No comment provided by engineer. */
-"Weapon" = "武器";
-
-/* No comment provided by engineer. */
-"Weapon Ammuntions" = "武器弾薬";
-
-/* No comment provided by engineer. */
-"Weapons" = "武器";
-
-/* No comment provided by engineer. */
-"Weaponset Name" = "武器セット名";
-
-/* No comment provided by engineer. */
-"Well, maybe not..." = "まあ、そうでないかもしれません...";
-
-/* No comment provided by engineer. */
-"Worldwide" = "ワールドワイド";
-
-/* No comment provided by engineer. */
-"You can add a description if you wish" = "お望みなら説明を追加することができます。";
-
-/* No comment provided by engineer. */
-"You exceeded the maximum number of tems allowed in a game" = "ゲームで許可されているチームの最大数を超しました。";
\ No newline at end of file
--- a/project_files/HedgewarsMobile/Locale/Japanese.lproj/Scheme.strings	Thu May 31 01:50:49 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,194 +0,0 @@
-/* game mod description */
-"Land can not be destroyed" = "土地は破壊することができません";
-
-/* game mod title */
-"Solid Land" = "固形の土地";
-
-/* game mod description */
-"Add an indestructable border around the terrain" = "地形の周りに破壊できないボーダーを追加する";
-
-/* game mod title */
-"Add Border" = "ボーダーを追加する";
-
-/* game mod description */
-"Teams will start on opposite sides of the terrain" = "チームは地形の反対側からスタート思案す";
-
-/* game mod title */
-"Divide Team (max 2 teams)" = "チームを分ける (最大二チーム)";
-
-/* game mod description */
-"Lower gravity" = "低い重力";
-
-/* game mod title */
-"Low Gravity" = "低重力";
-
-/* game mod description */
-"Assisted aiming with laser sight" = "レーザーサイトで狙いの補助";
-
-/* game mod title */
-"Laser Sight" = "レーザーサイト";
-
-/* game mod description */
-"All hogs have a personal forcefield" = "全てのハリネズミは自分の力場を持っています";
-
-/* game mod title */
-"Invulnerable" = "無敵";
-
-/* game mod description */
-"All (living) hedgehogs are fully restored at the end of turn" = "全ての (生きている) ハリネズミの体力はターン終了時に完全に復元されます";
-
-/* game mod title */
-"Reset Health" = "体力をリセット";
-
-/* game mod description */
-"Gain 80% of the damage you do back in health" = "ダメージの80% を体力としてもらう";
-
-/* game mod title */
-"Vampirism Mode" = "吸血モード";
-
-/* game mod description */
-"Share your opponents pain, share their damage" = "相手の痛みを共有し、 ダメージを共有する";
-
-/* game mod title */
-"Karma Mode" = "カルマモード";
-
-/* game mod description */
-"Your hogs are unable to move, test your aim" = "あなたのハリネズミは動けない, 狙いを試せ";
-
-/* game mod title */
-"Artillery Mode" = "砲兵モード";
-
-/* game mod description */
-"Defend your fort and destroy the opponents" = "砦を守って相手を潰せ";
-
-/* game mod title */
-"Fort Mode" = "砦モード";
-
-/* game mod description */
-"Order of play is random instead of in room order" = "プレー順はルーム順ではなくランダムです";
-
-/* game mod title */
-"Random Order" = "ランダムオーダー";
-
-/* game mod description */
-"Play with a King; when he dies, your side loses" = "キングとプレーする; キングが死ぬと、あなたの負けです";
-
-/* game mod title */
-"King Mode" = "キングモード";
-
-/* game mod description */
-"Take turns placing your hedgehogs pre-game" = "ゲームの前にターンを取ってハリネズミを置く";
-
-/* game mod title */
-"Place Hedgehogs" = "ハリネズミを置く";
-
-/* game mod description */
-"Ammo is shared between all clan teams" = "弾薬は全ての一族チームの間で共有されます";
-
-/* game mod title */
-"Clan Shares Ammo" = "一族は弾薬を共有します";
-
-/* game mod description */
-"Disable girders when generating random maps" = "ランダムマップを作成するときはガードを無効にする";
-
-/* game mod title */
-"Disable Girders" = "ガードを無効にする";
-
-/* game mod description */
-"Disable land objects when generating maps" = "マップ作成中は土地のオブジェクトを無効にする";
-
-/* game mod title */
-"Disable Land Objects" = "土地のオブジェクトを無効にする";
-
-/* game mod description */
-"AI-controlled hogs respawn on death" = "AIがコントロールするハリネズミは死ぬと再出現します";
-
-/* game mod title */
-"AI Survival Mode" = "AI サバイバルモード";
-
-/* game mod description */
-"Attacking does not end your turn" = "攻撃してもターンは終了しません";
-
-/* game mod title */
-"Unlimited Attacks" = "無限攻撃";
-
-/* game mod description */
-"Weapons are reset to starting values each turn" = "武器は毎ターン初期値にリセットされます";
-
-/* game mod title */
-"Reset Weapons" = "武器をリセット";
-
-/* game mod description */
-"Each hedgehog has its own ammo" = "各ハリネズミが自分の弾薬を持っています";
-
-/* game mod title */
-"Per Hedgehog Ammo" = "ハリネズミあたりの弾薬";
-
-/* game mod description */
-"You will not have to worry about wind any more" = "風のことは気にせずに良くなります";
-
-/* game mod title */
-"Disable Wind" = "風を無効にする";
-
-/* game mod description */
-"Wind will affect almost everything" = "風はほとんどのものに影響します";
-
-/* game mod title */
-"More Wind" = "より強い風";
-
-/* game mod description */
-"Clan teams take turns sharing their time" = "一族のチームはタイムを共有してターンを取ります";
-
-/* game mod title */
-"Tag Team" = "タッグチーム";
-
-/* game mod description */
-"Add an indestructible border along the bottom" = "破壊できないボーダーを下に追加する";
-
-/* game mod title */
-"Bottom Border" = "ボトムボーダー";
-
-
-/* flag description */
-"Initial Health" = "初期体力";
-
-/* flag description */
-"Damage Modifier" = "ダメージ変更";
-
-/* flag description */
-"Turn Time" = "ターンタイム";
-/* flag description */
-"Sudden Death Timeout" = "サデン・デス タイムアウト";
-
-/* flag description */
-"Water Rise Amount" = "水位上昇量";
-
-/* flag description */
-"Health Decrease" = "体力の減少";
-
-/* flag description */
-"Rope Length (%)" = "ロープの長さ (%)";
-
-/* flag description */
-"Crate Drop Turns" = "クレートドロップターン";
-
-/* flag description */
-"Health Kit Probability (%)" = "体力キットの確率 (%)";
-
-/* flag description */
-"Health Amount in Kit" = "キットの体力量";
-
-/* flag description */
-"Mines Time" = "地雷タイム";
-
-/* flag description */
-"Mines Number" = "地雷ナンバー";
-
-/* flag description */
-"Dud Mines Probability (%)" = "不発地雷の確率(%)";
-
-/* flag description */
-"Explosives" = "爆発物";
-
-/* flag description */
-"Get Away Time (%)" = "脱出タイム (%)";
\ No newline at end of file
Binary file project_files/HedgewarsMobile/Locale/Polish.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Polish.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Polish.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Portuguese.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Portuguese.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Portuguese.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Romanian.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Romanian.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Romanian.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Spanish.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Spanish.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/Spanish.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/bg.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/bg.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/bg.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/da.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/da.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/da.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/de.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/de.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/de.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/en.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/en.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/en.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/es.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/es.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/es.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/fi.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/fi.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/fr.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/fr.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/fr.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/it.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/it.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/it.lproj/Scheme.strings has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Locale/ja.lproj/About.strings	Sun Jun 10 19:01:50 2018 +0200
@@ -0,0 +1,44 @@
+/* code credit */
+"Engine, frontend, net server" = "エンジン、フロントエンド、ネットサーバー";
+"Many desktop frontend improvements" = "多くのデスクトップフロントエンドの改善";
+"Many engine and desktop frontend improvements" = "多くのエンジンとデスクトップフロントエンドの改善";
+"Drillrocket, Ballgun, RC Plane weapons" = "ドリルロケット、ボールガン、ラジコン武器";
+"Mine number and time game settings" = "地雷番号とタイムゲーム設定";
+"Desktop frontend improvements" = "デスクトップフロントエンドの改善";
+"Desktop frontend improvements" = "デスクトップフロントエンドの改善";
+"Mac OS X and iPhone version" = "Mac OS X と iPhone バージョン";
+"Many engine and desktop frontend improvements" = "多くのエンジンとデスクトップフロントエンドの改善";
+"Gamepad and Lua integration" = "ゲームパッドとLuaの統合化";
+"Many engine improvements and graphics" = "多くのエンジン改善とグラフィック";
+"Maze maps" = "迷路地図";
+"Engine and desktop frontend improvements" = "エンジンとデスクトップフロントエンドの改善";
+"Lua game modes and missions" = "Lua ゲームモードとミッション";
+"Desktop frontend improvements" = "デスクトップフロントエンドの改善";
+"Android port" = "アンドロイドポート";
+
+/* art credit */
+"Main graphics" = "メイングラフィック";
+"Some hats" = "帽子";
+"Hedgehogs voice" = "ハリネズミの声";
+
+/* translation credit */
+"Brazilian Portuguese" = "ポルトガル語(ブラジル)";
+"Bulgarian" = "ブルガリア語";
+"Czech" = "チェコ語";
+"Chinese" = "中国語";
+"English" = "英語";
+"Finnish" = "フィンランド語";
+"French" = "フランス語";
+"German" = "ドイツ語";
+"Greek" = "ギリシャ語";
+"Italian" = "イタリア語";
+"Japanese" = "日本語";
+"Korean" = "韓国語";
+"Lithuanian" = "リトアニア語";
+"Polish" = "ポーランド語";
+"Portuguese" = "ポルトガル語";
+"Russian" = "ロシア語";
+"Slovak" = "スロバキア語";
+"Spanish" = "スペイン語";
+"Swedish" = "スウェーデン語";
+"Ukrainian" = "ウクライナ語";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Locale/ja.lproj/Localizable.strings	Sun Jun 10 19:01:50 2018 +0200
@@ -0,0 +1,380 @@
+/* No comment provided by engineer. */
+"A monitor has been disconnected while playing and this has ended the match! You need to restart the game if you wish to use the second display again." = "モニターの接続が切断され、マッチを終了してしまいました!二番目のディスプレーをまた使用したい場合はゲームをリスタートしなければいけません。";
+
+/* from the scheme panel
+   from the team panel */
+"Add" = "追加";
+
+/* No comment provided by engineer. */
+"Aggressive" = "積極的";
+
+/* No comment provided by engineer. */
+"All" = "全て";
+
+/* from the settings table */
+"Alternate Damage" = "代わりのダメージ";
+
+/* No comment provided by engineer. */
+"Are you reeeeeally sure?" = "本当にいいですか?";
+
+/* from the settings table */
+"Audio Preferences" = "オーディオ設定";
+
+/* No comment provided by engineer. */
+"Available Teams" = "利用可能なチーム";
+
+/* No comment provided by engineer. */
+"Average" = "平均";
+
+/* No comment provided by engineer. */
+"Backup" = "バックアップ";
+
+/* No comment provided by engineer. */
+"Before playing the preview needs to be generated" = "プレーする前にプレビューを生成する必要があります";
+
+/* No comment provided by engineer. */
+"Before returning the preview needs to be generated" = "戻る前にプレビューを生成する必要があります";
+
+/* No comment provided by engineer. */
+"Brutal" = "残忍";
+
+/* No comment provided by engineer. */
+"Bully" = "いじめっ子";
+
+/* No comment provided by engineer. */
+"Cancel" = "キャンセル";
+
+/* No comment provided by engineer. */
+"Cavern" = "洞窟";
+
+/* No comment provided by engineer. */
+"Change hedgehogs' hat" = "ハリネズミの帽子を変える";
+
+/* No comment provided by engineer. */
+"Chat with the devs in IRC" = "IRC でデベロッパ達とチャットする";
+
+/* No comment provided by engineer. */
+"Choose a charismatic symbol for your team" = "チームのためのカリスマ的なシンボルを選択する";
+
+/* No comment provided by engineer. */
+"Choose hedgehog graves" = "ハリネズミの墓を選択する";
+
+/* No comment provided by engineer. */
+"Choose team fort" = "チームの砦を選択する";
+
+/* from the settings table */
+"Choosing a Scheme will select its associated Weapon" = "スキームを選択すると関連した武器を選択します。";
+
+/* No comment provided by engineer. */
+"Classic Ammo Menu" = "クラシックな弾薬メニュー";
+
+/* No comment provided by engineer. */
+"Community" = "コミュニティー";
+
+/* from the settings table */
+"Damage popups will notify you on every single hit" = "ダメージポップアップはすべてのヒットを通知してくれます。";
+
+/* from the scheme panel
+   from the team panel */
+"Done" = "終了";
+
+/* from the scheme panel
+   from the team panel */
+"Edit" = "編集";
+
+/* No comment provided by engineer. */
+"Edit scheme preferences" = "スキーム設定を編集";
+
+/* No comment provided by engineer. */
+"Edit team settings" = "チーム設定を編集";
+
+/* No comment provided by engineer. */
+"Edit weapons preferences" = "武器設定を編集";
+
+/* No comment provided by engineer. */
+"End Game" = "ゲームを終了する";
+
+/* No comment provided by engineer. */
+"Flag" = "フラグ";
+
+/* No comment provided by engineer. */
+"Follow us on Twitter" = "ツイッターでフォローする";
+
+/* No comment provided by engineer. */
+"Fort" = "砦";
+
+/* No comment provided by engineer. */
+"Game Modifiers" = "ゲームの変更";
+
+/* No comment provided by engineer. */
+"Game Settings" = "ゲームの設定";
+
+/* No comment provided by engineer. */
+"General" = "一般";
+
+/* No comment provided by engineer. */
+"Grave" = "墓";
+
+/* No comment provided by engineer. */
+"Hedgewars supports multi-monitor configurations, but the screen has to be connected before launching the game." = "Hedgewarsはマルチモニター設定をサポートしていますが、スクリーンはゲームをスタートする前に接続されていなければいけません。";
+
+/* No comment provided by engineer. */
+"Hogs controlled by AI" = "AIにコントロールされたハリネズミ";
+
+/* No comment provided by engineer. */
+"Hold your finger on a weapon to see what it does.\nTap anywhere to dismiss." = "武器の上でホールドして何をするか見る。\nほかの部分をタップして閉じる。";
+
+/* No comment provided by engineer. */
+"Hold your finger on a weapon to see what it does.\nYou can move this window anywhere on the screen." = "武器の上でホールドして何をするか見る。\nこのウィンドウはスクリーンのどこにでも動かすことができます。";
+
+/* ammo selection */
+"Initial quantity " = "初期量";
+
+/* from the settings table */
+"Insert your password" = "パスワードを入力";
+
+/* from the settings table */
+"Insert your username (if you have one)" = "ユーザーネームを入力 (持っていた場合)";
+
+/* No comment provided by engineer. */
+"Join us on Facebook" = "Facebookで参加する";
+
+/* No comment provided by engineer. */
+"Large" = "大きな";
+
+/* No comment provided by engineer. */
+"Large Floating Islands" = "大きな浮き島";
+
+/* No comment provided by engineer. */
+"Large Tunnels" = "大きなトンネル";
+
+/* No comment provided by engineer. */
+"Leave a positive review on iTunes!" = "iTunesでポジティブなレビューを残す!";
+
+/* No comment provided by engineer. */
+"Level" = "レベル";
+
+/* No comment provided by engineer. */
+"Loading..." = "ロード中...";
+
+/* from the settings table */
+"Main Configuration" = "メイン設定";
+
+/* No comment provided by engineer. */
+"Mark the death of your fallen warriors" = "あなたの倒れた戦士の死をマーク";
+
+/* No comment provided by engineer. */
+"Max Hogs:" = "ハリネズミの最大数:";
+
+/* No comment provided by engineer. */
+"Medium" = "中くらい";
+
+/* No comment provided by engineer. */
+"Medium Floating Islands" = "中くらいの浮き島";
+
+/* No comment provided by engineer. */
+"Medium Tunnels" = "中くらいのトンネル";
+
+/* No comment provided by engineer. */
+"Missing detail" = "詳細が抜けています";
+
+/* No comment provided by engineer. */
+"Missions don't need further configuration" = "ミッションはこれ以上の設定を必要としません";
+
+/* from the settings table */
+"Music" = "音楽";
+
+/* No comment provided by engineer. */
+"Names and Hats" = "ネームと帽子";
+
+/* from the settings table */
+"Nickname" = "ニックネーム";
+
+/* No comment provided by engineer. */
+"No filter" = "フィルターなし";
+
+/* No comment provided by engineer. */
+"No thanks" = "遠慮します";
+
+/* ammo selection */
+"Number of turns before you can use this weapon " = "この武器を使えるようになるまでのターン数";
+
+/* Short for 'Never' */
+"Nvr" = "絶対にない";
+
+/* No comment provided by engineer. */
+"Of course!" = "もちろん!";
+
+/* No comment provided by engineer. */
+"Ok, got it" = "Ok, わかった";
+
+/* No comment provided by engineer. */
+"Opt for controlling the team or let the AI lead" = "チームをコントロールするかAIをリードさせる";
+
+/* from the settings table */
+"Other Settings" = "ほかの設定";
+
+/* from the settings table */
+"Password" = "パスワード";
+
+/* No comment provided by engineer. */
+"Pick a slang your hogs will speak" = "あなたのハリネズミが話すスラングを選択";
+
+/* No comment provided by engineer. */
+"Playing Teams" = "プレー中のチーム";
+
+/* ammo selection */
+"Presence probability in crates " = "クレートの中の存在確率";
+
+/* No comment provided by engineer. */
+"Press to resume playing or swipe to delete the save file." = "押してプレーを再開するか、スワイプしてセーブファイルを削除。";
+
+/* No comment provided by engineer. */
+"Preview not available" = "プレビューが利用できません";
+
+/* ammo selection */
+"Quantity that you will find in a crate " = "クレーとの中で見つかる量";
+
+/* No comment provided by engineer. */
+"Remind me later" = "後で連絡";
+
+/* Short for 'Random' */
+"Rnd" = "ランダム";
+
+/* No comment provided by engineer. */
+"Save" = "保存";
+
+/* No comment provided by engineer. */
+"Scheme" = "スキーム";
+
+/* No comment provided by engineer. */
+"Scheme mismatch" = "スキームミスマッチ";
+
+/* No comment provided by engineer. */
+"Scheme Name" = "スキーム名";
+
+/* No comment provided by engineer. */
+"Schemes" = "スキーム";
+
+/* No comment provided by engineer. */
+"Select at least two teams to play a game" = "ゲームをプレーするには最低二チーム選択してください。";
+
+/* No comment provided by engineer. */
+"Select one Scheme and one Weapon for this game" = "このゲームのためにスキームと武器を一つずつ選択してください。";
+
+/* No comment provided by engineer. */
+"Select the team invincible fortress (only valid for fort games)" = "無敵砦のチームを選択する (砦ゲームのみ有効)";
+
+/* from the settings table */
+"Select which style of ammo menu you prefer" = "弾薬メニューのスタイルを選択してください";
+
+/* No comment provided by engineer. */
+"Set difficulty level" = "難易度レベルをセットする";
+
+/* No comment provided by engineer. */
+"Set hedgehog voices" = "ハリネズミの声をセットする";
+
+/* No comment provided by engineer. */
+"Set team flag" = "チームフラグをセットする";
+
+/* on the overlay */
+"Set!" = "セット!";
+
+/* No comment provided by engineer. */
+"Show Help" = "ヘルプを表示する";
+
+/* No comment provided by engineer. */
+"Small" = "小さい";
+
+/* No comment provided by engineer. */
+"Small Floating Islands" = "小さな浮き島";
+
+/* No comment provided by engineer. */
+"Small Tunnels" = "小さなトンネル";
+
+/* from the settings table */
+"Sound" = "サウンド";
+
+/* No comment provided by engineer. */
+"Style" = "スタイル";
+
+/* No comment provided by engineer. */
+"Support" = "サポート";
+
+/* No comment provided by engineer. */
+"Sync Schemes and Weapons" = "スキームと武器を同期する";
+
+/* No comment provided by engineer. */
+"Tag" = "タグ";
+
+/* No comment provided by engineer. */
+"Tap to add hogs or change color, touch and hold to remove a team." = "ハリネズミを追加するか色を変更するにはタップ、チームを取り除くにはタッチしてホールドしてください。";
+
+/* No comment provided by engineer. */
+"Team Name" = "チーム名";
+
+/* No comment provided by engineer. */
+"Team Preferences" = "チーム設定";
+
+/* No comment provided by engineer. */
+"Teams" = "チーム";
+
+/* No comment provided by engineer. */
+"The map is too small for that many hogs" = "このマップはこれだけのハリネズミには小さすぎます。";
+
+/* No comment provided by engineer. */
+"The robot badge indicates an AI-controlled team." = "ロボットバッジはAIがコントロールするチームを指します。";
+
+/* No comment provided by engineer. */
+"The scheme you selected allows only for two teams" = "選択したスキームは二チーム用です。";
+
+/* No comment provided by engineer. */
+"This weapon is locked" = "この武器はロックされています";
+
+/* No comment provided by engineer. */
+"Too few teams playing" = "プレーしているチームが少なすぎます";
+
+/* No comment provided by engineer. */
+"Too many hogs" = "ハリネズミが多すぎます";
+
+/* No comment provided by engineer. */
+"Too many teams" = "チームが多すぎます";
+
+/* No comment provided by engineer. */
+"Visit our website" = "ウェブサイトを見る";
+
+/* No comment provided by engineer. */
+"Voice" = "音量";
+
+/* No comment provided by engineer. */
+"Wacky" = "奇抜";
+
+/* No comment provided by engineer. */
+"Wait for the Preview" = "プレビューを待つ";
+
+/* No comment provided by engineer. */
+"Weaky" = "弱い者";
+
+/* No comment provided by engineer. */
+"Weapon" = "武器";
+
+/* No comment provided by engineer. */
+"Weapon Ammuntions" = "武器弾薬";
+
+/* No comment provided by engineer. */
+"Weapons" = "武器";
+
+/* No comment provided by engineer. */
+"Weaponset Name" = "武器セット名";
+
+/* No comment provided by engineer. */
+"Well, maybe not..." = "まあ、そうでないかもしれません...";
+
+/* No comment provided by engineer. */
+"Worldwide" = "ワールドワイド";
+
+/* No comment provided by engineer. */
+"You can add a description if you wish" = "お望みなら説明を追加することができます。";
+
+/* No comment provided by engineer. */
+"You exceeded the maximum number of tems allowed in a game" = "ゲームで許可されているチームの最大数を超しました。";
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Locale/ja.lproj/Scheme.strings	Sun Jun 10 19:01:50 2018 +0200
@@ -0,0 +1,194 @@
+/* game mod description */
+"Land can not be destroyed" = "土地は破壊することができません";
+
+/* game mod title */
+"Solid Land" = "固形の土地";
+
+/* game mod description */
+"Add an indestructable border around the terrain" = "地形の周りに破壊できないボーダーを追加する";
+
+/* game mod title */
+"Add Border" = "ボーダーを追加する";
+
+/* game mod description */
+"Teams will start on opposite sides of the terrain" = "チームは地形の反対側からスタート思案す";
+
+/* game mod title */
+"Divide Team (max 2 teams)" = "チームを分ける (最大二チーム)";
+
+/* game mod description */
+"Lower gravity" = "低い重力";
+
+/* game mod title */
+"Low Gravity" = "低重力";
+
+/* game mod description */
+"Assisted aiming with laser sight" = "レーザーサイトで狙いの補助";
+
+/* game mod title */
+"Laser Sight" = "レーザーサイト";
+
+/* game mod description */
+"All hogs have a personal forcefield" = "全てのハリネズミは自分の力場を持っています";
+
+/* game mod title */
+"Invulnerable" = "無敵";
+
+/* game mod description */
+"All (living) hedgehogs are fully restored at the end of turn" = "全ての (生きている) ハリネズミの体力はターン終了時に完全に復元されます";
+
+/* game mod title */
+"Reset Health" = "体力をリセット";
+
+/* game mod description */
+"Gain 80% of the damage you do back in health" = "ダメージの80% を体力としてもらう";
+
+/* game mod title */
+"Vampirism Mode" = "吸血モード";
+
+/* game mod description */
+"Share your opponents pain, share their damage" = "相手の痛みを共有し、 ダメージを共有する";
+
+/* game mod title */
+"Karma Mode" = "カルマモード";
+
+/* game mod description */
+"Your hogs are unable to move, test your aim" = "あなたのハリネズミは動けない, 狙いを試せ";
+
+/* game mod title */
+"Artillery Mode" = "砲兵モード";
+
+/* game mod description */
+"Defend your fort and destroy the opponents" = "砦を守って相手を潰せ";
+
+/* game mod title */
+"Fort Mode" = "砦モード";
+
+/* game mod description */
+"Order of play is random instead of in room order" = "プレー順はルーム順ではなくランダムです";
+
+/* game mod title */
+"Random Order" = "ランダムオーダー";
+
+/* game mod description */
+"Play with a King; when he dies, your side loses" = "キングとプレーする; キングが死ぬと、あなたの負けです";
+
+/* game mod title */
+"King Mode" = "キングモード";
+
+/* game mod description */
+"Take turns placing your hedgehogs pre-game" = "ゲームの前にターンを取ってハリネズミを置く";
+
+/* game mod title */
+"Place Hedgehogs" = "ハリネズミを置く";
+
+/* game mod description */
+"Ammo is shared between all clan teams" = "弾薬は全ての一族チームの間で共有されます";
+
+/* game mod title */
+"Clan Shares Ammo" = "一族は弾薬を共有します";
+
+/* game mod description */
+"Disable girders when generating random maps" = "ランダムマップを作成するときはガードを無効にする";
+
+/* game mod title */
+"Disable Girders" = "ガードを無効にする";
+
+/* game mod description */
+"Disable land objects when generating maps" = "マップ作成中は土地のオブジェクトを無効にする";
+
+/* game mod title */
+"Disable Land Objects" = "土地のオブジェクトを無効にする";
+
+/* game mod description */
+"AI-controlled hogs respawn on death" = "AIがコントロールするハリネズミは死ぬと再出現します";
+
+/* game mod title */
+"AI Survival Mode" = "AI サバイバルモード";
+
+/* game mod description */
+"Attacking does not end your turn" = "攻撃してもターンは終了しません";
+
+/* game mod title */
+"Unlimited Attacks" = "無限攻撃";
+
+/* game mod description */
+"Weapons are reset to starting values each turn" = "武器は毎ターン初期値にリセットされます";
+
+/* game mod title */
+"Reset Weapons" = "武器をリセット";
+
+/* game mod description */
+"Each hedgehog has its own ammo" = "各ハリネズミが自分の弾薬を持っています";
+
+/* game mod title */
+"Per Hedgehog Ammo" = "ハリネズミあたりの弾薬";
+
+/* game mod description */
+"You will not have to worry about wind any more" = "風のことは気にせずに良くなります";
+
+/* game mod title */
+"Disable Wind" = "風を無効にする";
+
+/* game mod description */
+"Wind will affect almost everything" = "風はほとんどのものに影響します";
+
+/* game mod title */
+"More Wind" = "より強い風";
+
+/* game mod description */
+"Clan teams take turns sharing their time" = "一族のチームはタイムを共有してターンを取ります";
+
+/* game mod title */
+"Tag Team" = "タッグチーム";
+
+/* game mod description */
+"Add an indestructible border along the bottom" = "破壊できないボーダーを下に追加する";
+
+/* game mod title */
+"Bottom Border" = "ボトムボーダー";
+
+
+/* flag description */
+"Initial Health" = "初期体力";
+
+/* flag description */
+"Damage Modifier" = "ダメージ変更";
+
+/* flag description */
+"Turn Time" = "ターンタイム";
+/* flag description */
+"Sudden Death Timeout" = "サデン・デス タイムアウト";
+
+/* flag description */
+"Water Rise Amount" = "水位上昇量";
+
+/* flag description */
+"Health Decrease" = "体力の減少";
+
+/* flag description */
+"Rope Length (%)" = "ロープの長さ (%)";
+
+/* flag description */
+"Crate Drop Turns" = "クレートドロップターン";
+
+/* flag description */
+"Health Kit Probability (%)" = "体力キットの確率 (%)";
+
+/* flag description */
+"Health Amount in Kit" = "キットの体力量";
+
+/* flag description */
+"Mines Time" = "地雷タイム";
+
+/* flag description */
+"Mines Number" = "地雷ナンバー";
+
+/* flag description */
+"Dud Mines Probability (%)" = "不発地雷の確率(%)";
+
+/* flag description */
+"Explosives" = "爆発物";
+
+/* flag description */
+"Get Away Time (%)" = "脱出タイム (%)";
\ No newline at end of file
Binary file project_files/HedgewarsMobile/Locale/pl.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/pl.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/pl.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/pt.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/pt.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/pt.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Locale/ro.lproj/About.strings has changed
Binary file project_files/HedgewarsMobile/Locale/ro.lproj/Localizable.strings has changed
Binary file project_files/HedgewarsMobile/Locale/ro.lproj/Scheme.strings has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/Default-ipad-Landscape.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/Default.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/Default@2x.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/Icon-60@2x.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/Icon-72.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/Icon-76.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/Icon-76@2x.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/Icon-Small-50.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/Icon-Small.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/Icon-Small@2x.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/Icon.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/Icon@2x.png has changed
Binary file project_files/HedgewarsMobile/Resources/Icons/iTunesArtwork.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/HedgewarsMobile/Resources/LaunchScreen.xib	Sun Jun 10 19:01:50 2018 +0200
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina4_7" orientation="landscape">
+        <adaptation id="fullscreen"/>
+    </device>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB">
+            <rect key="frame" x="0.0" y="0.0" width="667" height="375"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="background.png" translatesAutoresizingMaskIntoConstraints="NO" id="5c9-IM-Yih">
+                    <rect key="frame" x="0.0" y="0.0" width="667" height="375"/>
+                </imageView>
+            </subviews>
+            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="5c9-IM-Yih" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="1vc-8o-Ux5"/>
+                <constraint firstAttribute="trailing" secondItem="5c9-IM-Yih" secondAttribute="trailing" id="1yx-EN-iQi"/>
+                <constraint firstItem="5c9-IM-Yih" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="T5s-JS-oi9"/>
+                <constraint firstAttribute="bottom" secondItem="5c9-IM-Yih" secondAttribute="bottom" id="mHx-0u-9gx"/>
+            </constraints>
+        </view>
+    </objects>
+    <resources>
+        <image name="background.png" width="480" height="320"/>
+    </resources>
+</document>