diff -r 225ede46e3dc -r 4f226963faef project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m --- a/project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m Mon Jan 21 21:52:49 2013 -0500 +++ b/project_files/HedgewarsMobile/Classes/GameInterfaceBridge.m Wed Jan 23 03:37:27 2013 +0100 @@ -96,7 +96,6 @@ // main routine for calling the actual game engine -(void) engineLaunch { - const char *gameArgs[11]; CGFloat width, height; CGFloat screenScale = [[UIScreen mainScreen] safeScale]; NSString *ipcString = [[NSString alloc] initWithFormat:@"%d",self.port]; @@ -127,34 +126,60 @@ // disable tooltips on iPhone if (IS_IPAD() == NO) tmpQuality = tmpQuality | 0x00000400; - - // prevents using an empty nickname - NSString *username = [settings objectForKey:@"username"]; - if ([username length] == 0) - username = [NSString stringWithFormat:@"MobileUser-%@",ipcString]; + NSString *rawQuality = [NSString stringWithFormat:@"%d",tmpQuality]; + NSString *documentsDirectory = DOCUMENTS_FOLDER(); - gameArgs[ 0] = [ipcString UTF8String]; //ipcPort - gameArgs[ 1] = [horizontalSize UTF8String]; //cScreenWidth - gameArgs[ 2] = [verticalSize UTF8String]; //cScreenHeight - gameArgs[ 3] = [[NSString stringWithFormat:@"%d",tmpQuality] UTF8String]; //quality - gameArgs[ 4] = [localeString UTF8String]; //cLocaleFName - gameArgs[ 5] = [username UTF8String]; //UserNick - gameArgs[ 6] = [[[settings objectForKey:@"sound"] stringValue] UTF8String]; //isSoundEnabled - gameArgs[ 7] = [[[settings objectForKey:@"music"] stringValue] UTF8String]; //isMusicEnabled - gameArgs[ 8] = [[[settings objectForKey:@"alternate"] stringValue] UTF8String]; //cAltDamage - gameArgs[ 9] = [resourcePath UTF8String]; //PathPrefix - gameArgs[10] = ([HWUtils gameType] == gtSave) ? [self.savePath UTF8String] : NULL; //recordFileName - + NSMutableArray *gameParameters = [[NSMutableArray alloc] initWithObjects: + @"--internal", + @"--port", ipcString, + @"--width", horizontalSize, + @"--height", verticalSize, + @"--raw-quality", rawQuality, + @"--locale", localeString, + @"--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) { + [gameParameters addObject:@"--nick"]; + [gameParameters addObject: username]; + } + + if ([[settings objectForKey:@"sound"] boolValue] == NO) + [gameParameters addObject:@"--nosound"]; + + if ([[settings objectForKey:@"music"] boolValue] == NO) + [gameParameters addObject:@"--nomusic"]; + + if([[settings objectForKey:@"alternate"] boolValue] == YES) + [gameParameters addObject:@"--altdmg"]; + + if ([HWUtils gameType] == gtSave) + [gameParameters addObject:self.savePath]; + [HWUtils setGameStatus:gsLoading]; + 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]; + // this is the pascal function that starts the game - Game(gameArgs); + Game(argc, argv); + + // cleanup + for (int i = 0; i < argc; i++) + free((void *)argv[i]); + free(argv); + + // moar cleanup [self lateEngineLaunch]; }