# HG changeset patch # User Xeli # Date 1312472695 -7200 # Node ID 272ed78e59a760c87cde45bc82fab62867eb5759 # Parent b9aed3de7c277f96ab38b2ed5d3b628b78abf1bf# Parent a0455a050ca893257e62e05c32dd912d415b0821 merge diff -r b9aed3de7c27 -r 272ed78e59a7 .hgtags --- a/.hgtags Thu Aug 04 17:41:07 2011 +0200 +++ b/.hgtags Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 CMakeLists.txt --- a/CMakeLists.txt Thu Aug 04 17:41:07 2011 +0200 +++ b/CMakeLists.txt Thu Aug 04 17:44:55 2011 +0200 @@ -1,11 +1,15 @@ project(hedgewars) + +#initialise cmake environment cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR) FOREACH(policy CMP0003 CMP0012) IF(POLICY ${policy}) CMAKE_POLICY(SET ${policy} NEW) ENDIF() ENDFOREACH() +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules) + #detect Mercurial revision (if present) set(version_suffix "-dev") #UNSET THIS VARIABLE AT RELEASE TIME @@ -20,7 +24,7 @@ OUTPUT_VARIABLE version_suffix ) STRING(REGEX REPLACE "[^+]" "" HGCHANGED ${version_suffix}) - STRING(REGEX REPLACE "([0-9a-zA-Z]+)(.*) ([0-9]+)(.*)" "\\3:\\1" version_suffix ${version_suffix}) + STRING(REGEX REPLACE "([0-9a-zA-Z]+)(.*) ([0-9]+)(.*)" "\\3-\\1" version_suffix ${version_suffix}) IF (HGCHANGED) MESSAGE(STATUS "Building revision ${version_suffix} (SOURCE CODE MODIFIED)") ELSE() @@ -33,11 +37,14 @@ set(HW_DEV false) ENDIF() -set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules) -set( CPACK_PACKAGE_VERSION_MAJOR 0 ) -set( CPACK_PACKAGE_VERSION_MINOR 9 ) -set( CPACK_PACKAGE_VERSION_PATCH 16${version_suffix} ) +#versioning +set(CPACK_PACKAGE_VERSION_MAJOR 0) +set(CPACK_PACKAGE_VERSION_MINOR 9) +set(CPACK_PACKAGE_VERSION_PATCH 16${version_suffix}) +set(HEDGEWARS_PROTO_VER 38) +set(HEDGEWARS_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") + #set some safe values IF(NOT WITH_SERVER) @@ -49,6 +56,7 @@ set(target_dir "bin") +#bundle .app setup if(APPLE) set(CMAKE_FIND_FRAMEWORK "FIRST") @@ -165,8 +173,6 @@ endif() set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) -set( HEDGEWARS_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}" ) -set( HEDGEWARS_PROTO_VER 38 ) if(WITH_SERVER) find_program(ghc_executable ghc) @@ -195,8 +201,8 @@ add_subdirectory(tools) endif() -# CPack vars +# CPack variables set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Hedgewars, a free turn-based strategy") set(CPACK_PACKAGE_VENDOR "Hedgewars Project") set(CPACK_PACKAGE_FILE_NAME "hedgewars-${HEDGEWARS_VERSION}") @@ -278,3 +284,4 @@ ) include(CPack) + diff -r b9aed3de7c27 -r 272ed78e59a7 ChangeLog.txt --- a/ChangeLog.txt Thu Aug 04 17:41:07 2011 +0200 +++ b/ChangeLog.txt Thu Aug 04 17:44:55 2011 +0200 @@ -1,6 +1,46 @@ + features * bugfixes +0.9.15 -> ???: + + New modes: The Specialists, Space Invasion + + Installing content (anything under Data/ - maps, sounds, and any such stuff) to user profile allows custom adding/overriding of any Data/ content + + Sudden Death art + + New Weapon/Utility: Land Spray Gun + + New Game mode: Tag team + + Allow up to 8 teams in a game + + Shoppa scheme by default resets ammo + + Shots are on a tenth of a second delay instead of a 1 and a quarter second delay (fast deagle/portal fire) + + Defective mines explode if they take enough damage + + Rope head can attach to hogs/crates/barrels again (rope still passes through them) + + Control of grenade bounce + + Drill Strike bombs don't explode when leaving ground, but after a (customizable!) timer + + Ukranian localization of Default voice. support for localized voices + + Theme cleanup, including the new theme config file change + + Improvements in scoring and tracking damage + + Camera tracking now toggleable + + Mudball does not end turn + + Indicator for height of plane when using napalm + + Land smoothing (looks less pixelated on generation and damage) + + Improved lua script support (e.g. possibility to change hats) + * Prevent portaling to impossible locations better + * Snow accumulates more smoothly + * Rope should be less sticky now + * Fix for last portal shot always being yellow + * More accurate napalm strike drop location + * AI fixes + * Fixed locales, such as korean + * Code refactoring + * Various bug/leak fixes + +Frontend/Menu and Netgame: + + Drawing straight lines in drawn map mode + + Autokick ignored players joining your room + + Improved nick sorting in lobby and rooms. (not case-sensitive, letters first, friend @ top, ignored @ bottom) + + Display player count in lobby + + Lobby: Player names of online players can be clicked in chat directly so that you don't have to find them in the player list + * Fix invisible icons in popup menus + * Various fixes and adjustments + 0.9.14 -> 0.9.15: + Ability to create, save and load hand drawn maps + New maps: Capture the Flag (Blizzard) Map diff -r b9aed3de7c27 -r 272ed78e59a7 QTfrontend/gamecfgwidget.cpp --- a/QTfrontend/gamecfgwidget.cpp Thu Aug 04 17:41:07 2011 +0200 +++ b/QTfrontend/gamecfgwidget.cpp Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 QTfrontend/hwconsts.h --- a/QTfrontend/hwconsts.h Thu Aug 04 17:41:07 2011 +0200 +++ b/QTfrontend/hwconsts.h Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 QTfrontend/mapContainer.cpp --- a/QTfrontend/mapContainer.cpp Thu Aug 04 17:41:07 2011 +0200 +++ b/QTfrontend/mapContainer.cpp Thu Aug 04 17:44:55 2011 +0200 @@ -175,7 +175,7 @@ connect(cbTemplateFilter, SIGNAL(activated(int)), this, SLOT(setTemplateFilter(int))); maze_size_label = new QLabel(tr("Type"), mapWidget); - mainLayout.addWidget(maze_size_label, 2, 0); + mapLayout->addWidget(maze_size_label, 2, 0); maze_size_label->hide(); cbMazeSize = new QComboBox(mapWidget); cbMazeSize->addItem(tr("Small tunnels"), 0); diff -r b9aed3de7c27 -r 272ed78e59a7 QTfrontend/pagemain.cpp --- a/QTfrontend/pagemain.cpp Thu Aug 04 17:41:07 2011 +0200 +++ b/QTfrontend/pagemain.cpp Thu Aug 04 17:44:55 2011 +0200 @@ -91,7 +91,7 @@ Tips << tr("Most weapons won't work once they touch the water. The Homing Bee as well as the Cake are exceptions to this.", "Tips"); Tips << tr("The Old Limbuger only causes a small explosion. However the wind affected smelly cloud can poison lots of hogs at once.", "Tips"); Tips << tr("The Piano Strike is the most damaging air strike. You'll lose the hedgehog performing it, so there's a huge downside as well.", "Tips"); - Tips << tr("The Homing Bee can be tricky to use. Its turn radius depends on it's velocity, so try to not use full power.", "Tips"); + Tips << tr("The Homing Bee can be tricky to use. Its turn radius depends on its velocity, so try to not use full power.", "Tips"); Tips << tr("Sticky Mines are a perfect tool to create small chain reactions knocking enemy hedgehogs into dire situations ... or water.", "Tips"); Tips << tr("The Hammer is most effective when used on bridges or girders. Hit hogs will just break through the ground.", "Tips"); Tips << tr("If you're stuck behind an enemy hedgehog, use the Hammer to free yourself without getting damaged by an explosion.", "Tips"); diff -r b9aed3de7c27 -r 272ed78e59a7 QTfrontend/pageoptions.cpp --- a/QTfrontend/pageoptions.cpp Thu Aug 04 17:41:07 2011 +0200 +++ b/QTfrontend/pageoptions.cpp Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 QTfrontend/teamselhelper.cpp --- a/QTfrontend/teamselhelper.cpp Thu Aug 04 17:41:07 2011 +0200 +++ b/QTfrontend/teamselhelper.cpp Thu Aug 04 17:44:55 2011 +0200 @@ -49,7 +49,7 @@ QIcon(QString(":/res/botlevels/net%1.png").arg(m_team.difficulty)) : QIcon(QString(":/res/botlevels/%1.png").arg(m_team.difficulty)); - butt = new QPushButton(difficultyIcon, team.TeamName, this); + butt = new QPushButton(difficultyIcon, team.TeamName.replace("&","&&"), this); butt->setFlat(true); butt->setToolTip(team.Owner); mainLayout.addWidget(butt); diff -r b9aed3de7c27 -r 272ed78e59a7 gameServer/Actions.hs --- a/gameServer/Actions.hs Thu Aug 04 17:41:07 2011 +0200 +++ b/gameServer/Actions.hs Thu Aug 04 17:44:55 2011 +0200 @@ -45,6 +45,8 @@ | KickClient ClientIndex | KickRoomClient ClientIndex | BanClient NominalDiffTime B.ByteString ClientIndex + | BanIP B.ByteString NominalDiffTime B.ByteString + | BanList | ChangeMaster | RemoveClientTeams ClientIndex | ModifyClient (ClientInfo -> ClientInfo) @@ -393,12 +395,25 @@ modify (\s -> s{clientIndex = Just banId}) clHost <- client's host currentTime <- io getCurrentTime - let msg = B.concat ["Ban for ", B.pack . show $ seconds, "seconds (", reason, ")"] + let msg = B.concat ["Ban for ", B.pack . show $ seconds, " (", reason, ")"] mapM_ processAction [ AddIP2Bans clHost msg (addUTCTime seconds currentTime) , KickClient banId ] +processAction (BanIP ip seconds reason) = do + currentTime <- io getCurrentTime + let msg = B.concat ["Ban for ", B.pack . show $ seconds, " (", reason, ")"] + processAction $ + AddIP2Bans ip msg (addUTCTime seconds currentTime) + +processAction BanList = do + ch <- client's sendChan + bans <- gets (bans . serverInfo) + processAction $ + AnswerClients [ch] ["BANLIST", B.pack $ show bans] + + processAction (KickRoomClient kickId) = do modify (\s -> s{clientIndex = Just kickId}) @@ -442,15 +457,13 @@ si <- gets serverInfo let validBans = filter (checkNotExpired clTime) $ bans si let ban = L.find (checkBan clHost clNick) $ validBans - when (isJust ban) $ - mapM_ processAction [ + mapM_ processAction $ ModifyServerInfo (\s -> s{bans = validBans}) - , ByeClient (getBanReason $ fromJust ban) - ] + : [ByeClient (getBanReason $ fromJust ban) | isJust ban] where checkNotExpired testTime (BanByIP _ _ time) = testTime `diffUTCTime` time <= 0 checkNotExpired testTime (BanByNick _ _ time) = testTime `diffUTCTime` time <= 0 - checkBan ip _ (BanByIP bip _ _) = bip == ip + checkBan ip _ (BanByIP bip _ _) = bip `B.isPrefixOf` ip checkBan _ n (BanByNick bn _ _) = bn == n getBanReason (BanByIP _ msg _) = msg getBanReason (BanByNick _ msg _) = msg diff -r b9aed3de7c27 -r 272ed78e59a7 gameServer/HWProtoLobbyState.hs --- a/gameServer/HWProtoLobbyState.hs Thu Aug 04 17:41:07 2011 +0200 +++ b/gameServer/HWProtoLobbyState.hs Thu Aug 04 17:44:55 2011 +0200 @@ -154,6 +154,16 @@ cl <- thisClient banId <- clientByNick banNick return [BanClient 60 reason (fromJust banId) | isAdministrator cl && isJust banId && fromJust banId /= ci] + +handleCmd_lobby ["BANIP", ip, reason, duration] = do + (ci, _) <- ask + cl <- thisClient + return [BanIP ip (readInt_ duration) reason | isAdministrator cl] + +handleCmd_lobby ["BANLIST"] = do + (ci, _) <- ask + cl <- thisClient + return [BanList | isAdministrator cl] handleCmd_lobby ["SET_SERVER_VAR", "MOTD_NEW", newMessage] = do diff -r b9aed3de7c27 -r 272ed78e59a7 hedgewars/ArgParsers.inc --- a/hedgewars/ArgParsers.inc Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/ArgParsers.inc Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 hedgewars/GSHandlers.inc --- a/hedgewars/GSHandlers.inc Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/GSHandlers.inc Thu Aug 04 17:44:55 2011 +0200 @@ -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; //////////////////////////////////////////////////////////////////////////////// @@ -500,9 +496,9 @@ gX := hwRound(Gear^.X); gY := hwRound(Gear^.Y); //doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 5, EXPLAutoSound); - for i:= 0 to 20 do + for i:= 0 to 24 do begin - dX := AngleCos(i * 2) * ((_0_1*(i div 5))) * (GetRandom + _1); + dX := AngleCos(i * 2) * ((_0_15*(i div 5))) * (GetRandom + _1); dY := AngleSin(i * 8) * _0_5 * (GetRandom + _1); Fire := AddGear(gX, gY, gtFlame, 0, dX, dY, 0); Fire^.State := Fire^.State or gsttmpFlag; @@ -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; @@ -733,7 +730,8 @@ exit end; Gear^.X:= int2hwFloat(GetRandom(LAND_WIDTH+1024)-512); - Gear^.Y:= int2hwFloat(750+(GetRandom(50)-25)) + Gear^.Y:= int2hwFloat(750+(GetRandom(50)-25)); + Gear^.State:= Gear^.State or gstInvisible; end end; @@ -2113,6 +2111,7 @@ gX,gY,i: LongInt; sticky: Boolean; vgt: PVisualGear; + tdX,tdY: HWFloat; begin sticky:= (Gear^.State and gsttmpFlag) <> 0; if not sticky then AllInactive := false; @@ -2158,7 +2157,15 @@ if sticky then begin Gear^.Radius := 7; - AmmoShove(Gear, 2, 30); + tdX:= Gear^.dX; + tdY:= Gear^.dY; + Gear^.dX.QWordValue:= 214748365; + Gear^.dY.QWordValue:= 429496730; + Gear^.dX.isNegative:= getrandom(2)<>1; + Gear^.dY.isNegative:= true; + AmmoShove(Gear, 2, 125); + Gear^.dX:= tdX; + Gear^.dY:= tdY; Gear^.Radius := 1 end; if Gear^.Timer > 0 then @@ -2176,10 +2183,18 @@ if ((GameTicks and $1) = 0) then begin Gear^.Radius := 7; - AmmoShove(Gear, 4, 150); + tdX:= Gear^.dX; + tdY:= Gear^.dY; + Gear^.dX.QWordValue:= 214748365; + Gear^.dY.QWordValue:= 429496730; + Gear^.dX.isNegative:= getrandom(2)<>1; + Gear^.dY.isNegative:= true; + AmmoShove(Gear, 6, 100); + Gear^.dX:= tdX; + Gear^.dY:= tdY; Gear^.Radius := 1; end - else if ((GameTicks and $3) = 3) then doMakeExplosion(gX, gY, 6, Gear^.Hedgehog, 0);//, EXPLNoDamage); + else if ((GameTicks and $3) = 3) then doMakeExplosion(gX, gY, 8, Gear^.Hedgehog, 0);//, EXPLNoDamage); //DrawExplosion(gX, gY, 4); if ((GameTicks and $7) = 0) and (Random(2) = 0) then for i:= 1 to Random(2)+1 do @@ -3756,13 +3771,19 @@ or (iterator^.Y < Gear^.Y - r) or (iterator^.Y > Gear^.Y + r) then continue; - +(* +Square check causes fail on many innocent cases. the 3/4s and 1.5 fudge factors... help. +Might still need to remove this section +*) //Will if fit through? //set r to be portal distance - r := Int2hwFloat(Gear^.Radius +1); - - o_x := hwRound(conPortal^.X + conPortal^.dX); - o_y := hwRound(conPortal^.Y + conPortal^.dY); + r := Int2hwFloat(Gear^.Radius * 3 div 4); + o_x := hwRound(conPortal^.X + (conPortal^.dX*_1_5)); + o_y := hwRound(conPortal^.Y + (conPortal^.dY*_1_5)); + //r := Int2hwFloat(Gear^.Radius +1); + + //o_x := hwRound(conPortal^.X + conPortal^.dX); + //o_y := hwRound(conPortal^.Y + conPortal^.dY); r_x := hwRound(conPortal^.X+r*conPortal^.dX); r_y := hwRound(conPortal^.Y+r*conPortal^.dY); rr_x := hwRound(conPortal^.X+r*conPortal^.dX*2); @@ -4391,18 +4412,18 @@ if Gear^.Timer = 0 then begin dec(Gear^.Health); - if (Gear^.Health mod 10) = 0 then + if (Gear^.Health mod 5) = 0 then begin rx := rndSign(getRandom * _0_1); ry := rndSign(getRandom * _0_1); - speed := _0_8 * (_10 / Gear^.Tag); + speed := _0_5 * (_10 / Gear^.Tag); Fire := AddGear(gx, gy, gtFlame, 0, SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx, AngleCos(HHGear^.Angle) * ( - speed) + ry, 0); Fire^.State := Fire^.State or gsttmpFlag; - if (Gear^.Health mod 20) = 0 then + if (Gear^.Health mod 30) = 0 then Fire := AddGear(gx, gy, gtFlame, 0, SignAs(AngleSin(HHGear^.Angle) * speed, HHGear^.dX) + rx, AngleCos(HHGear^.Angle) * ( - speed) + ry, 0); @@ -4470,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 b9aed3de7c27 -r 272ed78e59a7 hedgewars/HHHandlers.inc --- a/hedgewars/HHHandlers.inc Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/HHHandlers.inc Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 hedgewars/PascalExports.pas --- a/hedgewars/PascalExports.pas Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/PascalExports.pas Thu Aug 04 17:44:55 2011 +0200 @@ -80,7 +80,6 @@ procedure HW_zoomReset; cdecl; export; begin ZoomValue:= cZoomVal; - //middleClick:= true; // center the camera at current hog if CurrentHedgehog <> nil then followGear:= CurrentHedgehog^.Gear; @@ -237,8 +236,8 @@ function HW_isAmmoMenuNotAllowed: boolean; cdecl; export; begin; - exit ( (TurnTimeLeft = 0) or (not CurrentTeam^.ExtDriven and (((CurAmmoGear = nil) or - ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) = 0)) and hideAmmoMenu)) ); + exit( (TurnTimeLeft = 0) or (not CurrentTeam^.ExtDriven and (((CurAmmoGear = nil) or + ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) = 0)) and hideAmmoMenu)) ); end; function HW_isWeaponRequiringClick: boolean; cdecl; export; @@ -268,7 +267,7 @@ function HW_isWeaponRope: boolean cdecl; export; begin if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Ammo <> nil) and (CurrentHedgehog^.BotLevel = 0) then - exit (CurrentHedgehog^.CurAmmoType = amRope) + exit(CurrentHedgehog^.CurAmmoType = amRope) else exit(false); end; @@ -298,17 +297,17 @@ function HW_getWeaponNameByIndex(whichone: LongInt): PChar; cdecl; export; begin - exit (str2pchar(trammo[Ammoz[TAmmoType(whichone+1)].NameId])); + exit(str2pchar(trammo[Ammoz[TAmmoType(whichone+1)].NameId])); end; function HW_getWeaponCaptionByIndex(whichone: LongInt): PChar; cdecl; export; begin - exit (str2pchar(trammoc[Ammoz[TAmmoType(whichone+1)].NameId])); + exit(str2pchar(trammoc[Ammoz[TAmmoType(whichone+1)].NameId])); end; function HW_getWeaponDescriptionByIndex(whichone: LongInt): PChar; cdecl; export; begin - exit (str2pchar(trammod[Ammoz[TAmmoType(whichone+1)].NameId])); + exit(str2pchar(trammod[Ammoz[TAmmoType(whichone+1)].NameId])); end; function HW_getNumberOfWeapons:LongInt; cdecl; export; @@ -318,6 +317,7 @@ procedure HW_setWeapon(whichone: LongInt); cdecl; export; begin + if (CurrentTeam = nil) then exit; if (not CurrentTeam^.ExtDriven) and (CurrentTeam^.Hedgehogs[0].BotLevel = 0) then SetWeapon(TAmmoType(whichone+1)); end; @@ -331,11 +331,12 @@ var a : PHHAmmo; slot, index: LongInt; begin - if (CurrentTeam = nil) or - (CurrentHedgehog = nil) or - (CurrentTeam^.ExtDriven) or - (CurrentTeam^.Hedgehogs[0].BotLevel <> 0) then + // nil check + if (CurrentHedgehog = nil) or (CurrentHedgehog^.Ammo = nil) or (CurrentTeam = nil) then exit(-1); + // hog controlled by opponent (net or ai) + if (CurrentTeam^.ExtDriven) or (CurrentTeam^.Hedgehogs[0].BotLevel <> 0) then + exit(1); a:= CurrentHedgehog^.Ammo; for slot:= 0 to cMaxSlotIndex do @@ -354,7 +355,10 @@ function HW_getTurnsForCurrentTeam: LongInt; cdecl; export; begin - exit(CurrentTeam^.Clan^.TurnNumber); + if (CurrentTeam <> nil) and (CurrentTeam^.Clan <> nil) then + exit(CurrentTeam^.Clan^.TurnNumber) + else + exit(0); end; function HW_getMaxNumberOfHogs: LongInt; cdecl; export; diff -r b9aed3de7c27 -r 272ed78e59a7 hedgewars/SDLh.pas --- a/hedgewars/SDLh.pas Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/SDLh.pas Thu Aug 04 17:44:55 2011 +0200 @@ -297,6 +297,7 @@ PSDL_Window = Pointer; PSDL_Renderer = Pointer; PSDL_Texture = Pointer; + PSDL_GLContext= Pointer; {$ENDIF} PSDL_Rect = ^TSDL_Rect; @@ -776,11 +777,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 b9aed3de7c27 -r 272ed78e59a7 hedgewars/VGSHandlers.inc --- a/hedgewars/VGSHandlers.inc Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/VGSHandlers.inc Thu Aug 04 17:44:55 2011 +0200 @@ -258,7 +258,11 @@ if Gear^.FrameTicks <= Steps then DeleteVisualGear(Gear) else + begin dec(Gear^.FrameTicks, Steps); + if (Gear^.FrameTicks < 501) and (Gear^.FrameTicks mod 5 = 0) then + Gear^.Tint:= (Gear^.Tint and $FFFFFF00) or (((Gear^.Tint and $000000FF) * Gear^.FrameTicks) div 500) + end end; //////////////////////////////////////////////////////////////////////////////// diff -r b9aed3de7c27 -r 272ed78e59a7 hedgewars/uAI.pas --- a/hedgewars/uAI.pas Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/uAI.pas Thu Aug 04 17:44:55 2011 +0200 @@ -74,6 +74,9 @@ with CurrentHedgehog^ do a:= CurAmmoType; aa:= a; + + ThreadSwitch(); + repeat if (CanUseAmmo[a]) and ((not isMoved) or ((AmmoTests[a].flags and amtest_OnTurn) = 0)) then @@ -279,10 +282,9 @@ begin WalkMe:= BackMe; Walk(@WalkMe); - if (StartTicks > GameTicks - 1500) and not StopThinking then SDL_Delay(2000); + if (StartTicks > GameTicks - 1500) and not StopThinking then SDL_Delay(1000); if BestActions.Score < -1023 then begin - addfilelog('AI: best score ' + inttostr(bestactions.score)); BestActions.Count:= 0; AddAction(BestActions, aia_Skip, 0, 250, 0, 0); end; diff -r b9aed3de7c27 -r 272ed78e59a7 hedgewars/uAIActions.pas --- a/hedgewars/uAIActions.pas Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/uAIActions.pas Thu Aug 04 17:44:55 2011 +0200 @@ -158,7 +158,7 @@ end else if hwRound(Me^.X) < Param then begin - OutError('AI: WaitXL assert (' + IntToStr(hwRound(Me^.X)) + ' < ' + IntToStr(Param) + ')', false); + //OutError('AI: WaitXL assert (' + IntToStr(hwRound(Me^.X)) + ' < ' + IntToStr(Param) + ')', false); FreeActionsList; exit end @@ -171,7 +171,7 @@ end else if hwRound(Me^.X) > Param then begin - OutError('AI: WaitXR assert (' + IntToStr(hwRound(Me^.X)) + ' > ' + IntToStr(Param) + ')', false); + //OutError('AI: WaitXR assert (' + IntToStr(hwRound(Me^.X)) + ' > ' + IntToStr(Param) + ')', false); FreeActionsList; exit end diff -r b9aed3de7c27 -r 272ed78e59a7 hedgewars/uAIMisc.pas --- a/hedgewars/uAIMisc.pas Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/uAIMisc.pas Thu Aug 04 17:44:55 2011 +0200 @@ -302,7 +302,6 @@ begin bRes:= false; GoInfo.Ticks:= 0; -GoInfo.FallPix:= 0; GoInfo.JumpType:= jmpNone; bX:= hwRound(Gear^.X); bY:= hwRound(Gear^.Y); @@ -371,9 +370,7 @@ function HHGo(Gear, AltGear: PGear; var GoInfo: TGoInfo): boolean; var pX, pY: LongInt; - bRes: boolean; begin -bRes:= false; AltGear^:= Gear^; GoInfo.Ticks:= 0; @@ -391,7 +388,7 @@ begin Goinfo.FallPix:= 0; HHJump(AltGear, jmpLJump, GoInfo); // try ljump instead of fall with damage - exit(bRes) + exit(false) end; Gear^.Y:= Gear^.Y + Gear^.dY; if hwRound(Gear^.Y) > pY then inc(GoInfo.FallPix); @@ -400,14 +397,13 @@ inc(GoInfo.Ticks, 410); Gear^.State:= Gear^.State and not (gstMoving or gstHHJumping); Gear^.dY:= _0; - bRes:= true; HHJump(AltGear, jmpLJump, GoInfo); // try ljump instead of fall - exit(bRes) + exit(true) end; continue end; if (Gear^.Message and gmLeft )<>0 then Gear^.dX:= -cLittle else - if (Gear^.Message and gmRight )<>0 then Gear^.dX:= cLittle else exit(bRes); + if (Gear^.Message and gmRight )<>0 then Gear^.dX:= cLittle else exit(false); if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then begin if not (TestCollisionXwithXYShift(Gear, _0, -6, hwSign(Gear^.dX)) @@ -463,7 +459,7 @@ exit(true); until (pX = hwRound(Gear^.X)) and (pY = hwRound(Gear^.Y)) and ((Gear^.State and gstMoving) = 0); HHJump(AltGear, jmpHJump, GoInfo); -HHGo:= bRes; +HHGo:= false; end; function AIrndSign(num: LongInt): LongInt; diff -r b9aed3de7c27 -r 272ed78e59a7 hedgewars/uConsts.pas --- a/hedgewars/uConsts.pas Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/uConsts.pas Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 hedgewars/uGears.pas --- a/hedgewars/uGears.pas Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/uGears.pas Thu Aug 04 17:44:55 2011 +0200 @@ -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 @@ -1069,7 +1069,7 @@ while i < vampDmg do begin vg:= AddVisualGear(hwRound(CurrentHedgehog^.Gear^.X), hwRound(CurrentHedgehog^.Gear^.Y), vgtHealth); - if vg <> nil then vg^.Frame:= 10; + if vg <> nil then vg^.Tint:= $FF0000FF; inc(i, 5); end; end diff -r b9aed3de7c27 -r 272ed78e59a7 hedgewars/uGearsRender.pas --- a/hedgewars/uGearsRender.pas Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/uGearsRender.pas Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 hedgewars/uLand.pas --- a/hedgewars/uLand.pas Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/uLand.pas Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 hedgewars/uLandGraphics.pas --- a/hedgewars/uLandGraphics.pas Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/uLandGraphics.pas Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 hedgewars/uLandObjects.pas --- a/hedgewars/uLandObjects.pas Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/uLandObjects.pas Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 hedgewars/uRender.pas --- a/hedgewars/uRender.pas Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/uRender.pas Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 hedgewars/uScript.pas --- a/hedgewars/uScript.pas Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/uScript.pas Thu Aug 04 17:44:55 2011 +0200 @@ -986,11 +986,28 @@ LuaError('Lua: Wrong number of parameters passed to SetEffect!') else begin gear := GearByUID(lua_tointeger(L, 1)); - if gear <> nil then + if (gear <> nil) and (gear^.Hedgehog <> nil) then gear^.Hedgehog^.Effects[THogEffect(lua_tointeger(L, 2))]:= lua_toboolean(L, 3); end; lc_seteffect := 0; end; +function lc_geteffect(L : Plua_State) : LongInt; Cdecl; +var gear : PGear; +begin + if lua_gettop(L) <> 2 then + begin + LuaError('Lua: Wrong number of parameters passed to GetEffect!'); + end + else + begin + gear:= GearByUID(lua_tointeger(L, 1)); + if (gear <> nil) and (gear^.Hedgehog <> nil) then + lua_pushboolean(L, gear^.Hedgehog^.Effects[THogEffect(lua_tointeger(L, 2))]) + else + lua_pushboolean(L, false) + end; + lc_geteffect:= 1 +end; function lc_setstate(L : Plua_State) : LongInt; Cdecl; var gear : PGear; @@ -1840,6 +1857,7 @@ lua_register(luaState, 'SetHealth', @lc_sethealth); lua_register(luaState, 'GetHealth', @lc_gethealth); lua_register(luaState, 'SetEffect', @lc_seteffect); +lua_register(luaState, 'GetEffect', @lc_geteffect); lua_register(luaState, 'GetHogClan', @lc_gethogclan); lua_register(luaState, 'GetClanColor', @lc_getclancolor); lua_register(luaState, 'SetClanColor', @lc_setclancolor); diff -r b9aed3de7c27 -r 272ed78e59a7 hedgewars/uTextures.pas --- a/hedgewars/uTextures.pas Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/uTextures.pas Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 hedgewars/uVisualGears.pas --- a/hedgewars/uVisualGears.pas Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/uVisualGears.pas Thu Aug 04 17:44:55 2011 +0200 @@ -245,6 +245,7 @@ vgtHealth: begin dx:= 0.001 * random(45); dy:= 0.001 * (random(20) + 25); + Tint:= $00FF00FF; // default to green if random(2) = 0 then dx := -dx; Frame:= 0; FrameTicks:= random(750) + 1250; @@ -432,7 +433,7 @@ // this layer is on the land level (which is close but behind the screen plane) when stereo 1: while Gear <> nil do begin - tinted:= false; + //tinted:= false; if Gear^.Tint <> $FFFFFFFF then Tint(Gear^.Tint); case Gear^.Kind of vgtSmokeTrace: if Gear^.State < 8 then DrawSprite(sprSmokeTrace, round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.State); @@ -461,7 +462,8 @@ DrawSprite(sprDroplet, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy - 8, Gear^.Frame); vgtBubble: DrawSprite(sprBubbles, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy - 8, Gear^.Frame);//(RealTicks div 64 + Gear^.Frame) mod 8); end; - if (Gear^.Tint <> $FFFFFFFF) or tinted then Tint($FF,$FF,$FF,$FF); + //if (Gear^.Tint <> $FFFFFFFF) or tinted then Tint($FF,$FF,$FF,$FF); + if (Gear^.Tint <> $FFFFFFFF) then Tint($FF,$FF,$FF,$FF); Gear:= Gear^.NextGear end; // this layer is on the screen plane (depth = 0) when stereo @@ -482,14 +484,7 @@ end; vgtSmallDamageTag: DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex); vgtHealthTag: if Gear^.Tex <> nil then DrawCentered(round(Gear^.X) + WorldDx, round(Gear^.Y) + WorldDy, Gear^.Tex); - vgtHealth: begin - tinted:= true; - case Gear^.Frame div 10 of - 0:Tint(0, $FF, 0, round(Gear^.FrameTicks * $FF / 1000)); - 1:Tint($FF, 0, 0, round(Gear^.FrameTicks * $FF / 1000)); - end; - DrawSprite(sprHealth, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy - 8, 0); - end; + vgtHealth: DrawSprite(sprHealth, round(Gear^.X) + WorldDx - 8, round(Gear^.Y) + WorldDy - 8, 0); end; if (cReducedQuality and rqAntiBoom) = 0 then case Gear^.Kind of diff -r b9aed3de7c27 -r 272ed78e59a7 hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Thu Aug 04 17:41:07 2011 +0200 +++ b/hedgewars/uWorld.pas Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 misc/hedgewars.desktop --- a/misc/hedgewars.desktop Thu Aug 04 17:41:07 2011 +0200 +++ b/misc/hedgewars.desktop Thu Aug 04 17:44:55 2011 +0200 @@ -14,6 +14,7 @@ GenericName[pt]=Batalhas entre ouriços GenericName[ru]=Битвы ежей GenericName[sk]=Bojujúci ježkovia +GenericName[cs]=Bojující ježci GenericName[sv]=Stridande igelkottar Icon=hedgewars.png Exec=hedgewars diff -r b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Classes/Appirater.h --- a/project_files/HedgewarsMobile/Classes/Appirater.h Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/Appirater.h Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Classes/Appirater.m --- a/project_files/HedgewarsMobile/Classes/Appirater.m Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/Appirater.m Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Classes/CommodityFunctions.h --- a/project_files/HedgewarsMobile/Classes/CommodityFunctions.h Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/CommodityFunctions.h Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Classes/CommodityFunctions.m --- a/project_files/HedgewarsMobile/Classes/CommodityFunctions.m Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/CommodityFunctions.m Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Classes/CreationChamber.m --- a/project_files/HedgewarsMobile/Classes/CreationChamber.m Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/CreationChamber.m Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Classes/GameConfigViewController.m --- a/project_files/HedgewarsMobile/Classes/GameConfigViewController.m Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/GameConfigViewController.m Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.m --- a/project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.m Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/GeneralSettingsViewController.m Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.m --- a/project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.m Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/HedgewarsAppDelegate.m Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Classes/InGameMenuViewController.m --- a/project_files/HedgewarsMobile/Classes/InGameMenuViewController.m Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/InGameMenuViewController.m Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Classes/MainMenuViewController.m --- a/project_files/HedgewarsMobile/Classes/MainMenuViewController.m Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/MainMenuViewController.m Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Classes/MapConfigViewController.m --- a/project_files/HedgewarsMobile/Classes/MapConfigViewController.m Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/MapConfigViewController.m Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.h --- a/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.h Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.h Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m --- a/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/SchemeWeaponConfigViewController.m Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Classes/ServerSetup.h --- a/project_files/HedgewarsMobile/Classes/ServerSetup.h Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/ServerSetup.h Thu Aug 04 17:44:55 2011 +0200 @@ -30,6 +30,4 @@ @property (nonatomic, retain) NSDictionary *systemSettings; --(BOOL) isNetworkReachable; - @end diff -r b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Classes/ServerSetup.m --- a/project_files/HedgewarsMobile/Classes/ServerSetup.m Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Classes/ServerSetup.m Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj --- a/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Hedgewars.xcodeproj/project.pbxproj Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Resources/GameConfigViewController.xib --- a/project_files/HedgewarsMobile/Resources/GameConfigViewController.xib Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Resources/GameConfigViewController.xib Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Resources/MapConfigViewController-iPad.xib --- a/project_files/HedgewarsMobile/Resources/MapConfigViewController-iPad.xib Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Resources/MapConfigViewController-iPad.xib Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Resources/MapConfigViewController-iPhone.xib --- a/project_files/HedgewarsMobile/Resources/MapConfigViewController-iPhone.xib Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Resources/MapConfigViewController-iPhone.xib Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Resources/Settings/Schemes/Barrel Mayhem.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Barrel Mayhem.plist Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Barrel Mayhem.plist Thu Aug 04 17:44:55 2011 +0200 @@ -44,6 +44,7 @@ + diff -r b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Resources/Settings/Schemes/Clean Slate.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Clean Slate.plist Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Clean Slate.plist Thu Aug 04 17:44:55 2011 +0200 @@ -44,6 +44,7 @@ + diff -r b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Resources/Settings/Schemes/Default.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Default.plist Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Default.plist Thu Aug 04 17:44:55 2011 +0200 @@ -44,6 +44,7 @@ + diff -r b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Resources/Settings/Schemes/Fort Mode.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Fort Mode.plist Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Fort Mode.plist Thu Aug 04 17:44:55 2011 +0200 @@ -44,6 +44,7 @@ + diff -r b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Resources/Settings/Schemes/King Mode.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/King Mode.plist Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/King Mode.plist Thu Aug 04 17:44:55 2011 +0200 @@ -44,6 +44,7 @@ + diff -r b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Resources/Settings/Schemes/Minefield.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Minefield.plist Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Minefield.plist Thu Aug 04 17:44:55 2011 +0200 @@ -44,6 +44,7 @@ + diff -r b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Resources/Settings/Schemes/Pro Mode.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Pro Mode.plist Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Pro Mode.plist Thu Aug 04 17:44:55 2011 +0200 @@ -44,6 +44,7 @@ + diff -r b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Resources/Settings/Schemes/Shoppa.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Shoppa.plist Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Shoppa.plist Thu Aug 04 17:44:55 2011 +0200 @@ -40,6 +40,7 @@ + diff -r b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Resources/Settings/Schemes/Thinking with Portals.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Thinking with Portals.plist Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Thinking with Portals.plist Thu Aug 04 17:44:55 2011 +0200 @@ -30,9 +30,10 @@ + - + diff -r b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Resources/Settings/Schemes/Timeless.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Timeless.plist Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Timeless.plist Thu Aug 04 17:44:55 2011 +0200 @@ -35,7 +35,7 @@ - + @@ -44,6 +44,7 @@ + diff -r b9aed3de7c27 -r 272ed78e59a7 project_files/HedgewarsMobile/Resources/Settings/Schemes/Tunnel Hogs.plist --- a/project_files/HedgewarsMobile/Resources/Settings/Schemes/Tunnel Hogs.plist Thu Aug 04 17:41:07 2011 +0200 +++ b/project_files/HedgewarsMobile/Resources/Settings/Schemes/Tunnel Hogs.plist Thu Aug 04 17:44:55 2011 +0200 @@ -44,6 +44,7 @@ + diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Graphics/AmmoMenu/Ammos.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Graphics/AmmoMenu/Ammos_bw.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos_bw.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Locale/bg.txt --- a/share/hedgewars/Data/Locale/bg.txt Thu Aug 04 17:41:07 2011 +0200 +++ b/share/hedgewars/Data/Locale/bg.txt Thu Aug 04 17:44:55 2011 +0200 @@ -12,7 +12,7 @@ 00:09=Пистолет 00:10=Динамит 00:11=Бухалка -00:12=Shoryuken +00:12=Шурикен 00:13=сек 00:14=Парашут 00:15=Въздушна Атака @@ -45,22 +45,22 @@ 01:04=На Пауза 01:05=Наистина ли напускате (Y/Esc)? 01:06=Внезапна смърт! -01:07=%1 Remaining -01:08=Fuel +01:07=%1 остава +01:08=Гориво ; Event messages -; Hog (%1) died -02:00=%1 has kicked the bucket! -02:00=%1 has seen the light! -02:00=%1 never saw that comming! -; Hog (%1) drowned -02:01=%1 plays submarine! -02:01=%1 mimics the Titanic! -02:01=%1 swims like a stone! +; Hog (%1) умря +02:00=%1 гушна букета! +02:00=%1 видя светлината! +02:00=%1 не видя откъде му дойде! +; Таралежа (%1) се удави +02:01=%1 се прави на подводница! +02:01=%1 имитира Титаник! +02:01=%1 плува като камък! ; Match starts -02:02=Let's fight! -02:02=Armed and ready! -; Hog shot an home run (using the bat and another hog) -02:10=Home Run! -02:10=A bird, a plane, ... -02:10=That one is out! +02:02=Бой! +02:02=Зареден и готов! +; Таралежа отбеляза хоумрън (използвайки бухалка и друг таралеж) +02:10=Х!оумрън +02:10=Птица ли е, самолет ли е, ... +02:10=Този е вън от играта! diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Locale/cs.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Locale/cs.lua Thu Aug 04 17:44:55 2011 +0200 @@ -0,0 +1,176 @@ +locale = { + [":("] = ":(", + ["!!!"] = "!!!", + ["..."] = "...", + ["Accuracy Bonus!"] = "Bonus za přesnost!", + ["a Hedgewars mini-game"] = "Hedgewars mini-hra", -- Space_Invasion, The_Specialists + ["Aiming Practice"] = "Trénink přesnosti", --Bazooka, Shotgun, SniperRifle + ["Ammo"] = "Munice", + ["Ammo Depleted!"] = "Munice vyčerpána!", + ["Ammo Maniac!"] = "Muniční maniak!", + ["Available points remaining: "] = "Zbývá bodů:", + ["Bat balls at your enemies and|push them into the sea!"] = "Odpal míčky na své nepřátele|a odstrč je do vody!", + ["Bat your opponents through the|baskets and out of the map!"] = "Odpal protivníky skrz|koše a pryč z mapy!", + ["Bazooka Training"] = "Trénink s bazukou", + ["Best laps per team: "] = "Nejlepší kola dle týmů:", + ["Best Team Times: "] = "Nejlepší týmový čas:", + ["Bloody Rookies"] = "Zatravení zelenáči", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree + ["Boom!"] = "Bum!", + ["BOOM!"] = "BUM!", + ["Boss defeated!"] = "Velitel poražen!", + ["Boss Slayer!"] = "Velitel zabit!", + ["CAPTURE THE FLAG"] = "ZAJMI VLAJKU", + ["Careless"] = "Neopatrný", + ["Clumsy"] = "Nešikovný", + ["Codename: Teamwork"] = "Krycí jméno: Týmová práce", + ["Complete the track as fast as you can!"] = "Dokonči trasu tak rychle, jak můžeš!", + ["Congratulations!"] = "Gratuluji!", + ["Congratulations! You've eliminated all targets|within the allowed time frame."] = "Gratuluji! Eliminoval jsi všechny cíle|během stanoveného limitu", --Bazooka, Shotgun, SniperRifle + ["Control pillars to score points."] = "Obsaď všechny sloupy, abys dostal body.", + ["Cybernetic Empire"] = "Kybernetická říše", + ["DAMMIT, ROOKIE!"] = "ZATRACENĚ, ZELENÁČI!", + ["DAMMIT, ROOKIE! GET OFF MY HEAD!"] = "ZATRACENĚ, ZELENÁČI! VYPADNI Z MOJI HLAVY!", + ["Dangerous Ducklings"] = "Nebezpečná káčátka", + ["Deadweight"] = "Mrtvá váha", + ["Depleted Kamikaze!"] = "Vyčerpaný sebevrah!", + ["Destroy invaders to score points."] = "Znič nájezdníky k získání bodů.", + ["Drone Hunter!"] = "Lovec trubců!", + ["Drowner"] = "Utopenec", + ["Each turn you get 1-3 random weapons"] = "Každý tah dostaneš 1-3 náhodné zbraně", + ["Each turn you get one random weapon"] = "Každý tah dostaneš jednu náhodnou zbraň", + ["Eliminate all enemies"] = "Znič všechny nepřátele", + ["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "Znič všechny cíle, než ti vyprší čas.|Na tuto misi máš neomezeně munice.", --Bazooka, Shotgun, SniperRifle + ["Eliminate Poison before the time runs out"] = "Odstraň Otravu, než vyprší čas.", + ["Eliminate the Blue Team"] = "Znič modrý tým", + ["Eliminate the enemy specialists."] = "Zabij nepřátelské specialisty", + ["- Eliminate Unit 3378 |- Feeble Resistance must survive"] = "- Znič Jednotku 3378 |- Slabý odpor musí přežít", + ["Enjoy the swim..."] = "Užij si plavání...", + ["[Enter]"] = "[Enter]", + ["Fastest lap: "] = "Nejrychlejší kolo: ", + ["Feeble Resistance"] = "Slabý odpor", + ["Fire"] = "Oheň", + ["Flag captured!"] = "Vlajka zabrána!", + ["Flag respawned!"] = "Vlajka obnovena!", + ["Flag returned!"] = "Vlajka navrácena!", + ["Flags, and their home base will be placed where each team ends their first turn."] = "Vlajky a domovské základny budou umístěny tam, kde každý tým skončí svůj první tah.", + ["GAME BEGUN!!!"] = "HRA ZAČALA!!!", + ["Game Modifiers: "] = "Herní modifikátory: ", + ["GAME OVER!"] = "KONEC HRY!", + ["Game Started!"] = "Hra začala!", + ["Get on over there and take him out!"] = "Běž tamhle a dostaň ho!", + ["Goal"] = "Cíl", + ["GO! GO! GO!"] = "Běž! Běž! Běž!", + ["Good birdy......"] = "Hodný ptáček......", + ["Good luck out there!"] = "Hodně štěstí tam venku!", + ["GOTCHA!"] = "Mám tě!", + ["Hahahaha!"] = "Hahahaha!", + ["Haha, now THAT would be something!"] = "Haha, tak TOHLE bude něco!", + ["Hapless Hogs"] = "Nešťastný ježek", + [" Hapless Hogs left!"] = "Nešťastný ježek odešel!", + ["Heavy"] = "Těžký", + ["Hedgewars-Basketball"] = "Hedgewars-Basketbal", + ["Hedgewars-Knockball"] = "Hedgewars=Vybíjená", + ["Heh, it's not that bad."] = "Heh, to není tak špatné.", + ["Hit Combo!"] = "Opakovaný zásah!", + ["Hmmm..."] = "Hmmm...", + ["Hooray!"] = "Hurá!", + ["Hunter"] = "Lovec", --Bazooka, Shotgun, SniperRifle + ["Instructor"] = "Instruktor", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings + ["invaders destroyed"] = "nájezdník zničen", + ["It's a good thing SUDDEN DEATH is 99 turns away..."] = "To je dobře, že NÁHLÁ SMRT je 99 tahů vzdálená...", + ["Jumping is disabled"] = "Skákání je vypnuto", + ["Kamikaze Expert!"] = "Expert na sebevraždy!", + ["KILLS"] = "ÚLOVKY", + ["[Left Shift]"] = "[Levý shift]", + ["Listen up, maggot!!"] = "Poslouchej, bídný červe!!", + ["|- Mines Time:"] = "|- Časovač min:", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork + ["MISSION FAILED"] = "MISE NEÚSPĚŠNÁ", -- User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork + ["MISSION SUCCESS"] = "MISE ÚSPĚŠNÁ", + ["MISSION SUCCESSFUL"] = "MISE ÚSPĚŠNÁ", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork + ["Movement: [Up], [Down], [Left], [Right]"] = "Pohyb: [nahoru], [dolu], [vlevo], [vpravo]", + ["Multi-shot!"] = "Vícenásobná rána!", + ["Nameless Heroes"] = "Bezejmenní hrdinové", + ["NEW CLAN RECORD: "] = "NOVÝ KLANOVÝ REKORD: ", + ["NEW fastest lap: "] = "NOVÉ nejrychlejší kolo: ", + ["NEW RACE RECORD: "] = "NOVÝ TRAŤOVÝ REKORD: ", + ["NOT ENOUGH WAYPOINTS"] = "NEDOSTATEK NAVIGAČNÍCH BODŮ", + ["Not So Friendly Match"] = "Ne moc přátelský zápas", -- Basketball, Knockball + ["Oh no! Just try again!"] = "Ale ne! Prostě to zkus znovu!", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork + ["Oh no! Time's up! Just try again."] = "Ale ne! Čas vypršel! Zkus to znova!", --Bazooka, Shotgun, SniperRifle + ["Operation Diver"] = "Operace potápěč", + ["Opposing Team: "] = "Protivníkův tým: ", + ["Pathetic Hog #%d"] = "Žalostný ježek #%d", + ["Per-Hog Ammo"] = "Individuální munice", + ["Place more waypoints using [ENTER]"] = "Umísti více navigačních bodů pomocí klávesy [enter]", + ["points"] = "body", -- Control, CTF_Blizzard, Basic_Training_-_Bazooka, Basic_Training_-_Shotgun, Basic_Training_-_Sniper_Rifle + ["Poison"] = "Otrava", + ["Power Remaining"] = "Zbývající energie", + ["Press [Precise] to skip intro"] = "Stiskni [přesnost] pro přeskočení", + ["Race complexity limit reached."] = "Dosažen limit složitosti závodu.", + [" - Return the enemy flag to your base to score | - First team to 3 captures wins | - You may only score when your flag is in your base | - Hogs will drop the flag if killed, or drowned | - Dropped flags may be returned or recaptured | - Hogs respawn when killed"] = " - Dones nepřátelskou vlajku do své základny k získání bodů | - První tým se třemi ukořistěními vítězí | - Můžeš bodovat, pokud je tvá vlajka v základně | - Ježci pustí vlajku, pokud jsou zabiti, nebo utopeni | - Upuštěná vlajka může být navrácena, nebo opět zajmuta | - Ježci jsou po smrti oživeni", + ["Round Limit"] = "Limit kol", + ["Rounds Complete"] = "Dokončených kol", + ["RULES OF THE GAME [Press ESC to view]"] = "PRAVIDLA HRY [Stiskni ESC pro prohlédnutí]", + ["s|"] = "s|", + ["Save as many hapless hogs as possible!"] = "Zachraň tolik nešťastných ježků, kolik jen můžeš!", + ["SCORE"] = "SKÓRE", + ["sec"] = "vt.", -- CTF_Blizzard, TrophyRace, Basic_Training_-_Bazooka, Basic_Training_-_Shotgun, Basic_Training_-_Sniper_Rifle, User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork, Capture_the_Flag + ["See ya!"] = "Uvidíme se!", + ["s"] = "s", -- GaudyRacer, Space_Invasion + ["Shield boosted! +30 power"] = "Štít posílen! +30 energie", + ["Shield Depleted"] = "Štít vyčerpán", + ["Shield is fully recharged!"] = "Štít je plně dobit", + ["Shield Master!"] = "Štítový odborník!", + ["Shield Miser!"] = "Štítový škrt!", + ["Shield OFF:"] = "Štít VYPNUT:", + ["Shield ON:"] = "Štít ZAPNUT:", + ["Shield Seeker!"] = "Hledač štítů!", + ["Shotgun Team"] = "Brokovnicový tým", + ["Shotgun Training"] = "Trénink s brokovnicí", + ["Shots Left: "] = "Zbývá střel: ", -- GaudyRacer, Tumbler + ["Silly"] = "Hloupý", + ["Sinky"] = "Propadlý", + ["%s is out and Team %d|scored a penalty!| |Score:"] = "%s je venku a tým %d|má penaltu!| |Skóre:", -- Basketball, Knockball + ["%s is out and Team %d|scored a point!| |Score:"] = "%s je venku a tým %d|skóruje!| |Skóre:", -- Basketball, Knockball + ["Sniper Training"] = "Odstřelovací trénink", + ["Sniperz"] = "Snajpři", + ["Sponge"] = "Mycí houba", + ["Spooky Tree"] = "Strašidelný strom", + ["STATUS UPDATE"] = "AKTUALIZACE STAVU", -- GaudyRacer, Space_Invasion + ["Switched to "] = "Přepnut na ", + ["Team %d: "] = "Tým %d: ", + ["Team Scores"] = "Týmové skóre", -- Control, Space_Invasion + ["That Sinking Feeling"] = "Potopené pocity", + ["That was pointless."] = "To bylo bezúčelné.", + ["The enemy is hiding out on yonder ducky!"] = "Nepřítel se skrývá na tamté kachničce!", + ["The flag will respawn next round."] = "Vlajka se obnoví příští kolo.", + ["The Nameless One"] = "Bezejmenný", + ["THE SPECIALISTS"] = "SPECIALISTÉ", + ["This rain is really something..."] = "Tenhle déšť je opravdu něco...", + ["TIME: "] = "ČAS: ", + ["Timed Kamikaze!"] = "Časovaná sebevražda!", + ["Time Extended!"] = "Čas prodloužen!", + ["Time Left: "] = "Zbývá času: ", + ["Toggle Shield"] = "Přepnout štít", + ["Toxic Team"] = "Jedovatý tým", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork + ["TRACK COMPLETED"] = "TRASA KOMPLETNÍ", + ["Track Time: "] = "Čas na trati: ", + ["TrophyRace"] = "Závod o trofej", + ["T_T"] = "T_T", + ["Turn Time"] = "Čas kola", + ["Unit 3378"] = "Jednotka 3378", + ["Unlimited Attacks"] = "Neomezeně útoků", + ["User Challenge"] = "Výzva", + ["Use your rope to get from start to finish as fast as you can!"] = "Použij lano a dostaň se ze startu do cíle, jak nejrychleji umíš!", + ["v.06"] = "v.06", + ["Victory for the "] = "Vítězství pro ", -- CTF_Blizzard, Capture_the_Flag + ["Waypoint placed."] = "Navigační bod umístěn.", + ["Weapons Reset"] = "Zbraně obnoveny", + ["WINNING TIME: "] = "VÍTĚZNÝ ČAS: ", + ["You'd almost swear the water was rising!"] = "Přísahal bys, že voda stoupá!", + ["You have SCORED!!"] = "SKÓROVAL jsi!!", + ["You saved"] = "Uložil jsi", + ["You've failed. Try again."] = "Zklamal jsi. Zkus to znovu.", + ["You've reached the goal!| |Time: "] = "Dosáhl jsi cíle!| |Čas: ", + ["'Zooka Team"] = "Bazukáři", + } diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Locale/cs.txt --- a/share/hedgewars/Data/Locale/cs.txt Thu Aug 04 17:41:07 2011 +0200 +++ b/share/hedgewars/Data/Locale/cs.txt Thu Aug 04 17:44:55 2011 +0200 @@ -1,46 +1,57 @@ ; Czech locale 00:00=Granát -00:01=Tříštivý Granát +00:01=Tříštivý granát 00:02=Bazuka -00:03=UFO +00:03=Naváděná včela 00:04=Brokovnice 00:05=Sbíječka 00:06=Přeskočit 00:07=Lano 00:08=Mina -00:09=DEagle +00:09=Pistole Desert Eagle 00:10=Dynamit 00:11=Basebalová pálka -00:12=Shoryuken -00:13=sec +00:12=Ohnivý úder +00:13=vt. 00:14=Padák -00:15=Nálet -00:16=Minový nálet -00:17=Blow Torch +00:15=Vzdušný útok +00:16=Minový útok +00:17=Svářečka 00:18=Výstavba 00:19=Teleportace -00:20=Vyměnit Ježka -00:21=Mortar +00:20=Vyměnit ježka +00:21=Minomet 00:22=Švihnutí bičem -00:23=Kamikaze +00:23=Kamikadze 00:24=Dort 00:25=Omámení 00:26=Bomba z vodního melounu 00:27=Ďábelský ruční granát 00:28=Vrtáková raketa -00:29=Ballgun +00:29=Kuličkomet 00:30=Napalm 00:31=RC Letadlo -00:32=Low Gravity -00:33=Extra Damage -00:34=Invulnerable -00:35=Extra Time -00:36=Laser Sight -00:37=Vampirism -00:38=Sniper Rifle -00:39=Flying Saucer -00:40=Molotov Cocktail +00:32=Nízká gravitace +00:33=Extra zranění +00:34=Nesmrtelnost +00:35=Extra čas +00:36=Laserové zaměřování +00:37=Vampyrismus +00:38=Odsřelovačská puška +00:39=Létající talíř +00:40=Molotov koktejl +00:41=Ptáček +00:42=Přenosný vytvářeč portálů +00:43=Pianový útok +00:44=Olomoucké tvarůžky +00:45=Sinová puška (beta) +00:46=Plamenomet +00:47=Přísavná mina +00:48=Kladivo +00:49=Oživovač +00:50=Vrtákový útok +00:51=Hrouda bláta 01:00=Do boje! 01:01=Kolo nerozhodně @@ -49,22 +60,453 @@ 01:04=Pauza 01:05=Opravdu ukončit (Y/Esc)? 01:06=Náhlá smrt! -01:07=%1 Remaining -01:08=Fuel +01:07=%1 zbývá +01:08=Palivo +01:09=Synchronizuji... +01:10=Použití tohoto nástroje neukončí tvůj tah! +01:11=Tato zbraň nebo nástroj není dosud povolena! +01:12=Poslední kolo před Náhlou smrtí! +01:13=%1 kol do Náhlé smrti! +01:14=Připrav se, %1! ; Event messages ; Hog (%1) died -02:00=%1 has kicked the bucket! -02:00=%1 has seen the light! -02:00=%1 never saw that comming! +02:00=%1 natáhl bačkory! +02:00=%1 viděl světlo na konci tunelu! +02:00=%1 to neviděl přicházet! +02:00=%1 mává na rozloučenou! +02:00=%1 odešel na lepší místo! +02:00=%1 potkal svého tvůrce! +02:00=%1 už nemůže čekat! +02:00=%1 splnil svou povinnost! +02:00=%1 provedl obrovskou oběť! +02:00=%1 je na smrtelné posteli! +02:00=%1 opadal jak listí ze stromů! +02:00=%1 přišel o svůj čas! +02:00=%1 říká mír s vámi! +02:00=%1 nebude nikdy zapomenut! +02:00=%1 má aneurisma! +02:00=%1 po sobě zanechal ženu a děti +02:00=%1 si naposledy vystřelil z bazuky +02:00=%1 odhodil svůj poslední granát +02:00=%1 dopekl svůj poslední dort +02:00=%1 se naposledy zhoupl na laně +02:00=%1 zavolal svou poslední leteckou podporu +02:00=%1 si naposledy pohladil brokovnici +02:00=%1 hodil poslední meloun +02:00=%1 naposledy vytáhl svou pistoli +02:00=%1 schytal příliš mnoho ran +02:00=%1 by opravdu využil bednu se zdravím +02:00=%1 odešel hrát lepší hru +02:00=%1 vztekle opustil život +02:00=%1 zklamal +02:00=Ubohý %1... +02:00=%1 preferuje wormux +02:00=%1 blokoval rány svou tváří +02:00=%1 je hrdina mezi li...ehm...ježky +02:00=%1 našel své místo ve Valhalle +02:00=%1 opustil budovu +02:00=%1 zvolil stejnou cestu jako dinosauři +02:00=%1 dovedl ježky o krok blíže k vymření +02:00=%1 přinesl slzu do mého oka +02:00=%1 je ex-ježek +02:00=%1 hnojí kytičky +02:00=%1 přestal existovat +02:00=Řekněte sbohem %1 +02:00=Pro %1 již není naděje +02:00=%1 stojí za poslední oponou +02:00=Pokud můžeš, zapal si, %1 +02:00=%1 trpí masivní spontánní poruchou existence +02:00=%1 odešel +02:00=%1 je tuhý +02:00=%1 už není +02:00=%1 vypršel +02:00=Odpočívej v pokoji, %1 +02:00=%1 se přidal k zástupům neviditelných +02:00=Sbohem %1, sotva jsme tě poznali! +02:00=%1 je náchylný k zastřelení +02:00=%1 by využil život navíc +02:00=Je v domě doktor? + ; Hog (%1) drowned -02:01=%1 plays submarine! -02:01=%1 mimics the Titanic! -02:01=%1 swims like a stone! -; Match starts -02:02=Let's fight! -02:02=Armed and ready! +02:01=%1 si hraje na ponorku! +02:01=%1 napodobuje Titanik! +02:01=%1 plave jako kámen! +02:01=%1 se vznáší jako cihla! +02:01=%1 našel konec v hlubinách +02:01=Glo glo glo glo +02:01=%1 žbluňkl +02:01=%1 si zapomněl rukávky +02:01=%1 si měl nejprve zaplatit plavecký kurz +02:01=%1 zapomněl doma surf +02:01=%1 je umytý +02:01=%1 je rozmočený ježek +02:01=%1 si zapomněl přinést záchrannou vestu +02:01=%1 udělal žbluňky žbluňk +02:01=%1 spí dnes s rybami +02:01=%1 si myslí, že podvodní fyzika je v této hře na nic +02:01=%1 vypadá žíznivě +02:01=Moře si vzalo %1 +02:01=%1 je ztracen v moři +02:01=%1 si měl přinést podvodní výstroj +02:01=%1 má pohřeb do moře +02:01=%1 má pocit, jako by se potápěl +02:01=%1 trénuje znak +02:01=%1 jde hledat Titanik +02:01=%1 není Ježíš +02:01=%1 hledá Nema +02:01=%1 objevil prasklinu +02:01=Budeš se divit, kolik je tam dole ježků! +02:01=%1 zvedl o kousek hladinu oceánů +02:01=%1 nebude v námořnictvu +02:01=%1 zkouší své ztělesnění mrtvé ryby +02:01=Alespoň tě nespláchli do záchoda, %1 +02:01=Sonic neuměl plavat a ani ty ne, %1 +02:01=%1 chce hrát delfína Ecca +02:01=%1 odešel navštívit akvárium +02:01=%1 našel ztracené město Atlantidu +02:01=%1 míří na hlavní roli v Bioshocku 3 +02:01=Na tvém stylu čubička by ještě chtělo zapracovat, %1 +02:01=%1 si neměl vozit vodní lyže +02:01=%1 nemá rád vodní sporty +02:01=%1 navždy vypouští bubliny +02:01=%1 nemá raft +02:01=%1 si myslí, že slaná voda je dobrá na pleť +02:01=%1 má v ranách slanou vodu +02:01=%1 šel po prkně +02:01=%1 si dává koupel +02:01=%1 je moc moc moc mokrý +02:01=%1 si namočil bodliny +02:01=%1 našel truhlu Mrtvého muže + +; Round starts +02:02=Do boje! +02:02=Nabito a odjištěno! +02:02=Připrav se na rachot! +02:02=Jdeme na to! +02:02=Ať párty začne +02:02=Poslední stojící ježek vyhrává +02:02=Jdeme! +02:02=Válíme! +02:02=Improvizace! +02:02=Na začátku... +02:02=Tohle je začátek něčeho většího +02:02=Vítej v Hedgewars +02:02=Vítej v první linii +02:02=Rozdrť své nepřátele! +02:02=Nechť vyhraje ten lepší ježek +02:02=Vítězství nebo smrt +02:02=Kořist patří vítězům +02:02=Pro prohru zde není místo +02:02=Křič blázne! Vypusť válečné ježky! +02:02=Hedgewars vám přináší Hedgewars.org +02:02=Hodně štěstí, dobrou zábavu +02:02=Buď rád, že proti tobě nehraje Tiyuri +02:02=Buď rád, že proti tobě nehraje unC0Rr +02:02=Buď rád, že proti tobě nehraje Nemo +02:02=Buď rád, že proti tobě nehraje Smaxx +02:02=Buď rád, že proti tobě nehraje Jessor +02:02=Vezmi si vše! +02:02=Poražený bude dělat úklid! +02:02=Nechť bitva tisíciletí započne +02:02=Nechť bitva století započne +02:02=Nechť bitva desetiletí započne +02:02=Nechť bitva roku započne +02:02=Nechť bitva měsíce započne +02:02=Nechť bitva týdne započne +02:02=Nechť bitva dne započne +02:02=Nechť bitva hodiny započne +02:02=Snaž se, jak umíš! +02:02=Rozdrť své nepřátele! +02:02=Hodně štěstí +02:02=Bav se +02:02=Bojuj dobře +02:02=Bojuj špinavě +02:02=Vyhraj se ctí +02:02=Nevzdávej to +02:02=Nikdy se nevzdávej +02:02=Znič je! +02:02=Nechť zabíjení započne! +02:02=Doufám, že jsi připraven na zápas! +02:02=Běž běž běž! +02:02=Ježci, kupředu! +02:02=Nandej jim co proto! +02:02=Neměj strach! +02:02=Buď statečný a dobývej + +; Round ends (win; unused atm) +02:03=... + +; Round ends (draw; unused atm) +02:04=... + +; New health crate +02:05=Přichází pomoc! +02:05=Zdravotník! +02:05=První pomoc z nebes! +02:05=Zdravotní balíček pro tebe +02:05=Dobré zdraví... v podobě krabice! +02:05=Doktor volá +02:05=Čerstvé náplasti! +02:05=Po tomhle se ti udělá lépe +02:05=Flakónek zdraví! Hups, jiná hra +02:05=Vem si mne! +02:05=Zvedni to +02:05=Zdravá svačinka +02:05=Lék na bolest +02:05=Správné dávkování: tolik, kolik jen najdeš! +02:05=Urgentní dodávka +02:05=Zásoby! + +; New ammo crate +02:06=Víc zbraní! +02:06=Posily! +02:06=Nabít a odjistit! +02:06=Jsem zvědavý, jaká zbraň je uvnitř? +02:06=Zásoby! +02:06=Co může být uvnitř? +02:06=Vánoce přišli dřív v Hedgewars +02:06=Dárek! +02:06=Speciální donáška! +02:06=Bylo to peklo, dostat tohle přes celnici +02:06=Ničící hračky z nebe +02:06=Varování! Nebezpečný obsah +02:06=Zvedni to, nebo vyhoď do vzduchu! Volba je na tobě +02:06=Dárečky! +02:06=Mmmmm munice +02:06=Krabice ničivé síly +02:06=Letecká pošta! +02:06=Cokoliv je uvnitř té krabice, není to pizza +02:06=Vem to! +02:06=Je tu schazování zbraní +02:06=Nenech nepřítele to vzít! +02:06=Lesklé nové hračky! +02:06=Záhadná krabice! + +; New utility crate +02:07=Čas na nářadí! +02:07=Tohle by se mohlo hodit... +02:07=Nářadí! +02:07=Využij tuhle bednu +02:07=Pozor tam dole +02:07=Víc nástrojů! +02:07=Nástroje pro všechny! +02:07=Tohle bude dobré! +02:07=Využij to s rozumem +02:07=Ou, tahle bedna je těžká +02:07=Možná bys mohl potřebovat tohle + +; Hog (%1) skips his turn +02:08=%1 je nudný... +02:08=%1 se nemusel obtěžovat +02:08=%1 je líný ježek +02:08=%1 je bez nápadu +02:08=%1 to vzdal +02:08=Kdo zaváhá má smůlu, %1 +02:08=%1 nestydatě přeskakuje +02:08=%1 je opravdu líný +02:08=%1 potřebuje trochu motivovat +02:08=%1 je pacifista +02:08=%1 potřebuje oddych +02:08=%1 odpočívá +02:08=%1 potřebuje vychladnout +02:08=%1 nemá víru ve své schopnosti +02:08=%1 se rozhodl nic nedělat +02:08=%1 nechává nepřátele zničit se navzájem +02:08=%1 by byl na párty neschopný +02:08=%1 se schovává +02:08=%1 se rozhodl nevyužít tuto příležitost +02:08=%1 se rozhodl, že nejlepší věc, kterou může udělat je... nic +02:08=%1 je slaboch +02:08=Kvo kvo kvo, %1 je slepice +02:08=%1 vypadá jako strašpytel +02:08=%1 je zbabělec! +02:08=%1 čeká na náhlou smrt +02:08=%1 není bojovný typ +02:08=%1 pátrá po smyslu života +02:08=%1 stejně nikdy dobře nestřílel +02:08=%1 se v prvé řadě nechtěl dostat do armády +02:08=Přestaň plýtvat našim časem, %1 +02:08=Zklamal jsi mne, %1 +02:08=No tak, umíš víc %1 +02:08=%1 nemá vůli +02:08=%1 má evidentně něco lepšího na práci +02:08=%1 je slušně vystrašený +02:08=%1 usnul + +; Hog (%1) hurts himself only +02:09=%1 by měl trénovat míření! +02:09=%1 se asi nenávidí +02:09=%1 je na špatné straně! +02:09=%1 vypadá jako emo +02:09=%1 držel svou zbraň obráceně +02:09=%1 je trochu sadista +02:09=%1 je masochista +02:09=%1 nemá pud sebezáchovy +02:09=%1 to zkonil +02:09=%1 to pokazil +02:09=To byla špatná rána, %1 +02:09=%1 je s nebezpečnými zbraněmi trochu nezodpovědný +02:09=%1 by měl zvážit, zda nezměnit povolání +02:09=Nejhorší. Střela. V historii! +02:09=Ne ne ne %1, máš střílet na NEPŘÍTELE! +02:09=%1 by měl ničit jen nepřátele +02:09=%1 udělal krůček k sebevraždě +02:09=%1 pomáhá nepříteli +02:09=To bylo hloupé %1 +02:09=%1 žije heslem "Bez bolesti to nejde" +02:09=%1 je zmatený +02:09=%1 se ve svém pomatení poranil +02:09=%1 se ztrapnil +02:09=%1 je nešika! +02:09=%1 je nemotorný +02:09=%1 ukázal nepříteli, čeho je schopen +02:09=%1 nemůže být pořád perfektní +02:09=Neboj %1, nikdo není dokonalý +02:09=%1 to neudělal záměrně +02:09=Já to nikomu neřeknu, %1 +02:09=Jak trapné! +02:09=Jsem si jistý, že to nikdo neviděl %1 +02:09=%1 by si měl přečíst polní příručku +02:09=%1 měl určitě porouchanou zbraň + ; Hog shot an home run (using the bat and another hog) 02:10=Home Run! -02:10=A bird, a plane, ... -02:10=That one is out! +02:10=Je to pták, je to letadlo, ... +02:10=Tenhle je pryč! + +; Hog (%1) has to leave (team is gone) +02:11=%1 musí jít spát! +02:11=%1 je příliš zaneprázdněn na hraní +02:11=Transportuj ho nahoru, Scotty! +02:11=%1 musel jít + +; Weapon Categories +03:00=Časovaný granát +03:01=Časovaný granát +03:02=Balistická zbraň +03:03=Naváděná zbraň +03:04=Puška (víc ran) +03:05=Kopací nástroj +03:06=Akce +03:07=Transportní nástroj +03:08=Bomba reagující na blízkost +03:09=Puška (více ran) +03:10=BUM! +03:11=Bonk! +03:12=Bojové umění +03:13=NEPOUŽITO +03:14=Transportní nástroj +03:15=Letecký útok +03:16=Letecký útok +03:17=Kopací nástroj +03:18=Nástroj +03:19=Transportní nástroj +03:20=Akce +03:21=Balistická zbraň +03:22=Říkej mne Indiano! +03:23=(Opravdu) Bojové umění +03:24=Koláč NENÍ lež! +03:25=Převlek +03:26=Šťavnatý granát +03:27=Vznětlivý granát +03:28=Balistická zbraň +03:29=Balistická zbraň +03:30=Letecký útok +03:31=Dálkově odpalovaná bomba +03:32=Dočasný efekt +03:33=Dočasný efekt +03:34=Dočasný efekt +03:35=Dočasný efekt +03:36=Dočasný efekt +03:37=Dočasný efekt +03:38=Puška (více ran) +03:39=Transportní nástroj +03:40=Zápalný granát +03:41=Velký fanda Vřískotu +03:42=Zde píši poznámku... +; the misspelled "Beethoven" is intentional (-> to beat) - cannot be translated (poor me) +03:43=Osudová symfonie +03:44=Spotřebovat do 1923 +03:45=Síla vědy +03:46=Horké horké horké! +03:47=Strč je na užitečné místo! +03:48=Čas na kladivo! +03:49=Dělá to, co myslíš +03:50=Krtkův fanda + +; Weapon Descriptions (use | as line breaks) +04:00=Zaútoč na nepřítele pomocí obyčejného granátu.|Exploduje jakmile časovač dojde k nule.|1-5: Nastavuje časovač|Útok: Drž pro hození větší silou +04:01=Zaútoč na nepřítele pomocí tříštivého granátu.|Jakmile dojde časovač k nule, roztříští se do|několika střepin.|1-5: Nastavuje časovač|Útok: Drž pro hození větší silou +04:02=Zaútoč na nepřítele pomocí balistického projektilu,|který může být ovlivněn větrem.|Útok: Drž pro vystřelení větší silou +04:03=Vypusť explozivní včelu, která se zaměří na zvolený|cíl. Nestřílej plnou silou, abys vylepšil přesnost.|Kurzor: Zvol cíl|Útok: Drž pro vystřelení větší silou +04:04=Zaútoč na nepřítele pomocí brokovnice s dvěma ranami.|Díky jejímu rozptylu nepotřebuješ přímý zásah, abys|zranil protivníka.|Útok: Výstřel (vícekrát) +04:05=Zakopej se! Použij sbíječku k vykopání díry|pod zem a k dosaženích jiných míst.|Útok: Začni nebo přestaň kopat +04:06=Znuděn? Nechce se ti útočit? Šetříš municí?|Žádný problém! Prostě přeskoč tah, zbabělče!|Útok: Přeskoč tah bez boje +04:07=Překonej velké vzdálenosti pomocí přesně načasovaných|střel lanem. Využij setrvačnosti k postrčení ostatních|ježků nebo na ně pouštěj granáty a podobné zbraně.|Útok: Vystřel nebo pusť lano|Dlouhý skok: Pusť granát nebo podobnou zbraň +04:08=Udrž si nepřátele od těla položením miny v úzkých průlezech|nebo třeba přimo pod jejich nohy. Ujisti se, že máš kam utéct,|ať ji neaktivuješ sám!|Útok: Polož minu k nohám +04:09=Nejsi si jistý mířením? Použij Desert Eagle|a využij jeho čtyř střel.|Útok: Výstřel (vícekrát) +04:10=Hrubá sílá je vždycky možnost. Polož tuto klasickou|výbušninu k nepříteli a utíkej do bezpečí.|Útok: Polož dynamit k nohám +04:11=Zbav se nepřátelských ježků tak, že je odpálíš na jinou|stranu mapy, nebo třeba do vody. Nebo co takhle odpálení|nějakých min ke svým přátelům?|Útok: Odpal všechno před sebou +04:12=Dostaň se blízko a ukaž sílu těchto téměř smrtelných|bojových umění.|Útok: Proveď Ohnivý úder +04:13=NEPOUŽITO +04:14=Bojíš se výšek? Raději si vezmi padák. Rozvine se,|jakmile padáš příliš dlouho a ochrání tvého ježka|před zraněním z pádu.|Útok: Otevři padák|Dlouhý skok: Pusť granát nebo podobnou zbraň +04:15=Zavolej si letadlo a nech ho provést bombový nálet|na nepřátele.|Vlevo/Vpravo: Vyber směr útoku|Kursor: Vyber cílové místo +04:16=Zavolej letadlo a nech ho shodit pár min|do cílové oblasti.|Vlevo/Vpravo: Vyber směr útoku|Kursor: Vyber cílové místo +04:17=Potřebuješ krytí? Vezmi svářečku, vytvoř si tunel|a krytí je na světě.|Útok: Začni nebo přestaň kopat +04:18=Potřebuješ další ochranu nebo přejít skrz neprůchodnou|oblast? Umísti pár traverz, jak potřebuješ.|Vlevo/Vpravo: Vyber traverzu|Kursor: Umísti traverzu na platné místo +04:19=Použita v pravé situaci dokáže být teleportace silnější|než jakákoliv zbraň. Umožní ti zachránit ježka z nebezpečné|situace během vteřiny.|Kursor: Vyber cílové místo +04:20=Umožní ti odehrát tah s jiným ježkem.|Útok: Aktivuj výměnu ježků +04:21=Vystřel granátu podobný projektil, který po dopadu|uvolní ještě několik střepin.|Útok: Vystřel plnou silou +04:22=Nejen pro Indianu Jonese! Bič je zbraň použitelná|v každé situaci. Především, když chceš někoho shodit|z útesu.|Útok: Udeř vše před sebou +04:23=Pokud nemáš co ztratit, mohlo by se ti tohle hodit.|Obětuj svého ježka a vypusť ho zranit vše, co mu bude|stát v cestě. Jeho život bude ukončen krásným výbuchem.|Útok: Vypusť smrtelný a devastující útok +04:24=Veselé narozeniny! Vypusť tento dort a nech ho dojít|hned vedle svých nepřátel a začni opravdu výbušnou párty.|Dort dokáže překonat téměř veškerý terén, ale může tak|vybuchnout dříve.|Útok: Odešli dort nebo ho zastav a nech vybouchnout +04:25=Použij tento převlek, abys nalákal nepřítele ke skoku|za tebou (a do nějaké mezery nebo propasti).|Útok: Použij převlek a zkus navábit jiného ježka +04:26=Hoď tento šťavnatý meloun na své nepřátele. Jakmile časovač|sepne, rozdělí se na několik výbušných kousků.|1-5: Nastav časovač melounu|Útok: Drž pro hození větší silou +04:27=Nechť ohně pekelné stráví tvé odpůrce díky této|pekelné trhavině. Nedostaň se moc blízko k explozi,|jelikož menší oheň může vydržet déle.|Útok: Drž pro hození větší silou +04:28=Krátce po vypuštění této rakety začne vrtat|skrz pevný terén a exploduje, jakmile ji|sepne časovač, nebo po vynoření na povrch.|Útok: Drž pro hození větší silou +04:29=Tohle není nic pro malé děti! Kuličkomet vystřelí spoustu|malých barevných kuliček naplněných výbušninou.|Útok: Vystřel plnou silou|Nahoru/Dolu: Pokračuj v míření +04:30=Zavolej si leteckou podporu a nech ji vypustit napalm.|Se správným mířením dokáže tenhle útok vymazat obrovské|území včetně nešťastných ježků, kteří tam stojí.|Vlevo/Vpravo: Vyber směr útoku|Kursor: Vyber cílové místo +04:31=Dálkově ovládané letadýlko je ideální zbraň na sbírání beden,|nebo útočení na vzdálené ježky. Buď ho naveď mezi nepřátele,|nebo nejprve shoď několik bomb.|Útok: Vypusť letadlo nebo shoď bombu|Dlouhý skok: Nech valkýru vyjet do boje|Vlevo/Vpravo: Řiď letadlo +04:32=Nízká gravitace je mnohem efektivnější než jakákoliv|dieta! Skákej výš a do větších vzdáleností, nebo nech|nepřátele doletět ještě o kus dál.|Útok: Aktivace +04:33=Občas jen potřebuješ tuhle pomůcku ke zvýšení|poškození, které způsobíš.|Útok: Aktivace +04:34=Jsem nedotknutelný!|Útok: Aktivace +04:35=Občas ten čas strašně letí. Vezmi si nějaké vteřiny|navíc na dokončení útoku.|Útok: Aktivace +04:36=Ano, občas jen nemíříš tak dobře. Využij pomoc|moderní technologie.|Útok: Aktivace +04:37=Neboj se denního světla. Tohle bude trvat jen jeden tah, ale|umožní ti to uzdravit se poškozením, které způsobíš ostatním.|Útok: Aktivace +04:38=Odstřelovací puška může být nejničivější zbraní|ve tvém arzenálu, ale na malé vzdálenosti je|značně neefektivní. Poškození, které způsobí|je zvyšuje se vzdáleností od cíle.|Útok: Výstřel (dvakrát) +04:39=Odleť do jiných částí mapy pomocí létajícího talíře.|Tento těžce ovladatelný nástroj ti umožní dostat se|téměř na jakékoliv místo na bojišti.|Útok: Aktivace|Nahoru/Vlevo/Vpravo: Zažehni trysku v daném směru|Dlouhý skok: Pusť granát nebo podobnou zbraň +04:40=Zapal nějakou zem pomocí této lahve naplněné|(už za chvíli) hořící kapalinou.|Útok: Drž pro hození větší silou +; TODO - not very good translation of Birdy (the evidence of nature) +04:41=Známka přírody dokáže být ještě mocnější než létající talíř.|Ptáček může nést tvého ježka a shazovat vejce na nepřátele!|Útok: Aktivace a shazování vajec|Nahoru/Vlevo/Vpravo: Mávnutí křídly v daném směru +04:42=Toto zařízení je schopno v okamžiku přemístit|tebe, tvé nepřátele, nebo tvoji palebnou sílu|mezi dvěma body v krajině. Využij to rozumně|a tvé tažení bude... VELKÝ ÚSPĚCH!|Útok: Vystřel portál|Výměna: Změň barvu portálu +04:43=Udělej ze svého prvního hudebního vystoupení explozivně|úspěšný koncert! Shoď piano z nebes, ale pozor...|někdo na něj musí hrát a to tě může stát život!|Kursor: Vyber cílové místo|F1-F9: Hraj na piano +04:44=Tohle není jen tak ledajaký sýr, to je biologická zbraň!|Najednou nenapáchá příliš škod, ale jakmile časovač dojde|k nule zapáchá tak silně, že otráví každého, kdo si jen|přičichne!|1-5: Nastav časovač|Útok: Drž pro hození větší silou +04:45=Všechny ty hodiny fyziky se konečně vyplatí.|Vypusť ničivou sinovou vlnu na své protivníky.|Dej pozor, tahle zbraň docela kope.|(Tato zbraň není dokončena)|Útok: Výstřel +04:46=Pokryj své protivníky prskajícím tekutým ohněm.|Zahřeje u srdce!|Útok: Aktivace|Nahoru/Dolu: Pokračuj v míření|Vlevo/Vpravo: Změň sílu plivání +04:47=Zdvojnásob zábavu pomocí dvou ostnatých, zákeřných, lepkavých|min. Vytvoř řetězovou reakci nebo se braň (nebo oboje!)|Útok: Drž pro hození větší silou (dvakrát) +04:48=Proč by se měli týrat jen krtci? Mlácení ježků může|být stejná zábava! Jedna dobrá rána tímhle kladivem|uštědří poškození za jednu třetinu ježkova zdraví a|zarazí ho pod zem.|Útok: Aktivace +04:49=Vzkřis své přátele! Ale měj se na pozoru, protože|tohle vzkřísí i tvé protivníky.|Útok: Drž stisknuto pro pomalé oživování|Nahoru: Zrychlí oživování + +; Game goal strings +05:00=Herní módy +05:01=Platí následující pravidla +05:02=Pevnosti: Braň svou pevnost; znič nepřátele! +05:03=Nízká gravitace: Koukej, kam šlapeš +05:04=Nesmrtelnost: Ježci jsou (skoro) nesmrtelní +05:05=Vampyrismus: Ježci budou oživeni poškozením, které způsobí +05:06=Karma: Ježci trpí stejně jako jejich oběť +05:07=Chraň krále: Nenech svého krále zemřít.|Umísti krále: Umísti chráněný bod pro svého krále +05:08=Umísti ježky: Umísti ježky před začátkem hry +05:09=Dělostřelectvo: Ježci nemohou změnit polohu chůzí +05:10=Nezničitelný terén: Většina zbraní neničí terén +05:11=Sdílená munice: Všechny týmy stejné barvy sdílí munici +05:12=Časovač min: Miny vybuchnou za %1 vt. +05:13=Časovač min: Miny vybuchnou okamžitě +05:14=Časovač min: Miny vybuchnou za 0 - 5 vteřin +05:15=Změna poškození: Všechny zbraně způsobují %1% poškození +05:16=Zdraví všech ježků je obnoveno na konci každého tahu +05:17=Počítačem ovládaní ježci jsou oživeni po smrti +05:18=Neomezeně útoků +05:19=Zbraně jsou obnoveny na konci tahu +05:20=Zbraně nejsou sdíleny mezi ježky diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Locale/fr.lua diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Locale/fr.txt --- a/share/hedgewars/Data/Locale/fr.txt Thu Aug 04 17:41:07 2011 +0200 +++ b/share/hedgewars/Data/Locale/fr.txt Thu Aug 04 17:44:55 2011 +0200 @@ -1,7 +1,7 @@ ; French locale 00:00=Grenade -00:01=Grenade à fragments +00:01=Grenade à fragmentation 00:02=Bazooka 00:03=Abeille Missile 00:04=Fusil @@ -111,6 +111,8 @@ 02:00=Adieu %1, nous tenions beaucoup a toi ! 02:00=%1 avait une faible tolérance aux coups à balles 02:00=%1 aurait dû utiliser une vie supplémentaire +02:00=%1 rejoint ses ancêtres +02:00=%1 sera muet comme une tombe ; Hog (%1) drowned 02:01=%1 joue au sous-marin ! 02:01=%1 imite le Titanic ! @@ -157,6 +159,9 @@ 02:01=%1 prend un bain 02:01=%1 est tout mouillé 02:01=%1 trouve que l'eau est un peu trop froide +02:01=%1 flotte comme une enclume +02:01=%1 a oublié son masque et ses palmes +02:01=%1 a vu une sirène ! ; Match starts 02:02=Aux armes ! 02:02=Prêts à combattre ! @@ -177,6 +182,7 @@ 02:02=Sois heureux, tu n'est pas contre Nemo ! 02:02=Sois heureux, tu n'est pas contre Smaxx ! 02:02=Sois heureux, tu n'est pas contre Jessor ! +02:02=Rien à perdre, tout à gagner ! 02:02=Donnez tout ce que vous avez ! 02:02=Les perdants font le ménage ! 02:02=Que la bataille du millénaire commence ! @@ -200,7 +206,10 @@ 02:02=Hérissons, en avant ! 02:02=N'ayez pas peur ! 02:02=Soyez braves ! +02:02=3,2,1... Massacrez ! +02:02=Ave Caesar, Morituri te salutant ! 02:02=Combattez jusqu'à la fin ! +02:02=Que la force soit avec vous ! ; Round ends (win; unused atm) 02:03=... ; Round ends (draw; unused atm) @@ -220,6 +229,9 @@ 02:05=Meilleur dosage: autant que vous pouvez ! 02:05=Livraison urgente 02:05=Ravitaillements ! +02:05=Voilà la Croix Rouge ! +02:05=Médecin Sans Frontière à votre service ! +02:05=Hausse de l'espérance de vie en vue ; New ammo crate 02:06=Plus d'armes ! 02:06=Du renfort ! @@ -241,6 +253,9 @@ 02:06=Ne laisse pas l'ennemi prendre ça ! 02:06=Des nouveaux jouets flambant neufs ! 02:06=Une boîte mystérieuse ! +02:06=L'espoir fait vivre +02:06=Surement quelquechose d'utile +02:06=Que la chance soit avec vous ! ; New utility crate 02:07=Boite à outils ! 02:07=Ça peut être pratique... @@ -250,6 +265,10 @@ 02:07=Ça devrait être bien ! 02:07=Utilisez-le avec précaution 02:07=Vous devriez avoir besoin de ça +02:07=C'est toujours bon à prendre +02:07=Elle s'est peut être blessée en tombant, vous devriez aller la voir +02:07=Bob le bricoleur sait être généreux +02:07=Le moment donné par le hasard vaut mieux que le moment choisi ; Hog (%1) skips his turn 02:08=%1 est une lopette... 02:08=%1 est trooooop rasant... @@ -285,6 +304,12 @@ 02:08=%1 a apparemment mieux a faire 02:08=%1 est mort de peur 02:08=%1 s'est endormi +02:08=%1 est timide +02:08=%1 ne voulait pas quitter sa maman +02:08=%1 a peur de se blesser +02:08=Les gens heureux n'ont pas besoin de se presser selon %1 +02:08=Ne crains pas d'avancer lentement, crains seulement de t'arrêter %1 +02:08=Patience ! Avec le temps, l'herbe devient du lait ; Hog (%1) hurts himself only 02:09=%1 devrait apprendre à viser ! 02:09=%1 s'en veut @@ -315,12 +340,17 @@ 02:09=Je suis sûr que personne n'a vu cela %1 02:09=%1 a besoin de réviser son manuel de terrain 02:09=L'arme de %1 fonctionne clairement mal -02:00=%1 aurait dû dire NON à la drogue +02:09=%1 aurait dû dire NON à la drogue +02:09=%1 se cache +02:09=%1 ne peut pas échapper à son destin +02:09=%1 a pris son arme dans le mauvais sens +02:09=%1 est surement daltonien ; Hog shot an home run (using the bat and another hog) 02:10=Home Run ! 02:10=C'est un oiseau ! C'est un avion ! ... 02:10=Hors du parc ! - +02:10=Coup gagnant ! +02:10=I believe I can FLY ! I believe I can... *boum* ; Weapon Categories 03:00=Grenade à retardement 03:01=Grenade à retardement @@ -368,54 +398,54 @@ ; Weapon Descriptions (use | as line breaks) 04:00=Attaquez vos ennemis en utilisant une simple grenade.|Elle explosera une fois que le compte à rebours atteindra zéro.|1-5: Lancez le minuteur de la grenade|Attaque : maintenez pour la lancer avec plus de force 04:01=Attaquez vos ennemis en utilisant une bombe à retardement.|Elle se désintégrera en de multiples petites bombes |quand le compte à rebours atteindra zéro|1-5 : Lancez le minuteur de la grenade|Attaque : maintenez pour la lancer avec plus de force -04:02=Attaquez vos ennemis en utilisant un missile balistique|qui pourrait subir l'influence du vent.|Attaque : maintenez pour tirer avec plus de force +04:02=Attaquez vos ennemis en utilisant un missile balistique|subissant l'influence du vent.|Attaque : maintenez pour tirer avec plus de force 04:03=Lancez une bombe téléguidée qui se verrouillera|sur la cible choisie. Ne tirez pas à pleine puissance|pour une meilleure précision.|Curseur : choix de la cible|Attaque : maintenez pour tirer avec plus de force -04:04=Attaquez votre ennemi en utilisant un pistolet à deux coups.|Grâce à son pouvoir de dispersion vous n'avez pas besoin de frapper directement sur la cible|pour toucher votre ennemi.|Attaque : tirez (coups multiples) +04:04=Attaquez votre ennemi en utilisant un fusil à deux coups.|Grâce à son pouvoir de dispersion vous n'avez pas besoin de frapper directement sur la cible|pour toucher votre ennemi.|Attaque : tirez (coups multiples) 04:05=Descendez sous terre ! Utilisez le marteau-piqueur pour creuser un trou|dans le sol et atteindre d'autres zones.|Attaque : commencez/achevez de creuser 04:06=Vous en avez marre ? Pas moyen d'attaquer ? Vous économisez vos munitions ?|Pas de problèmes ! Passez simplement votre tour, espèce de lâche !|Attaque : Passez votre tour sans combattre -04:07=Franchissez les grandes distances en utilisant par intervalles la |corde ninja. Utilisez votre élan pour vous lancer contre les autres hérissons|ou balancez des grenades ou autres armes offensives sur eux.|Attaque : Tirer ou lâchez la corde ninja|Saut longue distance : jetez des grenades ou des armes similaires -04:08=Maintenez vos ennemis à distance en laissant une mine|dans les passages étroits ou juste sous leurs pieds. Assurez-vous|que vous pouvez vous sauver avant de déclencher la grenade !|Attaque : lâchez la grenade à votre pied -04:09=Vous n'êtes pas sûr de ce que vous voulez ? Utilisez l'Aigle| du Désert pour attaquer en utilisant vos quatre coups.|Attaque : tirez (coups multiples) -04:10=La force brute est toujours une possibilité. Lancez cet explosif|classique sur vos ennemis et retirez-vous.|Attaque : Lâchez la dynamite à vos pieds -04:11=Débarrassez-vous des hérissons ennemis en leur donnant des coups pour les chasser |au-delà de la frontière ou en les jetant à l'eau. Ou bien préférez-vous|envoyer quelques mines sur vos ennemis ?|Attaque : donnez des coups sur tout ce qui bouge devant vous. +04:07=Franchissez les grandes distances en utilisant par intervalles la |corde ninja. Utilisez votre élan pour vous lancer contre les autres hérissons,|balancez leurs des grenades ou d'autres armes explosives.|Attaque : Tirer ou lâchez la corde ninja|Saut longue distance : jetez des grenades ou des armes similaires +04:08=Maintenez vos ennemis à distance en laissant une mine|dans les passages étroits ou juste sous leurs pieds. Assurez-vous|que vous pouvez vous sauver avant son déclenchement !|Attaque : lâchez la mine à vos pieds +04:09=Vous n'êtes pas sûr de ce que vous voulez ? Utilisez l'Aigle| du Désert pour attaquer en utilisant vos quatre coups. Poussez dans l'eau vos ennemis ou transpercez leur défense|Attaque : tirez (coups multiples) +04:10=La force brute est toujours une possibilité. Lancez cet explosif|classique sur vos ennemis et prenez le temps de vous retirer.|Attaque : Lâchez la dynamite à vos pieds +04:11=Débarrassez-vous des hérissons ennemis en leur donnant des coups pour les chasser |vers d'autres horizons ou en les jetant à l'eau. Ou bien préférez-vous|envoyer quelques tonneaux ou mines sur vos ennemis ?|Attaque : frappez un bon coup sur tout ce qui bouge. 04:12=Allez au combat rapproché corps à corps pour utiliser toute la force presque mortelle de ces arts martiaux.|Attaque : lancez un coup de poing fulgurant 04:13=non-utilisé 04:14=Vous avez le vertige ? Prenez donc un parachute.|Il se déploiera lorsque|vous serez tombé trop loin|et épargnera le choc de la chute à votre hérisson.|Attaque: Dépliez le parachute -04:15=Appelez un avion pour attaquer vos ennemis|en utilisant le bombardement.|Gauche/Droite : Déterminez la direction de l'attaque|Curseur : Choisissez la zone cible +04:15=Appelez le 3615 BOMBE pour commander une frappe aérienne dévastatrice sur vos ennemis.|Gauche/Droite : Déterminez la direction de l'attaque|Curseur : Choisissez la zone cible 04:16=Appelez un avion qui enverra plusieurs mines|sur la zone cible.|Gauche/Droite : Détermine la direction de l'attaque|Curseur : Sélectionnez la zone cible -04:17=vous avez besoin d'un abri ? Utilisez la lampe-torche pour creuser|un tunnel dans le sol pour vous garantir |un bon abri.|Attaque : Commencez/cessez de creuser. -04:18=Vous avez besoin de vous protéger davantage ou de franchir un |obstacle infranchissable ? Placez quelques poutrelles|où vous voulez .|Gauche/Droite : Choisissez la poutrelle à placer|Curseur : Placez la poutrelle dans la bonne position +04:17=vous avez besoin d'un abri ? de pousser quelques ennemis dans l'eau ? Utilisez le chalumeau| pour creuser un tunnel dans le sol, vous protéger ou faire de nouvelles victimes.|Attaque : Commencez/cessez de creuser. +04:18=Vous avez besoin de vous protéger davantage ou de passer un |obstacle infranchissable ? Placez quelques poutrelles|où vous voulez .|Gauche/Droite : Choisissez la poutrelle à placer|Curseur : Placez la poutrelle dans la bonne position 04:19=La téléportation utilisée au bon moment|peut être bien plus efficace|que la plupart des autres armes|car elle vous permet de sauver des hérissons de situations dangereuses|en quelques secondes.|Curseur : Choisissez la zone cible 04:20=Vous permet de jouer la partie en cours avec|un hérisson différent.|Attaque : Activez le changement de hérisson -04:21=Tirez une grenade balistique qui va|envoyer de multiples bombes au point d'impact.|Attaque : Tirez à pleine puissance -04:22=Ce n'est pas réservé à Indiana Jones! Le fouet est une|arme bien utile dans plusieurs situations. Particulièrement|quand vous devez hisser quelqu'un en haut d'une falaise.|Attaque : Frappez tout ce qui bouge devant vous -04:23=Si vous n'avez rien à perdre, voilà qui peut être |bien pratique. Sacrifiez votre hérisson en le lançant dans une direction| particulière et en heurtant tout sur son passage|avant d'exploser finalement.|Attaque : Lancer l'attaque mortelle et dévastatrice +04:21=Tirez un missile balistique qui va|envoyer de multiples bombes au point d'impact.|Attaque : Tirez à pleine puissance +04:22=Ce n'est pas réservé à Indiana Jones ! Le fouet est une|arme bien utile dans plusieurs situations. Particulièrement|quand vous devez hisser quelqu'un en haut d'une falaise.|Attaque : Frappez tout ce qui bouge devant vous +04:23=Si vous n'avez rien à perdre, voilà qui peut être |bien pratique. Sacrifiez votre hérisson en le lançant dans une direction| particulière. Il heurtera tout sur son passage avant |d'exploser finalement.|Attaque : Lancer l'attaque mortelle et dévastatrice 04:24=Joyeux anniversaire ! Lancez ce gâteau, faites-le atterrir|tout près de vos ennemis et offrez-leur une fête explosive.|Le gâteau peut franchir presque tous les environnements mais|il se peut qu'il explose à mi-chemin.|Attaque : Lancez le gâteau ou bien faites-le s'arrêter et exploser -04:25=Utilisez le déguisement pour amener vos ennemis à sauter vers|votre hérisson (et donc vers un piège ou un trou).|Attaque : Utilisez le déguisement et tentez de séduire un autre hérisson -04:26=Envoyez cette pastèque explosive à la tête de vos ennemis. Lorsque|le compte à rebours s'achève, elle se désintègrera en de multiples fragments explosifs|1-5 : Lancer le compte à rebours|Attaque : Maintenez pour tirer avec plus de puissance -04:27=Faites tomber un déluge de feu sur vos adversaires en utilisant|cet explosif dévastateur.|Ne vous tenez pas trop prêt|de l'impact car les petits feux peuvent durer longtemps|Attaque : Maintenez pour tirer avec plus de puissance -04:28=Peu après le lancement de ce missile, il va se mettre|à creuser le sol le plus résistant et va exploser|une fois son détonateur amorcé, sinon il refait surface.|Attaque : Maintenez pour tirer avec plus de puissance +04:25=Arme de séduction massive ! Utilisez le déguisement pour amener vos ennemis| à sauter vers votre hérisson (et donc vers un piège ou un trou).|Attaque : Utilisez le déguisement et tentez de séduire un autre hérisson +04:26=Envoyez cette pastèque explosive à la tête de vos ennemis. Une fois le compte-à-rebours achevé, elle se désintégrera en de multiples fragments explosifs|1-5 : Lancer le compte à rebours|Attaque : Maintenez pour tirer avec plus de puissance +04:27=Faites tomber un déluge de feu sur vos adversaires en utilisant|cet explosif dévastateur.|Ne vous tenez pas trop prêt|de l'impact car les flammes peuvent durer longtemps|Attaque : Maintenez pour tirer avec plus de puissance +04:28=Peu après le lancement de ce missile, il va se mettre|à creuser le sol le plus résistant et explosera|une fois son détonateur amorcé ou une fois atteint l'air libre.|Attaque : Maintenez pour tirer avec plus de puissance 04:29=Ce n'est pas un jouet pour les enfants ! La mitrailleuse envoie|des centaines de petites balles colorées explosives.|Attaque : Tirez à pleine puissance|Haut/Bas : Continuez à tirer 04:30=Appelez un avion pour larguer une puissante giclée de napalm.|En la menant correctement cette attaque peut éradiquer|des zones entières du paysage, et notamment les hérissons qui auraient la malchance de se trouver là.|Gauche/Droite: Déterminez la direction de l'attaque|Curseur : Choisissez la zone cible -04:31=L'avion télécommandé est l'arme idéale pour récolter des coupes ou|attaquer des hérissons très éloignés. Vous pouvez soit le lancer au milieu de vos adversaires|bombarder auparavant.|Attaque : Lancez l'avion ou larguez des bombes|Saut longue distance : laissez les valkyries entrer dans la danse guerrière|Haut/Bas : Pilotez l'avion -04:32=La fable gravité est plus efficace que n'importe quel régime ! Sautez|plus haut et franchissez de plus grandes distances ou bien faites voler vos ennemis |voltiger encore plus loin.|Attaque : Activez +04:31=L'avion télécommandé est l'arme idéale pour récolter des boites ou|attaquer des hérissons très éloignés. Une fois vos ennemis bombardés, vous pourrez lancer votre avion sur l'ennemi dans une explosion incendiaire.|Attaque : Lancez l'avion ou larguez des bombes|Saut longue distance : laissez les valkyries entrer dans la danse guerrière|Haut/Bas : Pilotez l'avion +04:32=La fable gravité est plus efficace que n'importe quel régime ! Sautez|plus haut et franchissez de plus grandes distances ou bien faites voltiger vos ennemis |encore plus loin.|Attaque : Activez 04:33=Parfois vous avez besoin d'un petit coup de pouce supplémentaire|pour gérer les dégâts.|Attaque : Activez 04:34=Personne ne peut me toucher !|Attaque : Activez 04:35=Parfois le temps passe trop vite. Grappillez quelques secondes de plus pour terminer votre attaque|Attaque : Activez -04:36=Eh bien, parfois vous ratez complètement la cible. Demandez plutôt l'aide|de la technologie actuelle la meilleure.|Attaque : Activez -04:37=Ne craignez pas la lumière du jour. Elle ne durera qu'une manche|mais vous permettra de repérer les dégâts que vous avez faits aux|autres hérissons.|Attaque : Activez -04:38= Le fusil à lunettes peut être une de armes les plus dévastatrices|de tout votre arsenal, toutefois il est totalement inefficace|en combat rapproché. Les dommages qu'il cause augmentent suivant|la distance de la cible.|Attaque : Tirez (deux fois) -04:39=Volez vers d'autres secteurs de la carte en utilisant une soucoupe|volante. Ce moyen de transport pas facile à dompter est capable de vous|emporter vers presque tous les lieux du champ de bataille|Attaque : Activer|Haut/Gauche/Droite : appliquez la force dans une direction +04:36=Eh bien, parfois vous ratez complètement la cible. Demandez plutôt de l'aide|à la technologie de pointe actuelle pour bien viser.|Attaque : Activez +04:37=Ne craignez pas la lumière du jour. Rafraichissez vous |d'un peu de sang en récupérant des points de vie sur les dégats faits aux ennemis.|Attaque : Activez +04:38= Le fusil à lunette peut être une des armes les plus dévastatrices|de tout votre arsenal, toutefois il est totalement inefficace|en combat rapproché. Les dommages qu'il cause augmentent suivant|la distance de la cible.|Attaque : Tirez (deux fois) +04:39=Volez vers d'autres secteurs de la carte en utilisant une soucoupe|volante. Ce moyen de transport, pas facile à dompter, vous|emportera vers presque tous les horizons du champ de bataille|Attaque : Activer|Haut/Gauche/Droite : Prenez de l'altitude et controllez votre direction 04:40=Mettez le feu à un territoire en utilisant cette bouteille remplie|de liquide inflammable.|Attaque : maintenez pour tirer avec plus de force -04:41=Une arme naturelle qui peut suffire à dégommer même la soucoupe|volante. Le piaf peut transporter votre hérisson et|balancer des œufs sur vos ennemis !|Attaque : Activez et larguez des œufs|Haut/Gauche/Droite: voltigez vers une direction. -04:42=Ce fusil à portails est capable de vous transporter instantanément,| ainsi que vos ennemis ou des armes entre deux points du terrain. |Utilisez-le intelligemment et votre campagne sera un ... GRAND SUCCÈS !|Attaque : Crée un portail|Modificateur : Change la couleur du portail -04:43=Faites de vos débuts musicaux un succès explosif !| Lâchez un piano depuis les cieux, mais attention ... quelqu'un doit|jouer dessus, et cela pourrait lui coûter sa vie !|Curseur : Choix de la cible|F1-F9 : Jouer du piano -04:44=Ce n'est pas juste un fromage, c'est une arme biologique !|Il ne provoquera de gros dommages une fois que le compteur|atteindra zéro mais il empoisonnera tous les malchanceux touchés par l'odeur !|1-5 : Lancez le minuteur de la grenade|Attaque : maintenez pour la lancer avec plus de force -04:45=Tous ces cours de physique ont finalement payé,|lancez une onde Sinus dévastatrice à vos ennemis.|Attention au recul ! (cette arme est incomplète)|Attaque : Activez -04:46=Recouvrez vos ennemis de sifflantes flammes liquides.|Hauts les cœurs !|Attaque : Activez|Haut/Bas : Continuez à viser|Droite/Gauche : Changer la puissance de tir -04:47=Doublez le fun avec deux mines, piquantes, furtives et collantes.|Provoquez une réaction en chaine ou défendez-vous ! (ou les deux)|Attaque : maintenez pour tirer avec plus de force (deux fois) -04:48=Pourquoi les taupes auraient tous le fun ?|Un bon coup de ce marteau enlèvera un tiers de la santé du hérisson et l'enverra dans le sol|Attaque : Activez -04:49=Ressuscite vos amis !Mais méfiez-vous, cela ressuscite également vos ennemis.|Attaque : Maintenez attaque pressée pour ressusciter lentement|Haut : Accélérer la résurrection +04:41=Une arme naturelle qui peut suffire à remplacer la soucoupe volante. |Cet oiseau a du manger un vieux fromage pourri (du Limburger vous dites ?) car ses oeufs ont comme quelquechose de ... toxique. Le piaf peut donc transporter votre hérisson et|balancer des œufs sur vos ennemis !|Attaque : Activez et larguez des œufs|Haut/Gauche/Droite: voltigez vers une direction. +04:42=Ce fusil à portails est capable de transporter instantanément hérissons,|tonneaux ou mines entre deux points du terrain. |Utilisez-le intelligemment et votre campagne sera un ... GRAND SUCCÈS !|Attaque : Crée un portail|Modificateur : Change la couleur du portail +04:43=Faites de vos débuts musicaux un succès explosif !| Lâchez un piano depuis les cieux, mais attention ... si quelqu'un doit|jouer dessus, cela pourrait lui coûter la vie !|Curseur : Choix de la cible|F1-F9 : Jouer du piano +04:44=Ce n'est pas juste un fromage, c'est une arme bactériologique !|Si il ne provoque que de faibles dommages, sa puissance se trouve dans sa durée. Il empoisonnera tous les malchanceux touchés par l'odeur et réduira leur vie à l'agonie !|1-5 : Lancez le minuteur de la grenade|Attaque : maintenez pour la lancer avec plus de force +04:45=Tous ces cours de physique ont finalement payé,|lancez une onde Sinus dévastatrice sur vos ennemis.|Attention au recul ! (cette arme est incomplète)|Attaque : Activez +04:46=Aspergez vos ennemis de flammes liquides ou creusez vous un passage dans le sol.|Hardi !|Attaque : Activez|Haut/Bas : Continuez à viser|Droite/Gauche : Changer la puissance de tir +04:47=Doublez le fun avec deux mines, piquantes, furtives et collantes.|Provoquez une réaction en chaine dévastatrice et/ou défendez-vous ! |Attaque : maintenez pour tirer avec plus de force (deux fois) +04:48=Outre une bonne bosse, un bon coup de ce marteau enlèvera un tiers de la santé |du hérisson ennemi et l'enfoncera dans le sol ou dans l'eau comme un vulgaire asticot !|Attaque : Activez +04:49=Ressuscite vos amis oubliés six pieds sous terre ! Mais méfiez-vous, ressuscite également vos ennemis. |Attaque : Maintenez attaque pressée pour ressusciter lentement|Haut : Accélérer la résurrection ; Game goal strings 05:00=Modes de jeu @@ -423,8 +453,8 @@ 05:02=Forts : Défendez votre forteresse ; exterminez vos ennemis ! 05:03=Faible gravité : Attention à vos mouvements 05:04=Invulnérabilité : Les hérissons sont (presque) invulnérables -05:05=Vampirisme : Les hérissons seront guéris de leurs blessures -05:06=Karma: Les hérissons seront victimes de leurs blessures +05:05=Vampirisme : Les hérissons récupèrent des points de vie par les dégats qu'ils infligent +05:06=Karma: Les hérissons sont victimes des blessures qu'ils infligent 05:07=Protégez le roi : Ne laissez pas mourir le roi !|Placez le roi : Choisissez un point de départ sécurisé pour le roi 05:08=Placez les hérissons : Placez vos hérissons avant le début de la partie 05:09=Artillerie : Les hérissons ne peuvent pas se déplacer pour changer de place @@ -432,6 +462,6 @@ 05:11=Munitions partagées : Toutes les équipes de la même couleur partagent leurs munitions 05:12=Mines à retardement : Les mines exploseront après %1 seconde(s) 05:13=Mines à retardement : Les mines explosent immédiatement -05:14=Mines à retardement : Les mines exploseront dans un délai entre 0 et 3 secondes +05:14=Mines à retardement : Les mines exploseront dans un délai compris entre 0 et 3 secondes 05:15=Modificateur de dégâts : Toutes les armes feront %1% de dégâts diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Locale/hedgewars_bg.ts --- a/share/hedgewars/Data/Locale/hedgewars_bg.ts Thu Aug 04 17:41:07 2011 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_bg.ts Thu Aug 04 17:44:55 2011 +0200 @@ -5,18 +5,18 @@ AmmoSchemeModel new - Нов отбор + Нов copy of - + копие на FreqSpinBox Never - + Никога Every %1 turn @@ -30,11 +30,11 @@ GameCFGWidget Edit schemes - + Редактиране на схемите Edit weapons - + Редактиране на оръжията Error @@ -46,26 +46,26 @@ When this option is enabled selecting a game scheme will auto-select a weapon - + Когато тази настройка е включена, при избирането на игрова схема автоматично ще се избере оръжие HWChatWidget %1 *** %2 has been removed from your ignore list - + %1 *** %2 беше премахнат от списъка с игнорирани %1 *** %2 has been added to your ignore list - + %1 *** %2 беше добавен към списъка с игнорирани %1 *** %2 has been removed from your friends list - + %1 *** %2 беше премахнат от списъка с приятели %1 *** %2 has been added to your friends list - + %1 *** %2 беше добавен към списъка с приятели @@ -96,17 +96,17 @@ DefaultTeam - + СтандартенОтбор Hedgewars Demo File File Types - + Файл с демо на Hedgewars Hedgewars Save File File Types - + Файл със запазена игра на Hedgewars @@ -160,31 +160,31 @@ Type - + Тип Small tunnels - + Малки тунели Medium tunnels - + Средни тунели Large tunnels - + Големи тунели Small floating islands - + Малки плаващи острови Medium floating islands - + Средни плаващи острови Large floating islands - + Големи плаващи острови Seed @@ -222,11 +222,11 @@ You got kicked - + Вие бяхте изхвърлен Password - + Парола Quit reason: @@ -238,26 +238,29 @@ %1 *** %2 has joined the room - + %1 *** %2 се присъедини към стаята %1 *** %2 has joined - + %1 *** %2 се присъедини %1 *** %2 has left (%3) - + %1 *** %2 напусна (%3) %1 *** %2 has left - + %1 *** %2 напусна Your nickname %1 is registered on Hedgewars.org Please provide your password below or pick another nickname in game config: - + Прякорът ви %1 е +регистриран на Hedgewars.org +Моля въдете паролата си по-долу +или изберете друг прякор в настройките на играта: @@ -271,69 +274,69 @@ PageAdmin Clear Accounts Cache - + Изчистване на кеша на профилите Fetch data - + Получаване на данни Server message for latest version: - + Съобщение на сървъра за последната версия: Server message for previous versions: - + Съобщение на сървъра за предишната версия: Latest version protocol number: - + Номер на протокола на последната версия: MOTD preview: - + Преглед на съобщението за деня: Set data - + Задаване на данни PageConnecting Connecting... - + Свързване... PageDrawMap Undo - + Отмяна Clear - + Изчистване Load - Зареждане + Зареждане Save - + Запазване Load drawn map - + Зареждане на начертана карта Drawn Maps (*.hwmap);;All files (*.*) - + Начертани карти (*.hwmap);;Всички файлове (*.*) Save drawn map - + Запазване на начертана карта @@ -355,19 +358,19 @@ Details - + Подробности Health graph - + Графика на здрането Ranking - + Класиране The best shot award was won by <b>%1</b> with <b>%2</b> pts. - + Наградата за най-добър изстрел беше спечелена от <b>%1</b> с <b>%2</b> pts. The best killer is <b>%1</b> with <b>%2</b> kills in a turn. @@ -380,7 +383,6 @@ A total of <b>%1</b> hedgehog(s) were killed during this round. - @@ -392,8 +394,7 @@ <b>%1</b> thought it's good to shoot his own hedgehogs with <b>%2</b> pts. - - + @@ -401,14 +402,12 @@ <b>%1</b> killed <b>%2</b> of his own hedgehogs. - <b>%1</b> was scared and skipped turn <b>%2</b> times. - @@ -690,18 +689,18 @@ PageNetGame Control - + Контрол PageNetType LAN game - + Игра по локална мрежа Official server - + Официален сървър @@ -716,35 +715,35 @@ Delete team - + Изтриване на отбор You can't edit teams from team selection. Go back to main menu to add, edit or delete teams. - + Не можете да редактиране отбори от избирането на отбори. Върнете се назад за да добавите, редактирате или изтриете отбори. New scheme - + Нова схема Edit scheme - + Редактиране на схема Delete scheme - + Изтриване на схема New weapon set - + Нов комплект оръжия Edit weapon set - + Редактиране на комплекта оръжия Delete weapon set - + Изтриване на комплекта оръжия @@ -794,7 +793,7 @@ Admin features - + Административни функционалности Error @@ -806,37 +805,39 @@ Room Name: - + Име на стаята: This game is in lobby. You may join and start playing once the game starts. - + Тази игра е в лоби. +След като започне, може да се присъедините и да играете. This game is in progress. You may join and spectate now but you'll have to wait for the game to end to start playing. - + Играта тече в момента. +Можете да се присъедините и да гледате, но ще трябва да изчакате да свърши, за да започнете да играете. %1 is the host. He may adjust settings and start the game. - + %1 е домакина. Той може да променя настройките и да започне играта. Random Map - + Случайна карта Games may be played on precreated or randomized maps. - + Игрите могат да се играят на предварително създадени или случайно генерирани карти. The Game Scheme defines general options and preferences like Round Time, Sudden Death or Vampirism. - + Игровата схема определя общите настройки и предпочитания, като продължителност на рунда, внезапна смърт или вампиризъм. The Weapon Scheme defines available weapons and their ammunition count. - + Схемата на оръжията определя наличните оръжия и количеството боеприпаси за тях. There are %1 clients connected to this room. @@ -849,7 +850,6 @@ There are %1 teams participating in this room. - @@ -862,36 +862,37 @@ Random Maze - + Случан лабиринт State: - + Състояние: Rules: - + Правила: Weapons: - + Оръжия: Search: - + Търсене: Clear - + Изчистване Warning - + Внимание The game you are trying to join has started. Do you still want to join the room? - + Играта, към която се опитвате да се присъедините вече е започнала. +Все още ли желаете да се присъедините към стаята? @@ -1021,11 +1022,11 @@ New - + Ново Copy - + Копиране @@ -1040,7 +1041,7 @@ Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT - Тренировка (упражнете уменията си в редица тренировъчни мисии). РАЗРАБОТВА СЕ + Тренировка (упражнете уменията си в редица тренировъчни мисии). В ПРОЦЕС НА РАЗРАБОТКА Demos (Watch recorded demos) @@ -1052,7 +1053,7 @@ Campaign Mode (...). IN DEVELOPMENT - + Режим кампания (...). В ПРОЦЕС НА РАЗРАБОТКА @@ -1063,7 +1064,7 @@ Ban - + Забраняване Start @@ -1083,30 +1084,30 @@ Follow - + Следване Ignore - + Игнориране Add friend - + Добавяне на приятел Unignore - + Отмяна на игнориране Remove friend - + Премахване на приятел QCheckBox Check for updates at startup - + Проверяване за обновления при стартиране Enable sound @@ -1130,7 +1131,7 @@ Frontend fullscreen - Преден пълен екран + Пълен екран Append date and time to record file name @@ -1138,19 +1139,19 @@ Show ammo menu tooltips - + Показване на подсказки за боеприпасите Enable frontend sounds - + Включване на звуци Enable frontend music - + Включване на музика Frontend effects - + Ефекти @@ -1169,31 +1170,31 @@ (System default) - + (Стандартно за системата) generated maze... - + генериран лабиринт... Mission - + Мисия Community - + Общност Any - + Без значение In lobby - + В лоби In progress - + В прогрес Default @@ -1201,11 +1202,11 @@ hand drawn map... - + Ръчно нарисувана карта... Disabled - + Изключено Red/Cyan @@ -1248,11 +1249,11 @@ QGroupBox Game Modifiers - + Модификатори на играта Basic Settings - + Основни настройки Team Members @@ -1288,54 +1289,54 @@ Team Settings - + Настройки на отборите Misc - + Разни Schemes and Weapons - + Схеми и оръжия QLabel Game scheme - Игрови настройки + Игрови схеми Damage Modifier - + Модификатор на щетите Turn Time - + Време за ход Initial Health - + Начално здраве Sudden Death Timeout - + Изтичане на времето на внезапната смърт Crate Drops - + Пускане на кашони Mines Time - + Време на мините Mines - + Мини Scheme Name: - + Име на схемата: Net nick @@ -1407,39 +1408,39 @@ Name - + Име Type - + Тип Grave - + Надгробна плоча Flag - + Знаме Voice - + Глас Locale - + Локал Restart game to apply - + Рестартирайте играта за да влезе в сила Explosives - + Експлозиви Tip: - + Съвет: This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! @@ -1447,35 +1448,35 @@ Quality - + Качество % Health Crates - + % кашони със здраве Health in Crates - + Здраве в кашоните Sudden Death Water Rise - + Покачване на водата при Внезапна смърт Sudden Death Health Decrease - + Намаляване на здравето при Внезапна смърт % Rope Length - + % Дължина на въжето Gameplay - + Геймплей Stereo rendering - + Стерео режим @@ -1532,39 +1533,39 @@ Can not overwrite default weapon set '%1'! - + Не моге да се презапише стандартния комплект с оръжия '%1'! All file associations have been set. - + Всички файлови асоциации са зададени. File association failed. - + Файловата асоциация се провали. Teams - Отбори + Отбори Really delete this team? - + Наистина ли да бъде изтрит този отбор? Schemes - + Схеми Can not delete default scheme '%1'! - + Стандартната схема '%1' не може да бъде изтрита! Really delete this game scheme? - + Наистина ли да бъде изтрите тази игрова схема? Can not delete default weapon set '%1'! - + Не моге да се изтрие стандартния комплект с оръжия '%1'! @@ -1583,11 +1584,11 @@ Nickname - + Прякор Please enter your nickname - + Моля въведете прякорът си @@ -1654,73 +1655,73 @@ Random Team - + Случаен отбор Associate file extensions - + Асоцииране на файлови разширения more - + повече QTableWidget Room Name - + Име на стаята C - + C T - + T Owner - + Притежател Map - Карта + Карта Rules - + Правила Weapons - Оръжия + Оръжия SelWeaponWidget Weapon set - + Комплект оръжия Probabilities - + Веротности Ammo in boxes - + Боеприпаси в кашоните Delays - + Закъснения new - Нов отбор + нов copy of - + копие на @@ -1742,95 +1743,95 @@ ToggleButtonWidget Fort Mode - + Режим на фортове Divide Teams - + Разделяне на отборите Solid Land - + Твърда земя Add Border - Добави гранична ивица + Добави гранична ивица Low Gravity - + Ниска гравитация Laser Sight - + Лазерен мерник Invulnerable - + Неуязвимост Vampirism - + Вампиризъм Karma - + Карма Artillery - + Артилерия Random Order - + Произволен ред King - + Крал Place Hedgehogs - + Поставяне на таралежи Clan Shares Ammo - + Кланът споделя оръжията Disable Girders - + Изкбючване на греди Disable Land Objects - + Изключване на обекти по земята AI Survival Mode - + Режим ИИ оцеляване Reset Health - + Изчистване на здрането Unlimited Attacks - + Неограничени атаки Reset Weapons - + Изчистване на оръжията Per Hedgehog Ammo - + Боеприпаси за всеки таралеж поотделно Disable Wind - + Изключване на вятъра More Wind - + Още вятър @@ -1975,120 +1976,120 @@ zoom in - + Приближаване zoom out - + Отдалечаване reset zoom - + Изчиставане на мащабирането long jump - + Дълъг скок high jump - + Висок скок slot 10 - Слот 10 + Слот 10 binds (categories) Basic controls - + Основни контроли Weapon controls - + Контроли за оръжията Camera and cursor controls - + Контроли за камерата и показалеца Other - Друго + Друго binds (descriptions) Move your hogs and aim: - + Преместете таралежите си и се прицелете: Traverse gaps and obstacles by jumping: - + Преодолявайте празнини и препятствия чрез скачане: Fire your selected weapon or trigger an utility item: - + Стреляйте с избраното оръжие или задействайте инструмент: Pick a weapon or a target location under the cursor: - + Изберете оръжие или местоположение под показалеца: Switch your currently active hog (if possible): - + Превключете текущо избрания таралеж ( ако е възможно): Pick a weapon or utility item: - + Изберете оръжие или инструмент: Set the timer on bombs and timed weapons: - + Задайте таймер на бомбите и оръжията с таймер: Move the camera to the active hog: - + Преместете камерата към активния таралеж: Move the cursor or camera without using the mouse: - + Преместете показалеца или камерата без помощта на мишката: Modify the camera's zoom level: - + Променете нивото на мащабиране на картата: Talk to your team or all participants: - + Говорете с отбора си или всички участници: Pause, continue or leave your game: - + Сложете на пауза, продължете или напудснете играта: Modify the game's volume while playing: - + Променете силата на звука на играта докато играете: Toggle fullscreen mode: - + Превключване на пълен екран: Take a screenshot: - + Прихващане на екран: Toggle labels above hedgehogs: - + Премключване на надписи над таралежите: binds (keys) Axis - + Ос (Up) @@ -2112,11 +2113,11 @@ Button - + Бутон Keyboard - + Клавиатура Delete diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Locale/hedgewars_cs.ts --- a/share/hedgewars/Data/Locale/hedgewars_cs.ts Thu Aug 04 17:41:07 2011 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_cs.ts Thu Aug 04 17:44:55 2011 +0200 @@ -5,25 +5,25 @@ AmmoSchemeModel new - nový + nový copy of - + kopie FreqSpinBox Never - + Nikdy Every %1 turn - - - - + + Každý %1 tah + Každé %1 tahy + Každých %1 tahů @@ -31,7 +31,7 @@ GameCFGWidget Edit weapons - + Editovat zbraně Error @@ -43,30 +43,30 @@ Edit schemes - + Editovat schémata When this option is enabled selecting a game scheme will auto-select a weapon - + Pokud je tato volba aktivována, výběr herního schématu vybere automaticky i zbraňové schéma HWChatWidget %1 *** %2 has been removed from your ignore list - + %1 *** %2 byl odstraněn ze seznamu ignorovaných %1 *** %2 has been added to your ignore list - + %1 *** %2 byl přidán na seznam ignorovaných %1 *** %2 has been removed from your friends list - + %1 *** %2 byl odstraněn ze seznamu přátel %1 *** %2 has been added to your friends list - + %1 *** %2 byl přidán na seznam přátel @@ -97,17 +97,17 @@ DefaultTeam - + VýchozíTeam Hedgewars Demo File File Types - + Hedgewars Demo Soubor Hedgewars Save File File Types - + Hedgewars Save Soubor @@ -133,67 +133,67 @@ Filter - + Filtr All - + Vše Small - + Malá Medium - + Střední Large - + Velká Cavern - + Jeskyně Wacky - + Šílená Type - + Typ Small tunnels - + Malé tunely Medium tunnels - + Střední tunely Large tunnels - + Velké tunely Small floating islands - + Malé plovoucí ostrovy Medium floating islands - + Střední plovoucí ostrovy Large floating islands - + Velké plovoucí ostrovy Seed - + Semínko Set - + Sada @@ -219,11 +219,11 @@ Connection refused - Spojení odmítnuto. + Spojení odmítnuto Room destroyed - Místnost zničena. + Místnost zničena Quit reason: @@ -231,34 +231,37 @@ You got kicked - + Byl jsi vykopnut Password - + Heslo %1 *** %2 has joined the room - + %1 *** %2 se připojil do místnosti %1 *** %2 has joined - + %1 *** %2 se připojil %1 *** %2 has left (%3) - + %1 *** %2 odešel (%3) %1 *** %2 has left - + %1 *** %2 odešel Your nickname %1 is registered on Hedgewars.org Please provide your password below or pick another nickname in game config: - + Tvoje přezdívka %1 je +registrovaná na Hedgewars.org +Prosím, zadej své heslo +nebo si v konfiguraci vyber jinou přezdívku: @@ -272,69 +275,69 @@ PageAdmin Clear Accounts Cache - + Vyčistit mezipaměť účtů Fetch data - + Načíst data Server message for latest version: - + Zpráva serveru pro nejnovějši verzi: Server message for previous versions: - + Zpráva serveru pro předchozí verzi: Latest version protocol number: - + Číslo protokolu nejnovější verze: MOTD preview: - + Motto dne: Set data - + Nastavit data PageConnecting Connecting... - + Připojuji... PageDrawMap Undo - + Zpět Clear - + Vymazat Load - Nahrát + Nahrát Save - + Uložit Load drawn map - + Nahrát nakreslenou mapu Drawn Maps (*.hwmap);;All files (*.*) - + Nakreslené mapy (*.hwmap);;Všechny soubory (*.*) Save drawn map - + Uložit nakreslenou mapu @@ -356,66 +359,66 @@ Details - + Detaily Health graph - + Graf zdraví Ranking - + Hodnocení The best shot award was won by <b>%1</b> with <b>%2</b> pts. - + Cenu za nejlepší zásah vyhrál <b>%1</b> s <b>%2</b> body. The best killer is <b>%1</b> with <b>%2</b> kills in a turn. - - - - + + Nejlepší zabiják je <b>%1</b> s <b>%2</b> úlovkem za tah. + Nejlepší zabiják je <b>%1</b> se <b>%2</b> úlovky za tah. + Nejlepší zabiják je <b>%1</b> s <b>%2</b> úlovky za tah. A total of <b>%1</b> hedgehog(s) were killed during this round. - - - - + + Celkem <b>%1</b> ježek byl zabit toto kolo. + Celkem <b>%1</b> ježci byli zabiti toto kolo. + Celkem <b>%1</b> ježků bylo zabito toto kolo. (%1 kill) - - - - + + (%1 úlovek) + (%1 úlovky) + (%1 úlovků) <b>%1</b> thought it's good to shoot his own hedgehogs with <b>%2</b> pts. - - - - + + <b>%1</b> si myslel, že je dobré střílet do vlastních ježků s <b>%2</b> bodem. + <b>%1</b> si myslel, že je dobré střílet do vlastních ježků se <b>%2</b> body. + <b>%1</b> si myslel, že je dobré střílet do vlastních ježků s <b>%2</b> body. <b>%1</b> killed <b>%2</b> of his own hedgehogs. - - - - + + <b>%1</b> zabil <b>%2</b> vlastního ježka. + <b>%1</b> zabil <b>%2</b> vlastní ježky. + <b>%1</b> zabil <b>%2</b> vlastních ježků. <b>%1</b> was scared and skipped turn <b>%2</b> times. - - - - + + <b>%1</b> byl vystrašený a přeskočil tah <b>%2</b> krát. + <b>%1</b> byl vystrašený a přeskočil tah <b>%2</b> krát. + <b>%1</b> byl vystrašený a přeskočil tah <b>%2</b> krát. @@ -432,247 +435,247 @@ Simply pick the same color as a friend to play together as a team. Each of you will still control his or her own hedgehogs but they'll win or lose together. Tips - + Jednoduše zvol stejnou barvu jako spoluhráč, abys hrál ve stejném týmu. Každý z vás bude mít kontrolu nad svými vlastními ježky, ale vyhraje nebo prohraje společně. Some weapons might do only low damage but they can be a lot more devastating in the right situation. Try to use the Desert Eagle to knock multiple hedgehogs into the water. Tips - + Některé zbraně mohou způsobovat jen malé poškození, ale mohou být devastující v pravé chvíli. Zkus použít pistoli Desert Eagle ke sražení několika nepřátelských ježků do vody. If you're unsure what to do and don't want to waste ammo, skip one round. But don't let too much time pass as there will be Sudden Death! Tips - + Pokud si nejsi jistý, co dělat a nechceš plýtvat municí, přeskoč tah. Ale nenech uběhnout moc času, protože pak přijde Náhlá smrt! If you'd like to keep others from using your preferred nickname on the official server, register an account at http://www.hedgewars.org/. Tips - + Pokud chceš zabránit ostatním, aby používali tvoji oblíbenou přezdívku na oficiálním serveru, zaregistruj se na http://www.hedgewars.org/. You're bored of default gameplay? Try one of the missions - they'll offer different gameplay depending on the one you picked. Tips - + Jsi znuděn standardní hrou? Vyzkoušej některou misi - nabídnou jiný herní zážitek v závislosti na tom, kterou si vybereš. By default the game will always record the last game played as a demo. Select 'Local Game' and pick the 'Demos' button on the lower right corner to play or manage them. Tips - + Standardně hra vždycky nahrává poslední odehraný zápas jako ukázku. Vyber si 'Místní hru' a zvol tlačítko 'Ukázky' v pravém spodním rohu k jejich přehrávání a správě. Hedgewars is Open Source and Freeware we create in our spare time. If you've got problems, ask on our forums but please don't expect 24/7 support! Tips - + Hedgewars je Open Source a Freeware, který jsme vytvořili v našem volném čase. Pokud máš problémy, zeptej se na našem fóru, ale neočekávej prosím nonstop podporu! Hedgewars is Open Source and Freeware we create in our spare time. If you like it, help us with a small donation or contribute your own work! Tips - + Hedgewars je Open Source a Freeware, který jsme vytvořili v našem volném čase. Pokud se ti líbí, pomož nám malým příspěvkem, nebo se podílej na práci! Hedgewars is Open Source and Freeware we create in our spare time. Share it with your family and friends as you like! Tips - + Hedgewars je Open Source a Freeware, který jsme vytvořili v našem volném čase. Sdílej ho se svoji rodinou a přáteli dle libosti! From time to time there will be official tournaments. Upcoming events will be announced at http://www.hedgewars.org/ some days in advance. Tips - + Čas od času se konají oficiální turnaje. Nadcházející události budou publikovány na http://www.hedgewars.org/ s několika denním předstihem. Hedgewars is available in many languages. If the translation in your language seems to be missing or outdated, feel free to contact us! Tips - + Hedgewars je k dispozici v mnoha jazycích. Pokud překlad do tvého jazyka vypadá zastaralý nebo chybí, neváhej nás kontaktovat! Hedgewars can be run on lots of different operating systems including Microsoft Windows, Mac OS X and Linux. Tips - + Hedgewars může být spuštěno na mnoha různých operačních systémech včetně Microsoft Windows, Mac OS X a Linuxu. Always remember you're able to set up your own games in local and network/online play. You're not restricted to the 'Simple Game' option. Tips - + Vždycky si pamatuj, že můžeš vytvořit vlastní hru na místní síti i internetu. Nejsi odkázán jen na možnost 'Prostá hra'. While playing you should give yourself a short break at least once an hour. Tips - + Během hraní bys měl dělat krátké přestávky alespoň jednou za hodinu. If your graphics card isn't able to provide hardware accelerated OpenGL, try to enable the low quality mode to improve performance. Tips - + Pokud tvoje grafická karta nepodporuje hardwarovou akceleraci OpenGL, zkus zapnout nízkou kvalitu pro zlepšení výkonu. We're open to suggestions and constructive feedback. If you don't like something or got a great idea, let us know! Tips - + Jsme otevřeni návrhům a konstruktivní kritice. Pokud se ti něco nelíbí, nebo máš skvělý nápad, dej nám vědět! Especially while playing online be polite and always remember there might be some minors playing with or against you as well! Tips - + Obzvláště při hře online buď slušný a vždy pamatuj na to, že s tebou nebo proti tobě může hrát někdo z nějaké menšiny! Special game modes such as 'Vampirism' or 'Karma' allow you to develop completely new tactics. Try them in a custom game! Tips - + Speciální herní módy jako třeba 'Vampyrismus' nebo 'Karma' ti dovolují vymýšlet úplně jiné herní taktiky. Vyzkoušej je v nějaké hře! You should never install Hedgewars on computers you don't own (school, university, work, etc.). Please ask the responsible person instead! Tips - + Nikdy bys neměl instalovat Hedgewars na počítači, který ti nepatří (škola, univerzita, práce a jiné). Prosím, zeptej se nejprve zodpovědné osoby! Hedgewars can be perfect for short games during breaks. Just ensure you don't add too many hedgehogs or use an huge map. Reducing time and health might help as well. Tips - + Hedgewars mohou být perfektní pro krátkou hru během pauzy. Jen se ujisti, že jsi nepřidal příliš mnoho ježků nebo nezvolil velkou mapu. Zmenšit čas nebo zdraví také urychlí hru. No hedgehogs were harmed in making this game. Tips - + Žádný ježek nebyl zraněn během vytváření této hry. Hedgewars is Open Source and Freeware we create in our spare time. If someone sold you the game, you should try get a refund! Tips - + Hedgewars je Open Source a Freeware, který jsme vytvořili v našem volném čase. Pokud ti tuto hru někdo prodal, měl bys chtít vrátit peníze! Connect one or more gamepads before starting the game to be able to assign their controls to your teams. Tips - + Připojenim jednoho nebo více gamepadů před začátkem hry ti umožní nastavit je jako ovladač pro tvé týmy. Create an account on %1 to keep others from using your most favourite nickname while playing on the official server. Tips - + Vytvoř si účet na %1, abys zabránil ostatním používat tvoji oblíbenou přezdívku na oficiálním serveru. If your graphics card isn't able to provide hardware accelerated OpenGL, try to update the associated drivers. Tips - + Pokud tvoje grafická karta nepodporuje hardwarovou akceleraci OpenGL, zkus aktualizovat ovladače. There are three different jumps available. Tap [high jump] twice to do a very high/backwards jump. Tips - + K dispozici jsou tři různé druhy skoků. Zmáčkni [Vysoký skok] dvakrát, abys udělal skok do větší výšky a dozadu. Afraid of falling off a cliff? Hold down [precise] to turn [left] or [right] without actually moving. Tips - + Bojíš se pádu z útesu? Stiskni [přesnost], aby ses otočil [vlevo], či [vpravo] bez jakéhokoliv pohybu. Some weapons require special strategies or just lots of training, so don't give up on a particular tool if you miss an enemy once. Tips - + Některé zbraně vyžadují speciální strategii, nebo jen spoustu cvičení. Nezavrhuj hned některou zbraň, pokud jednou mineš cíl. Most weapons won't work once they touch the water. The Homing Bee as well as the Cake are exceptions to this. Tips - + Většina zbraní nefunguje, jakmile se ponoří do vody. Naváděná včela nebo dort jsou vyjímka z tohoto pravidla. The Old Limbuger only causes a small explosion. However the wind affected smelly cloud can poison lots of hogs at once. Tips - + Olomoucké tvarůžky vybuchují jen málo, ale vítr ovlivňuje oblak smradu, který může nakazit mnoho ježků najednou. The Piano Strike is the most damaging air strike. You'll lose the hedgehog performing it, so there's a huge downside as well. Tips - + Útok pianem je nejničivější letecký útok. Na druhé straně ale ztratíš ježka, který tento útok vykoná. Sticky Mines are a perfect tool to create small chain reactions knocking enemy hedgehogs into dire situations ... or water. Tips - + Přisavné miny jsou perfektní nástroj na vytváření malých řetězových reakcí, které mohou nepřátelské ježky dostat do divokých situací ... nebo vody. The Hammer is most effective when used on bridges or girders. Hit hogs will just break through the ground. Tips - + Kladivo je nejefektivnější při použitǐ na mostech a traverzách. Zasažený ježek prostě prorazí skrz zem. If you're stuck behind an enemy hedgehog, use the Hammer to free yourself without getting damaged by an explosion. Tips - + Pokud jsi zaseklý za nepřátelským ježkem, použij kladivo, aby ses osvobodil a nemusel riskovat zranění z exploze. The Cake's maximum walking distance depends on the ground it has to pass. Use [attack] to detonate it early. Tips - + Maximální vzdálenost, do které dort dojde, je ovlivněna terénem, kterým musí jít. Použij [útok] k dřívější explozi. The Flame Thrower is a weapon but it can be used for tunnel digging as well. Tips - + Plamenomet je zbraň, ale dá se použít i pro kopání tunelů. Want to know who's behind the game? Click on the Hedgewars logo in the main menu to see the credits. Tips - + Chceš vědět, kdo stojí za touto hrou? Klikni na logo Hedgewars v hlavním menu a podívej se. Like Hedgewars? Become a fan on %1 or follow us on %2! Tips - + Líbí se ti Hedgewars? Staň se fanouškem na %1 nebo nás sleduj na %2! Feel free to draw your own graves, hats, flags or even maps and themes! But note that you'll have to share them somewhere to use them online. Tips - + Neboj se kreslit vlastní hroby, čepice, vlajky nebo mapy a témata! Ale pamatuj, že je musíš někde sdílet, abys je mohl používat online. Really want to wear a specific hat? Donate to us and receive an exclusive hat of your choice! Tips - + Opravdu chceš nosit specifickou čepici? Daruj nám něco a dostaneš exklusivní čepici dle svého výběru! Keep your video card drivers up to date to avoid issues playing the game. Tips - + Udržuj ovladače grafické karty aktuální, aby ses vyhnul problémům při hře. You can find your Hedgewars configuration files under "My Documents\Hedgewars". Create backups or take the files with you, but don't edit them by hand. Tips - + Své nastavení Hedgewars najdeš v "Dokumenty\Hedgewars". Vytvoř si zálohu nebo si je přenášej s sebou, ale needituj je ručně. You're able to associate Hedgewars related files (savegames and demo recordings) with the game to launch them right from your favorite file or internet browser. Tips - + Můžeš si asociovat Hedgewars soubory (uložené hry a nahrávky) tak, abys je mohl ihned spouštět z internetového prohlížeče nebo prúzkumníka souborů. Want to save ropes? Release the rope in mid air and then shoot again. As long as you don't touch the ground you'll reuse your rope without wasting ammo! Tips - + Chceš ušetřit lana? Uvolni ho ve vzduchu a vystřel znovu. Dokud se nedotkneš země, využíváš ho bez plýtvání munice! You can find your Hedgewars configuration files under "Library/Application Support/Hedgewars" in your home directory. Create backups or take the files with you, but don't edit them by hand. Tips - + Konfigurace Hedgewars je k nalezení ve tvém domovském adresáři pod "Library/Application Support/Hedgewars". Vytvoř si zálohu, přenášej ho s sebou, ale neměň ho ručně. You can find your Hedgewars configuration files under ".hedgewars" in your home directory. Create backups or take the files with you, but don't edit them by hand. Tips - + Konfigurace Hedgewars je k nalezení ve tvém domovském adresáři pod ".hedgewars". Vytvoř si zálohu, přenášej ho s sebou, ale neměň ho ručně. The Windows version of Hedgewars supports Xfire. Make sure to add Hedgewars to its game list so your friends can see you playing. Tips - + Windows verze Hedgewars podporuje Xfire. Přidej si Hedgewars do jeho seznamu her, abys viděl přátele, kteří ho hrají. The Homing Bee can be tricky to use. Its turn radius depends on it's velocity, so try to not use full power. Tips - + Naváděná včela může být obtížná na použití. Její poloměr otáčení je závislý na její rychlosti, zkus ji nepoužívat při plné síle. Use the Molotov or Flame Thrower to temporary keep hedgehogs from passing terrain such as tunnels or platforms. Tips - + Použij Molotov nebo plamenomet, abys dočasně zamezil ježkům v přechodu terénu jako jsou tunely nebo plošiny. @@ -704,11 +707,11 @@ PageNetType LAN game - + Hra po místní síti Official server - + Oficiální server @@ -723,35 +726,35 @@ Delete team - + Smazat tým You can't edit teams from team selection. Go back to main menu to add, edit or delete teams. - + Nemůžeš upravovat týmy z výběru týmu. Vrať se do hlavní nabídky, kde můžeš přidávat, upravovat a mazat týmy. New scheme - + Nové schéma Edit scheme - + Upravit schéma Delete scheme - + Smazat schéma New weapon set - + Nový sada zbraní Edit weapon set - + Upravit sadu zbraní Delete weapon set - + Smazat sadu zbraní @@ -793,7 +796,7 @@ Join - Připojit + Připojit se Refresh @@ -809,56 +812,58 @@ Admin features - + Možnosti správce Room Name: - + Jméno místnosti: This game is in lobby. You may join and start playing once the game starts. - + Tato hra je v čekárně. +Můžeš se přidat a začít hrát, jakmile hra začne. This game is in progress. You may join and spectate now but you'll have to wait for the game to end to start playing. - + Tato hra právě probíhá. +Můžeš se přidat a pozorovat, ale musíš počkat, než hra skončí, jestli chceš začít hrát. %1 is the host. He may adjust settings and start the game. - + %1 je hostitel. On může nastavovat a odstartovat hru. Random Map - + Náhodná mapa Games may be played on precreated or randomized maps. - + Hra může být hrána na předem vytvořené nebo na náhodné mapě. The Game Scheme defines general options and preferences like Round Time, Sudden Death or Vampirism. - + Herní schéma definuje obecné možnosti a nastavení jako třeba počet kol, náhlou smrt nebo vampyrismus. The Weapon Scheme defines available weapons and their ammunition count. - + Zbraňové schéma definuje zbraně, které budou k dispozici a jejich munici. There are %1 clients connected to this room. - - - - + + V místnosti je %1 připojený klient. + V místnosti jsou %1 připojení klienti. + V místnosti je %1 připojených klientů. There are %1 teams participating in this room. - - - - + + V místnosti je %1 účastnící se tým. + V místnosti jsou %1 účastnící se týmy. + V místnosti je %1 účastnících se týmů. @@ -871,151 +876,152 @@ Random Maze - + Náhodný labyrint State: - + Stav: Rules: - + Pravidla: Weapons: - + Zbraně: Search: - + Hledej: Clear - + Vyčisti Warning - + Pozor The game you are trying to join has started. Do you still want to join the room? - + Hra, do které se snažíš připojit, začala. +Ještě stále se chceš připojit do místosti? PageScheme New - + Nové Delete - Smazat + Smazat Defend your fort and destroy the opponents, two team colours max! - + Braň svou pevnoust a znič protivníky, dvě barvy týmů maximálně! Teams will start on opposite sides of the terrain, two team colours max! - + Týmy startují na opačných stranách terénu, dvě barvy týmů maximálně! Land can not be destroyed! - + Krajina nejde zničit! Add an indestructable border around the terrain - + Přidá nezničitelnou hranici okolo terénu Lower gravity - + Nižší gravitace Assisted aiming with laser sight - + Podpora míření pomocí laserového mířidla All hogs have a personal forcefield - + Všichni ježci mají osobní silové pole Gain 80% of the damage you do back in health - + Získej zpět 80% z poškození, které učiníš Share your opponents pain, share their damage - + Sdílej protivníkovu bolest, sdílej jeho poškození Your hogs are unable to move, put your artillery skills to the test - + Tvoji ježci se nemohou hýbat, prozkoušej své dělostřelecké dovednosti Random - + Náhodné Seconds - + Vteřiny Order of play is random instead of in room order. - + Pořadí hraní je náhodné, nikoliv podle pořadí v místnosti. Play with a King. If he dies, your side dies. - + Hraj s králem. Pokud zemře on, tvoje strana zemře. Take turns placing your hedgehogs before the start of play. - + Získej tah na úmistění ježků před začátkem hry. Ammo is shared between all teams that share a colour. - + Munice je sdílená mezi týmy se stejnou barvou. Disable girders when generating random maps. - + Vypni traverzy při generování náhodné mapy. Disable land objects when generating random maps. - + Vypni teréní objekty při generování náhodné mapy. AI respawns on death. - + Počítač se po smrti obnoví. All (living) hedgehogs are fully restored at the end of turn - + Všichni (žijící) ježci jsou plně uzdraveni na konci tahu Attacking does not end your turn. - + Útočení neukončí tah. Weapons are reset to starting values each turn. - + Zbraně jsou obnoveny na startovní hodnoty každý tah. Each hedgehog has its own ammo. It does not share with the team. - + Každý ježek má svou vlastní munici. Nesdílí ji s týmem. You will not have to worry about wind anymore. - + Nemusíš se už starat o vítr. Wind will affect almost everything. - + Vítr bude ovlivňovat téměř všechno. Copy - + Kopie @@ -1030,26 +1036,26 @@ New - + Nová Copy - + Kopie PageSinglePlayer Simple Game (a quick game against the computer, settings are chosen for you) - Hra jednoho hráče (rychlá hra proti počítači, nastavení si volíte sami) + Prostá hra (rychlá hra proti počítači, nastavení je zvoleno) Multiplayer (play a hotseat game against your friends, or AI teams) - Hra více hráčů (hrát na jednom počítači proti vašim přátelům nebo AI týmům) + Hra více hráčů (hrát na jednom počítači proti přátelům nebo počítači) Training Mode (Practice your skills in a range of training missions). IN DEVELOPMENT - Tréningový mód (Procvičte si vaše schopnosti v řadě tréningových misí). VE VÝVOJI + Výcvikový mód (Procvič si schopnosti v řadě tréningových misí). VE VÝVOJI Demos (Watch recorded demos) @@ -1061,7 +1067,7 @@ Campaign Mode (...). IN DEVELOPMENT - + Mód tažení (...). VE VÝVOJI @@ -1088,42 +1094,42 @@ Ban - + Zákaz Follow - + Sledovat Ignore - + Ignorovat Add friend - + Přidat přítele Unignore - + Přestat ignorovat Remove friend - + Odstranit přítele QCheckBox Check for updates at startup - + Zkontrolovat při startu novou verzi Fullscreen - Celoobrazovkový režim + Celá obrazovka Frontend fullscreen - Celoobrazovkový režim v menu + Celá obrazovka v menu Enable sound @@ -1143,23 +1149,23 @@ Append date and time to record file name - Připojit datim a čas k jménu záznamu + Připojit datum a čas k jménu záznamu Show ammo menu tooltips - + Ukazovat tipy ke zbraním Enable frontend sounds - + Zapnout zvuky v menu Enable frontend music - + Zapnout hudbu v menu Frontend effects - + Efekty v menu @@ -1178,31 +1184,31 @@ (System default) - + (Podle systému) generated maze... - + generovaný labyrint... Mission - + Mise Community - + Komunita Any - + Jakékoliv In lobby - + V čekárně In progress - + Probíhá Default @@ -1210,54 +1216,54 @@ hand drawn map... - + ručně kreslená mapa... Disabled - + Vypnuto Red/Cyan - + Červená/Azurová Cyan/Red - + Azurová/Červená Red/Blue - + Červená/Modrá Blue/Red - + Modrá/Červená Red/Green - + Červená/Zelená Green/Red - + Zelená/Červená Side-by-side - + Bok-po-boku Top-Bottom - + Shora-Dolu Wiggle - + Kývat se QGroupBox Team Members - Týmoví členové + Členové týmu Fort @@ -1289,23 +1295,23 @@ Game Modifiers - + Herní modifikátory Basic Settings - + Základní nastavení Team Settings - + Týmová nastavení Misc - + Ostatní Schemes and Weapons - + Schémata a zbraně @@ -1376,115 +1382,115 @@ Damage Modifier - + Modifikátor poškození Turn Time - + Čas tahu Initial Health - + Počáteční zdraví Sudden Death Timeout - + Čas do náhlé smrti Mines Time - + Časovač min Mines - + Počet min Scheme Name: - + Jméno schématu: Crate Drops - + Shazování beden Game scheme - + Herní schéma % Dud Mines - + % falešných min Name - + Jméno Type - + Typ Grave - + Hrob Flag - + Vlajka Voice - + Hlas Locale - + Jazyk Restart game to apply - + Aby se nastavení použilo, restartuj hru Explosives - + Výbušniny Tip: - + Tip: This development build is 'work in progress' and may not be compatible with other versions of the game. Some features might be broken or incomplete. Use at your own risk! - + Tato vývojová verze je 'v průběhu práce' a může být kompatibilní s jinými verzemi hry. Některé možnosti mohou být rozbité nebo nekompletní. Používej na vlastní riziko! Quality - + Kvalita % Health Crates - + % zdravotních beden Health in Crates - + Zdraví v bedně Sudden Death Water Rise - + Zvyšování hladiny Sudden Death Health Decrease - + Snižování života % Rope Length - + % délky lana Gameplay - + Hra Stereo rendering - + Duální vykreslování @@ -1541,39 +1547,39 @@ Can not overwrite default weapon set '%1'! - + Nemohu přepsat výchozí sadu zbraní '%1'! All file associations have been set. - + Všechny asociace souborů byly nastaveny. File association failed. - + Asociace souborů selhala. Teams - Týmy + Týmy Really delete this team? - + Opravdu smazat tento tým? Schemes - + Schémata Can not delete default scheme '%1'! - + Nemohu smazat výchozí schéma '%1'! Really delete this game scheme? - + Opravdu smazat toto herní schéma? Can not delete default weapon set '%1'! - + Nemohu smazat výchozí sadu zbraní '%1'! @@ -1592,11 +1598,11 @@ Nickname - + Přezdívka Please enter your nickname - + Prosím zadej svou přezdívku @@ -1615,7 +1621,7 @@ Start server - Spusti server + Spusť server Connect @@ -1663,73 +1669,73 @@ Random Team - + Náhodný tým Associate file extensions - + Asociovat přípony souborů more - + více QTableWidget Room Name - + Jméno místnosti C - + K T - + T Owner - + Vlastník Map - Mapa + Mapa Rules - + Pravidla Weapons - Zbraně + Zbraně SelWeaponWidget Weapon set - + Sada zbraní Probabilities - + Pravděpodobnosti Ammo in boxes - + Munice v bednách Delays - + Prodlevy new - nový + nový copy of - + kopie @@ -1751,95 +1757,95 @@ ToggleButtonWidget Vampirism - + Vampyrismus Karma - + Karma Artillery - + Dělostřelectvo Fort Mode - + Pevnosti Divide Teams - + Rozděl týmy Solid Land - + Pevná zem Add Border - + Přidej hranice Low Gravity - + Nízká gravitace Laser Sight - + Laserové zaměřování Invulnerable - + Nesmrtelnost Random Order - + Náhodné pořadí King - + Král Place Hedgehogs - + Umísti ježky Clan Shares Ammo - + Klan sdílí munici Disable Girders - + Vypni traverzy Disable Land Objects - + Vypni teréní objekty AI Survival Mode - + Mód 'Počítač přežívá' Reset Health - + Obnova zdraví Unlimited Attacks - + Neomezeně útoků Reset Weapons - + Obnova zbraní Per Hedgehog Ammo - + Individuální munice Disable Wind - + Vypni vítr More Wind - + Více větru @@ -1882,7 +1888,7 @@ ammo menu - menu střeliva + menu zbraní slot 1 @@ -1922,23 +1928,23 @@ timer 1 sec - časovač 1 sec + časovač 1 vt timer 2 sec - časovač 2 sec + časovač 2 vt timer 3 sec - časovač 3 sec + časovač 3 vt timer 4 sec - časovač 4 sec + časovač 4 vt timer 5 sec - časovač 5 sec + časovač 5 vt chat @@ -1954,7 +1960,7 @@ confirmation - natavení + potvrzení volume down @@ -1970,7 +1976,7 @@ capture - zajmout + sejmout hedgehogs @@ -1983,148 +1989,148 @@ zoom in - + přiblížit zoom out - + oddálit reset zoom - + obnovit přiblížení long jump - + dlouhý skok high jump - + vysoký skok slot 10 - pozice 10 + pozice 10 binds (categories) Basic controls - + Základní ovládání Weapon controls - + Ovládání zbraní Camera and cursor controls - + Ovládání kamery a kurzoru Other - Ostatní + Ostatní binds (descriptions) Move your hogs and aim: - + Pohybuj ježkem a miř: Traverse gaps and obstacles by jumping: - + Překonej mezery a překážky skokem: Fire your selected weapon or trigger an utility item: - + Odpal zvolenou zbraň nebo použij nástroj: Pick a weapon or a target location under the cursor: - + Vyber zbraň nebo cílové místo pod kurzorem: Switch your currently active hog (if possible): - + Přepni aktivního ježka (pokud je to možné): Pick a weapon or utility item: - + Vyber zbraň nebo nástroj: Set the timer on bombs and timed weapons: - + Nastav časovač bomby nebo časované zbraně: Move the camera to the active hog: - + Pohni kamerou na aktivního ježka: Move the cursor or camera without using the mouse: - + Pohni kurzorem nebo kamerou bez použití myši: Modify the camera's zoom level: - + Změň přiblížení kamery: Talk to your team or all participants: - + Mluv ke svému týmu nebo všem účastníkům: Pause, continue or leave your game: - + Pozastav, pokračuj nebo opusť hru: Modify the game's volume while playing: - + Zmeň hlasitost hry během hraní: Toggle fullscreen mode: - + Přepni mód celé obrazovky: Take a screenshot: - + Vyfoť obrazovku: Toggle labels above hedgehogs: - + Přepni popisky nad ježky: binds (keys) Axis - + Osa (Up) - + (Nahoru) (Down) - + (Dolů) Hat - + Klobouček (Left) - + (Vlevo) (Right) - + (Vpravo) Button - + Tlačítko Keyboard - + Klávesnice Delete @@ -2132,199 +2138,199 @@ Mouse: Left button - + Myš: Levé tlačítko Mouse: Middle button - + Myš: Prostřední tlačítko Mouse: Right button - + Myš: Pravé tlačítko Mouse: Wheel up - + Myš: Kolečko nahoru Mouse: Wheel down - + Myš: Kolečko dolů Backspace - + Backspace Tab - + Tabulátor Clear - + Vymazat Return - + Návrat Pause - + Pauza Escape - + Escape Space - + Mezerník Numpad 0 - + Numpad 0 Numpad 1 - + Numpad 1 Numpad 2 - + Numpad 2 Numpad 3 - + Numpad 3 Numpad 4 - + Numpad 4 Numpad 5 - + Numpad 5 Numpad 6 - + Numpad 6 Numpad 7 - + Numpad 7 Numpad 8 - + Numpad 8 Numpad 9 - + Numpad 9 Numpad . - + Numpad . Numpad / - + Numpad / Numpad * - + Numpad * Numpad - - + Numpad - Numpad + - + Numpad + Enter - + Enter Equals - + Rovná se Up - + Nahoru Down - + Dolu Right - + Vpravo Left - + Vlevo Insert - + Insert Home - + Home End - + End Page up - + Page up Page down - + Page down Num lock - + Num lock Caps lock - + Caps lock Scroll lock - + Scroll lock Right shift - + Pravý shift Left shift - + Levý shift Right ctrl - + Pravý ctrl Left ctrl - + Levý ctrl Right alt - + Pravý alt Left alt - + Levý alt Right meta - + Pravá meta Left meta - + Levá meta A button diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Locale/hedgewars_fr.ts --- a/share/hedgewars/Data/Locale/hedgewars_fr.ts Thu Aug 04 17:41:07 2011 +0200 +++ b/share/hedgewars/Data/Locale/hedgewars_fr.ts Thu Aug 04 17:44:55 2011 +0200 @@ -46,7 +46,7 @@ When this option is enabled selecting a game scheme will auto-select a weapon - Quand cette option est active choisir des paramètres de jeu sélectionnera les armes + Une fois cette option activée, choisir les paramètres de jeu sélectionne automatiquement les armes correspondantes @@ -421,7 +421,7 @@ (%1 kill) - (%1 Tue) + (%1 tue) @@ -540,7 +540,7 @@ Especially while playing online be polite and always remember there might be some minors playing with or against you as well! Tips - Particulièrement quand vous jouez en ligne soyez polis et pensez que certains joueurs avec vous peuvent être mineurs. + Particulièrement quand vous jouez en ligne soyez polis et n'oubliez pas que certains joueurs peuvent être mineurs. Special game modes such as 'Vampirism' or 'Karma' allow you to develop completely new tactics. Try them in a custom game! @@ -610,12 +610,12 @@ The Old Limbuger only causes a small explosion. However the wind affected smelly cloud can poison lots of hogs at once. Tips - Le Old Limbuger cause seulement une petite explosion. En revanche le vent affecte le petit nuage empoisonné qui peut contaminer de nombreux hérissons à la fois. + Le vieux Limburger cause seulement une petite explosion. En revanche le vent affecte le petit nuage empoisonné qui peut contaminer de nombreux hérissons à la fois. The Piano Strike is the most damaging air strike. You'll lose the hedgehog performing it, so there's a huge downside as well. Tips - L'attaque du Piano est la plus dévastatrice des attaques aériennes. Vous perdrez le hérisson qui la lance, donc il y a une contrepartie énorme. + L'attaque du Piano est la plus dévastatrice des attaques aériennes. Mais la contrepartie est grande puisque vous perdrez le hérisson qui la lance. The Homing Bee can be tricky to use. It's turn radius depends on it's velocity, so try to not use full power. @@ -705,17 +705,17 @@ The Windows version of Hedgewars supports Xfire. Make sure to add Hedgewars to its game list so your friends can see you playing. Tips - + La version Windows de Hedgewars supporte Xfire. Ajoutez Hedgewars à la liste des jeux pour que vos amis puissent vous voir jouer The Homing Bee can be tricky to use. Its turn radius depends on it's velocity, so try to not use full power. Tips - + L'Abeille Missile peut être délicate à utiliser. Sa courbe de lancer dépend de sa vitesse, pour plus de précision ne l'envoyez pas à pleine puissance. Use the Molotov or Flame Thrower to temporary keep hedgehogs from passing terrain such as tunnels or platforms. Tips - + Utilisez le Lance-Flammes ou le Cocktail Molotov pour empêcher temporairement les hérissons de circuler dans les tunnels ou sur les plateformes. @@ -1030,7 +1030,7 @@ Disable land objects when generating random maps. - Désactiver les objets de terrain en générant des cartes aléatoires. + Désactiver les objets de terrain lorsque des cartes aléatoires sont générées. AI respawns on death. @@ -1198,7 +1198,7 @@ Show ammo menu tooltips - Montrer le menu d'aide des munitions. + Montrer les astuces du menu des armes. Enable frontend sounds @@ -1245,11 +1245,11 @@ Any - + Aucun In lobby - + En attente In progress @@ -1269,27 +1269,27 @@ Red/Cyan - + Rouge/Cyan Cyan/Red - + Cyan/Rouge Red/Blue - + Rouge/Bleu Blue/Red - + Bleu/Rouge Red/Green - + Rouge/Vert Green/Red - + Vert/Rouge Side-by-side @@ -1531,11 +1531,11 @@ Gameplay - + Mode de jeu Stereo rendering - + Rendu stéréo diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Locale/sk.txt --- a/share/hedgewars/Data/Locale/sk.txt Thu Aug 04 17:41:07 2011 +0200 +++ b/share/hedgewars/Data/Locale/sk.txt Thu Aug 04 17:44:55 2011 +0200 @@ -55,6 +55,7 @@ 00:52=Žiadna zbraň nie je vybraná 00:53=TARDIS 00:54=Budova +00:55=Postrek zeme 01:00=Do boja! 01:01=Remíza @@ -71,6 +72,12 @@ 01:12=Posledné kolo pred Rýchlou smrťou! 01:13=Ešte %1 kolá do Rýchlej smrti! 01:14=Priprav sa, %1! +01:15=Nepatrný +01:16=Nízky +01:17=Normálny +01:18=Vysoký +01:19=Extrémny +01:20=%1 odskok ; Správy o udalostiach ; Ježko (%1) zomrel @@ -99,6 +106,7 @@ 02:00=%1 odišiel za lepším 02:00=%1 už nespotrebováva pamäť tohto počítača 02:00=%1 odišiel a už sa nevrátil +02:00=Je tu niekde doktor? ; Ježko (%1) sa utopil 02:01=%1 sa hrá na ponorku! 02:01=%1 napodobnil Titanik! @@ -132,6 +140,10 @@ 02:02=Dajme im na frak! 02:02=Nikdy sa nevzdávaj 02:02=Bojuj čestne! +; Kolo končí (výhra, momentálne nepoužívané) +02:03=... +; Kolo končí (remíza, momentálne nepoužívané) +02:04=... ; Nová krabica so zdravím 02:05=Doktora! 02:05=Prvá pomoc z nebies! @@ -191,7 +203,7 @@ 02:09=Išlo o jasné zlyhanie techniky! ; Hog shot an home run (using the bat and another hog) 02:10=Home Run! -02:10=Vták, lietadlo, ... +02:10=Letí, letí, všetko letí... 02:10=A je z kola von! ; Ježko (%1) musí odísť (team skončil) @@ -331,3 +343,4 @@ 05:18=Neobmedzené útoky 05:19=Zbrane sú na konci ťahu resetované 05:20=Zbrane nie sú zdieľané ježkami +05:21=Tag tím: Teamy v spoločnom klane sa postupne striedajú v ťahaní|Zdieľaný čas: Tímy v rámci klanu zdieľajú čas na ťah diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Missions/Training/User_Mission_-_Bamboo_Thicket.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Missions/Training/User_Mission_-_Bamboo_Thicket.lua Thu Aug 04 17:44:55 2011 +0200 @@ -0,0 +1,87 @@ + +loadfile(GetDataPath() .. "Scripts/Locale.lua")() + +local player = nil +local enemy = nil +local firedShell = false +local turnNumber = 0 + +local hhs = {} +local numhhs = 0 + +function onGameInit() + + Seed = 0 + TurnTime = 20000 + CaseFreq = 0 + MinesNum = 0 + Explosives = 0 + Map = "Bamboo" + Theme = "Bamboo" + + AddTeam(loc("Pathetic Resistance"), 14483456, "Simple", "Island", "Default") + player = AddHog("Ikeda", 0, 10, "StrawHat") + + AddTeam(loc("Cybernetic Empire"), 1175851, "Simple", "Island", "Default") + enemy = AddHog(loc("Unit 835"), 1, 10, "cyborg") + + SetGearPosition(player,1166,1680) + SetGearPosition(enemy,2848,1443) + +end + + +function onGameStart() + + ShowMission(loc("Bamboo Thicket"), loc("User Challenge"), loc("Eliminate the enemy before the time runs out"), -amBazooka, 0) + + --WEAPON CRATE LIST. WCRATES: 1 + SpawnAmmoCrate(1915,1876,amBazooka) + --UTILITY CRATE LIST. UCRATES: 2 + SpawnUtilityCrate(1986,1141,amBlowTorch) + SpawnUtilityCrate(1427,1527,amParachute) + + AddAmmo(enemy, amGrenade, 100) + +end + +function onNewTurn() + SetWind(100) + turnNumber = turnNumber + 1 +end + +function onAmmoStoreInit() + SetAmmo(amSkip, 9, 0, 0, 0) + SetAmmo(amGirder, 4, 0, 0, 0) + SetAmmo(amBlowTorch, 0, 0, 0, 1) + SetAmmo(amParachute, 0, 0, 0, 2) + SetAmmo(amBazooka, 0, 0, 0, 2) +end + + +function onGearAdd(gear) + + if GetGearType(gear) == gtHedgehog then + hhs[numhhs] = gear + numhhs = numhhs + 1 + elseif GetGearType(gear) == gtShell then + firedShell = true + end + +end + +function onGearDelete(gear) + + if (gear == enemy) then + + ShowMission(loc("Bamboo Thicket"), loc("MISSION SUCCESSFUL"), loc("Congratulations!"), 0, 0) + + if (turnNumber < 6) and (firedShell == false) then + AddCaption(loc("Achievement Unlocked") .. ": " .. loc("Energetic Engineer"),0xffba00ff,capgrpMessage2) + end + + elseif gear == player then + ShowMission(loc("Bamboo Thicket"), loc("MISSION FAILED"), loc("Oh no! Just try again!"), -amSkip, 0) + end + +end diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Scripts/Multiplayer/The_Specialists.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/The_Specialists.lua Thu Aug 04 17:41:07 2011 +0200 +++ b/share/hedgewars/Data/Scripts/Multiplayer/The_Specialists.lua Thu Aug 04 17:44:55 2011 +0200 @@ -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 b9aed3de7c27 -r 272ed78e59a7 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 Thu Aug 04 17:44:55 2011 +0200 @@ -0,0 +1,14 @@ + + + + + command + escript Scripts/Multiplayer/Balanced_Random_Weapon.lua + description + + scheme + Default.plist + weapon + + + diff -r b9aed3de7c27 -r 272ed78e59a7 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 Thu Aug 04 17:44:55 2011 +0200 @@ -0,0 +1,14 @@ + + + + + command + escript Scripts/Multiplayer/Capture_the_Flag.lua + description + + scheme + Default.plist + weapon + Default.plist + + diff -r b9aed3de7c27 -r 272ed78e59a7 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 Thu Aug 04 17:44:55 2011 +0200 @@ -0,0 +1,14 @@ + + + + + command + escript Scripts/Multiplayer/GaudyRacer.lua + description + + scheme + Default.plist + weapon + Default.plist + + diff -r b9aed3de7c27 -r 272ed78e59a7 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 Thu Aug 04 17:44:55 2011 +0200 @@ -0,0 +1,14 @@ + + + + + command + escript Scripts/Multiplayer/No_Jumping.lua + description + + scheme + Default.plist + weapon + Default.plist + + diff -r b9aed3de7c27 -r 272ed78e59a7 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 Thu Aug 04 17:44:55 2011 +0200 @@ -0,0 +1,14 @@ + + + + + command + + description + + scheme + Default.plist + weapon + Default.plist + + diff -r b9aed3de7c27 -r 272ed78e59a7 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 Thu Aug 04 17:44:55 2011 +0200 @@ -0,0 +1,14 @@ + + + + + command + escript Scripts/Multiplayer/Balanced_Random_Weapon.lua + description + + scheme + Default.plist + weapon + + + diff -r b9aed3de7c27 -r 272ed78e59a7 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 Thu Aug 04 17:44:55 2011 +0200 @@ -0,0 +1,14 @@ + + + + + command + escript Scripts/Multiplayer/Space_Invasion.lua + description + + scheme + Default.plist + weapon + Default.plist + + diff -r b9aed3de7c27 -r 272ed78e59a7 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 Thu Aug 04 17:44:55 2011 +0200 @@ -0,0 +1,14 @@ + + + + + command + escript Scripts/Multiplayer/The_Specialists.lua + description + + scheme + + weapon + + + diff -r b9aed3de7c27 -r 272ed78e59a7 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 Thu Aug 04 17:44:55 2011 +0200 @@ -0,0 +1,14 @@ + + + + + command + escript Scripts/Multiplayer/Tumbler.lua + description + + scheme + Default.plist + weapon + Default.plist + + diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/Ball.png Binary file share/hedgewars/Data/Themes/Golf/Ball.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/Border.png Binary file share/hedgewars/Data/Themes/Golf/Border.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/Car.png Binary file share/hedgewars/Data/Themes/Golf/Car.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/Chunk.png Binary file share/hedgewars/Data/Themes/Golf/Chunk.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/Clouds.png Binary file share/hedgewars/Data/Themes/Golf/Clouds.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/Club.png Binary file share/hedgewars/Data/Themes/Golf/Club.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/Flag1.png Binary file share/hedgewars/Data/Themes/Golf/Flag1.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/Flag2.png Binary file share/hedgewars/Data/Themes/Golf/Flag2.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/Flake.png Binary file share/hedgewars/Data/Themes/Golf/Flake.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/Girder.png Binary file share/hedgewars/Data/Themes/Golf/Girder.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/Hole.png Binary file share/hedgewars/Data/Themes/Golf/Hole.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/LandBackTex.png Binary file share/hedgewars/Data/Themes/Golf/LandBackTex.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/LandTex.png Binary file share/hedgewars/Data/Themes/Golf/LandTex.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/Sky.png Binary file share/hedgewars/Data/Themes/Golf/Sky.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/SkyL.png Binary file share/hedgewars/Data/Themes/Golf/SkyL.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/SkyR.png Binary file share/hedgewars/Data/Themes/Golf/SkyR.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/Tee.png Binary file share/hedgewars/Data/Themes/Golf/Tee.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/horizont.png Binary file share/hedgewars/Data/Themes/Golf/horizont.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/icon.png Binary file share/hedgewars/Data/Themes/Golf/icon.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/icon@2x.png Binary file share/hedgewars/Data/Themes/Golf/icon@2x.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Golf/theme.cfg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Themes/Golf/theme.cfg Thu Aug 04 17:44:55 2011 +0200 @@ -0,0 +1,15 @@ +sky = 117, 141, 186 +border = 38, 114, 35 +water-top = $54, $5C, $9D +water-bottom = $34, $3C, $7D +water-opacity = $80 +music = nature.ogg +clouds = 9 +object = Ball, 3, 0, 18, 24, 6, 1, 0, 0, 24, 13 +object = Tee, 1, 6, 22, 5, 4, 1, 0, 0, 16, 20 +object = Car, 1, 65, 258, 80, 2, 1, 0, 0, 240, 215 +object = Hole, 5, 0, 44, 100, 4, 1, 19, 0, 54, 41 +object = Flag1, 1, 65, 258, 80, 2, 1, 0, 0, 240, 215 +object = Flag2, 1, 65, 258, 80, 2, 1, 0, 0, 240, 215 +object = Club, 2, 162, 254, 21, 6, 1, 0, 0, 240, 245 +flakes = 100, 1, 1000, 50, 50 diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Underwater/SDFlake.png Binary file share/hedgewars/Data/Themes/Underwater/SDFlake.png has changed diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/Themes/Underwater/theme.cfg --- a/share/hedgewars/Data/Themes/Underwater/theme.cfg Thu Aug 04 17:41:07 2011 +0200 +++ b/share/hedgewars/Data/Themes/Underwater/theme.cfg Thu Aug 04 17:44:55 2011 +0200 @@ -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 diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/misc/hedgewars-mimeinfo.xml --- a/share/hedgewars/Data/misc/hedgewars-mimeinfo.xml Thu Aug 04 17:41:07 2011 +0200 +++ b/share/hedgewars/Data/misc/hedgewars-mimeinfo.xml Thu Aug 04 17:44:55 2011 +0200 @@ -15,6 +15,7 @@ Demo gry Hedgewars Hedgewars Demo Demo hry Hedgewars + Ukázka hry Hedgewars Demo för Hedgewars @@ -34,6 +35,7 @@ Zapis gry Hedgewars Partida guardada de Hedgewars Uložená hra Hedgewars + Uložená hra Hedgewars Sparfil för Hedgewars diff -r b9aed3de7c27 -r 272ed78e59a7 share/hedgewars/Data/misc/hwengine.desktop.in --- a/share/hedgewars/Data/misc/hwengine.desktop.in Thu Aug 04 17:41:07 2011 +0200 +++ b/share/hedgewars/Data/misc/hwengine.desktop.in Thu Aug 04 17:44:55 2011 +0200 @@ -13,6 +13,7 @@ GenericName[pt]=Motor de jogo Hedgewars, para reprodução de jogos guardados e demos GenericName[ru]=Движок Hedgewars для проигрывания сохранённых игр и демок GenericName[sk]=Engine hry Hedgewars, pre prehrávanie uložených hier a demo súborov +GenericName[cs]=Engine hry Hedgewars pro přehrávání uložených her a ukázkových souborů GenericName[sv]=Hedgewarsmotorn, för att öppna demo- och sparfiler Icon=hedgewars.png Exec=${CMAKE_INSTALL_PREFIX}/bin/hwengine ${HEDGEWARS_DATADIR}/hedgewars/Data %f