merge
authorkoda
Mon, 02 Aug 2010 23:15:34 +0200
changeset 3711 de3b3df215c3
parent 3707 787f363798d8 (current diff)
parent 3710 411f5c2b5292 (diff)
child 3712 de2026031833
merge
--- a/.hgignore	Mon Aug 02 23:15:22 2010 +0200
+++ b/.hgignore	Mon Aug 02 23:15:34 2010 +0200
@@ -22,3 +22,4 @@
 glob:project_files/HedgewarsMobile/Data/
 glob:project_files/HedgewarsMobile/build/
 glob:project_files/HedgewarsMobile/Hedgewars.xcodeproj/vittorio.*
+glob:moc_*.cxx_parameters
--- a/CMakeLists.txt	Mon Aug 02 23:15:22 2010 +0200
+++ b/CMakeLists.txt	Mon Aug 02 23:15:34 2010 +0200
@@ -205,7 +205,7 @@
 set(CPACK_PACKAGE_INSTALL_DIRECTORY "Hedgewars ${HEDGEWARS_VERSION}")
 
 if(WIN32 AND NOT UNIX)
-	set(CPACK_NSIS_DISPLAY_NAME ${CPACK_PACKAGE_DESCRIPTION_SUMMARY})
+	set(CPACK_NSIS_DISPLAY_NAME "Hedgewars")
 	set(CPACK_NSIS_HELP_LINK "http://www.hedgewars.org/")
 	set(CPACK_NSIS_URL_INFO_ABOUT "http://www.hedgewars.org/")
 	set(CPACK_NSIS_CONTACT "unC0Rr@gmail.com")
--- a/QTfrontend/CMakeLists.txt	Mon Aug 02 23:15:22 2010 +0200
+++ b/QTfrontend/CMakeLists.txt	Mon Aug 02 23:15:34 2010 +0200
@@ -31,6 +31,7 @@
 if(WIN32 AND NOT UNIX)
 	set(HEDGEWARS_BINDIR ".")
 	set(HEDGEWARS_DATADIR "../share/")
+        add_definitions(-DUSE_XFIRE)
 else()
 	set(HEDGEWARS_BINDIR ${CMAKE_INSTALL_PREFIX})
 	if(DEFINED DATA_INSTALL_DIR)
--- a/QTfrontend/game.cpp	Mon Aug 02 23:15:22 2010 +0200
+++ b/QTfrontend/game.cpp	Mon Aug 02 23:15:34 2010 +0200
@@ -277,21 +277,16 @@
     arguments << QString("%1").arg(ipc_port);
     arguments << (config->vid_Fullscreen() ? "1" : "0");
     arguments << (config->isSoundEnabled() ? "1" : "0");
-#ifdef _WIN32
-    arguments << (config->isSoundHardware() ? "1" : "0");
-#else
-    arguments << "0";
-#endif
-    arguments << (config->isWeaponTooltip() ? "1" : "0");
-    arguments << tr("en.txt");
+    arguments << (config->isMusicEnabled() ? "1" : "0");
     arguments << QString::number(config->volume()); // sound volume
     arguments << QString::number(config->timerInterval());
     arguments << datadir->absolutePath();
     arguments << (config->isShowFPSEnabled() ? "1" : "0");
     arguments << (config->isAltDamageEnabled() ? "1" : "0");
     arguments << config->netNick().toUtf8().toBase64();
-    arguments << (config->isMusicEnabled() ? "1" : "0");
-    arguments << (config->isReducedQuality() ? "1" : "0");
+    arguments << QString::number(config->translateQuality());
+    arguments << tr("en.txt");
+
     return arguments;
 }
 
--- a/QTfrontend/gameuiconfig.cpp	Mon Aug 02 23:15:22 2010 +0200
+++ b/QTfrontend/gameuiconfig.cpp	Mon Aug 02 23:15:34 2010 +0200
@@ -47,13 +47,10 @@
     bool ffscr=value("frontend/fullscreen", false).toBool();
     Form->ui.pageOptions->CBFrontendFullscreen->setChecked(ffscr);
 
-    Form->ui.pageOptions->CBReduceQuality->setChecked(value("video/reducequality", false).toBool());
+    Form->ui.pageOptions->SLQuality->setValue(value("video/quality", 5).toUInt());
     Form->ui.pageOptions->CBFrontendEffects->setChecked(frontendEffects);
     Form->ui.pageOptions->CBEnableSound->setChecked(value("audio/sound", true).toBool());
     Form->ui.pageOptions->CBEnableFrontendSound->setChecked(value("frontend/sound", true).toBool());
-#ifdef _WIN32
-//  Form->ui.pageOptions->CBHardwareSound->setChecked(value("audio/hardware", false).toBool());
-#endif
     Form->ui.pageOptions->CBEnableMusic->setChecked(value("audio/music", true).toBool());
     Form->ui.pageOptions->CBEnableFrontendMusic->setChecked(value("frontend/music", true).toBool());
     Form->ui.pageOptions->volumeBox->setValue(value("audio/volume", 100).toUInt());
@@ -115,11 +112,11 @@
     setValue("video/resolution", Form->ui.pageOptions->CBResolution->currentText());
     setValue("video/fullscreen", vid_Fullscreen());
 
-    setValue("video/reducequality", isReducedQuality());
+    setValue("video/quality", Form->ui.pageOptions->SLQuality->value());
 
     setValue("frontend/effects", isFrontendEffects());
 
-    setValue("misc/weaponTooltips", isWeaponTooltip());
+    setValue("misc/weaponTooltips", Form->ui.pageOptions->WeaponTooltip->isChecked());
 
     bool ffscr = isFrontendFullscreen();
     setValue("frontend/fullscreen", ffscr);
@@ -133,9 +130,6 @@
 
     setValue("audio/sound", isSoundEnabled());
     setValue("frontend/sound", isFrontendSoundEnabled());
-#ifdef _WIN32
-//  setValue("audio/hardware", isSoundHardware());
-#endif
     setValue("audio/music", isMusicEnabled());
     setValue("frontend/music", isFrontendMusicEnabled());
     setValue("audio/volume", Form->ui.pageOptions->volumeBox->value());
@@ -181,20 +175,59 @@
     return Form->ui.pageOptions->CBFullscreen->isChecked();
 }
 
-bool GameUIConfig::isReducedQuality() const
+quint32 GameUIConfig::translateQuality()
 {
-  return Form->ui.pageOptions->CBReduceQuality->isChecked();
+    quint32 rqNone = 0x00000000;  // don't reduce quality
+    quint32 rqLowRes = 0x00000001;  // use half land array
+    quint32 rqBlurryLand = 0x00000002;  // downscaled terrain
+    quint32 rqNoBackground = 0x00000004;  // don't draw background
+    quint32 rqSimpleRope = 0x00000008;  // avoid drawing rope
+    quint32 rq2DWater = 0x00000010;  // disabe 3D water effect
+    quint32 rqFancyBoom = 0x00000020;  // no fancy explosion effects
+    quint32 rqKillFlakes = 0x00000040;  // no flakes
+    quint32 rqSlowMenu = 0x00000080;  // ammomenu appears with no animation
+    quint32 rqPlainSplash = 0x00000100;  // no droplets
+    quint32 rqClampLess = 0x00000200;  // don't clamp textures
+    quint32 rqTooltipsOff = 0x00000400;  // tooltips are not drawn
+    quint32 rqDesyncVBlank = 0x00000800;  // don't sync on vblank
+    
+    quint32 result = (Form->ui.pageOptions->WeaponTooltip->isChecked()) ? rqNone : rqTooltipsOff;
+    
+    switch (Form->ui.pageOptions->SLQuality->value()) {
+      case 5:
+        break;
+      case 4:
+        result |= rqBlurryLand;
+        break;
+      case 3:
+        result |= rqBlurryLand | rqKillFlakes | rqPlainSplash;
+        break;
+      case 2:
+        result |= rqBlurryLand | rqKillFlakes | rqPlainSplash | rq2DWater |
+                  rqFancyBoom | rqSlowMenu;
+        break;
+      case 1:
+        result |= rqBlurryLand | rqKillFlakes | rqPlainSplash | rq2DWater |
+                  rqFancyBoom | rqSlowMenu | rqSimpleRope | rqDesyncVBlank;
+        break;
+      case 0:
+        result |= rqBlurryLand | rqKillFlakes | rqPlainSplash | rq2DWater |
+                  rqFancyBoom | rqSlowMenu | rqSimpleRope | rqDesyncVBlank |
+                  rqNoBackground | rqClampLess;
+        break;
+      default:
+        fprintf(stderr,"unset value from slider");
+        break;
+    }
+    
+    return result;
 }
+
 bool GameUIConfig::isFrontendEffects() const
 {
   return Form->ui.pageOptions->CBFrontendEffects->isChecked();
 }
 
-bool GameUIConfig::isWeaponTooltip() const
-{
-  return Form->ui.pageOptions->WeaponTooltip->isChecked();
-}
-
 bool GameUIConfig::isFrontendFullscreen() const
 {
   return Form->ui.pageOptions->CBFrontendFullscreen->isChecked();
@@ -209,14 +242,6 @@
     return Form->ui.pageOptions->CBEnableFrontendSound->isChecked();
 }
 
-#ifdef _WIN32
-bool GameUIConfig::isSoundHardware()
-{
-//  return Form->ui.pageOptions->CBHardwareSound->isChecked();
-return false;
-}
-#endif
-
 bool GameUIConfig::isMusicEnabled()
 {
     return Form->ui.pageOptions->CBEnableMusic->isChecked();
--- a/QTfrontend/gameuiconfig.h	Mon Aug 02 23:15:22 2010 +0200
+++ b/QTfrontend/gameuiconfig.h	Mon Aug 02 23:15:34 2010 +0200
@@ -35,12 +35,10 @@
     QStringList GetTeamsList();
     QRect vid_Resolution();
     bool vid_Fullscreen();
+    quint32 translateQuality();
     bool isSoundEnabled();
     bool isFrontendSoundEnabled();
     QString language();
-#ifdef _WIN32
-    bool isSoundHardware();
-#endif
     bool isMusicEnabled();
     bool isFrontendMusicEnabled();
     bool isShowFPSEnabled();
@@ -53,7 +51,6 @@
     bool isReducedQuality() const;
     bool isFrontendEffects() const;
     bool isFrontendFullscreen() const;
-    bool isWeaponTooltip() const;
     void resizeToConfigValues();
 
 #ifdef __APPLE__
--- a/QTfrontend/hwconsts.cpp.in	Mon Aug 02 23:15:22 2010 +0200
+++ b/QTfrontend/hwconsts.cpp.in	Mon Aug 02 23:15:34 2010 +0200
@@ -31,10 +31,10 @@
 QStringList * mapList;
 
 QString * cDefaultAmmoStore = new QString(
-        "9391929422199121032235111001201000000211110111"
-        "0405040541600655546554464776576666666155510111"
-        "0000000000000205500000040007004000000000200000"
-        "1311110312111111123114111111111111111211111111"
+        "93919294221991210322351110012010000002111101110"
+        "04050405416006555465544647765766666661555101111"
+        "00000000000002055000000400070040000000002000000"
+        "13111103121111111231141111111111111112111111112"
 		);
 int cAmmoNumber = cDefaultAmmoStore->size() / 4;
 
@@ -42,30 +42,30 @@
 	QList< QPair<QString, QString> >()
 	<< qMakePair(QString("Default"), *cDefaultAmmoStore)
 	<< qMakePair(QString("Crazy"),     QString(
-        "9999999999999999992999999999999999299999999999" // TODO: Remove Piano's unlimited uses!
-        "1111110111111111111111111111111111111111111111"
-        "0000000000000000000000000000000000000000000000"
-        "1311110312111111123114111111111111111211110101"))
+        "99999999999999999929999999999999992999999999999" // TODO: Remove Piano's unlimited uses!
+        "11111101111111111111111111111111111111111111111"
+        "00000000000000000000000000000000000000000000000"
+        "13111103121111111231141111111111111112111101011"))
 	<< qMakePair(QString("Pro mode"),  QString(
-        "9090009000000000000009000000000000000000000900"
-        "0000000000000000000000000000000000000000000000"
-        "0000000000000205500000040007004000000000200000"
-        "1111111111111111111111111111111111111111100111"))
+        "90900090000000000000090000000000000000000009000"
+        "00000000000000000000000000000000000000000000000"
+        "00000000000002055000000400070040000000002000000"
+        "11111111111111111111111111111111111111111001112"))
 	<< qMakePair(QString("Shoppa"),    QString(
-        "0000009900000000000000000000000000000000000000"
-        "4444410044244402210112121222422000000002000400"
-        "0000000000000000000000000000000000000000000000"
-        "1111111111111111111111111111111111111111101111"))
+        "00000099000000000000000000000000000000000000000"
+        "44444100442444022101121212224220000000020004000"
+        "00000000000000000000000000000000000000000000000"
+        "11111111111111111111111111111111111111111011111"))
 	<< qMakePair(QString("Basketball"),QString(
-		"0000009000000900000000000000000000000000000000"
-		"0000000000000000000000000000000000000000000000"
-		"0000000000000005500000040007004000000000200000"
-		"1111111111111111111111111111111111111111111111"))
+		"00000090000009000000000000000000000000000000000"
+		"00000000000000000000000000000000000000000000000"
+		"00000000000000055000000400070040000000002000000"
+		"11111111111111111111111111111111111111111111111"))
 	<< qMakePair(QString("Minefield"), QString(
-		"0000009900090000000300000000000000000000000000"
-		"0000000000000000000000000000000000000000000000"
-		"0000000000000205500000040007004000000000200000"
-		"1111111111111111111111111111111111111111111111"))
+		"00000099000900000003000000000000000000000000000"
+		"00000000000000000000000000000000000000000000000"
+		"00000000000002055000000400070040000000002000000"
+		"11111111111111111111111111111111111111111111111"))
 	;
 
 QColor * color1 = new QColor(221,   0,   0);
--- a/QTfrontend/pages.cpp	Mon Aug 02 23:15:22 2010 +0200
+++ b/QTfrontend/pages.cpp	Mon Aug 02 23:15:34 2010 +0200
@@ -39,7 +39,7 @@
 #include <QMenu>
 #include <QDataWidgetMapper>
 #include <QTime>
-
+#include <QSlider>
 
 #include "ammoSchemeModel.h"
 #include "pages.h"
@@ -573,6 +573,7 @@
 
             QVBoxLayout * GBAlayout = new QVBoxLayout(AGGroupBox);
             QHBoxLayout * GBAreslayout = new QHBoxLayout(0);
+            QHBoxLayout * GBAqualayout = new QHBoxLayout(0);
 
             CBFrontendFullscreen = new QCheckBox(AGGroupBox);
             CBFrontendFullscreen->setText(QCheckBox::tr("Frontend fullscreen"));
@@ -608,9 +609,17 @@
             CBFullscreen->setText(QCheckBox::tr("Fullscreen"));
             GBAlayout->addWidget(CBFullscreen);
 
-            CBReduceQuality = new QCheckBox(AGGroupBox);
-            CBReduceQuality->setText(QCheckBox::tr("Reduced quality"));
-            GBAlayout->addWidget(CBReduceQuality);
+            QLabel * quality = new QLabel(AGGroupBox);
+            quality->setText(QLabel::tr("Quality"));
+            GBAqualayout->addWidget(quality);
+            
+            SLQuality = new QSlider(Qt::Horizontal, AGGroupBox);
+            SLQuality->setTickPosition(QSlider::TicksBelow);
+            SLQuality->setMaximum(5);
+            SLQuality->setMinimum(0);
+            SLQuality->setFixedWidth(150);
+            GBAqualayout->addWidget(SLQuality);
+            GBAlayout->addLayout(GBAqualayout);
 
             hr = new QFrame(AGGroupBox);
             hr->setFrameStyle(QFrame::HLine);
--- a/QTfrontend/pages.h	Mon Aug 02 23:15:22 2010 +0200
+++ b/QTfrontend/pages.h	Mon Aug 02 23:15:34 2010 +0200
@@ -48,6 +48,7 @@
 class QDataWidgetMapper;
 class QAbstractItemModel;
 class QSettings;
+class QSlider;
 
 class GameCFGWidget;
 class TeamSelWidget;
@@ -221,9 +222,6 @@
     QComboBox *CBResolution;
     QCheckBox *CBEnableSound;
     QCheckBox *CBEnableFrontendSound;
-#ifdef _WIN32
-    QCheckBox *CBHardwareSound;
-#endif
     QCheckBox *CBEnableMusic;
     QCheckBox *CBEnableFrontendMusic;
     QCheckBox *CBFullscreen;
@@ -240,7 +238,7 @@
     QLabel *labelNN;
     QSpinBox * volumeBox;
     QLineEdit *editNetNick;
-    QCheckBox *CBReduceQuality;
+    QSlider *SLQuality;
     QCheckBox *CBFrontendEffects;
 };
 
--- a/QTfrontend/xfire.h	Mon Aug 02 23:15:22 2010 +0200
+++ b/QTfrontend/xfire.h	Mon Aug 02 23:15:34 2010 +0200
@@ -19,10 +19,6 @@
 #ifndef XFIRE_H
 #define XFIRE_H
 
-#ifdef _WIN32
-// TODO: Move to CMAKE
-#define USE_XFIRE
-#endif
 
 #ifdef USE_XFIRE
 enum XFIRE_KEYS
--- a/hedgewars/ArgParsers.inc	Mon Aug 02 23:15:22 2010 +0200
+++ b/hedgewars/ArgParsers.inc	Mon Aug 02 23:15:34 2010 +0200
@@ -11,31 +11,20 @@
 begin
     val(ParamStr(2), cScreenWidth);
     val(ParamStr(3), cScreenHeight);
-    cBitsStr:= ParamStr(4);
-    val(cBitsStr, cBits);
+    val(ParamStr(4), cBits);
     val(ParamStr(5), ipcPort);
     cFullScreen:= ParamStr(6) = '1';
     isSoundEnabled:= ParamStr(7) = '1';
-    //cVSyncInUse:= ParamStr(8) = '1';      //merged with rqFlags
-    //cWeaponTooltips:= ParamStr(9) = '1';  //merged with rqFlags
-    cLocaleFName:= ParamStr(10);
-    val(ParamStr(11), cInitVolume);
-    val(ParamStr(12), cTimerInterval);
-    PathPrefix:= ParamStr(13);
-    cShowFPS:= ParamStr(14) = '1';
-    cAltDamage:= ParamStr(15) = '1';
-    UserNick:= DecodeBase64(ParamStr(16));
-    isMusicEnabled:= ParamStr(17) = '1';
+    isMusicEnabled:= ParamStr(8) = '1';
+    val(ParamStr(9), cInitVolume);
+    val(ParamStr(10), cTimerInterval);
+    PathPrefix:= ParamStr(11);
+    cShowFPS:= ParamStr(12) = '1';
+    cAltDamage:= ParamStr(13) = '1';
+    UserNick:= DecodeBase64(ParamStr(14));
+    val(ParamStr(15), cReducedQuality);
+    cLocaleFName:= ParamStr(16);
 
-    if (ParamStr(18) = '1') then        //HACK - always disable rqLowRes as it is a game breaker
-        cReducedQuality:= $FFFFFFFF xor rqLowRes
-    else
-        val(ParamStr(18), cReducedQuality);
-    
-    if (ParamStr(8) = '0') then         //HACK - ifcVSyncInUse not true, disable it
-        cReducedQuality:= cReducedQuality xor rqDesyncVBlank;
-    if (ParamStr(9) = '0') then         //HACK - if cWeaponTooltips not true, disable it
-        cReducedQuality:= cReducedQuality xor rqTooltipsOff;
 end;
 
 procedure setVideo(screenWidth: LongInt; screenHeight: LongInt; bitsStr: LongInt);
@@ -50,8 +39,7 @@
 begin
     val(screenWidthParam, screenWidthAsInt);
     val(screenHeightParam, screenHeightAsInt);
-    cBitsStr:= bitsParam;
-    val(cBitsStr, bitsStrAsInt);
+    val(bitsParam, bitsStrAsInt);
     setVideo(screenWidthAsInt,screenHeightAsInt,bitsStrAsInt);
 end;
 
--- a/hedgewars/GSHandlers.inc	Mon Aug 02 23:15:22 2010 +0200
+++ b/hedgewars/GSHandlers.inc	Mon Aug 02 23:15:34 2010 +0200
@@ -1436,6 +1436,55 @@
 end;
 
 ////////////////////////////////////////////////////////////////////////////////
+procedure doStepSMine(Gear: PGear);
+begin
+    if (Gear^.State and gstMoving) <> 0 then
+    begin
+        if ((Gear^.State and gstCollision) <> 0) and (Gear^.dX < _0_2) and (Gear^.dY < _0_2) then
+        begin
+            Gear^.dX := _0;
+            Gear^.dY := _0
+            // TODO: calc attach dir
+        end
+        else
+            CalcRotationDirAngle(Gear);
+
+        DeleteCI(Gear);
+        doStepFallingGear(Gear);
+        if (Gear^.State and gstMoving) = 0 then
+            AddGearCI(Gear);
+        AllInactive := false
+    end
+    else
+    begin
+        if ((GameTicks and $3F) = 25) then
+            doStepFallingGear(Gear);
+    end;
+
+    if ((Gear^.State and gsttmpFlag) <> 0) and (Gear^.Health <> 0) then
+        if ((Gear^.State and gstAttacking) = 0) then
+        begin
+            if ((GameTicks and $1F) = 0) then
+                if CheckGearNear(Gear, gtHedgehog, 46, 32) <> nil then Gear^.State := Gear^.State or
+                                                                                      gstAttacking
+        end
+    else // gstAttacking <> 0
+    begin
+        AllInactive := false;
+        if (Gear^.Timer and $FF) = 0 then PlaySound(sndMineTick);
+        if Gear^.Timer = 0 then
+        begin
+            doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, EXPLAutoSound);
+            DeleteGear(Gear);
+            exit
+        end;
+        dec(Gear^.Timer);
+    end
+    else // gsttmpFlag = 0
+        if TurnTimeLeft = 0 then Gear^.State := Gear^.State or gsttmpFlag;
+end;
+
+////////////////////////////////////////////////////////////////////////////////
 procedure doStepDynamite(Gear: PGear);
 begin
     doStepFallingGear(Gear);
@@ -3547,6 +3596,7 @@
             7: PlaySound(sndPiano7);
             else PlaySound(sndPiano8);
         end;
+        AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtNote);
         CurrentHedgehog^.Gear^.MsgParam := 0;
         CurrentHedgehog^.Gear^.Message := CurrentHedgehog^.Gear^.Message and not gm_Slot;
     end;
@@ -3593,6 +3643,8 @@
             doMakeExplosion(hwRound(Gear^.X) - 30 - r0, hwRound(Gear^.Y) + 40, 40 + r1, 0);
             doMakeExplosion(hwRound(Gear^.X) + 30 + r1, hwRound(Gear^.Y) + 40, 40 + r0, 0);
             doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 80 + r0, EXPLAutoSound);
+            for r0:= 0 to 4 do
+                AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtNote);
             Gear^.dY := -_1;
             Gear^.Pos := Gear^.Pos + 1;
         end
--- a/hedgewars/GearDrawing.inc	Mon Aug 02 23:15:22 2010 +0200
+++ b/hedgewars/GearDrawing.inc	Mon Aug 02 23:15:34 2010 +0200
@@ -398,6 +398,7 @@
             amHellishBomb: DrawRotated(sprHandHellish, hx, hy, hwSign(Gear^.dX), aangle);
             amGasBomb: DrawRotated(sprHandCheese, hx, hy, hwSign(Gear^.dX), aangle);
             amMine: DrawRotated(sprHandMine, hx, hy, hwSign(Gear^.dX), aangle);
+            amSMine: DrawRotated(sprHandSMine, hx, hy, hwSign(Gear^.dX), aangle);
             amSeduction: DrawRotated(sprHandSeduction, hx, hy, hwSign(Gear^.dX), aangle);
             amVampiric: DrawRotatedF(sprHandVamp, hx, hy, (RealTicks div 125) mod 4, hwSign(Gear^.dX), aangle);
             amRCPlane: begin
@@ -692,6 +693,10 @@
                            DrawRotated(sprMineOff, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, Gear^.DirAngle)
                        else if Gear^.Health <> 0 then DrawRotated(sprMineOn, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, Gear^.DirAngle)
                        else DrawRotated(sprMineDead, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, Gear^.DirAngle);
+           gtSMine: if (((Gear^.State and gstAttacking) = 0)or((Gear^.Timer and $3FF) < 420)) and (Gear^.Health <> 0) then
+                           DrawRotated(sprSMineOff, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, Gear^.DirAngle)
+                       else if Gear^.Health <> 0 then DrawRotated(sprSMineOn, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, Gear^.DirAngle)
+                       else DrawRotated(sprMineDead, hwRound(Gear^.X) + WorldDx, hwRound(Gear^.Y) + WorldDy, 0, Gear^.DirAngle);
             gtCase: case Gear^.Pos of
                          posCaseAmmo  : begin
                                         i:= (GameTicks shr 6) mod 64;
--- a/hedgewars/HHHandlers.inc	Mon Aug 02 23:15:22 2010 +0200
+++ b/hedgewars/HHHandlers.inc	Mon Aug 02 23:15:34 2010 +0200
@@ -184,6 +184,7 @@
                          amSkip: ParseCommand('/skip', true);
                          amRope: CurAmmoGear:= AddGear(hwRound(lx), hwRound(ly), gtRope, 0, xx, yy, 0);
                          amMine: AddGear(hwRound(lx) + hwSign(dX) * 7, hwRound(ly), gtMine, gstWait, SignAs(_0_02, dX), _0, 3000);
+                        amSMine: FollowGear:= AddGear(hwRound(lx), hwRound(ly), gtSMine,    0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0);
                        amDEagle: CurAmmoGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtDEagleShot, 0, xx * _0_5, yy * _0_5, 0);
                       amSineGun: CurAmmoGear:= AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtSineGunShot, 0, xx * _0_5, yy * _0_5, 0);
                     amPortalGun: AddGear(hwRound(lx + xx * cHHRadius), hwRound(ly + yy * cHHRadius), gtPortal, 0, xx * _0_6, yy * _0_6, 0);
--- a/hedgewars/VGSHandlers.inc	Mon Aug 02 23:15:22 2010 +0200
+++ b/hedgewars/VGSHandlers.inc	Mon Aug 02 23:15:34 2010 +0200
@@ -109,6 +109,24 @@
 end;
 
 ////////////////////////////////////////////////////////////////////////////////
+procedure doStepNote(Gear: PVisualGear; Steps: Longword);
+begin
+Gear^.X:= Gear^.X + Gear^.dX * Steps;
+
+Gear^.Y:= Gear^.Y + Gear^.dY * Steps;
+Gear^.dY:= Gear^.dY + cGravityf * Steps / 2;
+
+Gear^.Angle:= Gear^.Angle + (Gear^.Frame + 1) * Steps / 10;
+while Gear^.Angle > cMaxAngle do
+    Gear^.Angle:= Gear^.Angle - cMaxAngle;
+
+if Gear^.FrameTicks <= Steps then
+    DeleteVisualGear(Gear)
+else
+    dec(Gear^.FrameTicks, Steps)
+end;
+
+////////////////////////////////////////////////////////////////////////////////
 procedure doStepEgg(Gear: PVisualGear; Steps: Longword);
 begin
 Gear^.X:= Gear^.X + Gear^.dX * Steps;
--- a/hedgewars/hwengine.pas	Mon Aug 02 23:15:22 2010 +0200
+++ b/hedgewars/hwengine.pas	Mon Aug 02 23:15:34 2010 +0200
@@ -315,7 +315,7 @@
 begin
     Randomize();
 
-    uConsts.initModule;
+    // uConsts does not need initialization as they are all consts
     uMisc.initModule;
     uConsole.initModule;    // MUST happen after uMisc
 
@@ -386,7 +386,6 @@
 
     uConsole.freeModule;
     uMisc.freeModule;           // uMisc closes the debug log.
-    uConsts.freeModule;         //stub
 end;
 
 /////////////////////////
@@ -446,7 +445,7 @@
         if (ParamCount = 3) then
             internalSetGameTypeLandPreviewFromParameters()
         else
-            if (ParamCount = 18) then
+            if (ParamCount = cDefaultParamNum) then
                 internalStartGameWithParameters()
             else
                 playReplayFileWithParameters();
--- a/hedgewars/uAIAmmoTests.pas	Mon Aug 02 23:15:22 2010 +0200
+++ b/hedgewars/uAIAmmoTests.pas	Mon Aug 02 23:15:34 2010 +0200
@@ -97,7 +97,8 @@
             (proc: nil;              flags: 0), // amPiano
             (proc: @TestGrenade;     flags: 0), // amGasBomb
             (proc: @TestShotgun;     flags: 0), // amSineGun
-            (proc: nil;              flags: 0)  // amFlamethrower
+            (proc: nil;              flags: 0), // amFlamethrower
+            (proc: @TestGrenade;     flags: 0)  // amSMine
             );
 
 const BadTurn = Low(LongInt) div 4;
--- a/hedgewars/uConsts.pas	Mon Aug 02 23:15:22 2010 +0200
+++ b/hedgewars/uConsts.pas	Mon Aug 02 23:15:34 2010 +0200
@@ -73,7 +73,8 @@
             sprHandDynamite, sprHandHellish, sprHandMine, sprHandSeduction, sprHandVamp,
             sprBigExplosion, sprSmokeRing, sprBeeTrace, sprEgg, sprTargetBee, sprHandBee,
             sprFeather, sprPiano, sprHandSineGun, sprPortalGun, sprPortal,
-            sprCheese, sprHandCheese, sprHandFlamethrower, sprChunk
+            sprCheese, sprHandCheese, sprHandFlamethrower, sprChunk, sprNote,
+            sprSMineOff, sprSMineOn, sprHandSMine
             );
 
     // Gears that interact with other Gears and/or Land
@@ -86,7 +87,8 @@
             gtWhip, gtKamikaze, gtCake, gtSeduction, gtWatermelon, gtMelonPiece, // 34
             gtHellishBomb, gtWaterUp, gtDrill, gtBallGun, gtBall, gtRCPlane, // 40
             gtSniperRifleShot, gtJetpack, gtMolotov, gtExplosives, gtBirdy, // 45
-            gtEgg, gtPortal, gtPiano, gtGasBomb, gtSineGunShot, gtFlamethrower); // 51
+            gtEgg, gtPortal, gtPiano, gtGasBomb, gtSineGunShot, gtFlamethrower, // 51
+            gtSMine);
 
     // Gears that are _only_ of visual nature (e.g. background stuff, visual effects, speechbubbles, etc.)
     TVisualGearType = (vgtFlake, vgtCloud, vgtExplPart, vgtExplPart2, vgtFire,
@@ -94,7 +96,7 @@
             vgtSteam, vgtAmmo, vgtSmoke, vgtSmokeWhite, vgtHealth, vgtShell,
             vgtDust, vgtSplash, vgtDroplet, vgtSmokeRing, vgtBeeTrace, vgtEgg,
             vgtFeather, vgtHealthTag, vgtSmokeTrace, vgtEvilTrace, vgtExplosion,
-            vgtBigExplosion, vgtChunk);
+            vgtBigExplosion, vgtChunk, vgtNote);
 
     TGearsType = set of TGearType;
 
@@ -129,7 +131,7 @@
             amSeduction, amWatermelon, amHellishBomb, amNapalm, amDrill, amBallgun,
             amRCPlane, amLowGravity, amExtraDamage, amInvulnerable, amExtraTime,
             amLaserSight, amVampiric, amSniperRifle, amJetpack, amMolotov, amBirdy, amPortalGun,
-            amPiano, amGasBomb, amSineGun, amFlamethrower);
+            amPiano, amGasBomb, amSineGun, amFlamethrower, amSMine);
 
     THWFont = (fnt16, fntBig, fntSmall, CJKfnt16, CJKfntBig, CJKfntSmall);
 
@@ -183,7 +185,9 @@
     THogEffect = (heInvulnerable, hePoisoned);
 
     TScreenFade = (sfNone, sfInit, sfToBlack, sfFromBlack, sfToWhite, sfFromWhite);
-const sfMax = 1000;
+const
+    sfMax = 1000;
+    cDefaultParamNum = 16;
 
     // message constants
     errmsgCreateSurface   = 'Error creating SDL surface';
@@ -452,16 +456,6 @@
         'Graphics/Flags'                 // ptFlags
     );
 
-var PathPrefix: shortstring = './';
-    Pathz: array[TPathType] of shortstring;
-    CountTexz: array[1..Pred(AMMO_INFINITE)] of PTexture;
-    LAND_WIDTH  :longint;
-    LAND_HEIGHT :longint;
-    LAND_WIDTH_MASK  :longWord;
-    LAND_HEIGHT_MASK :longWord;
-    cMaxCaptions : LongInt;
-
-const
     cTagsMasks : array[0..15] of byte = (7, 0, 0, 0, 15, 6, 4, 5, 0, 0, 0, 0, 0, 14, 12, 13);
     cTagsMasksNoHealth: array[0..15] of byte = (3, 2, 11, 1, 0, 0, 0, 0, 0, 10, 0, 9, 0, 0, 0, 0);
 
@@ -799,7 +793,15 @@
             (FileName:  'amFlamethrower'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
             Width:  128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandFlamethrower
             (FileName:  'Chunk'; Path: ptCurrTheme; AltPath: ptGraphics; Texture: nil; Surface: nil;
-            Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true) // sprChunk
+            Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprChunk
+            (FileName:  'Note'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+            Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprNote
+            (FileName:   'SMineOff'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+            Width:   8; Height:  8; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprSMineOff
+            (FileName:    'SMineOn'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+            Width:   8; Height:  8; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprSMineOn
+            (FileName:  'amSMine'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
+            Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true) // sprHandSMine
             );
 
     Wavez: array [TWave] of record
@@ -2150,7 +2152,31 @@
             PosCount: 1;
             PosSprite: sprWater;
             ejectX: 0; //20;
-            ejectY: -3)
+            ejectY: -3),
+
+// Mine
+            (NameId: sidSMine;
+            NameTex: nil;
+            Probability: 100;
+            NumberInCase: 1;
+            Ammo: (Propz: ammoprop_Power or ammoprop_AltUse;
+                Count: 2;
+                InitialCount: 0;
+                NumPerTurn: 0;
+                Timer: 0;
+                Pos: 0;
+                AmmoType: amSMine;
+                AttackVoice: sndLaugh);
+            Slot: 4;
+            TimeAfterTurn: 5000;
+            minAngle: 0;
+            maxAngle: 0;
+            isDamaging: true;
+            SkipTurns: 0;
+            PosCount: 1;
+            PosSprite: sprWater;
+            ejectX: 0;
+            ejectY: 0)
             );
 
 
@@ -2181,47 +2207,6 @@
         alpha : 255
     );
 
-procedure initModule;
-procedure freeModule;
-
 implementation
-uses uMisc;
-
-procedure initModule;
-begin
-    Pathz:= cPathz;
-        {*  REFERENCE
-      4096 -> $FFFFF000
-      2048 -> $FFFFF800
-      1024 -> $FFFFFC00
-       512 -> $FFFFFE00  *}
-    if (cReducedQuality and rqLowRes) <> 0 then
-    begin
-        LAND_WIDTH:= 2048;
-        LAND_HEIGHT:= 1024;
-        LAND_WIDTH_MASK:= $FFFFF800;
-        LAND_HEIGHT_MASK:= $FFFFFC00;
-    end
-    else
-    begin
-        LAND_WIDTH:= 4096;
-        LAND_HEIGHT:= 2048;
-        LAND_WIDTH_MASK:= $FFFFF000;
-        LAND_HEIGHT_MASK:= $FFFFF800
-    end;
-
-{$IFDEF IPHONEOS}
-    if isPhone() then
-        cMaxCaptions:= 3
-    else
-{$ENDIF}
-        cMaxCaptions:= 4;
-
-end;
-
-procedure freeModule;
-begin
-    PathPrefix := './';
-end;
 
 end.
--- a/hedgewars/uGears.pas	Mon Aug 02 23:15:22 2010 +0200
+++ b/hedgewars/uGears.pas	Mon Aug 02 23:15:34 2010 +0200
@@ -201,7 +201,8 @@
             @doStepPiano,
             @doStepBomb,
             @doStepSineGunShot,
-            @doStepFlamethrower
+            @doStepFlamethrower,
+            @doStepSMine
             );
 
 procedure InsertGearToList(Gear: PGear);
@@ -354,6 +355,14 @@
                 else
                     gear^.Timer:= cMinesTime*1;
                 end;
+       gtSMine: begin
+                gear^.Health:= 10;
+                gear^.State:= gear^.State or gstMoving;
+                gear^.Radius:= 2;
+                gear^.Elasticity:= _0_55;
+                gear^.Friction:= _0_995;
+                gear^.Timer:= 500;
+                end;
         gtCase: begin
                 gear^.ImpactSound:= sndGraveImpact;
                 gear^.nImpactSounds:= 1;
@@ -1211,6 +1220,7 @@
         case Gear^.Kind of
             gtHedgehog,
                 gtMine,
+                gtSMine,
                 gtCase,
                 gtTarget,
                 gtFlame,
@@ -1286,6 +1296,7 @@
     case t^.Kind of
         gtHedgehog,
             gtMine,
+            gtSMine,
             gtCase,
             gtTarget,
             gtExplosives: begin
@@ -1340,6 +1351,7 @@
         case Gear^.Kind of
             gtHedgehog,
             gtMine,
+            gtSMine,
             gtTarget,
             gtCase,
             gtExplosives: begin
--- a/hedgewars/uLocale.pas	Mon Aug 02 23:15:22 2010 +0200
+++ b/hedgewars/uLocale.pas	Mon Aug 02 23:15:34 2010 +0200
@@ -29,7 +29,8 @@
             sidHellishBomb, sidDrill, sidBallgun, sidNapalm, sidRCPlane,
             sidLowGravity, sidExtraDamage, sidInvulnerable, sidExtraTime,
             sidLaserSight, sidVampiric, sidSniperRifle, sidJetpack,
-            sidMolotov, sidBirdy, sidPortalGun, sidPiano, sidGasBomb, sidSineGun, sidFlamethrower);
+            sidMolotov, sidBirdy, sidPortalGun, sidPiano, sidGasBomb, sidSineGun, sidFlamethrower,
+            sidSMine);
 
     TMsgStrId = (sidStartFight, sidDraw, sidWinner, sidVolume, sidPaused,
             sidConfirm, sidSuddenDeath, sidRemaining, sidFuel, sidSync,
--- a/hedgewars/uMisc.pas	Mon Aug 02 23:15:22 2010 +0200
+++ b/hedgewars/uMisc.pas	Mon Aug 02 23:15:34 2010 +0200
@@ -71,11 +71,19 @@
     TimeTrialStartTime: Longword;
     TimeTrialStopTime : Longword;
 
+    // originally from uConsts
+    Pathz: array[TPathType] of shortstring;
+    CountTexz: array[1..Pred(AMMO_INFINITE)] of PTexture;
+    LAND_WIDTH  :longint;
+    LAND_HEIGHT :longint;
+    LAND_WIDTH_MASK  :longWord;
+    LAND_HEIGHT_MASK :longWord;
+    cMaxCaptions : LongInt;
+
     // init flags
     cScreenWidth    : LongInt = 1024;
     cScreenHeight   : LongInt = 768;
     cBits           : LongInt = 32;
-    cBitsStr        : string[2] = '32';
     //ipcPort is in uIO
     cFullScreen     : boolean = false;
     isSoundEnabled  : boolean = true;
@@ -83,7 +91,7 @@
     cLocaleFName    : shortstring = 'en.txt';
     cInitVolume     : LongInt = 50;
     cTimerInterval  : LongInt = 8;
-    //pathPrefix is in uConsts
+    PathPrefix: shortstring = './';
     cShowFPS        : boolean = false;
     cAltDamage      : boolean = true;
     cReducedQuality : LongInt = rqNone;
@@ -672,6 +680,27 @@
 procedure initModule;
 {$IFDEF DEBUGFILE}{$IFNDEF IPHONEOS}var i: LongInt;{$ENDIF}{$ENDIF}
 begin
+    Pathz:= cPathz;
+        {*  REFERENCE
+      4096 -> $FFFFF000
+      2048 -> $FFFFF800
+      1024 -> $FFFFFC00
+       512 -> $FFFFFE00  *}
+    if (cReducedQuality and rqLowRes) <> 0 then
+    begin
+        LAND_WIDTH:= 2048;
+        LAND_HEIGHT:= 1024;
+        LAND_WIDTH_MASK:= $FFFFF800;
+        LAND_HEIGHT_MASK:= $FFFFFC00;
+    end
+    else
+    begin
+        LAND_WIDTH:= 4096;
+        LAND_HEIGHT:= 2048;
+        LAND_WIDTH_MASK:= $FFFFF000;
+        LAND_HEIGHT_MASK:= $FFFFF800
+    end;
+
     cDrownSpeed.QWordValue  := 257698038;       // 0.06
     cDrownSpeedf            := 0.06;
     cMaxWindSpeed.QWordValue:= 1073742;     // 0.00025
@@ -747,6 +776,13 @@
 
     ScreenFade      := sfNone;
 
+{$IFDEF IPHONEOS}
+    if isPhone() then
+        cMaxCaptions:= 3
+    else
+{$ENDIF}
+        cMaxCaptions:= 4;
+
 {$IFDEF SDL13}
     SDLwindow       := nil;
 {$ENDIF}
@@ -757,7 +793,7 @@
     Rewrite(f);
 {$ELSE}
     if (ParamStr(1) <> '') and (ParamStr(2) <> '') then
-        if (ParamCount <> 3) and (ParamCount <> 18) then
+        if (ParamCount <> 3) and (ParamCount <> cDefaultParamNum) then
         begin
             for i:= 0 to 7 do
             begin
@@ -796,11 +832,10 @@
     close(f);
 {$ENDIF}
 
-    // re-init flags so they'll always contain safe values
+    // re-init flags so they will always contain safe values
     cScreenWidth    := 1024;
     cScreenHeight   := 768;
     cBits           := 32;
-    cBitsStr        := '32';
     //ipcPort is in uIO
     cFullScreen     := false;
     isSoundEnabled  := true;
@@ -808,7 +843,7 @@
     cLocaleFName    := 'en.txt';
     cInitVolume     := 50;
     cTimerInterval  := 8;
-    //pathPrefix is in uConsts
+    PathPrefix := './';
     cShowFPS        := false;
     cAltDamage      := true;
     cReducedQuality := rqNone;
--- a/hedgewars/uVisualGears.pas	Mon Aug 02 23:15:22 2010 +0200
+++ b/hedgewars/uVisualGears.pas	Mon Aug 02 23:15:34 2010 +0200
@@ -116,7 +116,8 @@
             @doStepSmokeTrace,
             @doStepExplosion,
             @doStepBigExplosion,
-            @doStepChunk
+            @doStepChunk,
+            @doStepNote
         );
 
 function  AddVisualGear(X, Y: LongInt; Kind: TVisualGearType; State: LongWord = 0): PVisualGear;
@@ -139,7 +140,8 @@
     vgtHealthTag,
     vgtExplosion,
     vgtSmokeTrace,
-    vgtEvilTrace]) then
+    vgtEvilTrace,
+    vgtNote]) then
     begin
       AddVisualGear:= nil;
       exit
@@ -305,9 +307,15 @@
                 t:= random(1024);
                 sp:= 0.001 * (random(85) + 47);
                 dx:= AngleSin(t).QWordValue/4294967296 * sp;
-                dy:= AngleCos(t).QWordValue/4294967296 * sp;
+                dy:= AngleCos(t).QWordValue/4294967296 * sp * -2;
                 if random(2) = 0 then dx := -dx;
-                (*if random(2) = 0 then*) dy := -2 * dy;
+                end;
+      vgtNote: begin
+                dx:= 0.005 * (random(15) + 10);
+                dy:= -0.001 * (random(40) + 20);
+                if random(2) = 0 then dx := -dx;
+                Frame:= random(4);
+                FrameTicks:= random(2000) + 1500;
                 end;
         end;
 
@@ -466,6 +474,7 @@
                             DrawRotatedTextureF(SpritesData[sprSmokeRing].Texture, Gear^.scale, 0, 0, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, 0, 1, 200, 200, Gear^.Angle);
                             end;
                 vgtChunk: DrawRotatedF(sprChunk, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle);
+                 vgtNote: DrawRotatedF(sprNote, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Frame, 1, Gear^.Angle);
             end;
         case Gear^.Kind of
             vgtSmallDamageTag: DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex);
Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos.png has changed
Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos_bw.png has changed
Binary file share/hedgewars/Data/Graphics/Hedgehog/amSMine.png has changed
Binary file share/hedgewars/Data/Graphics/Note.png has changed
Binary file share/hedgewars/Data/Graphics/SMineOff.png has changed
Binary file share/hedgewars/Data/Graphics/SMineOn.png has changed
--- a/share/hedgewars/Data/Locale/en.txt	Mon Aug 02 23:15:22 2010 +0200
+++ b/share/hedgewars/Data/Locale/en.txt	Mon Aug 02 23:15:34 2010 +0200
@@ -47,6 +47,7 @@
 00:44=Old Limburger
 00:45=Sine Gun
 00:46=Flamethrower
+00:47=Sticky Mine
 
 01:00=Let's fight!
 01:01=Round draw
Binary file share/hedgewars/Data/Themes/Art/Chunk.png has changed
Binary file share/hedgewars/Data/Themes/Bamboo/Chunk.png has changed
Binary file share/hedgewars/Data/Themes/Bath/Chunk.png has changed
Binary file share/hedgewars/Data/Themes/Brick/Chunk.png has changed
Binary file share/hedgewars/Data/Themes/Castle/Chunk.png has changed
Binary file share/hedgewars/Data/Themes/Cheese/Chunk.png has changed
Binary file share/hedgewars/Data/Themes/City/Chunk.png has changed
Binary file share/hedgewars/Data/Themes/Compost/Chunk.png has changed
Binary file share/hedgewars/Data/Themes/Desert/Chunk.png has changed
Binary file share/hedgewars/Data/Themes/EarthRise/Chunk.png has changed
Binary file share/hedgewars/Data/Themes/Freeway/Chunk.png has changed
Binary file share/hedgewars/Data/Themes/Halloween/Chunk.png has changed
Binary file share/hedgewars/Data/Themes/Hell/Chunk.png has changed
Binary file share/hedgewars/Data/Themes/Island/Chunk.png has changed
Binary file share/hedgewars/Data/Themes/Nature/Chunk.png has changed
Binary file share/hedgewars/Data/Themes/Sheep/Chunk.png has changed
Binary file share/hedgewars/Data/Themes/Snow/Chunk.png has changed
Binary file share/hedgewars/Data/Themes/Stage/Chunk.png has changed