# HG changeset patch # User antonc27 # Date 1528650110 -7200 # Node ID 236cc4cf2448c9074186c983496c32518a29bedf # Parent 7487e683c6b64205af0db63663283fd5c65325a2# Parent 6e8b807bda4bf33d6f5e32a301fabc23e777e06c Merge ios-develop into default diff -r 7487e683c6b6 -r 236cc4cf2448 .hgtags --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 hedgewars/uInputHandler.pas --- 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} diff -r 7487e683c6b6 -r 236cc4cf2448 hedgewars/uTeams.pas --- 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; diff -r 7487e683c6b6 -r 236cc4cf2448 hedgewars/uWorld.pas --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 misc/liblua/Xcode/Lua.xcodeproj/project.pbxproj --- 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; diff -r 7487e683c6b6 -r 236cc4cf2448 misc/liblua/loslib.c --- 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 + #if TARGET_OS_IPHONE + #define LUA_PLATFORM_IOS 1 + #endif +#endif + +#ifdef LUA_PLATFORM_IOS + #include + 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; } diff -r 7487e683c6b6 -r 236cc4cf2448 misc/libphysfs/Xcode/Physfs.xcodeproj/project.pbxproj --- 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; diff -r 7487e683c6b6 -r 236cc4cf2448 misc/libphyslayer/Xcode/Physlayer.xcodeproj/project.pbxproj --- 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; diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/AboutViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/AboutViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/AudioManagerController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/AudioManagerController.m --- 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; diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/CampaignViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/CampaignViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/CampaignsViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/CreationChamber.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/CreationChamber.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/DefinesAndMacros.h --- 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/"] diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/EditableCellView.h --- 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 --(void) saveTextFieldValue:(NSString *)textString withTag:(NSInteger) tagValue; +- (void)saveTextFieldValue:(NSString *)textString withTag:(NSInteger)tagValue; @end @interface EditableCellView : UITableViewCell { - id delegate; + id __weak delegate; UITextField *textField; UILabel *titleLabel; NSUInteger minimumCharacters; @@ -38,16 +38,16 @@ NSString *oldValue; } -@property (nonatomic,assign) id 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 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/EditableCellView.m --- 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]; diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/EngineProtocolNetwork.h --- 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 --(void) gameEndedWithStatistics:(NSArray *)stats; +- (void)gameEndedWithStatistics:(NSArray *)stats; @end @interface EngineProtocolNetwork : NSObject { - id delegate; + id __weak delegate; NSOutputStream *stream; TCPsocket csd; NSInteger enginePort; } -@property (nonatomic,assign) id delegate; -@property (nonatomic,retain) NSOutputStream *stream; +@property (nonatomic, weak) id 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/EngineProtocolNetwork.m --- 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> addhh @@ -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]; diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/ExtraCategories.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/ExtraCategories.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/FlagsViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/FlagsViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/FortsViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/FortsViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/GameConfigViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/GameConfigViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/GameInterfaceBridge.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/GameLogViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/GravesViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/GravesViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/HWUtils.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/HWUtils.m --- 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; } diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.m --- 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); diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/HelpPageLobbyViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/HelpPageLobbyViewController.m --- 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){ diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/HogHatViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/HogHatViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/HoldTableViewCell.h --- 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 --(void) holdAction:(NSString *)content onTable:(UITableView *)aTableView; +- (void)holdAction:(NSString *)content onTable:(UITableView *)aTableView; @end @interface HoldTableViewCell : UITableViewCell { - id delegate; + id __weak delegate; NSTimeInterval time; } -@property (nonatomic,assign) id delegate; +@property (nonatomic, weak) id delegate; --(void) holdAction; +- (void)holdAction; @end diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/HoldTableViewCell.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/IniParser.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/LevelViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/LevelViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/MNEValueTrackingSlider.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/MNEValueTrackingSlider.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/MXAudioPlayerFadeOperation.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/MXAudioPlayerFadeOperation.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/MainMenuViewController-iPad.xib --- 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 @@ - + diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/MainMenuViewController.h --- 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 --(IBAction) switchViews:(id)sender; +- (IBAction)switchViews:(id)sender; @end diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/MainMenuViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/MapConfigViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/MapConfigViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/MapPreviewButtonView.h --- 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 --(void) turnOnWidgets; --(void) setMaxLabelText:(NSString *)string; --(NSDictionary *)getDataForEngine; +- (void)turnOnWidgets; +- (void)setMaxLabelText:(NSString *)string; +- (NSDictionary *)getDataForEngine; @end @interface MapPreviewButtonView : UIButton { - id delegate; + id __weak delegate; TCPsocket sd, csd; NSInteger maxHogs; } -@property (nonatomic,assign) id delegate; +@property (nonatomic,weak) id 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/MapPreviewButtonView.m --- 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; diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/MissionTrainingViewController.h --- 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 -@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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/MissionTrainingViewController.m --- 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 #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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/ObjcExports.m --- 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]; */ } diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/RestoreViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/RestoreViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/SavedGamesViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/SavedGamesViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/SchemeSettingsViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/SchemeSettingsViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m --- 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]; } diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/ServerProtocolNetwork.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/ServerProtocolNetwork.m --- 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"]) { diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/SettingsBaseViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/SettingsBaseViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/SingleSchemeViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/SingleTeamViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/SingleTeamViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/SingleWeaponViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/SingleWeaponViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/SquareButtonView.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/SquareButtonView.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/StatsPageViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/StatsPageViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/SupportViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/SupportViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/TableViewControllerWithDoneButton.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/TeamConfigViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/TeamConfigViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/TeamSettingsViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/TeamSettingsViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/UIImageExtra.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/UIImageExtra.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/VoicesViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/VoicesViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/WeaponCellView.h --- 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 --(void) updateValues:(NSArray *)withArray atIndex:(NSInteger) index; +- (void)updateValues:(NSArray *)withArray atIndex:(NSInteger)index; @end @interface WeaponCellView : UITableViewCell { - id delegate; + id __weak delegate; UILabel *weaponName; UIImageView *weaponIcon; @@ -50,26 +50,26 @@ UILabel *helpLabel; } -@property (nonatomic,assign) id delegate; +@property (nonatomic, weak) id 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/WeaponCellView.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/WeaponSettingsViewController.h --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Classes/WeaponSettingsViewController.m --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Default-568h@2x.png Binary file project_files/HedgewarsMobile/Default-568h@2x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj --- 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 = ""; }; 610C8E3614E018D200CF5C4C /* MNEValueTrackingSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MNEValueTrackingSlider.m; path = Classes/MNEValueTrackingSlider.m; sourceTree = ""; }; 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 = ""; }; - 6115651B147F48AE006729A9 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = Locale/English.lproj/Localizable.strings; sourceTree = ""; }; - 6115651C147F48AE006729A9 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = Locale/English.lproj/Scheme.strings; sourceTree = ""; }; - 61156526147F49E1006729A9 /* Spanish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Spanish; path = Locale/Spanish.lproj/About.strings; sourceTree = ""; }; - 61156527147F4A2E006729A9 /* Spanish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Spanish; path = Locale/Spanish.lproj/Localizable.strings; sourceTree = ""; }; - 61156528147F4A3C006729A9 /* Spanish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Spanish; path = Locale/Spanish.lproj/Scheme.strings; sourceTree = ""; }; - 6115652B147F4C45006729A9 /* French */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = French; path = Locale/French.lproj/Scheme.strings; sourceTree = ""; }; - 6115652C147F4C4C006729A9 /* French */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = French; path = Locale/French.lproj/Localizable.strings; sourceTree = ""; }; - 6115652D147F4C52006729A9 /* French */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = French; path = Locale/French.lproj/About.strings; sourceTree = ""; }; - 61156530147F4D10006729A9 /* Polish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Polish; path = Locale/Polish.lproj/About.strings; sourceTree = ""; }; - 61156531147F4D17006729A9 /* Polish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Polish; path = Locale/Polish.lproj/Localizable.strings; sourceTree = ""; }; - 61156532147F4D1E006729A9 /* Polish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Polish; path = Locale/Polish.lproj/Scheme.strings; sourceTree = ""; }; - 61177BA7148A658900686905 /* German */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = German; path = Locale/German.lproj/Localizable.strings; sourceTree = ""; }; - 61177BA9148A660C00686905 /* German */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = German; path = Locale/German.lproj/Scheme.strings; sourceTree = ""; }; - 61177BAA148A661600686905 /* German */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = German; path = Locale/German.lproj/About.strings; sourceTree = ""; }; - 61177BE4148B881C00686905 /* Danish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Danish; path = Locale/Danish.lproj/About.strings; sourceTree = ""; }; - 61177BF0148B882500686905 /* Danish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Danish; path = Locale/Danish.lproj/Localizable.strings; sourceTree = ""; }; - 61177BF1148B882F00686905 /* Danish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Danish; path = Locale/Danish.lproj/Scheme.strings; sourceTree = ""; }; + 6115651A147F48AE006729A9 /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = Locale/en.lproj/About.strings; sourceTree = ""; }; + 6115651B147F48AE006729A9 /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = Locale/en.lproj/Localizable.strings; sourceTree = ""; }; + 6115651C147F48AE006729A9 /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = Locale/en.lproj/Scheme.strings; sourceTree = ""; }; + 61156526147F49E1006729A9 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Locale/es.lproj/About.strings; sourceTree = ""; }; + 61156527147F4A2E006729A9 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Locale/es.lproj/Localizable.strings; sourceTree = ""; }; + 61156528147F4A3C006729A9 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Locale/es.lproj/Scheme.strings; sourceTree = ""; }; + 6115652B147F4C45006729A9 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = Locale/fr.lproj/Scheme.strings; sourceTree = ""; }; + 6115652C147F4C4C006729A9 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = Locale/fr.lproj/Localizable.strings; sourceTree = ""; }; + 6115652D147F4C52006729A9 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = Locale/fr.lproj/About.strings; sourceTree = ""; }; + 61156530147F4D10006729A9 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = Locale/pl.lproj/About.strings; sourceTree = ""; }; + 61156531147F4D17006729A9 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = Locale/pl.lproj/Localizable.strings; sourceTree = ""; }; + 61156532147F4D1E006729A9 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = Locale/pl.lproj/Scheme.strings; sourceTree = ""; }; + 61177BA7148A658900686905 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Locale/de.lproj/Localizable.strings; sourceTree = ""; }; + 61177BA9148A660C00686905 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Locale/de.lproj/Scheme.strings; sourceTree = ""; }; + 61177BAA148A661600686905 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Locale/de.lproj/About.strings; sourceTree = ""; }; + 61177BE4148B881C00686905 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = Locale/da.lproj/About.strings; sourceTree = ""; }; + 61177BF0148B882500686905 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = Locale/da.lproj/Localizable.strings; sourceTree = ""; }; + 61177BF1148B882F00686905 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = Locale/da.lproj/Scheme.strings; sourceTree = ""; }; 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 = ""; }; 6147DAD21253DCDE0010357E /* savesButton.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = savesButton.png; path = Resources/Frontend/savesButton.png; sourceTree = ""; }; - 6154A53114C37E4A00F6EEF6 /* Romanian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Romanian; path = Locale/Romanian.lproj/About.strings; sourceTree = ""; }; - 6154A53E14C37E5400F6EEF6 /* Romanian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Romanian; path = Locale/Romanian.lproj/Localizable.strings; sourceTree = ""; }; - 6154A54014C37EB100F6EEF6 /* Romanian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Romanian; path = Locale/Romanian.lproj/Scheme.strings; sourceTree = ""; }; + 6154A53114C37E4A00F6EEF6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = Locale/ro.lproj/About.strings; sourceTree = ""; }; + 6154A53E14C37E5400F6EEF6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = Locale/ro.lproj/Localizable.strings; sourceTree = ""; }; + 6154A54014C37EB100F6EEF6 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = Locale/ro.lproj/Scheme.strings; sourceTree = ""; }; 61589C5A144B4322007BFAA4 /* config.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = config.inc; sourceTree = ""; }; 615AD96112073B4D00F2FF04 /* startGameButton.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = startGameButton.png; path = Resources/Frontend/startGameButton.png; sourceTree = ""; }; 615AD9E8120764CA00F2FF04 /* backButton.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = backButton.png; path = Resources/Frontend/backButton.png; sourceTree = ""; }; @@ -590,7 +585,6 @@ 6167CA36142A6ED7003DD50F /* bot5@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "bot5@2x.png"; path = "Resources/Icons/bot5@2x.png"; sourceTree = ""; }; 6167CB46142A8769003DD50F /* basehat-hedgehog.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "basehat-hedgehog.png"; path = "Resources/Icons/basehat-hedgehog.png"; sourceTree = ""; }; 6167CB47142A8769003DD50F /* basehat-hedgehog@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "basehat-hedgehog@2x.png"; path = "Resources/Icons/basehat-hedgehog@2x.png"; sourceTree = ""; }; - 6172FEA21298C7F900D73365 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "Resources/Icons/Default@2x.png"; sourceTree = ""; }; 6172FEC81298CE4800D73365 /* savesButton@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "savesButton@2x.png"; path = "Resources/Frontend/savesButton@2x.png"; sourceTree = ""; }; 6172FECA1298CE4E00D73365 /* settingsButton@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "settingsButton@2x.png"; path = "Resources/Frontend/settingsButton@2x.png"; sourceTree = ""; }; 6172FED31298CE6600D73365 /* backButton@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "backButton@2x.png"; path = "Resources/Frontend/backButton@2x.png"; sourceTree = ""; }; @@ -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 = ""; }; - 617BC2391490211500E1C294 /* Italian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Italian; path = Locale/Italian.lproj/Localizable.strings; sourceTree = ""; }; - 617BC23A1490211F00E1C294 /* Italian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Italian; path = Locale/Italian.lproj/Scheme.strings; sourceTree = ""; }; + 617BC22D1490210E00E1C294 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = Locale/it.lproj/About.strings; sourceTree = ""; }; + 617BC2391490211500E1C294 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = Locale/it.lproj/Localizable.strings; sourceTree = ""; }; + 617BC23A1490211F00E1C294 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = Locale/it.lproj/Scheme.strings; sourceTree = ""; }; 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 = ""; }; - 6183D83D11E2BCE200A88903 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = Resources/Icons/Default.png; sourceTree = ""; }; 618899811299516000D55FD6 /* title@2x~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "title@2x~iphone.png"; path = "Resources/Frontend/title@2x~iphone.png"; sourceTree = ""; }; 61889984129995B500D55FD6 /* title~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "title~ipad.png"; path = "Resources/Frontend/title~ipad.png"; sourceTree = ""; }; 61915D58143A4E2C00299991 /* MissionTrainingViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MissionTrainingViewController.h; sourceTree = ""; }; @@ -658,9 +650,9 @@ 6199E836124647DE00DADF8C /* SupportViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SupportViewController.h; sourceTree = ""; }; 6199E837124647DE00DADF8C /* SupportViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SupportViewController.m; sourceTree = ""; }; 6199E86C12464A8E00DADF8C /* surprise.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = surprise.png; path = Resources/surprise.png; sourceTree = ""; }; - 619BCEC41495615700C1C409 /* Bulgarian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Bulgarian; path = Locale/Bulgarian.lproj/About.strings; sourceTree = ""; }; - 619BCED01495615F00C1C409 /* Bulgarian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Bulgarian; path = Locale/Bulgarian.lproj/Localizable.strings; sourceTree = ""; }; - 619BCED11495616700C1C409 /* Bulgarian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Bulgarian; path = Locale/Bulgarian.lproj/Scheme.strings; sourceTree = ""; }; + 619BCEC41495615700C1C409 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = Locale/bg.lproj/About.strings; sourceTree = ""; }; + 619BCED01495615F00C1C409 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = Locale/bg.lproj/Localizable.strings; sourceTree = ""; }; + 619BCED11495616700C1C409 /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = Locale/bg.lproj/Scheme.strings; sourceTree = ""; }; 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 = ""; }; 619C5BA1124FA59000D041AE /* MapPreviewButtonView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MapPreviewButtonView.m; path = Classes/MapPreviewButtonView.m; sourceTree = ""; }; @@ -694,16 +686,16 @@ 61C079E311F35A300072BF46 /* EditableCellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EditableCellView.m; path = Classes/EditableCellView.m; sourceTree = ""; }; 61C28D3D142D380400DA16C2 /* AudioManagerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioManagerController.h; path = Classes/AudioManagerController.h; sourceTree = ""; }; 61C28D3E142D380400DA16C2 /* AudioManagerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AudioManagerController.m; path = Classes/AudioManagerController.m; sourceTree = ""; }; - 61C6783F14B3DD020087425A /* Portuguese */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Portuguese; path = Locale/Portuguese.lproj/About.strings; sourceTree = ""; }; - 61C6784B14B3DD0B0087425A /* Portuguese */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Portuguese; path = Locale/Portuguese.lproj/Localizable.strings; sourceTree = ""; }; - 61C6784C14B3DD140087425A /* Portuguese */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Portuguese; path = Locale/Portuguese.lproj/Scheme.strings; sourceTree = ""; }; + 61C6783F14B3DD020087425A /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = Locale/pt.lproj/About.strings; sourceTree = ""; }; + 61C6784B14B3DD0B0087425A /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = Locale/pt.lproj/Localizable.strings; sourceTree = ""; }; + 61C6784C14B3DD140087425A /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = Locale/pt.lproj/Scheme.strings; sourceTree = ""; }; 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 = ""; }; - 61D08D8814AEA9700007C078 /* Japanese */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Japanese; path = Locale/Japanese.lproj/Localizable.strings; sourceTree = ""; }; - 61D08D8914AEA9780007C078 /* Japanese */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Japanese; path = Locale/Japanese.lproj/Scheme.strings; sourceTree = ""; }; + 61D08D8714AEA9670007C078 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Locale/ja.lproj/About.strings; sourceTree = ""; }; + 61D08D8814AEA9700007C078 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Locale/ja.lproj/Localizable.strings; sourceTree = ""; }; + 61D08D8914AEA9780007C078 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Locale/ja.lproj/Scheme.strings; sourceTree = ""; }; 61D0BDF71457508C0011A899 /* ExtraCategories.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ExtraCategories.h; path = Classes/ExtraCategories.h; sourceTree = ""; }; 61D0BDF81457508C0011A899 /* ExtraCategories.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ExtraCategories.m; path = Classes/ExtraCategories.m; sourceTree = ""; }; 61D2059F127CDD1100ABD83E /* ObjcExports.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ObjcExports.h; path = Classes/ObjcExports.h; sourceTree = ""; }; @@ -724,13 +716,6 @@ 61F2E7EB12060E31005734F7 /* checkbox.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = checkbox.png; path = Resources/Icons/checkbox.png; sourceTree = ""; }; 61F544C512AF1748007FD913 /* HoldTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HoldTableViewCell.h; path = Classes/HoldTableViewCell.h; sourceTree = ""; }; 61F544C612AF1748007FD913 /* HoldTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HoldTableViewCell.m; path = Classes/HoldTableViewCell.m; sourceTree = ""; }; - 61F7A43111E290650040BA66 /* Icon-72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-72.png"; path = "Resources/Icons/Icon-72.png"; sourceTree = ""; }; - 61F7A43211E290650040BA66 /* Icon-Small-50.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-Small-50.png"; path = "Resources/Icons/Icon-Small-50.png"; sourceTree = ""; }; - 61F7A43311E290650040BA66 /* Icon-Small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-Small.png"; path = "Resources/Icons/Icon-Small.png"; sourceTree = ""; }; - 61F7A43411E290650040BA66 /* Icon-Small@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-Small@2x.png"; path = "Resources/Icons/Icon-Small@2x.png"; sourceTree = ""; }; - 61F7A43511E290650040BA66 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon.png; path = Resources/Icons/Icon.png; sourceTree = ""; }; - 61F7A43611E290650040BA66 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon@2x.png"; path = "Resources/Icons/Icon@2x.png"; sourceTree = ""; }; - 61F7A43711E290650040BA66 /* iTunesArtwork.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = iTunesArtwork.png; path = Resources/Icons/iTunesArtwork.png; sourceTree = ""; }; 61F9040811DF58B00068B24D /* settingsButton.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = settingsButton.png; path = Resources/Frontend/settingsButton.png; sourceTree = ""; }; 61F9040A11DF59370068B24D /* background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = background.png; path = Resources/Frontend/background.png; sourceTree = ""; }; 61F9040D11DF59D10068B24D /* netplayButton.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = netplayButton.png; path = Resources/Frontend/netplayButton.png; sourceTree = ""; }; @@ -738,6 +723,8 @@ 61F904D611DF7DA30068B24D /* WeaponCellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WeaponCellView.m; path = Classes/WeaponCellView.m; sourceTree = ""; }; 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 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 = ""; }; + EED893CA205DBD4000FED432 /* LaunchScreen.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = LaunchScreen.xib; path = Resources/LaunchScreen.xib; sourceTree = ""; }; F60ACBB51C7BC08B00385701 /* IniParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IniParser.h; path = Classes/IniParser.h; sourceTree = ""; }; F60ACBB61C7BC08B00385701 /* IniParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = IniParser.m; path = Classes/IniParser.m; sourceTree = ""; }; F60D04631BD137B5003ACB00 /* bullet_filled.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = bullet_filled.png; path = Resources/Icons/bullet_filled.png; sourceTree = ""; }; @@ -778,9 +765,6 @@ F65725291B7EB9CC00A86262 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = Locale/ru.lproj/About.strings; sourceTree = ""; }; F657252A1B7EB9CC00A86262 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = Locale/ru.lproj/Localizable.strings; sourceTree = ""; }; F657252B1B7EB9CC00A86262 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = Locale/ru.lproj/Scheme.strings; sourceTree = ""; }; - F65E1DBC1B9B95A400A78ADF /* Icon-60@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-60@2x.png"; path = "Resources/Icons/Icon-60@2x.png"; sourceTree = ""; }; - F65E1DBD1B9B95A400A78ADF /* Icon-76.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-76.png"; path = "Resources/Icons/Icon-76.png"; sourceTree = ""; }; - F65E1DBE1B9B95A400A78ADF /* Icon-76@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-76@2x.png"; path = "Resources/Icons/Icon-76@2x.png"; sourceTree = ""; }; F6756D7E1BD8550500B6AB6B /* LabelWithIBLocalization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LabelWithIBLocalization.h; sourceTree = ""; }; F6756D7F1BD8550500B6AB6B /* LabelWithIBLocalization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LabelWithIBLocalization.m; sourceTree = ""; }; F67FC80F1BEC06E700A9DC75 /* Appirater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Appirater.h; sourceTree = ""; }; @@ -793,7 +777,6 @@ F67FC8211BEC280D00A9DC75 /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = Locale/tr.lproj/Scheme.strings; sourceTree = ""; }; F6BA38441BA7A834005D16EA /* GameLogViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameLogViewController.h; sourceTree = ""; }; F6BA38451BA7A834005D16EA /* GameLogViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GameLogViewController.m; sourceTree = ""; }; - F6D7E09E1B76884E004F3BCF /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; F6D7E0BF1B768F19004F3BCF /* uLandGenPerlin.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uLandGenPerlin.pas; path = ../../hedgewars/uLandGenPerlin.pas; sourceTree = ""; }; F6D7E0C01B768F19004F3BCF /* uLandGenTemplateBased.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uLandGenTemplateBased.pas; path = ../../hedgewars/uLandGenTemplateBased.pas; sourceTree = ""; }; F6D7E0C11B768F19004F3BCF /* uLandUtils.pas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = uLandUtils.pas; path = ../../hedgewars/uLandUtils.pas; sourceTree = ""; }; @@ -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 = ""; @@ -1152,6 +1136,7 @@ isa = PBXGroup; children = ( 61A19AEA14D2010A004B1E6D /* libSDL2.a */, + EE3DE44E1FF6BF1100E2DF37 /* libSDL2.a */, ); name = Products; sourceTree = ""; @@ -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 = ""; @@ -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; diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Contents.json --- /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" + } +} diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@1x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50@1x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/Icon-Small-50x50@2x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png Binary file project_files/HedgewarsMobile/Hedgewars/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Hedgewars/Images.xcassets/Contents.json --- /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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Info.plist --- 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 @@ CFBundleDevelopmentRegion - English + en CFBundleDisplayName ${PRODUCT_NAME} CFBundleExecutable ${EXECUTABLE_NAME} - CFBundleIconFiles - - Icon.png - Icon-72.png - Icon@2x.png - Icon-Small.png - Icon-Small-50.png - Icon-Small@2x.png - Icon-60@2x.png - Icon-76.png - Icon-76@2x.png - CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion @@ -36,8 +24,8 @@ ${HEDGEWARS_REVISION} LSRequiresIPhoneOS - UILaunchImageFile~ipad - Default-ipad + UILaunchStoryboardName + LaunchScreen UIPrerenderedIcon UIRequiresFullScreen diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Bulgarian.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/Bulgarian.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Bulgarian.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/Bulgarian.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Bulgarian.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/Bulgarian.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Danish.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/Danish.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Danish.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/Danish.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Danish.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/Danish.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/English.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/English.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/English.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/English.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/English.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/English.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/French.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/French.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/French.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/French.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/French.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/French.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/German.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/German.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/German.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/German.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/German.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/German.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Italian.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/Italian.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Italian.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/Italian.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Italian.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/Italian.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Japanese.lproj/About.strings --- 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" = "ウクライナ語"; diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Japanese.lproj/Localizable.strings --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Japanese.lproj/Scheme.strings --- 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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Polish.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/Polish.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Polish.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/Polish.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Polish.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/Polish.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Portuguese.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/Portuguese.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Portuguese.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/Portuguese.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Portuguese.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/Portuguese.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Romanian.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/Romanian.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Romanian.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/Romanian.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Romanian.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/Romanian.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Spanish.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/Spanish.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Spanish.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/Spanish.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/Spanish.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/Spanish.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/bg.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/bg.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/bg.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/bg.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/bg.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/bg.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/da.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/da.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/da.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/da.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/da.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/da.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/de.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/de.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/de.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/de.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/de.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/de.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/en.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/en.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/en.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/en.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/en.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/en.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/es.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/es.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/es.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/es.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/es.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/es.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/fi.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/fi.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/fi.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/fi.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/fr.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/fr.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/fr.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/fr.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/fr.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/fr.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/it.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/it.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/it.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/it.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/it.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/it.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/ja.lproj/About.strings --- /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" = "ウクライナ語"; diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/ja.lproj/Localizable.strings --- /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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/ja.lproj/Scheme.strings --- /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 diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/pl.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/pl.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/pl.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/pl.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/pl.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/pl.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/pt.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/pt.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/pt.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/pt.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/pt.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/pt.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/ro.lproj/About.strings Binary file project_files/HedgewarsMobile/Locale/ro.lproj/About.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/ro.lproj/Localizable.strings Binary file project_files/HedgewarsMobile/Locale/ro.lproj/Localizable.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Locale/ro.lproj/Scheme.strings Binary file project_files/HedgewarsMobile/Locale/ro.lproj/Scheme.strings has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Resources/Icons/Default-ipad-Landscape.png Binary file project_files/HedgewarsMobile/Resources/Icons/Default-ipad-Landscape.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Resources/Icons/Default.png Binary file project_files/HedgewarsMobile/Resources/Icons/Default.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Resources/Icons/Default@2x.png Binary file project_files/HedgewarsMobile/Resources/Icons/Default@2x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Resources/Icons/Icon-60@2x.png Binary file project_files/HedgewarsMobile/Resources/Icons/Icon-60@2x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Resources/Icons/Icon-72.png Binary file project_files/HedgewarsMobile/Resources/Icons/Icon-72.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Resources/Icons/Icon-76.png Binary file project_files/HedgewarsMobile/Resources/Icons/Icon-76.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Resources/Icons/Icon-76@2x.png Binary file project_files/HedgewarsMobile/Resources/Icons/Icon-76@2x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Resources/Icons/Icon-Small-50.png Binary file project_files/HedgewarsMobile/Resources/Icons/Icon-Small-50.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Resources/Icons/Icon-Small.png Binary file project_files/HedgewarsMobile/Resources/Icons/Icon-Small.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Resources/Icons/Icon-Small@2x.png Binary file project_files/HedgewarsMobile/Resources/Icons/Icon-Small@2x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Resources/Icons/Icon.png Binary file project_files/HedgewarsMobile/Resources/Icons/Icon.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Resources/Icons/Icon@2x.png Binary file project_files/HedgewarsMobile/Resources/Icons/Icon@2x.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Resources/Icons/iTunesArtwork.png Binary file project_files/HedgewarsMobile/Resources/Icons/iTunesArtwork.png has changed diff -r 7487e683c6b6 -r 236cc4cf2448 project_files/HedgewarsMobile/Resources/LaunchScreen.xib --- /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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +