# HG changeset patch # User unc0rr # Date 1312178882 -14400 # Node ID fef4564392380467f048281e1a90bb2b002a55b7 # Parent d080fb32d703642fa0fc797c51f57b18bc887d35# Parent 900b3fe02546a5f9a1334f04f712802f6e533af5 Merge diff -r d080fb32d703 -r fef456439238 .hgtags --- a/.hgtags Wed Jul 27 11:41:43 2011 +0400 +++ b/.hgtags Mon Aug 01 10:08:02 2011 +0400 @@ -11,14 +11,34 @@ ae71dff40ecc405a55647b0f52f628674c1ebb51 0.9.14.1-release ae0c6c35414ddc120c8ae94035f287f03a752e78 Hedgewars-iOS-1.2.3 19ba506ed86b6306f7cd01b2613069391f4e34e6 0.9.13-release +19ba506ed86b6306f7cd01b2613069391f4e34e6 0.9.13 +0000000000000000000000000000000000000000 0.9.13 7d8d62a5566ed84688c596b8f55e83cfd171683e 0.9.12-release +7d8d62a5566ed84688c596b8f55e83cfd171683e 0.9.12 +0000000000000000000000000000000000000000 0.9.12 89d0fa6734af24e439755b102080cf6268c50aa6 0.9.11-release +89d0fa6734af24e439755b102080cf6268c50aa6 0.9.11 +0000000000000000000000000000000000000000 0.9.11 990f341a2332a7bef0822b313854544228375e36 0.9.10-release +990f341a2332a7bef0822b313854544228375e36 0.9.10 +0000000000000000000000000000000000000000 0.9.10 8c3e71880f492c61086c2ca2541b52f82a5957b0 0.9.9.2-release +8c3e71880f492c61086c2ca2541b52f82a5957b0 0.9.9.2 +0000000000000000000000000000000000000000 0.9.9.2 040cfeac98127d35f22ac8433b06b09e50d5b28f 0.9.8-release 44cc464de8f320e8018ed9e9cbb7281fd42d0a00 0.9.7-release a32f1eed51a6df2513d471cb849eb110545c50b3 0.9.6-release 6bc4389344c7d7f41bcbc46f986c1dcf88846189 0.9.5-release 52c7981594f6bc3a7ed1b297b80cb38082015401 0.9.4-release +52c7981594f6bc3a7ed1b297b80cb38082015401 0.9.4 +0000000000000000000000000000000000000000 0.9.4 9b2abea1071f83da8fbda70b0bf6cec0ca481b07 0.9.3-release +9b2abea1071f83da8fbda70b0bf6cec0ca481b07 0.9.3 +0000000000000000000000000000000000000000 0.9.3 69f1dc50a1faddf1a52080600a3f4771bedd45c1 0.9.2-release +69f1dc50a1faddf1a52080600a3f4771bedd45c1 0.9.2 +0000000000000000000000000000000000000000 0.9.2 +fee68e3a303998fdfcc69f74775dc84a36f587fb 0.9.9 +0000000000000000000000000000000000000000 0.9.9 +fee68e3a303998fdfcc69f74775dc84a36f587fb 0.9.9.1 +0000000000000000000000000000000000000000 0.9.9.1 diff -r d080fb32d703 -r fef456439238 QTfrontend/gamecfgwidget.cpp --- a/QTfrontend/gamecfgwidget.cpp Wed Jul 27 11:41:43 2011 +0400 +++ b/QTfrontend/gamecfgwidget.cpp Mon Aug 01 10:08:02 2011 +0400 @@ -49,10 +49,13 @@ QGridLayout *GBoxOptionsLayout = new QGridLayout(GBoxOptions); - GBoxOptionsLayout->addWidget(new QLabel(QLabel::tr("Gameplay"), GBoxOptions), 0, 0); + QLabel *titleLabel = new QLabel(QLabel::tr("Game Options"), GBoxOptions); + titleLabel->setMargin(7); // TODO: make the text larger/richer!!!! + GBoxOptionsLayout->addWidget(titleLabel, 0, 0, 1, 0, Qt::AlignHCenter); + GBoxOptionsLayout->addWidget(new QLabel(QLabel::tr("Style"), GBoxOptions), 1, 0); Scripts = new QComboBox(GBoxOptions); - GBoxOptionsLayout->addWidget(Scripts, 0, 1); + GBoxOptionsLayout->addWidget(Scripts, 1, 1); Scripts->addItem("Normal"); Scripts->insertSeparator(1); @@ -91,7 +94,7 @@ connect(Scripts, SIGNAL(currentIndexChanged(int)), this, SLOT(scriptChanged(int))); QWidget *SchemeWidget = new QWidget(GBoxOptions); - GBoxOptionsLayout->addWidget(SchemeWidget, 1, 0, 1, 2); + GBoxOptionsLayout->addWidget(SchemeWidget, 2, 0, 1, 2); QGridLayout *SchemeWidgetLayout = new QGridLayout(SchemeWidget); SchemeWidgetLayout->setMargin(0); @@ -100,7 +103,7 @@ SchemeWidgetLayout->addWidget(GameSchemes, 0, 2); connect(GameSchemes, SIGNAL(currentIndexChanged(int)), this, SLOT(schemeChanged(int))); - SchemeWidgetLayout->addWidget(new QLabel(QLabel::tr("Game scheme"), SchemeWidget), 0, 0); + SchemeWidgetLayout->addWidget(new QLabel(QLabel::tr("Scheme"), SchemeWidget), 0, 0); QPixmap pmEdit(":/res/edit.png"); @@ -127,8 +130,6 @@ SchemeWidgetLayout->addWidget(goToWeaponPage, 1, 3); connect(goToWeaponPage, SIGNAL(clicked()), this, SLOT(jumpToWeapons())); - //GBoxOptionsLayout->addWidget(new QLabel(QLabel::tr("Bind schemes with weapons"), GBoxOptions), 2, 0); - bindEntries = new QCheckBox(SchemeWidget); bindEntries->setToolTip(tr("When this option is enabled selecting a game scheme will auto-select a weapon")); bindEntries->setChecked(true); @@ -136,7 +137,6 @@ bindEntries->setStyleSheet( "QCheckBox::indicator:checked { image: url(\":/res/lock.png\"); }" "QCheckBox::indicator:unchecked { image: url(\":/res/unlock.png\"); }" ); SchemeWidgetLayout->addWidget(bindEntries, 0, 1, 0, 1, Qt::AlignVCenter); - //GBoxOptionsLayout->addWidget(bindEntries, 2, 2); connect(pMapContainer, SIGNAL(seedChanged(const QString &)), this, SLOT(seedChanged(const QString &))); connect(pMapContainer, SIGNAL(mapChanged(const QString &)), this, SLOT(mapChanged(const QString &))); diff -r d080fb32d703 -r fef456439238 QTfrontend/hwconsts.h --- a/QTfrontend/hwconsts.h Wed Jul 27 11:41:43 2011 +0400 +++ b/QTfrontend/hwconsts.h Mon Aug 01 10:08:02 2011 +0400 @@ -99,13 +99,24 @@ // see http://en.wikipedia.org/wiki/List_of_colors -#define HW_TEAMCOLOR_ARRAY { 0xff007fff, /* azure */ \ - 0xffdd0000, /* classic red */ \ - 0xff3e9321, /* classic green */ \ - 0xffa23dbb, /* classic purple */ \ - 0xffffb347, /* pastel orange */ \ - 0xffcfcfc4, /* pastel gray */ \ - 0xffbff000, /* lime */ \ - 0xffffef00, /* yellow */ \ +/*define HW_TEAMCOLOR_ARRAY {0xff007fff, /. azure ./ \ + 0xffdd0000, /. classic red ./ \ + 0xff3e9321, /. classic green ./ \ + 0xffa23dbb, /. classic purple ./ \ + 0xffffb347, /. pastel orange ./ \ + 0xffcfcfc4, /. pastel gray ./ \ + 0xffbff000, /. lime ./ \ + 0xffffef00, /. yellow ./ \ + // add new colors here + 0 }*/ +#define HW_TEAMCOLOR_ARRAY { 0xffd12b42, /* red */ \ + 0xff4980c1, /* blue */ \ + 0xff6ab530, /* green */ \ + 0xffbc64c4, /* purple */ \ + 0xffe76d14, /* orange */ \ + 0xff3fb6e6, /* cyan */ \ + 0xffe3e90c, /* yellow */ \ + 0xff61d4ac, /* mint */ \ + 0xfff1c3e1, /* pink */ \ /* add new colors here */ \ 0 } diff -r d080fb32d703 -r fef456439238 QTfrontend/pageoptions.cpp --- a/QTfrontend/pageoptions.cpp Wed Jul 27 11:41:43 2011 +0400 +++ b/QTfrontend/pageoptions.cpp Mon Aug 01 10:08:02 2011 +0400 @@ -328,6 +328,12 @@ CBStereoMode->addItem(QComboBox::tr("Side-by-side")); CBStereoMode->addItem(QComboBox::tr("Top-Bottom")); CBStereoMode->addItem(QComboBox::tr("Wiggle")); + CBStereoMode->addItem(QComboBox::tr("Red/Cyan grayscale")); + CBStereoMode->addItem(QComboBox::tr("Cyan/Red grayscale")); + CBStereoMode->addItem(QComboBox::tr("Red/Blue grayscale")); + CBStereoMode->addItem(QComboBox::tr("Blue/Red grayscale")); + CBStereoMode->addItem(QComboBox::tr("Red/Green grayscale")); + CBStereoMode->addItem(QComboBox::tr("Green/Red grayscale")); connect(CBStereoMode, SIGNAL(currentIndexChanged(int)), this, SLOT(forceFullscreen(int))); GBAstereolayout->addWidget(CBStereoMode); diff -r d080fb32d703 -r fef456439238 hedgewars/ArgParsers.inc --- a/hedgewars/ArgParsers.inc Wed Jul 27 11:41:43 2011 +0400 +++ b/hedgewars/ArgParsers.inc Mon Aug 01 10:08:02 2011 +0400 @@ -50,7 +50,14 @@ UserNick:= DecodeBase64(ParamStr(14)); val(ParamStr(15), cReducedQuality); val(ParamStr(16), tmp); - cStereoMode:= TStereoMode(max(0, min(ord(high(TStereoMode)), tmp))); + cGrayScale:= false; + if (tmp > 9) and (tmp < 16) then + begin + cGrayScale:= true; + cStereoMode:= TStereoMode(max(0, min(ord(high(TStereoMode)), tmp-9))) + end + else if tmp <= 9 then cStereoMode:= TStereoMode(max(0, min(ord(high(TStereoMode)), tmp))) + else cStereoMode:= TStereoMode(max(0, min(ord(high(TStereoMode)), tmp-6))); cLocaleFName:= ParamStr(17); end; diff -r d080fb32d703 -r fef456439238 hedgewars/GSHandlers.inc --- a/hedgewars/GSHandlers.inc Wed Jul 27 11:41:43 2011 +0400 +++ b/hedgewars/GSHandlers.inc Mon Aug 01 10:08:02 2011 +0400 @@ -156,12 +156,8 @@ AddCaption(Format(GetEventString(eidDrowned), Gear^.Hedgehog^.Name), cWhiteColor, capgrpMessage); end end - else if Gear^.Kind = gtFlake then - begin - DeleteGear(Gear); - exit - end - else Gear^.doStep := @doStepDrowningGear + else Gear^.doStep := @doStepDrowningGear; + if Gear^.Kind = gtFlake then exit // skip splashes end; if ((not isSubmersible) and (Y < cWaterLine + 64 + Gear^.Radius)) or (isSubmersible and (Y < cWaterLine + 2 + Gear^.Radius) and ((CurAmmoGear^.Pos = 0) and (CurAmmoGear^.dY < _0_01))) then @@ -361,12 +357,12 @@ else Gear^.State := Gear^.State or gstMoving; - if (Gear^.nImpactSounds > 0) then - if ((Gear^.Damage <> 0) or ((Gear^.State and (gstCollision or gstMoving)) = (gstCollision or - gstMoving))) and - ((Gear^.dX.QWordValue > _0_1.QWordValue) or (Gear^.dY.QWordValue > _0_1.QWordValue)) then - PlaySound(TSound(ord(Gear^.ImpactSound) + LongInt(GetRandom(Gear^.nImpactSounds))), true - ); + if (Gear^.nImpactSounds > 0) and + ((Gear^.Damage <> 0) or + ((Gear^.State and (gstCollision or gstMoving)) = (gstCollision or gstMoving))) and + ((Gear^.dX.QWordValue > _0_1.QWordValue) or + (Gear^.dY.QWordValue > _0_1.QWordValue)) then + PlaySound(TSound(ord(Gear^.ImpactSound) + LongInt(GetRandom(Gear^.nImpactSounds))), true); end; //////////////////////////////////////////////////////////////////////////////// @@ -595,6 +591,7 @@ draw:= false; if gun then begin + Gear^.State:= Gear^.State and not gstInvisible; doStepFallingGear(Gear); CheckCollision(Gear); if ((Gear^.State and gstCollision) <> 0) or ((Gear^.State and gstMoving) = 0) then draw:= true; @@ -4494,18 +4491,16 @@ if Gear^.Timer = 0 then begin dec(Gear^.Health); - if (Gear^.Health mod 5) = 0 then - begin - rx := rndSign(getRandom * _0_1); - ry := rndSign(getRandom * _0_1); - speed := (_3 / Gear^.Tag); - - Flake := AddGear(gx, gy, gtFlake, 0, _0, _0, 0); - Flake^.dX:= SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx; - Flake^.dY:= AngleCos(HHGear^.Angle) * ( - speed) + ry; - Flake^.State := Flake^.State or gsttmpFlag; + + rx := rndSign(getRandom * _0_1); + ry := rndSign(getRandom * _0_1); + speed := (_3 / Gear^.Tag); + + Flake := AddGear(gx, gy, gtFlake, 0, _0, _0, 0); + Flake^.dX:= SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx; + Flake^.dY:= AngleCos(HHGear^.Angle) * ( - speed) + ry; + Flake^.State := Flake^.State or gsttmpFlag; - end; Gear^.Timer:= Gear^.Tag end; diff -r d080fb32d703 -r fef456439238 hedgewars/HHHandlers.inc --- a/hedgewars/HHHandlers.inc Wed Jul 27 11:41:43 2011 +0400 +++ b/hedgewars/HHHandlers.inc Mon Aug 01 10:08:02 2011 +0400 @@ -77,7 +77,7 @@ ammoidx:= -1; //TryDo(i < 2, 'Engine bug: no ammo in current slot', true) end; - until ((Ammo^[slot, ammoidx].Count > 0) and (Team^.Clan^.TurnNumber > Ammoz[Ammo^[slot, ammoidx].AmmoType].SkipTurns)) or (i = 1) + until (i = 1) or ((Ammo^[slot, ammoidx].Count > 0) and (Team^.Clan^.TurnNumber > Ammoz[Ammo^[slot, ammoidx].AmmoType].SkipTurns)) end else begin diff -r d080fb32d703 -r fef456439238 hedgewars/SDLh.pas --- a/hedgewars/SDLh.pas Wed Jul 27 11:41:43 2011 +0400 +++ b/hedgewars/SDLh.pas Mon Aug 01 10:08:02 2011 +0400 @@ -287,6 +287,7 @@ PSDL_Window = Pointer; PSDL_Renderer = Pointer; PSDL_Texture = Pointer; + PSDL_GLContext= Pointer; {$ENDIF} PSDL_Rect = ^TSDL_Rect; @@ -765,11 +766,16 @@ {$IFDEF SDL13} function SDL_CreateWindow(title: PChar; x,y,w,h, flags: LongInt): PSDL_Window; cdecl; external SDLLibName; function SDL_CreateRenderer(window: PSDL_Window; index, flags: LongInt): PSDL_Renderer; cdecl; external SDLLibName; +function SDL_DestroyWindow(window: PSDL_Window): LongInt; cdecl; external SDLLibName; function SDL_DestroyRenderer(renderer: PSDL_Renderer): LongInt; cdecl; external SDLLibName; -function SDL_DestroyWindow(window: PSDL_Window): LongInt; cdecl; external SDLLibName; + +function SDL_GL_CreateContext(window: PSDL_Window): PSDL_GLContext; cdecl; external SDLLibName; +procedure SDL_GL_DeleteContext(context: PSDL_GLContext); cdecl; external SDLLibName; +function SDL_GL_SwapWindow(window: PSDL_Window): LongInt; cdecl; external SDLLibName; procedure SDL_VideoQuit; cdecl; external SDLLibName; function SDL_GetNumVideoDisplays: LongInt; cdecl; external SDLLibName; +procedure SDL_ShowWindow(window: PSDL_Window); cdecl; external SDLLibName; function SDL_SetRenderDrawColor(renderer: PSDL_Renderer; r,g,b,a: byte): LongInt; cdecl; external SDLLibName; function SDL_GetRenderer(window: PSDL_Window): PSDL_Renderer; cdecl; external SDLLibName; diff -r d080fb32d703 -r fef456439238 hedgewars/uConsts.pas --- a/hedgewars/uConsts.pas Wed Jul 27 11:41:43 2011 +0400 +++ b/hedgewars/uConsts.pas Mon Aug 01 10:08:02 2011 +0400 @@ -120,6 +120,16 @@ cifAllInited = cifRandomize or cifTheme or cifMap; cTransparentColor: Longword = $00000000; + cGrayScale: Boolean = false; + + RGB_LUMINANCE_RED = 0.212671; + RGB_LUMINANCE_GREEN = 0.715160; + RGB_LUMINANCE_BLUE = 0.072169; +(* + RGB_LUMINANCE_RED = 0.3333333333; + RGB_LUMINANCE_GREEN = 0.3333333333; + RGB_LUMINANCE_BLUE = 0.3333333333; +*) cMaxTeams = 8; cMaxHHIndex = 7; diff -r d080fb32d703 -r fef456439238 hedgewars/uGears.pas --- a/hedgewars/uGears.pas Wed Jul 27 11:41:43 2011 +0400 +++ b/hedgewars/uGears.pas Mon Aug 01 10:08:02 2011 +0400 @@ -914,7 +914,7 @@ CurrentHedgehog^.Gear^.State:= CurrentHedgehog^.Gear^.State and not gstAttacked; if delay2 = 0 then begin - SweepDirty; + if (CurrentHedgehog^.Gear <> nil) and (CurrentHedgehog^.Gear^.State and gstAttacked = 0) then SweepDirty; CheckNoDamage; AliveCount:= 0; // shorter version of check for win to allow typical step activity to proceed for i:= 0 to Pred(ClansCount) do diff -r d080fb32d703 -r fef456439238 hedgewars/uGearsRender.pas --- a/hedgewars/uGearsRender.pas Wed Jul 27 11:41:43 2011 +0400 +++ b/hedgewars/uGearsRender.pas Mon Aug 01 10:08:02 2011 +0400 @@ -1050,15 +1050,15 @@ end; gtNapalmBomb: DrawRotated(sprNapalmBomb, x, y, 0, DxDy2Angle(Gear^.dY, Gear^.dX)); gtFlake: if (Gear^.State and gstTmpFlag) <> 0 then - //DrawRotatedTextureF(SpritesData[sprSnowBall].Texture, 1, 0, 0, x, y, 0, 1, 8, 8, Gear^.DirAngle) begin Tint((cExplosionBorderColor shr RShift) and $FF, (cExplosionBorderColor shr GShift) and $FF, (cExplosionBorderColor shr BShift) and $FF, - (cExplosionBorderColor shr AShift) and $FF); - //DrawRotated(sprSnow, x, y, 0, Gear^.DirAngle); + $FF); // Needs a nicer white texture to tint - DrawTexture(x, y, SpritesData[sprVampiric].Texture, 0.1); + DrawRotatedTextureF(SpritesData[sprSnowDust].Texture, 1, 0, 0, x, y, 0, 1, 8, 8, Gear^.DirAngle); + //DrawRotated(sprSnowDust, x, y, 0, Gear^.DirAngle); + //DrawTexture(x, y, SpritesData[sprVampiric].Texture, 0.1); Tint($FF, $FF, $FF, $FF); end else if not isInLag then diff -r d080fb32d703 -r fef456439238 hedgewars/uLand.pas --- a/hedgewars/uLand.pas Wed Jul 27 11:41:43 2011 +0400 +++ b/hedgewars/uLand.pas Mon Aug 01 10:08:02 2011 +0400 @@ -1096,6 +1096,7 @@ end; Land[y,x]:= lfObject end; + AddProgress(); end; @@ -1314,6 +1315,32 @@ FreeLandObjects; +if cGrayScale then + begin + if (cReducedQuality and rqBlurryLand) = 0 then + for x:= leftX to rightX do + for y:= topY to LAND_HEIGHT-1 do + begin + w:= LandPixels[y,x]; + w:= round(((w shr RShift and $FF) * RGB_LUMINANCE_RED + + (w shr BShift and $FF) * RGB_LUMINANCE_GREEN + + (w shr GShift and $FF) * RGB_LUMINANCE_BLUE)); + if w > 255 then w:= 255; + w:= (w and $FF shl RShift) or (w and $FF shl BShift) or (w and $FF shl GShift) or (LandPixels[y,x] and AMask); + LandPixels[y,x]:= w or (LandPixels[y, x] and AMask) + end + else + for x:= leftX div 2 to rightX div 2 do + for y:= topY div 2 to LAND_HEIGHT-1 div 2 do + begin + w:= LandPixels[y div 2,x div 2]; + w:= ((w shr RShift and $FF) + (w shr BShift and $FF) + (w shr GShift and $FF)) div 3; + if w > 255 then w:= 255; + w:= (w and $FF shl RShift) or (w and $FF shl BShift) or (w and $FF shl GShift) or (LandPixels[y div 2,x div 2] and AMask); + LandPixels[y,x]:= w or (LandPixels[y div 2, x div 2] and AMask) + end + end; + UpdateLandTexture(0, LAND_WIDTH, 0, LAND_HEIGHT); end; diff -r d080fb32d703 -r fef456439238 hedgewars/uLandGraphics.pas --- a/hedgewars/uLandGraphics.pas Wed Jul 27 11:41:43 2011 +0400 +++ b/hedgewars/uLandGraphics.pas Mon Aug 01 10:08:02 2011 +0400 @@ -210,81 +210,93 @@ end; function FillLandCircleLinesBG(x, y, dx, dy: LongInt): Longword; -var i, t: LongInt; +var i, t, by, bx: LongInt; cnt: Longword; begin cnt:= 0; t:= y + dy; if (t and LAND_HEIGHT_MASK) = 0 then for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do - if ((Land[t, i] and lfBasic) <> 0) and not disableLandBack then + begin + if (cReducedQuality and rqBlurryLand) = 0 then + begin + by:= t; bx:= i; + end + else + begin + by:= t div 2; bx:= i div 2; + end; + if ((Land[t, i] and lfBasic) <> 0) and ((LandPixels[by,bx] and AMask) shr AShift = 255) and not disableLandBack then begin inc(cnt); - if (cReducedQuality and rqBlurryLand) = 0 then - LandPixels[t, i]:= LandBackPixel(i, t) - else - LandPixels[t div 2, i div 2]:= LandBackPixel(i, t) + LandPixels[by, bx]:= LandBackPixel(i, t) end else - if ((Land[t, i] and lfObject) <> 0) or (disableLandBack and ((Land[t, i] and lfIndestructible) = 0)) then - if (cReducedQuality and rqBlurryLand) = 0 then - LandPixels[t, i]:= 0 - else - LandPixels[t div 2, i div 2]:= 0; + if ((Land[t, i] and lfObject) <> 0) or (disableLandBack and ((Land[t, i] and lfIndestructible) = 0)) or ((LandPixels[by,bx] and AMask) shr AShift < 255) then + LandPixels[by, bx]:= 0 + end; t:= y - dy; if (t and LAND_HEIGHT_MASK) = 0 then for i:= Max(x - dx, 0) to Min(x + dx, LAND_WIDTH - 1) do - if ((Land[t, i] and lfBasic) <> 0) and not disableLandBack then + begin + if (cReducedQuality and rqBlurryLand) = 0 then + begin + by:= t; bx:= i; + end + else + begin + by:= t div 2; bx:= i div 2; + end; + if ((Land[t, i] and lfBasic) <> 0) and ((LandPixels[by,bx] and AMask) shr AShift = 255) and not disableLandBack then begin inc(cnt); - if (cReducedQuality and rqBlurryLand) = 0 then - LandPixels[t, i]:= LandBackPixel(i, t) - else - LandPixels[t div 2, i div 2]:= LandBackPixel(i, t) + LandPixels[by, bx]:= LandBackPixel(i, t) end - else - if ((Land[t, i] and lfObject) <> 0) or (disableLandBack and ((Land[t, i] and lfIndestructible) = 0)) then - if (cReducedQuality and rqBlurryLand) = 0 then - LandPixels[t, i]:= 0 - else - LandPixels[t div 2, i div 2]:= 0; + else if ((Land[t, i] and lfObject) <> 0) or (disableLandBack and ((Land[t, i] and lfIndestructible) = 0)) or ((LandPixels[by,bx] and AMask) shr AShift < 255) then + LandPixels[by, bx]:= 0 + end; t:= y + dx; if (t and LAND_HEIGHT_MASK) = 0 then for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do - if ((Land[t, i] and lfBasic) <> 0) and not disableLandBack then + begin + if (cReducedQuality and rqBlurryLand) = 0 then + begin + by:= t; bx:= i; + end + else + begin + by:= t div 2; bx:= i div 2; + end; + if ((Land[t, i] and lfBasic) <> 0) and ((LandPixels[by,bx] and AMask) shr AShift = 255) and not disableLandBack then begin inc(cnt); - if (cReducedQuality and rqBlurryLand) = 0 then - LandPixels[t, i]:= LandBackPixel(i, t) - else - LandPixels[t div 2, i div 2]:= LandBackPixel(i, t) + LandPixels[by, bx]:= LandBackPixel(i, t) end - else - if ((Land[t, i] and lfObject) <> 0) or (disableLandBack and ((Land[t, i] and lfIndestructible) = 0)) then - if (cReducedQuality and rqBlurryLand) = 0 then - LandPixels[t, i]:= 0 - else - LandPixels[t div 2, i div 2]:= 0; - + else if ((Land[t, i] and lfObject) <> 0) or (disableLandBack and ((Land[t, i] and lfIndestructible) = 0)) or ((LandPixels[by,bx] and AMask) shr AShift < 255) then + LandPixels[by, bx]:= 0 + end; t:= y - dx; if (t and LAND_HEIGHT_MASK) = 0 then for i:= Max(x - dy, 0) to Min(x + dy, LAND_WIDTH - 1) do - if ((Land[t, i] and lfBasic) <> 0) and not disableLandBack then + begin + if (cReducedQuality and rqBlurryLand) = 0 then + begin + by:= t; bx:= i; + end + else + begin + by:= t div 2; bx:= i div 2; + end; + if ((Land[t, i] and lfBasic) <> 0) and ((LandPixels[by,bx] and AMask) shr AShift = 255) and not disableLandBack then begin inc(cnt); - if (cReducedQuality and rqBlurryLand) = 0 then - LandPixels[t, i]:= LandBackPixel(i, t) - else - LandPixels[t div 2, i div 2]:= LandBackPixel(i, t) + LandPixels[by, bx]:= LandBackPixel(i, t) end - else - if ((Land[t, i] and lfObject) <> 0) or (disableLandBack and ((Land[t, i] and lfIndestructible) = 0)) then - if (cReducedQuality and rqBlurryLand) = 0 then - LandPixels[t, i]:= 0 - else - LandPixels[t div 2, i div 2]:= 0; + else if ((Land[t, i] and lfObject) <> 0) or (disableLandBack and ((Land[t, i] and lfIndestructible) = 0)) or ((LandPixels[by,bx] and AMask) shr AShift < 255) then + LandPixels[by, bx]:= 0 + end; FillLandCircleLinesBG:= cnt; end; @@ -430,23 +442,26 @@ end; procedure DrawHLinesExplosions(ar: PRangeArray; Radius: LongInt; y, dY: LongInt; Count: Byte); -var tx, ty, i: LongInt; +var tx, ty, by, bx, i: LongInt; begin for i:= 0 to Pred(Count) do begin for ty:= Max(y - Radius, 0) to Min(y + Radius, LAND_HEIGHT) do for tx:= Max(0, ar^[i].Left - Radius) to Min(LAND_WIDTH, ar^[i].Right + Radius) do - if ((Land[ty, tx] and lfBasic) <> 0) and not disableLandBack then - if (cReducedQuality and rqBlurryLand) = 0 then - LandPixels[ty, tx]:= LandBackPixel(tx, ty) - else - LandPixels[ty div 2, tx div 2]:= LandBackPixel(tx, ty) + begin + if (cReducedQuality and rqBlurryLand) = 0 then + begin + by:= ty; bx:= tx; + end else - if ((Land[ty, tx] and lfObject) <> 0) or (disableLandBack and ((Land[ty, tx] and lfIndestructible) = 0)) then - if (cReducedQuality and rqBlurryLand) = 0 then - LandPixels[ty, tx]:= 0 - else - LandPixels[ty div 2, tx div 2]:= 0; + begin + by:= ty div 2; bx:= tx div 2; + end; + if ((Land[ty, tx] and lfBasic) <> 0) and ((LandPixels[by,bx] and AMask) shr AShift = 255) and not disableLandBack then + LandPixels[by, bx]:= LandBackPixel(tx, ty) + else if ((Land[ty, tx] and lfObject) <> 0) or (disableLandBack and ((Land[ty, tx] and lfIndestructible) = 0)) or ((LandPixels[by,bx] and AMask) shr AShift < 255) then + LandPixels[by, bx]:= 0 + end; inc(y, dY) end; @@ -479,7 +494,7 @@ // procedure DrawTunnel(X, Y, dX, dY: hwFloat; ticks, HalfWidth: LongInt); var nx, ny, dX8, dY8: hwFloat; - i, t, tx, ty, stX, stY, ddy, ddx: Longint; + i, t, tx, ty, by, bx, stX, stY, ddy, ddx: Longint; despeckle : Boolean; begin // (-dY, dX) is (dX, dY) rotated by PI/2 stY:= hwRound(Y); @@ -550,17 +565,18 @@ ty:= hwRound(Y); if ((ty and LAND_HEIGHT_MASK) = 0) and ((tx and LAND_WIDTH_MASK) = 0) and ((Land[ty, tx] and lfIndestructible) = 0) then begin - if ((Land[ty, tx] and lfBasic) <> 0) and not disableLandBack then - if (cReducedQuality and rqBlurryLand) = 0 then - LandPixels[ty, tx]:= LandBackPixel(tx, ty) - else - LandPixels[ty div 2, tx div 2]:= LandBackPixel(tx, ty) + if (cReducedQuality and rqBlurryLand) = 0 then + begin + by:= ty; bx:= tx; + end else - if ((Land[ty, tx] and lfObject) <> 0) or (disableLandBack and ((Land[ty, tx] and lfIndestructible) = 0)) then - if (cReducedQuality and rqBlurryLand) = 0 then - LandPixels[ty, tx]:= 0 - else - LandPixels[ty div 2, tx div 2]:= 0; + begin + by:= ty div 2; bx:= tx div 2; + end; + if ((Land[ty, tx] and lfBasic) <> 0) and ((LandPixels[by,bx] and AMask) shr AShift = 255) and not disableLandBack then + LandPixels[by, bx]:= LandBackPixel(tx, ty) + else if ((Land[ty, tx] and lfObject) <> 0) or (disableLandBack and ((Land[ty, tx] and lfIndestructible) = 0)) or ((LandPixels[by,bx] and AMask) shr AShift < 255) then + LandPixels[by, bx]:= 0; Land[ty, tx]:= 0; end @@ -748,7 +764,7 @@ LandPixels[yy, xx]:= 0; Land[Y, X]:= 0; - if not pixelsweep then exit(1) // cannot exit true on pixel sweep, or risk desyncs due to inconsistent resweeps + if not pixelsweep then exit(1) else exit(2) end; end; diff -r d080fb32d703 -r fef456439238 hedgewars/uLandObjects.pas --- a/hedgewars/uLandObjects.pas Wed Jul 27 11:41:43 2011 +0400 +++ b/hedgewars/uLandObjects.pas Mon Aug 01 10:08:02 2011 +0400 @@ -372,7 +372,7 @@ var s, key: shortstring; f: textfile; i: LongInt; - ii: Longword; + ii, t: Longword; c1, c2: TSDL_Color; procedure CheckRect(Width, Height, x, y, w, h: LongWord); @@ -415,6 +415,14 @@ c1.g:= StrToInt(Trim(Copy(s, 1, Pred(i)))); Delete(s, 1, i); c1.b:= StrToInt(Trim(s)); + if cGrayScale then + begin + t:= round(c1.r * RGB_LUMINANCE_RED + c1.g * RGB_LUMINANCE_GREEN + c1.b * RGB_LUMINANCE_BLUE); + if t > 255 then t:= 255; + c1.r:= t; + c1.g:= t; + c1.b:= t + end; glClearColor(c1.r / 255, c1.g / 255, c1.b / 255, 0.99); SDSkyColor.r:= byte(c1.r * SDTint div 255); SDSkyColor.g:= byte(c1.g * SDTint div 255); @@ -441,6 +449,14 @@ Delete(s, 1, i); WaterColorArray[0].b:= StrToInt(Trim(s)); WaterColorArray[0].a := 255; + if cGrayScale then + begin + t:= round(WaterColorArray[0].r * RGB_LUMINANCE_RED + WaterColorArray[0].g * RGB_LUMINANCE_GREEN + WaterColorArray[0].b * RGB_LUMINANCE_BLUE); + if t > 255 then t:= 255; + WaterColorArray[0].r:= t; + WaterColorArray[0].g:= t; + WaterColorArray[0].b:= t + end; WaterColorArray[1]:= WaterColorArray[0]; end else if key = 'water-bottom' then @@ -453,6 +469,14 @@ Delete(s, 1, i); WaterColorArray[2].b:= StrToInt(Trim(s)); WaterColorArray[2].a := 255; + if cGrayScale then + begin + t:= round(WaterColorArray[2].r * RGB_LUMINANCE_RED + WaterColorArray[2].g * RGB_LUMINANCE_GREEN + WaterColorArray[2].b * RGB_LUMINANCE_BLUE); + if t > 255 then t:= 255; + WaterColorArray[2].r:= t; + WaterColorArray[2].g:= t; + WaterColorArray[2].b:= t + end; WaterColorArray[3]:= WaterColorArray[2]; end else if key = 'water-opacity' then @@ -566,6 +590,14 @@ Delete(s, 1, i); SDWaterColorArray[0].b:= StrToInt(Trim(s)); SDWaterColorArray[0].a := 255; + if cGrayScale then + begin + t:= round(SDWaterColorArray[0].r * RGB_LUMINANCE_RED + SDWaterColorArray[0].g * RGB_LUMINANCE_GREEN + SDWaterColorArray[0].b * RGB_LUMINANCE_BLUE); + if t > 255 then t:= 255; + SDWaterColorArray[0].r:= t; + SDWaterColorArray[0].g:= t; + SDWaterColorArray[0].b:= t + end; SDWaterColorArray[1]:= SDWaterColorArray[0]; end else if key = 'sd-water-bottom' then @@ -578,6 +610,14 @@ Delete(s, 1, i); SDWaterColorArray[2].b:= StrToInt(Trim(s)); SDWaterColorArray[2].a := 255; + if cGrayScale then + begin + t:= round(SDWaterColorArray[2].r * RGB_LUMINANCE_RED + SDWaterColorArray[2].g * RGB_LUMINANCE_GREEN + SDWaterColorArray[2].b * RGB_LUMINANCE_BLUE); + if t > 255 then t:= 255; + SDWaterColorArray[2].r:= t; + SDWaterColorArray[2].g:= t; + SDWaterColorArray[2].b:= t + end; SDWaterColorArray[3]:= SDWaterColorArray[2]; end else if key = 'sd-water-opacity' then cSDWaterOpacity:= StrToInt(Trim(s)) @@ -612,6 +652,14 @@ c1.g:= StrToInt(Trim(Copy(s, 1, Pred(i)))); Delete(s, 1, i); c1.b:= StrToInt(Trim(s)); + if cGrayScale then + begin + t:= round(c1.r * RGB_LUMINANCE_RED + c1.g * RGB_LUMINANCE_GREEN + c1.b * RGB_LUMINANCE_BLUE); + if t > 255 then t:= 255; + c1.r:= t; + c1.g:= t; + c1.b:= t + end; glClearColor(c1.r / 255, c1.g / 255, c1.b / 255, 0.99); SDSkyColor.r:= byte(c1.r * SDTint div 255); SDSkyColor.g:= byte(c1.g * SDTint div 255); diff -r d080fb32d703 -r fef456439238 hedgewars/uRender.pas --- a/hedgewars/uRender.pas Wed Jul 27 11:41:43 2011 +0400 +++ b/hedgewars/uRender.pas Mon Aug 01 10:08:02 2011 +0400 @@ -22,7 +22,7 @@ interface -uses SDLh, uTypes, GLunit; +uses SDLh, uTypes, GLunit, uConsts; procedure DrawSpriteFromRect(Sprite: TSprite; r: TSDL_Rect; X, Y, Height, Position: LongInt); procedure DrawFromRect(X, Y, W, H: LongInt; r: PSDL_Rect; SourceTexture: PTexture); @@ -453,11 +453,20 @@ procedure Tint(r, g, b, a: Byte); inline; -var nc: Longword; +var nc, tw: Longword; begin nc:= (a shl 24) or (b shl 16) or (g shl 8) or r; if nc = lastTint then exit; +if cGrayScale then + begin + tw:= round(r * RGB_LUMINANCE_RED + g * RGB_LUMINANCE_GREEN + b * RGB_LUMINANCE_BLUE); + if tw > 255 then tw:= 255; + r:= tw; + g:= tw; + b:= tw + end; + glColor4ub(r, g, b, a); lastTint:= nc; end; diff -r d080fb32d703 -r fef456439238 hedgewars/uTextures.pas --- a/hedgewars/uTextures.pas Wed Jul 27 11:41:43 2011 +0400 +++ b/hedgewars/uTextures.pas Mon Aug 01 10:08:02 2011 +0400 @@ -131,6 +131,24 @@ if SDL_MustLock(surf) then SDLTry(SDL_LockSurface(surf) >= 0, true); +fromP4:= Surf^.pixels; + +if cGrayScale then + for y:= 0 to Pred(Surf^.h) do + begin + for x:= 0 to Pred(Surf^.w) do + begin + tw:= fromP4^[x]; + tw:= round((tw shr RShift and $FF) * RGB_LUMINANCE_RED + + (tw shr GShift and $FF) * RGB_LUMINANCE_GREEN + + (tw shr BShift and $FF) * RGB_LUMINANCE_BLUE); + if tw > 255 then tw:= 255; + tw:= (tw and $FF shl RShift) or (tw and $FF shl BShift) or (tw and $FF shl GShift) or (fromP4^[x] and AMask); + fromP4^[x]:= tw; + end; + fromP4:= @(fromP4^[Surf^.pitch div 4]) + end; + if (not SupportNPOTT) and (not (isPowerOf2(Surf^.w) and isPowerOf2(Surf^.h))) then begin tw:= toPowerOf2(Surf^.w); diff -r d080fb32d703 -r fef456439238 hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Wed Jul 27 11:41:43 2011 +0400 +++ b/hedgewars/uWorld.pas Mon Aug 01 10:08:02 2011 +0400 @@ -971,7 +971,7 @@ end; if smallScreenOffset <> 0 then begin - SetScale(zoom); + SetScale(cDefaultZoomLevel); if TeamsCount * 20 > cScreenHeight div 5 then Tint($FF,$FF,$FF,$FF); end; diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Classes/Appirater.h --- a/project_files/HedgewarsMobile/Classes/Appirater.h Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Classes/Appirater.h Mon Aug 01 10:08:02 2011 +0400 @@ -45,7 +45,7 @@ /* Place your Apple generated software id here. */ -#define APPIRATER_APP_ID 391234866 +#define APPIRATER_APP_ID 391234866 /* Your app's name. @@ -82,13 +82,13 @@ Users will need to have the same version of your app installed for this many days before they will be prompted to rate it. */ -#define DAYS_UNTIL_PROMPT 5 // double +#define DAYS_UNTIL_PROMPT 3 // double /* Users will need to launch the same version of the app this many times before they will be prompted to rate it. */ -#define LAUNCHES_UNTIL_PROMPT 10 // integer +#define LAUNCHES_UNTIL_PROMPT 5 // integer /* 'YES' will show the Appirater alert everytime. Useful for testing how your message diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Classes/Appirater.m --- a/project_files/HedgewarsMobile/Classes/Appirater.m Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Classes/Appirater.m Mon Aug 01 10:08:02 2011 +0400 @@ -37,6 +37,7 @@ #import "Appirater.h" #import #import +#import "CommodityFunctions.h" NSString *const kAppiraterLaunchDate = @"kAppiraterLaunchDate"; NSString *const kAppiraterLaunchCount = @"kAppiraterLaunchCount"; @@ -46,47 +47,6 @@ NSString *templateReviewURL = @"itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=APP_ID&onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software"; -@interface Appirater (hidden) - --(BOOL) connectedToNetwork; - -@end - -@implementation Appirater (hidden) - --(BOOL) connectedToNetwork { - // Create zero addy - struct sockaddr_in zeroAddress; - bzero(&zeroAddress, sizeof(zeroAddress)); - zeroAddress.sin_len = sizeof(zeroAddress); - zeroAddress.sin_family = AF_INET; - - // Recover reachability flags - SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress); - SCNetworkReachabilityFlags flags; - - BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags); - CFRelease(defaultRouteReachability); - - if (!didRetrieveFlags) { - NSLog(@"Error. Could not recover network reachability flags"); - return NO; - } - - BOOL isReachable = flags & kSCNetworkFlagsReachable; - BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired; - BOOL nonWiFi = flags & kSCNetworkReachabilityFlagsTransientConnection; - - NSURL *testURL = [NSURL URLWithString:@"http://www.apple.com/"]; - NSURLRequest *testRequest = [NSURLRequest requestWithURL:testURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20.0]; - NSURLConnection *testConnection = [[NSURLConnection alloc] initWithRequest:testRequest delegate:self]; - - return ((isReachable && !needsConnection) || nonWiFi) ? (testConnection ? YES : NO) : NO; -} - -@end - - @implementation Appirater +(void) appLaunched { @@ -146,7 +106,7 @@ launchCount > LAUNCHES_UNTIL_PROMPT && !declinedToRate && !ratedApp) { - if ([self connectedToNetwork]) { // check if they can reach the app store + if (isNetworkReachable()) { // check if they can reach the app store willShowPrompt = YES; [self performSelectorOnMainThread:@selector(showPrompt) withObject:nil waitUntilDone:NO]; } diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Classes/CommodityFunctions.h --- a/project_files/HedgewarsMobile/Classes/CommodityFunctions.h Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Classes/CommodityFunctions.h Mon Aug 01 10:08:02 2011 +0400 @@ -46,6 +46,7 @@ #define MAPS_DIRECTORY() [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Maps/"] #define MISSIONS_DIRECTORY() [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Missions/Maps/"] #define LOCALE_DIRECTORY() [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Locale/"] +#define SCRIPTS_DIRECTORY() [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Data/Scripts/plist/"] #define MSG_MEMCLEAN() DLog(@"has cleaned up some memory"); #define MSG_DIDUNLOAD() DLog(@"unloaded"); @@ -75,6 +76,7 @@ UILabel *createLabelWithParams (NSString *title, CGRect frame, CGFloat borderWidth, UIColor *borderColor, UIColor *backgroundColor); CGSize PSPNGSizeFromMetaData (NSString *aFileName); +BOOL isNetworkReachable (void); @interface NSString (extra) diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Classes/CommodityFunctions.m --- a/project_files/HedgewarsMobile/Classes/CommodityFunctions.m Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Classes/CommodityFunctions.m Mon Aug 01 10:08:02 2011 +0400 @@ -27,6 +27,8 @@ #import #import #import +#import +#import #import "PascalImports.h" #import "hwconsts.h" @@ -39,6 +41,7 @@ // by http://landonf.bikemonkey.org/code/iphone/Determining_Available_Memory.20081203.html void print_free_memory () { +#ifdef DEBUG mach_port_t host_port; mach_msg_type_number_t host_size; vm_size_t pagesize; @@ -57,6 +60,7 @@ natural_t mem_free = vm_stat.free_count * pagesize; natural_t mem_total = mem_used + mem_free; DLog(@"used: %u free: %u total: %u", mem_used, mem_free, mem_total); +#endif } BOOL inline isApplePhone () { @@ -128,6 +132,40 @@ return theLabel; } +BOOL isNetworkReachable (void) { + // Create zero addy + struct sockaddr_in zeroAddress; + bzero(&zeroAddress, sizeof(zeroAddress)); + zeroAddress.sin_len = sizeof(zeroAddress); + zeroAddress.sin_family = AF_INET; + + // Recover reachability flags + SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress); + SCNetworkReachabilityFlags flags; + + BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags); + CFRelease(defaultRouteReachability); + + if (!didRetrieveFlags) { + NSLog(@"Error. Could not recover network reachability flags"); + return NO; + } + + BOOL isReachable = flags & kSCNetworkFlagsReachable; + BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired; + BOOL nonWiFi = flags & kSCNetworkReachabilityFlagsTransientConnection; + + NSURL *testURL = [NSURL URLWithString:@"http://www.apple.com/"]; + NSURLRequest *testRequest = [NSURLRequest requestWithURL:testURL + cachePolicy:NSURLRequestReloadIgnoringLocalCacheData + timeoutInterval:20.0]; + NSURLConnection *testConnection = [[NSURLConnection alloc] initWithRequest:testRequest delegate:nil]; + BOOL testResult = testConnection ? YES : NO; + [testConnection release]; + + return ((isReachable && !needsConnection) || nonWiFi) ? testResult : NO; +} + // 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 PSPNGSizeFromMetaData (NSString *aFileName) { diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Classes/CreationChamber.m --- a/project_files/HedgewarsMobile/Classes/CreationChamber.m Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Classes/CreationChamber.m Mon Aug 01 10:08:02 2011 +0400 @@ -28,8 +28,11 @@ [settings setObject:[NSNumber numberWithBool:YES] forKey:@"music"]; [settings setObject:[NSNumber numberWithBool:YES] forKey:@"sound"]; [settings setObject:[NSNumber numberWithBool:NO] forKey:@"classic_menu"]; - [settings setObject:[NSNumber numberWithBool:YES] forKey:@"enhanced"]; [settings setObject:[NSNumber numberWithBool:YES] forKey:@"multitasking"]; + [settings setObject:[NSNumber numberWithBool:YES] forKey:@"sync_ws"]; + + // limit graphic usage on older devices + [settings setObject:[NSNumber numberWithBool:IS_VERY_POWERFUL(getModelType())] forKey:@"enhanced"]; // don't overwrite these two strings when present if ([settings objectForKey:@"username"] == nil) diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Classes/GameConfigViewController.m --- a/project_files/HedgewarsMobile/Classes/GameConfigViewController.m Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Classes/GameConfigViewController.m Mon Aug 01 10:08:02 2011 +0400 @@ -212,6 +212,10 @@ if ([self isEverythingSet] == NO) return; + NSString *script = self.mapConfigViewController.missionCommand; + if ([script isEqualToString:@""]) + script = self.schemeWeaponConfigViewController.scriptCommand; + // create the configuration file that is going to be sent to engine NSDictionary *gameDictionary = [NSDictionary dictionaryWithObjectsAndKeys: self.mapConfigViewController.seedCommand,@"seed_command", @@ -220,10 +224,10 @@ self.mapConfigViewController.mazeSizeCommand,@"mazesize_command", self.mapConfigViewController.themeCommand,@"theme_command", self.mapConfigViewController.staticMapCommand,@"staticmap_command", - self.mapConfigViewController.missionCommand,@"mission_command", self.teamConfigViewController.listOfSelectedTeams,@"teams_list", self.schemeWeaponConfigViewController.selectedScheme,@"scheme", self.schemeWeaponConfigViewController.selectedWeapon,@"weapon", + script,@"mission_command", nil]; GameInterfaceBridge *bridge = [[GameInterfaceBridge alloc] initWithController:self]; diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.m --- a/project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.m Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.m Mon Aug 01 10:08:02 2011 +0400 @@ -84,6 +84,9 @@ case 30: //alternateSwitch [settings setObject:[NSNumber numberWithBool:theSwitch.on] forKey:@"alternate"]; break; + case 90: //synched weapons/scheme + [settings setObject:[NSNumber numberWithBool:theSwitch.on] forKey:@"sync_ws"]; + break; case 70: //enhanced graphics [settings setObject:[NSNumber numberWithBool:theSwitch.on] forKey:@"enhanced"]; break; @@ -117,16 +120,13 @@ -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger )section { switch (section) { case 0: // user and pass - return 1; // set 2 here for the password field + return 1; // set 2 here to show the password field break; case 1: // audio return 2; break; - case 2: // other stuff - if (IS_IPAD() == YES) - return 4; - else - return 3; + case 2: // other options + return 5; break; default: DLog(@"Nope"); @@ -225,6 +225,7 @@ } switchContent = (UISwitch *)cell.accessoryView; + cell.detailTextLabel.adjustsFontSizeToFitWidth = YES; switch (row) { case 0: cell.textLabel.text = NSLocalizedString(@"Alternate Damage", @""); @@ -233,22 +234,34 @@ switchContent.tag = 30; break; case 1: - cell.textLabel.text = NSLocalizedString(@"Enanched Graphics Mode", @""); - cell.detailTextLabel.text = NSLocalizedString(@"The game will use more memory so it could crash!", @""); - switchContent.on = [[settings objectForKey:@"enhanced"] boolValue]; - switchContent.tag = 70; + cell.textLabel.text = NSLocalizedString(@"Sync Schemes and Weapons", @""); + cell.detailTextLabel.text = NSLocalizedString(@"Choosing a Scheme will select its associated Weapon", @""); + switchContent.on = [[settings objectForKey:@"sync_ws"] boolValue]; + switchContent.tag = 90; break; case 2: - cell.textLabel.text = NSLocalizedString(@"Multitasking Enabled", @""); + cell.textLabel.text = NSLocalizedString(@"Multitasking", @""); cell.detailTextLabel.text = NSLocalizedString(@"Disable it in case of issues when returing in game", @""); switchContent.on = [[settings objectForKey:@"multitasking"] boolValue]; switchContent.tag = 80; break; case 3: + cell.textLabel.text = NSLocalizedString(@"Enanched Graphics", @""); + cell.detailTextLabel.text = NSLocalizedString(@"Beware that the game will consume more memory", @""); + switchContent.on = [[settings objectForKey:@"enhanced"] boolValue]; + switchContent.tag = 70; + // prevent the oldest devices to even think about enabling it + if (IS_NOT_POWERFUL(getModelType())) + switchContent.enabled = NO; + break; + case 4: cell.textLabel.text = NSLocalizedString(@"Classic Ammo Menu", @""); cell.detailTextLabel.text = NSLocalizedString(@"Select which style of ammo menu you prefer",@""); switchContent.on = [[settings objectForKey:@"classic_menu"] boolValue]; switchContent.tag = 60; + // remove this when classic ammomenu works on iphone as well + if (IS_IPAD() == NO) + switchContent.enabled = NO; break; default: DLog(@"Nope"); diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.m --- a/project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.m Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.m Mon Aug 01 10:08:02 2011 +0400 @@ -25,7 +25,6 @@ #import "CommodityFunctions.h" #import "MainMenuViewController.h" #import "AVFoundation/AVAudioPlayer.h" -#import "Appirater.h" #include @@ -97,7 +96,6 @@ // override the direct execution of SDL_main to allow us to implement our own frontend -(void) postFinishLaunch { [[UIApplication sharedApplication] setStatusBarHidden:YES]; - [Appirater appLaunched]; self.uiwindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Classes/InGameMenuViewController.m --- a/project_files/HedgewarsMobile/Classes/InGameMenuViewController.m Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Classes/InGameMenuViewController.m Mon Aug 01 10:08:02 2011 +0400 @@ -257,7 +257,8 @@ image = [[UIImage alloc] initWithCGImage:imageRef]; CGImageRelease(imageRef); - UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), (void *)alert); // add callback for finish saving + // add callback for cleaning memory and removing alert + UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), (void *)alert); } diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Classes/MainMenuViewController.m --- a/project_files/HedgewarsMobile/Classes/MainMenuViewController.m Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Classes/MainMenuViewController.m Mon Aug 01 10:08:02 2011 +0400 @@ -27,6 +27,7 @@ #import "AboutViewController.h" #import "SavedGamesViewController.h" #import "RestoreViewController.h" +#import "Appirater.h" #import "ServerSetup.h" @implementation MainMenuViewController @@ -72,7 +73,7 @@ [[NSFileManager defaultManager] removeItemAtPath:SCHEMES_DIRECTORY() error:NULL]; NSString *baseSchemesDir = [[NSString alloc] initWithFormat:@"%@/Settings/Schemes/",resourcesDir]; [[NSFileManager defaultManager] copyItemAtPath:baseSchemesDir toPath:SCHEMES_DIRECTORY() error:NULL]; - + [baseSchemesDir release]; // WEAPONS - always overwrite if ([[NSFileManager defaultManager] fileExistsAtPath:WEAPONS_DIRECTORY()] == NO) @@ -101,31 +102,40 @@ NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; NSString *trackingVersion = [userDefaults stringForKey:@"HedgeVersion"]; + if ([[userDefaults objectForKey:@"music"] boolValue]) + [HedgewarsAppDelegate playBackgroundMusic]; + if (trackingVersion == nil || [trackingVersion isEqualToString:version] == NO) { + // remove any reminder of previous games as saves are going to be wiped out + [userDefaults setObject:@"" forKey:@"savedGamePath"]; + // update the tracking version with the new one [userDefaults setObject:version forKey:@"HedgeVersion"]; + [userDefaults synchronize]; [self createNecessaryFiles]; } - if ([[userDefaults objectForKey:@"music"] boolValue]) - [HedgewarsAppDelegate playBackgroundMusic]; - - NSString *saveString = [[NSUserDefaults standardUserDefaults] objectForKey:@"savedGamePath"]; + // prompt for restoring any previous game + NSString *saveString = [userDefaults objectForKey:@"savedGamePath"]; if (saveString != nil && [saveString isEqualToString:@""] == NO) { if (self.restoreViewController == nil) { - NSString *xibName = [@"RestoreViewController-" stringByAppendingString:(IS_IPAD() ? @"iPad" : @"iPhone")]; + NSString *xibName = [@"RestoreViewController-" stringByAppendingString:(IS_IPAD() ? @"iPad" : @"iPhone")]; RestoreViewController *restored = [[RestoreViewController alloc] initWithNibName:xibName bundle:nil]; if ([restored respondsToSelector:@selector(setModalPresentationStyle:)]) restored.modalPresentationStyle = UIModalPresentationFormSheet; self.restoreViewController = restored; [restored release]; } - [self performSelector:@selector(presentModalViewController:animated:) withObject:self.restoreViewController afterDelay:0.35]; + [self performSelector:@selector(presentModalViewController:animated:) withObject:self.restoreViewController afterDelay:0.3]; + } else { + // let's not prompt for rating when app crashed >_> + [Appirater appLaunched]; } + /* ServerSetup *setup = [[ServerSetup alloc] init]; - if ([setup isNetworkReachable]) { + if (isNetworkReachable()) { DLog(@"network is reachable"); [NSThread detachNewThreadSelector:@selector(serverProtocol) toTarget:setup @@ -147,11 +157,8 @@ switch (button.tag) { case 0: if (nil == self.gameConfigViewController) { - if (IS_IPAD()) - xib = nil; - else - xib = @"GameConfigViewController"; - + xib = IS_IPAD() ? nil : @"GameConfigViewController"; + GameConfigViewController *gcvc = [[GameConfigViewController alloc] initWithNibName:xib bundle:nil]; gcvc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; self.gameConfigViewController = gcvc; @@ -172,7 +179,10 @@ break; case 3: #ifdef DEBUG - debugStr = [[NSString alloc] initWithContentsOfFile:DEBUG_FILE()]; + if ([[NSFileManager defaultManager] fileExistsAtPath:DEBUG_FILE()]) + debugStr = [[NSString alloc] initWithContentsOfFile:DEBUG_FILE()]; + else + debugStr = [[NSString alloc] initWithString:@"Here be log"]; UITextView *scroll = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.height, self.view.frame.size.width)]; scroll.text = debugStr; [debugStr release]; @@ -186,6 +196,7 @@ [self.view addSubview:scroll]; [scroll release]; #else + debugStr = debugStr; // prevent compiler warning if (nil == self.aboutViewController) { AboutViewController *about = [[AboutViewController alloc] initWithNibName:@"AboutViewController" bundle:nil]; about.modalTransitionStyle = UIModalTransitionStyleCoverVertical; diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Classes/MapConfigViewController.m --- a/project_files/HedgewarsMobile/Classes/MapConfigViewController.m Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Classes/MapConfigViewController.m Mon Aug 01 10:08:02 2011 +0400 @@ -387,6 +387,7 @@ 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 diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.h --- a/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.h Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.h Mon Aug 01 10:08:02 2011 +0400 @@ -25,24 +25,33 @@ @interface SchemeWeaponConfigViewController : UITableViewController { NSArray *listOfSchemes; NSArray *listOfWeapons; + NSArray *listOfScripts; NSIndexPath *lastIndexPath_sc; NSIndexPath *lastIndexPath_we; + NSIndexPath *lastIndexPath_lu; NSString *selectedScheme; NSString *selectedWeapon; + NSString *selectedScript; + NSString *scriptCommand; - UISwitch *syncSwitch; + UISegmentedControl *topControl; BOOL hideSections; } @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) UISwitch *syncSwitch; +@property (nonatomic,retain) NSString *selectedScript; +@property (nonatomic,retain) NSString *scriptCommand; +@property (nonatomic,retain) UISegmentedControl *topControl; +@property (assign) BOOL hideSections; -(void) fillSections; -(void) emptySections; diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m --- a/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m Mon Aug 01 10:08:02 2011 +0400 @@ -25,7 +25,8 @@ #define LABEL_TAG 57423 @implementation SchemeWeaponConfigViewController -@synthesize listOfSchemes, listOfWeapons, lastIndexPath_sc, lastIndexPath_we, selectedScheme, selectedWeapon, syncSwitch; +@synthesize listOfSchemes, listOfWeapons, listOfScripts, lastIndexPath_sc, lastIndexPath_we, lastIndexPath_lu, + selectedScheme, selectedWeapon, selectedScript, scriptCommand, topControl, hideSections; -(BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return rotationManager(interfaceOrientation); @@ -41,6 +42,8 @@ self.selectedScheme = nil; self.selectedWeapon = nil; + self.selectedScript = nil; + self.scriptCommand = nil; if ([self.tableView respondsToSelector:@selector(setBackgroundView:)]) { if (IS_IPAD()) @@ -74,7 +77,12 @@ if (self.selectedWeapon == nil && [listOfWeapons containsObject:@"Default.plist"]) self.selectedWeapon = @"Default.plist"; - + + contentsOfDir = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:SCRIPTS_DIRECTORY() error:NULL]; + self.listOfScripts = contentsOfDir; + self.selectedScript = @"Normal.plist"; + self.scriptCommand = @""; + [self.tableView reloadData]; } @@ -85,30 +93,30 @@ if (hideSections) return 0; else - return 3; + return 1; } -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - if (section == 0) + if (self.topControl.selectedSegmentIndex == 0) return [self.listOfSchemes count]; - else if (section == 1) + else if (self.topControl.selectedSegmentIndex == 1) return [self.listOfWeapons count]; else - return 1; + return [self.listOfScripts count]; } // Customize the appearance of table view cells. -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; + NSInteger index = self.topControl.selectedSegmentIndex; NSInteger row = [indexPath row]; - NSInteger section = [indexPath section]; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; cell.accessoryView = nil; - if (0 == section) { + if (0 == index) { cell.textLabel.text = [[self.listOfSchemes objectAtIndex:row] stringByDeletingPathExtension]; NSString *str = [NSString stringWithFormat:@"%@/%@",SCHEMES_DIRECTORY(),[self.listOfSchemes objectAtIndex:row]]; NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:str]; @@ -120,7 +128,7 @@ [checkbox release]; self.lastIndexPath_sc = indexPath; } - } else if (1 == section) { + } else if (1 == index) { cell.textLabel.text = [[self.listOfWeapons objectAtIndex:row] stringByDeletingPathExtension]; NSString *str = [NSString stringWithFormat:@"%@/%@",WEAPONS_DIRECTORY(),[self.listOfWeapons objectAtIndex:row]]; NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:str]; @@ -133,44 +141,47 @@ self.lastIndexPath_we = indexPath; } } else { - if (self.syncSwitch == nil) { - UISwitch *theSwitch = [[UISwitch alloc] init]; - [theSwitch setOn:YES]; - self.syncSwitch = theSwitch; - [theSwitch release]; + cell.textLabel.text = [[self.listOfScripts objectAtIndex:row] stringByDeletingPathExtension]; + NSString *str = [NSString stringWithFormat:@"%@/%@",SCRIPTS_DIRECTORY(),[self.listOfScripts objectAtIndex:row]]; + NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:str]; + cell.detailTextLabel.text = [dict objectForKey:@"description"]; + [dict release]; + 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; } - cell.textLabel.text = IS_IPAD() ? NSLocalizedString(@"Sync Schemes",@"") : NSLocalizedString(@"Sync Schemes and Weapons",@""); - cell.detailTextLabel.text = IS_IPAD() ? nil : NSLocalizedString(@"Choosing a Scheme will select its associated Weapon",@""); - cell.detailTextLabel.adjustsFontSizeToFitWidth = YES; - cell.accessoryView = self.syncSwitch; } cell.backgroundColor = UICOLOR_HW_ALMOSTBLACK; cell.textLabel.textColor = UICOLOR_HW_YELLOW_TEXT; cell.detailTextLabel.textColor = [UIColor whiteColor]; + cell.textLabel.adjustsFontSizeToFitWidth = YES; + cell.detailTextLabel.adjustsFontSizeToFitWidth = YES; return cell; } -(CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { - return 40.0; + return 50.0; } -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { - CGRect frame = CGRectMake(0, 0, self.view.frame.size.width * 80/100, 30); - NSString *text; - if (section == 0) - text = NSLocalizedString(@"Schemes",@""); - else if (section == 1) - text = NSLocalizedString(@"Weapons",@""); - else - text = NSLocalizedString(@"Options",@""); - - UILabel *theLabel = createBlueLabel(text, frame); - theLabel.center = CGPointMake(self.view.frame.size.width/2, 20); + if (self.topControl == nil) { + NSArray *array = [[NSArray alloc] initWithObjects:NSLocalizedString(@"Scheme",@""),NSLocalizedString(@"Weapon",@""), + NSLocalizedString(@"Style",@""),nil]; + self.topControl = [[UISegmentedControl alloc] initWithItems:array]; + [array release]; + [self.topControl addTarget:self.tableView action:@selector(reloadData) forControlEvents:UIControlEventValueChanged]; + self.topControl.segmentedControlStyle = UISegmentedControlStyleBar; + self.topControl.frame = CGRectMake(0, 0, self.view.frame.size.width * 80/100, 30); + self.topControl.center = CGPointMake(self.view.frame.size.width/2, 24); + self.topControl.tintColor = [UIColor lightGrayColor]; + self.topControl.selectedSegmentIndex = 0; + } UIView *theView = [[[UIView alloc] init] autorelease]; - [theView addSubview:theLabel]; - [theLabel release]; + [theView addSubview:self.topControl]; return theView; } @@ -178,10 +189,13 @@ #pragma mark Table view delegate -(void) tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSIndexPath *lastIndexPath; - if ([indexPath section] == 0) + NSInteger index = self.topControl.selectedSegmentIndex; + if (index == 0) lastIndexPath = self.lastIndexPath_sc; + else if (index == 1) + lastIndexPath = self.lastIndexPath_we; else - lastIndexPath = self.lastIndexPath_we; + lastIndexPath = self.lastIndexPath_lu; int newRow = [indexPath row]; int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1; @@ -195,10 +209,12 @@ UITableViewCell *oldCell = [aTableView cellForRowAtIndexPath:lastIndexPath]; oldCell.accessoryView = nil; - if ([indexPath section] == 0) { + if (index == 0) { self.lastIndexPath_sc = indexPath; self.selectedScheme = [self.listOfSchemes objectAtIndex:newRow]; - if (self.syncSwitch.on) { + + NSUserDefaults *settings = [NSUserDefaults standardUserDefaults]; + if ([[settings objectForKey:@"sync_ws"] boolValue]) { for (NSString *str in self.listOfWeapons) { if ([str isEqualToString:self.selectedScheme]) { int index = [self.listOfSchemes indexOfObject:str]; @@ -209,9 +225,36 @@ } } } - } else { + } else if (index == 1) { self.lastIndexPath_we = indexPath; self.selectedWeapon = [self.listOfWeapons objectAtIndex:newRow]; + } else { + self.lastIndexPath_lu = indexPath; + self.selectedScript = [self.listOfScripts objectAtIndex:newRow]; + + NSString *path = [[NSString alloc] initWithFormat:@"%@/%@",SCRIPTS_DIRECTORY(),selectedScript]; + NSDictionary *scriptDict = [[NSDictionary alloc] initWithContentsOfFile:path]; + [path release]; + self.scriptCommand = [scriptDict objectForKey:@"command"]; + NSString *scheme = [scriptDict objectForKey:@"scheme"]; + if ([scheme isEqualToString:@""]) { + self.selectedScheme = @"Default.plist"; + [self.topControl setEnabled:NO forSegmentAtIndex:0]; + } else { + self.selectedScheme = scheme; + [self.topControl setEnabled:YES forSegmentAtIndex:0]; + } + + NSString *weapon = [scriptDict objectForKey:@"weapon"]; + if ([weapon isEqualToString:@""]) { + self.selectedWeapon = @"Default.plist"; + [self.topControl setEnabled:NO forSegmentAtIndex:1]; + } else { + self.selectedWeapon = weapon; + [self.topControl setEnabled:YES forSegmentAtIndex:1]; + } + + [scriptDict release]; } [aTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; @@ -224,11 +267,12 @@ hideSections = NO; NSRange range; range.location = 0; - range.length = 3; + range.length = 1; NSIndexSet *sections = [NSIndexSet indexSetWithIndexesInRange:range]; [self.tableView insertSections:sections withRowAnimation:UITableViewRowAnimationFade]; self.selectedScheme = @"Default.plist"; self.selectedWeapon = @"Default.plist"; + self.selectedScript = @"Normal.plist"; self.tableView.scrollEnabled = YES; @@ -240,11 +284,12 @@ hideSections = YES; NSRange range; range.location = 0; - range.length = 3; + range.length = 1; NSIndexSet *sections = [NSIndexSet indexSetWithIndexesInRange:range]; [self.tableView deleteSections:sections withRowAnimation:UITableViewRowAnimationFade]; self.selectedScheme = @"Default.plist"; self.selectedWeapon = @"Default.plist"; + self.selectedScript = @"Normal.plist"; self.tableView.scrollEnabled = NO; @@ -264,9 +309,11 @@ if ([[HedgewarsAppDelegate sharedAppDelegate] isInGame]) { self.lastIndexPath_sc = nil; self.lastIndexPath_we = nil; + self.lastIndexPath_lu = nil; self.listOfSchemes = nil; self.listOfWeapons = nil; - self.syncSwitch = nil; + self.listOfScripts = nil; + self.topControl = nil; MSG_MEMCLEAN(); } [super didReceiveMemoryWarning]; @@ -275,11 +322,15 @@ -(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.syncSwitch = nil; + self.selectedScript = nil; + self.scriptCommand = nil; + self.topControl = nil; MSG_DIDUNLOAD(); [super viewDidUnload]; } @@ -288,11 +339,15 @@ -(void) dealloc { releaseAndNil(listOfSchemes); releaseAndNil(listOfWeapons); + releaseAndNil(listOfScripts); releaseAndNil(lastIndexPath_sc); releaseAndNil(lastIndexPath_we); + releaseAndNil(lastIndexPath_lu); releaseAndNil(selectedScheme); releaseAndNil(selectedWeapon); - releaseAndNil(syncSwitch); + releaseAndNil(selectedScript); + releaseAndNil(scriptCommand); + releaseAndNil(topControl); [super dealloc]; } diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Classes/ServerSetup.h --- a/project_files/HedgewarsMobile/Classes/ServerSetup.h Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Classes/ServerSetup.h Mon Aug 01 10:08:02 2011 +0400 @@ -30,6 +30,4 @@ @property (nonatomic, retain) NSDictionary *systemSettings; --(BOOL) isNetworkReachable; - @end diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Classes/ServerSetup.m --- a/project_files/HedgewarsMobile/Classes/ServerSetup.m Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Classes/ServerSetup.m Mon Aug 01 10:08:02 2011 +0400 @@ -22,8 +22,6 @@ #import "ServerSetup.h" #import "PascalImports.h" #import "CommodityFunctions.h" -#import -#import #import "hwconsts.h" #define BUFFER_SIZE 256 @@ -43,39 +41,6 @@ [super dealloc]; } -// reusing appirater method --(BOOL) isNetworkReachable { - // Create zero addy - struct sockaddr_in zeroAddress; - bzero(&zeroAddress, sizeof(zeroAddress)); - zeroAddress.sin_len = sizeof(zeroAddress); - zeroAddress.sin_family = AF_INET; - - // Recover reachability flags - SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress); - SCNetworkReachabilityFlags flags; - - BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags); - CFRelease(defaultRouteReachability); - - if (!didRetrieveFlags) { - NSLog(@"Error. Could not recover network reachability flags"); - return NO; - } - - BOOL isReachable = flags & kSCNetworkFlagsReachable; - BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired; - BOOL nonWiFi = flags & kSCNetworkReachabilityFlagsTransientConnection; - - NSURL *testURL = [NSURL URLWithString:@"http://www.apple.com/"]; - NSURLRequest *testRequest = [NSURLRequest requestWithURL:testURL - cachePolicy:NSURLRequestReloadIgnoringLocalCacheData - timeoutInterval:20.0]; - NSURLConnection *testConnection = [[NSURLConnection alloc] initWithRequest:testRequest delegate:self]; - - return ((isReachable && !needsConnection) || nonWiFi) ? (testConnection ? YES : NO) : NO; -} - -(int) sendToServer:(NSString *)command { NSString *message = [[NSString alloc] initWithFormat:@"%@\n\n",command]; int result = SDLNet_TCP_Send(sd, [message UTF8String], [message length]); diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj --- a/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj Mon Aug 01 10:08:02 2011 +0400 @@ -1370,7 +1370,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "#copy new stuff over old stuff\nrm -rf ${PROJECT_DIR}/Data\n\n#create config.inc\necho \"Updating config file...\"\nPROTO=`cat ${PROJECT_DIR}/../../CMakeLists.txt | grep HEDGEWARS_PROTO_VER | cut -d ' ' -f 3`\nMAJN=`cat ${PROJECT_DIR}/../../CMakeLists.txt | grep CPACK_PACKAGE_VERSION_MAJOR | xargs | cut -d ' ' -f 3`\nMINN=`cat ${PROJECT_DIR}/../../CMakeLists.txt | grep CPACK_PACKAGE_VERSION_MINOR | xargs | cut -d ' ' -f 3`\nPATN=`cat ${PROJECT_DIR}/../../CMakeLists.txt | grep CPACK_PACKAGE_VERSION_PATCH | xargs | cut -d ' ' -f 3 | cut -d '$' -f 1`\nREVN=-`/usr/local/bin/hg id -n ${PROJECT_DIR}/../../`\necho \"const cNetProtoVersion = $PROTO; const cVersionString = '${MAJN}.${MINN}.${PATN}${REVN}'; const cLuaLibrary = '';\" > ${PROJECT_DIR}/../../hedgewars/config.inc\n\necho \"Copying Data...\"\ncp -R ${PROJECT_DIR}/../../share/hedgewars/Data ${PROJECT_DIR}/Data\n\n#copy some files from QTfrontend/res\necho \"Fetching additional graphics from QTfrontend/res...\"\nmkdir ${PROJECT_DIR}/Data/Graphics/Btn\ncp ${PROJECT_DIR}/../../QTfrontend/res/btn*.png ${PROJECT_DIR}/Data/Graphics/Btn/\ncp ${PROJECT_DIR}/../../QTfrontend/res/icon*.png ${PROJECT_DIR}/Data/Graphics/Btn/\ncp ${PROJECT_DIR}/../../QTfrontend/res/StatsMedal*.png ${PROJECT_DIR}/Data/Graphics/Btn/\ncp ${PROJECT_DIR}/../../QTfrontend/res/StatsR.png ${PROJECT_DIR}/Data/Graphics/Btn/StatsStar.png\ncp ${PROJECT_DIR}/../../QTfrontend/res/ammopic.png ${PROJECT_DIR}/Data/Graphics/Btn/iconAmmo.png\ncp -R ${PROJECT_DIR}/../../QTfrontend/res/botlevels ${PROJECT_DIR}/Data/Graphics/Hedgehog/botlevels/\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 *.svgz -delete\nfind ${PROJECT_DIR}/Data -name *.sifz -delete\nfind ${PROJECT_DIR}/Data -name *.xcf -delete\nfind ${PROJECT_DIR}/Data -name *.orig -delete\n\n#delete desktop frontend translation\nrm -rf ${PROJECT_DIR}/Data/Locale/hedgewars_*\n\n#delete dummy maps and hats, misc stuff\nrm -rf ${PROJECT_DIR}/Data/Maps/{test*,Ruler}\nrm -rf ${PROJECT_DIR}/Data/Graphics/Hats/{TeamCap,TeamHeadband,TeamHair}\nrm -rf ${PROJECT_DIR}/Data/misc/\n\n#delete forbidden maps\nrm -rf ${PROJECT_DIR}/Data/Maps/{Cheese,FlightJoust}\n\n#delete useless fonts\nrm -rf ${PROJECT_DIR}/Data/Fonts/{wqy-zenhei.ttc,DroidSansFallback.ttf}\n\n#delete all names, reserved hats\nrm -rf ${PROJECT_DIR}/Data/Names/\nrm -rf ${PROJECT_DIR}/Data/Graphics/Hats/Reserved/\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#copy mono audio\ncp -R ${PROJECT_DIR}/Audio/* ${PROJECT_DIR}/Data/\n#remove unused voices\nfor i in {Amazing,Brilliant,Bugger,Bungee,Cutitout,Drat,Excellent,Fire,FlawlessPossibility,Gonnagetyou,Grenade,Hmm,Justyouwait,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/\nmv ${PROJECT_DIR}/Data/Maps/{Basketball,Knockball,TrophyRace,CTF_Blizzard,Control} ${PROJECT_DIR}/Data/Missions/Maps/\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\nawk '{if ($1 == 1500) $1=40; print $0}' < ${PROJECT_DIR}/Data/Themes/City/theme.cfg > /tmp/tempfile\nmv /tmp/tempfile ${PROJECT_DIR}/Data/Themes/City/theme.cfg\n\n#remove WIP themes (check they are not used in Maps)\nrm -rf ${PROJECT_DIR}/Data/Themes/{Beach,Digital}\n\necho \"Done\""; + shellScript = "#copy new stuff over old stuff\nrm -rf ${PROJECT_DIR}/Data\n\n#create config.inc\necho \"Updating config file...\"\nPROTO=`cat ${PROJECT_DIR}/../../CMakeLists.txt | grep HEDGEWARS_PROTO_VER | cut -d ' ' -f 2 | cut -d ')' -f 1`\nMAJN=`cat ${PROJECT_DIR}/../../CMakeLists.txt | grep CPACK_PACKAGE_VERSION_MAJOR | xargs | cut -d ' ' -f 2 |cut -d ')' -f 1`\nMINN=`cat ${PROJECT_DIR}/../../CMakeLists.txt | grep CPACK_PACKAGE_VERSION_MINOR | xargs | cut -d ' ' -f 2 |cut -d ')' -f 1`\nPATN=`cat ${PROJECT_DIR}/../../CMakeLists.txt | grep CPACK_PACKAGE_VERSION_PATCH | xargs | cut -d ' ' -f 2 | cut -d '$' -f 1`\nREVN=-`/usr/local/bin/hg id -n ${PROJECT_DIR}/../../`\necho \"const cNetProtoVersion = $PROTO; const cVersionString = '${MAJN}.${MINN}.${PATN}${REVN}'; const cLuaLibrary = '';\" > ${PROJECT_DIR}/../../hedgewars/config.inc\n\necho \"Copying Data...\"\ncp -R ${PROJECT_DIR}/../../share/hedgewars/Data ${PROJECT_DIR}/Data\n\n#copy some files from QTfrontend/res\necho \"Fetching additional graphics from QTfrontend/res...\"\nmkdir ${PROJECT_DIR}/Data/Graphics/Btn\ncp ${PROJECT_DIR}/../../QTfrontend/res/btn*.png ${PROJECT_DIR}/Data/Graphics/Btn/\ncp ${PROJECT_DIR}/../../QTfrontend/res/icon*.png ${PROJECT_DIR}/Data/Graphics/Btn/\ncp ${PROJECT_DIR}/../../QTfrontend/res/StatsMedal*.png ${PROJECT_DIR}/Data/Graphics/Btn/\ncp ${PROJECT_DIR}/../../QTfrontend/res/StatsR.png ${PROJECT_DIR}/Data/Graphics/Btn/StatsStar.png\ncp ${PROJECT_DIR}/../../QTfrontend/res/ammopic.png ${PROJECT_DIR}/Data/Graphics/Btn/iconAmmo.png\ncp -R ${PROJECT_DIR}/../../QTfrontend/res/botlevels ${PROJECT_DIR}/Data/Graphics/Hedgehog/botlevels/\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 *.svgz -delete\nfind ${PROJECT_DIR}/Data -name *.sifz -delete\nfind ${PROJECT_DIR}/Data -name *.xcf -delete\nfind ${PROJECT_DIR}/Data -name *.orig -delete\n\n#delete desktop frontend translation\nrm -rf ${PROJECT_DIR}/Data/Locale/hedgewars_*\n\n#delete dummy maps and hats, misc stuff\nrm -rf ${PROJECT_DIR}/Data/Maps/{test*,Ruler}\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/{Cheese,FlightJoust}\nrm -rf ${PROJECT_DIR}/Data/Themes/{Beach,Digital}\n\n#delete unused fonts\nrm -rf ${PROJECT_DIR}/Data/Fonts/{wqy-zenhei.ttc,DroidSansFallback.ttf}\n\n#delete all names, reserved hats\nrm -rf ${PROJECT_DIR}/Data/Names/\nrm -rf ${PROJECT_DIR}/Data/Graphics/Hats/Reserved/\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#copy mono audio\ncp -R ${PROJECT_DIR}/Audio/* ${PROJECT_DIR}/Data/\n#remove unused voices\nfor i in {Amazing,Brilliant,Bugger,Bungee,Cutitout,Drat,Excellent,Fire,FlawlessPossibility,Gonnagetyou,Grenade,Hmm,Justyouwait,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/\nmv ${PROJECT_DIR}/Data/Maps/{Basketball,Knockball,TrophyRace,CTF_Blizzard,Control} ${PROJECT_DIR}/Data/Missions/Maps/\n#workaround for missing map in CTF_Blizzard\nln -s ../../../Maps/Blizzard/map.png ${PROJECT_DIR}/Data/Missions/Maps/CTF_Blizzard/map.png\n#remove cfg files since we have plists\nfind ${PROJECT_DIR}/Data/Scripts -name *.cfg -delete\n\n#reduce the number of flakes for City\nawk '{if ($1 == 1500) $1=40; print $0}' < ${PROJECT_DIR}/Data/Themes/City/theme.cfg > /tmp/tempfile\nmv /tmp/tempfile ${PROJECT_DIR}/Data/Themes/City/theme.cfg\n\necho \"Done\""; showEnvVarsInLog = 0; }; 9283011B0F10CB2D00CC5A3C /* Build libfpc.a */ = { @@ -1522,49 +1522,24 @@ 1D6058940D05DD3E006BFB54 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)"; - COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_GENERATE_TEST_COVERAGE_FILES = YES; GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; - GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = Hedgewars_Prefix.pch; INFOPLIST_FILE = Info.plist; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)\"", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - "-lgcov", - ); PRODUCT_NAME = Hedgewars; - TARGETED_DEVICE_FAMILY = "$(inherited)"; }; name = Debug; }; 1D6058950D05DD3E006BFB54 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - CODE_SIGN_ENTITLEMENTS = "Entitlements-Development.plist"; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = Hedgewars_Prefix.pch; INFOPLIST_FILE = Info.plist; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)\"", - ); PRODUCT_NAME = Hedgewars; - PROVISIONING_PROFILE = ""; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; - TARGETED_DEVICE_FAMILY = "$(inherited)"; }; name = Release; }; @@ -1584,7 +1559,7 @@ GCC_C_LANGUAGE_STANDARD = c99; GCC_DEBUGGING_SYMBOLS = default; GCC_FAST_MATH = YES; - GCC_OPTIMIZATION_LEVEL = 2; + GCC_OPTIMIZATION_LEVEL = s; GCC_PREPROCESSOR_DEFINITIONS = ""; GCC_STRICT_ALIASING = YES; GCC_THUMB_SUPPORT = NO; @@ -1599,6 +1574,7 @@ "\"$(SRCROOT)/../../../Library/SDL_mixer/\"", ); IPHONEOS_DEPLOYMENT_TARGET = 3.1; + LLVM_LTO = NO; ONLY_ACTIVE_ARCH = NO; OTHER_CODE_SIGN_FLAGS = ""; OTHER_LDFLAGS = ( @@ -1618,30 +1594,17 @@ 61022D7D12305A2800B08935 /* Distro AppStore */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - CODE_SIGN_ENTITLEMENTS = "Entitlements-Distribution.plist"; - CODE_SIGN_IDENTITY = "iPhone Distribution"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; COPY_PHASE_STRIP = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = Hedgewars_Prefix.pch; INFOPLIST_FILE = Info.plist; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)\"", - ); PRODUCT_NAME = Hedgewars; - PROVISIONING_PROFILE = ""; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; - TARGETED_DEVICE_FAMILY = "$(inherited)"; }; name = "Distro AppStore"; }; 61022D7E12305A2800B08935 /* Distro AppStore */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_ENABLE_FIX_AND_CONTINUE = NO; @@ -1674,12 +1637,12 @@ FPC_COMPILER_BINARY_DIR = /usr/local/lib/fpc/2.5.1; FPC_MAIN_FILE = "$(PROJECT_DIR)/../../hedgewars/hwLibrary.pas"; FPC_RTL_UNITS_BASE = /usr/local/lib/fpc; - FPC_SPECIFIC_OPTIONS = "-dDEBUGFILE -Ci- -Cr- -Co- -O-2 -Xs -Cfvfpv2"; + FPC_SPECIFIC_OPTIONS = "-dDEBUGFILE -O- -g -gl -gw2 -gt -ghttt -Xs- -Cfvfpv2"; FPC_UNITS_PATH = "-Fu\"$(PROJECT_DIR)\""; GCC_C_LANGUAGE_STANDARD = c99; - GCC_DEBUGGING_SYMBOLS = default; + GCC_DEBUGGING_SYMBOLS = full; GCC_FAST_MATH = YES; - GCC_OPTIMIZATION_LEVEL = 2; + GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = DEBUG; GCC_STRICT_ALIASING = YES; GCC_THUMB_SUPPORT = NO; @@ -1712,28 +1675,17 @@ 6137064C117B1CB3004EE44A /* Distro Adhoc */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_UNIVERSAL_IPHONE_OS)"; - CODE_SIGN_ENTITLEMENTS = "Entitlements-Distribution.plist"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution"; COPY_PHASE_STRIP = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = Hedgewars_Prefix.pch; INFOPLIST_FILE = Info.plist; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)\"", - ); PRODUCT_NAME = Hedgewars; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; - TARGETED_DEVICE_FAMILY = "$(inherited)"; }; name = "Distro Adhoc"; }; 6137064D117B1CB3004EE44A /* Distro Adhoc */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_ENABLE_FIX_AND_CONTINUE = NO; @@ -1778,7 +1730,6 @@ 928301180F10CAFD00CC5A3C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_OPTIMIZATION_LEVEL = 0; @@ -1790,7 +1741,6 @@ 928301190F10CAFD00CC5A3C /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_ENABLE_FIX_AND_CONTINUE = NO; @@ -1816,7 +1766,7 @@ FPC_UNITS_PATH = "-Fu\"$(PROJECT_DIR)\""; GCC_C_LANGUAGE_STANDARD = c99; GCC_DEBUGGING_SYMBOLS = full; - GCC_FAST_MATH = NO; + GCC_FAST_MATH = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = DEBUG; GCC_STRICT_ALIASING = YES; @@ -1863,7 +1813,7 @@ GCC_C_LANGUAGE_STANDARD = c99; GCC_DEBUGGING_SYMBOLS = default; GCC_FAST_MATH = YES; - GCC_OPTIMIZATION_LEVEL = 2; + GCC_OPTIMIZATION_LEVEL = s; GCC_PREPROCESSOR_DEFINITIONS = DEBUG; GCC_STRICT_ALIASING = YES; GCC_THUMB_SUPPORT = NO; @@ -1878,6 +1828,7 @@ "\"$(SRCROOT)/../../../Library/SDL_mixer/\"", ); IPHONEOS_DEPLOYMENT_TARGET = 3.1; + LLVM_LTO = NO; ONLY_ACTIVE_ARCH = NO; OTHER_LDFLAGS = ( "-lz", diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Resources/GameConfigViewController.xib --- a/project_files/HedgewarsMobile/Resources/GameConfigViewController.xib Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Resources/GameConfigViewController.xib Mon Aug 01 10:08:02 2011 +0400 @@ -2,9 +2,9 @@ 1056 - 10H574 + 10K540 823 - 1038.35 + 1038.36 461.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -50,7 +50,7 @@ 292 - {{96, 8}, {269, 30}} + {{96, 8}, {270, 30}} NO 12345 @@ -94,8 +94,8 @@ - 2 - MC4yMzEzNzI1NjUgMCAwLjQ2Mjc0NTEzMDEAA + 1 + MC42IDAuNiAwLjYAA diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Resources/MapConfigViewController-iPad.xib --- a/project_files/HedgewarsMobile/Resources/MapConfigViewController-iPad.xib Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Resources/MapConfigViewController-iPad.xib Mon Aug 01 10:08:02 2011 +0400 @@ -2,9 +2,9 @@ 1056 - 10H574 + 10K540 823 - 1038.35 + 1038.36 461.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -12,7 +12,7 @@ YES - + YES @@ -58,7 +58,7 @@ 289 - {{725, 166}, {277, 30}} + {{724, 166}, {280, 30}} NO IBIPadFramework @@ -101,8 +101,8 @@ - 1 - MCAwIDAAA + 3 + MC42NjY2NjY2NjY3AA @@ -566,6 +566,7 @@ 57.IBPluginDependency 66.IBPluginDependency 7.IBPluginDependency + 7.IBViewBoundsToFrameTransform 70.IBPluginDependency 72.IBPluginDependency 75.IBPluginDependency @@ -585,6 +586,9 @@ com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABENUAAw0IAAA + com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Resources/MapConfigViewController-iPhone.xib --- a/project_files/HedgewarsMobile/Resources/MapConfigViewController-iPhone.xib Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Resources/MapConfigViewController-iPhone.xib Mon Aug 01 10:08:02 2011 +0400 @@ -2,9 +2,9 @@ 1056 - 10H574 + 10K540 823 - 1038.35 + 1038.36 461.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -57,7 +57,7 @@ 292 - {{13, 166}, {256, 30}} + {{9, 14}, {270, 30}} NO IBCocoaTouchFramework @@ -100,14 +100,14 @@ - 2 - MC4wMjM1Mjk0MTQwOSAwLjM3NjQ3MDYyNTQgMAA + 3 + MC42NjY2NjY2NjY3AA 292 - {{98, 240}, {149, 23}} + {{119, 207}, {149, 23}} NO IBCocoaTouchFramework @@ -119,7 +119,7 @@ 292 - {{13, 20}, {256, 128}} + {{16, 58}, {256, 128}} NO IBCocoaTouchFramework @@ -146,7 +146,7 @@ 292 - {{20, 221}, {48, 35}} + {{58, 221}, {48, 35}} NO YES @@ -154,6 +154,11 @@ NO IBCocoaTouchFramework ... + + Helvetica-Bold + 17 + 16 + 2 MC45NDkwMTk2NzA1IDAuNzY4NjI3NTI0NCAwAA @@ -166,7 +171,7 @@ 292 - {{88, 210}, {169, 29}} + {{109, 237}, {169, 29}} NO YES @@ -210,6 +215,31 @@ 10 10 + + + 292 + {{-9, 225}, {92, 27}} + + NO + YES + 7 + NO + IBCocoaTouchFramework + Max + + Helvetica-BoldOblique + 18 + 16 + + + 2 + MC45NDkwMTk2NzA1IDAuNzY4NjI3NTI0NCAwAA + + + 1 + 10 + 1 + {480, 276} @@ -358,10 +388,11 @@ - + - + + @@ -412,6 +443,11 @@ + + 36 + + + @@ -430,7 +466,10 @@ 25.IBViewBoundsToFrameTransform 35.IBPluginDependency 35.IBViewBoundsToFrameTransform + 36.IBPluginDependency + 36.IBViewBoundsToFrameTransform 7.IBPluginDependency + 7.IBViewBoundsToFrameTransform 8.IBPluginDependency 9.CustomClassName 9.IBPluginDependency @@ -440,11 +479,11 @@ YES MapConfigViewController UIResponder - {{507, 233}, {480, 320}} + {{790, 298}, {480, 320}} com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin - P4AAAL+AAABB6AAAw3kAAA + P4AAAL+AAABB+AAAw4QAAA com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -456,9 +495,16 @@ com.apple.InterfaceBuilder.IBCocoaTouchPlugin - P4AAAL+AAAAAAAAAw58AAA + P4AAAL+AAAAAAAAAw4kAAA com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBMAAAw2gAAA + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAABBUAAAwigAAA + com.apple.InterfaceBuilder.IBCocoaTouchPlugin MapPreviewButtonView com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -483,7 +529,7 @@ - 35 + 36 diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Resources/Settings/Schemes/Barrel Mayhem.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Barrel Mayhem.plist Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Barrel Mayhem.plist Mon Aug 01 10:08:02 2011 +0400 @@ -44,6 +44,7 @@ + diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Resources/Settings/Schemes/Clean Slate.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Clean Slate.plist Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Clean Slate.plist Mon Aug 01 10:08:02 2011 +0400 @@ -44,6 +44,7 @@ + diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Resources/Settings/Schemes/Default.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Default.plist Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Default.plist Mon Aug 01 10:08:02 2011 +0400 @@ -44,6 +44,7 @@ + diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Resources/Settings/Schemes/Fort Mode.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Fort Mode.plist Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Fort Mode.plist Mon Aug 01 10:08:02 2011 +0400 @@ -44,6 +44,7 @@ + diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Resources/Settings/Schemes/King Mode.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/King Mode.plist Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/King Mode.plist Mon Aug 01 10:08:02 2011 +0400 @@ -44,6 +44,7 @@ + diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Resources/Settings/Schemes/Minefield.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Minefield.plist Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Minefield.plist Mon Aug 01 10:08:02 2011 +0400 @@ -44,6 +44,7 @@ + diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Resources/Settings/Schemes/Pro Mode.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Pro Mode.plist Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Pro Mode.plist Mon Aug 01 10:08:02 2011 +0400 @@ -44,6 +44,7 @@ + diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Resources/Settings/Schemes/Shoppa.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Shoppa.plist Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Shoppa.plist Mon Aug 01 10:08:02 2011 +0400 @@ -40,6 +40,7 @@ + diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Resources/Settings/Schemes/Thinking with Portals.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Thinking with Portals.plist Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Thinking with Portals.plist Mon Aug 01 10:08:02 2011 +0400 @@ -30,9 +30,10 @@ + - + diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Resources/Settings/Schemes/Timeless.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Timeless.plist Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Timeless.plist Mon Aug 01 10:08:02 2011 +0400 @@ -35,7 +35,7 @@ - + @@ -44,6 +44,7 @@ + diff -r d080fb32d703 -r fef456439238 project_files/HedgewarsMobile/Resources/Settings/Schemes/Tunnel Hogs.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Tunnel Hogs.plist Wed Jul 27 11:41:43 2011 +0400 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Tunnel Hogs.plist Mon Aug 01 10:08:02 2011 +0400 @@ -44,6 +44,7 @@ + diff -r d080fb32d703 -r fef456439238 share/hedgewars/Data/Graphics/AmmoMenu/Ammos.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos.png has changed diff -r d080fb32d703 -r fef456439238 share/hedgewars/Data/Graphics/AmmoMenu/Ammos_bw.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos_bw.png has changed diff -r d080fb32d703 -r fef456439238 share/hedgewars/Data/Missions/Training/User_Mission_-_Bamboo_Thicket.lua --- a/share/hedgewars/Data/Missions/Training/User_Mission_-_Bamboo_Thicket.lua Wed Jul 27 11:41:43 2011 +0400 +++ b/share/hedgewars/Data/Missions/Training/User_Mission_-_Bamboo_Thicket.lua Mon Aug 01 10:08:02 2011 +0400 @@ -23,7 +23,7 @@ player = AddHog("Ikeda", 0, 10, "StrawHat") AddTeam(loc("Cybernetic Empire"), 1175851, "Simple", "Island", "Default") - enemy = AddHog(loc("Unit 835"), 5, 10, "cyborg") + enemy = AddHog(loc("Unit 835"), 1, 10, "cyborg") SetGearPosition(player,1166,1680) SetGearPosition(enemy,2848,1443) diff -r d080fb32d703 -r fef456439238 share/hedgewars/Data/Scripts/Multiplayer/The_Specialists.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/The_Specialists.lua Wed Jul 27 11:41:43 2011 +0400 +++ b/share/hedgewars/Data/Scripts/Multiplayer/The_Specialists.lua Mon Aug 01 10:08:02 2011 +0400 @@ -1,5 +1,5 @@ ---------------------------------- --- THE SPECIALISTS MODE 0.4 +-- THE SPECIALISTS MODE 0.5 -- by mikade ---------------------------------- @@ -29,15 +29,22 @@ -- fix potential switch explit -- improve user feedback on start +---------------- +-- version 0.5 +---------------- +-- provision for variable minetimer / demo mines set to 5000ms +-- don't autoswitch if player only has 1 hog on his team + -------------------- --TO DO -------------------- --- add proper gameflag checking, maybe --- set crate drops etc. --- add alternative switch +-- balance hog health, maybe +-- add proper gameflag checking, maybe (so that we can throw in a .cfg and let the users break everything) +-- set crate drops etc. (super crate for each class? or will this ruin the mode's simplicity?) loadfile(GetDataPath() .. "Scripts/Locale.lua")() +loadfile(GetDataPath() .. "Scripts/Tracker.lua")() local numhhs = 0 local hhs = {} @@ -47,6 +54,12 @@ local started = false local switchStage = 0 +local hogCounter + +function CountHog(gear) + hogCounter = hogCounter +1 +end + function CreateTeam() currTeam = "" @@ -222,6 +235,8 @@ "", 4, 4000 ) + trackTeams() + end @@ -229,14 +244,8 @@ currName = GetHogName(CurrentHedgehog) lastName = GetHogName(CurrentHedgehog) AssignAmmo() - - --------------- - --switch - started = false + started = true switchStage = 0 - --AddAmmo(CurrentHedgehog, amSwitch, 1) - --------------- - end function onGameTick() @@ -254,19 +263,30 @@ AddCaption(loc("Prepare yourself") .. ", " .. currName .. "!") - switchStage = switchStage + 1 + hogCounter = 0 + runOnHogsInTeam(CountHog, GetHogTeamName(CurrentHedgehog) ) + + if hogCounter > 1 then + + switchStage = switchStage + 1 - if switchStage == 1 then - AddAmmo(CurrentHedgehog, amSwitch, 1) + if switchStage == 1 then + AddAmmo(CurrentHedgehog, amSwitch, 1) - elseif switchStage == 2 then - ParseCommand("setweap " .. string.char(amSwitch)) - elseif switchStage == 3 then - SetGearMessage(CurrentHedgehog,gmAttack) - elseif switchStage == 4 then + elseif switchStage == 2 then + ParseCommand("setweap " .. string.char(amSwitch)) + elseif switchStage == 3 then + SetGearMessage(CurrentHedgehog,gmAttack) + elseif switchStage == 4 then + switchStage = 110 + AddAmmo(CurrentHedgehog, amSwitch, 0) + end + + else switchStage = 110 - AddAmmo(CurrentHedgehog, amSwitch, 0) end + + end lastName = currName @@ -280,12 +300,21 @@ if GetGearType(gear) == gtHedgehog then hhs[numhhs] = gear numhhs = numhhs + 1 - end + elseif (GetGearType(gear) == gtMine) and (started == true) then + SetTimer(gear,5000) + end + + if (GetGearType(gear) == gtHedgehog) or (GetGearType(gear) == gtResurrector) then + trackGear(gear) + end + end function onGearDelete(gear) --- + if (GetGearType(gear) == gtHedgehog) or (GetGearType(gear) == gtResurrector) then + trackDeletion(gear) + end end function onAmmoStoreInit() diff -r d080fb32d703 -r fef456439238 share/hedgewars/Data/Scripts/plist/Balanced Random Weapon.plist --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Scripts/plist/Balanced Random Weapon.plist Mon Aug 01 10:08:02 2011 +0400 @@ -0,0 +1,14 @@ + + + + + command + escript Scripts/Multiplayer/Balanced_Random_Weapon.lua + description + + scheme + Default.plist + weapon + + + diff -r d080fb32d703 -r fef456439238 share/hedgewars/Data/Scripts/plist/Capture the Flag.plist --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Scripts/plist/Capture the Flag.plist Mon Aug 01 10:08:02 2011 +0400 @@ -0,0 +1,14 @@ + + + + + command + escript Scripts/Multiplayer/Capture_the_Flag.lua + description + + scheme + Default.plist + weapon + Default.plist + + diff -r d080fb32d703 -r fef456439238 share/hedgewars/Data/Scripts/plist/Gaudy Racer.plist --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Scripts/plist/Gaudy Racer.plist Mon Aug 01 10:08:02 2011 +0400 @@ -0,0 +1,14 @@ + + + + + command + escript Scripts/Multiplayer/GaudyRacer.lua + description + + scheme + Default.plist + weapon + Default.plist + + diff -r d080fb32d703 -r fef456439238 share/hedgewars/Data/Scripts/plist/No Jumping.plist --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Scripts/plist/No Jumping.plist Mon Aug 01 10:08:02 2011 +0400 @@ -0,0 +1,14 @@ + + + + + command + escript Scripts/Multiplayer/No_Jumping.lua + description + + scheme + Default.plist + weapon + Default.plist + + diff -r d080fb32d703 -r fef456439238 share/hedgewars/Data/Scripts/plist/Normal.plist --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Scripts/plist/Normal.plist Mon Aug 01 10:08:02 2011 +0400 @@ -0,0 +1,14 @@ + + + + + command + + description + + scheme + Default.plist + weapon + Default.plist + + diff -r d080fb32d703 -r fef456439238 share/hedgewars/Data/Scripts/plist/Random Weapon.plist --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Scripts/plist/Random Weapon.plist Mon Aug 01 10:08:02 2011 +0400 @@ -0,0 +1,14 @@ + + + + + command + escript Scripts/Multiplayer/Balanced_Random_Weapon.lua + description + + scheme + Default.plist + weapon + + + diff -r d080fb32d703 -r fef456439238 share/hedgewars/Data/Scripts/plist/Space Invasion.plist --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Scripts/plist/Space Invasion.plist Mon Aug 01 10:08:02 2011 +0400 @@ -0,0 +1,14 @@ + + + + + command + escript Scripts/Multiplayer/Space_Invasion.lua + description + + scheme + Default.plist + weapon + Default.plist + + diff -r d080fb32d703 -r fef456439238 share/hedgewars/Data/Scripts/plist/The Specialists.plist --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Scripts/plist/The Specialists.plist Mon Aug 01 10:08:02 2011 +0400 @@ -0,0 +1,14 @@ + + + + + command + escript Scripts/Multiplayer/The_Specialists.lua + description + + scheme + + weapon + + + diff -r d080fb32d703 -r fef456439238 share/hedgewars/Data/Scripts/plist/Tumbler.plist --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Scripts/plist/Tumbler.plist Mon Aug 01 10:08:02 2011 +0400 @@ -0,0 +1,14 @@ + + + + + command + escript Scripts/Multiplayer/Tumbler.lua + description + + scheme + Default.plist + weapon + Default.plist + + diff -r d080fb32d703 -r fef456439238 share/hedgewars/Data/Themes/Underwater/SDFlake.png Binary file share/hedgewars/Data/Themes/Underwater/SDFlake.png has changed diff -r d080fb32d703 -r fef456439238 share/hedgewars/Data/Themes/Underwater/theme.cfg --- a/share/hedgewars/Data/Themes/Underwater/theme.cfg Wed Jul 27 11:41:43 2011 +0400 +++ b/share/hedgewars/Data/Themes/Underwater/theme.cfg Mon Aug 01 10:08:02 2011 +0400 @@ -11,5 +11,5 @@ object = coral, 3, 10, 193, 38, 32, 2, 128, 66, 66, 94, 39, 0, 88, 167 object = coral2, 3, 119, 146, 23, 22, 1, 5, 0, 123, 130 flakes = 20, 20, 150, 0, 5 -sd-flakes = 20, 20, 150, 0, 5 +sd-flakes = 5, 16, 150, 0, 1 rq-sky = 0, 70, 210