# HG changeset patch # User koda # Date 1302175271 -7200 # Node ID d70febb5112550c5543b52ea86d2ac2a8ca414d5 # Parent 276410cc1178e3db0caedd01d17d87aae4798597# Parent b7483e29ea8c67671342dd259d2a25f478f22328 merge diff -r b7483e29ea8c -r d70febb51125 QTfrontend/bgwidget.cpp --- a/QTfrontend/bgwidget.cpp Tue Apr 05 16:15:20 2011 -0400 +++ b/QTfrontend/bgwidget.cpp Thu Apr 07 13:21:11 2011 +0200 @@ -44,7 +44,7 @@ fY = -1 * iSpriteHeight; fX = (qrand() % ((int)(wParent->width() * 1.5))) - wParent->width()/2; fYMov = ((qrand() % 400)+300) / 100.0f; - fXMov = fYMov * 0.5f; + fXMov = fYMov * 0.2f+((qrand()%100)/100.0f * 0.6f); //so between 0.2 and 0.6, or 0.5 +/- 0.3 iAngle = qrand() % 360; } diff -r b7483e29ea8c -r d70febb51125 QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Tue Apr 05 16:15:20 2011 -0400 +++ b/QTfrontend/hwform.cpp Thu Apr 07 13:21:11 2011 +0200 @@ -310,7 +310,7 @@ if (value) setWindowState(windowState() | Qt::WindowFullScreen); else { - setWindowState(windowState() & !Qt::WindowFullScreen); + setWindowState(windowState() & static_cast(!Qt::WindowFullScreen)); } } @@ -635,7 +635,7 @@ void HWForm::RandomNames() { editedTeam->GetFromPage(this); - namegen->TeamRandomNames(editedTeam,FALSE); + namegen->TeamRandomNames(editedTeam, true); editedTeam->SetToPage(this); } diff -r b7483e29ea8c -r d70febb51125 QTfrontend/namegen.cpp --- a/QTfrontend/namegen.cpp Tue Apr 05 16:15:20 2011 -0400 +++ b/QTfrontend/namegen.cpp Thu Apr 07 13:21:11 2011 +0200 @@ -40,9 +40,9 @@ -void HWNamegen::TeamRandomName(HWTeam*& team, const int &i) +void HWNamegen::TeamRandomName(HWTeam*& team, const int HedgehogNumber) { - RandomNameByHat(team,i); + RandomNameByHat(team, HedgehogNumber); } void HWNamegen::TeamRandomNames(HWTeam*& team, const bool changeteamname) @@ -55,11 +55,13 @@ if (TypesTeamnames[kind].size() > 0){ team->TeamName = TypesTeamnames[kind][rand()%(TypesTeamnames[kind].size())]; } - team->Grave = "Simple"; // Todo: make it semi-random - team->Fort = "Island"; // Todo: make it semi-random + team->Grave = GetRandomGrave(); + team->Fort = GetRandomFort(); team->Voicepack = "Default"; } + //give each hedgehog a random name: + //TODO: load the dictionary only once! (right now it's loaded once for each hedgehog) for(int i = 0; i < 8; i++) { if ((TypesHatnames[kind].size()) > 0){ @@ -73,15 +75,15 @@ } -void HWNamegen::RandomNameByHat(HWTeam*& team, const int &i) +void HWNamegen::RandomNameByHat(HWTeam*& team, const int HedgehogNumber) { QStringList Dictionaries; - HatCfgLoad(team->Hedgehogs[i].Hat,Dictionaries); + HatCfgLoad(team->Hedgehogs[HedgehogNumber].Hat,Dictionaries); QStringList Dictionary; DictLoad(Dictionaries[rand()%(Dictionaries.size())],Dictionary); - team->Hedgehogs[i].Name = Dictionary[rand()%(Dictionary.size())]; + team->Hedgehogs[HedgehogNumber].Name = Dictionary[rand()%(Dictionary.size())]; } void HWNamegen::DictLoad(const QString filename, QStringList &list) @@ -164,3 +166,45 @@ } + +QString HWNamegen::GetRandomGrave() +{ + QStringList Graves; + + //list all available Graves + QDir tmpdir; + tmpdir.cd(datadir->absolutePath()); + tmpdir.cd("Graphics/Graves"); + tmpdir.setFilter(QDir::Files); + Graves.append(tmpdir.entryList(QStringList("*.png")).replaceInStrings(QRegExp("^(.*)\\.png"), "\\1")); + + if(Graves.size()==0) + { + //do some serious error handling + return "Error"; + } + + //pick a random grave + return Graves[rand()%(Graves.size())]; +} + +QString HWNamegen::GetRandomFort() +{ + QStringList Forts; + + //list all available Forts + QDir tmpdir; + tmpdir.cd(datadir->absolutePath()); + tmpdir.cd("Forts"); + tmpdir.setFilter(QDir::Files); + Forts.append(tmpdir.entryList(QStringList("*L.png")).replaceInStrings(QRegExp("^(.*)L\\.png"), "\\1")); + + if(Forts.size()==0) + { + //do some serious error handling + return "Error"; + } + + //pick a random fort + return Forts[rand()%(Forts.size())]; +} diff -r b7483e29ea8c -r d70febb51125 QTfrontend/namegen.h --- a/QTfrontend/namegen.h Tue Apr 05 16:15:20 2011 -0400 +++ b/QTfrontend/namegen.h Thu Apr 07 13:21:11 2011 +0200 @@ -31,9 +31,9 @@ HWNamegen(); ~HWNamegen(); - void TeamRandomName(HWTeam*& team, const int &i); + void TeamRandomName(HWTeam*& team, const int HedgehogNumber); void TeamRandomNames(HWTeam*& team, const bool changeteamname); - void RandomNameByHat(HWTeam*& team, const int &i); + void RandomNameByHat(HWTeam*& team, const int HedgehogNumber); private: @@ -43,6 +43,9 @@ void TypesLoad(); void DictLoad(const QString filename, QStringList &list); void HatCfgLoad(const QString hatname, QStringList &list); + + QString GetRandomGrave(); + QString GetRandomFort(); }; diff -r b7483e29ea8c -r d70febb51125 QTfrontend/selectWeapon.cpp --- a/QTfrontend/selectWeapon.cpp Tue Apr 05 16:15:20 2011 -0400 +++ b/QTfrontend/selectWeapon.cpp Thu Apr 07 13:21:11 2011 +0200 @@ -35,7 +35,7 @@ QImage getAmmoImage(int num) { static QImage ammo(":Ammos.png"); - int x = floor(num/(ammo.height()/32)); + int x = num/(ammo.height()/32); int y = (num-((ammo.height()/32)*x))*32; x*=32; return ammo.copy(x, y, 32, 32); diff -r b7483e29ea8c -r d70febb51125 hedgewars/hwengine.pas --- a/hedgewars/hwengine.pas Tue Apr 05 16:15:20 2011 -0400 +++ b/hedgewars/hwengine.pas Thu Apr 07 13:21:11 2011 +0200 @@ -209,11 +209,7 @@ cFullScreen:= false; cTimerInterval:= 8; PathPrefix:= 'Data'; -{$IFDEF DEBUGFILE} - cShowFPS:= true; -{$ELSE} - cShowFPS:= false; -{$ENDIF} + cShowFPS:= {$IFDEF DEBUGFILE}true{$ELSE}false{$ENDIF}; val(gameArgs[0], ipcPort); val(gameArgs[1], cScreenWidth); val(gameArgs[2], cScreenHeight); @@ -264,13 +260,16 @@ InitKbdKeyTable(); LoadLocale(Pathz[ptLocale] + '/en.txt'); // Do an initial load with english + if (Length(cLocaleFName) > 6) then cLocale := Copy(cLocaleFName,1,5) + else cLocale := Copy(cLocaleFName,1,2); if cLocaleFName <> 'en.txt' then begin // Try two letter locale first before trying specific locale overrides - if (Length(cLocaleFName) > 6) and (Copy(cLocaleFName,1,2)+'.txt' <> 'en.txt') then - LoadLocale(Pathz[ptLocale] + '/' + Copy(cLocaleFName,1,2)+'.txt'); + if (Length(cLocale) > 2) and (Copy(cLocale,1,2) <> 'en') then + LoadLocale(Pathz[ptLocale] + '/' + Copy(cLocale,1,2)+'.txt'); LoadLocale(Pathz[ptLocale] + '/' + cLocaleFName); - end; + end + else cLocale := 'en'; WriteLnToConsole(msgGettingConfig); diff -r b7483e29ea8c -r d70febb51125 hedgewars/uSound.pas --- a/hedgewars/uSound.pas Tue Apr 05 16:15:20 2011 -0400 +++ b/hedgewars/uSound.pas Thu Apr 07 13:21:11 2011 +0200 @@ -20,7 +20,7 @@ unit uSound; interface -uses SDLh, uConsts, uTypes; +uses SDLh, uConsts, uTypes, sysutils; var MusicFN: shortstring; @@ -61,13 +61,29 @@ function AskForVoicepack(name: shortstring): Pointer; var i: Longword; + locName, path: shortstring; begin i:= 0; + // First, attempt to locate a localised version of the voice + if cLocale <> 'en' then + begin + locName:= name+'_'+cLocale; + path:= Pathz[ptVoices] + '/' + locName; + if DirectoryExists(path) then name:= locName + else if Length(cLocale) > 2 then + begin + locName:= name+'_'+Copy(cLocale,1,2); + path:= Pathz[ptVoices] + '/' + locName; + if DirectoryExists(path) then name:= locName + end + end; + + // If that fails, use the unmodified one while (voicepacks[i].name <> name) and (voicepacks[i].name <> '') do - begin + begin inc(i); TryDo(i <= cMaxTeams, 'Engine bug: AskForVoicepack i > cMaxTeams', true) - end; + end; voicepacks[i].name:= name; AskForVoicepack:= @voicepacks[i] diff -r b7483e29ea8c -r d70febb51125 hedgewars/uStore.pas --- a/hedgewars/uStore.pas Tue Apr 05 16:15:20 2011 -0400 +++ b/hedgewars/uStore.pas Thu Apr 07 13:21:11 2011 +0200 @@ -931,7 +931,7 @@ x:= (SDL_WINDOWPOS_CENTERED_MASK or {$IFDEF IPHONEOS}(SDL_GetNumVideoDisplays() - 1){$ELSE}0{$ENDIF}); y:= (SDL_WINDOWPOS_CENTERED_MASK or {$IFDEF IPHONEOS}(SDL_GetNumVideoDisplays() - 1){$ELSE}0{$ENDIF}); SDLwindow:= SDL_CreateWindow('Hedgewars', x, y, cScreenWidth, cScreenHeight, SDL_WINDOW_OPENGL or SDL_WINDOW_SHOWN - {$IFDEF IPHONEOS} or SDL_WINDOW_BORDERLESS {$ENDIF}); + {$IFDEF IPHONEOS} or SDL_WINDOW_BORDERLESS {$ENDIF}); // do not set SDL_WINDOW_RESIZABLE on iOS SDLrender:= SDL_CreateRenderer(SDLwindow, -1, SDL_RENDERER_ACCELERATED or SDL_RENDERER_PRESENTVSYNC); end; diff -r b7483e29ea8c -r d70febb51125 hedgewars/uVariables.pas --- a/hedgewars/uVariables.pas Tue Apr 05 16:15:20 2011 -0400 +++ b/hedgewars/uVariables.pas Thu Apr 07 13:21:11 2011 +0200 @@ -33,6 +33,7 @@ isSoundEnabled : boolean = true; isMusicEnabled : boolean = false; cLocaleFName : shortstring = 'en.txt'; + cLocale : shortstring = 'en'; cInitVolume : LongInt = 100; cTimerInterval : LongInt = 8; PathPrefix : shortstring = './'; diff -r b7483e29ea8c -r d70febb51125 project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.m --- a/project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.m Tue Apr 05 16:15:20 2011 -0400 +++ b/project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.m Thu Apr 07 13:21:11 2011 +0200 @@ -35,25 +35,14 @@ #define BLACKVIEW_TAG 17935 #define SECONDBLACKVIEW_TAG 48620 -#define VALGRIND "/opt/fink/bin/valgrind" + +@implementation SDLUIKitDelegate (customDelegate) -int main (int argc, char *argv[]) { -#ifdef VALGRIND_REXEC - // Using the valgrind build config, rexec ourself in valgrind - // from http://landonf.bikemonkey.org/code/iphone/iPhone_Simulator_Valgrind.20081224.html - if (argc < 2 || (argc >= 2 && strcmp(argv[1], "-valgrind") != 0)) - execl(VALGRIND, VALGRIND, "--leak-check=full", "--dsymutil=yes", argv[0], "-valgrind", NULL); -#endif - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - int retVal = UIApplicationMain(argc, argv, nil, @"HedgewarsAppDelegate"); - [pool release]; - return retVal; ++(NSString *)getAppDelegateClassName { + return @"HedgewarsAppDelegate"; } -int SDL_main(int argc, char **argv) { - // dummy function to prevent linkage fail - return 0; -} +@end @implementation HedgewarsAppDelegate @synthesize mainViewController, overlayController, uiwindow, secondWindow, isInGame; @@ -222,8 +211,12 @@ print_free_memory(); } +//TODO: when the SDLUIKitDelegate methods applicationWillResignActive and applicationDidBecomeActive do work +// you'll be able to remove the methods below and just handle the SDL_WINDOWEVENT_MINIMIZED/SDL_WINDOWEVENT_RESTORED +// events in the MainLoop + -(void) applicationWillResignActive:(UIApplication *)application { - [super applicationWillResignActive: application]; + //[super applicationWillResignActive:application]; UIDevice* device = [UIDevice currentDevice]; if ([device respondsToSelector:@selector(isMultitaskingSupported)] && @@ -247,7 +240,7 @@ } -(void) applicationDidBecomeActive:(UIApplication *)application { - [super applicationDidBecomeActive:application]; + //[super applicationDidBecomeActive:application]; UIDevice* device = [UIDevice currentDevice]; if ([device respondsToSelector:@selector(isMultitaskingSupported)] && diff -r b7483e29ea8c -r d70febb51125 project_files/HedgewarsMobile/Classes/ObjcExports.m --- a/project_files/HedgewarsMobile/Classes/ObjcExports.m Tue Apr 05 16:15:20 2011 -0400 +++ b/project_files/HedgewarsMobile/Classes/ObjcExports.m Thu Apr 07 13:21:11 2011 +0200 @@ -154,3 +154,10 @@ void updateVisualsNewTurn(void) { [amvc_instance updateAmmoVisuals]; } + +// dummy function to prevent linkage fail +int SDL_main(int argc, char **argv) { + return 0; +} + + diff -r b7483e29ea8c -r d70febb51125 project_files/HedgewarsMobile/Classes/OverlayViewController.h --- a/project_files/HedgewarsMobile/Classes/OverlayViewController.h Tue Apr 05 16:15:20 2011 -0400 +++ b/project_files/HedgewarsMobile/Classes/OverlayViewController.h Thu Apr 07 13:21:11 2011 +0200 @@ -53,9 +53,6 @@ BOOL useClassicMenu; NSInteger initialOrientation; - // the containing window - UIWindow *containerWindow; - // dual head support NSInteger initialScreenCount; NSInteger a, b; @@ -68,7 +65,6 @@ @property (assign) BOOL isNetGame; @property (assign) BOOL useClassicMenu; @property (assign) NSInteger initialOrientation; -@property (assign) UIWindow *containerWindow; -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; -(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event; diff -r b7483e29ea8c -r d70febb51125 project_files/HedgewarsMobile/Classes/OverlayViewController.m --- a/project_files/HedgewarsMobile/Classes/OverlayViewController.m Tue Apr 05 16:15:20 2011 -0400 +++ b/project_files/HedgewarsMobile/Classes/OverlayViewController.m Thu Apr 07 13:21:11 2011 +0200 @@ -39,10 +39,11 @@ [[self.view viewWithTag:GRENADE_TAG] removeFromSuperview]; @implementation OverlayViewController -@synthesize popoverController, popupMenu, helpPage, amvc, isNetGame, useClassicMenu, initialOrientation, containerWindow; +@synthesize popoverController, popupMenu, helpPage, amvc, isNetGame, useClassicMenu, initialOrientation; #pragma mark - #pragma mark rotation + -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation { // don't rotate until the game is running for performance and synchronization with the sdlview if (isGameRunning() == NO) @@ -98,17 +99,20 @@ return; UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; - + UIView *sdlView = [[[UIApplication sharedApplication] keyWindow] viewWithTag:SDL_VIEW_TAG]; + [UIView beginAnimations:@"rotation" context:NULL]; [UIView setAnimationDuration:0.7]; switch (orientation) { case UIDeviceOrientationLandscapeLeft: self.view.frame = [[UIScreen mainScreen] bounds]; self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(90)); + sdlView.transform = CGAffineTransformMakeRotation(degreesToRadians(a)); break; case UIDeviceOrientationLandscapeRight: self.view.frame = [[UIScreen mainScreen] bounds]; self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(-90)); + sdlView.transform = CGAffineTransformMakeRotation(degreesToRadians(b)); break; default: // a debug log would spam too much @@ -151,7 +155,6 @@ initialScreenCount = 1; // set initial orientation of the controller orientation - if (IS_DUALHEAD()) { switch (self.interfaceOrientation) { case UIDeviceOrientationLandscapeLeft: self.view.transform = CGAffineTransformMakeRotation(degreesToRadians(90)); @@ -168,7 +171,6 @@ selector:@selector(dualHeadRotation:) name:UIDeviceOrientationDidChangeNotification object:nil]; - } // the timer used to dim the overlay dimTimer = [[NSTimer alloc] initWithFireDate:(IS_DUALHEAD()) ? HIDING_TIME_NEVER : [NSDate dateWithTimeIntervalSinceNow:6] @@ -205,8 +207,6 @@ object:nil]; } - self.containerWindow = [[UIApplication sharedApplication] keyWindow]; - // present the overlay [UIView beginAnimations:@"showing overlay" context:NULL]; [UIView setAnimationDuration:2]; diff -r b7483e29ea8c -r d70febb51125 project_files/HedgewarsMobile/SDL.patch --- a/project_files/HedgewarsMobile/SDL.patch Tue Apr 05 16:15:20 2011 -0400 +++ b/project_files/HedgewarsMobile/SDL.patch Thu Apr 07 13:21:11 2011 +0200 @@ -1,26 +1,26 @@ -diff -r 48067bfc300c Xcode-iPhoneOS/SDL/SDLiPhoneOS.xcodeproj/project.pbxproj ---- a/Xcode-iPhoneOS/SDL/SDLiPhoneOS.xcodeproj/project.pbxproj Mon Feb 14 11:50:18 2011 -0600 -+++ b/Xcode-iPhoneOS/SDL/SDLiPhoneOS.xcodeproj/project.pbxproj Sun Mar 13 18:22:16 2011 +0100 -@@ -1695,6 +1695,7 @@ +diff -r 8a04b596b472 Xcode-iPhoneOS/SDL/SDLiPhoneOS.xcodeproj/project.pbxproj +--- a/Xcode-iPhoneOS/SDL/SDLiPhoneOS.xcodeproj/project.pbxproj Tue Apr 05 09:50:25 2011 -0700 ++++ b/Xcode-iPhoneOS/SDL/SDLiPhoneOS.xcodeproj/project.pbxproj Tue Apr 05 22:19:33 2011 +0200 +@@ -1602,6 +1602,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_C_LANGUAGE_STANDARD = c99; GCC_DEBUGGING_SYMBOLS = full; + GCC_THUMB_SUPPORT = NO; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 3.1; -@@ -1712,6 +1713,7 @@ + IPHONEOS_DEPLOYMENT_TARGET = 3.1.3; +@@ -1619,6 +1620,7 @@ ARCHS = "$(ARCHS_STANDARD_32_BIT)"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; GCC_C_LANGUAGE_STANDARD = c99; + GCC_THUMB_SUPPORT = NO; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = NO; - IPHONEOS_DEPLOYMENT_TARGET = 3.1; -diff -r 48067bfc300c include/SDL_config_iphoneos.h ---- a/include/SDL_config_iphoneos.h Mon Feb 14 11:50:18 2011 -0600 -+++ b/include/SDL_config_iphoneos.h Sun Mar 13 18:22:16 2011 +0100 -@@ -119,7 +119,7 @@ + IPHONEOS_DEPLOYMENT_TARGET = 3.1.3; +diff -r 8a04b596b472 include/SDL_config_iphoneos.h +--- a/include/SDL_config_iphoneos.h Tue Apr 05 09:50:25 2011 -0700 ++++ b/include/SDL_config_iphoneos.h Tue Apr 05 22:19:33 2011 +0200 +@@ -107,7 +107,7 @@ /* enable iPhone version of Core Audio driver */ #define SDL_AUDIO_DRIVER_COREAUDIOIPHONE 1 /* Enable the dummy audio driver (src/audio/dummy/\*.c) */ @@ -29,7 +29,7 @@ /* Enable the stub haptic driver (src/haptic/dummy/\*.c) */ #define SDL_HAPTIC_DISABLED 1 -@@ -140,15 +140,18 @@ +@@ -128,15 +128,18 @@ /* Supported video drivers */ #define SDL_VIDEO_DRIVER_UIKIT 1 @@ -51,7 +51,7 @@ /* enable iPhone keyboard support */ #define SDL_IPHONE_KEYBOARD 1 -@@ -158,4 +161,7 @@ +@@ -146,4 +149,7 @@ */ #define SDL_IPHONE_MAX_GFORCE 5.0 @@ -59,33 +59,14 @@ +#define SDL_VIEW_TAG 456987 + #endif /* _SDL_config_iphoneos_h */ -diff -r 48067bfc300c src/video/uikit/SDL_uikitappdelegate.m ---- a/src/video/uikit/SDL_uikitappdelegate.m Mon Feb 14 11:50:18 2011 -0600 -+++ b/src/video/uikit/SDL_uikitappdelegate.m Sun Mar 13 18:22:16 2011 +0100 -@@ -35,6 +35,7 @@ - static int forward_argc; - static char **forward_argv; - -+#if 0 - int main(int argc, char **argv) { - - int i; -@@ -55,6 +56,7 @@ - [pool release]; - - } -+#endif - - @implementation SDLUIKitDelegate - -diff -r 48067bfc300c src/video/uikit/SDL_uikitopengles.m ---- a/src/video/uikit/SDL_uikitopengles.m Mon Feb 14 11:50:18 2011 -0600 -+++ b/src/video/uikit/SDL_uikitopengles.m Sun Mar 13 18:22:16 2011 +0100 +diff -r 8a04b596b472 src/video/uikit/SDL_uikitopengles.m +--- a/src/video/uikit/SDL_uikitopengles.m Tue Apr 05 09:50:25 2011 -0700 ++++ b/src/video/uikit/SDL_uikitopengles.m Tue Apr 05 22:19:33 2011 +0200 @@ -117,6 +117,7 @@ majorVersion: _this->gl_config.major_version]; data->view = view; + view.tag = SDL_VIEW_TAG; - - /* add the view to our window */ - [uiwindow addSubview: view ]; + view->viewcontroller = data->viewcontroller; + if (view->viewcontroller != nil) { + [view->viewcontroller setView:view];