--- a/QTfrontend/about.cpp Tue Feb 22 18:51:22 2011 +0200
+++ b/QTfrontend/about.cpp Sun Feb 27 18:03:33 2011 -0500
@@ -127,7 +127,7 @@
"Slovak: Jose Riha<br>"
"Spanish: Carlos Vives <<a href=\"mailto:mail@carlosvives.es\">mail@carlosvives.es</a>><br>"
"Swedish: Niklas Grahn <<a href=\"mailto:raewolusjoon@yaoo.com\">raewolusjoon@yaoo.com</a>>, Henrik Rostedt <<a href=\"mailto:henrik.rostedt@gmail.com\">henrik.rostedt@gmail.com</a>><br>"
- "Ukrainian: Eugene V. Lyubimkin <<a href=\"mailto:jackyf.devel@gmail.com\">jackyf.devel@gmail.com</a>>, Igor Paliychuk <<a href=\"mailto:igor-hkr@mail.ru\">igor-hkr@mail.ru</a>>, Yevhen Sakara <<a href=\"mailto:eresid@gmail.com\">eresid@gmail.com</a>>"
+ "Ukrainian: Eugene V. Lyubimkin <<a href=\"mailto:jackyf.devel@gmail.com\">jackyf.devel@gmail.com</a>>, Igor Paliychuk <<a href=\"mailto:mansonigor@gmail.com\">mansonigor@gmail.com</a>>, Eugene Sakara <<a href=\"mailto:eresid@gmail.com\">eresid@gmail.com</a>>"
"</p><h2>") +
QLabel::tr("Special thanks:") + "</h2><p>"
--- a/QTfrontend/chatwidget.h Tue Feb 22 18:51:22 2011 +0200
+++ b/QTfrontend/chatwidget.h Sun Feb 27 18:03:33 2011 -0500
@@ -61,6 +61,7 @@
void setShowReady(bool s);
void setShowFollow(bool enabled);
static const char* STYLE;
+ QStringList ignoreList, friendsList;
private:
void loadList(QStringList & list, const QString & file);
@@ -90,7 +91,6 @@
QGridLayout mainLayout;
QTextBrowser* chatText;
QStringList chatStrings;
- QStringList ignoreList, friendsList;
QListWidget* chatNicks;
QLineEdit* chatEditLine;
QAction * acInfo;
--- a/QTfrontend/gameuiconfig.h Tue Feb 22 18:51:22 2011 +0200
+++ b/QTfrontend/gameuiconfig.h Sun Feb 27 18:03:33 2011 -0500
@@ -31,6 +31,7 @@
Q_OBJECT
public:
+ HWForm * Form;
GameUIConfig(HWForm * FormWidgets, const QString & fileName);
QStringList GetTeamsList();
QRect vid_Resolution();
@@ -67,7 +68,6 @@
void SaveOptions();
private:
- HWForm * Form;
quint8 depth;
};
--- a/QTfrontend/newnetclient.cpp Tue Feb 22 18:51:22 2011 +0200
+++ b/QTfrontend/newnetclient.cpp Sun Feb 27 18:03:33 2011 -0500
@@ -29,6 +29,10 @@
#include "gamecfgwidget.h"
#include "teamselect.h"
#include "misc.h"
+/* only to get the ignoreList from the chat widget */
+#include "hwform.h"
+#include "pages.h"
+#include "chatwidget.h"
char delimeter='\n';
@@ -398,8 +402,15 @@
if (isChief)
emit configAsked();
}
- emit nickAdded(lst[i], isChief && (lst[i] != mynick));
- emit chatStringFromNet(tr("%1 *** %2 has joined the room").arg('\x03').arg(lst[i]));
+ if (lst[i] != mynick && isChief && config->Form->ui.pageRoomsList->chatWidget->ignoreList.contains(lst[i], Qt::CaseInsensitive) && !config->Form->ui.pageRoomsList->chatWidget->friendsList.contains(lst[i], Qt::CaseInsensitive))
+ {
+ kickPlayer(lst[i]);
+ }
+ else
+ {
+ emit nickAdded(lst[i], isChief && (lst[i] != mynick));
+ emit chatStringFromNet(tr("%1 *** %2 has joined the room").arg('\x03').arg(lst[i]));
+ }
}
return;
}
--- a/gameServer/Actions.hs Tue Feb 22 18:51:22 2011 +0200
+++ b/gameServer/Actions.hs Sun Feb 27 18:03:33 2011 -0500
@@ -14,6 +14,7 @@
import Control.DeepSeq
import Data.Unique
import Control.Arrow
+import Control.Exception
-----------------------------
import CoreTypes
import Utils
@@ -53,6 +54,7 @@
| StatsAction
| RestartServer Bool
+
type CmdHandler = [B.ByteString] -> Reader (ClientIndex, IRnC) [Action]
instance NFData Action where
@@ -412,5 +414,8 @@
where
st irnc = (length $ allRooms irnc, length $ allClients irnc)
-processAction (RestartServer _) =
- return ()
\ No newline at end of file
+processAction (RestartServer force) = do
+ if force then do
+ throw RestartException
+ else
+ processAction $ ModifyServerInfo (\s -> s{restartPending=True})
--- a/gameServer/CoreTypes.hs Tue Feb 22 18:51:22 2011 +0200
+++ b/gameServer/CoreTypes.hs Sun Feb 27 18:03:33 2011 -0500
@@ -1,8 +1,7 @@
-{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE OverloadedStrings, DeriveDataTypeable #-}
module CoreTypes where
import Control.Concurrent
-import Control.Concurrent.STM
import Data.Word
import qualified Data.Map as Map
import Data.Sequence(Seq, empty)
@@ -11,7 +10,9 @@
import Data.Function
import Data.ByteString.Char8 as B
import Data.Unique
-
+import Control.Exception
+import Data.Typeable
+-----------------------
import RoomsAndClients
type ClientChan = Chan [B.ByteString]
@@ -135,7 +136,7 @@
dbLogin :: B.ByteString,
dbPassword :: B.ByteString,
lastLogins :: [(B.ByteString, (UTCTime, B.ByteString))],
- stats :: TMVar StatisticsInfo,
+ restartPending :: Bool,
coreChan :: Chan CoreMessage,
dbQueries :: Chan DBQuery
}
@@ -143,7 +144,7 @@
instance Show ServerInfo where
show _ = "Server Info"
-newServerInfo :: TMVar StatisticsInfo -> Chan CoreMessage -> Chan DBQuery -> ServerInfo
+newServerInfo :: Chan CoreMessage -> Chan DBQuery -> ServerInfo
newServerInfo =
ServerInfo
True
@@ -156,6 +157,7 @@
""
""
[]
+ False
data AccountInfo =
HasAccount B.ByteString Bool
@@ -189,4 +191,11 @@
data Notice =
NickAlreadyInUse
| AdminLeft
- deriving Enum
\ No newline at end of file
+ deriving Enum
+
+data ShutdownException =
+ ShutdownException
+ | RestartException
+ deriving (Show, Typeable)
+
+instance Exception ShutdownException
--- a/gameServer/Opts.hs Tue Feb 22 18:51:22 2011 +0200
+++ b/gameServer/Opts.hs Sun Feb 27 18:03:33 2011 -0500
@@ -7,10 +7,6 @@
import System.Environment
import System.Console.GetOpt
import Data.Maybe ( fromMaybe )
-#if defined(OFFICIAL_SERVER)
-import qualified Data.ByteString.Char8 as B
-import Network
-#endif
-------------------
import CoreTypes
import Utils
@@ -23,11 +19,6 @@
readListenPort
, readDedicated
-#if defined(OFFICIAL_SERVER)
- , readDbLogin
- , readDbPassword
- readDbHost
-#endif
:: String -> ServerInfo -> ServerInfo
@@ -39,12 +30,6 @@
where
readDed = fromMaybe True (maybeRead str :: Maybe Bool)
-#if defined(OFFICIAL_SERVER)
-readDbLogin str opts = opts{dbLogin = B.pack str}
-readDbPassword str opts = opts{dbPassword = B.pack str}
-readDbHost str opts = opts{dbHost = B.pack str}
-#endif
-
getOpts :: ServerInfo -> IO ServerInfo
getOpts opts = do
args <- getArgs
--- a/gameServer/ServerCore.hs Tue Feb 22 18:51:22 2011 +0200
+++ b/gameServer/ServerCore.hs Sun Feb 27 18:03:33 2011 -0500
@@ -32,7 +32,7 @@
mainLoop :: StateT ServerState IO ()
mainLoop = forever $ do
- get >>= \s -> put $! s
+ -- get >>= \s -> put $! s
si <- gets serverInfo
r <- liftIO $ readChan $ coreChan si
@@ -53,11 +53,6 @@
liftIO $ debugM "Clients" $ "DeleteClient: " ++ show ci
processAction (DeleteClient ci)
- --else
- --do
- --debugM "Clients" "Message from dead client"
- --return (serverInfo, rnc)
-
ClientAccountInfo ci uid info -> do
rnc <- gets roomsClients
exists <- liftIO $ clientExists rnc ci
@@ -90,6 +85,4 @@
rnc <- newRoomsAndClients newRoom
- _ <- forkIO $ evalStateT mainLoop (ServerState Nothing si Set.empty rnc)
-
- forever $ threadDelay 3600000000 -- one hour
+ evalStateT mainLoop (ServerState Nothing si Set.empty rnc)
--- a/gameServer/hedgewars-server.hs Tue Feb 22 18:51:22 2011 +0200
+++ b/gameServer/hedgewars-server.hs Sun Feb 27 18:03:33 2011 -0500
@@ -4,18 +4,15 @@
import Network.Socket
import Network.BSD
-import Control.Concurrent.STM
import Control.Concurrent.Chan
-import qualified Control.Exception as Exception
+import qualified Control.Exception as E
import System.Log.Logger
+import System.Process
+import Control.Monad
-----------------------------------
import Opts
import CoreTypes
import ServerCore
-#if defined(OFFICIAL_SERVER)
-import Utils
-#endif
-
#if !defined(mingw32_HOST_OS)
import System.Posix
@@ -27,6 +24,26 @@
updateGlobalLogger "Clients"
(setLevel INFO)
+
+server :: ServerInfo -> IO ()
+server si = do
+ proto <- getProtocolNumber "tcp"
+ E.bracket
+ (socket AF_INET Stream proto)
+ sClose
+ (\sock -> do
+ setSocketOption sock ReuseAddr 1
+ bindSocket sock (SockAddrInet (listenPort si) iNADDR_ANY)
+ listen sock maxListenQueue
+ startServer si sock
+ )
+
+handleRestart :: ShutdownException -> IO ()
+handleRestart ShutdownException = return ()
+handleRestart RestartException = do
+ _ <- createProcess (proc "./hedgewars-server" [])
+ return ()
+
main :: IO ()
main = withSocketsDo $ do
#if !defined(mingw32_HOST_OS)
@@ -36,28 +53,15 @@
setupLoggers
- stats' <- atomically $ newTMVar (StatisticsInfo 0 0)
dbQueriesChan <- newChan
coreChan' <- newChan
- serverInfo' <- getOpts $ newServerInfo stats' coreChan' dbQueriesChan
+ serverInfo' <- getOpts $ newServerInfo coreChan' dbQueriesChan
#if defined(OFFICIAL_SERVER)
- dbHost' <- askFromConsole "DB host: "
- dbLogin' <- askFromConsole "login: "
- dbPassword' <- askFromConsole "password: "
- let serverInfo = serverInfo'{dbHost = dbHost', dbLogin = dbLogin', dbPassword = dbPassword'}
+ [dbHost', dbLogin', dbPassword'] <- liftM read $ readFile "hedgewars-server.ini"
+ let si = serverInfo'{dbHost = dbHost', dbLogin = dbLogin', dbPassword = dbPassword'}
#else
- let serverInfo = serverInfo'
+ let si = serverInfo'
#endif
-
- proto <- getProtocolNumber "tcp"
- Exception.bracket
- (socket AF_INET Stream proto)
- sClose
- (\sock -> do
- setSocketOption sock ReuseAddr 1
- bindSocket sock (SockAddrInet (listenPort serverInfo) iNADDR_ANY)
- listen sock maxListenQueue
- startServer serverInfo sock
- )
+ (server si) `E.catch` handleRestart
--- a/hedgewars/GSHandlers.inc Tue Feb 22 18:51:22 2011 +0200
+++ b/hedgewars/GSHandlers.inc Sun Feb 27 18:03:33 2011 -0500
@@ -1692,6 +1692,27 @@
else
if ((GameTicks and $3F) = 25) then
doStepFallingGear(Gear);
+ if (Gear^.Health = 0) then
+ begin
+ if not Gear^.dY.isNegative and (Gear^.dY > _0_2) and TestCollisionYwithGear(Gear, 1) then
+ inc(Gear^.Damage, hwRound(Gear^.dY * _70))
+ else if not Gear^.dX.isNegative and (Gear^.dX > _0_2) and TestCollisionXwithGear(Gear, 1) then
+ inc(Gear^.Damage, hwRound(Gear^.dX * _70))
+ else if Gear^.dY.isNegative and (Gear^.dY < -_0_2) and TestCollisionYwithGear(Gear, -1) then
+ inc(Gear^.Damage, hwRound(Gear^.dY * -_70))
+ else if Gear^.dX.isNegative and (Gear^.dX < -_0_2) and TestCollisionXwithGear(Gear, -1) then
+ inc(Gear^.Damage, hwRound(Gear^.dX * -_70));
+
+ if (Gear^.Damage > random(30)) and ((GameTicks and $FF) = 0) then
+ AddVisualGear(hwRound(Gear^.X) - 4 + Random(8), hwRound(Gear^.Y) - 4 - Random(4), vgtSmoke);
+
+ if (Gear^.Damage > 35) then
+ begin
+ doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 50, Gear^.Hedgehog, EXPLAutoSound);
+ DeleteGear(Gear);
+ exit
+ end
+ end;
if ((Gear^.State and gsttmpFlag) <> 0) and (Gear^.Health <> 0) then
if ((Gear^.State and gstAttacking) = 0) then
@@ -1719,6 +1740,8 @@
vgtSmoke);
PlaySound(sndVaporize);
Gear^.Health := 0;
+ Gear^.Damage := 0;
+AddFileLog('initial mine damage:'+IntToStr(Gear^.Damage));
end;
exit
end;
@@ -2307,13 +2330,19 @@
//4: FollowGear := AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtWaterMelon, 0, cBombsSpeed *
// Gear^.Tag, _0, 5000);
end;
- Gear^.dX := Gear^.dX + int2hwFloat(30 * Gear^.Tag)
+ Gear^.dX := Gear^.dX + int2hwFloat(30 * Gear^.Tag);
+ StopSound(Gear^.SoundChannel, 4000);
end;
if (GameTicks and $3F) = 0 then
AddVisualGear(hwRound(Gear^.X), hwRound(Gear^.Y), vgtSmokeTrace);
- if (hwRound(Gear^.X) > (LAND_WIDTH+1024)) or (hwRound(Gear^.X) < -1024) then DeleteGear(Gear)
+ if (hwRound(Gear^.X) > (LAND_WIDTH+1024)) or (hwRound(Gear^.X) < -1024) then
+ begin
+ // avoid to play forever (is this necessary?)
+ StopSound(Gear^.SoundChannel);
+ DeleteGear(Gear)
+ end;
end;
procedure doStepAirAttack(Gear: PGear);
@@ -2344,6 +2373,8 @@
Gear^.Health := 6;
Gear^.doStep := @doStepAirAttackWork;
+ Gear^.SoundChannel := LoopSound(sndPlane, 4000);
+
end;
////////////////////////////////////////////////////////////////////////////////
--- a/hedgewars/SDLh.pas Tue Feb 22 18:51:22 2011 +0200
+++ b/hedgewars/SDLh.pas Sun Feb 27 18:03:33 2011 -0500
@@ -826,6 +826,9 @@
function Mix_ResumeMusic(music: PMixMusic): LongInt; cdecl; external SDL_MixerLibName;
function Mix_HaltChannel(channel: LongInt): LongInt; cdecl; external SDL_MixerLibName;
+function Mix_FadeInChannelTimed(channel: LongInt; chunk: PMixChunk; loops: LongInt; fadems: LongInt; ticks: LongInt): LongInt; cdecl; external SDL_MixerLibName;
+function Mix_FadeOutChannel(channel: LongInt; fadems: LongInt): LongInt; cdecl; external SDL_MixerLibName;
+
(* SDL_image *)
function IMG_Init(flags: LongInt): LongInt; cdecl; external SDL_ImageLibName;
procedure IMG_Quit; cdecl; external SDL_ImageLibName;
--- a/hedgewars/uSound.pas Tue Feb 22 18:51:22 2011 +0200
+++ b/hedgewars/uSound.pas Sun Feb 27 18:03:33 2011 -0500
@@ -35,13 +35,16 @@
procedure PlaySound(snd: TSound; voicepack: PVoicepack);
procedure PlaySound(snd: TSound; voicepack: PVoicepack; keepPlaying: boolean);
function LoopSound(snd: TSound): LongInt;
+function LoopSound(snd: TSound; fadems: LongInt): LongInt;
function LoopSound(snd: TSound; voicepack: PVoicepack): LongInt;
+function LoopSound(snd: TSound; voicepack: PVoicepack; fadems: LongInt): LongInt;
procedure PlayMusic;
procedure PauseMusic;
procedure ResumeMusic;
procedure ChangeMusic;
procedure StopSound(snd: TSound);
procedure StopSound(chn: LongInt);
+procedure StopSound(chn, fadems: LongInt);
function ChangeVolume(voldelta: LongInt): LongInt;
function AskForVoicepack(name: shortstring): Pointer;
@@ -219,7 +222,17 @@
LoopSound:= LoopSound(snd, nil)
end;
+function LoopSound(snd: TSound; fadems: LongInt): LongInt;
+begin
+ LoopSound:= LoopSound(snd, nil, fadems)
+end;
+
function LoopSound(snd: TSound; voicepack: PVoicepack): LongInt;
+begin
+ LoopSound:= LoopSound(snd, nil, 0)
+end;
+
+function LoopSound(snd: TSound; voicepack: PVoicepack; fadems: LongInt): LongInt;
var s: shortstring;
begin
if (not isSoundEnabled) or fastUntilLag then
@@ -252,13 +265,17 @@
TryDo(defVoicepack^.chunks[snd] <> nil, msgFailed, true);
WriteLnToConsole(msgOK);
end;
- LoopSound:= Mix_PlayChannelTimed(-1, defVoicepack^.chunks[snd], -1, -1);
+ if fadems > 0 then
+ LoopSound:= Mix_FadeInChannelTimed(-1, defVoicepack^.chunks[snd], -1, fadems, -1)
+ else
+ LoopSound:= Mix_PlayChannelTimed(-1, defVoicepack^.chunks[snd], -1, -1);
end;
end;
procedure StopSound(snd: TSound);
begin
if not isSoundEnabled then exit;
+
if (lastChan[snd] <> -1) and (Mix_Playing(lastChan[snd]) <> 0) then
begin
Mix_HaltChannel(lastChan[snd]);
@@ -274,6 +291,14 @@
Mix_HaltChannel(chn);
end;
+procedure StopSound(chn, fadems: LongInt);
+begin
+ if not isSoundEnabled then exit;
+
+ if (chn <> -1) and (Mix_Playing(chn) <> 0) then
+ Mix_FadeOutChannel(chn, fadems);
+end;
+
procedure PlayMusic;
var s: shortstring;
begin
--- a/hedgewars/uTypes.pas Tue Feb 22 18:51:22 2011 +0200
+++ b/hedgewars/uTypes.pas Sun Feb 27 18:03:33 2011 -0500
@@ -106,7 +106,7 @@
sndPoisonCough, sndPoisonMoan, sndBirdyLay, sndWhistle, sndBeeWater,
sndPiano0, sndPiano1, sndPiano2, sndPiano3, sndPiano4, sndPiano5, sndPiano6, sndPiano7, sndPiano8,
sndSkip, sndSineGun, sndOoff1, sndOoff2, sndOoff3, sndWhack,
- sndComeonthen, sndParachute, sndBump, sndResurrector);
+ sndComeonthen, sndParachute, sndBump, sndResurrector, sndPlane);
TAmmoType = (amNothing, amGrenade, amClusterBomb, amBazooka, amBee, amShotgun, amPickHammer, // 6
amSkip, amRope, amMine, amDEagle, amDynamite, amFirePunch, amWhip, // 13
--- a/hedgewars/uVariables.pas Tue Feb 22 18:51:22 2011 +0200
+++ b/hedgewars/uVariables.pas Sun Feb 27 18:03:33 2011 -0500
@@ -704,7 +704,8 @@
(FileName: 'Comeonthen.ogg'; Path: ptVoices),// sndComeonthen
(FileName: 'parachute.ogg'; Path: ptSounds),// sndParachute
(FileName: 'bump.ogg'; Path: ptSounds),// sndBump
- (FileName: 'hogchant3.ogg'; Path: ptSounds) // sndResurrector
+ (FileName: 'hogchant3.ogg'; Path: ptSounds),// sndResurrector
+ (FileName: 'plane.ogg'; Path: ptSounds) // sndPlane
);
Ammoz: array [TAmmoType] of record
Binary file share/hedgewars/Data/Graphics/Hats/NinjaFull.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/NinjaStraight.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/NinjaTriangle.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/NoHat.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/darthvader.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/mickey_ears.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/stormtrooper.png has changed
--- a/share/hedgewars/Data/Locale/hedgewars_uk.ts Tue Feb 22 18:51:22 2011 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_uk.ts Sun Feb 27 18:03:33 2011 -0500
@@ -9,7 +9,7 @@
</message>
<message>
<source>copy of</source>
- <translation type="unfinished"></translation>
+ <translation>копія</translation>
</message>
</context>
<context>
@@ -21,7 +21,7 @@
<message numerus="yes">
<source>Every %1 turn</source>
<translation>
- <numerusform>Хожного ходу</numerusform>
+ <numerusform>Кожного ходу</numerusform>
<numerusform>Кожних %1 ходи</numerusform>
<numerusform>Кожних %1 ходів</numerusform>
</translation>
@@ -46,10 +46,6 @@
<translation>Редагувати схеми</translation>
</message>
<message>
- <source>When this option is enabled selecting a game scheme will auto-select a weapon (and viceversa)</source>
- <translation type="obsolete">Коли ввімкнена ця опція при виборі схеми гри зброя буде вибрана автоматично (and viceversa)</translation>
- </message>
- <message>
<source>When this option is enabled selecting a game scheme will auto-select a weapon</source>
<translation>Коли ввімкнена ця опція при виборі схеми гри зброя буде вибрана автоматично</translation>
</message>
@@ -193,11 +189,11 @@
</message>
<message>
<source>Seed</source>
- <translation type="unfinished"></translation>
+ <translation>Перемішати</translation>
</message>
<message>
<source>Set</source>
- <translation type="unfinished"></translation>
+ <translation>Задати</translation>
</message>
</context>
<context>
@@ -335,31 +331,31 @@
<name>PageDrawMap</name>
<message>
<source>Undo</source>
- <translation type="unfinished"></translation>
+ <translation>Повернути</translation>
</message>
<message>
<source>Clear</source>
- <translation type="unfinished">Очистити</translation>
+ <translation>Очистити</translation>
</message>
<message>
<source>Load</source>
- <translation type="unfinished">Завантажити</translation>
+ <translation>Завантажити</translation>
</message>
<message>
<source>Save</source>
- <translation type="unfinished"></translation>
+ <translation>Зберегти</translation>
</message>
<message>
<source>Load drawn map</source>
- <translation type="unfinished"></translation>
+ <translation>Завантажити намальовану мапу</translation>
</message>
<message>
<source>Drawn Maps (*.hwmap);;All files (*.*)</source>
- <translation type="unfinished"></translation>
+ <translation>Намальовані мапи (*.hwmap);;Всі файли (*.*)</translation>
</message>
<message>
<source>Save drawn map</source>
- <translation type="unfinished"></translation>
+ <translation>Зберегти намальовану мапу</translation>
</message>
</context>
<context>
@@ -561,11 +557,6 @@
<translation>Спеціальні режими гри, такі як 'Вампіризм' чи 'Карма' дозволяють розробляти цілком нову тактику. Спробуйте їх в налаштованій грі!</translation>
</message>
<message>
- <source>The Windows version of Hedgewars supports Xfire. Make sure to add Hedgwars to its game list so your friends can see you playing.</source>
- <comment>Tips</comment>
- <translation type="obsolete">Windows-версія Hedgewars підтримує Xfire. Переконайтеся в тому, що ви додали Hedgwars до списку ігор, щоб ваші друзі могли бачити вас в грі.</translation>
- </message>
- <message>
<source>You should never install Hedgewars on computers you don't own (school, university, work, etc.). Please ask the responsible person instead!</source>
<comment>Tips</comment>
<translation>Ви не повинні встановлювати Hedgewars на комп'ютерах, які вам не належать (школа, університет, робота тощо). Будь ласка, звертайтесь до відповідальної особи!</translation>
@@ -631,11 +622,6 @@
<translation>Напад піаніно є найбільш руйнівним повітряним ударом. Але ви втратите їжака, тому він має і негативну сторону.</translation>
</message>
<message>
- <source>The Homing Bee can be tricky to use. It's turn radius depends on it's velocity, so try to not use full power.</source>
- <comment>Tips</comment>
- <translation type="obsolete">Навідна Бджілка може бути складною у керуванні. Радіус повороту залежить від її швидкості, тому постарайтеся не стріляти на повну силу.</translation>
- </message>
- <message>
<source>Sticky Mines are a perfect tool to create small chain reactions knocking enemy hedgehogs into dire situations ... or water.</source>
<comment>Tips</comment>
<translation>Липкі Міни чудовий інструмент створення малих ланцюгових реакцій для закидання ворогів у складні ситуації ... або у воду.</translation>
@@ -661,11 +647,6 @@
<translation>Вогнемет це зброя, але його можна також використати для риття тунелю.</translation>
</message>
<message>
- <source>Use the Incinerating Grenade to temporary keep hedgehogs from passing terrain such as tunnels or platforms.</source>
- <comment>Tips</comment>
- <translation type="obsolete">Використайте Горючу Гранату щоб тимчасово утримати їжаків від проходження такої місцевості як тунелі або платформи.</translation>
- </message>
- <message>
<source>Want to know who's behind the game? Click on the Hedgewars logo in the main menu to see the credits.</source>
<comment>Tips</comment>
<translation>Хочете знати хто робить гру? Натисніть на логотип Hedgewars в головному меню, щоб побачити список.</translation>
@@ -718,17 +699,17 @@
<message>
<source>The Windows version of Hedgewars supports Xfire. Make sure to add Hedgewars to its game list so your friends can see you playing.</source>
<comment>Tips</comment>
- <translation type="unfinished"></translation>
+ <translation>Windows-версія Hedgewars підтримує Xfire. Переконайтеся в тому, що ви додали Hedgewars до списку ігор, щоб ваші друзі могли бачити вас в грі.</translation>
</message>
<message>
<source>The Homing Bee can be tricky to use. Its turn radius depends on it's velocity, so try to not use full power.</source>
<comment>Tips</comment>
- <translation type="unfinished"></translation>
+ <translation>Навідна Бджілка може бути складною у керуванні. Радіус повороту залежить від її швидкості, тому постарайтеся не стріляти на повну силу.</translation>
</message>
<message>
<source>Use the Molotov or Flame Thrower to temporary keep hedgehogs from passing terrain such as tunnels or platforms.</source>
<comment>Tips</comment>
- <translation type="unfinished"></translation>
+ <translation>Використайте Коктейль Молотова або Вогнемет щоб тимчасово утримати їжаків від проходження такої місцевості як тунелі або платформи.</translation>
</message>
</context>
<context>
@@ -1090,7 +1071,7 @@
</message>
<message>
<source>Copy</source>
- <translation type="unfinished"></translation>
+ <translation>Копіювати</translation>
</message>
</context>
<context>
@@ -1109,7 +1090,7 @@
</message>
<message>
<source>Copy</source>
- <translation type="unfinished"></translation>
+ <translation>Копіювати</translation>
</message>
</context>
<context>
@@ -1289,47 +1270,47 @@
</message>
<message>
<source>hand drawn map...</source>
- <translation type="unfinished"></translation>
+ <translation>вручну намальована мапа...</translation>
</message>
<message>
<source>Disabled</source>
- <translation type="unfinished"></translation>
+ <translation>Вимкнено</translation>
</message>
<message>
<source>Red/Cyan</source>
- <translation type="unfinished"></translation>
+ <translation>Червоний/Блакитний</translation>
</message>
<message>
<source>Cyan/Red</source>
- <translation type="unfinished"></translation>
+ <translation>Блакитний/Червоний</translation>
</message>
<message>
<source>Red/Blue</source>
- <translation type="unfinished"></translation>
+ <translation>Червоний/Синій</translation>
</message>
<message>
<source>Blue/Red</source>
- <translation type="unfinished"></translation>
+ <translation>Синій/Червоний</translation>
</message>
<message>
<source>Red/Green</source>
- <translation type="unfinished"></translation>
+ <translation>Червоний/Зелений</translation>
</message>
<message>
<source>Green/Red</source>
- <translation type="unfinished"></translation>
+ <translation>Зелений/Червоний</translation>
</message>
<message>
<source>Side-by-side</source>
- <translation type="unfinished"></translation>
+ <translation>Пліч-о-пліч</translation>
</message>
<message>
<source>Top-Bottom</source>
- <translation type="unfinished"></translation>
+ <translation>Верх-низ</translation>
</message>
<message>
<source>Wiggle</source>
- <translation type="unfinished"></translation>
+ <translation>Погойдування</translation>
</message>
</context>
<context>
@@ -1559,11 +1540,11 @@
</message>
<message>
<source>Gameplay</source>
- <translation type="unfinished"></translation>
+ <translation>Геймплей</translation>
</message>
<message>
<source>Stereo rendering</source>
- <translation type="unfinished"></translation>
+ <translation>Стерео рендеринг</translation>
</message>
</context>
<context>
@@ -1750,7 +1731,7 @@
</message>
<message>
<source>more</source>
- <translation type="unfinished"></translation>
+ <translation>більше</translation>
</message>
</context>
<context>
@@ -1808,7 +1789,7 @@
</message>
<message>
<source>copy of</source>
- <translation type="unfinished"></translation>
+ <translation>копія</translation>
</message>
</context>
<context>
@@ -2212,7 +2193,7 @@
</message>
<message>
<source>Delete</source>
- <translation type="unfinished">Видалити</translation>
+ <translation>Видалити</translation>
</message>
<message>
<source>Mouse: Left button</source>
@@ -2244,7 +2225,7 @@
</message>
<message>
<source>Clear</source>
- <translation type="unfinished">Очистити</translation>
+ <translation>Очистити</translation>
</message>
<message>
<source>Return</source>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Locale/uk.lua Sun Feb 27 18:03:33 2011 -0500
@@ -0,0 +1,94 @@
+locale = {
+-- [":("] = "",
+ ["!!!"] = "Я!",
+ ["A game of luck"] = "Гра на вдачу",
+ ["Aiming Practice"] = "Практика прицілювання", --Bazooka, Shotgun, SniperRifle
+ ["Bat balls at your enemies and|push them into the sea!"] = "Закидайте ворогів м'ячами щоб|зіштовути їх у море!",
+ ["Bat your opponents through the|baskets and out of the map!"] = "Дубасьте опонентів битою через|кошики та за межі карти!",
+ ["Bazooka Training"] = "Тренування з базукою",
+ ["Best laps per team: "] = "Кращі партії на команду: ",
+ ["Bloody Rookies"] = "Криваві Салаги", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree
+ ["Boom!"] = "Бабах!",
+ ["by mikade"] = "від mikade", -- Control, User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork, Capture_the_Flag
+ ["CAPTURE THE FLAG"] = "ЗАХОПЛЕННЯ ПРАПОРА",
+ ["Codename: Teamwork"] = "Кодова назва: Командна гра",
+ ["Congratulations!"] = "Вітаємо!",
+ ["Congratulations! You've eliminated all targets|within the allowed time frame."] = "Вітаємо! Ви знищили всі цілі|в межах дозволеного часу.", --Bazooka, Shotgun, SniperRifle
+ ["CONTROL"] = "КОНТРОЛЬ",
+ ["Control pillars to score points."] = "Контрольюй стовпи щоб набрати очки.",
+ ["CONTROL v0.3"] = "КОНТРОЛЬ v0.3",
+ ["CTF_BLIZZARD"] = "ЗАХОПЛЕННЯ ПРАПОРА - ОПЕРАЦІЯ ХУРТОВИНА",
+ ["CUSTOM BUILD 0.2"] = "ОСОБИСТА ВЕРСІЯ 0.2",
+ ["Cybernetic Empire"] = "Кібернетична Імперія",
+ ["DAMMIT, ROOKIE!"] = "ЧОРТ ЗАБИРАЙ, САЛАГА!",
+ ["DAMMIT, ROOKIE! GET OFF MY HEAD!"] = "ЧОРТ ЗАБИРАЙ, САЛАГА! ЗЛІЗЬ З МОЄЇ ГОЛОВИ!",
+ ["Dangerous Ducklings"] = "Небезпечні Каченята",
+ ["Eliminate all enemies"] = "Ліквідуйте всіх ворогів",
+ ["Eliminate all targets before your time runs out.|You have unlimited ammo for this mission."] = "Знищіть всі цілі до закінчення часу.|У вас безмежні боєприпаси.", --Bazooka, Shotgun, SniperRifle
+ ["Eliminate Poison before the time runs out"] = "Знешкодьте Смердюка до закінчення часу",
+ ["Eliminate the Blue Team"] = "Знищіть Синю Команду",
+ ["- Eliminate Unit 3378 |- Feeble Resistance must survive"] = "- Знищіть Об'єкт 3378 |- Жалюгідні Повстанці повинні вижити",
+ ["Enjoy the swim..."] = "Насолоджуйся плаванням...",
+ ["Fastest lap: "] = "Найшвидша партія: ",
+ ["Feeble Resistance"] = "Жалюгідні Повстанці",
+ ["Flag captured!"] = "Прапор захоплено!",
+ ["Flag respawned!"] = "Прапор відновлено!",
+ ["Flag returned!"] = "Прапор повернено!",
+ ["Flags will be placed where each team ends their turn."] = "Прапори будуть розміщені там де кожна команда закінчить свій хід.",
+ ["GAME OVER!"] = "КІНЕЦЬ ГРИ!",
+ ["Game Started!"] = "Гра почалась!",
+ ["Get on over there and take him out!"] = "Залізь туди і прикінчи його!",
+ ["Goal:"] = "Мета:",
+ ["GO! GO! GO!"] = "ДАВАЙ! ДАВАЙ! РУХАЙСЯ!",
+ ["Good birdy......"] = "Гарна пташка......",
+ ["Good luck out there!"] = "Удачі!",
+ ["Hedgewars-Basketball"] = "Баскетбол Їжаками",
+ ["Hedgewars-Knockball"] = "Бейсбол Їжаками",
+ ["Hmmm..."] = "Хмм...",
+ ["Hooray!"] = "Урааа!",
+ ["Hunter"] = "Мисливець", --Bazooka, Shotgun, SniperRifle
+ ["Instructor"] = "Інструктор", -- 01#Boot_Camp, User_Mission_-_Dangerous_Ducklings
+ ["- Jumping is disabled"] = "- Стрибки вимкнено",
+ ["Listen up, maggot!!"] = "Слухай, хробак!",
+ ["|- Mines Time:"] = "|- Час детонування мін:", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
+ ["MISSION FAILED"] = "МІСІЮ ПРОВАЛЕНО", -- User_Mission_-_Dangerous_Ducklings, User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
+ ["MISSION SUCCESSFUL"] = "МІСІЮ ВИКОНАНО", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
+ ["NEW fastest lap: "] = "НОВА найшвидша партія: ",
+ ["NO JUMPING"] = "БЕЗ СТРИБКІВ",
+ ["Not So Friendly Match"] = "Не дуже товариський матч", -- Basketball, Knockball
+ ["Oh no! Just try again!"] = "О, ні! Давай, спробуй ще раз!", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
+ ["Oh no! Time's up! Just try again."] = "О, ні! Час йде! Спробуй ще раз.", --Bazooka, Shotgun, SniperRifle
+ ["Operation Diver"] = "Операція Водолаз",
+ ["Opposing Team: "] = "Команда-Противник: ",
+ ["Pathetic Hog #%d"] = "Жалюгідний Їжак #%d",
+ ["points"] = "очок", -- Control, CTF_Blizzard, Basic_Training_-_Bazooka, Basic_Training_-_Shotgun, Basic_Training_-_Sniper_Rifle
+ ["Poison"] = "Смердюк",
+ ["Random Weapons"] = "Випадкова Зброя",
+ [" - 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"] = " - Поверніть ворожий прапор на свою базу щоб заробити очко | - Виграє команда з трьома очками | - Ви можете заробити очко лише коли ваш прапор на вашій базі | - Їжак покине прапор якщо потоне чи буде вбитий | - Покинутий прапор можна повернути або захопити знов | - Їжаки відновлюються після смерті",
+ ["RULES OF THE GAME [Press ESC to view]"] = "ПРАВИЛА ГРИ [Натисніть ESC для перегляду]",
+ ["sec"] = "сек", -- 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!"] = "Побачимося!",
+ ["Shotgun Team"] = "Команда Рушниць",
+ ["Shotgun Training"] = "Тренування з рушницею",
+ ["%s is out and Team %d|scored a penalty!| |Score:"] = "%s вибув і Команда %d|отримала штраф!| |Рахунок:", -- Basketball, Knockball
+ ["%s is out and Team %d|scored a point!| |Score:"] = "%s вибув і Команда %d|заробила очко!| |Рахунок:", -- Basketball, Knockball
+ ["Sniper Training"] = "Снайперське тренування",
+-- ["Sniperz"] = "",
+ ["Spooky Tree"] = "Примарне Дерево",
+ ["Team %d: "] = "Команда %d: ",
+ ["Team Scores:"] = "Результати команд:",
+ ["That was pointless."] = "Це було безглуздо.",
+ ["The enemy is hiding out on yonder ducky!"] = "Ворог ховається на он тій качечці!",
+ ["The flag will respawn next round."] = "Прапор відновиться в наступному раунді.",
+ ["There has been a mix-up with your gear and now you|have to utilize whatever is coming your way!"] = "Сталася плутанина з передачою, і тому ви|повинні використовувати все, що вам попадеться!",
+ ["Toxic Team"] = "Токсична Команда", -- User_Mission_-_Diver, User_Mission_-_Spooky_Tree, User_Mission_-_Teamwork
+ ["TrophyRace"] = "Погоня за Трофеєм",
+ ["T_T"] = "Ааааа!!!",
+ ["Unit 3378"] = "Об'єкт 3378",
+ ["Use your rope to get from start to finish as fast as you can!"] = "Скористайся мотузкою щоб якнайшвидше досягнути фінішу!",
+ ["Victory for the "] = "Перемога для ", -- CTF_Blizzard, Capture_the_Flag
+ ["You have SCORED!!"] = "Ви заробили ОЧКО!!",
+ ["You've failed. Try again."] = "Спроба не вдалась. Спробуйте знов.",
+ ["You've reached the goal!| |Time: "] = "Ви досягли мети!| |Час: ",
+ ["'Zooka Team"] = "Команда 'Zooka",
+ }
--- a/share/hedgewars/Data/Locale/uk.txt Tue Feb 22 18:51:22 2011 +0200
+++ b/share/hedgewars/Data/Locale/uk.txt Sun Feb 27 18:03:33 2011 -0500
@@ -12,7 +12,7 @@
00:09=Пустельний Орел
00:10=Динаміт
00:11=Бейсбольна бита
-00:12=Shoryuken
+00:12=Козацький Удар
00:13=сек
00:14=Парашут
00:15=Повітряна атака
@@ -50,7 +50,11 @@
00:47=Липка міна
00:48=Молоток
00:49=Воскрешатор
-00:50=Напад дрелі
+00:50=Атака дрелями
+00:51=Грудка багна
+00:52=Зброя не вибрана
+00:53=TARDIS
+00:54=Структура
01:00=Вперед до перемоги!
01:01=Нічия
@@ -277,7 +281,11 @@
03:47=Приліпіть їх де треба!
03:48=Час молотка!
03:49=Робить те, що ви подумали
-03:50=Кротячий фанат
+03:50=Кротяча зброя
+03:51=Знайдено на землі
+03:52=UNUSED
+03:53=Тип 40
+03:54=Збудуй щось
; Weapon Descriptions (use | as line breaks)
04:00=Атакуй ворогів використовуючи просту гранату.|Вона вибухне як тільки її таймер доходить до нуля.|1-5: Вистав таймер гранати|Атака: Утримуй щоб метнути сильніше
@@ -292,7 +300,7 @@
04:09=Вагаєшся відносно цілі? Візьми Пустельного|Орла та стріляй аж до чотирьох разів.|Атака: Стріляй (кілька разів)
04:10=Груба сила - завжди варіант. Кинь цю класичну|вибухівку поруч з ворогом та відступай.|Атака: Кинь динаміт собі під ноги
04:11=Позбудься ворога, відправивши його за межі|мапи чи у воду. А як щодо|пограти бейсбол мінами з друзями?|Атака: Дубась все, що бачиш перед собою
-04:12=Підійди близенько та розкрий всю силу|цієї майже смертельної техніки бойових мистецтв.|Атака: Виконай Вогняний Стусан
+04:12=Підійди близенько та розкрий всю силу|цієї майже смертельної техніки бойових мистецтв.|Атака: Виконай Козацький Удар
04:13=UNUSED
04:14=Боїшся висоти? Краще візьми парашут.Він|відкриється коли ти будеш падати та|вбереже твого їжака від поранення.|Атака: Розкрий парашут|Довгий Стрибок: Кинь гранати чи подібну зброю
04:15=Поклич літак для атаки ваших ворогів|бомбардуванням.|Вліво/Вправо: Визнач напрямок нападу|Курсор: Вибери цільовий регіон
Binary file share/hedgewars/Data/Sounds/plane.ogg has changed