js' patch that restores Vsync on snow leopard
authorkoda
Sun, 02 May 2010 18:42:19 +0000
changeset 3405 8fdb08497bf1
parent 3404 d445798e5fe2
child 3406 f4bdebced042
js' patch that restores Vsync on snow leopard fix water zoom portait rotation now display water correctly (but not the other ui elements)
cocoaTouch/MasterViewController.m
cocoaTouch/OverlayViewController.m
cocoaTouch/SplitViewRootController.m
cocoaTouch/otherSrc/CommodityFunctions.m
hedgewars/CCHandlers.inc
hedgewars/PascalExports.pas
hedgewars/SDLh.pas
hedgewars/uAmmos.pas
hedgewars/uGears.pas
hedgewars/uStore.pas
hedgewars/uWorld.pas
project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj
--- a/cocoaTouch/MasterViewController.m	Sun May 02 18:25:13 2010 +0000
+++ b/cocoaTouch/MasterViewController.m	Sun May 02 18:42:19 2010 +0000
@@ -25,7 +25,7 @@
 
 #pragma mark -
 #pragma mark View lifecycle
-- (void)viewDidLoad {
+-(void) viewDidLoad {
     [super viewDidLoad];
     
     // the list of selectable controllers
@@ -64,34 +64,6 @@
     return cell;
 }
 
-/*
-// Override to support editing the table view.
-- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
-    
-    if (editingStyle == UITableViewCellEditingStyleDelete) {
-        // Delete the row from the data source
-        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];
-    }   
-    else if (editingStyle == UITableViewCellEditingStyleInsert) {
-        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
-    }   
-}
-*/
-
-/*
-// Override to support rearranging the table view.
-- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
-}
-*/
-
-/*
-// Override to support conditional rearranging of the table view.
-- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
-    // Return NO if you do not want the item to be re-orderable.
-    return YES;
-}
-*/
-
 #pragma mark -
 #pragma mark Table view delegate
 -(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
--- a/cocoaTouch/OverlayViewController.m	Sun May 02 18:25:13 2010 +0000
+++ b/cocoaTouch/OverlayViewController.m	Sun May 02 18:42:19 2010 +0000
@@ -69,7 +69,6 @@
 }
 
 -(void) viewDidLoad {
-
     isPopoverVisible = NO;
     self.view.alpha = 0;
     self.view.center = CGPointMake(self.view.frame.size.height/2.0, self.view.frame.size.width/2.0);
--- a/cocoaTouch/SplitViewRootController.m	Sun May 02 18:25:13 2010 +0000
+++ b/cocoaTouch/SplitViewRootController.m	Sun May 02 18:42:19 2010 +0000
@@ -47,7 +47,8 @@
         UINavigationController *mainNavController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
     
         masterViewController.detailViewController = detailViewController;
-
+        //[splitViewRootController setDelegate:detailViewController];
+        
         [masterViewController release];
 
         [splitViewRootController setViewControllers:[NSArray arrayWithObjects: mainNavController, detailedNavController, nil]];
--- a/cocoaTouch/otherSrc/CommodityFunctions.m	Sun May 02 18:25:13 2010 +0000
+++ b/cocoaTouch/otherSrc/CommodityFunctions.m	Sun May 02 18:42:19 2010 +0000
@@ -44,7 +44,7 @@
 
 BOOL rotationManager (UIInterfaceOrientation interfaceOrientation) {
     if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
-        return (interfaceOrientation == UIInterfaceOrientationLandscapeRight) || (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
+        return YES;
     else
         return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
 
--- a/hedgewars/CCHandlers.inc	Sun May 02 18:25:13 2010 +0000
+++ b/hedgewars/CCHandlers.inc	Sun May 02 18:42:19 2010 +0000
@@ -665,12 +665,12 @@
         cScreenHeight:= cInitHeight
     end;
 
-    // load window icon
 {$IFDEF SDL_IMAGE_NEWER}
     WriteToConsole('Init SDL_image... ');
     SDLTry(IMG_Init(IMG_INIT_PNG) <> 0, true);
     WriteLnToConsole(msgOK);
 {$ENDIF}
+    // load engine icon
 {$IFDEF DARWIN}
     ico:= LoadImage(Pathz[ptGraphics] + '/hwengine_mac', ifIgnoreCaps);
 {$ELSE}
--- a/hedgewars/PascalExports.pas	Sun May 02 18:25:13 2010 +0000
+++ b/hedgewars/PascalExports.pas	Sun May 02 18:42:19 2010 +0000
@@ -140,22 +140,23 @@
 end;
 
 procedure HW_setLandscape(landscape: boolean); cdecl; export;
+var tmp:LongInt;
 begin
     if landscape then
     begin
         rotationQt:= -90;
         uStore.wScreen:= cScreenWidth;
         uStore.hScreen:= cScreenHeight;
-        //uWorld.w:= cScreenWidth;
-        //uWorld.h:= cScreenHeight;
+        uWorld.wScreen:= cScreenWidth;
+        uWorld.hScreen:= cScreenHeight;
     end
     else
     begin
         rotationQt:= 270;
         uStore.wScreen:= cScreenHeight;
         uStore.hScreen:= cScreenWidth;
-        //uWorld.w:= cScreenHeight;
-        //uWorld.h:= cScreenWidth;
+        uWorld.wScreen:= cScreenHeight;
+        uWorld.hScreen:= cScreenWidth;
     end;
 end;
 {$ENDIF}
--- a/hedgewars/SDLh.pas	Sun May 02 18:25:13 2010 +0000
+++ b/hedgewars/SDLh.pas	Sun May 02 18:42:19 2010 +0000
@@ -60,6 +60,7 @@
     {$linkframework SDL_image}
     {$linkframework SDL_ttf}
     {$linkframework SDL_mixer}
+    {$linkframework OpenGL}
   {$ENDIF}
 {$ENDIF}
 
@@ -732,6 +733,12 @@
 function SDL_putenv(const text: PChar): LongInt; cdecl; external SDLLibName;
 function SDL_getenv(const text: PChar): PChar; cdecl; external SDLLibName;
 
+{* OpenGL *}
+{$IFDEF DARWIN}
+function CGLGetCurrentContext(): Pointer; cdecl; external 'OpenGL';
+procedure CGLSetParameter(context: Pointer; option: LongInt; value: Pointer); cdecl; external 'OpenGL';
+{$ENDIF}
+
 (*  SDL_TTF  *)
 function  TTF_Init: LongInt; cdecl; external SDL_TTFLibName;
 procedure TTF_Quit; cdecl; external SDL_TTFLibName;
--- a/hedgewars/uAmmos.pas	Sun May 02 18:25:13 2010 +0000
+++ b/hedgewars/uAmmos.pas	Sun May 02 18:42:19 2010 +0000
@@ -41,7 +41,7 @@
 procedure SetWeapon(weap: TAmmoType);
 procedure DisableSomeWeapons;
 procedure ResetWeapons;
-function GetAmmoByNum(num: Longword): PHHAmmo;
+function  GetAmmoByNum(num: Longword): PHHAmmo;
 
 var shoppa: boolean;
 
--- a/hedgewars/uGears.pas	Sun May 02 18:25:13 2010 +0000
+++ b/hedgewars/uGears.pas	Sun May 02 18:42:19 2010 +0000
@@ -89,10 +89,10 @@
 procedure FreeGearsList;
 procedure AddMiscGears;
 procedure AssignHHCoords;
-function GearByUID(uid : Longword) : PGear;
+function  GearByUID(uid : Longword) : PGear;
 procedure InsertGearToList(Gear: PGear);
 procedure RemoveGearFromList(Gear: PGear);
-function ModifyDamage(dmg: Longword; Gear: PGear): Longword;
+function  ModifyDamage(dmg: Longword; Gear: PGear): Longword;
 procedure FindPlace(var Gear: PGear; withFall: boolean; Left, Right: LongInt);
 
 implementation
--- a/hedgewars/uStore.pas	Sun May 02 18:25:13 2010 +0000
+++ b/hedgewars/uStore.pas	Sun May 02 18:42:19 2010 +0000
@@ -608,7 +608,7 @@
 
 procedure DrawRotated(Sprite: TSprite; X, Y, Dir: LongInt; Angle: real);
 begin
-DrawRotatedTex(SpritesData[Sprite].Texture,
+    DrawRotatedTex(SpritesData[Sprite].Texture,
         SpritesData[Sprite].Width,
         SpritesData[Sprite].Height,
         X, Y, Dir, Angle)
@@ -711,11 +711,11 @@
 procedure DrawSprite2(Sprite: TSprite; X, Y, FrameX, FrameY: LongInt);
 var r: TSDL_Rect;
 begin
-r.x:= FrameX * SpritesData[Sprite].Width;
-r.w:= SpritesData[Sprite].Width;
-r.y:= FrameY * SpritesData[Sprite].Height;
-r.h:= SpritesData[Sprite].Height;
-DrawFromRect(X, Y, @r, SpritesData[Sprite].Texture)
+    r.x:= FrameX * SpritesData[Sprite].Width;
+    r.w:= SpritesData[Sprite].Width;
+    r.y:= FrameY * SpritesData[Sprite].Height;
+    r.h:= SpritesData[Sprite].Height;
+    DrawFromRect(X, Y, @r, SpritesData[Sprite].Texture)
 end;
 
 procedure DrawCentered(X, Top: LongInt; Source: PTexture);
@@ -803,14 +803,15 @@
 procedure StoreRelease;
 var ii: TSprite;
 begin
-for ii:= Low(TSprite) to High(TSprite) do
+    for ii:= Low(TSprite) to High(TSprite) do
     begin
-    FreeTexture(SpritesData[ii].Texture);
-    if SpritesData[ii].Surface <> nil then SDL_FreeSurface(SpritesData[ii].Surface)
+        FreeTexture(SpritesData[ii].Texture);
+        if SpritesData[ii].Surface <> nil then
+            SDL_FreeSurface(SpritesData[ii].Surface)
     end;
-SDL_FreeSurface(MissionIcons);
-FreeTexture(ropeIconTex);
-FreeTexture(HHTexture)
+    SDL_FreeSurface(MissionIcons);
+    FreeTexture(ropeIconTex);
+    FreeTexture(HHTexture);
 end;
 
 
@@ -1134,12 +1135,32 @@
 
 procedure SetupOpenGL;
 var vendor: shortstring;
+{$IFDEF DARWIN}
+    one: LongInt;
+{$ENDIF}
 begin
+    // initialized here because when initModule is called cScreenWidth/Height are not yet set
+    if (uStore.wScreen = 0) and (uStore.hScreen = 0) then
+    begin
+        uStore.wScreen:= cScreenWidth; 
+        uStore.hScreen:= cScreenHeight;
+    end;
+
 {$IFDEF IPHONEOS}
     SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 0); // no double buffering
     SDL_GL_SetAttribute(SDL_GL_RETAINED_BACKING, 1);
 {$ELSE}
     SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
+{$IFNDEF SDL13}
+// this attribute is default in 1.3 and must be enabled in MacOSX
+    if cVSyncInUse then
+        SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1);
+{$IFDEF DARWIN}
+// fixes vsync in Snow Leopard
+    one := 1;
+    CGLSetParameter(CGLGetCurrentContext(), 222, @one);
+{$ENDIF}
+{$ENDIF}
 {$ENDIF}
     SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0); // no depth buffer
     SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
@@ -1149,14 +1170,6 @@
     SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 16); // buffer has to be 16 bit only
     SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); // try to prefer hardware rendering
 
-{$IFNDEF SDL13}
-// this attribute is default in 1.3 and must be enabled in MacOSX
-{$IFNDEF DARWIN}
-    if cVSyncInUse then
-{$ENDIF}
-        SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1);
-{$ENDIF}
-
     glGetIntegerv(GL_MAX_TEXTURE_SIZE, @MaxTextureSize);
 
     vendor:= LowerCase(shortstring(pchar(glGetString(GL_VENDOR))));
@@ -1276,7 +1289,7 @@
     r.w:= squaresize;
     r.h:= squaresize;
     
-    DrawFromRect( -squaresize div 2, (cScreenHeight - squaresize) shr 1, @r, ProgrTex);
+    DrawFromRect( -squaresize div 2, (hScreen - squaresize) shr 1, @r, ProgrTex);
 
     SDL_GL_SwapBuffers();
 {$IFDEF SDL13}
@@ -1554,8 +1567,10 @@
 {$ELSE}
     cGPUVendor:= gvUnknown;
 {$ENDIF}
-    uStore.wScreen:= cScreenWidth; 
-    uStore.hScreen:= cScreenHeight;
+    // really initalized in storeLoad
+    uStore.wScreen:= 0; 
+    uStore.hScreen:= 0;
+    
     cScaleFactor:= 2.0;
     SupportNPOTT:= false;
     Step:= 0;
--- a/hedgewars/uWorld.pas	Sun May 02 18:25:13 2010 +0000
+++ b/hedgewars/uWorld.pas	Sun May 02 18:42:19 2010 +0000
@@ -37,7 +37,9 @@
 {$IFDEF COUNTTICKS}
     cntTicks: LongWord;
 {$ENDIF}
-
+    wScreen: LongInt;
+    hScreen: LongInt;
+    
 procedure initModule;
 procedure freeModule;
 
@@ -94,7 +96,13 @@
         AddGoal:= s;
     end;
 begin
-missionTimer:= 0;
+    missionTimer:= 0;
+    // initialized here because when initModule is called cScreenWidth/Height are not yet set
+    if (uWorld.wScreen = 0) and (uWorld.hScreen = 0) then
+    begin
+        uWorld.wScreen:= cScreenWidth; 
+        uWorld.hScreen:= cScreenHeight;
+    end;
 
 if (GameFlags and gfRandomOrder) <> 0 then  // shuffle them up a bit
    begin
@@ -170,6 +178,7 @@
 HorizontOffset:= 0;
 end;
 
+
 procedure ShowAmmoMenu;
 const MENUSPEED = 15;
 {$IFDEF IPHONEOS}
@@ -181,141 +190,151 @@
     Slot, Pos: LongInt;
     Ammo: PHHAmmo;
 begin
-if  (TurnTimeLeft = 0) or (not CurrentTeam^.ExtDriven and (((CurAmmoGear = nil) or ((CurAmmoGear^.Ammo^.Propz and ammoprop_AltAttack) = 0)) and hideAmmoMenu)) then bShowAmmoMenu:= false;
-if bShowAmmoMenu then
-   begin
-   FollowGear:= nil;
-   if AMxShift = MENUWIDTH then prevPoint.X:= 0;
-   if cReducedQuality then
-       AMxShift:= 0
-   else
-       if AMxShift > 0 then dec(AMxShift, MENUSPEED);
-   end else
-   begin
-   if AMxShift = 0 then
-      begin
-      CursorPoint.X:= cScreenWidth shr 1;
-      CursorPoint.Y:= cScreenHeight shr 1;
-      prevPoint:= CursorPoint;
-      SDL_WarpMouse(CursorPoint.X  + cScreenWidth div 2, cScreenHeight - CursorPoint.Y)
-      end;
-   if cReducedQuality then
-       AMxShift:= MENUWIDTH
-   else
-       if AMxShift < MENUWIDTH then inc(AMxShift, MENUSPEED);
-   end;
-Ammo:= nil;
-if (CurrentTeam <> nil) and (CurrentHedgehog <> nil) and (not CurrentTeam^.ExtDriven) and (CurrentHedgehog^.BotLevel = 0) then
-   Ammo:= CurrentHedgehog^.Ammo
-else if (LocalAmmo <> -1) then
-   Ammo:= GetAmmoByNum(LocalAmmo);
-Slot:= 0;
-Pos:= -1;
-if Ammo = nil then
+    if (TurnTimeLeft = 0) or (not CurrentTeam^.ExtDriven and (((CurAmmoGear = nil) or 
+       ((CurAmmoGear^.Ammo^.Propz and ammoprop_AltAttack) = 0)) and hideAmmoMenu)) then
+            bShowAmmoMenu:= false;
+    if bShowAmmoMenu then
+    begin
+        FollowGear:= nil;
+        if AMxShift = MENUWIDTH then 
+            prevPoint.X:= 0;
+        if cReducedQuality then
+            AMxShift:= 0
+        else
+            if AMxShift > 0 then 
+                dec(AMxShift, MENUSPEED);
+    end
+    else
     begin
-    bShowAmmoMenu:= false;
-    exit
+        if AMxShift = 0 then
+        begin
+            CursorPoint.X:= cScreenWidth shr 1;
+            CursorPoint.Y:= cScreenHeight shr 1;
+            prevPoint:= CursorPoint;
+            SDL_WarpMouse(CursorPoint.X  + cScreenWidth div 2, cScreenHeight - CursorPoint.Y)
+        end;
+        if cReducedQuality then
+            AMxShift:= MENUWIDTH
+    else
+        if AMxShift < MENUWIDTH then
+            inc(AMxShift, MENUSPEED);
     end;
-SlotsNum:= 0;
-x:= (cScreenWidth shr 1) - MENUWIDTH + AMxShift;
-y:= cScreenHeight - 40;
+   
+    Ammo:= nil;
+    if (CurrentTeam <> nil) and (CurrentHedgehog <> nil) and (not CurrentTeam^.ExtDriven) and
+       (CurrentHedgehog^.BotLevel = 0) then
+        Ammo:= CurrentHedgehog^.Ammo
+    else
+        if (LocalAmmo <> -1) then
+            Ammo:= GetAmmoByNum(LocalAmmo);
+        Slot:= 0;
+        Pos:= -1;
+        if Ammo = nil then
+        begin
+            bShowAmmoMenu:= false;
+            exit
+        end;
+        SlotsNum:= 0;
+        x:= (cScreenWidth shr 1) - MENUWIDTH + AMxShift;
+        y:= cScreenHeight - 40;
 
 {$IFDEF IPHONEOS}
-dec(y);
-DrawSprite(sprAMBordersIPhone, x, y, 0);
-dec(y);
-DrawSprite(sprAMBordersIPhone, x, y, 1);
-dec(y, 33);
-DrawSprite(sprAMSlotNameIPhone, x, y, 0);
+        dec(y);
+        DrawSprite(sprAMBordersIPhone, x, y, 0);
+        dec(y);
+        DrawSprite(sprAMBordersIPhone, x, y, 1);
+        dec(y, 33);
+        DrawSprite(sprAMSlotNameIPhone, x, y, 0);
 {$ELSE}
-dec(y);
-DrawSprite(sprAMBorders, x, y, 0);
-dec(y);
-DrawSprite(sprAMBorders, x, y, 1);
-dec(y, 33);
-DrawSprite(sprAMSlotName, x, y, 0);
+        dec(y);
+        DrawSprite(sprAMBorders, x, y, 0);
+        dec(y);
+        DrawSprite(sprAMBorders, x, y, 1);
+        dec(y, 33);
+        DrawSprite(sprAMSlotName, x, y, 0);
 {$ENDIF}
 
-for i:= cMaxSlotIndex downto 0 do
-    if ((i = 0) and (Ammo^[i, 1].Count > 0)) or ((i <> 0) and (Ammo^[i, 0].Count > 0)) then
-        begin
-        if (cScreenHeight - CursorPoint.Y >= y - 33) and (cScreenHeight - CursorPoint.Y < y) then Slot:= i;
-        dec(y, 33);
-        inc(SlotsNum);
-        {$IFDEF IPHONEOS}
-        DrawSprite(sprAMSlotIPhone, x, y, 0);
-        {$ELSE}
-        DrawSprite(sprAMSlot, x, y, 0);
-        DrawSprite(sprAMSlotKeys, x + 2, y + 1, i);
-        {$ENDIF}
-        t:= 0;
-        {$IFDEF IPHONEOS}
-        g:= -1;
-        {$ELSE}
-        g:= 0;
-        {$ENDIF}
-        while (t <= cMaxSlotAmmoIndex) and (Ammo^[i, t].Count > 0) do
+        for i:= cMaxSlotIndex downto 0 do
+            if ((i = 0) and (Ammo^[i, 1].Count > 0)) or ((i <> 0) and (Ammo^[i, 0].Count > 0)) then
             begin
-            if (Ammo^[i, t].AmmoType <> amNothing) then
+                if (cScreenHeight - CursorPoint.Y >= y - 33) and (cScreenHeight - CursorPoint.Y < y) then 
+                    Slot:= i;
+                dec(y, 33);
+                inc(SlotsNum);
+{$IFDEF IPHONEOS}
+                DrawSprite(sprAMSlotIPhone, x, y, 0);
+                g:= -1;
+{$ELSE}
+                DrawSprite(sprAMSlot, x, y, 0);
+                DrawSprite(sprAMSlotKeys, x + 2, y + 1, i);
+                g:= 0;
+{$ENDIF}
+                t:= 0;
+
+                while (t <= cMaxSlotAmmoIndex) and (Ammo^[i, t].Count > 0) do
                 begin
-                l:= Ammoz[Ammo^[i, t].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber;
+                    if (Ammo^[i, t].AmmoType <> amNothing) then
+                    begin
+                        l:= Ammoz[Ammo^[i, t].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber;
 
-                if l >= 0 then
-                    begin
-                    DrawSprite(sprAMAmmosBW, x + g * 33 + 35, y + 1, LongInt(Ammo^[i, t].AmmoType)-1);
-                    if l < 100 then DrawSprite(sprTurnsLeft, x + g * 33 + 51, y + 17, l);
-                    end else
-                    DrawSprite(sprAMAmmos, x + g * 33 + 35, y + 1, LongInt(Ammo^[i, t].AmmoType)-1);
-                if (Slot = i)
-                and (CursorPoint.X >= x + g * 33 + 35)
-                and (CursorPoint.X < x + g * 33 + 68) then
-                    begin
-                    if (l < 0) then DrawSprite(sprAMSelection, x + g * 33 + 35, y + 1, 0);
-                    Pos:= t;
+                        if l >= 0 then
+                        begin
+                            DrawSprite(sprAMAmmosBW, x + g * 33 + 35, y + 1, LongInt(Ammo^[i, t].AmmoType)-1);
+                            if l < 100 then
+                                DrawSprite(sprTurnsLeft, x + g * 33 + 51, y + 17, l);
+                        end
+                        else
+                            DrawSprite(sprAMAmmos, x + g * 33 + 35, y + 1, LongInt(Ammo^[i, t].AmmoType)-1);
+                        if (Slot = i) and (CursorPoint.X >= x + g * 33 + 35) and (CursorPoint.X < x + g * 33 + 68) then
+                        begin
+                            if (l < 0) then 
+                                DrawSprite(sprAMSelection, x + g * 33 + 35, y + 1, 0);
+                            Pos:= t;
+                        end;
+                        inc(g);
                     end;
-                inc(g)
+                    inc(t);
                 end;
-                inc(t)
-            end
-        end;
-dec(y, 1);
+            end;
+    dec(y, 1);
 {$IFDEF IPHONEOS}
-DrawSprite(sprAMBordersIPhone, x, y, 0);
+    DrawSprite(sprAMBordersIPhone, x, y, 0);
 {$ELSE}
-DrawSprite(sprAMBorders, x, y, 0);
+    DrawSprite(sprAMBorders, x, y, 0);
 {$ENDIF}
 
-if (Pos >= 0) then
+    if (Pos >= 0) then
     begin
-    if (Ammo^[Slot, Pos].Count > 0) and (Ammo^[Slot, Pos].AmmoType <> amNothing) then
-        if (amSel <> Ammo^[Slot, Pos].AmmoType) or (WeaponTooltipTex = nil) then
+        if (Ammo^[Slot, Pos].Count > 0) and (Ammo^[Slot, Pos].AmmoType <> amNothing) then
+            if (amSel <> Ammo^[Slot, Pos].AmmoType) or (WeaponTooltipTex = nil) then
             begin
-            amSel:= Ammo^[Slot, Pos].AmmoType;
-            RenderWeaponTooltip(amSel)
+                amSel:= Ammo^[Slot, Pos].AmmoType;
+                RenderWeaponTooltip(amSel)
             end;
         
-        DrawTexture(cScreenWidth div 2 - (MENUWIDTH - 10) + AMxShift, cScreenHeight - 68, Ammoz[Ammo^[Slot, Pos].AmmoType].NameTex);
+            DrawTexture(cScreenWidth div 2 - (MENUWIDTH - 10) + AMxShift, cScreenHeight - 68, Ammoz[Ammo^[Slot, Pos].AmmoType].NameTex);
 
-        if Ammo^[Slot, Pos].Count < AMMO_INFINITE then
-            DrawTexture(cScreenWidth div 2 + AMxShift - 35, cScreenHeight - 68, CountTexz[Ammo^[Slot, Pos].Count]);
+            if Ammo^[Slot, Pos].Count < AMMO_INFINITE then
+                DrawTexture(cScreenWidth div 2 + AMxShift - 35, cScreenHeight - 68, CountTexz[Ammo^[Slot, Pos].Count]);
 
-        if bSelected and (Ammoz[Ammo^[Slot, Pos].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber < 0) then
+            if bSelected and (Ammoz[Ammo^[Slot, Pos].AmmoType].SkipTurns - CurrentTeam^.Clan^.TurnNumber < 0) then
             begin
-            bShowAmmoMenu:= false;
-            SetWeapon(Ammo^[Slot, Pos].AmmoType);
-            bSelected:= false;
-            FreeWeaponTooltip;
-            exit
+                bShowAmmoMenu:= false;
+                SetWeapon(Ammo^[Slot, Pos].AmmoType);
+                bSelected:= false;
+                FreeWeaponTooltip;
+                exit();
             end;
     end
-else
-    FreeWeaponTooltip;
+    else
+        FreeWeaponTooltip;
 
-if (WeaponTooltipTex <> nil) and (AMxShift = 0) then
-    ShowWeaponTooltip(x - WeaponTooltipTex^.w - 3, min(y, cScreenHeight - WeaponTooltipTex^.h - 40));
+    if (WeaponTooltipTex <> nil) and (AMxShift = 0) then
+        ShowWeaponTooltip(x - WeaponTooltipTex^.w - 3, min(y, cScreenHeight - WeaponTooltipTex^.h - 40));
 
-bSelected:= false;
-if AMxShift = 0 then DrawSprite(sprArrow, CursorPoint.X, cScreenHeight - CursorPoint.Y, (RealTicks shr 6) mod 8)
+    bSelected:= false;
+    if AMxShift = 0 then 
+        DrawSprite(sprArrow, CursorPoint.X, cScreenHeight - CursorPoint.Y, (RealTicks shr 6) mod 8)
 end;
 
 procedure MoveCamera; forward;
@@ -325,57 +344,58 @@
     r: TSDL_Rect;
     lw, lh: GLfloat;
 begin
-WaterColorArray[0].a := Alpha;
-WaterColorArray[1].a := Alpha;
-WaterColorArray[2].a := Alpha;
-WaterColorArray[3].a := Alpha;
+    WaterColorArray[0].a := Alpha;
+    WaterColorArray[1].a := Alpha;
+    WaterColorArray[2].a := Alpha;
+    WaterColorArray[3].a := Alpha;
 
-lw:= cScreenWidth / cScaleFactor;
-lh:= trunc(cScreenHeight / cScaleFactor) + cScreenHeight div 2 + 16;
-// Water
-r.y:= OffsetY + WorldDy + cWaterLine;
-if WorldDy < trunc(cScreenHeight / cScaleFactor) + cScreenHeight div 2 - cWaterLine then
+    lw:= wScreen / cScaleFactor;
+    lh:= trunc(hScreen / cScaleFactor) + hScreen div 2 + 16;
+    
+    // Water
+    r.y:= OffsetY + WorldDy + cWaterLine;
+    if WorldDy < trunc(hScreen / cScaleFactor) + hScreen div 2 - cWaterLine then
     begin
-    if r.y < 0 then r.y:= 0;
+        if r.y < 0 then
+            r.y:= 0;
 
-    glDisable(GL_TEXTURE_2D);
-    VertexBuffer[0].X:= -lw;
-    VertexBuffer[0].Y:= r.y;
-    VertexBuffer[1].X:= lw;
-    VertexBuffer[1].Y:= r.y;
-    VertexBuffer[2].X:= lw;
-    VertexBuffer[2].Y:= lh;
-    VertexBuffer[3].X:= -lw;
-    VertexBuffer[3].Y:= lh;
+        glDisable(GL_TEXTURE_2D);
+        VertexBuffer[0].X:= -lw;
+        VertexBuffer[0].Y:= r.y;
+        VertexBuffer[1].X:= lw;
+        VertexBuffer[1].Y:= r.y;
+        VertexBuffer[2].X:= lw;
+        VertexBuffer[2].Y:= lh;
+        VertexBuffer[3].X:= -lw;
+        VertexBuffer[3].Y:= lh;
 
-    glEnableClientState (GL_COLOR_ARRAY);
-    glColorPointer(4, GL_UNSIGNED_BYTE, 0, @WaterColorArray[0]);
+        glEnableClientState (GL_COLOR_ARRAY);
+        glColorPointer(4, GL_UNSIGNED_BYTE, 0, @WaterColorArray[0]);
 
-    glEnableClientState(GL_VERTEX_ARRAY);
-    glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]);
+        glEnableClientState(GL_VERTEX_ARRAY);
+        glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]);
 
-    glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer));
+        glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer));
 
-    glDisableClientState(GL_VERTEX_ARRAY);
-    glDisableClientState(GL_COLOR_ARRAY);
+        glDisableClientState(GL_VERTEX_ARRAY);
+        glDisableClientState(GL_COLOR_ARRAY);
 
-    glColor4ub($FF, $FF, $FF, $FF); // disable coloring
-    glEnable(GL_TEXTURE_2D)
-    end
+        Tint($FF, $FF, $FF, $FF); // disable coloring
+        glEnable(GL_TEXTURE_2D);
+    end;
 end;
 
 procedure DrawWaves(Dir, dX, dY: LongInt; tnt: Byte);
 var VertexBuffer, TextureBuffer: array [0..3] of TVertex2f;
     lw, waves, shift: GLfloat;
 begin
-lw:= cScreenWidth / cScaleFactor;
+lw:= wScreen / cScaleFactor;
 waves:= lw * 2 / cWaveWidth;
 
-Tint(
-      (tnt * WaterColorArray[2].r div 255) + (255-tnt)
-    , (tnt * WaterColorArray[2].g div 255) + (255-tnt)
-    , (tnt * WaterColorArray[2].b div 255) + (255-tnt)
-    , 255
+Tint((tnt * WaterColorArray[2].r div 255) + (255-tnt),
+     (tnt * WaterColorArray[2].g div 255) + (255-tnt),
+     (tnt * WaterColorArray[2].b div 255) + (255-tnt),
+      255
 );
 
 glBindTexture(GL_TEXTURE_2D, SpritesData[sprWater].Texture^.id);
@@ -420,37 +440,36 @@
 procedure DrawRepeated(spr, sprL, sprR: TSprite; Shift, OffsetY: LongInt);
 var i, w, sw: LongInt;
 begin
-sw:= round(cScreenWidth / cScaleFactor);
-if (SpritesData[sprL].Texture = nil) or (SpritesData[sprR].Texture = nil) then
+    sw:= round(cScreenWidth / cScaleFactor);
+    if (SpritesData[sprL].Texture = nil) or (SpritesData[sprR].Texture = nil) then
     begin
-    w:= SpritesData[spr].Width;
-    i:= Shift mod w;
-    if i > 0 then dec(i, w);
-    dec(i, w * (sw div w + 1));
-    repeat
-        DrawSprite(spr, i, WorldDy + LAND_HEIGHT + OffsetY - SpritesData[spr].Height, 0);
-        inc(i, w)
-    until i > sw
-    end else
+        w:= SpritesData[spr].Width;
+        i:= Shift mod w;
+        if i > 0 then dec(i, w);
+        dec(i, w * (sw div w + 1));
+        repeat
+            DrawSprite(spr, i, WorldDy + LAND_HEIGHT + OffsetY - SpritesData[spr].Height, 0);
+            inc(i, w)
+        until i > sw
+    end
+    else
     begin
-    w:= SpritesData[spr].Width;
-    dec(Shift, w div 2);
-    DrawSprite(spr, Shift, WorldDy + LAND_HEIGHT + OffsetY - SpritesData[spr].Height, 0);
-
-    sw:= round(cScreenWidth / cScaleFactor);
+        w:= SpritesData[spr].Width;
+        dec(Shift, w div 2);
+        DrawSprite(spr, Shift, WorldDy + LAND_HEIGHT + OffsetY - SpritesData[spr].Height, 0);
     
-    i:= Shift - SpritesData[sprL].Width;
-    while i >= -sw - SpritesData[sprL].Width do
+        i:= Shift - SpritesData[sprL].Width;
+        while i >= -sw - SpritesData[sprL].Width do
         begin
-        DrawSprite(sprL, i, WorldDy + LAND_HEIGHT + OffsetY - SpritesData[sprL].Height, 0);
-        dec(i, SpritesData[sprL].Width);
+            DrawSprite(sprL, i, WorldDy + LAND_HEIGHT + OffsetY - SpritesData[sprL].Height, 0);
+            dec(i, SpritesData[sprL].Width);
         end;
         
-    i:= Shift + w;
-    while i <= sw do
+        i:= Shift + w;
+        while i <= sw do
         begin
-        DrawSprite(sprR, i, WorldDy + LAND_HEIGHT + OffsetY - SpritesData[sprR].Height, 0);
-        inc(i, SpritesData[sprR].Width)
+            DrawSprite(sprR, i, WorldDy + LAND_HEIGHT + OffsetY - SpritesData[sprR].Height, 0);
+            inc(i, SpritesData[sprR].Width)
         end
     end
 end;
@@ -727,33 +746,34 @@
 
 // Wind bar
 {$IFDEF IPHONEOS}
-offsetX:= cScreenHeight - 13;
-offsetY:= (cScreenWidth shr 1) + 74;
+    offsetX:= cScreenHeight - 13;
+    offsetY:= (cScreenWidth shr 1) + 74;
 {$ELSE}
-offsetX:= 30;
-offsetY:= 180;
+    offsetX:= 30;
+    offsetY:= 180;
 {$ENDIF}
-DrawSprite(sprWindBar, (cScreenWidth shr 1) - offsetY, cScreenHeight - offsetX, 0);
-if WindBarWidth > 0 then
-   begin
-   {$WARNINGS OFF}
-   r.x:= 8 - (RealTicks shr 6) mod 8;
-   {$WARNINGS ON}
-   r.y:= 0;
-   r.w:= WindBarWidth;
-   r.h:= 13;
-   DrawSpriteFromRect(sprWindR, r, (cScreenWidth shr 1) - offsetY + 77, cScreenHeight - offsetX + 2, 13, 0);
-   end else
- if WindBarWidth < 0 then
-   begin
-   {$WARNINGS OFF}
-   r.x:= (WindBarWidth + RealTicks shr 6) mod 8;
-   {$WARNINGS ON}
-   r.y:= 0;
-   r.w:= - WindBarWidth;
-   r.h:= 13;
-   DrawSpriteFromRect(sprWindL, r, (cScreenWidth shr 1) - offsetY + 74 + WindBarWidth, cScreenHeight - offsetX + 2, 13, 0);
-   end;
+    DrawSprite(sprWindBar, (cScreenWidth shr 1) - offsetY, cScreenHeight - offsetX, 0);
+    if WindBarWidth > 0 then
+    begin
+        {$WARNINGS OFF}
+        r.x:= 8 - (RealTicks shr 6) mod 8;
+        {$WARNINGS ON}
+        r.y:= 0;
+        r.w:= WindBarWidth;
+        r.h:= 13;
+        DrawSpriteFromRect(sprWindR, r, (cScreenWidth shr 1) - offsetY + 77, cScreenHeight - offsetX + 2, 13, 0);
+    end
+    else
+        if WindBarWidth < 0 then
+        begin
+            {$WARNINGS OFF}
+            r.x:= (WindBarWidth + RealTicks shr 6) mod 8;
+            {$WARNINGS ON}
+            r.y:= 0;
+            r.w:= - WindBarWidth;
+            r.h:= 13;
+            DrawSpriteFromRect(sprWindL, r, (cScreenWidth shr 1) - offsetY + 74 + WindBarWidth, cScreenHeight - offsetX + 2, 13, 0);
+        end;
 
 // AmmoMenu
 if (AMxShift < 210) or bShowAmmoMenu then ShowAmmoMenu;
@@ -1051,6 +1071,10 @@
     WorldDx:= -512;
     WorldDy:= -256;
     
+    // really initalized in initWorld
+    uWorld.wScreen:= 0; 
+    uWorld.hScreen:= 0;
+    
     FPS:= 0;
     CountTicks:= 0;
     SoundTimerTicks:= 0;
--- a/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj	Sun May 02 18:25:13 2010 +0000
+++ b/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj	Sun May 02 18:42:19 2010 +0000
@@ -1209,6 +1209,7 @@
 				"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
 				SDKROOT = iphoneos3.2;
 				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = NO;
 			};
 			name = Distribution;
 		};
@@ -1409,6 +1410,7 @@
 				PREBINDING = NO;
 				SDKROOT = iphoneos3.2;
 				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = NO;
 			};
 			name = Debug;
 		};
@@ -1448,6 +1450,7 @@
 				"PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
 				SDKROOT = iphoneos3.2;
 				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = NO;
 			};
 			name = Release;
 		};