# HG changeset patch # User nemo # Date 1537802328 14400 # Node ID 1f15b0ee8e34af3f242e607a5354d4040e32f9b1 # Parent 54725a1d1db8e86790c8dcd000f0662ed6bae170# Parent ced1e6ecaaad38acc996c38aaaa26b9d490a1162 merge diff -r 54725a1d1db8 -r 1f15b0ee8e34 .travis.yml --- a/.travis.yml Mon Sep 24 11:16:08 2018 -0400 +++ b/.travis.yml Mon Sep 24 11:18:48 2018 -0400 @@ -65,7 +65,7 @@ install: | if [ "$TRAVIS_OS_NAME" == "linux" ]; then - sudo apt-get install -y debhelper cmake dpkg-dev qtbase5-dev qtbase5-private-dev qttools5-dev-tools qttools5-dev libphysfs-dev libsdl2-dev libsdl2-ttf-dev libsdl2-mixer-dev libsdl2-image-dev libsdl2-net-dev bzip2 ghc libghc-mtl-dev libghc-vector-dev libghc-zlib-dev libghc-random-dev libghc-network-dev libghc-sandi-dev libghc-hslogger-dev libghc-utf8-string-dev libghc-sha-dev libghc-entropy-dev libghc-regex-tdfa-dev liblua5.1-0-dev fpc fp-compiler fp-units-misc libpng-dev fp-units-gfx libavcodec-dev libavformat-dev libglew1.6-dev + sudo apt-get install -y debhelper cmake dpkg-dev qtbase5-dev qtbase5-private-dev qttools5-dev-tools qttools5-dev libphysfs-dev libsdl2-dev libsdl2-ttf-dev libsdl2-mixer-dev libsdl2-image-dev libsdl2-net-dev bzip2 ghc libghc-mtl-dev libghc-vector-dev libghc-zlib-dev libghc-random-dev libghc-network-dev libghc-sandi-dev libghc-hslogger-dev libghc-utf8-string-dev libghc-sha-dev libghc-entropy-dev libghc-regex-tdfa-dev libghc-aeson-dev libghc-yaml-dev libghc-text-dev liblua5.1-0-dev fpc fp-compiler fp-units-misc libpng-dev fp-units-gfx libavcodec-dev libavformat-dev libglew1.6-dev elif [ "$TRAVIS_OS_NAME" == "osx" ]; then brew install qt5 brew install fpc glew physfs lua51 sdl2 sdl2_image sdl2_net sdl2_ttf ffmpeg ghc cabal-install diff -r 54725a1d1db8 -r 1f15b0ee8e34 ChangeLog.txt --- a/ChangeLog.txt Mon Sep 24 11:16:08 2018 -0400 +++ b/ChangeLog.txt Mon Sep 24 11:18:48 2018 -0400 @@ -9,6 +9,7 @@ + Increase hedgehog limit to 64 + Campaigns and missions now use the user's chosen custom clan colors + New default brown clan color for better contrast + + Allow to change volume during pause * Functionality of controllers restored * Fix crash when 2 or more controllers were connected * Fix hammer and pickhammer not digging correctly at wrap world edge @@ -24,15 +25,21 @@ * Fix invisible projectile timer, attack bar, target on other side of wrap world edge * Fix attack bar drawn over GUI elements * Fix hog being unable to walk after using sniper rifle without firing both shots + * Fix bee weapon becoming unusable when hitting attack key in mid-air * Fix video recorder not working when game audio was disabled * Fix cursor teleporting to center after leaving game with a video recording * Fix teleport tooltip claiming it doesn't end turn in hog placing phase with inf. attack * Fix /hta, /hsa and /hya commands not writing message in chat * Limit hedgehog health to 268435455 to prevent some bugs * Fix Sudden Death starting in the second turn of a round rather than the first + * Prevent voices from being spoken directly before a victory voice + * Fix damage not being displayed if hog drowns in water with 100% opacity (like in Compost theme) + * Fix retreat timer appearing after using baseball bat or whip and immediately taking damage Frontend: + Add setting to disable audio dampening when losing window focus + + Rework player rankings: Losing clans are now ranked in the reverse order they died + * Fix player rankings on round draw: Clans that died in the same turn now have the same rank * Fix rare crash when aborting video encoding in progress * Fix critical failure to cleanup teams list after rejoining game under certain conditions * Controllers are detected again @@ -47,6 +54,12 @@ TechRacer: * Fix rare bug causing crates and other objects to not appear on start of turn +Balanced Random Weapon: + + Can adjust weapon start and crate probabilities + +Random Weapon: + * Fix breakage when enabling per-hog ammo + Continental supplies: + Continents are now selected before the game starts + Continents give hog different start health @@ -67,6 +80,7 @@ Space Invasion: + Display round score in a separate row + Keep round score displayed after round ends, remove round score announcer message + + If team scores are tied at the end, continue playing rounds with the tied teams until there's a winner * Fix rare Lua error message spam at end of game * Fix round score and other info numbers messing up after screen resize * Fix kamikaze bonus not being shown @@ -75,9 +89,13 @@ * A Classic Fairytale: Fix clan membership of princess in some missions * A Classic Fairytale, Mission 5: Tribe was not in same clan as Natives, screwing up stats a bit + A Space Adventure, final mission: Terrain types are easier to distinguish - * A Space Adeventure: Fix clan membership of PAotH in main Death Planet mission + * A Space Adventure, Searching in the Dust: Fix display error when destroying device crate + * A Space Adventure, Searching in the Dust: Don't take away control right above the pit near Sandy + * A Space Adventure: Fix clan membership of PAotH in main Death Planet mission + * A Space Adventure, final mission: Don't say "Missed" or "Yes, Sir!" when inappropriate * The Great Escape: Infinite attack mode did not work * Shotgun/Sniper Rifle Target Practicse: Suppress “X remaining” message + * Basic Movement Training: Back jumps should be easier now * Fix resurrection animation appearing at wrong position for some missions and styles Content: @@ -92,6 +110,9 @@ * Fix many server messages being not translated Lua API: + * Deprecation: Setting TurnTimeLeft/ReadyTimeLeft directly is deprecated and will become useless in future. Use the setter functions below + + New call: SetTurnTimeLeft(newTurnTimeLeft): Set remaining turn time + + New call: SetReadyTimeLeft(newReadyTimeLeft): Set remaining ready time + New call: Retreat(time [, respectGetAwayTimeFactor): Force current turn into retreating mode + New call: GetAmmoTimer(gearUid, ammoType): Returns current set timer for given ammoType and hog gear in ms. Returns nil for non-timerable ammo + New call: EnableSwitchHog(): Enable hog switching @@ -100,22 +121,26 @@ + New call: GetLaserSight(): Returns true if laser sight (as utility) is currenctly active (ignoring sniper rifle) + New call: IsHogHidden(gear): Returns true if hog is hidden + Changed call: AddTeam: 2nd param. color: Accepts negative value to use a default clan color from player settings + + Changed call: HedgewarsScriptLoad: 2nd param. mustExist. If false, it's allowed for the script to not exist + + Changed call: HedgewarsScriptLoad: Return true on success and false on failure + Change callback: onGearResurrect: 2nd parameter for visual gear spawned at resurrect position (might be nil) + New parameter: SetAmmoTexts: 5th param. showExtra: Set to false to hide texts like “Not yet available” + New parameter: ShowMission: 6th param. forceDisplay: Set to true to prevent this particular mission panel to be hidden manually by player + + Can set custom team rank: Call SendStat with 1st param siTeamRank and 2nd param to the desired rank, as string. Must be called before siPlayerKills of the team for which this applies + New Lua library: Achievements + Add sprite tint globals in Utilts library: U_LAND_TINT_NORMAL, U_LAND_TINT_ICE, U_LAND_TINT_INDESTRUCTIBLE and U_LAND_TINT_BOUNCY - + Can enable infinite fly time for jetpack/Birdy by setting health to JETPACK_FUEL_INFINITE or BIRDY_ENERGY_INFINITE, respectively + + New globals: Infinite fly time for jetpack/Birdy by setting health to JETPACK_FUEL_INFINITE or BIRDY_ENERGY_INFINITE, respectively + New global game variable: MaxCaseDrops. Max. number of crats which can be in game by crate drops - + New global: NoPointX. Value of CursorX and CursorY if cursor is inactive + + New global: NO_CURSOR. Value of CursorX and CursorY if cursor is inactive + New global: AMMO_INFINITE. Value for infinite ammo count for AddAmmo and other functions - + New global: cMaxHogHealth. Maximum possible hedgehog health - + New global: cMaxTurnTime. Maximum possible turn time + + New global: MAX_HOG_HEALTH. Maximum possible hedgehog health + + New global: MAX_TURN_TIME. Maximum possible turn time + New global: EXPLForceDraw. Flag for Explode function, forces land removal even with gfSolidLand on + New globals: capcolDefault, capcolSetting: Default caption colors * Animate library: Remove defunct follow argument for AnimVisualGear * Changed global: lfCurrentHog becomes lfCurHogCrate * Fixed variable: TotalRounds was -1 (instead of 0) in first real round after hog placement phase + * Fixed variables: LeftX, RightX, TopY, LAND_WIDTH, LAND_HEIGHT were broken if onVisualGearAdd was defined * AI sometimes intentionally shot hedgehogs with aihDoesntMatter set ====================== 0.9.24.1 ==================== diff -r 54725a1d1db8 -r 1f15b0ee8e34 INSTALL.md --- a/INSTALL.md Mon Sep 24 11:16:08 2018 -0400 +++ b/INSTALL.md Mon Sep 24 11:18:48 2018 -0400 @@ -7,6 +7,8 @@ Dependencies ------------ +### Hardware dependencies +See README.md. ### Core dependencies diff -r 54725a1d1db8 -r 1f15b0ee8e34 QTfrontend/hedgewars.qrc --- a/QTfrontend/hedgewars.qrc Mon Sep 24 11:16:08 2018 -0400 +++ b/QTfrontend/hedgewars.qrc Mon Sep 24 11:18:48 2018 -0400 @@ -209,6 +209,7 @@ <file>res/StatsMostSelfDamage.png</file> <file>res/StatsSelfKilled.png</file> <file>res/StatsSkipped.png</file> + <file>res/StatsEverAfter.png</file> <file>res/StatsCustomAchievement.png</file> <file>res/Start.png</file> <file>res/mapRandom.png</file> diff -r 54725a1d1db8 -r 1f15b0ee8e34 QTfrontend/hwconsts.cpp.in --- a/QTfrontend/hwconsts.cpp.in Mon Sep 24 11:16:08 2018 -0400 +++ b/QTfrontend/hwconsts.cpp.in Mon Sep 24 11:18:48 2018 -0400 @@ -79,6 +79,9 @@ << qMakePair(QString("Highlander"), QString( AMMOLINE_HIGHLANDER_QT AMMOLINE_HIGHLANDER_PROB AMMOLINE_HIGHLANDER_DELAY AMMOLINE_HIGHLANDER_CRATE )) + << qMakePair(QString("Balanced Random Weapon"), QString( + AMMOLINE_BRW_QT AMMOLINE_BRW_PROB + AMMOLINE_BRW_DELAY AMMOLINE_BRW_CRATE )) << qMakePair(QString("Construction Mode"), QString( AMMOLINE_CONSTRUCTION_QT AMMOLINE_CONSTRUCTION_PROB AMMOLINE_CONSTRUCTION_DELAY AMMOLINE_CONSTRUCTION_CRATE )) diff -r 54725a1d1db8 -r 1f15b0ee8e34 QTfrontend/res/StatsEverAfter.png Binary file QTfrontend/res/StatsEverAfter.png has changed diff -r 54725a1d1db8 -r 1f15b0ee8e34 QTfrontend/res/btnTagTeam.png Binary file QTfrontend/res/btnTagTeam.png has changed diff -r 54725a1d1db8 -r 1f15b0ee8e34 QTfrontend/res/btnTagTeam@2x.png Binary file QTfrontend/res/btnTagTeam@2x.png has changed diff -r 54725a1d1db8 -r 1f15b0ee8e34 QTfrontend/ui/page/pagegamestats.cpp --- a/QTfrontend/ui/page/pagegamestats.cpp Mon Sep 24 11:16:08 2018 -0400 +++ b/QTfrontend/ui/page/pagegamestats.cpp Mon Sep 24 11:18:48 2018 -0400 @@ -152,6 +152,7 @@ labelGameRank->setText(""); labelGameWin->setText(""); playerPosition = 0; + scriptPlayerPosition = 0; lastColor = 0; } @@ -326,7 +327,13 @@ if (lastColor == c) playerPosition--; lastColor = c; - switch (playerPosition) + unsigned int realPlayerPosition; + if(scriptPlayerPosition == 0) + realPlayerPosition = playerPosition; + else + realPlayerPosition = scriptPlayerPosition; + + switch (realPlayerPosition) { case 1: image = "<img src=\":/res/StatsMedal1.png\">"; @@ -353,9 +360,10 @@ kindOfPoints = QString(""); } - message = QString("<p><h2>%1 %2. <font color=\"%4\">%3</font> ").arg(image, QString::number(playerPosition), playername, clanColor.name()) + killstring + "</h2></p>"; + message = QString("<p><h2>%1 %2. <font color=\"%4\">%3</font> ").arg(image, QString::number(realPlayerPosition), playername, clanColor.name()) + killstring + "</h2></p>"; labelGameRank->setText(labelGameRank->text() + message); + scriptPlayerPosition = 0; break; } case 's' : @@ -388,6 +396,16 @@ AddStatText(message); break; } - + case 'R' : + { + scriptPlayerPosition = info.toInt(); + break; + } + case 'h' : + { + QString message = "<p><img src=\":/res/StatsEverAfter.png\"> " + PageGameStats::tr("With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.") + "</p>"; + AddStatText(message); + break; + } } } diff -r 54725a1d1db8 -r 1f15b0ee8e34 QTfrontend/ui/page/pagegamestats.h --- a/QTfrontend/ui/page/pagegamestats.h Mon Sep 24 11:16:08 2018 -0400 +++ b/QTfrontend/ui/page/pagegamestats.h Mon Sep 24 11:18:48 2018 -0400 @@ -68,6 +68,7 @@ QMap<qint32, QVector<qint32> > healthPoints; unsigned int playerPosition; + unsigned int scriptPlayerPosition; quint32 lastColor; bool defaultGraphTitle; QScopedPointer<QGraphicsScene> m_scene; diff -r 54725a1d1db8 -r 1f15b0ee8e34 QTfrontend/weapons.h --- a/QTfrontend/weapons.h Mon Sep 24 11:16:08 2018 -0400 +++ b/QTfrontend/weapons.h Mon Sep 24 11:18:48 2018 -0400 @@ -124,10 +124,15 @@ #define AMMOLINE_ONEEVERY_DELAY "00000000000000000000000000000000000000000000000000000000000" #define AMMOLINE_ONEEVERY_CRATE "11111101111111111111111111111111111111111111111111111111111" +#define AMMOLINE_BRW_QT "33323392332332322323233131122113000003232203022022200020301" +#define AMMOLINE_BRW_PROB "00000000000000000000000000000000111110000000000000000000000" +#define AMMOLINE_BRW_DELAY "00000000000000000000000000000000000000000000000000000000000" +#define AMMOLINE_BRW_CRATE "11111101111111111111111111111111111111111111111111111111111" + #define AMMOLINE_HIGHLANDER_QT "11111191111111111111019111111111100101111101111001001011101" #define AMMOLINE_HIGHLANDER_PROB "00000000000000000000000000000000000000000000000000000000000" #define AMMOLINE_HIGHLANDER_DELAY "00000000000000000000000000000000000000000000000000000000000" -#define AMMOLINE_HIGHLANDER_CRATE "00000000000000000090000000000000000000000000000000000000000" +#define AMMOLINE_HIGHLANDER_CRATE "00000000000000000000000000000000000000000000000000000000000" #define AMMOLINE_CONSTRUCTION_QT "11000190000000100100900000000000000000000000000000000000000" #define AMMOLINE_CONSTRUCTION_PROB "11111101111111100100011111101111111111111101111100101110101" diff -r 54725a1d1db8 -r 1f15b0ee8e34 README.md --- a/README.md Mon Sep 24 11:16:08 2018 -0400 +++ b/README.md Mon Sep 24 11:18:48 2018 -0400 @@ -101,6 +101,24 @@ * Precise + Toggle team bars + Switch: Toggle HUD * Precise + Capture (screenshot key): Save current map + mask into Screenshot directory +System requirements +------------------- +For PC or Mac: + +* Mouse and keyboard +* Monitor, minimal resolution 1024×768 +* 200 MiB storage space +* Processor: 1 GHz (1 core is enough), 64bit recommended +* Video card: 250 MHz or so + (any decent card from the year 2004 or later should do fine) +* 1 GiB RAM minimum +* Operating system: Windows Vista/7/8/10, GNU/Linux, macOS, FreeBSD, others + +Hedgewars has been ported to other operating systems in the past. +Check out <https://hedgewars.org/download.html> for the latest information. + +Gamepads are supported partially (only in-game, not in the main menu). + Installation instructions ------------------------- See the `INSTALL.md` file. @@ -145,5 +163,4 @@ * Homepage - https://hedgewars.org/ * IRC channel - irc://irc.freenode.net/hedgewars * Community forum - https://hedgewars.org/forum -* Mailing list - https://mail.gna.org/listinfo/hedgewars-dev diff -r 54725a1d1db8 -r 1f15b0ee8e34 gameServer/Actions.hs --- a/gameServer/Actions.hs Mon Sep 24 11:16:08 2018 -0400 +++ b/gameServer/Actions.hs Mon Sep 24 11:18:48 2018 -0400 @@ -479,7 +479,7 @@ c <- client's isChecker when (not b) $ (if c then checkerLogin else playerLogin) passwd isAdmin isContr Guest | isRegisteredUsersOnly si -> do - processAction $ ByeClient "Registered users only" + processAction $ ByeClient $ loc "This server only allows registered users to join." | otherwise -> do b <- isBanned c <- client's isChecker @@ -733,9 +733,9 @@ processAction (Random chans items) = do - let i = if null items then ["heads", "tails"] else items + let i = if null items then [loc "heads", loc "tails"] else items n <- io $ randomRIO (0, length i - 1) - processAction $ AnswerClients chans ["CHAT", nickRandom, i !! n] + processAction $ AnswerClients chans ["CHAT", if null items then nickRandomCoin else nickRandomCustom, i !! n] processAction (LoadGhost location) = do diff -r 54725a1d1db8 -r 1f15b0ee8e34 gameServer/CommandHelp.hs --- a/gameServer/CommandHelp.hs Mon Sep 24 11:16:08 2018 -0400 +++ b/gameServer/CommandHelp.hs Mon Sep 24 11:18:48 2018 -0400 @@ -54,9 +54,7 @@ cmdHelpSharedAdmin = [ loc "/global <message>: Send global chat message which can be seen by everyone on the server", loc "/registered_only: Toggle 'registered only' state. If enabled, only registered players can join server", - loc "/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server", - -- TODO: Add help for /save - loc "/save <parameter>" + loc "/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server" -- TODO: Add /restart_server? This command seems broken at the moment ] @@ -70,10 +68,10 @@ loc "/force <yes/no>: Force vote result for active vote", loc "/fix: Force this room to stay open when it is empty", loc "/unfix: Undo the /fix command", - loc "/saveroom <file name>: Save room configuration into a file", - loc "/loadroom <file name>: Load room configuration from a file", - -- TODO: Add help for /delete - loc "/delete <parameter>" + loc "/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map", + loc "/delete <config ID>: Delete a votable room configuration", + loc "/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file", + loc "/loadroom <file name>: Load votable room configurations (and greeting) from a file" ] cmdHelpHeaderLobby :: [B.ByteString] diff -r 54725a1d1db8 -r 1f15b0ee8e34 gameServer/Consts.hs --- a/gameServer/Consts.hs Mon Sep 24 11:16:08 2018 -0400 +++ b/gameServer/Consts.hs Mon Sep 24 11:18:48 2018 -0400 @@ -47,8 +47,11 @@ nickServer = "[server]" -- For /rnd command -nickRandom :: B.ByteString -nickRandom = "(random)" +nickRandomCoin :: B.ByteString +nickRandomCoin = "[random]" + +nickRandomCustom :: B.ByteString +nickRandomCustom = "(random)" -- For /global command nickGlobal :: B.ByteString diff -r 54725a1d1db8 -r 1f15b0ee8e34 gameServer/HWProtoInRoomState.hs --- a/gameServer/HWProtoInRoomState.hs Mon Sep 24 11:16:08 2018 -0400 +++ b/gameServer/HWProtoInRoomState.hs Mon Sep 24 11:18:48 2018 -0400 @@ -367,7 +367,7 @@ let sameRoom = clientRoom rnc thisClientId == clientRoom rnc newAdminId return $ if (not (master || serverAdmin)) then - [Warning $ loc "You not the room master or a server admin!"] + [Warning $ loc "You're not the room master or a server admin!"] else if (isNothing maybeClientId) then [Warning $ loc "Player is not online."] else if (Just newAdminId == thisRoomMasterId) then @@ -407,10 +407,12 @@ return [AnswerClients s ["CHAT", n, B.unwords $ "/rnd" : rs], Random s rs] -handleCmd_inRoom ["MAXTEAMS", n] = roomAdminOnly $ do +handleCmd_inRoom ["MAXTEAMS", n] = do cl <- thisClient let m = readInt_ n - if m < 2 || m > cMaxTeams then + if not $ isMaster cl then + return [Warning $ loc "You're not the room master!"] + else if m < 2 || m > cMaxTeams then return [AnswerClients [sendChan cl] ["CHAT", nickServer, loc "/maxteams: specify number from 2 to 8"]] else return [ModifyRoom (\r -> r{teamsNumberLimit = m})] diff -r 54725a1d1db8 -r 1f15b0ee8e34 gameServer/hedgewars-server.cabal --- a/gameServer/hedgewars-server.cabal Mon Sep 24 11:16:08 2018 -0400 +++ b/gameServer/hedgewars-server.cabal Mon Sep 24 11:18:48 2018 -0400 @@ -16,7 +16,7 @@ default-language: Haskell2010 --- Don't forget to update INSTALL.md when you change these dependencies! +-- Don't forget to update INSTALL.md and .travis.yml when you change these dependencies! Build-depends: base >= 4.8, containers, diff -r 54725a1d1db8 -r 1f15b0ee8e34 hedgewars/ArgParsers.pas --- a/hedgewars/ArgParsers.pas Mon Sep 24 11:16:08 2018 -0400 +++ b/hedgewars/ArgParsers.pas Mon Sep 24 11:18:48 2018 -0400 @@ -72,37 +72,50 @@ procedure DisplayUsage; begin - WriteLn(stdout, 'Usage: hwengine <path to replay file> [options]'); + WriteLn(stdout, 'This is the Hedgewars Engine (hwengine), used to play Hedgewars games and demos.'); + WriteLn(stdout, 'Use the command-line arguments to play a demo.'); + WriteLn(stdout, ''); + WriteLn(stdout, 'Usage: hwengine <path to demo file> [options]'); WriteLn(stdout, ''); WriteLn(stdout, 'where [options] can be any of the following:'); - WriteLn(stdout, ' --prefix [path to folder]'); - WriteLn(stdout, ' --user-prefix [path to folder]'); - WriteLn(stdout, ' --locale [name of language file]'); - WriteLn(stdout, ' --nick [string]'); - WriteLn(stdout, ' --fullscreen-width [fullscreen width in pixels]'); - WriteLn(stdout, ' --fullscreen-height [fullscreen height in pixels]'); - WriteLn(stdout, ' --width [window width in pixels]'); - WriteLn(stdout, ' --height [window height in pixels]'); - WriteLn(stdout, ' --volume [sound level]'); - WriteLn(stdout, ' --frame-interval [milliseconds]'); - Writeln(stdout, ' --stereo [value]'); - WriteLn(stdout, ' --raw-quality [flags]'); - WriteLn(stdout, ' --low-quality'); - WriteLn(stdout, ' --nomusic'); - WriteLn(stdout, ' --nosound'); - WriteLn(stdout, ' --nodampen'); - WriteLn(stdout, ' --fullscreen'); - WriteLn(stdout, ' --showfps'); - WriteLn(stdout, ' --altdmg'); - WriteLn(stdout, ' --no-teamtag'); - WriteLn(stdout, ' --no-hogtag'); - WriteLn(stdout, ' --no-healthtag'); - WriteLn(stdout, ' --translucent-tags'); - WriteLn(stdout, ' --stats-only'); - WriteLn(stdout, ' --help'); + WriteLn(stdout, ''); + WriteLn(stdout, 'File locations:'); + WriteLn(stdout, ' --prefix <path to folder>: Set the path to the system game data folder'); + WriteLn(stdout, ' --user-prefix <path to folder>: Set the path to the custom data folder to find game content'); + WriteLn(stdout, ' --locale <name of file>: Set the game language (en.txt for example)'); + WriteLn(stdout, ''); + WriteLn(stdout, 'Graphics:'); + WriteLn(stdout, ' --width <width in pixels>: Set game window width'); + WriteLn(stdout, ' --height <height in pixels>: Set game window height'); + WriteLn(stdout, ' --fullscreen: Start in fullscreen'); + WriteLn(stdout, ' --fullscreen-width <width in pixels>: Set fullscreen width'); + WriteLn(stdout, ' --fullscreen-height <height in pixels>: Set fullscreen height'); + WriteLn(stdout, ' --low-quality: Lowers the game quality'); WriteLn(stdout, ''); - WriteLn(stdout, 'For more detailed help and examples go to:'); - WriteLn(stdout, 'https://hedgewars.org/kb/CommandLineOptions'); + WriteLn(stdout, 'Audio:'); + WriteLn(stdout, ' --volume <sound level>: Set volume between 0 and 100'); + WriteLn(stdout, ' --nomusic: Disable music'); + WriteLn(stdout, ' --nosound: Disable sound effects'); + WriteLn(stdout, ' --nodampen: Don''t dampen sound volume when game application loses focus'); + WriteLn(stdout, ''); + WriteLn(stdout, 'HUD:'); + WriteLn(stdout, ' --altdmg: Show alternative damage'); + WriteLn(stdout, ' --no-teamtag: Disable team name tags'); + WriteLn(stdout, ' --no-hogtag: Disable hedgehog name tags'); + WriteLn(stdout, ' --no-healthtag: Disable hedgehog health tags'); + WriteLn(stdout, ' --translucent-tags: Enable translucent name and health tags'); + WriteLn(stdout, ' --showfps: Show frames per second'); + WriteLn(stdout, ''); + WriteLn(stdout, 'Miscellaneous:'); + WriteLn(stdout, ' --nick <name>: Set user nickname'); + WriteLn(stdout, ' --help: Show a list of command-line options and exit'); + WriteLn(stdout, ''); + Writeln(stdout, 'Advanced options:'); + Writeln(stdout, ' --stereo <value>: Set stereoscopic rendering (1 to 14)'); + WriteLn(stdout, ' --frame-interval <milliseconds>: Set minimum interval (in ms) between each frame. Eg, 40 would make the game run at most 25 fps'); + WriteLn(stdout, ' --raw-quality <flags>: Manually specify the reduced quality flags'); + WriteLn(stdout, ' --stats-only: Write the round information to console without launching the game, useful for statistics only'); + WriteLn(stdout, ' --lua-test <path to script>: Run a Lua test script'); GameType:= gmtSyntaxHelp; helpCommandUsed:= true; end; @@ -110,7 +123,7 @@ procedure setDepth(var paramIndex: LongInt); begin WriteLn(stdout, 'WARNING: --depth is a deprecated command, which could be removed in a future version!'); - WriteLn(stdout, ' This option no longer does anything, please consider removing it'); + WriteLn(stdout, ' This option no longer does anything, please consider removing it.'); WriteLn(stdout, ''); inc(ParamIndex); end; @@ -130,7 +143,7 @@ ipcPort := port else begin - WriteLn(stderr, 'ERROR: use of --port is not allowed'); + WriteLn(stderr, 'ERROR: use of --port is not allowed!'); wrongParameter := true; end end; @@ -194,7 +207,7 @@ val(str, tmpInt, c); wrongParameter:= c <> 0; if wrongParameter then - WriteLn(stderr, 'ERROR: '+ParamStr(paramIndex-1)+' expects a number, you passed "'+str+'"'); + WriteLn(stderr, 'ERROR: '+ParamStr(paramIndex-1)+' expects a number, you passed "'+str+'"!'); {$ENDIF} getLongIntParameter:= tmpInt; end; @@ -205,7 +218,7 @@ wrongParameter:= (str='') or (Copy(str,1,2) = '--'); {$IFNDEF HWLIBRARY} if wrongParameter then - WriteLn(stderr, 'ERROR: '+ParamStr(paramIndex-1)+' expects a string, you passed "'+str+'"'); + WriteLn(stderr, 'ERROR: '+ParamStr(paramIndex-1)+' expects a string, you passed "'+str+'"!'); {$ENDIF} getstringParameter:= str; end; @@ -277,12 +290,12 @@ {--lua-test} 36 : begin cTestLua := true; SetSound(false); cScriptName := getstringParameter(arg, paramIndex, parseParameter); WriteLn(stdout, 'Lua test file specified: ' + cScriptName);end; else begin - //Assume the first "non parameter" is the replay file, anything else is invalid + //Assume the first "non parameter" is the demo file, anything else is invalid if (recordFileName = '') and (Copy(cmd,1,2) <> '--') then recordFileName := cmd else begin - WriteLn(stderr, '"'+cmd+'" is not a valid option'); + WriteLn(stderr, '"'+cmd+'" is not a valid option.'); parseParameter:= true; end; end; @@ -294,9 +307,9 @@ isBool, isValid: Boolean; cmd, arg, newSyntax: string; begin - WriteLn(stdout, 'WARNING: you are using a deprecated command, which could be removed in a future version!'); + WriteLn(stdout, 'WARNING: You are using a deprecated command, which could be removed in a future version!'); WriteLn(stdout, ' Consider updating to the latest syntax, which is much more flexible!'); - WriteLn(stdout, ' Run `hwegine --help` to learn it!'); + WriteLn(stdout, ' Run "hwegine --help" to learn it!'); WriteLn(stdout, ''); index:= 0; @@ -376,21 +389,21 @@ if (isInternal) and (ParamCount<=1) then begin - WriteLn(stderr, '--internal should not be manually used'); + WriteLn(stderr, 'The "--internal" option should not be manually used!'); GameType := gmtBadSyntax; end; if (not helpCommandUsed) then if (not cTestLua) and (not isInternal) and (recordFileName = '') then begin - WriteLn(stderr, 'You must specify a replay file'); + WriteLn(stderr, 'You must specify a demo file.'); GameType := gmtBadSyntax; end else if (recordFileName <> '') then - WriteLn(stdout, 'Attempting to play demo file "' + recordFilename + '"'); + WriteLn(stdout, 'Attempting to play demo file "' + recordFilename + '".'); if (GameType = gmtBadSyntax) then - WriteLn(stderr, 'Please use --help to see possible arguments and their usage'); + WriteLn(stderr, 'Please use --help to see possible arguments and their usage.'); (* WriteLn(stdout,'PathPrefix: ' + PathPrefix); diff -r 54725a1d1db8 -r 1f15b0ee8e34 hedgewars/uChat.pas --- a/hedgewars/uChat.pas Mon Sep 24 11:16:08 2018 -0400 +++ b/hedgewars/uChat.pas Mon Sep 24 11:18:48 2018 -0400 @@ -71,7 +71,7 @@ const colors: array[#0..#9] of TSDL_Color = ( - (r:$FF; g:$FF; b:$FF; a:$FF), // #0 unused, feel free to take it for anything + (r:$FF; g:$FF; b:$00; a:$FF), // #0 warning message [Yellow] (r:$FF; g:$FF; b:$FF; a:$FF), // #1 chat message [White] (r:$FF; g:$00; b:$FF; a:$FF), // #2 action message [Purple] (r:$90; g:$FF; b:$90; a:$FF), // #3 join/leave message [Lime] diff -r 54725a1d1db8 -r 1f15b0ee8e34 hedgewars/uCommandHandlers.pas --- a/hedgewars/uCommandHandlers.pas Mon Sep 24 11:16:08 2018 -0400 +++ b/hedgewars/uCommandHandlers.pas Mon Sep 24 11:18:48 2018 -0400 @@ -113,7 +113,7 @@ if s[byte(s[0])]='"' then Delete(s, byte(s[0]), 1); cScriptName:= s; -ScriptLoad(s) +ScriptLoad(s, true) end; procedure chScriptParam(var s: shortstring); @@ -131,7 +131,8 @@ procedure chCurU_m(var s: shortstring); begin s:= s; // avoid compiler hint -CursorMovementY:= 0; +if CursorMovementY < 0 then + CursorMovementY:= 0; end; procedure chCurD_p(var s: shortstring); @@ -143,7 +144,8 @@ procedure chCurD_m(var s: shortstring); begin s:= s; // avoid compiler hint -CursorMovementY:= 0; +if CursorMovementY > 0 then + CursorMovementY:= 0; end; procedure chCurL_p(var s: shortstring); @@ -155,7 +157,8 @@ procedure chCurL_m(var s: shortstring); begin s:= s; // avoid compiler hint -CursorMovementX:= 0; +if CursorMovementX < 0 then + CursorMovementX:= 0; end; procedure chCurR_p(var s: shortstring); @@ -167,7 +170,8 @@ procedure chCurR_m(var s: shortstring); begin s:= s; // avoid compiler hint -CursorMovementX:= 0; +if CursorMovementX > 0 then + CursorMovementX:= 0; end; procedure chLeft_p(var s: shortstring); @@ -536,7 +540,7 @@ InitStepsFlags:= InitStepsFlags or cifMap end; cMapName:= s; -ScriptLoad('Maps/' + s + '/map.lua') +ScriptLoad('Maps/' + s + '/map.lua', false) end; procedure chSetTheme(var s: shortstring); diff -r 54725a1d1db8 -r 1f15b0ee8e34 hedgewars/uGame.pas --- a/hedgewars/uGame.pas Mon Sep 24 11:16:08 2018 -0400 +++ b/hedgewars/uGame.pas Mon Sep 24 11:18:48 2018 -0400 @@ -35,6 +35,37 @@ var i,j : LongInt; s: ansistring; begin + +inc(SoundTimerTicks, Lag); +if SoundTimerTicks >= 50 then + begin + SoundTimerTicks:= 0; + if cVolumeDelta <> 0 then + begin + j:= Volume; + i:= ChangeVolume(cVolumeDelta); + if (not cIsSoundEnabled) or (isAudioMuted and (j<>i)) then + AddCaption(trmsg[sidMute], capcolSetting, capgrpVolume) + else if not isAudioMuted then + begin + s:= ansistring(inttostr(i)); + AddCaption(FormatA(trmsg[sidVolume], s), capcolSetting, capgrpVolume) + end + end + else if cMuteToggle then + begin + MuteAudio; + if isAudioMuted then + AddCaption(trmsg[sidMute], capcolSetting, capgrpVolume) + else + begin + s:= ansistring(inttostr(GetVolumePercent())); + AddCaption(FormatA(trmsg[sidVolume], s), capcolSetting, capgrpVolume); + end; + cMuteToggle:= false; + end; + end; + if isPaused then exit; @@ -78,35 +109,6 @@ if cTestLua then Lag:= High(LongInt); -inc(SoundTimerTicks, Lag); -if SoundTimerTicks >= 50 then - begin - SoundTimerTicks:= 0; - if cVolumeDelta <> 0 then - begin - j:= Volume; - i:= ChangeVolume(cVolumeDelta); - if (not cIsSoundEnabled) or (isAudioMuted and (j<>i)) then - AddCaption(trmsg[sidMute], capcolSetting, capgrpVolume) - else if not isAudioMuted then - begin - s:= ansistring(inttostr(i)); - AddCaption(FormatA(trmsg[sidVolume], s), capcolSetting, capgrpVolume) - end - end - else if cMuteToggle then - begin - MuteAudio; - if isAudioMuted then - AddCaption(trmsg[sidMute], capcolSetting, capgrpVolume) - else - begin - s:= ansistring(inttostr(GetVolumePercent())); - AddCaption(FormatA(trmsg[sidVolume], s), capcolSetting, capgrpVolume); - end; - cMuteToggle:= false; - end; - end; PlayNextVoice; i:= 1; while (GameState <> gsExit) and (i <= Lag) and allOK do diff -r 54725a1d1db8 -r 1f15b0ee8e34 hedgewars/uGears.pas --- a/hedgewars/uGears.pas Mon Sep 24 11:16:08 2018 -0400 +++ b/hedgewars/uGears.pas Mon Sep 24 11:18:48 2018 -0400 @@ -62,9 +62,9 @@ var delay: LongWord; delay2: LongWord; - step: (stInit, stDelay, stChDmg, stSweep, stTurnReact, - stAfterDelay, stChWin, stWater, stChWin2, stHealth, - stSpawn, stNTurn); + step: (stInit, stDelay, stChDmg, stSweep, stTurnStats, stChWin1, + stTurnReact, stAfterDelay, stChWin2, stWater, stChWin3, + stHealth, stSpawn, stNTurn); NewTurnTick: LongWord; //SDMusic: shortstring; @@ -289,11 +289,25 @@ else inc(step); + stTurnStats: + begin + if (not bBetweenTurns) and (not isInMultiShoot) then + uStats.TurnStats; + inc(step) + end; + + stChWin1: + begin + CheckForWin(); + inc(step) + end; + stTurnReact: begin if (not bBetweenTurns) and (not isInMultiShoot) then begin uStats.TurnReaction; + uStats.TurnStatsReset; inc(step) end else @@ -310,7 +324,7 @@ if delay = 0 then inc(step) end; - stChWin: + stChWin2: begin CheckForWin(); inc(step) @@ -322,14 +336,18 @@ if TotalRoundsPre = cSuddenDTurns + 1 then bWaterRising:= true; if bWaterRising and (cWaterRise > 0) then + begin + bDuringWaterRise:= true; AddGear(0, 0, gtWaterUp, 0, _0, _0, 0)^.Tag:= cWaterRise; + end; inc(step) end - else // since we are not raising the water, a second win-check isn't needed + else // since we are not raising the water, another win-check isn't needed inc(step,2); - stChWin2: + stChWin3: begin CheckForWin; + bDuringWaterRise:= false; inc(step) end; @@ -444,7 +462,7 @@ if (cHedgehogTurnTime >= 10000) and (CurrentHedgehog^.Gear <> nil) and ((CurrentHedgehog^.Gear^.State and gstAttacked) = 0) - and (not isGetAwayTime) then + and (not isGetAwayTime) and (ReadyTimeLeft = 0) then if TurnTimeLeft = 5000 then PlaySoundV(sndHurry, CurrentTeam^.voicepack) else if TurnTimeLeft = 4000 then @@ -1202,8 +1220,7 @@ Gear^.Text:= text; Gear^.FrameTicks:= x end; - //ParseCommand('/say [' + hh^.Name + '] '+text, true) - AddChatString(#9+'[' + HH^.Name + '] '+text); + AddChatString(#9+FormatA(trmsg[sidChatHog], [HH^.Name, text])); end end else if (x >= 4) then diff -r 54725a1d1db8 -r 1f15b0ee8e34 hedgewars/uGearsHandlersMess.pas --- a/hedgewars/uGearsHandlersMess.pas Mon Sep 24 11:16:08 2018 -0400 +++ b/hedgewars/uGearsHandlersMess.pas Mon Sep 24 11:18:48 2018 -0400 @@ -307,9 +307,28 @@ AddVisualGear(bubbleX, bubbleY, vgtBubble) else if Random(12) = 0 then AddVisualGear(bubbleX, bubbleY, vgtBubble); +// Insta-delete gear and skip drowning animation if water is 100% opaque if (not SuddenDeathDmg and (WaterOpacity > $FE)) -or (SuddenDeathDmg and (SDWaterOpacity > $FE)) -or (hwRound(Gear^.Y) > Gear^.Radius + cWaterLine + cVisibleWater) then +or (SuddenDeathDmg and (SDWaterOpacity > $FE)) then + begin + // Teleport gear to a suitable position for the damage tag in the water + if (WorldEdge = weSea) and (hwRound(Gear^.X) - Gear^.Radius < leftX) then + begin + if (hwRound(Gear^.X) - Gear^.Radius > leftX - 90) then + Gear^.X := Gear^.X - _90 + end + else if (WorldEdge = weSea) and (hwRound(Gear^.X) + Gear^.Radius > rightX) then + begin + if (hwRound(Gear^.X) - Gear^.Radius < rightX + 90) then + Gear^.X := Gear^.X + _90 + end + else + Gear^.Y := int2hwFloat(Gear^.Radius + cWaterLine + cVisibleWater); + DeleteGear(Gear); + exit; + end; +// Delete normally if gear is outside of visible range +if (hwRound(Gear^.Y) > Gear^.Radius + cWaterLine + cVisibleWater) then DeleteGear(Gear); end; @@ -3249,7 +3268,7 @@ with HHGear^ do begin State := State and (not gstAttacking); - Message := Message and (not gmAttack) + Message := Message and (not (gmAttack or gmSwitch)) end end; @@ -5459,7 +5478,7 @@ Gear^.dY.isNegative := not Gear^.dY.isNegative; HHGear^.dX := Gear^.dX; HHGear^.dY := Gear^.dY; - AmmoShove(Gear, 0, 80); + AmmoShove(Gear, 0, 79); Gear^.dX.isNegative := not Gear^.dX.isNegative; Gear^.dY.isNegative := not Gear^.dY.isNegative; end; @@ -5889,6 +5908,8 @@ RenderHealth(resgear^.Hedgehog^); RecountTeamHealth(resgear^.Hedgehog^.Team); resgear^.Hedgehog^.Effects[heResurrected]:= 1; + { Reviving a hog implies its clan is now alive, too. } + resgear^.Hedgehog^.Team^.Clan^.DeathLogged:= false; s:= ansistring(resgear^.Hedgehog^.Name); AddCaption(FormatA(GetEventString(eidResurrected), s), capcolDefault, capgrpMessage); // only make hat-less hedgehogs look like zombies, preserve existing hats diff -r 54725a1d1db8 -r 1f15b0ee8e34 hedgewars/uGearsHedgehog.pas --- a/hedgewars/uGearsHedgehog.pas Mon Sep 24 11:16:08 2018 -0400 +++ b/hedgewars/uGearsHedgehog.pas Mon Sep 24 11:18:48 2018 -0400 @@ -186,6 +186,9 @@ Gear^.Message:= Gear^.Message and (not gmTimer); CurWeapon:= GetCurAmmoEntry(Gear^.Hedgehog^); with Gear^.Hedgehog^ do + if (((Gear^.State and gstAttacked) <> 0) and (GameFlags and gfInfAttack = 0)) + or ((Gear^.State and gstHHDriven) = 0) then + exit; if ((Gear^.Message and gmPrecise) <> 0) and ((CurWeapon^.Propz and ammoprop_SetBounce) <> 0) then begin color:= Gear^.Hedgehog^.Team^.Clan^.Color; @@ -596,15 +599,14 @@ if (not CurrentTeam^.ExtDriven) and ((Ammoz[CurAmmoType].Ammo.Propz and ammoprop_Power) <> 0) then SendIPC(_S'a'); AfterAttack; - end + end; + TargetPoint.X := NoPointX; end else Message:= Message and (not gmAttack); ScriptCall('onHogAttack', ord(usedAmmoType)); end; // of with Gear^, Gear^.Hedgehog^ do - - TargetPoint.X := NoPointX; end; procedure AfterAttack; @@ -639,10 +641,13 @@ begin if TagTurnTimeLeft = 0 then TagTurnTimeLeft:= TurnTimeLeft; - if (CurAmmoGear <> nil) and (CurAmmoGear^.State and gstSubmersible <> 0) and CheckCoordInWater(hwRound(CurAmmoGear^.X), hwRound(CurAmmoGear^.Y)) then - TurnTimeLeft:=(Ammoz[a].TimeAfterTurn * cGetAwayTime) div 25 - else TurnTimeLeft:=(Ammoz[a].TimeAfterTurn * cGetAwayTime) div 100; - IsGetAwayTime := true; + if (HHGear <> nil) and ((HHGear^.State and gstHHDriven) <> 0) then + begin + if (CurAmmoGear <> nil) and (CurAmmoGear^.State and gstSubmersible <> 0) and CheckCoordInWater(hwRound(CurAmmoGear^.X), hwRound(CurAmmoGear^.Y)) then + TurnTimeLeft:=(Ammoz[a].TimeAfterTurn * cGetAwayTime) div 25 + else TurnTimeLeft:=(Ammoz[a].TimeAfterTurn * cGetAwayTime) div 100; + IsGetAwayTime := true; + end; end; if ((Ammoz[a].Ammo.Propz and ammoprop_NoRoundEnd) = 0) and (HHGear <> nil) then HHGear^.State:= HHGear^.State or gstAttacked; @@ -864,6 +869,9 @@ exit end; +if (Gear^.Hedgehog^.Unplaced) then + exit; + if ((Gear^.Message and gmAnimate) <> 0) then begin Gear^.Message:= 0; @@ -908,7 +916,7 @@ end; if (Gear^.Message and (gmLeft or gmRight) <> 0) and (Gear^.State and gstMoving = 0) and - (CheckGearNear(Gear, gtPortal, 26, 26) <> nil) then + (CheckGearNear(Gear, gtPortal, 26, 26) = nil) then Gear^.PortalCounter:= 0; PrevdX:= hwSign(Gear^.dX); if (Gear^.Message and gmLeft )<>0 then diff -r 54725a1d1db8 -r 1f15b0ee8e34 hedgewars/uGearsList.pas --- a/hedgewars/uGearsList.pas Mon Sep 24 11:16:08 2018 -0400 +++ b/hedgewars/uGearsList.pas Mon Sep 24 11:18:48 2018 -0400 @@ -868,8 +868,8 @@ begin t:= max(Gear^.Damage, Gear^.Health); Gear^.Damage:= t; - if (((not SuddenDeathDmg) and (WaterOpacity < $FF)) or (SuddenDeathDmg and (SDWaterOpacity < $FF))) then - spawnHealthTagForHH(Gear, t); + // Display hedgehog damage in water + spawnHealthTagForHH(Gear, t); end; team:= Gear^.Hedgehog^.Team; diff -r 54725a1d1db8 -r 1f15b0ee8e34 hedgewars/uGearsRender.pas --- a/hedgewars/uGearsRender.pas Mon Sep 24 11:16:08 2018 -0400 +++ b/hedgewars/uGearsRender.pas Mon Sep 24 11:18:48 2018 -0400 @@ -301,7 +301,7 @@ sign, hx, hy, tx, ty, sx, sy, m: LongInt; // hedgehog, crosshair, temp, sprite, direction dx, dy, ax, ay, aAngle, dAngle, hAngle, lx, ly: real; // laser, change wraps: LongWord; // numbe of wraps for laser in world wrap - defaultPos, HatVisible: boolean; + defaultPos, HatVisible, inWorldBounds: boolean; HH: PHedgehog; CurWeapon: PAmmo; iceOffset:Longint; @@ -444,7 +444,8 @@ hx:= tx; hy:= ty; wraps:= 0; - while ((Land[ty, tx] and lfAll) = 0) do + inWorldBounds := ((ty and LAND_HEIGHT_MASK) or (tx and LAND_WIDTH_MASK)) = 0; + while inWorldBounds and ((Land[ty, tx] and lfAll) = 0) do begin if wraps > cMaxLaserSightWraps then break; diff -r 54725a1d1db8 -r 1f15b0ee8e34 hedgewars/uGearsUtils.pas --- a/hedgewars/uGearsUtils.pas Mon Sep 24 11:16:08 2018 -0400 +++ b/hedgewars/uGearsUtils.pas Mon Sep 24 11:18:48 2018 -0400 @@ -1332,18 +1332,9 @@ if (Gear^.State and gstNoDamage) = 0 then begin - if (not (Gear^.Kind in [gtMinigun, gtPortal])) and - (Ammo^.Kind in [gtDEagleShot, gtSniperRifleShot, gtMinigunBullet]) then - begin - VGear := AddVisualGear(t^.cX[i], t^.cY[i], vgtBulletHit); - if VGear <> nil then - VGear^.Angle := DxDy2Angle(-Ammo^.dX, Ammo^.dY); - end; - if (Gear^.Kind = gtHedgehog) and (Ammo^.State and gsttmpFlag <> 0) and (Ammo^.Kind = gtShover) then Gear^.FlightTime:= 1; - case Gear^.Kind of gtHedgehog, gtMine, @@ -1355,6 +1346,12 @@ gtExplosives: //, //gtStructure: begin + if Ammo^.Kind in [gtDEagleShot, gtSniperRifleShot, gtMinigunBullet] then + begin + VGear := AddVisualGear(t^.cX[i], t^.cY[i], vgtBulletHit); + if VGear <> nil then + VGear^.Angle := DxDy2Angle(-Ammo^.dX, Ammo^.dY); + end; if (Ammo^.Kind = gtDrill) then begin Ammo^.Timer:= 0; @@ -1397,13 +1394,13 @@ if (Gear^.Kind = gtHedgehog) and (Gear^.Hedgehog^.King or (Gear^.Hedgehog^.Effects[heFrozen] > 0)) then begin - Gear^.dX:= Gear^.dX + Ammo^.dX * Power * _0_005; - Gear^.dY:= Gear^.dY + Ammo^.dY * Power * _0_005 + Gear^.dX:= Ammo^.dX * Power * _0_005; + Gear^.dY:= Ammo^.dY * Power * _0_005 end else if ((Ammo^.Kind <> gtFlame) or (Gear^.Kind = gtHedgehog)) and (Power <> 0) then begin - Gear^.dX:= Gear^.dX + Ammo^.dX * Power * _0_01; - Gear^.dY:= Gear^.dY + Ammo^.dY * Power * _0_01 + Gear^.dX:= Ammo^.dX * Power * _0_01; + Gear^.dY:= Ammo^.dY * Power * _0_01 end; if (not isZero(Gear^.dX)) or (not isZero(Gear^.dY)) then diff -r 54725a1d1db8 -r 1f15b0ee8e34 hedgewars/uIO.pas --- a/hedgewars/uIO.pas Mon Sep 24 11:16:08 2018 -0400 +++ b/hedgewars/uIO.pas Mon Sep 24 11:18:48 2018 -0400 @@ -254,7 +254,7 @@ end; procedure SendStat(sit: TStatInfoType; s: shortstring); -const stc: array [TStatInfoType] of char = ('r', 'D', 'k', 'K', 'H', 'T', 'P', 's', 'S', 'B', 'c', 'g', 'p'); +const stc: array [TStatInfoType] of char = ('r', 'D', 'k', 'K', 'H', 'T', 'P', 's', 'S', 'B', 'c', 'g', 'p', 'R', 'h'); var buf: shortstring; begin buf:= 'i' + stc[sit] + s; diff -r 54725a1d1db8 -r 1f15b0ee8e34 hedgewars/uLand.pas --- a/hedgewars/uLand.pas Mon Sep 24 11:16:08 2018 -0400 +++ b/hedgewars/uLand.pas Mon Sep 24 11:18:48 2018 -0400 @@ -873,6 +873,7 @@ if (WorldEdge <> weNone) and (not hasBorder) then InitWorldEdges(); +ScriptSetMapGlobals; end; procedure GenPreview(out Preview: TPreview); @@ -889,6 +890,8 @@ OutError('Unknown mapgen', true); end; + ScriptSetMapGlobals; + // strict scaling needed here since preview assumes a rectangle rh:= max(LAND_HEIGHT,2048); rw:= max(LAND_WIDTH,4096); @@ -938,6 +941,8 @@ OutError('Unknown mapgen', true); end; + ScriptSetMapGlobals; + // strict scaling needed here since preview assumes a rectangle rh:= max(LAND_HEIGHT, 2048); rw:= max(LAND_WIDTH, 4096); @@ -979,12 +984,14 @@ procedure chSendLandDigest(var s: shortstring); var i: LongInt; + landPixelDigest : LongInt; begin + landPixelDigest:= 1; for i:= 0 to LAND_HEIGHT-1 do - syncedPixelDigest:= Adler32Update(syncedPixelDigest, @Land[i,0], LAND_WIDTH*2); - s:= 'M' + IntToStr(syncedPixelDigest); // + cScriptName; script name is no longer needed. scripts are hashed + landPixelDigest:= Adler32Update(landPixelDigest, @Land[i,0], LAND_WIDTH*2); + s:= 'M' + IntToStr(syncedPixelDigest)+'|'+IntToStr(landPixelDigest); - ScriptSetString('LandDigest', s); + ScriptSetString('LandDigest',IntToStr(landPixelDigest)); chLandCheck(s); if allOK then SendIPCRaw(@s[0], Length(s) + 1) diff -r 54725a1d1db8 -r 1f15b0ee8e34 hedgewars/uScript.pas --- a/hedgewars/uScript.pas Mon Sep 24 11:16:08 2018 -0400 +++ b/hedgewars/uScript.pas Mon Sep 24 11:18:48 2018 -0400 @@ -34,12 +34,13 @@ procedure ScriptPrintStack; procedure ScriptClearStack; -procedure ScriptLoad(name : shortstring); +function ScriptLoad(name : shortstring; mustExist : boolean): boolean; procedure ScriptOnPreviewInit; procedure ScriptOnGameInit; procedure ScriptOnScreenResize; procedure ScriptSetInteger(name : shortstring; value : LongInt); procedure ScriptSetString(name : shortstring; value : shortstring); +procedure ScriptSetMapGlobals; procedure ScriptCall(fname : shortstring); function ScriptCall(fname : shortstring; par1: LongInt) : LongInt; @@ -99,9 +100,10 @@ ScriptAmmoDelay : shortstring; ScriptAmmoReinforcement : shortstring; ScriptLoaded : boolean; - mapDims : boolean; PointsBuffer: shortstring; PrevCursorX, PrevCursorY: LongInt; + PendingTurnTimeLeft, PendingReadyTimeLeft: LongWord; + isPendingTurnTimeLeft, isPendingReadyTimeLeft: boolean; {$IFDEF USE_LUA_SCRIPT} procedure ScriptPrepareAmmoStore; forward; @@ -112,6 +114,7 @@ var LuaDebugInfo: lua_Debug; procedure SetGlobals; forward; +procedure GetGlobals; forward; procedure LuaParseString(s: shortString); begin SetGlobals; @@ -121,7 +124,9 @@ begin AddFileLog('[Lua] input string parsing error!'); AddChatString(#5 + '[Lua] Error while parsing!'); - end; + end + else + GetGlobals(); end; function LuaUpdateDebugInfo(): Boolean; @@ -136,26 +141,43 @@ exit(true); end; -procedure LuaError(s: shortstring); -var src: shortstring; +procedure LuaErrorOrWarning(s: shortstring; isWarning: boolean); +var src, intro: shortstring; const maxsrclen = 20; begin + if isWarning then + intro:= 'LUA WARNING' + else + intro:= 'LUA ERROR'; if LuaUpdateDebugInfo() then begin src:= StrPas(LuaDebugInfo.source); - s:= 'LUA ERROR [ ... ' + s:= intro + ': [ ... ' + copy(src, Length(src) - maxsrclen, maxsrclen - 3) + ':' + inttostr(LuaDebugInfo.currentLine) + ']: ' + s; end else - s:= 'LUA ERROR: ' + s; + s:= intro + ': ' + s; WriteLnToConsole(s); - AddChatString(#5 + s); - if cTestLua then + if isWarning then + AddChatString(#0 + s) + else + AddChatString(#5 + s); + if cTestLua and (not isWarning) then halt(HaltTestLuaError); end; +procedure LuaError(s: shortstring); +begin + LuaErrorOrWarning(s, false); +end; + +procedure LuaWarning(s: shortstring); +begin + LuaErrorOrWarning(s, true); +end; + procedure LuaCallError(error, call, paramsyntax: shortstring); begin LuaError(call + ': ' + error); @@ -1999,9 +2021,10 @@ else respectFactor:= True; if respectFactor then - TurnTimeLeft:= (time * cGetAwayTime) div 100 + PendingTurnTimeLeft:= (time * cGetAwayTime) div 100 else - TurnTimeLeft:= time; + PendingTurnTimeLeft:= time; + isPendingTurnTimeLeft:= true; if ((CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil)) then begin CurrentHedgehog^.Gear^.State:= CurrentHedgehog^.Gear^.State or gstAttacked; @@ -2176,8 +2199,8 @@ var s: LongInt; soundState: boolean; const - call = 'SetSoundMasked'; - params = 'soundId, isMasked]'; + call = 'SetSoundMask'; + params = 'soundId, isMasked'; begin if CheckLuaParamCount(L, 2, call, params) then begin @@ -2787,7 +2810,7 @@ placed, behind, flipHoriz, flipVert : boolean; const call = 'PlaceSprite'; - params = 'x, y, sprite, frameIdx, tint, behind, flipHoriz, flipVert, [, landFlag, ... ]'; + params = 'x, y, sprite, frameIdx, tint, behind, flipHoriz, flipVert [, landFlag, ... ]'; begin placed:= false; if CheckAndFetchLuaParamMinCount(L, 4, call, params, n) then @@ -2835,7 +2858,7 @@ eraseOnLFMatch, onlyEraseLF, flipHoriz, flipVert : boolean; const call = 'EraseSprite'; - params = 'x, y, sprite, frameIdx, eraseOnLFMatch, onlyEraseLF, flipHoriz, flipVert, [, landFlag, ... ]'; + params = 'x, y, sprite, frameIdx, eraseOnLFMatch, onlyEraseLF, flipHoriz, flipVert [, landFlag, ... ]'; begin if CheckAndFetchLuaParamMinCount(L, 4, call, params, n) then begin @@ -3066,12 +3089,20 @@ function lc_hedgewarsscriptload(L : Plua_State) : LongInt; Cdecl; +var success : boolean; + n : LongInt; begin - if CheckLuaParamCount(L, 1, 'HedgewarsScriptLoad', 'scriptPath') then - ScriptLoad(lua_tostring(L, 1)) + if CheckAndFetchParamCount(L, 1, 2, 'HedgewarsScriptLoad', 'scriptPath [, mustExist]', n) then + begin + if n = 1 then + success:= ScriptLoad(lua_tostring(L, 1), true) + else + success:= ScriptLoad(lua_tostring(L, 1), lua_toboolean(L, 2)); + end else - lua_pushnil(L); - lc_hedgewarsscriptload:= 0; + success:= false; + lua_pushboolean(L, success); + lc_hedgewarsscriptload:= 1; end; @@ -3178,6 +3209,40 @@ lc_explode:= 1; end; +function lc_setturntimeleft(L : Plua_State) : LongInt; Cdecl; +var number: Int64; +begin + if CheckLuaParamCount(L, 1, 'SetTurnTimeLeft', 'newTurnTimeLeft') then + begin + number:= Trunc(lua_tonumber(L, 1)); + if number < 0 then + number:= 0; + if number > cMaxTurnTime then + number:= cMaxTurnTime; + // The real TurnTimeLeft will be set in SetGlobals + PendingTurnTimeLeft:= number; + isPendingTurnTimeLeft:= true; + end; + lc_setturntimeleft:= 0; +end; + +function lc_setreadytimeleft(L : Plua_State) : LongInt; Cdecl; +var number: Int64; +begin + if CheckLuaParamCount(L, 1, 'SetReadyTimeLeft', 'newReadyTimeLeft') then + begin + number:= Trunc(lua_tonumber(L, 1)); + if number < 0 then + number:= 0; + if number > cMaxTurnTime then + number:= cMaxTurnTime; + // The real ReadyTimeLeft will be set in SetGlobals + PendingReadyTimeLeft:= number; + isPendingReadyTimeLeft:= true; + end; + lc_setreadytimeleft:= 0; +end; + function lc_startghostpoints(L : Plua_State) : LongInt; Cdecl; begin if CheckLuaParamCount(L, 1, 'StartGhostPoints', 'count') then @@ -3475,7 +3540,6 @@ ScriptSetInteger('ClansCount', ClansCount); ScriptSetInteger('TeamsCount', TeamsCount); -mapDims:= false end; @@ -3560,7 +3624,7 @@ end; // ⭒⭐⭒✨⭐⭒✨⭐☆✨⭐✨✧✨☆✨✧✨☆⭒✨☆⭐⭒☆✧✨⭒✨⭐✧⭒☆⭒✧☆✨✧⭐☆✨☆✧⭒✨✧⭒☆⭐☆✧ -procedure ScriptLoad(name : shortstring); +function ScriptLoad(name : shortstring; mustExist : boolean): boolean; var ret : LongInt; s : shortstring; f : PFSFile; @@ -3575,18 +3639,22 @@ s:= cPathz[ptData] + name; if not pfsExists(s) then begin - AddFileLog('[LUA] Script not found: ' + name); + if mustExist then + OutError('Script not found: ' + name, true) + else + AddFileLog('[LUA] Script not found: ' + name); + ScriptLoad:= false; exit; end; f:= pfsOpenRead(s); if f = nil then - exit; + OutError('Error reading script: ' + name, true); hedgewarsMountPackage(Str2PChar(copy(s, 3, length(s)-6)+'.hwp')); physfsReaderSetBuffer(@buf); -if Pos('Locale/',s) <> 0 then +if (Pos('Locale/',s) <> 0) or (s = 'Scripts/OfficialChallengeHashes.lua') then ret:= lua_load(luaState, @ScriptLocaleReader, f, Str2PChar(s)) else begin @@ -3599,13 +3667,15 @@ begin LuaError('Failed to load ' + name + '(error ' + IntToStr(ret) + ')'); LuaError(lua_tostring(luaState, -1)); + ScriptLoad:= false; end else begin WriteLnToConsole('Lua: ' + name + ' loaded'); // call the script file lua_pcall(luaState, 0, 0, 0); - ScriptLoaded:= true + ScriptLoaded:= true; + ScriptLoad:= true; end; end; @@ -3638,31 +3708,57 @@ PrevCursorY:= NoPointX end; -if not mapDims then - begin - mapDims:= true; - ScriptSetInteger('LAND_WIDTH', LAND_WIDTH); - ScriptSetInteger('LAND_HEIGHT', LAND_HEIGHT); - ScriptSetInteger('LeftX', leftX); - ScriptSetInteger('RightX', rightX); - ScriptSetInteger('TopY', topY) - end; if (CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil) then ScriptSetInteger('CurrentHedgehog', CurrentHedgehog^.Gear^.UID) else ScriptSetNil('CurrentHedgehog'); end; +procedure ScriptSetMapGlobals; +begin +ScriptSetInteger('LAND_WIDTH', LAND_WIDTH); +ScriptSetInteger('LAND_HEIGHT', LAND_HEIGHT); +ScriptSetInteger('LeftX', leftX); +ScriptSetInteger('RightX', rightX); +ScriptSetInteger('TopY', topY); +end; + procedure GetGlobals; +var currentTTL, currentRTL, newTTL, newRTL: LongInt; begin -// TODO -// Use setters instead, because globals should be read-only! -// Otherwise globals might be changed by Lua, but then unexpectatly overwritten by engine when a ScriptCall is triggered by whatever Lua is doing! -// Sure, one could work around that in engine (e.g. by setting writable globals in SetGlobals only when their engine-side value has actually changed since SetGlobals was called the last time...), but things just get messier and messier then. -// It is inconsistent anyway to have some globals be read-only and others not with no indication whatsoever. -// -- sheepluva -TurnTimeLeft:= ScriptGetInteger('TurnTimeLeft'); -ReadyTimeLeft:= ScriptGetInteger('ReadyTimeLeft'); +// Setting TurnTimeLeft and ReadyTimeLeft should now be done in the setter functions. +// SetTurnTimeLeft and SetReadTimeLeft. +// GetGloals should be removed in a future release. + +// DEPRECATED: Read TurnTimeLeft and ReadyTimeLeft from script directly. +// TODO: Remove this behaviour in a future version. +currentTTL:= TurnTimeLeft; +currentRTL:= ReadyTimeLeft; +newTTL:= ScriptGetInteger('TurnTimeLeft'); +newRTL:= ScriptGetInteger('ReadyTimeLeft'); +if (currentTTL <> newTTL) and (not isPendingTurnTimeLeft) then + begin + TurnTimeLeft:= newTTL; + LuaWarning('Writing to TurnTimeLeft directly is deprecated! Use SetTurnTimeLeft instead!'); + end; + +if (currentRTL <> newRTL) and (not isPendingReadyTimeLeft) then + begin + ReadyTimeLeft:= newRTL; + LuaWarning('Writing to ReadyTimeLeft directly is deprecated! Use SetReadyTimeLeft instead!'); + end; + +// Set TurnTimeLeft and ReadyTimeLeft if activated by SetTurnTimeLeft and SetReadyTimeLeft before +if isPendingTurnTimeLeft then + begin + TurnTimeLeft:= PendingTurnTimeLeft; + isPendingTurnTimeLeft:= false; + end; +if isPendingReadyTimeLeft then + begin + ReadyTimeLeft:= PendingReadyTimeLeft; + isPendingReadyTimeLeft:= false; + end; end; procedure ScriptCall(fname : shortstring); @@ -3926,9 +4022,9 @@ ScriptSetInteger('AMMO_INFINITE', AMMO_INFINITE); ScriptSetInteger('JETPACK_FUEL_INFINITE', JETPACK_FUEL_INFINITE); ScriptSetInteger('BIRDY_ENERGY_INFINITE', BIRDY_ENERGY_INFINITE); -ScriptSetInteger('NoPointX', NoPointX); -ScriptSetInteger('cMaxHogHealth', cMaxHogHealth); -ScriptSetInteger('cMaxTurnTime', cMaxTurnTime); +ScriptSetInteger('NO_CURSOR', NoPointX); +ScriptSetInteger('MAX_HOG_HEALTH', cMaxHogHealth); +ScriptSetInteger('MAX_TURN_TIME', cMaxTurnTime); // register gear types for at:= Low(TGearType) to High(TGearType) do @@ -4162,6 +4258,8 @@ lua_register(luaState, _P'SetLaserSight', @lc_setlasersight); lua_register(luaState, _P'GetLaserSight', @lc_getlasersight); lua_register(luaState, _P'Explode', @lc_explode); +lua_register(luaState, _P'SetTurnTimeLeft', @lc_setturntimeleft); +lua_register(luaState, _P'SetReadyTimeLeft', @lc_setreadytimeleft); // drawn map functions lua_register(luaState, _P'AddPoint', @lc_addPoint); lua_register(luaState, _P'FlushPoints', @lc_flushPoints); @@ -4283,10 +4381,11 @@ procedure initModule; begin -mapDims:= false; PointsBuffer:= ''; PrevCursorX:= NoPointX; PrevCursorY:= NoPointX; +isPendingTurnTimeLeft:= false; +isPendingReadyTimeLeft:= false; end; procedure freeModule; diff -r 54725a1d1db8 -r 1f15b0ee8e34 hedgewars/uStats.pas --- a/hedgewars/uStats.pas Mon Sep 24 11:16:08 2018 -0400 +++ b/hedgewars/uStats.pas Mon Sep 24 11:18:48 2018 -0400 @@ -29,6 +29,7 @@ SendRankingStatsOn : boolean = true; SendAchievementsStatsOn : boolean = true; SendHealthStatsOn : boolean = true; + ClanDeathLog : PClanDeathLogEntry; procedure initModule; procedure freeModule; @@ -39,7 +40,9 @@ procedure HedgehogDamaged(Gear: PGear; Attacker: PHedgehog; Damage: Longword; killed: boolean); procedure TargetHit; procedure Skipped; +procedure TurnStats; procedure TurnReaction; +procedure TurnStatsReset; procedure SendStats; procedure hedgehogFlight(Gear: PGear; time: Longword); procedure declareAchievement(id, teamname, location: shortstring; value: LongInt); @@ -135,14 +138,70 @@ isTurnSkipped:= true end; -procedure TurnReaction; +procedure TurnStats; var i, t: LongInt; - killsCheck: LongInt; + c: Longword; + newEntry: PClanDeathLogEntry; +begin +inc(FinishedTurnsTotal); + +for t:= 0 to Pred(TeamsCount) do // send even on zero turn + with TeamsArray[t]^ do + for i:= 0 to cMaxHHIndex do + with Hedgehogs[i].stats do + begin + inc(DamageRecv, StepDamageRecv); + inc(DamageGiven, StepDamageGiven); + if StepDamageRecv > MaxStepDamageRecv then + MaxStepDamageRecv:= StepDamageRecv; + if StepDamageGiven > MaxStepDamageGiven then + MaxStepDamageGiven:= StepDamageGiven; + if StepKills > MaxStepKills then + MaxStepKills:= StepKills; + end; + +// Write into the death log which clans died in this turn, +// important for final rankings. +c:= 0; +newEntry:= nil; +for t:= 0 to Pred(ClansCount) do + with ClansArray[t]^ do + begin + if (ClanHealth = 0) and (ClansArray[t]^.DeathLogged = false) then + begin + if c = 0 then + begin + new(newEntry); + newEntry^.Turn := FinishedTurnsTotal; + newEntry^.NextEntry := nil; + end; + + newEntry^.KilledClans[c]:= ClansArray[t]; + inc(c); + newEntry^.KilledClansCount := c; + ClansArray[t]^.DeathLogged:= true; + end; + + if SendHealthStatsOn then + SendStat(siClanHealth, IntToStr(Color) + ' ' + IntToStr(ClanHealth)); + end; +if newEntry <> nil then + begin + if ClanDeathLog <> nil then + begin + newEntry^.NextEntry:= ClanDeathLog; + end; + ClanDeathLog:= newEntry; + end; + +end; + +procedure TurnReaction; +var killsCheck: LongInt; s: ansistring; begin //TryDo(not bBetweenTurns, 'Engine bug: TurnReaction between turns', true); -inc(FinishedTurnsTotal); if FinishedTurnsTotal <> 0 then begin s:= ansistring(CurrentHedgehog^.Name); @@ -209,21 +268,16 @@ AddCaption(FormatA(GetEventString(eidTurnSkipped), s), capcolDefault, capgrpMessage); end end; +end; - +procedure TurnStatsReset; +var t, i: LongInt; +begin for t:= 0 to Pred(TeamsCount) do // send even on zero turn with TeamsArray[t]^ do for i:= 0 to cMaxHHIndex do with Hedgehogs[i].stats do begin - inc(DamageRecv, StepDamageRecv); - inc(DamageGiven, StepDamageGiven); - if StepDamageRecv > MaxStepDamageRecv then - MaxStepDamageRecv:= StepDamageRecv; - if StepDamageGiven > MaxStepDamageGiven then - MaxStepDamageGiven:= StepDamageGiven; - if StepKills > MaxStepKills then - MaxStepKills:= StepKills; StepKills:= 0; StepDamageRecv:= 0; StepDamageGiven:= 0; @@ -231,13 +285,6 @@ StepDied:= false; end; -if SendHealthStatsOn then - for t:= 0 to Pred(ClansCount) do - with ClansArray[t]^ do - begin - SendStat(siClanHealth, IntToStr(Color) + ' ' + IntToStr(ClanHealth)); - end; - Kills:= 0; KillsClan:= 0; DamageClan:= 0; @@ -247,7 +294,7 @@ PoisonTurn:= 0; AmmoUsedCount:= 0; AmmoDamagingUsed:= false; -isTurnSkipped:= false +isTurnSkipped:= false; end; procedure AmmoUsed(am: TAmmoType); @@ -268,7 +315,7 @@ end; procedure SendStats; -var i, t: LongInt; +var i, t, c: LongInt; msd, msk: Longword; msdhh, mskhh: PHedgehog; mskcnt: Longword; maxTeamKills : Longword; @@ -278,6 +325,8 @@ maxTeamDamage : Longword; maxTeamDamageName : shortstring; winnersClan : PClan; + deathEntry : PClanDeathLogEntry; + currentRank: Longword; begin if SendHealthStatsOn then msd:= 0; msdhh:= nil; @@ -287,6 +336,7 @@ maxTurnSkips := 0; maxTeamDamage := 0; winnersClan:= nil; + currentRank:= 0; for t:= 0 to Pred(TeamsCount) do with TeamsArray[t]^ do @@ -311,13 +361,18 @@ end; end; - { send player stats for winner teams } + { Send player stats for winner clans/teams. + The clan that survived is ranked 1st. } if Clan^.ClanHealth > 0 then begin winnersClan:= Clan; if SendRankingStatsOn then + begin + currentRank:= 1; + SendStat(siTeamRank, '1'); SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' + IntToStr(stats.Kills) + ' ' + TeamName); + end; end; { determine maximum values of TeamKills, TurnSkips, TeamDamage } @@ -339,19 +394,41 @@ end; - { now send player stats for loser teams } + inc(currentRank); + + { Now send player stats for loser teams/clans. + The losing clans are ranked in the reverse order they died. + The clan that died last is ranked 2nd, + the clan that died second to last is ranked 3rd, + and so on. + Clans that died in the same turn share their rank. + If a clan died multiple times in the match + (e.g. due to resurrection), only the *latest* death of + that clan counts (handled in gtResurrector). + } + deathEntry := ClanDeathLog; + i:= 0; if SendRankingStatsOn then - for t:= 0 to Pred(TeamsCount) do + while (deathEntry <> nil) do begin - with TeamsArray[t]^ do - begin - if Clan^.ClanHealth = 0 then + for c:= 0 to Pred(deathEntry^.KilledClansCount) do + if ((deathEntry^.KilledClans[c]^.ClanHealth) = 0) and (not deathEntry^.KilledClans[c]^.StatsHandled) then begin - SendStat(siPlayerKills, IntToStr(Clan^.Color) + ' ' + - IntToStr(stats.Kills) + ' ' + TeamName); - end; + for t:= 0 to Pred(TeamsCount) do + if TeamsArray[t]^.Clan^.ClanIndex = deathEntry^.KilledClans[c]^.ClanIndex then + begin + SendStat(siTeamRank, IntToStr(currentRank)); + SendStat(siPlayerKills, IntToStr(deathEntry^.killedClans[c]^.Color) + ' ' + + IntToStr(TeamsArray[t]^.stats.Kills) + ' ' + TeamsArray[t]^.TeamName); + end; + deathEntry^.KilledClans[c]^.StatsHandled:= true; + inc(i); + end; + if i > 0 then + inc(currentRank, i); + i:= 0; + deathEntry:= deathEntry^.NextEntry; end; - end; // “Achievements” / Details part of stats screen if SendAchievementsStatsOn then @@ -428,6 +505,7 @@ TotalRoundsPre:= -1; TotalRoundsReal:= -1; FinishedTurnsTotal:= -1; + ClanDeathLog:= nil; end; procedure freeModule; diff -r 54725a1d1db8 -r 1f15b0ee8e34 hedgewars/uTeams.pas --- a/hedgewars/uTeams.pas Mon Sep 24 11:16:08 2018 -0400 +++ b/hedgewars/uTeams.pas Mon Sep 24 11:18:48 2018 -0400 @@ -58,6 +58,7 @@ s, cap: ansistring; ts: array[0..(cMaxTeams - 1)] of ansistring; t, AliveCount, i, j: LongInt; + allWin: boolean; begin CheckForWin:= false; AliveCount:= 0; @@ -75,9 +76,15 @@ TurnTimeLeft:= 0; ReadyTimeLeft:= 0; -// if the game ends during a multishot, do last TurnReaction -if (not bBetweenTurns) and isInMultiShoot then - TurnReaction(); +// If the game ends during a multishot, or after the Sudden Death +// water has risen, do last turn stats / reaction. +if ((not bBetweenTurns) and isInMultiShoot) or (bDuringWaterRise) then + begin + TurnStats(); + if (not bDuringWaterRise) then + TurnReaction(); + TurnStatsReset(); + end; if not TeamsGameOver then begin @@ -86,10 +93,15 @@ AddCaption(GetEventString(eidRoundDraw), capcolDefault, capgrpGameState); if SendGameResultOn then SendStat(siGameResult, shortstring(trmsg[sidDraw])); + if PreviousTeam <> nil then + AddVoice(sndNutter, PreviousTeam^.voicepack) + else + AddVoice(sndNutter, TeamsArray[0]^.voicepack); AddGear(0, 0, gtATFinishGame, 0, _0, _0, 3000); end else // win begin + allWin:= false; with AliveClan^ do begin if TeamsNumber = 1 then // single team wins @@ -110,8 +122,11 @@ // Write victory message for caption and stats page if (TeamsNumber = cMaxTeams) or (TeamsCount = TeamsNumber) then + begin // No enemies for some reason … Everyone wins!!1! - s:= trmsg[sidWinnerAll] + s:= trmsg[sidWinnerAll]; + allWin:= true; + end else if (TeamsNumber >= 2) and (TeamsNumber < cMaxTeams) then // List all winning teams in a list s:= FormatA(trmsg[TMsgStrId(Ord(sidWinner2) + (TeamsNumber - 2))], ts); @@ -136,6 +151,8 @@ if SendGameResultOn then SendStat(siGameResult, shortstring(s)); + if allWin and SendAchievementsStatsOn then + SendStat(siEverAfter, ''); AddGear(0, 0, gtATFinishGame, 0, _0, _0, 3000) end; SendStats; @@ -305,7 +322,9 @@ begin for i:= 0 to ClansCount do if ClansArray[i] <> nil then + begin ClansArray[i]^.TurnNumber:= 0; + end; ResetWeapons end; @@ -468,7 +487,9 @@ ClanIndex:= Pred(ClansCount); Color:= TeamColor; TagTeamIndex:= 0; - Flawless:= true + Flawless:= true; + DeathLogged:= false; + StatsHandled:= false; end end else diff -r 54725a1d1db8 -r 1f15b0ee8e34 hedgewars/uTypes.pas --- a/hedgewars/uTypes.pas Mon Sep 24 11:16:08 2018 -0400 +++ b/hedgewars/uTypes.pas Mon Sep 24 11:18:48 2018 -0400 @@ -176,7 +176,7 @@ TStatInfoType = (siGameResult, siMaxStepDamage, siMaxStepKills, siKilledHHs, siClanHealth, siTeamStats, siPlayerKills, siMaxTeamDamage, siMaxTeamKills, siMaxTurnSkips, siCustomAchievement, siGraphTitle, - siPointType); + siPointType, siTeamRank, siEverAfter); // Various 'emote' animations a hedgehog can do TWave = (waveRollup, waveSad, waveWave, waveHurrah, waveLemonade, waveShrug, waveJuggle); @@ -350,6 +350,16 @@ TeamDamage : Longword; end; + PClanDeathLogEntry = ^TClanDeathLogEntry; + + TClanDeathLogEntry = record + Turn : Longword; // turn in which the clans were killed + KilledClans : array[0..Pred(cMaxTeams)] of PClan; // array of clans that have died + KilledClansCount: Longword; // number of clans that died + NextEntry : PClanDeathLogEntry; // linked list + end; + + TBinds = record indices: array[0..cKbdMaxIndex] of byte; // zeroth element is reserved, indices[i] == 0 means no binding @@ -443,6 +453,8 @@ ClanHealth: LongInt; ClanIndex: LongInt; TurnNumber: LongWord; + DeathLogged: boolean; // true if clan is dead and its latest death has been logged in the clan death log + StatsHandled : boolean; // true if clan's rank has been handled for stats screen Flawless: boolean; end; @@ -481,7 +493,7 @@ sidWinner2, sidWinner3, sidWinner4, sidWinner5, sidWinner6, sidWinner7, sidWinnerAll, sidTeamGone, sidTeamBack, sidAutoSkip, sidFPS, sidLuaParsingOff, sidLuaParsingOn, sidLuaParsingDenied, - sidAmmoCount, sidChat, sidChatTeam, sidChatHog); + sidAmmoCount, sidChat, sidChatTeam, sidChatHog, sidEverAfter); TCmdHelpStrId = ( sidCmdHeaderBasic, sidCmdTogglechat, sidCmdTeam, sidCmdMe, diff -r 54725a1d1db8 -r 1f15b0ee8e34 hedgewars/uVariables.pas --- a/hedgewars/uVariables.pas Mon Sep 24 11:16:08 2018 -0400 +++ b/hedgewars/uVariables.pas Mon Sep 24 11:18:48 2018 -0400 @@ -177,6 +177,7 @@ bBetweenTurns : boolean; bWaterRising : boolean; + bDuringWaterRise: boolean; CrosshairX : LongInt; CrosshairY : LongInt; @@ -2856,6 +2857,7 @@ flagDumpLand := false; bBetweenTurns := false; bWaterRising := false; + bDuringWaterRise:= false; isCursorVisible := false; isInLag := false; isPaused := false; diff -r 54725a1d1db8 -r 1f15b0ee8e34 hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Mon Sep 24 11:16:08 2018 -0400 +++ b/hedgewars/uWorld.pas Mon Sep 24 11:18:48 2018 -0400 @@ -1630,11 +1630,11 @@ // various captions if fastUntilLag then - DrawTextureCentered(0, (cScreenHeight shr 1), SyncTexture); -if isPaused then + DrawTextureCentered(0, (cScreenHeight shr 1), SyncTexture) +else if isAFK then + DrawTextureCentered(0, (cScreenHeight shr 1), AFKTexture) +else if isPaused then DrawTextureCentered(0, (cScreenHeight shr 1), PauseTexture); -if isAFK then - DrawTextureCentered(0, (cScreenHeight shr 1), AFKTexture); if not isFirstFrame and (missionTimer <> 0) or isShowMission or isPaused or fastUntilLag or (GameState = gsConfirm) then begin if (ReadyTimeLeft = 0) and (missionTimer > 0) then @@ -2005,6 +2005,8 @@ ammoStr: ansistring; tmpsurf: PSDL_Surface; begin + if cOnlyStats then exit; + ammoStrId := Ammoz[ammoType].NameId; trluaammo[ammoStrId] := name; @@ -2014,7 +2016,7 @@ ammoStr:= trammo[ammoStrId]; if checkFails(length(ammoStr) > 0,'No default text/translation found for ammo type #' + intToStr(ord(ammoType)) + '!',true) then exit; - + tmpsurf:= TTF_RenderUTF8_Blended(Fontz[CheckCJKFont(ammoStr,fnt16)].Handle, PChar(ammoStr), cWhiteColorChannels); if checkFails(tmpsurf <> nil,'Name-texture creation for ammo type #' + intToStr(ord(ammoType)) + ' failed!',true) then exit; tmpsurf:= doSurfaceConversion(tmpsurf); diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/cs.lua --- a/share/hedgewars/Data/Locale/cs.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/cs.lua Mon Sep 24 11:18:48 2018 -0400 @@ -11,8 +11,8 @@ -- ["%.1fs"] = "", -- Racer, TechRacer -- ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer -- ["+1 mine!"] = "", -- Tumbler +-- ["+1 point"] = "", -- Mutant -- ["-1 point"] = "", -- Mutant --- ["+1 point"] = "", -- Mutant -- ["-1 to anyone for a suicide"] = "", -- Mutant -- ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant -- ["+1 to the Mutant for killing anyone"] = "", -- Mutant @@ -713,8 +713,8 @@ -- ["Gear information hidden"] = "", -- HedgeEditor -- ["Gear information shown"] = "", -- HedgeEditor -- ["Gear Placement Tool"] = "", -- HedgeEditor +-- ["General information"] = "", -- Continental_supplies -- ["General information:"] = "", -- Continental_supplies --- ["General information"] = "", -- Continental_supplies -- ["General Lemon"] = "", -- A_Space_Adventure:fruit01 -- ["Generator"] = "", -- Construction_Mode -- ["Generator: Generates energy."] = "", -- Construction_Mode @@ -1054,8 +1054,8 @@ -- ["If you can get that crate fast enough, your beloved \"princess\" may go free."] = "", -- A_Classic_Fairytale:journey -- ["If you decide to help us, though, we will no longer need to find a new governor for the island."] = "", -- A_Classic_Fairytale:shadow -- ["If you don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement +-- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey --- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02 -- ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02 -- ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02 @@ -1569,8 +1569,8 @@ -- ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood -- ["Oneye"] = "", -- portal -- ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02 +-- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant --- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer -- ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard -- ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01 @@ -1653,8 +1653,8 @@ -- ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge +-- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge --- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos -- ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos -- ["Play with me!"] = "", -- A_Classic_Fairytale:shadow @@ -1847,8 +1847,8 @@ -- ["Score points by killing other hedgehogs."] = "", -- Mutant -- ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant -- ["Scores: "] = "", -- Capture_the_Flag +-- ["Scores"] = "", -- Mutant -- ["Scores:"] = "", -- Mutant --- ["Scores"] = "", -- Mutant -- ["Scoring: "] = "", -- Mutant -- ["Script parameter examples:"] = "", -- Gravity -- ["%s (+%d)"] = "", -- Battalion @@ -2169,6 +2169,7 @@ -- ["Team Identity Mode"] = "", -- HedgeEditor -- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor -- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove +-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion -- ["Team Scores:"] = "", -- Control -- ["Team scores:"] = "", -- Space_Invasion -- ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2 @@ -2331,6 +2332,8 @@ -- ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood -- ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope -- ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen +-- ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion +-- ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion -- ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02 -- ["The Torment"] = "", -- A_Classic_Fairytale:first_blood -- ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02 @@ -2401,6 +2404,7 @@ -- ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade -- ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade -- ["Thug #%d"] = "", -- A_Space_Adventure:death01 +-- ["Tie-breaking round %d"] = "", -- Space_Invasion -- ["Timbers"] = "", -- -- ["Time: %.1fs"] = "", -- Racer, TechRacer -- ["Time: %.3fs by %s"] = "", -- TrophyRace diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/da.lua --- a/share/hedgewars/Data/Locale/da.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/da.lua Mon Sep 24 11:18:48 2018 -0400 @@ -11,8 +11,8 @@ -- ["%.1fs"] = "", -- Racer, TechRacer -- ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer -- ["+1 mine!"] = "", -- Tumbler +-- ["+1 point"] = "", -- Mutant -- ["-1 point"] = "", -- Mutant --- ["+1 point"] = "", -- Mutant -- ["-1 to anyone for a suicide"] = "", -- Mutant -- ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant -- ["+1 to the Mutant for killing anyone"] = "", -- Mutant @@ -713,8 +713,8 @@ -- ["Gear information hidden"] = "", -- HedgeEditor -- ["Gear information shown"] = "", -- HedgeEditor -- ["Gear Placement Tool"] = "", -- HedgeEditor +-- ["General information"] = "", -- Continental_supplies -- ["General information:"] = "", -- Continental_supplies --- ["General information"] = "", -- Continental_supplies -- ["General Lemon"] = "", -- A_Space_Adventure:fruit01 -- ["Generator"] = "", -- Construction_Mode -- ["Generator: Generates energy."] = "", -- Construction_Mode @@ -1054,8 +1054,8 @@ -- ["If you can get that crate fast enough, your beloved \"princess\" may go free."] = "", -- A_Classic_Fairytale:journey -- ["If you decide to help us, though, we will no longer need to find a new governor for the island."] = "", -- A_Classic_Fairytale:shadow -- ["If you don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement +-- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey --- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02 -- ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02 -- ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02 @@ -1569,8 +1569,8 @@ -- ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood -- ["Oneye"] = "", -- portal -- ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02 +-- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant --- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer -- ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard -- ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01 @@ -1653,8 +1653,8 @@ -- ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge +-- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge --- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos -- ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos -- ["Play with me!"] = "", -- A_Classic_Fairytale:shadow @@ -1847,8 +1847,8 @@ -- ["Score points by killing other hedgehogs."] = "", -- Mutant -- ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant -- ["Scores: "] = "", -- Capture_the_Flag +-- ["Scores"] = "", -- Mutant -- ["Scores:"] = "", -- Mutant --- ["Scores"] = "", -- Mutant -- ["Scoring: "] = "", -- Mutant -- ["Script parameter examples:"] = "", -- Gravity -- ["%s (+%d)"] = "", -- Battalion @@ -2169,6 +2169,7 @@ -- ["Team Identity Mode"] = "", -- HedgeEditor -- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor -- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove +-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion -- ["Team Scores:"] = "", -- Control -- ["Team scores:"] = "", -- Space_Invasion -- ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2 @@ -2331,6 +2332,8 @@ -- ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood -- ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope -- ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen +-- ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion +-- ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion -- ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02 -- ["The Torment"] = "", -- A_Classic_Fairytale:first_blood -- ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02 @@ -2401,6 +2404,7 @@ -- ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade -- ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade -- ["Thug #%d"] = "", -- A_Space_Adventure:death01 +-- ["Tie-breaking round %d"] = "", -- Space_Invasion -- ["Timbers"] = "", -- -- ["Time: %.1fs"] = "", -- Racer, TechRacer -- ["Time: %.3fs by %s"] = "", -- TrophyRace diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/de.lua --- a/share/hedgewars/Data/Locale/de.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/de.lua Mon Sep 24 11:18:48 2018 -0400 @@ -11,8 +11,8 @@ ["1 - Normal Girder"]="1 – Normaler Bauträger", ["1 - Normal Land"]="1 – Normales Gelände", ["1 - Normal Rubber"]="1 – Normales Gummi", +["+1 point"] = "+1 Punkt", -- Mutant ["-1 point"] = "-1 Punkt", -- Mutant -["+1 point"] = "+1 Punkt", -- Mutant ["-1 to anyone for a suicide"]="-1 für Selbstmord", ["+1 to the Bottom Feeder for killing anyone"] = "+1 für den Versager für jeden Abschuss", -- Mutant ["+1 to the Mutant for killing anyone"] = "+1 für den Mutanten für jeden Abschuss", -- Mutant @@ -121,8 +121,8 @@ ["Anton"] = "Anton", -- ["An unexpected event!"]="Ein unerwartetes Ereignis!", ["Anyway, the aliens accept me for who I am."] = "Jedenfalls akzeptieren die Außerirdischen mich für den, der ich bin!", -- A_Classic_Fairytale:queen +["A random hedgehog will inherit the weapons of his deceased team-mates"]="Ein zufälliger Igel wird die Waffen seiner verstorbenen Teamkollegen erben", -- A_Space_Adventure:death02 ["A random hedgehog will inherit the weapons of his deceased team-mates."]="Ein zufälliger Igel wird die Waffen seiner verstorbenen Teamkollegen erben.", -- A_Space_Adventure:death02 -["A random hedgehog will inherit the weapons of his deceased team-mates"]="Ein zufälliger Igel wird die Waffen seiner verstorbenen Teamkollegen erben", -- A_Space_Adventure:death02 ["Arashi"] = "Arashi", -- ["Areas surrounded by a green dashed outline are portal-proof and repel portals."] = "Land, das mit einer grünen gestrichtelten Linie umrandet ist, ist portalabweisend.", -- A_Space_Adventure:final ["Areas surrounded by a security border are indestructible."] = "Land, das eine Sicherheitsumrandung hat, ist unzerstörbar.", -- A_Space_Adventure:final @@ -163,8 +163,8 @@ ["Attack: Throw ball"] = "Angriff: Ball werfen", -- Knockball ["At the end of the game your health was "]="Am Ende des Spiels war deine Gesundheit ", ["At the end of the game your health was %d."] = "Am Ende des Spiels hattest du %d Gesundheit.", -- A_Space_Adventure:ice01 +["At the start of the game each enemy hog has only the weapon that he is named after"]="Am Anfang des Spiels hat jeder feindliche Igel nur die Waffe, nach der er benannt wurde", -- A_Space_Adventure:death02 ["At the start of the game each enemy hog has only the weapon that he is named after."]="Am Anfang des Spiels hat jeder feindliche Igel nur die Waffe, nach der er benannt wurde.", -- A_Space_Adventure:death02 -["At the start of the game each enemy hog has only the weapon that he is named after"]="Am Anfang des Spiels hat jeder feindliche Igel nur die Waffe, nach der er benannt wurde", -- A_Space_Adventure:death02 ["Australia"]="Australien", ["Available weapon specials:"] = "Verfügbare Waffenextras:", -- Continental_supplies ["Average pilot"]="Durchschnittlicher Pilot", @@ -586,11 +586,11 @@ ["DUD MINE PLACEMENT MODE"] = "BLINDGÄNGERMINENPLATZIERUNGSMODUS", -- HedgeEditor ["During the final testing of the device an accident happened"]="Bei den letzten Tests des Gerätes ist ein Unfall passiert.", ["During the final testing of the device an accident happened."] = "Bei den letzten Tests des Geräts ist ein Unfall passiert.", -- A_Space_Adventure:moon02 +["During the game you can get new RC planes by collecting the weapon crates"]="Während des Spiels kannst du neue Funkflugzeuge erhalten, indem du die Waffenkisten sammelst", ["During the game you can get new RC planes by collecting the weapon crates."]="Während des Spiels kannst du neue Funkflugzeuge erhalten, indem du die Waffenkisten sammelst.", -["During the game you can get new RC planes by collecting the weapon crates"]="Während des Spiels kannst du neue Funkflugzeuge erhalten, indem du die Waffenkisten sammelst", ["Dust Storm"] = "Staubsturm", -- Continental_supplies +["Each time you destroy all the targets on your current level you'll get teleported to the next level"]="Jedes Mal, wenn du alle Zielscheiben im aktuellen Level zerstörst, wirst du zum nächsten Level teleportiert", ["Each time you destroy all the targets on your current level you'll get teleported to the next level."]="Jedes Mal, wenn du alle Zielscheiben im aktuellen Level zerstörst, wirst du zum nächsten Level teleportiert.", -["Each time you destroy all the targets on your current level you'll get teleported to the next level"]="Jedes Mal, wenn du alle Zielscheiben im aktuellen Level zerstörst, wirst du zum nächsten Level teleportiert", ["Each time you play this missions enemy hogs will play in a random order"]="Jedes Mal, wenn du diese Mission spielst, werden die feindlichen Igel in einer zufälligen Reihenfolge spielen", -- A_Space_Adventure:death02 ["Each turn is only ONE SECOND!"]="Jeder Zug dauert nur EINE SEKUNDE!", ["Each turn you get 1-3 random weapons"]="Du bekommst jede Runde 1-3 zufällig gewählte Waffen", @@ -627,8 +627,8 @@ ["Epilogue"] = "Epilog", -- A_Classic_Fairytale:epil ["Eugene"] = "Eugen", -- ["Europe"]="Europa", +["Every 2 rings, the ring color will be green and you'll get an extra flying saucer"]="Alle 2 Ringe wird der Ring grün und du erhältst eine neue fliegende Untertasse", ["Every 2 rings, the ring color will be green and you'll get an extra flying saucer."]="Alle 2 Ringe wird der Ring grün und du erhältst eine neue fliegende Untertasse.", -["Every 2 rings, the ring color will be green and you'll get an extra flying saucer"]="Alle 2 Ringe wird der Ring grün und du erhältst eine neue fliegende Untertasse", ["Every 2 rings you'll get extra flying saucers"]="Alle 2 Ringe erhältst du neue fliegende Untertassen", ["Every 2 rings you'll get extra flying saucers."] = "Alle 2 Ringe erhältst du neue fliegende Untertassen.", -- A_Space_Adventure:ice02 ["Everyone knows this."]="Das weiß jeder.", @@ -1961,8 +1961,8 @@ ["So I shook my fist in the air!"] = "Und so schlug ich die Faust gen Himmel!", -- A_Classic_Fairytale:epil ["Soldier"]="Soldat", ["So, let me tell you what I know about Professor Hogevil."]="Also, lass mich erzählen, was ich über Professor Bösigel weiß.", +["Some parts of the land are indestructible"]="Einige Teile des Landes sind unzerstörbar", ["Some parts of the land are indestructible."]="Einige Teile des Landes sind unzerstörbar.", -["Some parts of the land are indestructible"]="Einige Teile des Landes sind unzerstörbar", ["Some sick game of yours?!"] = "Ein krankes Spiel von euch?!", -- A_Classic_Fairytale:queen ["Some weapons can be dropped from the rope."] = "Einige Waffen können vom Seil aus fallen gelassen werden.", -- Basic_Training_-_Rope ["Somewhere else on the planet of fruits, Captain Lime helps Hog Solo"]="Irgendwo anders auf dem Obstplaneten hilft Leutnant Limone Igel Einsam", @@ -2150,6 +2150,7 @@ ["Team Identity Mode"]="Team-Identitätsmodus", ["TEAM IDENTITY MODE"]="TEAMIDENTITÄTSMODUS", ["Team of Hearts"]="Team der Herzen", +["Teams are tied! Continue playing rounds until we have a winner!"] = "Gleichstand! Spielt weiter Runden, bis wir einen Sieger haben!", -- Space_Invasion ["Team’s best heights per round"]="Die Besthöhen der Teams pro Runde", ["Teamwork 2"] = "Teamwork 2", -- User_Mission_-_Teamwork_2 ["Teamwork"] = "Teamwork", -- User_Mission_-_Teamwork @@ -2233,8 +2234,8 @@ ["The First Encounter"]="Das erste Zusammentreffen", ["The first hedgehog to kill someone becomes the Mutant."] = "Der erste Igel, der einen anderen tötet, mutiert.", -- Mutant ["The first stop"]="Der erste Halt", +["The first turn will last 25 sec and every other turn 15 sec"]="Der 1. Zug wird 25 Sek., jeder andere Zug 15 Sek. dauern", ["The first turn will last 25 sec and every other turn 15 sec."]="Der 1. Zug wird 25 Sek., jeder andere Zug 15 Sek. dauern.", -["The first turn will last 25 sec and every other turn 15 sec"]="Der 1. Zug wird 25 Sek., jeder andere Zug 15 Sek. dauern", ["The flag will respawn next round."]="Die Flagge wird nächste Runde wieder auftauchen.", ["The flood has stopped! Challenge over."] = "Die Flut ist vorbei! Herausforderung beendet.", -- User_Mission_-_That_Sinking_Feeling ["The food bites back"]="Das Essen beißt zurück", @@ -2308,6 +2309,8 @@ ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "Die Geister der Ahnen sind sicherlich erfreut, Undichte Stelle.", -- A_Classic_Fairytale:first_blood ["The targets will guide you through the training."] = "Die Zielscheiben führen dich durch die Übung.", -- Basic_Training_-_Rope ["The team continued their quest of finding the rest of the tribe."] = "Das Team setzte die Suche nach dem Rest ihres Stammes fort.", -- A_Classic_Fairytale:queen +["The teams were tied, so an additional round has been played to determine the winner."] = "Die Teams hatten Gleichstand, also wurde eine weitere Runde gespielt, um den Sieger zu bestimmen.", -- Space_Invasion +["The teams were tied, so %d additional rounds have been played to determine the winner."] = "Die Teams hatten Gleichstand, also wurden %d weitere Runden gespielt, um den Sieger zu bestimmen.", -- Space_Invasion ["The time that you have left when you reach the blue hedgehog will be added to the next turn."]="Deine verbleibende Zeit wird zu deinem nächsten Zug addiert, sobald du den blauen Igel erreichst.", ["The Torment"]="Die Qual", ["The truth about Professor Hogevil"]="Die Wahrheit über Professor Bösigel", @@ -2375,6 +2378,7 @@ ["Throw a grenade to destroy the target!"] = "Wirf eine Granate, um die Zielscheibe zu zerstören!", -- Basic_Training_-_Grenade ["Thug #%d"] = "Rowdy %d", -- A_Space_Adventure:death01 ["thug"]="Rowdy", +["Tie-breaking round %d"] = "%d. Stichrunde", -- Space_Invasion ["Timbers"] = "Holz", -- ["Time: %.1fs"] = "Zeit: %.1fs", -- Racer, TechRacer ["Time: %.3fs by %s"] = "Zeit: %.3fs von %s", -- TrophyRace @@ -2425,8 +2429,8 @@ ["To win the game you have to find the right crate."]="Um das Spiel zu gewinnen, musst du die richtige Kiste finden.", ["To win the game you have to go next to Thanta."]="Um das Spiel zu gewinnen, musst du neben Thanta stehen.", ["To win the game you have to go to the surface."]="Um das Spiel zu gewinnen, musst du an die Oberfläche gelangen.", +["To win the game you have to pass into the rings in time"]="Um das Spiel zu gewinnen, musst du rechtzeitig durch die Ringe fliegen", ["To win the game you have to pass into the rings in time."]="Um das Spiel zu gewinnen, musst du rechtzeitig durch die Ringe fliegen.", -["To win the game you have to pass into the rings in time"]="Um das Spiel zu gewinnen, musst du rechtzeitig durch die Ringe fliegen", ["To win the game you have to stand next to Thanta."] = "Um das Spiel zu gewinnen, musst du neben Thanta stehen.", -- A_Space_Adventure:ice01 ["Toxic Team"]="Giftige Gegner", ["Track completed!"] = "Strecke durchlaufen!", -- Racer, TechRacer @@ -2512,16 +2516,16 @@ ["Use space button twice to change flying saucer while being in air."]="Drücke die Angriffstaste 2 mal, um die fliegende Untertasse im Flug zu wechseln", ["Use space button twice to change flying saucer while floating in mid-air."]="Drücke die Angriffstaste 2 mal, um die fliegende Untertasse im Flug zu wechseln.", ["Use the attack key twice to change the flying saucer while being in air."] = "Benutze die Angriffstaste 2 mal, um die fliegende Untertasse in der Luft zu wechseln.", -- A_Space_Adventure:ice02 +["Use the attack key twice to change the flying saucer while floating in mid-air"] = "Benutze die Angriffstaste 2 mal, um die Fliegende Untertasse während des Fluges zu wechseln", -- A_Space_Adventure:ice02 ["Use the attack key twice to change the flying saucer while floating in mid-air."] = "Benutze die Angriffstaste 2 mal, um die Fliegende Untertasse während des Fluges zu wechseln.", -- A_Space_Adventure:ice02 -["Use the attack key twice to change the flying saucer while floating in mid-air"] = "Benutze die Angriffstaste 2 mal, um die Fliegende Untertasse während des Fluges zu wechseln", -- A_Space_Adventure:ice02 ["Use the bazooka and the flying saucer to get the freezer."] = "Benutze die Bazooka und die fliegende Untertasse, um die Eiskanone zu ergattern.", -- A_Space_Adventure:ice01 ["Use the bazooka and the flying saucer to get the icegun."]="Benutze die Bazooka und die fliegende Untertasse, um die Eiskanone zu ergattern", ["Use the flying saucer from the crate to fly to the moon."] = "Benutze die fliegende Untertasse aus der Kiste, um zum Mond zu fliegen.", -- A_Space_Adventure:cosmos ["Use the flying saucer to fly to the other planets."] = "Benutze die fliegende Untertasse, um zu den anderen Planeten zu fliegen.", -- A_Space_Adventure:cosmos ["Use the parachute ([Space] while in air) to get the next crate"]="Benutze den Fallschirm ([Leer] drücken, wenn in der Luft), um die nächste Kiste zu erhalten.", ["Use the portal gun to get to the next crate, then use the new gun to get to the final destination!|"]="Benutze das Portalgewehr, um zur nächsten Kiste zu kommen,|dann benutze das nächste Werkzeug, um zum letzten Ziel zu kommen.|", +["Use the RC plane and destroy the all the targets"]="Benutze das Funkflugzeug und zerstöre alle Zielscheiben", ["Use the RC plane and destroy the all the targets."]="Benutze das Funkflugzeug und zerstöre alle Zielscheiben.", -["Use the RC plane and destroy the all the targets"]="Benutze das Funkflugzeug und zerstöre alle Zielscheiben", ["Use the rope in order to catch the blue hedgehog"]="Benutze das Seil, um den blauen Igel zu fangen.", ["Use the rope to complete the obstacle course!"] = "Benutze das Seil, um die Hindernisstrecke abzuschließen!", -- Basic_Training_-_Rope ["Use the rope to get on the head of the mole, young one!"]="Benutze das Seil, um auf den Kopf des Maulwurfs zu gelangen, Jüngling!", @@ -2552,8 +2556,8 @@ ["Use this mode to tag gears for win/lose conditions."]="Benutze diesen Modus, um Gears für Sieg-/Niederlagebedingungen zu markieren.", ["Use this mode to waypoints"]="Benutze diesen Modus, um Wegpunkte zu platzieren", ["Use your ammo wisely."]="Benutze deine Munition weise.", +["Use your available weapons in order to eliminate the enemies"]="Benutze deine verfügbaren Waffen, um die Gegner zu eliminieren", ["Use your available weapons in order to eliminate the enemies."]="Benutze deine verfügbaren Waffen, um die Gegner zu eliminieren.", -["Use your available weapons in order to eliminate the enemies"]="Benutze deine verfügbaren Waffen, um die Gegner zu eliminieren", ["Use your ready time to think."]="Benutze deine Vorbereitungszeit zum Denken.", ["Use your rope to collect all crates as fast as possible."] = "Benutze dein Seil, um alle Kisten so schnell wie möglich einzusammeln.", -- ["Use your rope to get from start to finish as fast as you can!"]="Nutze das Seil, um von Start zu Ziel zu gelangen – so schnell du kannst!", @@ -2796,8 +2800,8 @@ ["You can dive with your flying saucer!"] = "Mit deiner fliegenden Untertasse kannst du abtauchen!", -- Basic_Training_-_Flying_Saucer ["You can even change your aiming direction in mid-flight if you first hold [Precise] and then press [Up] or [Down]."] = "Du kannst sogar deine Zielrichtung im Flug ändern, wenn du|zuerst [Genaues Zielen] gedrückt hältst, und dann [Hoch] oder [Runter] drückst.", -- Basic_Training_-_Flying_Saucer ["You can further customize the race by changing the scheme script parameter."] = "Du kannst das Rennen ferner bearbeiten, indem du den Skriptparameter im Schema änderst.", -- TechRacer +["You can only use the sniper rifle or the watermelon bomb"]="Du kannst nur das Scharfschützengewehr oder die Wassermelonenbombe benutzen", ["You can only use the sniper rifle or the watermelon bomb."]="Du kannst nur das Scharfschützengewehr oder die Wassermelonenbombe benutzen.", -["You can only use the sniper rifle or the watermelon bomb"]="Du kannst nur das Scharfschützengewehr oder die Wassermelonenbombe benutzen", ["You can practice moving around and using utilities in this mission.|However, it will never end!"] = "In dieser Mission kannst du üben, dich herumbewegen|und Werkzeuge benutzen.|Aber sie wird niemals enden!", -- A_Classic_Fairytale:epil ["You can set the bounciness of grenades (and grenade-like weapons)."] = "Du kannst die Sprunghaftigkeit von Granaten (und granatenähnlichen Waffen) setzen.", -- Basic_Training_-_Grenade ["You can’t open a portal on the blue surface."] = "Du kannst kein Portal auf der blauen Oberfläche öffnen.", -- portal @@ -2918,16 +2922,16 @@ ["You killed my father, you monster!"]="Du hast meinen Vater umgebracht, du Monster!", ["You know...taking a stroll."]="Du weißt schon … umherbummeln.", ["You know what? I don't even regret anything!"]="Weißt du was? Ich bereue nichts!", +["You'll get an extra sniper rifle every time you kill an enemy hog with a limit of max 4 rifles"] = "Du erhältst ein zusätzliches Scharfschützengewehr für jeden Igel, den du tötest (max. 4 Gewehre)", -- A_Space_Adventure:fruit03 ["You'll get an extra sniper rifle every time you kill an enemy hog with a limit of max 4 rifles."] = "Du erhältst ein zusätzliches Scharfschützengewehr für jeden Igel, den du tötest (max. 4 Gewehre).", -- A_Space_Adventure:fruit03 -["You'll get an extra sniper rifle every time you kill an enemy hog with a limit of max 4 rifles"] = "Du erhältst ein zusätzliches Scharfschützengewehr für jeden Igel, den du tötest (max. 4 Gewehre)", -- A_Space_Adventure:fruit03 +["You'll get an extra teleport every time you kill an enemy hog with a limit of max 2 teleports"]="Du erhältst einen zusätzlichen Teleporter für jeden getöteten Igel (max. 2 Teleporter)", -- A_Space_Adventure:fruit03 ["You'll get an extra teleport every time you kill an enemy hog with a limit of max 2 teleports."]="Du erhältst einen zusätzlichen Teleporter für jeden getöteten Igel (max. 2 Teleporter).", -- A_Space_Adventure:fruit03 -["You'll get an extra teleport every time you kill an enemy hog with a limit of max 2 teleports"]="Du erhältst einen zusätzlichen Teleporter für jeden getöteten Igel (max. 2 Teleporter)", -- A_Space_Adventure:fruit03 +["You'll get extra time in case you need it when you pass a ring"]="Du erhältst Bonuszeit, wenn du sie brauchst, sobald du einen Ring passierst", -- A_Space_Adventure:ice02 ["You'll get extra time in case you need it when you pass a ring."]="Du erhältst Bonuszeit, wenn du sie brauchst, sobald du einen Ring passierst.", -- A_Space_Adventure:ice02 -["You'll get extra time in case you need it when you pass a ring"]="Du erhältst Bonuszeit, wenn du sie brauchst, sobald du einen Ring passierst", -- A_Space_Adventure:ice02 +["You'll have only 2 watermelon bombs during the game"]="Du hast nur 2 Wassermelonenbomben während des Spiels", -- A_Space_Adventure:fruit03 ["You'll have only 2 watermelon bombs during the game."]="Du hast nur 2 Wassermelonenbomben während des Spiels.", -- A_Space_Adventure:fruit03 -["You'll have only 2 watermelon bombs during the game"]="Du hast nur 2 Wassermelonenbomben während des Spiels", -- A_Space_Adventure:fruit03 +["You'll have only one RC plane at the start of the mission"]="Am Anfang der Mission hast du nur ein Funkflugzeug", ["You'll have only one RC plane at the start of the mission."]="Am Anfang der Mission hast du nur ein Funkflugzeug.", -["You'll have only one RC plane at the start of the mission"]="Am Anfang der Mission hast du nur ein Funkflugzeug", ["You'll have to eliminate Captain Lime at the end."]="Am Ende musst du Leutnant Limone eliminieren.", -- A_Space_Adventure:fruit02 ["You'll have to eliminate the Fruit Assassins at the end."] = "Am Ende musst du die Obstassassinen eliminieren.", -- A_Space_Adventure:fruit02 ["You'll have to eliminate the Strawberry Assassins at the end."]="Am Ende musst du die Erdbeerassassinen eliminieren.", -- A_Space_Adventure:fruit02 diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/de.txt --- a/share/hedgewars/Data/Locale/de.txt Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/de.txt Mon Sep 24 11:18:48 2018 -0400 @@ -393,19 +393,14 @@ ; Round ends in a draw 02:04=Unentschieden 02:04=Es ist unentschieden! -02:04=Keiner gewinnt! Unentschieden -02:04=Unglaublich, diese Runde endet unentschieden 02:04=Unentschieden, wie langweilig -02:04=Unmöglich! Es ist unentschieden 02:04=Unentschieden! Jetzt müssen wir von vorne anfangen … -02:04=Spiel vorbei! Es hat niemand gewonnen 02:04=Unentschieden, was für eine Enttäuschung! -02:04=Heute ist jeder ein Verlierer +02:04=Unentschieden. Alle kämpften bis zum bitteren Ende 02:04=Hey, wo ist der Sieger? 02:04=Wo sind all die Igel hin? 02:04=Öde! Ich will mein Geld zurück! - -02:04=Ach nö, es steht Unentschieden! +02:04=Alle sind tot. Gut so! ; New health crate 02:05=Hilfspaket gesichtet! @@ -661,7 +656,6 @@ 02:06=Es ist gefährlich da draußen. Nimm dies! 02:06=Der Himmel spielt gern mit Sterblichen 02:06=Peng-peng in einer Kiste! -02:06=Können ein paar von euch bitte sterben? 02:06=Waffenkiste: Nur echt mit dem Fragezeichen 02:06=Ein schlagkräftiges Argument! diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/en.txt --- a/share/hedgewars/Data/Locale/en.txt Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/en.txt Mon Sep 24 11:18:48 2018 -0400 @@ -371,16 +371,9 @@ ; Round ends in a draw 02:04=Round draw 02:04=It's a draw! -02:04=Nobody wins! Round draw -02:04=Unbelievable, the round ended in a draw 02:04=Round draw, how boring -02:04=Impossible! The round ends in a draw 02:04=Round draw! Now we have to start again … -02:04=Game over! Nobody's a winner today 02:04=Round draw, so disappointing! -02:04=Nobody wins, how boring! -02:04=Everyone's a loser today -02:04=A draw! World balance has been sustained 02:04=A draw. Everyone fought bravely to the end 02:04=Hey! Where is the winner?! 02:04=Where have all the hedgehogs gone? @@ -647,7 +640,6 @@ 02:06=It's dangerous to go alone. Take this! 02:06=Heaven likes to play with mortals 02:06=Pew pew in a box! -02:06=Could more of you die, please? ; New utility crate 02:07=Tooltime! diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/es.lua --- a/share/hedgewars/Data/Locale/es.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/es.lua Mon Sep 24 11:18:48 2018 -0400 @@ -11,8 +11,8 @@ -- ["%.1fs"] = "", -- Racer, TechRacer -- ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer -- ["+1 mine!"] = "", -- Tumbler +-- ["+1 point"] = "", -- Mutant -- ["-1 point"] = "", -- Mutant --- ["+1 point"] = "", -- Mutant -- ["-1 to anyone for a suicide"] = "", -- Mutant -- ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant -- ["+1 to the Mutant for killing anyone"] = "", -- Mutant @@ -713,8 +713,8 @@ -- ["Gear information hidden"] = "", -- HedgeEditor -- ["Gear information shown"] = "", -- HedgeEditor -- ["Gear Placement Tool"] = "", -- HedgeEditor +-- ["General information"] = "", -- Continental_supplies -- ["General information:"] = "", -- Continental_supplies --- ["General information"] = "", -- Continental_supplies -- ["General Lemon"] = "", -- A_Space_Adventure:fruit01 -- ["Generator"] = "", -- Construction_Mode -- ["Generator: Generates energy."] = "", -- Construction_Mode @@ -1054,8 +1054,8 @@ -- ["If you can get that crate fast enough, your beloved \"princess\" may go free."] = "", -- A_Classic_Fairytale:journey -- ["If you decide to help us, though, we will no longer need to find a new governor for the island."] = "", -- A_Classic_Fairytale:shadow -- ["If you don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement +-- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey --- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02 -- ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02 -- ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02 @@ -1569,8 +1569,8 @@ -- ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood -- ["Oneye"] = "", -- portal -- ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02 +-- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant --- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer -- ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard -- ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01 @@ -1653,8 +1653,8 @@ -- ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge +-- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge --- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos -- ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos -- ["Play with me!"] = "", -- A_Classic_Fairytale:shadow @@ -1847,8 +1847,8 @@ -- ["Score points by killing other hedgehogs."] = "", -- Mutant -- ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant -- ["Scores: "] = "", -- Capture_the_Flag +-- ["Scores"] = "", -- Mutant -- ["Scores:"] = "", -- Mutant --- ["Scores"] = "", -- Mutant -- ["Scoring: "] = "", -- Mutant -- ["Script parameter examples:"] = "", -- Gravity -- ["%s (+%d)"] = "", -- Battalion @@ -2169,6 +2169,7 @@ -- ["Team Identity Mode"] = "", -- HedgeEditor -- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor -- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove +-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion -- ["Team Scores:"] = "", -- Control -- ["Team scores:"] = "", -- Space_Invasion -- ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2 @@ -2331,6 +2332,8 @@ -- ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood -- ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope -- ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen +-- ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion +-- ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion -- ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02 -- ["The Torment"] = "", -- A_Classic_Fairytale:first_blood -- ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02 @@ -2401,6 +2404,7 @@ -- ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade -- ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade -- ["Thug #%d"] = "", -- A_Space_Adventure:death01 +-- ["Tie-breaking round %d"] = "", -- Space_Invasion -- ["Timbers"] = "", -- -- ["Time: %.1fs"] = "", -- Racer, TechRacer -- ["Time: %.3fs by %s"] = "", -- TrophyRace diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/fr.lua --- a/share/hedgewars/Data/Locale/fr.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/fr.lua Mon Sep 24 11:18:48 2018 -0400 @@ -11,8 +11,8 @@ -- ["%.1fs"] = "", -- Racer, TechRacer -- ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer -- ["+1 mine!"] = "", -- Tumbler +-- ["+1 point"] = "", -- Mutant -- ["-1 point"] = "", -- Mutant --- ["+1 point"] = "", -- Mutant ["-1 to anyone for a suicide"] = "-1 pour cause de suicide", -- ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant -- ["+1 to the Mutant for killing anyone"] = "", -- Mutant @@ -1582,8 +1582,8 @@ ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "L'une des deux tribus était pacifique, passant son temps à chasser et à s'entraîner, appréciant les petits plaisirs de la vie", -- ["Oneye"] = "", -- portal -- ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02 +-- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant --- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer -- ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard -- ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01 @@ -1666,8 +1666,8 @@ -- ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge +-- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge --- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos -- ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos ["Play with me!"] = "Joue avec moi !", @@ -1860,8 +1860,8 @@ -- ["Score points by killing other hedgehogs."] = "", -- Mutant -- ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant -- ["Scores: "] = "", -- Capture_the_Flag +-- ["Scores"] = "", -- Mutant -- ["Scores:"] = "", -- Mutant --- ["Scores"] = "", -- Mutant -- ["Scoring: "] = "", -- Mutant -- ["Script parameter examples:"] = "", -- Gravity -- ["%s (+%d)"] = "", -- Battalion @@ -2182,6 +2182,7 @@ -- ["Team Identity Mode"] = "", -- HedgeEditor -- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor -- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove +-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion -- ["Team Scores:"] = "", -- Control -- ["Team scores:"] = "", -- Space_Invasion -- ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2 @@ -2344,6 +2345,8 @@ -- ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood -- ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope -- ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen +-- ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion +-- ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion -- ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02 ["The Torment"] = "Le supplice", -- ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02 @@ -2415,6 +2418,7 @@ -- ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade -- ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade -- ["Thug #%d"] = "", -- A_Space_Adventure:death01 +-- ["Tie-breaking round %d"] = "", -- Space_Invasion -- ["Timbers"] = "", -- -- ["Time: %.1fs"] = "", -- Racer, TechRacer -- ["Time: %.3fs by %s"] = "", -- TrophyRace diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_ar.ts --- a/share/hedgewars/Data/Locale/hedgewars_ar.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_ar.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1346,6 +1346,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4123,10 +4127,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4147,10 +4147,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4167,18 +4163,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4191,14 +4175,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4230,5 +4206,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_bg.ts --- a/share/hedgewars/Data/Locale/hedgewars_bg.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_bg.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1353,6 +1353,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4159,10 +4163,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4183,10 +4183,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4203,18 +4199,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4227,14 +4211,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4266,5 +4242,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_cs.ts --- a/share/hedgewars/Data/Locale/hedgewars_cs.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_cs.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1384,6 +1384,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4233,10 +4237,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4257,10 +4257,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4277,18 +4273,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4301,14 +4285,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4340,5 +4316,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_da.ts --- a/share/hedgewars/Data/Locale/hedgewars_da.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_da.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1371,6 +1371,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4229,10 +4233,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4253,10 +4253,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4273,18 +4269,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4297,14 +4281,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4336,5 +4312,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_de.ts --- a/share/hedgewars/Data/Locale/hedgewars_de.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_de.ts Mon Sep 24 11:18:48 2018 -0400 @@ -966,7 +966,7 @@ Please check the host name and port settings and/or try again later.</source> <translation>Die Verbindung wurde vom Host abgelehnt oder die maximale Wartezeit ist abgelaufen. Dies könnte einen der folgenden Gründe haben: -– Das Hedgewars-Server-Programm läuft momentant nicht auf dem Host +– Das Hedgewars-Server-Programm läuft momentan nicht auf dem Host – Die angegebene Portnummer ist falsch – Es gibt ein temporäres Netzwerkproblem @@ -1187,7 +1187,7 @@ <name>PageAdmin</name> <message> <source>Clear Accounts Cache</source> - <translation>Zwischenspeicher leeren</translation> + <translation>Konten-Zwischenspeicher leeren</translation> </message> <message> <source>Fetch data</source> @@ -1228,7 +1228,7 @@ </message> <message> <source>Expiration</source> - <translation>Ablaufzeitpunkt</translation> + <translation>Ablaufzeit</translation> </message> <message> <source>Reason</source> @@ -1545,6 +1545,10 @@ <numerusform><b>%1</b> erledigte <b>%2</b> der eigenen Igel.</numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation>Da alle die gleiche Klanfarbe hatten, gab es keinen Grund für einen Kampf. Und wenn sie nicht gestorben sind, dann leben die Igel noch heute in Frieden.</translation> + </message> </context> <context> <name>PageInGame</name> @@ -4732,7 +4736,7 @@ </message> <message> <source>/rnd: Flip a virtual coin and reply with 'heads' or 'tails'</source> - <translation>/rnd: Wirft eine virtuelle Münze und antwortet mit »heads« oder »tails«</translation> + <translation>/rnd: Wirft eine virtuelle Münze und antwortet mit »Kopf« oder »Zahl«</translation> </message> <message> <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source> @@ -4756,7 +4760,7 @@ </message> <message> <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation>/greeting <Nachricht>: Begrüßungsnachricht für Spieler, die diesen Raum betreten, setzen</translation> + <translation type="vanished">/greeting <Nachricht>: Begrüßungsnachricht für Spieler, die diesen Raum betreten, setzen</translation> </message> <message> <source>/delegate <player>: Surrender room control to player</source> @@ -4780,7 +4784,7 @@ </message> <message> <source>/save <parameter></source> - <translation>/save <Parameter></translation> + <translation type="vanished">/save <Parameter></translation> </message> <message> <source>/stats: Query server stats</source> @@ -4800,15 +4804,15 @@ </message> <message> <source>/saveroom <file name>: Save room configuration into a file</source> - <translation>/saveroom <Dateiname>: Raumeinstellungen in eine Datei speichern</translation> + <translation type="vanished">/saveroom <Dateiname>: Raumeinstellungen in eine Datei speichern</translation> </message> <message> <source>/loadroom <file name>: Load room configuration from a file</source> - <translation>/loadroom <Dateiname>: Raumeinstellungen aus einer Datei laden</translation> + <translation type="vanished">/loadroom <Dateiname>: Raumeinstellungen aus einer Datei laden</translation> </message> <message> <source>/delete <parameter></source> - <translation>/delete <Parameter></translation> + <translation type="vanished">/delete <Parameter></translation> </message> <message> <source>List of lobby chat commands:</source> @@ -4824,11 +4828,11 @@ </message> <message> <source>Unknown command:</source> - <translation>Unbekannter Befehl</translation> + <translation type="vanished">Unbekannter Befehl</translation> </message> <message> <source>Say '/help' in chat for a list of commands</source> - <translation>Sag »/help« im Chat für eine Liste von Befehlen</translation> + <translation type="vanished">Sag »/help« im Chat für eine Liste von Befehlen</translation> </message> <message> <source>room</source> @@ -4862,5 +4866,97 @@ <source>Kicked</source> <translation>Hinausgeworfen</translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation>Dieser Server lässt nur registrierte Server rein.</translation> + </message> + <message> + <source>heads</source> + <translation>Kopf</translation> + </message> + <message> + <source>tails</source> + <translation>Zahl</translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation>Dieser Server unterstützt keine Wiederholungen!</translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation>/greeting [Nachricht]: Setze oder leere die Begrüßungsnachricht für Spieler, die den Raum betreten</translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation>/save <Konfig-ID> <Konfig-Name>: Aktuelle Raumeinstellung als Wahloption für /callvote map hinzufügen</translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation>/delete <Konfig-ID>: Eine wählbare Raumeinstellung löschen</translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation>/saveroom <Dateiname>: Alle wählbaren Raumeinstellungen (und die Begrüßung) dieses Raums in eine Datei speichern</translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation>/loadroom <Dateiname>: Wählbare Raumeinstellungen (und Begrüßung) aus einer Datei laden</translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation>»Registered only«-Zustand umgeschaltet.</translation> + </message> + <message> + <source>Super power activated.</source> + <translation>Superkraft aktiviert.</translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation>Unbekannter Befehl oder ungültige Parameter. Sag »/help« im Chat für eine Liste an Befehlen.</translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation>Du kannst dich nicht selbst hinauswerfen!</translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation>Du kannst nicht den einzigen anderen Spieler hinauswerfen!</translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation>Der Spieler befindet sich nicht in deinem Raum.</translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation>Dieser Spieler wird vor Hinauswürfen geschützt.</translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation>Du bist nicht der Raumleiter oder ein Server-Admin!</translation> + </message> + <message> + <source>You're already the room master.</source> + <translation>Du bist bereits der Raumleiter.</translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation>Begrüßungsnachricht geleert.</translation> + </message> + <message> + <source>Greeting message set.</source> + <translation>Begrüßungsnachricht gesetzt.</translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation>/callvote kick: Dies ist nur in Räumen ohne Raumleiter erlaubt.</translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation>/callvote map: Keine Karten verfügbar.</translation> + </message> + <message> + <source>You're the new room master!</source> + <translation>Du bist der neue Raumleiter!</translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_el.ts --- a/share/hedgewars/Data/Locale/hedgewars_el.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_el.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1365,6 +1365,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4207,10 +4211,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4231,10 +4231,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4251,18 +4247,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4275,14 +4259,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4314,5 +4290,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_en.ts --- a/share/hedgewars/Data/Locale/hedgewars_en.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_en.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1461,6 +1461,10 @@ <numerusform><b>%1</b> killed <b>%2</b> of their own hedgehogs.</numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</translation> + </message> </context> <context> <name>PageInGame</name> @@ -4540,7 +4544,7 @@ </message> <message> <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation>/greeting <message>: Set greeting message to be shown to players who join the room</translation> + <translation type="vanished">/greeting <message>: Set greeting message to be shown to players who join the room</translation> </message> <message> <source>/delegate <player>: Surrender room control to player</source> @@ -4564,7 +4568,7 @@ </message> <message> <source>/save <parameter></source> - <translation>/save <parameter></translation> + <translation type="vanished">/save <parameter></translation> </message> <message> <source>/stats: Query server stats</source> @@ -4584,15 +4588,15 @@ </message> <message> <source>/saveroom <file name>: Save room configuration into a file</source> - <translation>/saveroom <file name>: Save room configuration into a file</translation> + <translation type="vanished">/saveroom <file name>: Save room configuration into a file</translation> </message> <message> <source>/loadroom <file name>: Load room configuration from a file</source> - <translation>/loadroom <file name>: Load room configuration from a file</translation> + <translation type="vanished">/loadroom <file name>: Load room configuration from a file</translation> </message> <message> <source>/delete <parameter></source> - <translation>/delete <parameter></translation> + <translation type="vanished">/delete <parameter></translation> </message> <message> <source>List of lobby chat commands:</source> @@ -4608,11 +4612,11 @@ </message> <message> <source>Unknown command:</source> - <translation>Unknown command:</translation> + <translation type="vanished">Unknown command:</translation> </message> <message> <source>Say '/help' in chat for a list of commands</source> - <translation>Say ‘/help’ in chat for a list of commands</translation> + <translation type="vanished">Say ‘/help’ in chat for a list of commands</translation> </message> <message> <source>room</source> @@ -4646,5 +4650,97 @@ <source>Kicked</source> <translation>Kicked</translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation>This server only allows registered users to join.</translation> + </message> + <message> + <source>heads</source> + <translation>heads</translation> + </message> + <message> + <source>tails</source> + <translation>tails</translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation>This server does not support replays!</translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation>/greeting [message]: Set or clear greeting message to be shown to players who join the room</translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation>/delete <config ID>: Delete a votable room configuration</translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation>/loadroom <file name>: Load votable room configurations (and greeting) from a file</translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation>‘Registered only’ state toggled.</translation> + </message> + <message> + <source>Super power activated.</source> + <translation>Super power activated.</translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation>Unknown command or invalid parameters. Say ‘/help’ in chat for a list of commands.</translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation>You can’t kick yourself!</translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation>You can’t kick the only other player!</translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation>The player is not in your room.</translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation>This player is protected from being kicked.</translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation>You’re not the room master or a server admin!</translation> + </message> + <message> + <source>You're already the room master.</source> + <translation>You’re already the room master.</translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation>Greeting message cleared.</translation> + </message> + <message> + <source>Greeting message set.</source> + <translation>Greeting message set.</translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation>/callvote kick: This is only allowed in rooms without a room master.</translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation>/callvote map: No maps available.</translation> + </message> + <message> + <source>You're the new room master!</source> + <translation>You’re the new room master!</translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_es.ts --- a/share/hedgewars/Data/Locale/hedgewars_es.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_es.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1371,6 +1371,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4225,10 +4229,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4249,10 +4249,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4269,18 +4265,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4293,14 +4277,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4332,5 +4308,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_fi.ts --- a/share/hedgewars/Data/Locale/hedgewars_fi.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_fi.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1422,6 +1422,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4425,10 +4429,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4449,10 +4449,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4469,18 +4465,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4493,14 +4477,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4532,5 +4508,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_fr.ts --- a/share/hedgewars/Data/Locale/hedgewars_fr.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_fr.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1447,6 +1447,10 @@ <numerusform><b>%1</b> a tué <b>%2</b> de ses propres hérissons.</numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4607,10 +4611,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4631,10 +4631,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4651,18 +4647,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4675,14 +4659,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4714,5 +4690,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_gd.ts --- a/share/hedgewars/Data/Locale/hedgewars_gd.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_gd.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1456,6 +1456,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4473,10 +4477,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4497,10 +4497,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4517,18 +4513,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4541,14 +4525,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4580,5 +4556,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_gl.ts --- a/share/hedgewars/Data/Locale/hedgewars_gl.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_gl.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1345,6 +1345,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4150,10 +4154,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4174,10 +4174,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4194,18 +4190,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4218,14 +4202,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4257,5 +4233,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_hu.ts --- a/share/hedgewars/Data/Locale/hedgewars_hu.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_hu.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1330,6 +1330,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4140,10 +4144,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4164,10 +4164,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4184,18 +4180,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4208,14 +4192,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4247,5 +4223,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_it.ts --- a/share/hedgewars/Data/Locale/hedgewars_it.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_it.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1430,6 +1430,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4479,10 +4483,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4503,10 +4503,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4523,18 +4519,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4547,14 +4531,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4586,5 +4562,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_ja.ts --- a/share/hedgewars/Data/Locale/hedgewars_ja.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_ja.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1340,6 +1340,10 @@ <numerusform><b>%1</b>は自分の針鼠を<b>%2</b>匹犠牲にしました。</numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4086,10 +4090,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4110,10 +4110,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4130,18 +4126,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4154,14 +4138,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4193,5 +4169,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_ko.ts --- a/share/hedgewars/Data/Locale/hedgewars_ko.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_ko.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1307,6 +1307,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -3981,10 +3985,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4005,10 +4005,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4025,18 +4021,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4049,14 +4033,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4088,5 +4064,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_lt.ts --- a/share/hedgewars/Data/Locale/hedgewars_lt.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_lt.ts Mon Sep 24 11:18:48 2018 -0400 @@ -660,45 +660,45 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="1814"/> - <location filename="../../../../QTfrontend/hwform.cpp" line="2198"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="1822"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2206"/> <source>Cannot save record to file %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2128"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2136"/> <source>Hedgewars Demo File</source> <comment>File Types</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2129"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2137"/> <source>Hedgewars Save File</source> <comment>File Types</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2190"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2198"/> <source>Demo name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2190"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2198"/> <source>Demo name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2264"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2272"/> <source>Unknown network error (possibly missing SSL library).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2268"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2276"/> <source>This feature requires an Internet connection, but you don't appear to be online (error code: %1).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2273"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2281"/> <source>Internal error: Reply object is invalid.</source> <translation type="unfinished"></translation> </message> @@ -1011,17 +1011,17 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="559"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="579"/> <source>Server authentication error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="781"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="801"/> <source>Room destroyed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="538"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="558"/> <source>You got kicked</source> <translation type="unfinished"></translation> </message> @@ -1041,24 +1041,24 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="724"/> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="856"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="744"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="876"/> <source>%1 *** %2 has joined the room</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="871"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="891"/> <source>%1 *** %2 has left</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="878"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="898"/> <source>%1 *** %2 has left (message: "%3")</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="883"/> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="886"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="903"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="906"/> <source>%1 *** %2 has left (%3)</source> <translation type="unfinished"></translation> </message> @@ -1546,7 +1546,7 @@ </message> <message> <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="76"/> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="166"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="167"/> <source>Health graph</source> <translation type="unfinished"></translation> </message> @@ -1566,7 +1566,7 @@ <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="266"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="267"/> <source>The best shot award was won by <b>%1</b> with <b>%2</b> pts.</source> <translation type="unfinished"> <numerusform></numerusform> @@ -1575,7 +1575,7 @@ </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="274"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="275"/> <source>The best killer is <b>%1</b> with <b>%2</b> kills in a turn.</source> <translation type="unfinished"> <numerusform></numerusform> @@ -1584,7 +1584,7 @@ </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="281"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="282"/> <source>A total of <b>%1</b> hedgehog(s) were killed during this round.</source> <translation type="unfinished"> <numerusform></numerusform> @@ -1593,7 +1593,7 @@ </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="359"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="356"/> <source>(%1 kill)</source> <extracomment>Number of kills in stats screen, written after the team name</extracomment> <translation type="unfinished"> @@ -1603,7 +1603,7 @@ </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="362"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="359"/> <source>(%1 %2)</source> <extracomment>For custom number of points in the stats screen, written after the team name. %1 is the number, %2 is the word. Example: “4 points”</extracomment> <translation type="unfinished"> @@ -1613,7 +1613,7 @@ </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="375"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="373"/> <source><b>%1</b> thought it's good to shoot their own hedgehogs for <b>%2</b> pts.</source> <translation type="unfinished"> <numerusform></numerusform> @@ -1622,7 +1622,7 @@ </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="383"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="381"/> <source><b>%1</b> killed <b>%2</b> of their own hedgehogs.</source> <translation type="unfinished"> <numerusform></numerusform> @@ -1631,7 +1631,7 @@ </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="391"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="389"/> <source><b>%1</b> was scared and skipped turn <b>%2</b> times.</source> <translation type="unfinished"> <numerusform></numerusform> @@ -1639,6 +1639,11 @@ <numerusform></numerusform> </translation> </message> + <message> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="406"/> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -1785,7 +1790,7 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="146"/> + <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="147"/> <source>Start fighting (requires at least 2 teams)</source> <translation type="unfinished"></translation> </message> @@ -2525,13 +2530,13 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="709"/> + <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="707"/> <source>%1 (%2%) - %3</source> <extracomment>Video encoding list entry. %1 = file name, %2 = percent complete, %3 = video operation type (e.g. “encoding”)</extracomment> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="712"/> + <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="710"/> <source>encoding</source> <translation type="unfinished"></translation> </message> @@ -2929,7 +2934,7 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="259"/> + <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="295"/> <source>Playing teams</source> <translation type="unfinished"></translation> </message> @@ -3321,12 +3326,12 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2281"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2289"/> <source>Not all players are ready</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2282"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2290"/> <source>Are you sure you want to start this game? Not all players are ready.</source> <translation type="unfinished"></translation> @@ -3359,18 +3364,18 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2168"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2176"/> <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="418"/> <source>Hedgewars - Success</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2169"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2177"/> <source>All file associations have been set</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2174"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2182"/> <source>File association failed.</source> <translation type="unfinished"></translation> </message> @@ -3401,7 +3406,7 @@ </message> <message> <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="118"/> - <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="253"/> + <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="257"/> <source>Netgame - Error</source> <translation type="unfinished"></translation> </message> @@ -3411,7 +3416,7 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="254"/> + <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="258"/> <source>Please enter room name</source> <translation type="unfinished"></translation> </message> @@ -3462,18 +3467,18 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="589"/> - <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="618"/> + <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="587"/> + <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="616"/> <source>Videos - Are you sure?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="590"/> + <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="588"/> <source>Do you really want to delete the video '%1'?</source> <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="619"/> + <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="617"/> <source>Do you really want to remove %1 file(s)?</source> <translation type="unfinished"> <numerusform></numerusform> @@ -3906,7 +3911,7 @@ <context> <name>TeamSelWidget</name> <message> - <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="264"/> + <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="300"/> <source>At least two teams are required to play!</source> <translation type="unfinished"></translation> </message> @@ -4681,447 +4686,527 @@ <context> <name>server</name> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="83"/> + <location filename="../../../../QTfrontend/servermessages.h" line="99"/> <source>New voting started</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="85"/> + <location filename="../../../../QTfrontend/servermessages.h" line="101"/> <source>kick</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="86"/> + <location filename="../../../../QTfrontend/servermessages.h" line="102"/> <source>map</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="87"/> + <location filename="../../../../QTfrontend/servermessages.h" line="103"/> <source>pause</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="88"/> + <location filename="../../../../QTfrontend/servermessages.h" line="104"/> <source>new seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="59"/> + <location filename="../../../../QTfrontend/servermessages.h" line="71"/> <source>/maxteams: specify number from 2 to 8</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="60"/> + <location filename="../../../../QTfrontend/servermessages.h" line="43"/> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="44"/> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="45"/> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="74"/> <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="90"/> - <source>Nickname is already in use</source> - <translation type="unfinished"></translation> - </message> - <message> <location filename="../../../../QTfrontend/servermessages.h" line="2"/> - <source>No checker rights</source> + <source>Nickname is already in use</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="3"/> - <source>Authentication failed</source> + <source>This server only allows registered users to join.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="4"/> - <source>60 seconds cooldown after kick</source> + <source>No checker rights</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="5"/> - <source>Kicked</source> + <source>Authentication failed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="6"/> - <source>kicked</source> + <source>60 seconds cooldown after kick</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="7"/> - <source>Reconnected too fast</source> + <source>Kicked</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="8"/> - <source>Ping timeout</source> + <source>kicked</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="9"/> - <source>/info <player>: Show info about player</source> + <source>Reconnected too fast</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="10"/> - <source>/me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza'</source> + <source>Ping timeout</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="11"/> - <source>/rnd: Flip a virtual coin and reply with 'heads' or 'tails'</source> + <source>heads</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="12"/> - <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source> + <source>tails</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="13"/> - <source>/watch <id>: Watch a demo stored on the server with the given ID</source> + <source>This server does not support replays!</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="14"/> - <source>/help: Show chat command help</source> + <source>/info <player>: Show info about player</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="15"/> - <source>/callvote [arguments]: Start a vote</source> + <source>/me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza'</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="16"/> - <source>/vote <yes/no>: Vote 'yes' or 'no' for active vote</source> + <source>/rnd: Flip a virtual coin and reply with 'heads' or 'tails'</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="17"/> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> + <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="18"/> - <source>/delegate <player>: Surrender room control to player</source> + <source>/watch <id>: Watch a demo stored on the server with the given ID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="19"/> - <source>/maxteams <N>: Limit maximum number of teams to N</source> + <source>/help: Show chat command help</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="20"/> - <source>/global <message>: Send global chat message which can be seen by everyone on the server</source> + <source>/callvote [arguments]: Start a vote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="21"/> - <source>/registered_only: Toggle 'registered only' state. If enabled, only registered players can join server</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="22"/> - <source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source> + <source>/vote <yes/no>: Vote 'yes' or 'no' for active vote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="23"/> - <source>/save <parameter></source> + <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="24"/> - <source>/stats: Query server stats</source> + <source>/maxteams <N>: Limit maximum number of teams to N</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="25"/> - <source>/force <yes/no>: Force vote result for active vote</source> + <source>/global <message>: Send global chat message which can be seen by everyone on the server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="26"/> - <source>/fix: Force this room to stay open when it is empty</source> + <source>/registered_only: Toggle 'registered only' state. If enabled, only registered players can join server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="27"/> - <source>/unfix: Undo the /fix command</source> + <source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="28"/> - <source>/saveroom <file name>: Save room configuration into a file</source> + <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="29"/> - <source>/loadroom <file name>: Load room configuration from a file</source> + <source>/force <yes/no>: Force vote result for active vote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="30"/> - <source>/delete <parameter></source> + <source>/fix: Force this room to stay open when it is empty</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="31"/> + <source>/unfix: Undo the /fix command</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="36"/> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="32"/> + <location filename="../../../../QTfrontend/servermessages.h" line="37"/> <source>List of room chat commands:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="33"/> - <source>Commands for server admins only:</source> - <translation type="unfinished"></translation> - </message> - <message> <location filename="../../../../QTfrontend/servermessages.h" line="38"/> - <source>Unknown command:</source> + <source>Commands for server admins only:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="46"/> + <source>room</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="47"/> + <source>lobby</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="48"/> + <source>(playing)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="49"/> + <source>(spectating)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="50"/> + <source>Player is not online.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="51"/> + <source>The game can't be started with less than two clans!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="52"/> + <source>Empty config entry.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="53"/> + <source>Access denied.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="54"/> + <source>You're not the room master!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="55"/> + <source>Corrupted hedgehogs info!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="56"/> + <source>Too many teams!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="57"/> + <source>Too many hedgehogs!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="58"/> + <source>There's already a team with same name in the list.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="59"/> + <source>Joining not possible: Round is in progress.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="60"/> + <source>This room currently does not allow adding new teams.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="61"/> + <source>Error: The team you tried to remove does not exist.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="62"/> + <source>You can't remove a team you don't own.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="63"/> + <source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="64"/> + <source>A room with the same name already exists.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="65"/> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="66"/> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="67"/> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="68"/> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="69"/> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="70"/> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="72"/> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="73"/> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="75"/> + <source>/callvote kick: You need to specify a nickname.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="76"/> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="77"/> + <source>/callvote kick: No such user!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="78"/> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="79"/> + <source>/callvote map: No such map!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="80"/> + <source>/callvote pause: No game in progress!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="81"/> + <source>/callvote hedgehogs: Specify number from 1 to 8.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="82"/> + <source>/force: Please use 'yes' or 'no'.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="83"/> + <source>/vote: Please use 'yes' or 'no'.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="84"/> + <source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="85"/> + <source>No such room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="86"/> + <source>Room version incompatible to your Hedgewars version!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="87"/> + <source>Access denied. This room currently doesn't allow joining.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="88"/> + <source>Access denied. This room is for registered users only.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="89"/> + <source>You are banned from this room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="90"/> + <source>Nickname already provided.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="91"/> + <source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="92"/> + <source>Protocol already known.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="93"/> + <source>Bad number.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="94"/> + <source>There's no voting going on.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="95"/> + <source>You already have voted.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="96"/> + <source>Your vote has been counted.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="97"/> + <source>Voting closed.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="98"/> + <source>Pause toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="100"/> + <source>Voting expired.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="105"/> + <source>hedgehogs per team: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="106"/> + <source>You're the new room master!</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="39"/> - <source>Say '/help' in chat for a list of commands</source> + <source>Warning! Chat flood protection activated</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="22"/> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="32"/> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="33"/> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="34"/> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="35"/> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="40"/> - <source>room</source> + <source>Excess flood</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="41"/> - <source>lobby</source> + <source>Game messages flood detected - 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="42"/> - <source>(playing)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="43"/> - <source>(spectating)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="44"/> - <source>Player is not online.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="45"/> - <source>The game can't be started with less than two clans!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="46"/> - <source>Empty config entry.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="47"/> - <source>Access denied.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="48"/> - <source>You're not the room master!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="49"/> - <source>Corrupted hedgehogs info!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="50"/> - <source>Too many teams!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="51"/> - <source>Too many hedgehogs!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="52"/> - <source>There's already a team with same name in the list.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="53"/> - <source>Joining not possible: Round is in progress.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="54"/> - <source>This room currently does not allow adding new teams.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="55"/> - <source>Error: The team you tried to remove does not exist.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="56"/> - <source>You can't remove a team you don't own.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="57"/> - <source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="58"/> - <source>A room with the same name already exists.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="61"/> - <source>/callvote kick: You need to specify a nickname.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="62"/> - <source>/callvote kick: No such user!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="63"/> - <source>/callvote map: No such map!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="64"/> - <source>/callvote pause: No game in progress!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="65"/> - <source>/callvote hedgehogs: Specify number from 1 to 8.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="66"/> - <source>/force: Please use 'yes' or 'no'.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="67"/> - <source>/vote: Please use 'yes' or 'no'.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="68"/> - <source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="69"/> - <source>No such room.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="70"/> - <source>Room version incompatible to your Hedgewars version!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="71"/> - <source>Access denied. This room currently doesn't allow joining.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="72"/> - <source>Access denied. This room is for registered users only.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="73"/> - <source>You are banned from this room.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="74"/> - <source>Nickname already provided.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="75"/> - <source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="76"/> - <source>Protocol already known.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="77"/> - <source>Bad number.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="78"/> - <source>There's no voting going on.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="79"/> - <source>You already have voted.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="80"/> - <source>Your vote has been counted.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="81"/> - <source>Voting closed.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="82"/> - <source>Pause toggled.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="84"/> - <source>Voting expired.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="89"/> - <source>hedgehogs per team: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="34"/> - <source>Warning! Chat flood protection activated</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="35"/> - <source>Excess flood</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="36"/> - <source>Game messages flood detected - 1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="37"/> <source>Warning! Joins flood protection activated</source> <translation type="unfinished"></translation> </message> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_ms.ts --- a/share/hedgewars/Data/Locale/hedgewars_ms.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_ms.ts Mon Sep 24 11:18:48 2018 -0400 @@ -648,45 +648,45 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="1814"/> - <location filename="../../../../QTfrontend/hwform.cpp" line="2198"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="1822"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2206"/> <source>Cannot save record to file %1</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2128"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2136"/> <source>Hedgewars Demo File</source> <comment>File Types</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2129"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2137"/> <source>Hedgewars Save File</source> <comment>File Types</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2190"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2198"/> <source>Demo name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2190"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2198"/> <source>Demo name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2264"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2272"/> <source>Unknown network error (possibly missing SSL library).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2268"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2276"/> <source>This feature requires an Internet connection, but you don't appear to be online (error code: %1).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2273"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2281"/> <source>Internal error: Reply object is invalid.</source> <translation type="unfinished"></translation> </message> @@ -999,34 +999,34 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="538"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="558"/> <source>You got kicked</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="559"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="579"/> <source>Server authentication error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="871"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="891"/> <source>%1 *** %2 has left</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="878"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="898"/> <source>%1 *** %2 has left (message: "%3")</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="883"/> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="886"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="903"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="906"/> <source>%1 *** %2 has left (%3)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="724"/> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="856"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="744"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="876"/> <source>%1 *** %2 has joined the room</source> <translation type="unfinished"></translation> </message> @@ -1046,7 +1046,7 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="781"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="801"/> <source>Room destroyed</source> <translation type="unfinished"></translation> </message> @@ -1532,7 +1532,7 @@ </message> <message> <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="76"/> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="166"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="167"/> <source>Health graph</source> <translation type="unfinished"></translation> </message> @@ -1552,28 +1552,28 @@ <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="266"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="267"/> <source>The best shot award was won by <b>%1</b> with <b>%2</b> pts.</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="274"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="275"/> <source>The best killer is <b>%1</b> with <b>%2</b> kills in a turn.</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="281"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="282"/> <source>A total of <b>%1</b> hedgehog(s) were killed during this round.</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="359"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="356"/> <source>(%1 kill)</source> <extracomment>Number of kills in stats screen, written after the team name</extracomment> <translation type="unfinished"> @@ -1581,7 +1581,7 @@ </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="362"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="359"/> <source>(%1 %2)</source> <extracomment>For custom number of points in the stats screen, written after the team name. %1 is the number, %2 is the word. Example: “4 points”</extracomment> <translation type="unfinished"> @@ -1589,26 +1589,31 @@ </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="375"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="373"/> <source><b>%1</b> thought it's good to shoot their own hedgehogs for <b>%2</b> pts.</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="383"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="381"/> <source><b>%1</b> killed <b>%2</b> of their own hedgehogs.</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="391"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="389"/> <source><b>%1</b> was scared and skipped turn <b>%2</b> times.</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> + <message> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="406"/> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -1755,7 +1760,7 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="146"/> + <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="147"/> <source>Start fighting (requires at least 2 teams)</source> <translation type="unfinished"></translation> </message> @@ -2491,13 +2496,13 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="709"/> + <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="707"/> <source>%1 (%2%) - %3</source> <extracomment>Video encoding list entry. %1 = file name, %2 = percent complete, %3 = video operation type (e.g. “encoding”)</extracomment> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="712"/> + <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="710"/> <source>encoding</source> <translation type="unfinished"></translation> </message> @@ -2905,7 +2910,7 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="259"/> + <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="295"/> <source>Playing teams</source> <translation type="unfinished"></translation> </message> @@ -3287,12 +3292,12 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2281"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2289"/> <source>Not all players are ready</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2282"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2290"/> <source>Are you sure you want to start this game? Not all players are ready.</source> <translation type="unfinished"></translation> @@ -3325,24 +3330,24 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2168"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2176"/> <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="418"/> <source>Hedgewars - Success</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2169"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2177"/> <source>All file associations have been set</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2174"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2182"/> <source>File association failed.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="118"/> - <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="253"/> + <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="257"/> <source>Netgame - Error</source> <translation type="unfinished"></translation> </message> @@ -3352,7 +3357,7 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="254"/> + <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="258"/> <source>Please enter room name</source> <translation type="unfinished"></translation> </message> @@ -3403,18 +3408,18 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="589"/> - <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="618"/> + <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="587"/> + <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="616"/> <source>Videos - Are you sure?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="590"/> + <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="588"/> <source>Do you really want to delete the video '%1'?</source> <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="619"/> + <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="617"/> <source>Do you really want to remove %1 file(s)?</source> <translation type="unfinished"> <numerusform></numerusform> @@ -3870,7 +3875,7 @@ <context> <name>TeamSelWidget</name> <message> - <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="264"/> + <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="300"/> <source>At least two teams are required to play!</source> <translation type="unfinished"></translation> </message> @@ -4645,447 +4650,527 @@ <context> <name>server</name> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="83"/> + <location filename="../../../../QTfrontend/servermessages.h" line="99"/> <source>New voting started</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="85"/> + <location filename="../../../../QTfrontend/servermessages.h" line="101"/> <source>kick</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="86"/> + <location filename="../../../../QTfrontend/servermessages.h" line="102"/> <source>map</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="87"/> + <location filename="../../../../QTfrontend/servermessages.h" line="103"/> <source>pause</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="88"/> + <location filename="../../../../QTfrontend/servermessages.h" line="104"/> <source>new seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="59"/> + <location filename="../../../../QTfrontend/servermessages.h" line="71"/> <source>/maxteams: specify number from 2 to 8</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="60"/> + <location filename="../../../../QTfrontend/servermessages.h" line="43"/> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="44"/> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="45"/> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="74"/> <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="90"/> - <source>Nickname is already in use</source> - <translation type="unfinished"></translation> - </message> - <message> <location filename="../../../../QTfrontend/servermessages.h" line="2"/> - <source>No checker rights</source> + <source>Nickname is already in use</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="3"/> - <source>Authentication failed</source> + <source>This server only allows registered users to join.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="4"/> - <source>60 seconds cooldown after kick</source> + <source>No checker rights</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="5"/> - <source>Kicked</source> + <source>Authentication failed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="6"/> - <source>kicked</source> + <source>60 seconds cooldown after kick</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="7"/> - <source>Reconnected too fast</source> + <source>Kicked</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="8"/> - <source>Ping timeout</source> + <source>kicked</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="9"/> - <source>/info <player>: Show info about player</source> + <source>Reconnected too fast</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="10"/> - <source>/me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza'</source> + <source>Ping timeout</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="11"/> - <source>/rnd: Flip a virtual coin and reply with 'heads' or 'tails'</source> + <source>heads</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="12"/> - <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source> + <source>tails</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="13"/> - <source>/watch <id>: Watch a demo stored on the server with the given ID</source> + <source>This server does not support replays!</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="14"/> - <source>/help: Show chat command help</source> + <source>/info <player>: Show info about player</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="15"/> - <source>/callvote [arguments]: Start a vote</source> + <source>/me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza'</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="16"/> - <source>/vote <yes/no>: Vote 'yes' or 'no' for active vote</source> + <source>/rnd: Flip a virtual coin and reply with 'heads' or 'tails'</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="17"/> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> + <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="18"/> - <source>/delegate <player>: Surrender room control to player</source> + <source>/watch <id>: Watch a demo stored on the server with the given ID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="19"/> - <source>/maxteams <N>: Limit maximum number of teams to N</source> + <source>/help: Show chat command help</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="20"/> - <source>/global <message>: Send global chat message which can be seen by everyone on the server</source> + <source>/callvote [arguments]: Start a vote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="21"/> - <source>/registered_only: Toggle 'registered only' state. If enabled, only registered players can join server</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="22"/> - <source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source> + <source>/vote <yes/no>: Vote 'yes' or 'no' for active vote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="23"/> - <source>/save <parameter></source> + <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="24"/> - <source>/stats: Query server stats</source> + <source>/maxteams <N>: Limit maximum number of teams to N</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="25"/> - <source>/force <yes/no>: Force vote result for active vote</source> + <source>/global <message>: Send global chat message which can be seen by everyone on the server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="26"/> - <source>/fix: Force this room to stay open when it is empty</source> + <source>/registered_only: Toggle 'registered only' state. If enabled, only registered players can join server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="27"/> - <source>/unfix: Undo the /fix command</source> + <source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="28"/> - <source>/saveroom <file name>: Save room configuration into a file</source> + <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="29"/> - <source>/loadroom <file name>: Load room configuration from a file</source> + <source>/force <yes/no>: Force vote result for active vote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="30"/> - <source>/delete <parameter></source> + <source>/fix: Force this room to stay open when it is empty</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="31"/> + <source>/unfix: Undo the /fix command</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="36"/> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="32"/> + <location filename="../../../../QTfrontend/servermessages.h" line="37"/> <source>List of room chat commands:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="33"/> - <source>Commands for server admins only:</source> - <translation type="unfinished"></translation> - </message> - <message> <location filename="../../../../QTfrontend/servermessages.h" line="38"/> - <source>Unknown command:</source> + <source>Commands for server admins only:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="46"/> + <source>room</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="47"/> + <source>lobby</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="48"/> + <source>(playing)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="49"/> + <source>(spectating)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="50"/> + <source>Player is not online.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="51"/> + <source>The game can't be started with less than two clans!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="52"/> + <source>Empty config entry.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="53"/> + <source>Access denied.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="54"/> + <source>You're not the room master!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="55"/> + <source>Corrupted hedgehogs info!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="56"/> + <source>Too many teams!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="57"/> + <source>Too many hedgehogs!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="58"/> + <source>There's already a team with same name in the list.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="59"/> + <source>Joining not possible: Round is in progress.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="60"/> + <source>This room currently does not allow adding new teams.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="61"/> + <source>Error: The team you tried to remove does not exist.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="62"/> + <source>You can't remove a team you don't own.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="63"/> + <source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="64"/> + <source>A room with the same name already exists.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="65"/> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="66"/> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="67"/> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="68"/> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="69"/> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="70"/> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="72"/> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="73"/> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="75"/> + <source>/callvote kick: You need to specify a nickname.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="76"/> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="77"/> + <source>/callvote kick: No such user!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="78"/> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="79"/> + <source>/callvote map: No such map!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="80"/> + <source>/callvote pause: No game in progress!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="81"/> + <source>/callvote hedgehogs: Specify number from 1 to 8.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="82"/> + <source>/force: Please use 'yes' or 'no'.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="83"/> + <source>/vote: Please use 'yes' or 'no'.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="84"/> + <source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="85"/> + <source>No such room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="86"/> + <source>Room version incompatible to your Hedgewars version!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="87"/> + <source>Access denied. This room currently doesn't allow joining.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="88"/> + <source>Access denied. This room is for registered users only.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="89"/> + <source>You are banned from this room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="90"/> + <source>Nickname already provided.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="91"/> + <source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="92"/> + <source>Protocol already known.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="93"/> + <source>Bad number.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="94"/> + <source>There's no voting going on.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="95"/> + <source>You already have voted.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="96"/> + <source>Your vote has been counted.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="97"/> + <source>Voting closed.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="98"/> + <source>Pause toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="100"/> + <source>Voting expired.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="105"/> + <source>hedgehogs per team: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="106"/> + <source>You're the new room master!</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="39"/> - <source>Say '/help' in chat for a list of commands</source> + <source>Warning! Chat flood protection activated</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="22"/> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="32"/> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="33"/> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="34"/> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="35"/> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="40"/> - <source>room</source> + <source>Excess flood</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="41"/> - <source>lobby</source> + <source>Game messages flood detected - 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="42"/> - <source>(playing)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="43"/> - <source>(spectating)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="44"/> - <source>Player is not online.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="45"/> - <source>The game can't be started with less than two clans!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="46"/> - <source>Empty config entry.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="47"/> - <source>Access denied.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="48"/> - <source>You're not the room master!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="49"/> - <source>Corrupted hedgehogs info!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="50"/> - <source>Too many teams!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="51"/> - <source>Too many hedgehogs!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="52"/> - <source>There's already a team with same name in the list.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="53"/> - <source>Joining not possible: Round is in progress.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="54"/> - <source>This room currently does not allow adding new teams.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="55"/> - <source>Error: The team you tried to remove does not exist.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="56"/> - <source>You can't remove a team you don't own.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="57"/> - <source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="58"/> - <source>A room with the same name already exists.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="61"/> - <source>/callvote kick: You need to specify a nickname.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="62"/> - <source>/callvote kick: No such user!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="63"/> - <source>/callvote map: No such map!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="64"/> - <source>/callvote pause: No game in progress!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="65"/> - <source>/callvote hedgehogs: Specify number from 1 to 8.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="66"/> - <source>/force: Please use 'yes' or 'no'.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="67"/> - <source>/vote: Please use 'yes' or 'no'.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="68"/> - <source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="69"/> - <source>No such room.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="70"/> - <source>Room version incompatible to your Hedgewars version!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="71"/> - <source>Access denied. This room currently doesn't allow joining.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="72"/> - <source>Access denied. This room is for registered users only.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="73"/> - <source>You are banned from this room.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="74"/> - <source>Nickname already provided.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="75"/> - <source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="76"/> - <source>Protocol already known.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="77"/> - <source>Bad number.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="78"/> - <source>There's no voting going on.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="79"/> - <source>You already have voted.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="80"/> - <source>Your vote has been counted.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="81"/> - <source>Voting closed.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="82"/> - <source>Pause toggled.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="84"/> - <source>Voting expired.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="89"/> - <source>hedgehogs per team: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="34"/> - <source>Warning! Chat flood protection activated</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="35"/> - <source>Excess flood</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="36"/> - <source>Game messages flood detected - 1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="37"/> <source>Warning! Joins flood protection activated</source> <translation type="unfinished"></translation> </message> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_nl.ts --- a/share/hedgewars/Data/Locale/hedgewars_nl.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_nl.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1322,6 +1322,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -3999,10 +4003,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4023,10 +4023,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4043,18 +4039,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4067,14 +4051,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4106,5 +4082,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_pl.ts --- a/share/hedgewars/Data/Locale/hedgewars_pl.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_pl.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1521,6 +1521,10 @@ <numerusform><b>%1</b> zabili <b>%2</b> swoich jeży.</numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4733,7 +4737,7 @@ </message> <message> <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation>/greeting <wiadomość>: Ustaw wiadomość powitalną, która zostanie pokazana graczom dołączającym do pokoju</translation> + <translation type="vanished">/greeting <wiadomość>: Ustaw wiadomość powitalną, która zostanie pokazana graczom dołączającym do pokoju</translation> </message> <message> <source>/delegate <player>: Surrender room control to player</source> @@ -4757,7 +4761,7 @@ </message> <message> <source>/save <parameter></source> - <translation>/save <parametr></translation> + <translation type="vanished">/save <parametr></translation> </message> <message> <source>/stats: Query server stats</source> @@ -4777,15 +4781,15 @@ </message> <message> <source>/saveroom <file name>: Save room configuration into a file</source> - <translation>/saveroom <nazwa pliku>: Zapisz konfigurację pokoju do pliku</translation> + <translation type="vanished">/saveroom <nazwa pliku>: Zapisz konfigurację pokoju do pliku</translation> </message> <message> <source>/loadroom <file name>: Load room configuration from a file</source> - <translation>/loadroom <nazwa pliku>: Wczytaj konfigurację pokoju z pliku</translation> + <translation type="vanished">/loadroom <nazwa pliku>: Wczytaj konfigurację pokoju z pliku</translation> </message> <message> <source>/delete <parameter></source> - <translation>/delete <parametr></translation> + <translation type="vanished">/delete <parametr></translation> </message> <message> <source>List of lobby chat commands:</source> @@ -4801,11 +4805,11 @@ </message> <message> <source>Unknown command:</source> - <translation>Nieznana komenda:</translation> + <translation type="vanished">Nieznana komenda:</translation> </message> <message> <source>Say '/help' in chat for a list of commands</source> - <translation>Powiedz /help do czatu, by dostać listę komend</translation> + <translation type="vanished">Powiedz /help do czatu, by dostać listę komend</translation> </message> <message> <source>room</source> @@ -4839,5 +4843,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_pt_BR.ts --- a/share/hedgewars/Data/Locale/hedgewars_pt_BR.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_pt_BR.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1424,6 +1424,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4419,10 +4423,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4443,10 +4443,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4463,18 +4459,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4487,14 +4471,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4526,5 +4502,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_pt_PT.ts --- a/share/hedgewars/Data/Locale/hedgewars_pt_PT.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_pt_PT.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1432,6 +1432,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4509,10 +4513,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4533,10 +4533,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4553,18 +4549,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4577,14 +4561,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4616,5 +4592,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_ro.ts --- a/share/hedgewars/Data/Locale/hedgewars_ro.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_ro.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1364,6 +1364,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4145,10 +4149,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4169,10 +4169,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4189,18 +4185,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4213,14 +4197,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4252,5 +4228,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_ru.ts --- a/share/hedgewars/Data/Locale/hedgewars_ru.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_ru.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1481,6 +1481,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4460,10 +4464,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4484,10 +4484,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4504,18 +4500,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4528,14 +4512,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4567,5 +4543,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_sk.ts --- a/share/hedgewars/Data/Locale/hedgewars_sk.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_sk.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1420,6 +1420,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4405,10 +4409,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4429,10 +4429,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4449,18 +4445,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4473,14 +4457,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4512,5 +4488,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_sv.ts --- a/share/hedgewars/Data/Locale/hedgewars_sv.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_sv.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1371,6 +1371,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4225,10 +4229,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4249,10 +4249,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4269,18 +4265,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4293,14 +4277,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4332,5 +4308,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_tr_TR.ts --- a/share/hedgewars/Data/Locale/hedgewars_tr_TR.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_tr_TR.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1418,6 +1418,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4510,10 +4514,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4534,10 +4534,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4554,18 +4550,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4578,14 +4562,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4617,5 +4593,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_uk.ts --- a/share/hedgewars/Data/Locale/hedgewars_uk.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_uk.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1444,6 +1444,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4505,10 +4509,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4529,10 +4529,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4549,18 +4545,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4573,14 +4557,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4612,5 +4588,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_zh_CN.ts --- a/share/hedgewars/Data/Locale/hedgewars_zh_CN.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_zh_CN.ts Mon Sep 24 11:18:48 2018 -0400 @@ -652,45 +652,45 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2128"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2136"/> <source>Hedgewars Demo File</source> <comment>File Types</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2129"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2137"/> <source>Hedgewars Save File</source> <comment>File Types</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2190"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2198"/> <source>Demo name</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2190"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2198"/> <source>Demo name:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2264"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2272"/> <source>Unknown network error (possibly missing SSL library).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2268"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2276"/> <source>This feature requires an Internet connection, but you don't appear to be online (error code: %1).</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2273"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2281"/> <source>Internal error: Reply object is invalid.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="1814"/> - <location filename="../../../../QTfrontend/hwform.cpp" line="2198"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="1822"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2206"/> <source>Cannot save record to file %1</source> <translation>无法录入文件 %1</translation> </message> @@ -1022,29 +1022,29 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="559"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="579"/> <source>Server authentication error</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="871"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="891"/> <source>%1 *** %2 has left</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="878"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="898"/> <source>%1 *** %2 has left (message: "%3")</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="883"/> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="886"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="903"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="906"/> <source>%1 *** %2 has left (%3)</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="724"/> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="856"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="744"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="876"/> <source>%1 *** %2 has joined the room</source> <translation type="unfinished"></translation> </message> @@ -1053,12 +1053,12 @@ <translation type="vanished">退出原因:</translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="781"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="801"/> <source>Room destroyed</source> <translation>房间损坏</translation> </message> <message> - <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="538"/> + <location filename="../../../../QTfrontend/net/newnetclient.cpp" line="558"/> <source>You got kicked</source> <translation>被踢出</translation> </message> @@ -1551,7 +1551,7 @@ </message> <message> <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="76"/> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="166"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="167"/> <source>Health graph</source> <translation type="unfinished"></translation> </message> @@ -1571,28 +1571,28 @@ <translation type="unfinished">保存</translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="266"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="267"/> <source>The best shot award was won by <b>%1</b> with <b>%2</b> pts.</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="274"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="275"/> <source>The best killer is <b>%1</b> with <b>%2</b> kills in a turn.</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="281"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="282"/> <source>A total of <b>%1</b> hedgehog(s) were killed during this round.</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="359"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="356"/> <source>(%1 kill)</source> <extracomment>Number of kills in stats screen, written after the team name</extracomment> <translation type="unfinished"> @@ -1600,7 +1600,7 @@ </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="362"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="359"/> <source>(%1 %2)</source> <extracomment>For custom number of points in the stats screen, written after the team name. %1 is the number, %2 is the word. Example: “4 points”</extracomment> <translation type="unfinished"> @@ -1608,26 +1608,31 @@ </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="375"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="373"/> <source><b>%1</b> thought it's good to shoot their own hedgehogs for <b>%2</b> pts.</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="383"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="381"/> <source><b>%1</b> killed <b>%2</b> of their own hedgehogs.</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="391"/> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="389"/> <source><b>%1</b> was scared and skipped turn <b>%2</b> times.</source> <translation type="unfinished"> <numerusform></numerusform> </translation> </message> + <message> + <location filename="../../../../QTfrontend/ui/page/pagegamestats.cpp" line="406"/> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -1769,7 +1774,7 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="146"/> + <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="147"/> <source>Start fighting (requires at least 2 teams)</source> <translation type="unfinished"></translation> </message> @@ -2522,13 +2527,13 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="709"/> + <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="707"/> <source>%1 (%2%) - %3</source> <extracomment>Video encoding list entry. %1 = file name, %2 = percent complete, %3 = video operation type (e.g. “encoding”)</extracomment> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="712"/> + <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="710"/> <source>encoding</source> <translation type="unfinished"></translation> </message> @@ -2919,7 +2924,7 @@ <translation>城堡模式</translation> </message> <message> - <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="259"/> + <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="295"/> <source>Playing teams</source> <translation>玩家队伍</translation> </message> @@ -3359,12 +3364,12 @@ <translation type="vanished">服务器连接丢失</translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2281"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2289"/> <source>Not all players are ready</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2282"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2290"/> <source>Are you sure you want to start this game? Not all players are ready.</source> <translation type="unfinished"></translation> @@ -3397,24 +3402,24 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2168"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2176"/> <location filename="../../../../QTfrontend/ui/widget/feedbackdialog.cpp" line="418"/> <source>Hedgewars - Success</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2169"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2177"/> <source>All file associations have been set</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/hwform.cpp" line="2174"/> + <location filename="../../../../QTfrontend/hwform.cpp" line="2182"/> <source>File association failed.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/ui/page/pagenet.cpp" line="118"/> - <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="253"/> + <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="257"/> <source>Netgame - Error</source> <translation type="unfinished"></translation> </message> @@ -3424,7 +3429,7 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="254"/> + <location filename="../../../../QTfrontend/ui/page/pagenetgame.cpp" line="258"/> <source>Please enter room name</source> <translation type="unfinished"></translation> </message> @@ -3475,18 +3480,18 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="589"/> - <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="618"/> + <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="587"/> + <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="616"/> <source>Videos - Are you sure?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="590"/> + <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="588"/> <source>Do you really want to delete the video '%1'?</source> <translation type="unfinished"></translation> </message> <message numerus="yes"> - <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="619"/> + <location filename="../../../../QTfrontend/ui/page/pagevideos.cpp" line="617"/> <source>Do you really want to remove %1 file(s)?</source> <translation type="unfinished"> <numerusform></numerusform> @@ -3925,7 +3930,7 @@ <context> <name>TeamSelWidget</name> <message> - <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="264"/> + <location filename="../../../../QTfrontend/ui/widget/teamselect.cpp" line="300"/> <source>At least two teams are required to play!</source> <translation type="unfinished"></translation> </message> @@ -4708,447 +4713,527 @@ <context> <name>server</name> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="83"/> + <location filename="../../../../QTfrontend/servermessages.h" line="99"/> <source>New voting started</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="85"/> + <location filename="../../../../QTfrontend/servermessages.h" line="101"/> <source>kick</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="86"/> + <location filename="../../../../QTfrontend/servermessages.h" line="102"/> <source>map</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="87"/> + <location filename="../../../../QTfrontend/servermessages.h" line="103"/> <source>pause</source> <translation type="unfinished">暂停</translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="88"/> + <location filename="../../../../QTfrontend/servermessages.h" line="104"/> <source>new seed</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="59"/> + <location filename="../../../../QTfrontend/servermessages.h" line="71"/> <source>/maxteams: specify number from 2 to 8</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="60"/> + <location filename="../../../../QTfrontend/servermessages.h" line="43"/> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="44"/> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="45"/> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="74"/> <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="90"/> - <source>Nickname is already in use</source> - <translation type="unfinished"></translation> - </message> - <message> <location filename="../../../../QTfrontend/servermessages.h" line="2"/> - <source>No checker rights</source> + <source>Nickname is already in use</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="3"/> - <source>Authentication failed</source> + <source>This server only allows registered users to join.</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="4"/> - <source>60 seconds cooldown after kick</source> + <source>No checker rights</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="5"/> - <source>Kicked</source> + <source>Authentication failed</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="6"/> - <source>kicked</source> + <source>60 seconds cooldown after kick</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="7"/> - <source>Reconnected too fast</source> + <source>Kicked</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="8"/> - <source>Ping timeout</source> + <source>kicked</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="9"/> - <source>/info <player>: Show info about player</source> + <source>Reconnected too fast</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="10"/> - <source>/me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza'</source> + <source>Ping timeout</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="11"/> - <source>/rnd: Flip a virtual coin and reply with 'heads' or 'tails'</source> + <source>heads</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="12"/> - <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source> + <source>tails</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="13"/> - <source>/watch <id>: Watch a demo stored on the server with the given ID</source> + <source>This server does not support replays!</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="14"/> - <source>/help: Show chat command help</source> + <source>/info <player>: Show info about player</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="15"/> - <source>/callvote [arguments]: Start a vote</source> + <source>/me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza'</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="16"/> - <source>/vote <yes/no>: Vote 'yes' or 'no' for active vote</source> + <source>/rnd: Flip a virtual coin and reply with 'heads' or 'tails'</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="17"/> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> + <source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="18"/> - <source>/delegate <player>: Surrender room control to player</source> + <source>/watch <id>: Watch a demo stored on the server with the given ID</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="19"/> - <source>/maxteams <N>: Limit maximum number of teams to N</source> + <source>/help: Show chat command help</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="20"/> - <source>/global <message>: Send global chat message which can be seen by everyone on the server</source> + <source>/callvote [arguments]: Start a vote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="21"/> - <source>/registered_only: Toggle 'registered only' state. If enabled, only registered players can join server</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="22"/> - <source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source> + <source>/vote <yes/no>: Vote 'yes' or 'no' for active vote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="23"/> - <source>/save <parameter></source> + <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="24"/> - <source>/stats: Query server stats</source> + <source>/maxteams <N>: Limit maximum number of teams to N</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="25"/> - <source>/force <yes/no>: Force vote result for active vote</source> + <source>/global <message>: Send global chat message which can be seen by everyone on the server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="26"/> - <source>/fix: Force this room to stay open when it is empty</source> + <source>/registered_only: Toggle 'registered only' state. If enabled, only registered players can join server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="27"/> - <source>/unfix: Undo the /fix command</source> + <source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="28"/> - <source>/saveroom <file name>: Save room configuration into a file</source> + <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="29"/> - <source>/loadroom <file name>: Load room configuration from a file</source> + <source>/force <yes/no>: Force vote result for active vote</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="30"/> - <source>/delete <parameter></source> + <source>/fix: Force this room to stay open when it is empty</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="31"/> + <source>/unfix: Undo the /fix command</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="36"/> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="32"/> + <location filename="../../../../QTfrontend/servermessages.h" line="37"/> <source>List of room chat commands:</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../../../../QTfrontend/servermessages.h" line="33"/> - <source>Commands for server admins only:</source> - <translation type="unfinished"></translation> - </message> - <message> <location filename="../../../../QTfrontend/servermessages.h" line="38"/> - <source>Unknown command:</source> + <source>Commands for server admins only:</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="46"/> + <source>room</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="47"/> + <source>lobby</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="48"/> + <source>(playing)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="49"/> + <source>(spectating)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="50"/> + <source>Player is not online.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="51"/> + <source>The game can't be started with less than two clans!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="52"/> + <source>Empty config entry.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="53"/> + <source>Access denied.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="54"/> + <source>You're not the room master!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="55"/> + <source>Corrupted hedgehogs info!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="56"/> + <source>Too many teams!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="57"/> + <source>Too many hedgehogs!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="58"/> + <source>There's already a team with same name in the list.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="59"/> + <source>Joining not possible: Round is in progress.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="60"/> + <source>This room currently does not allow adding new teams.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="61"/> + <source>Error: The team you tried to remove does not exist.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="62"/> + <source>You can't remove a team you don't own.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="63"/> + <source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="64"/> + <source>A room with the same name already exists.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="65"/> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="66"/> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="67"/> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="68"/> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="69"/> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="70"/> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="72"/> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="73"/> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="75"/> + <source>/callvote kick: You need to specify a nickname.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="76"/> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="77"/> + <source>/callvote kick: No such user!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="78"/> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="79"/> + <source>/callvote map: No such map!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="80"/> + <source>/callvote pause: No game in progress!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="81"/> + <source>/callvote hedgehogs: Specify number from 1 to 8.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="82"/> + <source>/force: Please use 'yes' or 'no'.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="83"/> + <source>/vote: Please use 'yes' or 'no'.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="84"/> + <source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="85"/> + <source>No such room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="86"/> + <source>Room version incompatible to your Hedgewars version!</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="87"/> + <source>Access denied. This room currently doesn't allow joining.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="88"/> + <source>Access denied. This room is for registered users only.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="89"/> + <source>You are banned from this room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="90"/> + <source>Nickname already provided.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="91"/> + <source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="92"/> + <source>Protocol already known.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="93"/> + <source>Bad number.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="94"/> + <source>There's no voting going on.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="95"/> + <source>You already have voted.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="96"/> + <source>Your vote has been counted.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="97"/> + <source>Voting closed.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="98"/> + <source>Pause toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="100"/> + <source>Voting expired.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="105"/> + <source>hedgehogs per team: </source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="106"/> + <source>You're the new room master!</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="39"/> - <source>Say '/help' in chat for a list of commands</source> + <source>Warning! Chat flood protection activated</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="22"/> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="32"/> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="33"/> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="34"/> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="../../../../QTfrontend/servermessages.h" line="35"/> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="40"/> - <source>room</source> + <source>Excess flood</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="41"/> - <source>lobby</source> + <source>Game messages flood detected - 1</source> <translation type="unfinished"></translation> </message> <message> <location filename="../../../../QTfrontend/servermessages.h" line="42"/> - <source>(playing)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="43"/> - <source>(spectating)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="44"/> - <source>Player is not online.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="45"/> - <source>The game can't be started with less than two clans!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="46"/> - <source>Empty config entry.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="47"/> - <source>Access denied.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="48"/> - <source>You're not the room master!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="49"/> - <source>Corrupted hedgehogs info!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="50"/> - <source>Too many teams!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="51"/> - <source>Too many hedgehogs!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="52"/> - <source>There's already a team with same name in the list.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="53"/> - <source>Joining not possible: Round is in progress.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="54"/> - <source>This room currently does not allow adding new teams.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="55"/> - <source>Error: The team you tried to remove does not exist.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="56"/> - <source>You can't remove a team you don't own.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="57"/> - <source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="58"/> - <source>A room with the same name already exists.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="61"/> - <source>/callvote kick: You need to specify a nickname.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="62"/> - <source>/callvote kick: No such user!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="63"/> - <source>/callvote map: No such map!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="64"/> - <source>/callvote pause: No game in progress!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="65"/> - <source>/callvote hedgehogs: Specify number from 1 to 8.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="66"/> - <source>/force: Please use 'yes' or 'no'.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="67"/> - <source>/vote: Please use 'yes' or 'no'.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="68"/> - <source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="69"/> - <source>No such room.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="70"/> - <source>Room version incompatible to your Hedgewars version!</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="71"/> - <source>Access denied. This room currently doesn't allow joining.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="72"/> - <source>Access denied. This room is for registered users only.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="73"/> - <source>You are banned from this room.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="74"/> - <source>Nickname already provided.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="75"/> - <source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="76"/> - <source>Protocol already known.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="77"/> - <source>Bad number.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="78"/> - <source>There's no voting going on.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="79"/> - <source>You already have voted.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="80"/> - <source>Your vote has been counted.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="81"/> - <source>Voting closed.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="82"/> - <source>Pause toggled.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="84"/> - <source>Voting expired.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="89"/> - <source>hedgehogs per team: </source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="34"/> - <source>Warning! Chat flood protection activated</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="35"/> - <source>Excess flood</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="36"/> - <source>Game messages flood detected - 1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../../../../QTfrontend/servermessages.h" line="37"/> <source>Warning! Joins flood protection activated</source> <translation type="unfinished"></translation> </message> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/hedgewars_zh_TW.ts --- a/share/hedgewars/Data/Locale/hedgewars_zh_TW.ts Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/hedgewars_zh_TW.ts Mon Sep 24 11:18:48 2018 -0400 @@ -1415,6 +1415,10 @@ <numerusform></numerusform> </translation> </message> + <message> + <source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>PageInGame</name> @@ -4473,10 +4477,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/greeting <message>: Set greeting message to be shown to players who join the room</source> - <translation type="unfinished"></translation> - </message> - <message> <source>/delegate <player>: Surrender room control to player</source> <translation type="unfinished"></translation> </message> @@ -4497,10 +4497,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/save <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>/stats: Query server stats</source> <translation type="unfinished"></translation> </message> @@ -4517,18 +4513,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>/saveroom <file name>: Save room configuration into a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/loadroom <file name>: Load room configuration from a file</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>/delete <parameter></source> - <translation type="unfinished"></translation> - </message> - <message> <source>List of lobby chat commands:</source> <translation type="unfinished"></translation> </message> @@ -4541,14 +4525,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Unknown command:</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Say '/help' in chat for a list of commands</source> - <translation type="unfinished"></translation> - </message> - <message> <source>room</source> <translation type="unfinished"></translation> </message> @@ -4580,5 +4556,97 @@ <source>Kicked</source> <translation type="unfinished"></translation> </message> + <message> + <source>This server only allows registered users to join.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>heads</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>tails</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This server does not support replays!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/delete <config ID>: Delete a votable room configuration</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>'Registered only' state toggled.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Super power activated.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick yourself!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You can't kick the only other player!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>The player is not in your room.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>This player is protected from being kicked.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're not the room master or a server admin!</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're already the room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message cleared.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Greeting message set.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote kick: This is only allowed in rooms without a room master.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>/callvote map: No maps available.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>You're the new room master!</source> + <translation type="unfinished"></translation> + </message> </context> </TS> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/it.lua --- a/share/hedgewars/Data/Locale/it.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/it.lua Mon Sep 24 11:18:48 2018 -0400 @@ -11,8 +11,8 @@ -- ["%.1fs"] = "", -- Racer, TechRacer -- ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer -- ["+1 mine!"] = "", -- Tumbler +-- ["+1 point"] = "", -- Mutant -- ["-1 point"] = "", -- Mutant --- ["+1 point"] = "", -- Mutant ["-1 to anyone for a suicide"] = "-1 a chiunque per essersi suicidato", -- Mutant -- ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant -- ["+1 to the Mutant for killing anyone"] = "", -- Mutant @@ -1569,8 +1569,8 @@ ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "Una tribù era pacifica, andava a caccia e si allenanava, godendo dei piccoli piaceri della vita...", -- A_Classic_Fairytale:first_blood -- ["Oneye"] = "", -- portal -- ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02 +-- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant --- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer -- ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard -- ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01 @@ -1652,8 +1652,8 @@ -- ["Place weapon crates"] = "", -- HedgeEditor -- ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag + ["Planes Used"] = "Aerei usati", -- User_Mission_-_RCPlane_Challenge ["Planes Used:"] = "Aerei usati:", -- User_Mission_-_RCPlane_Challenge - ["Planes Used"] = "Aerei usati", -- User_Mission_-_RCPlane_Challenge -- ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos -- ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos @@ -1847,8 +1847,8 @@ -- ["Score points by killing other hedgehogs."] = "", -- Mutant -- ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant -- ["Scores: "] = "", -- Capture_the_Flag +-- ["Scores"] = "", -- Mutant -- ["Scores:"] = "", -- Mutant --- ["Scores"] = "", -- Mutant -- ["Scoring: "] = "", -- Mutant -- ["Script parameter examples:"] = "", -- Gravity -- ["%s (+%d)"] = "", -- Battalion @@ -2169,6 +2169,7 @@ -- ["Team Identity Mode"] = "", -- HedgeEditor -- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor -- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove +-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion -- ["Team Scores:"] = "", -- Control -- ["Team scores:"] = "", -- Space_Invasion -- ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2 @@ -2331,6 +2332,8 @@ -- ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood -- ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope -- ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen +-- ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion +-- ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion -- ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02 ["The Torment"] = "La tormenta", -- A_Classic_Fairytale:first_blood -- ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02 @@ -2401,6 +2404,7 @@ -- ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade -- ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade -- ["Thug #%d"] = "", -- A_Space_Adventure:death01 +-- ["Tie-breaking round %d"] = "", -- Space_Invasion -- ["Timbers"] = "", -- -- ["Time: %.1fs"] = "", -- Racer, TechRacer -- ["Time: %.3fs by %s"] = "", -- TrophyRace diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/ko.lua --- a/share/hedgewars/Data/Locale/ko.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/ko.lua Mon Sep 24 11:18:48 2018 -0400 @@ -11,8 +11,8 @@ -- ["%.1fs"] = "", -- Racer, TechRacer -- ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer -- ["+1 mine!"] = "", -- Tumbler +-- ["+1 point"] = "", -- Mutant -- ["-1 point"] = "", -- Mutant --- ["+1 point"] = "", -- Mutant -- ["-1 to anyone for a suicide"] = "", -- Mutant -- ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant -- ["+1 to the Mutant for killing anyone"] = "", -- Mutant @@ -713,8 +713,8 @@ -- ["Gear information hidden"] = "", -- HedgeEditor -- ["Gear information shown"] = "", -- HedgeEditor -- ["Gear Placement Tool"] = "", -- HedgeEditor +-- ["General information"] = "", -- Continental_supplies -- ["General information:"] = "", -- Continental_supplies --- ["General information"] = "", -- Continental_supplies -- ["General Lemon"] = "", -- A_Space_Adventure:fruit01 -- ["Generator"] = "", -- Construction_Mode -- ["Generator: Generates energy."] = "", -- Construction_Mode @@ -1054,8 +1054,8 @@ -- ["If you can get that crate fast enough, your beloved \"princess\" may go free."] = "", -- A_Classic_Fairytale:journey -- ["If you decide to help us, though, we will no longer need to find a new governor for the island."] = "", -- A_Classic_Fairytale:shadow -- ["If you don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement +-- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey --- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02 -- ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02 -- ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02 @@ -1569,8 +1569,8 @@ -- ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood -- ["Oneye"] = "", -- portal -- ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02 +-- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant --- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer -- ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard -- ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01 @@ -1653,8 +1653,8 @@ -- ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge +-- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge --- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos -- ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos -- ["Play with me!"] = "", -- A_Classic_Fairytale:shadow @@ -1847,8 +1847,8 @@ -- ["Score points by killing other hedgehogs."] = "", -- Mutant -- ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant -- ["Scores: "] = "", -- Capture_the_Flag +-- ["Scores"] = "", -- Mutant -- ["Scores:"] = "", -- Mutant --- ["Scores"] = "", -- Mutant -- ["Scoring: "] = "", -- Mutant -- ["Script parameter examples:"] = "", -- Gravity -- ["%s (+%d)"] = "", -- Battalion @@ -2169,6 +2169,7 @@ -- ["Team Identity Mode"] = "", -- HedgeEditor -- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor -- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove +-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion -- ["Team Scores:"] = "", -- Control -- ["Team scores:"] = "", -- Space_Invasion -- ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2 @@ -2331,6 +2332,8 @@ -- ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood -- ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope -- ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen +-- ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion +-- ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion -- ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02 -- ["The Torment"] = "", -- A_Classic_Fairytale:first_blood -- ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02 @@ -2401,6 +2404,7 @@ -- ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade -- ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade -- ["Thug #%d"] = "", -- A_Space_Adventure:death01 +-- ["Tie-breaking round %d"] = "", -- Space_Invasion -- ["Timbers"] = "", -- -- ["Time: %.1fs"] = "", -- Racer, TechRacer -- ["Time: %.3fs by %s"] = "", -- TrophyRace diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/lt.lua --- a/share/hedgewars/Data/Locale/lt.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/lt.lua Mon Sep 24 11:18:48 2018 -0400 @@ -11,8 +11,8 @@ -- ["%.1fs"] = "", -- Racer, TechRacer -- ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer -- ["+1 mine!"] = "", -- Tumbler +-- ["+1 point"] = "", -- Mutant -- ["-1 point"] = "", -- Mutant --- ["+1 point"] = "", -- Mutant -- ["-1 to anyone for a suicide"] = "", -- Mutant -- ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant -- ["+1 to the Mutant for killing anyone"] = "", -- Mutant @@ -713,8 +713,8 @@ -- ["Gear information hidden"] = "", -- HedgeEditor -- ["Gear information shown"] = "", -- HedgeEditor -- ["Gear Placement Tool"] = "", -- HedgeEditor +-- ["General information"] = "", -- Continental_supplies -- ["General information:"] = "", -- Continental_supplies --- ["General information"] = "", -- Continental_supplies -- ["General Lemon"] = "", -- A_Space_Adventure:fruit01 -- ["Generator"] = "", -- Construction_Mode -- ["Generator: Generates energy."] = "", -- Construction_Mode @@ -1054,8 +1054,8 @@ -- ["If you can get that crate fast enough, your beloved \"princess\" may go free."] = "", -- A_Classic_Fairytale:journey -- ["If you decide to help us, though, we will no longer need to find a new governor for the island."] = "", -- A_Classic_Fairytale:shadow -- ["If you don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement +-- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey --- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02 -- ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02 -- ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02 @@ -1569,8 +1569,8 @@ -- ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood -- ["Oneye"] = "", -- portal -- ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02 +-- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant --- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer -- ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard -- ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01 @@ -1653,8 +1653,8 @@ -- ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge +-- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge --- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos -- ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos -- ["Play with me!"] = "", -- A_Classic_Fairytale:shadow @@ -1847,8 +1847,8 @@ -- ["Score points by killing other hedgehogs."] = "", -- Mutant -- ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant -- ["Scores: "] = "", -- Capture_the_Flag +-- ["Scores"] = "", -- Mutant -- ["Scores:"] = "", -- Mutant --- ["Scores"] = "", -- Mutant -- ["Scoring: "] = "", -- Mutant -- ["Script parameter examples:"] = "", -- Gravity -- ["%s (+%d)"] = "", -- Battalion @@ -2169,6 +2169,7 @@ -- ["Team Identity Mode"] = "", -- HedgeEditor -- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor -- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove +-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion -- ["Team Scores:"] = "", -- Control -- ["Team scores:"] = "", -- Space_Invasion -- ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2 @@ -2331,6 +2332,8 @@ -- ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood -- ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope -- ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen +-- ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion +-- ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion -- ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02 -- ["The Torment"] = "", -- A_Classic_Fairytale:first_blood -- ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02 @@ -2401,6 +2404,7 @@ -- ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade -- ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade -- ["Thug #%d"] = "", -- A_Space_Adventure:death01 +-- ["Tie-breaking round %d"] = "", -- Space_Invasion -- ["Timbers"] = "", -- -- ["Time: %.1fs"] = "", -- Racer, TechRacer -- ["Time: %.3fs by %s"] = "", -- TrophyRace diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/pl.lua --- a/share/hedgewars/Data/Locale/pl.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/pl.lua Mon Sep 24 11:18:48 2018 -0400 @@ -11,8 +11,8 @@ ["%.1f seconds were remaining."] = "%.1f sekund pozostało.", -- Basic_Training_-_Bazooka ["+1 Grenade"] = "+1 granat", -- Basic_Training_-_Flying_Saucer ["+1 mine!"] = "+1 mina!", -- Tumbler + ["+1 point"] = "+1 punkt", -- Mutant ["-1 point"] = "-1 punkt", -- Mutant - ["+1 point"] = "+1 punkt", -- Mutant ["-1 to anyone for a suicide"] = "-1 dla każdego za samobójstwo", -- Mutant ["+1 to the Bottom Feeder for killing anyone"] = "+1 dla Pasożyta za zabicie kogokolwiek", -- Mutant ["+1 to the Mutant for killing anyone"] = "+1 dla Mutanta za zabicie kogokolwiek", -- Mutant @@ -1570,8 +1570,8 @@ ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "Nasze plemię było pokojowe, spędzając swój czas na polowaniu i treningu, ciesząc się z małych przyjemności w życiu...", -- A_Classic_Fairytale:first_blood ["Oneye"] = "Jednooki", -- portal ["Only Hog Solo can be trusted with the crate."] = "Skrzynia może być powierzona tylko Hogowi Solo.", -- A_Space_Adventure:fruit02 + ["Only one hog per team allowed! Excess hogs will be removed"] = "Dozwolony tylko jeden jeż na drużynę! Nadmiarowe jeże będą usunięte", -- Mutant ["Only one hog per team allowed! Excess hogs will be removed."] = "Dozwolony tylko jeden jeż na drużynę! Nadmiarowe jeże będą usunięte.", -- Mutant - ["Only one hog per team allowed! Excess hogs will be removed"] = "Dozwolony tylko jeden jeż na drużynę! Nadmiarowe jeże będą usunięte", -- Mutant ["Only the best pilots can master the following stunts."] = "Tylko najlepsi piloci mogą opanować następujące wyczyny.", -- Basic_Training_-_Flying_Saucer ["Only two clans allowed! Excess hedgehogs will be removed."] = "Tylko dwa klany dozwolone! Nadmiarowe jeże będą usunięte.", -- CTF_Blizzard ["On the Ice Planet, where ice rules ..."] = "Na Lodowej Planecie, gdzie rządzi lód...", -- A_Space_Adventure:ice01 @@ -1849,8 +1849,8 @@ ["Score points by killing other hedgehogs (see below)."] = "Zdobądź punkty, zabijając inne jeże (zobacz niżej).", -- Mutant ["Score points by killing other hedgehogs."] = "Zdobądź punkty zabijając inne jeże.", -- Mutant ["Scores: "] = "Wyniki: ", -- Capture_the_Flag + ["Scores"] = "Wyniki", -- Mutant ["Scores:"] = "Wyniki:", -- Mutant - ["Scores"] = "Wyniki", -- Mutant ["Scoring: "] = "Wynki: ", -- Mutant ["Script parameter examples:"] = "Przykłady parametrów skryptu:", -- Gravity -- ["%s (%d)"] = "", -- Continental_supplies @@ -2171,6 +2171,7 @@ ["Team Identity Mode"] = "Tryb Tożsamości Drużyny", -- HedgeEditor ["TEAM IDENTITY MODE"] = "TRYB TOŻSAMOŚCI DRUŻYNY", -- HedgeEditor ["Team of Hearts"] = "Drużyna Serc", -- Challenge_-_Speed_Shoppa_-_Hedgelove +-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion ["Team Scores:"] = "Wyniki drużyn:", -- Control ["Team scores:"] = "Wyniki drużyn:", -- Space_Invasion ["Teamwork 2"] = "Praca zespołowa 2", -- User_Mission_-_Teamwork_2 @@ -2333,6 +2334,8 @@ -- ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood ["The targets will guide you through the training."] = "Cele poprowadzą cię przez trening.", -- Basic_Training_-_Rope ["The team continued their quest of finding the rest of the tribe."] = "Drużyna kontynuowała swoje zadanie odnalezienia reszty plemienia.", -- A_Classic_Fairytale:queen +-- ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion +-- ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "Czas, który ci pozostanie po dotarciu do niebieskiego jeża, zosanie dodany do następnej tury.", -- A_Space_Adventure:moon02 ["The Torment"] = "Udręka", -- A_Classic_Fairytale:first_blood ["The truth about Professor Hogevil"] = "Prawda o Profesorze Jeżozło", -- A_Space_Adventure:moon02 @@ -2403,6 +2406,7 @@ ["Throw a grenade to destroy the target!"] = "Rzuć granatem, by zniszczyć cel!", -- Basic_Training_-_Grenade ["Throw some grenades to destroy the targets!"] = "Rzuć trochę granatów, by zniszczyć cele!", -- Basic_Training_-_Grenade ["Thug #%d"] = "Zbir #%d", -- A_Space_Adventure:death01 +-- ["Tie-breaking round %d"] = "", -- Space_Invasion ["Timbers"] = "Drewna", ["Time: %.1fs"] = "Czas: %.1fs", -- Racer, TechRacer ["Time: %.3fs by %s"] = "Czas: %.3fs (%s)", -- TrophyRace diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/pt_BR.lua --- a/share/hedgewars/Data/Locale/pt_BR.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/pt_BR.lua Mon Sep 24 11:18:48 2018 -0400 @@ -11,8 +11,8 @@ -- ["%.1fs"] = "", -- Racer, TechRacer -- ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer -- ["+1 mine!"] = "", -- Tumbler +-- ["+1 point"] = "", -- Mutant -- ["-1 point"] = "", -- Mutant --- ["+1 point"] = "", -- Mutant -- ["-1 to anyone for a suicide"] = "", -- Mutant -- ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant -- ["+1 to the Mutant for killing anyone"] = "", -- Mutant @@ -713,8 +713,8 @@ -- ["Gear information hidden"] = "", -- HedgeEditor -- ["Gear information shown"] = "", -- HedgeEditor -- ["Gear Placement Tool"] = "", -- HedgeEditor +-- ["General information"] = "", -- Continental_supplies -- ["General information:"] = "", -- Continental_supplies --- ["General information"] = "", -- Continental_supplies -- ["General Lemon"] = "", -- A_Space_Adventure:fruit01 -- ["Generator"] = "", -- Construction_Mode -- ["Generator: Generates energy."] = "", -- Construction_Mode @@ -1054,8 +1054,8 @@ -- ["If you can get that crate fast enough, your beloved \"princess\" may go free."] = "", -- A_Classic_Fairytale:journey -- ["If you decide to help us, though, we will no longer need to find a new governor for the island."] = "", -- A_Classic_Fairytale:shadow -- ["If you don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement +-- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey --- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02 -- ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02 -- ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02 @@ -1569,8 +1569,8 @@ -- ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood -- ["Oneye"] = "", -- portal -- ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02 +-- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant --- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer -- ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard -- ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01 @@ -1653,8 +1653,8 @@ -- ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge +-- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge --- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos -- ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos -- ["Play with me!"] = "", -- A_Classic_Fairytale:shadow @@ -1847,8 +1847,8 @@ -- ["Score points by killing other hedgehogs."] = "", -- Mutant -- ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant -- ["Scores: "] = "", -- Capture_the_Flag +-- ["Scores"] = "", -- Mutant -- ["Scores:"] = "", -- Mutant --- ["Scores"] = "", -- Mutant -- ["Scoring: "] = "", -- Mutant -- ["Script parameter examples:"] = "", -- Gravity -- ["%s (+%d)"] = "", -- Battalion @@ -2169,6 +2169,7 @@ -- ["Team Identity Mode"] = "", -- HedgeEditor -- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor -- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove +-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion -- ["Team Scores:"] = "", -- Control -- ["Team scores:"] = "", -- Space_Invasion -- ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2 @@ -2331,6 +2332,8 @@ -- ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood -- ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope -- ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen +-- ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion +-- ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion -- ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02 -- ["The Torment"] = "", -- A_Classic_Fairytale:first_blood -- ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02 @@ -2401,6 +2404,7 @@ -- ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade -- ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade -- ["Thug #%d"] = "", -- A_Space_Adventure:death01 +-- ["Tie-breaking round %d"] = "", -- Space_Invasion -- ["Timbers"] = "", -- -- ["Time: %.1fs"] = "", -- Racer, TechRacer -- ["Time: %.3fs by %s"] = "", -- TrophyRace diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/pt_PT.lua --- a/share/hedgewars/Data/Locale/pt_PT.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/pt_PT.lua Mon Sep 24 11:18:48 2018 -0400 @@ -11,8 +11,8 @@ -- ["%.1fs"] = "", -- Racer, TechRacer -- ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer -- ["+1 mine!"] = "", -- Tumbler +-- ["+1 point"] = "", -- Mutant -- ["-1 point"] = "", -- Mutant --- ["+1 point"] = "", -- Mutant -- ["-1 to anyone for a suicide"] = "", -- Mutant -- ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant -- ["+1 to the Mutant for killing anyone"] = "", -- Mutant @@ -713,8 +713,8 @@ -- ["Gear information hidden"] = "", -- HedgeEditor -- ["Gear information shown"] = "", -- HedgeEditor -- ["Gear Placement Tool"] = "", -- HedgeEditor +-- ["General information"] = "", -- Continental_supplies -- ["General information:"] = "", -- Continental_supplies --- ["General information"] = "", -- Continental_supplies -- ["General Lemon"] = "", -- A_Space_Adventure:fruit01 -- ["Generator"] = "", -- Construction_Mode -- ["Generator: Generates energy."] = "", -- Construction_Mode @@ -1569,8 +1569,8 @@ -- ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood -- ["Oneye"] = "", -- portal -- ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02 +-- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant --- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer -- ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard -- ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01 @@ -1653,8 +1653,8 @@ -- ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge +-- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge --- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos -- ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos -- ["Play with me!"] = "", -- A_Classic_Fairytale:shadow @@ -1847,8 +1847,8 @@ -- ["Score points by killing other hedgehogs."] = "", -- Mutant -- ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant -- ["Scores: "] = "", -- Capture_the_Flag +-- ["Scores"] = "", -- Mutant -- ["Scores:"] = "", -- Mutant --- ["Scores"] = "", -- Mutant -- ["Scoring: "] = "", -- Mutant -- ["Script parameter examples:"] = "", -- Gravity -- ["%s (+%d)"] = "", -- Battalion @@ -2169,6 +2169,7 @@ -- ["Team Identity Mode"] = "", -- HedgeEditor -- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor -- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove +-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion -- ["Team Scores:"] = "", -- Control -- ["Team scores:"] = "", -- Space_Invasion -- ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2 @@ -2331,6 +2332,8 @@ -- ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood -- ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope -- ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen +-- ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion +-- ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion -- ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02 -- ["The Torment"] = "", -- A_Classic_Fairytale:first_blood -- ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02 @@ -2401,6 +2404,7 @@ -- ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade -- ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade -- ["Thug #%d"] = "", -- A_Space_Adventure:death01 +-- ["Tie-breaking round %d"] = "", -- Space_Invasion -- ["Timbers"] = "", -- -- ["Time: %.1fs"] = "", -- Racer, TechRacer -- ["Time: %.3fs by %s"] = "", -- TrophyRace diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/ru.lua --- a/share/hedgewars/Data/Locale/ru.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/ru.lua Mon Sep 24 11:18:48 2018 -0400 @@ -11,8 +11,8 @@ -- ["%.1fs"] = "", -- Racer, TechRacer -- ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer -- ["+1 mine!"] = "", -- Tumbler +-- ["+1 point"] = "", -- Mutant -- ["-1 point"] = "", -- Mutant --- ["+1 point"] = "", -- Mutant ["-1 to anyone for a suicide"] = "-1 за самоубийство", -- Mutant -- ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant -- ["+1 to the Mutant for killing anyone"] = "", -- Mutant @@ -713,8 +713,8 @@ -- ["Gear information hidden"] = "", -- HedgeEditor -- ["Gear information shown"] = "", -- HedgeEditor -- ["Gear Placement Tool"] = "", -- HedgeEditor +-- ["General information"] = "", -- Continental_supplies -- ["General information:"] = "", -- Continental_supplies --- ["General information"] = "", -- Continental_supplies -- ["General Lemon"] = "", -- A_Space_Adventure:fruit01 -- ["Generator: Generates energy."] = "", -- Construction_Mode ["Generator"] = "Генератор", -- Construction_Mode @@ -1053,8 +1053,8 @@ -- ["If you can get that crate fast enough, your beloved \"princess\" may go free."] = "", -- A_Classic_Fairytale:journey -- ["If you decide to help us, though, we will no longer need to find a new governor for the island."] = "", -- A_Classic_Fairytale:shadow -- ["If you don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement +-- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey --- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02 -- ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02 -- ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02 @@ -1568,8 +1568,8 @@ -- ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood -- ["Oneye"] = "", -- portal -- ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02 +-- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant --- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer -- ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard -- ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01 @@ -1844,8 +1844,8 @@ -- ["Score points by killing other hedgehogs."] = "", -- Mutant -- ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant -- ["Scores: "] = "", -- Capture_the_Flag +-- ["Scores"] = "", -- Mutant -- ["Scores:"] = "", -- Mutant --- ["Scores"] = "", -- Mutant -- ["Scoring: "] = "", -- Mutant -- ["Script parameter examples:"] = "", -- Gravity -- ["%s (+%d)"] = "", -- Battalion @@ -2166,6 +2166,7 @@ -- ["Team Identity Mode"] = "", -- HedgeEditor -- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor ["Team of Hearts"] = "Команда сердец", -- Challenge_-_Speed_Shoppa_-_Hedgelove +-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion -- ["Team Scores:"] = "", -- Control -- ["Team scores:"] = "", -- Space_Invasion -- ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2 @@ -2327,6 +2328,8 @@ -- ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood -- ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope -- ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen +-- ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion +-- ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion -- ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02 -- ["The Torment"] = "", -- A_Classic_Fairytale:first_blood -- ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02 @@ -2397,6 +2400,7 @@ -- ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade -- ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade -- ["Thug #%d"] = "", -- A_Space_Adventure:death01 +-- ["Tie-breaking round %d"] = "", -- Space_Invasion -- ["Timbers"] = "", -- -- ["Time: %.1fs"] = "", -- Racer, TechRacer -- ["Time: %.3fs by %s"] = "", -- TrophyRace diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/sk.lua --- a/share/hedgewars/Data/Locale/sk.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/sk.lua Mon Sep 24 11:18:48 2018 -0400 @@ -11,8 +11,8 @@ -- ["%.1fs"] = "", -- Racer, TechRacer -- ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer -- ["+1 mine!"] = "", -- Tumbler +-- ["+1 point"] = "", -- Mutant -- ["-1 point"] = "", -- Mutant --- ["+1 point"] = "", -- Mutant -- ["-1 to anyone for a suicide"] = "", -- Mutant -- ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant -- ["+1 to the Mutant for killing anyone"] = "", -- Mutant @@ -713,8 +713,8 @@ -- ["Gear information hidden"] = "", -- HedgeEditor -- ["Gear information shown"] = "", -- HedgeEditor -- ["Gear Placement Tool"] = "", -- HedgeEditor +-- ["General information"] = "", -- Continental_supplies -- ["General information:"] = "", -- Continental_supplies --- ["General information"] = "", -- Continental_supplies -- ["General Lemon"] = "", -- A_Space_Adventure:fruit01 -- ["Generator"] = "", -- Construction_Mode -- ["Generator: Generates energy."] = "", -- Construction_Mode @@ -1054,8 +1054,8 @@ -- ["If you can get that crate fast enough, your beloved \"princess\" may go free."] = "", -- A_Classic_Fairytale:journey -- ["If you decide to help us, though, we will no longer need to find a new governor for the island."] = "", -- A_Classic_Fairytale:shadow -- ["If you don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement +-- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey --- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02 -- ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02 -- ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02 @@ -1569,8 +1569,8 @@ -- ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood -- ["Oneye"] = "", -- portal -- ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02 +-- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant --- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer -- ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard -- ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01 @@ -1653,8 +1653,8 @@ -- ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge +-- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge --- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos -- ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos -- ["Play with me!"] = "", -- A_Classic_Fairytale:shadow @@ -1847,8 +1847,8 @@ -- ["Score points by killing other hedgehogs."] = "", -- Mutant -- ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant -- ["Scores: "] = "", -- Capture_the_Flag +-- ["Scores"] = "", -- Mutant -- ["Scores:"] = "", -- Mutant --- ["Scores"] = "", -- Mutant -- ["Scoring: "] = "", -- Mutant -- ["Script parameter examples:"] = "", -- Gravity -- ["%s (+%d)"] = "", -- Battalion @@ -2170,6 +2170,7 @@ -- ["Team Identity Mode"] = "", -- HedgeEditor -- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor -- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove +-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion -- ["Team Scores:"] = "", -- Control -- ["Team scores:"] = "", -- Space_Invasion -- ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2 @@ -2332,6 +2333,8 @@ -- ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood -- ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope -- ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen +-- ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion +-- ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion -- ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02 -- ["The Torment"] = "", -- A_Classic_Fairytale:first_blood -- ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02 @@ -2402,6 +2405,7 @@ -- ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade -- ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade -- ["Thug #%d"] = "", -- A_Space_Adventure:death01 +-- ["Tie-breaking round %d"] = "", -- Space_Invasion -- ["Timbers"] = "", -- -- ["Time: %.1fs"] = "", -- Racer, TechRacer -- ["Time: %.3fs by %s"] = "", -- TrophyRace diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/stub.lua --- a/share/hedgewars/Data/Locale/stub.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/stub.lua Mon Sep 24 11:18:48 2018 -0400 @@ -8,8 +8,8 @@ -- ["%.1fs"] = "", -- Racer, TechRacer -- ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer -- ["+1 mine!"] = "", -- Tumbler +-- ["+1 point"] = "", -- Mutant -- ["-1 point"] = "", -- Mutant --- ["+1 point"] = "", -- Mutant -- ["-1 to anyone for a suicide"] = "", -- Mutant -- ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant -- ["+1 to the Mutant for killing anyone"] = "", -- Mutant @@ -2030,6 +2030,7 @@ -- ["Team Identity Mode"] = "", -- HedgeEditor -- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor -- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove +-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion -- ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2 -- ["Teamwork"] = "", -- User_Mission_-_Teamwork -- ["Team Zook"] = "", -- Target_Practice_-_Bazooka_easy, Target_Practice_-_Bazooka_hard @@ -2177,6 +2178,8 @@ -- ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood -- ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope -- ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen +-- ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion +-- ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion -- ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02 -- ["The Torment"] = "", -- A_Classic_Fairytale:first_blood -- ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02 @@ -2242,6 +2245,7 @@ -- ["Throw a baseball at your foes|and send them flying!"] = "", -- Knockball -- ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade -- ["Thug #%d"] = "", -- A_Space_Adventure:death01 +-- ["Tie-breaking round %d"] = "", -- Space_Invasion -- ["Timbers"] = "", -- -- ["Time: %.1fs"] = "", -- Racer, TechRacer -- ["Time: %.3fs by %s"] = "", -- TrophyRace diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/sv.lua --- a/share/hedgewars/Data/Locale/sv.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/sv.lua Mon Sep 24 11:18:48 2018 -0400 @@ -1,6 +1,6 @@ locale = { + ["!!!"] = "!!!", -- ["..."] = "", - ["!!!"] = "!!!", -- ["011101000"] = "", -- A_Classic_Fairytale:dragon -- ["011101001"] = "", -- A_Classic_Fairytale:backstab, A_Classic_Fairytale:dragon, A_Classic_Fairytale:enemy, A_Classic_Fairytale:family, A_Classic_Fairytale:journey, A_Classic_Fairytale:queen, A_Classic_Fairytale:shadow, A_Classic_Fairytale:united -- ["10 weapon schemes"] = "", -- Continental_supplies @@ -11,8 +11,8 @@ -- ["%.1fs"] = "", -- Racer, TechRacer -- ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer -- ["+1 mine!"] = "", -- Tumbler +-- ["+1 point"] = "", -- Mutant -- ["-1 point"] = "", -- Mutant --- ["+1 point"] = "", -- Mutant -- ["-1 to anyone for a suicide"] = "", -- Mutant -- ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant -- ["+1 to the Mutant for killing anyone"] = "", -- Mutant @@ -713,8 +713,8 @@ -- ["Gear information hidden"] = "", -- HedgeEditor -- ["Gear information shown"] = "", -- HedgeEditor -- ["Gear Placement Tool"] = "", -- HedgeEditor +-- ["General information"] = "", -- Continental_supplies -- ["General information:"] = "", -- Continental_supplies --- ["General information"] = "", -- Continental_supplies -- ["General Lemon"] = "", -- A_Space_Adventure:fruit01 -- ["Generator"] = "", -- Construction_Mode -- ["Generator: Generates energy."] = "", -- Construction_Mode @@ -1054,8 +1054,8 @@ -- ["If you can get that crate fast enough, your beloved \"princess\" may go free."] = "", -- A_Classic_Fairytale:journey -- ["If you decide to help us, though, we will no longer need to find a new governor for the island."] = "", -- A_Classic_Fairytale:shadow -- ["If you don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement +-- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey --- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02 -- ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02 -- ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02 @@ -1569,8 +1569,8 @@ -- ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood -- ["Oneye"] = "", -- portal -- ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02 +-- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant --- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer -- ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard -- ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01 @@ -1653,8 +1653,8 @@ -- ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge +-- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge --- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos -- ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos -- ["Play with me!"] = "", -- A_Classic_Fairytale:shadow @@ -1847,8 +1847,8 @@ -- ["Score points by killing other hedgehogs."] = "", -- Mutant -- ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant -- ["Scores: "] = "", -- Capture_the_Flag +-- ["Scores"] = "", -- Mutant -- ["Scores:"] = "", -- Mutant --- ["Scores"] = "", -- Mutant -- ["Scoring: "] = "", -- Mutant -- ["Script parameter examples:"] = "", -- Gravity -- ["%s (+%d)"] = "", -- Battalion @@ -2169,6 +2169,7 @@ -- ["Team Identity Mode"] = "", -- HedgeEditor -- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor -- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove +-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion -- ["Team Scores:"] = "", -- Control -- ["Team scores:"] = "", -- Space_Invasion -- ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2 @@ -2331,6 +2332,8 @@ -- ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood -- ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope -- ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen +-- ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion +-- ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion -- ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02 -- ["The Torment"] = "", -- A_Classic_Fairytale:first_blood -- ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02 @@ -2401,6 +2404,7 @@ -- ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade -- ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade -- ["Thug #%d"] = "", -- A_Space_Adventure:death01 +-- ["Tie-breaking round %d"] = "", -- Space_Invasion -- ["Timbers"] = "", -- -- ["Time: %.1fs"] = "", -- Racer, TechRacer -- ["Time: %.3fs by %s"] = "", -- TrophyRace diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/tips_de.xml --- a/share/hedgewars/Data/Locale/tips_de.xml Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/tips_de.xml Mon Sep 24 11:18:48 2018 -0400 @@ -80,6 +80,7 @@ <tip>Denk an den Wind, denn Flammen und einige Waffen werden von ihm beeinflusst.</tip> <tip>Benutze einen Schweißbrenner, um Igel und Minen mit einem langen Zeitzünder zu schubsen.</tip> <tip>Wenn du mit einem Schweißbrenner in ein Pulverfass rennst, wirst du eine explosive Überraschung erleben.</tip> + <tip>Gib »/help« im Chat für eine Liste von Chatbefehlen ein. Chatbefehle bieten Zugriff auf ein paar besondere Funktionen wie Spott oder Abstimmungen.</tip> <windows-only> <tip>Du kannst deine Hedgewars-Einstellungsdateien unter »Eigene Dokumente\Hedgewars« finden. Erstelle Backups oder nimm die Dateien mit, aber bitte bearbeite sie nicht von Hand.</tip> </windows-only> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/tips_en.xml --- a/share/hedgewars/Data/Locale/tips_en.xml Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/tips_en.xml Mon Sep 24 11:18:48 2018 -0400 @@ -79,6 +79,7 @@ <tip>Mind the wind, because flames and some projectiles are affected by wind.</tip> <tip>Use a blow torch to push hedgehogs and mines with a long timer.</tip> <tip>Running with a blow torch into a barrel is an explosive recipe for disaster!</tip> + <tip>Enter “/help” in chat for a list of chat commands. Chat commands give you access to some special features like taunts or voting.</tip> <windows-only> <tip>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.</tip> </windows-only> diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/tr.lua --- a/share/hedgewars/Data/Locale/tr.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/tr.lua Mon Sep 24 11:18:48 2018 -0400 @@ -11,8 +11,8 @@ -- ["%.1fs"] = "", -- Racer, TechRacer -- ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer -- ["+1 mine!"] = "", -- Tumbler +-- ["+1 point"] = "", -- Mutant -- ["-1 point"] = "", -- Mutant --- ["+1 point"] = "", -- Mutant -- ["-1 to anyone for a suicide"] = "", -- Mutant -- ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant -- ["+1 to the Mutant for killing anyone"] = "", -- Mutant @@ -713,8 +713,8 @@ -- ["Gear information hidden"] = "", -- HedgeEditor -- ["Gear information shown"] = "", -- HedgeEditor -- ["Gear Placement Tool"] = "", -- HedgeEditor +-- ["General information"] = "", -- Continental_supplies -- ["General information:"] = "", -- Continental_supplies --- ["General information"] = "", -- Continental_supplies -- ["General Lemon"] = "", -- A_Space_Adventure:fruit01 -- ["Generator"] = "", -- Construction_Mode -- ["Generator: Generates energy."] = "", -- Construction_Mode @@ -1054,8 +1054,8 @@ -- ["If you can get that crate fast enough, your beloved \"princess\" may go free."] = "", -- A_Classic_Fairytale:journey -- ["If you decide to help us, though, we will no longer need to find a new governor for the island."] = "", -- A_Classic_Fairytale:shadow -- ["If you don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement +-- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey --- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02 -- ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02 -- ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02 @@ -1570,8 +1570,8 @@ -- ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood -- ["Oneye"] = "", -- portal -- ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02 +-- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant --- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer -- ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard -- ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01 @@ -1654,8 +1654,8 @@ -- ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge +-- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge --- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos -- ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos -- ["Play with me!"] = "", -- A_Classic_Fairytale:shadow @@ -1849,8 +1849,8 @@ -- ["Score points by killing other hedgehogs."] = "", -- Mutant -- ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant -- ["Scores: "] = "", -- Capture_the_Flag +-- ["Scores"] = "", -- Mutant -- ["Scores:"] = "", -- Mutant --- ["Scores"] = "", -- Mutant -- ["Scoring: "] = "", -- Mutant -- ["Script parameter examples:"] = "", -- Gravity -- ["%s (+%d)"] = "", -- Battalion @@ -2172,6 +2172,7 @@ -- ["Team Identity Mode"] = "", -- HedgeEditor -- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor -- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove +-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion -- ["Team Scores:"] = "", -- Control -- ["Team scores:"] = "", -- Space_Invasion -- ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2 @@ -2334,6 +2335,8 @@ -- ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood -- ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope -- ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen +-- ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion +-- ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion -- ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02 -- ["The Torment"] = "", -- A_Classic_Fairytale:first_blood -- ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02 @@ -2404,6 +2407,7 @@ -- ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade -- ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade -- ["Thug #%d"] = "", -- A_Space_Adventure:death01 +-- ["Tie-breaking round %d"] = "", -- Space_Invasion -- ["Timbers"] = "", -- -- ["Time: %.1fs"] = "", -- Racer, TechRacer -- ["Time: %.3fs by %s"] = "", -- TrophyRace diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/uk.lua --- a/share/hedgewars/Data/Locale/uk.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/uk.lua Mon Sep 24 11:18:48 2018 -0400 @@ -10,8 +10,8 @@ -- ["%.1fs"] = "", -- Racer, TechRacer -- ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer -- ["+1 mine!"] = "", -- Tumbler +-- ["+1 point"] = "", -- Mutant -- ["-1 point"] = "", -- Mutant --- ["+1 point"] = "", -- Mutant -- ["-1 to anyone for a suicide"] = "", -- Mutant -- ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant -- ["+1 to the Mutant for killing anyone"] = "", -- Mutant @@ -712,8 +712,8 @@ -- ["Gear information hidden"] = "", -- HedgeEditor -- ["Gear information shown"] = "", -- HedgeEditor -- ["Gear Placement Tool"] = "", -- HedgeEditor +-- ["General information"] = "", -- Continental_supplies -- ["General information:"] = "", -- Continental_supplies --- ["General information"] = "", -- Continental_supplies -- ["General Lemon"] = "", -- A_Space_Adventure:fruit01 -- ["Generator"] = "", -- Construction_Mode -- ["Generator: Generates energy."] = "", -- Construction_Mode @@ -1053,8 +1053,8 @@ -- ["If you can get that crate fast enough, your beloved \"princess\" may go free."] = "", -- A_Classic_Fairytale:journey -- ["If you decide to help us, though, we will no longer need to find a new governor for the island."] = "", -- A_Classic_Fairytale:shadow -- ["If you don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement +-- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey --- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02 -- ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02 -- ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02 @@ -1568,8 +1568,8 @@ -- ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood -- ["Oneye"] = "", -- portal -- ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02 +-- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant --- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer -- ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard -- ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01 @@ -1652,8 +1652,8 @@ -- ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge +-- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge --- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos -- ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos ["Play with me!"] = "Зіграй зі мною!", -- A_Classic_Fairytale:shadow @@ -1846,8 +1846,8 @@ -- ["Score points by killing other hedgehogs."] = "", -- Mutant -- ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant -- ["Scores: "] = "", -- Capture_the_Flag +-- ["Scores"] = "", -- Mutant -- ["Scores:"] = "", -- Mutant --- ["Scores"] = "", -- Mutant -- ["Scoring: "] = "", -- Mutant -- ["Script parameter examples:"] = "", -- Gravity -- ["%s (+%d)"] = "", -- Battalion @@ -2168,6 +2168,7 @@ -- ["Team Identity Mode"] = "", -- HedgeEditor -- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor -- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove +-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion -- ["Team Scores:"] = "", -- Control -- ["Team scores:"] = "", -- Space_Invasion -- ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2 @@ -2330,6 +2331,8 @@ -- ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood -- ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope -- ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen +-- ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion +-- ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion -- ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02 -- ["The Torment"] = "", -- A_Classic_Fairytale:first_blood -- ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02 @@ -2400,6 +2403,7 @@ -- ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade -- ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade -- ["Thug #%d"] = "", -- A_Space_Adventure:death01 +-- ["Tie-breaking round %d"] = "", -- Space_Invasion -- ["Timbers"] = "", -- -- ["Time: %.1fs"] = "", -- Racer, TechRacer -- ["Time: %.3fs by %s"] = "", -- TrophyRace diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Locale/zh_CN.lua --- a/share/hedgewars/Data/Locale/zh_CN.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Locale/zh_CN.lua Mon Sep 24 11:18:48 2018 -0400 @@ -11,8 +11,8 @@ -- ["%.1fs"] = "", -- Racer, TechRacer -- ["+1 Grenade"] = "", -- Basic_Training_-_Flying_Saucer -- ["+1 mine!"] = "", -- Tumbler +-- ["+1 point"] = "", -- Mutant -- ["-1 point"] = "", -- Mutant --- ["+1 point"] = "", -- Mutant -- ["-1 to anyone for a suicide"] = "", -- Mutant -- ["+1 to the Bottom Feeder for killing anyone"] = "", -- Mutant -- ["+1 to the Mutant for killing anyone"] = "", -- Mutant @@ -713,8 +713,8 @@ -- ["Gear information hidden"] = "", -- HedgeEditor -- ["Gear information shown"] = "", -- HedgeEditor -- ["Gear Placement Tool"] = "", -- HedgeEditor +-- ["General information"] = "", -- Continental_supplies -- ["General information:"] = "", -- Continental_supplies --- ["General information"] = "", -- Continental_supplies -- ["General Lemon"] = "", -- A_Space_Adventure:fruit01 -- ["Generator"] = "", -- Construction_Mode -- ["Generator: Generates energy."] = "", -- Construction_Mode @@ -1054,8 +1054,8 @@ -- ["If you can get that crate fast enough, your beloved \"princess\" may go free."] = "", -- A_Classic_Fairytale:journey -- ["If you decide to help us, though, we will no longer need to find a new governor for the island."] = "", -- A_Classic_Fairytale:shadow -- ["If you don't want to slip away, you have to keep moving!"] = "", -- Basic_Training_-_Movement +-- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you get stuck, use your Desert Eagle or restart the mission!|"] = "", -- A_Classic_Fairytale:journey --- ["If you get stuck, use your Desert Eagle or restart the mission!"] = "", -- A_Classic_Fairytale:journey -- ["If you help us you can keep the device if you find it but we'll keep everything else."] = "", -- A_Space_Adventure:fruit02 -- ["If you hurt an enemy, you'll get one third of the damage dealt."] = "", -- A_Space_Adventure:death02 -- ["If you injure a hedgehog you'll get 35% of the damage dealt."] = "", -- A_Space_Adventure:death02 @@ -1569,8 +1569,8 @@ -- ["One tribe was peaceful, spending their time hunting and training, enjoying the small pleasures of life..."] = "", -- A_Classic_Fairytale:first_blood -- ["Oneye"] = "", -- portal -- ["Only Hog Solo can be trusted with the crate."] = "", -- A_Space_Adventure:fruit02 +-- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only one hog per team allowed! Excess hogs will be removed."] = "", -- Mutant --- ["Only one hog per team allowed! Excess hogs will be removed"] = "", -- Mutant -- ["Only the best pilots can master the following stunts."] = "", -- Basic_Training_-_Flying_Saucer -- ["Only two clans allowed! Excess hedgehogs will be removed."] = "", -- CTF_Blizzard -- ["On the Ice Planet, where ice rules ..."] = "", -- A_Space_Adventure:ice01 @@ -1655,8 +1655,8 @@ -- ["- Place your clan flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["- Place your team flag at the end of your first turn"] = "", -- Capture_the_Flag -- ["Planes used: %d"] = "", -- User_Mission_-_RCPlane_Challenge +-- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planes Used:"] = "", -- User_Mission_-_RCPlane_Challenge --- ["Planes Used"] = "", -- User_Mission_-_RCPlane_Challenge -- ["Planets with all missions completed will be marked with two flowers."] = "", -- A_Space_Adventure:cosmos -- ["Planets with completed main missions will be marked with a flower."] = "", -- A_Space_Adventure:cosmos -- ["Play with me!"] = "", -- A_Classic_Fairytale:shadow @@ -1849,8 +1849,8 @@ -- ["Score points by killing other hedgehogs."] = "", -- Mutant -- ["Score points by killing other hedgehogs (see below)."] = "", -- Mutant -- ["Scores: "] = "", -- Capture_the_Flag +-- ["Scores"] = "", -- Mutant -- ["Scores:"] = "", -- Mutant --- ["Scores"] = "", -- Mutant -- ["Scoring: "] = "", -- Mutant -- ["Script parameter examples:"] = "", -- Gravity -- ["%s (+%d)"] = "", -- Battalion @@ -2171,6 +2171,7 @@ -- ["Team Identity Mode"] = "", -- HedgeEditor -- ["TEAM IDENTITY MODE"] = "", -- HedgeEditor -- ["Team of Hearts"] = "", -- Challenge_-_Speed_Shoppa_-_Hedgelove +-- ["Teams are tied! Continue playing rounds until we have a winner!"] = "", -- Space_Invasion -- ["Team Scores:"] = "", -- Control -- ["Team scores:"] = "", -- Space_Invasion -- ["Teamwork 2"] = "", -- User_Mission_-_Teamwork_2 @@ -2333,6 +2334,8 @@ -- ["The spirits of the ancestors are surely pleased, Leaks A Lot."] = "", -- A_Classic_Fairytale:first_blood -- ["The targets will guide you through the training."] = "", -- Basic_Training_-_Rope -- ["The team continued their quest of finding the rest of the tribe."] = "", -- A_Classic_Fairytale:queen +-- ["The teams were tied, so an additional round has been played to determine the winner."] = "", -- Space_Invasion +-- ["The teams were tied, so %d additional rounds have been played to determine the winner."] = "", -- Space_Invasion -- ["The time that you have left when you reach the blue hedgehog will be added to the next turn."] = "", -- A_Space_Adventure:moon02 -- ["The Torment"] = "", -- A_Classic_Fairytale:first_blood -- ["The truth about Professor Hogevil"] = "", -- A_Space_Adventure:moon02 @@ -2403,6 +2406,7 @@ -- ["Throw a grenade to destroy the target!"] = "", -- Basic_Training_-_Grenade -- ["Throw some grenades to destroy the targets!"] = "", -- Basic_Training_-_Grenade -- ["Thug #%d"] = "", -- A_Space_Adventure:death01 +-- ["Tie-breaking round %d"] = "", -- Space_Invasion -- ["Timbers"] = "", -- -- ["Time: %.1fs"] = "", -- Racer, TechRacer -- ["Time: %.3fs by %s"] = "", -- TrophyRace diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Maps/CTF_Blizzard/map.lua --- a/share/hedgewars/Data/Maps/CTF_Blizzard/map.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Maps/CTF_Blizzard/map.lua Mon Sep 24 11:18:48 2018 -0400 @@ -580,6 +580,10 @@ fSpawnX[1] = 3123 fSpawnY[1] = 1747 + if ClansCount < 2 then + return + end + for i = 0, 1 do fGear[i] = SpawnFakeAmmoCrate(fSpawnX[i],fSpawnY[i],false,false) fCirc[i] = AddVisualGear(fSpawnX[i],fSpawnY[i],vgtCircle,0,true) diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Maps/ClimbHome/map.lua --- a/share/hedgewars/Data/Maps/ClimbHome/map.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Maps/ClimbHome/map.lua Mon Sep 24 11:18:48 2018 -0400 @@ -86,7 +86,7 @@ function onGameInit() -- Ensure people get same map for same theme - TurnTime = cMaxTurnTime + TurnTime = MAX_TURN_TIME CaseFreq = 0 Explosives = 0 MineDudPercent = 0 @@ -348,7 +348,7 @@ if CurrentHedgehog ~= nil and TurnTimeLeft > 0 and band(GetState(CurrentHedgehog),gstHHDriven) ~= 0 then if MaxHeight < delayHeight and - TurnTimeLeft<(cMaxTurnTime-delayTime) and + TurnTimeLeft<(MAX_TURN_TIME-delayTime) and MaxHeight > 286 and WaterLine > 286 then if waterAccel ~= 0 then SetWaterLine(WaterLine-(baseWaterSpeed+div(getActualHeight(MaxHeight)*100,waterAccel))) diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Maps/Control/map.lua --- a/share/hedgewars/Data/Maps/Control/map.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Maps/Control/map.lua Mon Sep 24 11:18:48 2018 -0400 @@ -424,7 +424,7 @@ end end end - TurnTimeLeft = 1 + SetTurnTimeLeft(1) end end diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Maps/TrophyRace/map.lua --- a/share/hedgewars/Data/Maps/TrophyRace/map.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Maps/TrophyRace/map.lua Mon Sep 24 11:18:48 2018 -0400 @@ -82,7 +82,9 @@ for i=0, ClansCount-1 do clantimes[i] = 0 end - SendAchievementsStatsOff() + if ClansCount >= 2 then + SendAchievementsStatsOff() + end end function onAmmoStoreInit() diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/backstab.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/backstab.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/backstab.lua Mon Sep 24 11:18:48 2018 -0400 @@ -576,7 +576,7 @@ function AfterHogDeadAnim() freshDead = nil - TurnTimeLeft = TurnTime + SetTurnTimeLeft(TurnTime) end --------------------------Anim skip functions-------------------------- @@ -587,7 +587,7 @@ AddAmmo(speakerHog, amSwitch, 100) SetGearMessage(speakerHog, 0) SetState(speakerHog, 0) - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) ShowMission(loc("Backstab"), loc("The food bites back"), loc("Defeat the cannibals"), 1, 4000) SpawnCrates() end @@ -602,7 +602,7 @@ SetGearMessage(CurrentHedgehog, 0) SetState(CurrentHedgehog, 0) SpawnCrates() - TurnTimeLeft = TurnTime + SetTurnTimeLeft(TurnTime) end function SkipWave2DeadAnim() @@ -1106,7 +1106,7 @@ function onNewTurn() tmpVar = 0 if AnimInProgress() then - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) return end @@ -1131,7 +1131,7 @@ else SetGearMessage(CurrentHedgehog, 0) --AnimSwitchHog(natives[leaksNum]) - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) end else if freshDead ~= nil and GetHogTeamName(CurrentHedgehog) == loc("Natives") then diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/dragon.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/dragon.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/dragon.lua Mon Sep 24 11:18:48 2018 -0400 @@ -362,7 +362,7 @@ end FollowGear(native) AddNewEvent(CheckGearsDead, {{crates[1], crates[2]}}, PutCrates, {2}, 0) - TurnTimeLeft = TurnTime + SetTurnTimeLeft(TurnTime) ShowMission(loc("Dragon's Lair"), loc("Obstacle course"), loc("In order to get to the other side, you need to get rid of the crates first.") .. "|" .. loc("As the ammo is sparse, you might want to reuse ropes while mid-air.") .. "|" .. loc("The enemy can't move but it might be a good idea to stay out of sight!") .. "|" .. @@ -381,7 +381,7 @@ function AfterKillAnim() if not cyborgsKilledBeforeCrates then PutWeaponCrates() - TurnTimeLeft = TurnTime + SetTurnTimeLeft(TurnTime) AddEvent(CheckCyborgsDead, {}, DoCyborgsDead, {}, 0) ShowMission(loc("Dragon's Lair"), loc("The Slaughter"), loc("Kill the aliens!").."|"..loc("Mines time: 5 seconds"), 1, 2000) end @@ -396,7 +396,7 @@ function AfterKilledAnim() -- Final mission segment with the portal gun HideHedge(cyborg) - TurnTimeLeft = TurnTime + SetTurnTimeLeft(TurnTime) SetGearMessage(native, 0) SpawnSupplyCrate(1184, 399, amPortalGun, 100) SpawnSupplyCrate(2259, 755, amTeleport, 2) @@ -745,7 +745,7 @@ AddAmmo(CurrentHedgehog, amSniperRifle, 1) AddAmmo(CurrentHedgehog, amDEagle, 1) end - TurnTimeLeft = 30000 + SetTurnTimeLeft(30000) elseif GetHogTeamName(CurrentHedgehog) == loc("011101001") then EndTurn(true) end diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/enemy.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/enemy.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/enemy.lua Mon Sep 24 11:18:48 2018 -0400 @@ -676,7 +676,7 @@ function onNewTurn() if AnimInProgress() then - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) return end if playersDeadFresh then diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/epil.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/epil.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/epil.lua Mon Sep 24 11:18:48 2018 -0400 @@ -484,14 +484,14 @@ function onNewTurn() if AnimInProgress() then - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) return end -- Don't allow player to play with traitor, except when it is the final hog left if CurrentHedgehog == traitor and not IsEveryoneExceptTraitorDead() then EndTurn(true) else - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) end end diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/family.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/family.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/family.lua Mon Sep 24 11:18:48 2018 -0400 @@ -295,7 +295,7 @@ AddNewEvent(CheckOutOfCluster, {}, DoOutOfCluster, {}, 1) AddNewEvent(CheckOutOfGrenade, {}, DoOutOfGrenade, {}, 1) -- AddNewEvent(CheckNeedToHide, {}, DoNeedToHide, {}, 1) - TurnTimeLeft = TurnTime + SetTurnTimeLeft(TurnTime) ShowMission(loc("Family Reunion"), loc("Hostage Situation"), loc("Save the princess! All your hogs must survive!|Hint: Kill the cyborgs first! Use the ammo very carefully!|Hint: You might want to spare a girder for cover!"), 1, 7000) end @@ -636,7 +636,7 @@ function onNewTurn() if AnimInProgress() then - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) return end if CurrentHedgehog == cyborg then diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/first_blood.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/first_blood.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/first_blood.lua Mon Sep 24 11:18:48 2018 -0400 @@ -546,7 +546,7 @@ function DoCratesColled() RemoveEventFunc(CheckTimesUp) - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) AddCaption(loc("As the challenge was completed, Leaks A Lot set foot on the ground...")) end @@ -573,7 +573,7 @@ challengeFailed = true deleteCrate = true DeleteGear(crates[1]) - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) AddCaption(loc("And so happened that Leaks A Lot failed to complete the challenge! He landed, pressured by shame ...")) AddEvent(CheckChallengeFailed, {}, DoChallengeFailed, {}, 0) end @@ -658,7 +658,7 @@ function StartChallenge(time) cratesCollected = 0 PutCrate(1) - TurnTimeLeft = time + SetTurnTimeLeft(time) ShowMission(loc("First Blood"), loc("The Crate Frenzy"), loc("Collect the crates within the time limit!|If you fail, you'll have to try again."), 1, 5000) end @@ -684,11 +684,11 @@ end function SetTime(time) - TurnTimeLeft = time + SetTurnTimeLeft(time) end function ResetTurnTime() - TurnTimeLeft = tTime + SetTurnTimeLeft(tTime) tTime = -1 end @@ -751,7 +751,7 @@ function onGameStart() progress = tonumber(GetCampaignVar("Progress")) - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) FollowGear(youngh) ShowMission(loc("A Classic Fairytale"), loc("First Blood"), loc("Finish your training|Hint: Animations can be skipped with the [Precise] key."), -amSkip, 0) HideHog(cannibal) @@ -846,7 +846,7 @@ end SwitchHog(youngh) FollowGear(youngh) - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) end function onGearDamage(gear, damage) diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/journey.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/journey.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/journey.lua Mon Sep 24 11:18:48 2018 -0400 @@ -197,7 +197,7 @@ AddEvent(CheckFailedCourse, {}, DoFailedCourse, {}, 0) SetGearMessage(leaks, 0) TurnsLeft = 12 - TurnTimeLeft = TurnTime + SetTurnTimeLeft(TurnTime) ShowMission(loc("The Journey Back"), loc("Collateral Damage"), loc("Save the princess by collecting the crate in under 12 turns!") .. "|" .. loc("Mines time: 3 seconds"), 0, 6000) @@ -230,7 +230,7 @@ stage = endStage SwitchHog(leaks) SetGearMessage(leaks, 0) - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) ShowMission(loc("The Journey Back"), loc("Collateral Damage II"), loc("Save Fell From Heaven!"), 1, 4000) AddEvent(CheckLost, {}, DoLost, {}, 0) AddEvent(CheckWon, {}, DoWon, {}, 0) @@ -242,7 +242,7 @@ SwitchHog(leaks) SetGearMessage(leaks, 0) SetGearMessage(dense, 0) - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) ShowMission(loc("The Journey Back"), loc("Collateral Damage II"), loc("Save Fell From Heaven!"), 1, 4000) AddEvent(CheckLost, {}, DoLost, {}, 0) AddEvent(CheckWon, {}, DoWon, {}, 0) @@ -258,7 +258,7 @@ function AfterStartAnim() SetGearMessage(leaks, 0) - TurnTimeLeft = TurnTime + SetTurnTimeLeft(TurnTime) local goal = loc("Get the crate on the other side of the island.") local hint = loc("Hint: You might want to stay out of sight and take all the crates ...") local stuck = loc("If you get stuck, use your Desert Eagle or restart the mission!") @@ -1188,15 +1188,15 @@ function onNewTurn() if AnimInProgress() then - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) elseif victory then EndTurn(true) elseif stage == endStage and CurrentHedgehog ~= leaks then AnimSwitchHog(leaks) SetGearMessage(leaks, 0) - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) elseif GetHogTeamName(CurrentHedgehog) ~= loc("Natives") then - TurnTimeLeft = 20000 + SetTurnTimeLeft(20000) else TurnsLeft = TurnsLeft - 1 if TurnsLeft >= 1 then diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/queen.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/queen.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/queen.lua Mon Sep 24 11:18:48 2018 -0400 @@ -99,7 +99,7 @@ cyborgsDif = {2, 2, 2, 2, 2, 2, 2, 2} cyborgsHealth = {100, 100, 100, 100, 100, 100, 100, 100} -cyborgPos = {1765, 1145} +cyborgHidePos = {1665, 1800} cyborgsTeamNum = {4, 3} cyborgsNum = 7 cyborgsPos = {{2893, 1717}, {2958, 1701}, {3027, 1696}, {3096, 1698}, @@ -492,7 +492,7 @@ SetHealth(SpawnHealthCrate(519, 1519), 25) SetHealth(SpawnHealthCrate(826, 895), 25) SpawnSupplyCrate(701, 1046, amGirder, 3) - TurnTimeLeft = TurnTime + SetTurnTimeLeft(TurnTime) end function SkipAnim(anim) @@ -513,7 +513,7 @@ SetGearMessage(CurrentHedgehog, 0) HideHedge(enemy) ShowMission(loc("Long Live The Queen"), loc("Coward"), loc("The leader escaped. Defeat the rest of the aliens!"), 1, 0) - TurnTimeLeft = TurnTime + SetTurnTimeLeft(TurnTime) end function AfterLeaderDeadAnim() @@ -649,6 +649,7 @@ end function SetupPlace() + HideHedge(cyborg) SetHogHat(natives[1], nativeHats[m5DeployedNum]) SetHogName(natives[1], nativeNames[m5DeployedNum]) @@ -747,9 +748,7 @@ AddTeam(loc("011101001"), -1, "ring", "UFO", "Robot", "cm_binary") cyborg = AddHog(loc("Unit 334a$7%;.*"), 0, 200, "cyborg1") - HideHedge(cyborg) - - SetGearPosition(cyborg, 0, 0) + SetGearPosition(cyborg, unpack(cyborgHidePos)) for i = 1, nativesNum do AnimSetGearPosition(natives[i], unpack(nativePos[i])) @@ -858,7 +857,7 @@ function onNewTurn() if AnimInProgress() then - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) return end if GetHogTeamName(CurrentHedgehog) == loc("011101001") then @@ -869,11 +868,5 @@ function onPrecise() if GameTime > 2500 and AnimInProgress() then SetAnimSkip(true) --- else --- DeleteGear(cyborgs[1]) --- table.remove(cyborgs, 1) --- if cyborgsLeft == 0 then --- DeleteGear(enemy) --- end end end diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/shadow.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/shadow.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/shadow.lua Mon Sep 24 11:18:48 2018 -0400 @@ -189,7 +189,7 @@ end stage = spyStage ShowMission(loc("The Shadow Falls"), loc("Play with me!"), loc("Kill the cannibal!").."|"..loc("Both your hedgehogs must survive."), 1, 6000) - TurnTimeLeft = TurnTime + SetTurnTimeLeft(TurnTime) end @@ -223,7 +223,7 @@ SwitchHog(dense) SetGearMessage(dense, 0) SetGearMessage(leaks, 0) - TurnTimeLeft = TurnTime + SetTurnTimeLeft(TurnTime) ShowMission(loc("The Shadow Falls"), loc("Why do you not like me?"), loc("Obliterate them!|Hint: You might want to take cover...").."|"..loc("Both your hedgehogs must survive."), 1, 6000) end @@ -330,7 +330,7 @@ AddAmmo(cannibals[9], amFirePunch, 0) AddAmmo(cannibals[9], amBaseballBat, 0) SetGearMessage(leaks, 0) - TurnTimeLeft = TurnTime + SetTurnTimeLeft(TurnTime) AddEvent(CheckStronglingsDead, {}, DoStronglingsDeadAttacked, {}, 0) SwitchHog(leaks) AnimWait(dense, 1) @@ -893,7 +893,7 @@ AddAmmo(cannibals[9], amShotgun, 2) SetGearMessage(leaks, 0) SetGearMessage(dense, 0) - TurnTimeLeft = TurnTime + SetTurnTimeLeft(TurnTime) end function DoStronglingsDead() @@ -1091,17 +1091,17 @@ function onNewTurn() if AnimInProgress() then - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) elseif stage == cyborgStage then if CurrentHedgehog ~= dense then EndTurn(true) else - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) end elseif stage == acceptedReturnStage then SwitchHog(dense) FollowGear(dense) - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) end end diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/united.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/united.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Classic_Fairytale/united.lua Mon Sep 24 11:18:48 2018 -0400 @@ -66,13 +66,13 @@ --------------------------Anim skip functions-------------------------- function AfterHogDeadAnim() freshDead = nil - TurnTimeLeft = TurnTime + SetTurnTimeLeft(TurnTime) end function AfterStartAnim() local goal = loc("Defeat the cannibals!|") local chiefgoal = loc("Try to protect the chief! You won't lose if he dies, but it is advised that he survives.") - TurnTimeLeft = TurnTime + SetTurnTimeLeft(TurnTime) ShowMission(loc("United We Stand"), loc("Invasion"), goal .. chiefgoal, 1, 6000) end @@ -532,7 +532,7 @@ function onNewTurn() if AnimInProgress() then - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) return end if freshDead ~= nil and GetHogTeamName(CurrentHedgehog) == loc("Natives") then diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/cosmos.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/cosmos.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/cosmos.lua Mon Sep 24 11:18:48 2018 -0400 @@ -306,7 +306,7 @@ getReadyForRumble = false else if guard1.keepTurning then - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) end end elseif not onHeroDeath() and CurrentHedgehog == director.gear or CurrentHedgehog == doctor.gear then @@ -468,7 +468,7 @@ SaveCampaignVar("HeroHealth",GetHealth(hero.gear)) end AnimCaption(hero.gear,loc("Welcome to the moon!")) - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) SaveCampaignVar("HeroHealth", GetHealth(hero.gear)) SaveCampaignVar("Planet", "moon") SaveCampaignVar("UnlockedMissions", "3") diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/death02.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/death02.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/death02.lua Mon Sep 24 11:18:48 2018 -0400 @@ -108,7 +108,7 @@ battleStarted = true if firstTurn then -- Generous ready time in first turn to more time to read the mission panel - ReadyTimeLeft = 35000 + SetReadyTimeLeft(35000) firstTurn = false end if CurrentHedgehog ~= hero.gear then diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert01.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert01.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert01.lua Mon Sep 24 11:18:48 2018 -0400 @@ -213,9 +213,9 @@ if CurrentHedgehog ~= hero.gear and not heroIsInBattle then AnimSwitchHog(hero.gear) getReady(hero.gear) - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) elseif CurrentHedgehog == hero.gear and not heroIsInBattle then - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) elseif (CurrentHedgehog == smuggler2.gear or CurrentHedgehog == smuggler3.gear) and ongoingBattle == 1 then AnimSwitchHog(smuggler1.gear) getReady(smuggler1.gear) @@ -270,11 +270,13 @@ -- Turn the other crate into a fake crate; this will “contain” the device. SetGearPos(other_crate_table.gear, bor(GetGearPos(other_crate_table.gear), 0x8)) elseif cratesFound == 1 then - -- Second win crate collected: - -- This crate contains the anti-gravity part! VICTORY! - PlaySound(sndShotgunReload) - -- It's displayed as if collecting a normal ammo/utility crate. :-) - AddCaption(loc("Anti-Gravity Device Part (+1)"), GetClanColor(GetHogClan(CurrentHedgehog)), capgrpAmmoinfo) + if not candidate_crate_table.destroyed then + -- Second win crate collected: + -- This crate contains the anti-gravity part! VICTORY! + PlaySound(sndShotgunReload) + -- It's displayed as if collecting a normal ammo/utility crate. :-) + AddCaption(loc("Anti-Gravity Device Part (+1)"), GetClanColor(GetHogClan(CurrentHedgehog)), capgrpAmmoinfo) + end end end @@ -308,7 +310,7 @@ end function onHeroAtFirstBattle(gear) - if not hero.dead and not heroIsInBattle and GetHealth(smuggler1.gear) and GetX(hero.gear) <= 1450 and GetX(hero.gear) > 80 + if not hero.dead and not heroIsInBattle and GetHealth(smuggler1.gear) and GetX(hero.gear) <= 1233 and GetX(hero.gear) > 80 and GetY(hero.gear) <= GetY(smuggler1.gear)+5 and GetY(hero.gear) >= GetY(smuggler1.gear)-40 and -- If hero is standing or at a rope (StoppedGear(hero.gear) or GetGearElasticity(hero.gear) ~= 0) then diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert03.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert03.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/desert03.lua Mon Sep 24 11:18:48 2018 -0400 @@ -61,7 +61,7 @@ function onGameInit() GameFlags = gfOneClanMode Seed = 1 - TurnTime = cMaxTurnTime + TurnTime = MAX_TURN_TIME Ready = 30000 CaseFreq = 0 MinesNum = 0 diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/final.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/final.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/final.lua Mon Sep 24 11:18:48 2018 -0400 @@ -38,7 +38,7 @@ function onGameInit() GameFlags = gfDisableWind + gfOneClanMode Seed = 1 - TurnTime = cMaxTurnTime + TurnTime = MAX_TURN_TIME CaseFreq = 0 MinesNum = 0 MinesTime = 1 @@ -160,6 +160,8 @@ end function heroBoomReaction(gear) + SetSoundMask(sndMissed, true) + SetSoundMask(sndYesSir, true) if GetHealth(gear) and GetHealth(gear) > 0 then HogSay(gear, loc("Kaboom! Hahahaha! Take this, stupid meteorite!"), SAY_SHOUT, 2) end diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/fruit02.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/fruit02.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/fruit02.lua Mon Sep 24 11:18:48 2018 -0400 @@ -242,10 +242,10 @@ return end end - TurnTimeLeft = 20000 + SetTurnTimeLeft(20000) wind() elseif not inBattle and CurrentHedgehog == hero.gear then - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) wind() else EndTurn(true) diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/fruit03.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/fruit03.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/fruit03.lua Mon Sep 24 11:18:48 2018 -0400 @@ -145,14 +145,14 @@ if CurrentHedgehog == hero.gear then if firstTurn then -- Unique game rule in this mission: First turn has more time - TurnTimeLeft = 25000 + SetTurnTimeLeft(25000) -- Generous ready time on first turn to give more time to read - ReadyTimeLeft = 35000 + SetReadyTimeLeft(35000) battleStarted = true firstTurn = false end if lastWeaponUsed == amSkip then - TurnTimeLeft = TurnTime + timeLeft + SetTurnTimeLeft(TurnTime + timeLeft) end timeLeft = 0 heroTurns = heroTurns + 1 diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/ice01.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/ice01.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/ice01.lua Mon Sep 24 11:18:48 2018 -0400 @@ -240,7 +240,7 @@ if not heroVisitedAntiFlyArea and CurrentHedgehog ~= hero.gear then EndTurn(true) elseif not heroVisitedAntiFlyArea and CurrentHedgehog == hero.gear then - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) elseif not heroAtFinalStep and (CurrentHedgehog == bandit1.gear or CurrentHedgehog == bandit4.gear or CurrentHedgehog == bandit5.gear) then AnimSwitchHog(hero.gear) EndTurn(true) diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/ice02.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/ice02.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/ice02.lua Mon Sep 24 11:18:48 2018 -0400 @@ -262,7 +262,7 @@ end local message if TurnTimeLeft <= 22000 then - TurnTimeLeft = TurnTimeLeft + 8000 + SetTurnTimeLeft(TurnTimeLeft + 8000) totalTime = totalTime + 8000 PlaySound(sndExtraTime) message = loc("Got 1 more saucer and 8 more seconds added to the clock") @@ -273,7 +273,7 @@ else SetVisualGearValues(wp.gear, wp.x,wp.y, 20, 200, 0, 0, 100, radius, 3, GREEN) if TurnTimeLeft <= 16000 then - TurnTimeLeft = TurnTimeLeft + 6000 + SetTurnTimeLeft(TurnTimeLeft + 6000) totalTime = totalTime + 6000 if currentWaypoint ~= 1 then PlaySound(sndExtraTime) diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/moon01.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/moon01.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/moon01.lua Mon Sep 24 11:18:48 2018 -0400 @@ -245,7 +245,7 @@ -- rounds start if hero got his weapons or got near the enemies if CurrentHedgehog == hero.gear then if not weaponsAcquired and not battleZoneReached then - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) end elseif CurrentHedgehog == minion1.gear or CurrentHedgehog == minion2.gear or CurrentHedgehog == minion3.gear then if not battleZoneReached then diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/moon02.lua --- a/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/moon02.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Campaign/A_Space_Adventure/moon02.lua Mon Sep 24 11:18:48 2018 -0400 @@ -115,7 +115,7 @@ lose() end SetWeapon(amRope) - TurnTimeLeft = runner.places[currentPosition].turnTime + previousTimeLeft + SetTurnTimeLeft(runner.places[currentPosition].turnTime + previousTimeLeft) previousTimeLeft = 0 end end diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Challenge/Basic_Training_-_Sniper_Rifle.lua --- a/share/hedgewars/Data/Missions/Challenge/Basic_Training_-_Sniper_Rifle.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Challenge/Basic_Training_-_Sniper_Rifle.lua Mon Sep 24 11:18:48 2018 -0400 @@ -194,7 +194,7 @@ else -- ... or just lower the timer by 1. -- Reset the time left to stop the timer - TurnTimeLeft = time_goal + SetTurnTimeLeft(time_goal) end end_timer = end_timer - 20 end diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Challenge/ClimbHome.lua --- a/share/hedgewars/Data/Missions/Challenge/ClimbHome.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Challenge/ClimbHome.lua Mon Sep 24 11:18:48 2018 -0400 @@ -16,7 +16,7 @@ -- Ensure people get same map for same theme Theme = themes[GetRandom(#themes)+1] Seed = ClimbHome - TurnTime = cMaxTurnTime + TurnTime = MAX_TURN_TIME EnableGameFlags(gfOneClanMode) DisableGameFlags(gfBottomBorder+gfBorder) CaseFreq = 0 diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Challenge/User_Mission_-_RCPlane_Challenge.lua --- a/share/hedgewars/Data/Missions/Challenge/User_Mission_-_RCPlane_Challenge.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Challenge/User_Mission_-_RCPlane_Challenge.lua Mon Sep 24 11:18:48 2018 -0400 @@ -21,7 +21,7 @@ GameFlags = gfInfAttack + gfInvulnerable + gfOneClanMode + gfSolidLand -- Basically unlimited turn time - TurnTime = cMaxTurnTime + TurnTime = MAX_TURN_TIME Map = "Ropes" Theme = "Eyes" @@ -279,7 +279,7 @@ end function onNewTurn() - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) end function onGearAdd(gear) diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Challenge/User_Mission_-_Rope_Knock_Challenge.lua --- a/share/hedgewars/Data/Missions/Challenge/User_Mission_-_Rope_Knock_Challenge.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Challenge/User_Mission_-_Rope_Knock_Challenge.lua Mon Sep 24 11:18:48 2018 -0400 @@ -72,16 +72,21 @@ local playerTeamName = loc("Wannabe Shoppsta") -function GenericEnd() - EndGame() -end - function GetKillScore() return math.ceil((hogsKilled / 16)*6000) end +function ProtectEnemies() + for i=1, 16 do + if hhs[i] and GetHealth(hhs[i]) then + SetEffect(hhs[i], heInvulnerable, 1) + end + end +end + function GameOverMan() missionWon = false + ProtectEnemies() ShowMission(loc("Rope-knocking Challenge"), loc("Challenge over!"), loc("Oh no! Just try again!"), -amSkip, 0) SendStat(siGameResult, loc("Challenge over!")) local score = GetKillScore() @@ -89,6 +94,7 @@ SendStat(siPointType, loc("points")) SendStat(siPlayerKills, tostring(score), playerTeamName) PlaySound(sndHellish) + EndGame() end function GG() @@ -100,11 +106,17 @@ local hogScore = GetKillScore() local timeScore = math.ceil((finishTime/TurnTime)*6000) local score = hogScore + timeScore + SendStat(siCustomAchievement, string.format(loc("You have killed %d of 16 hedgehogs (+%d points)."), hogsKilled, hogScore)) SendStat(siCustomAchievement, string.format(loc("You have completed this challenge in %.2f s (+%d points)."), completeTime, timeScore)) SendStat(siPointType, loc("points")) SendStat(siPlayerKills, tostring(score), playerTeamName) SetTeamLabel(playerTeamName, tostring(score)) + + if hhs[0] and GetHealth(hhs[0]) then + SetEffect(hhs[0], heInvulnerable, 1) + end + SetTurnTimeLeft(MAX_TURN_TIME) end function AssignCharacter(p) @@ -217,7 +229,7 @@ endTimer = endTimer - 1 if endTimer == 1 then - GenericEnd() + EndGame() end if missionWon == true then @@ -234,6 +246,7 @@ if gear == hhs[0] then ouchies = true + ProtectEnemies() end if gear ~= hhs[0] and GetGearType(gear) == gtHedgehog and missionWon == nil and ouchies == false then diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Challenge/User_Mission_-_That_Sinking_Feeling.lua --- a/share/hedgewars/Data/Missions/Challenge/User_Mission_-_That_Sinking_Feeling.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Challenge/User_Mission_-_That_Sinking_Feeling.lua Mon Sep 24 11:18:48 2018 -0400 @@ -86,7 +86,7 @@ function onNewTurn() - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) end function onGameTick() diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Scenario/User_Mission_-_Dangerous_Ducklings.lua --- a/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Dangerous_Ducklings.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Dangerous_Ducklings.lua Mon Sep 24 11:18:48 2018 -0400 @@ -114,7 +114,7 @@ if (CurrentHedgehog ~= nil) and (CurrentHedgehog == instructor) then if endTimer >= 3000 then --SetHealth(instructor,0) - TurnTimeLeft = 1 + SetTurnTimeLeft(1) DismissTeam(loc("Bloody Rookies")) end ShowMission(loc("Dangerous Ducklings"), loc("MISSION FAILED"), loc("You've failed. Try again."), -amRope, 5000); @@ -136,14 +136,14 @@ gameLost = true elseif (gear == instructor) and (GetY(gear) > WaterLine) then HogSay(player, loc("See ya!"), SAY_THINK) - TurnTimeLeft = 3000 + Retreat(3000) awardAchievement(loc("Naughty Ninja")) DismissTeam(loc("Blue Team")) gameWon = true elseif gear == enemy then HogSay(player, loc("Enjoy the swim..."), SAY_THINK) gameWon = true - TurnTimeLeft = 3000 + Retreat(3000) end end diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Scenario/User_Mission_-_Spooky_Tree.lua --- a/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Spooky_Tree.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Spooky_Tree.lua Mon Sep 24 11:18:48 2018 -0400 @@ -140,11 +140,11 @@ function onGearDelete(gear) if gear == GirderCrate then - TurnTimeLeft = TurnTimeLeft + 30000 + SetTurnTimeLeft(TurnTimeLeft + 30000) end if GetGearType(gear) == gtCase then - TurnTimeLeft = TurnTimeLeft + 5000 + SetTurnTimeLeft(TurnTimeLeft + 5000) end if (gear == enemy) and (GameOver == false) then diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Scenario/User_Mission_-_Teamwork.lua --- a/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Teamwork.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Teamwork.lua Mon Sep 24 11:18:48 2018 -0400 @@ -104,7 +104,7 @@ end if GetGearType(gear) == gtCase then - TurnTimeLeft = TurnTimeLeft + 5000 + SetTurnTimeLeft(TurnTimeLeft + 5000) end -- Note: The victory sequence is done automatically by Hedgewars if ( ((gear == player) or (gear == p2)) and (GameOver == false)) then diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Scenario/User_Mission_-_Teamwork_2.lua --- a/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Teamwork_2.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Scenario/User_Mission_-_Teamwork_2.lua Mon Sep 24 11:18:48 2018 -0400 @@ -13,7 +13,7 @@ function onGameInit() Seed = 0 GameFlags = gfDisableWind - TurnTime = cMaxTurnTime + TurnTime = MAX_TURN_TIME CaseFreq = 0 MinesNum = 0 MinesTime = 0 diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Training/Basic_Training_-_Bazooka.lua --- a/share/hedgewars/Data/Missions/Training/Basic_Training_-_Bazooka.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Training/Basic_Training_-_Bazooka.lua Mon Sep 24 11:18:48 2018 -0400 @@ -38,7 +38,7 @@ Seed = 0 Theme = "Nature" MapGen = mgDrawn - TurnTime = cMaxTurnTime + TurnTime = MAX_TURN_TIME Explosives = 0 MinesNum = 0 CaseFreq = 0 diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Training/Basic_Training_-_Flying_Saucer.lua --- a/share/hedgewars/Data/Missions/Training/Basic_Training_-_Flying_Saucer.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Training/Basic_Training_-_Flying_Saucer.lua Mon Sep 24 11:18:48 2018 -0400 @@ -198,7 +198,7 @@ SendStat(siCustomAchievement, loc("Good job!")) SendStat(siPlayerKills, "0", loc("Hogonauts")) - TurnTimeLeft = 0 + EndTurn(true) EndGame() end, } @@ -365,7 +365,7 @@ function onGameInit() Seed = 1 GameFlags = gfInfAttack + gfOneClanMode + gfSolidLand + gfDisableWind - TurnTime = cMaxTurnTime --[[ This effectively hides the turn time; a turn time above 1000s is not displayed. + TurnTime = MAX_TURN_TIME --[[ This effectively hides the turn time; a turn time above 1000s is not displayed. We will also ensure this timer always stays above 999s later ]] CaseFreq = 0 MinesNum = 0 @@ -504,7 +504,7 @@ function onGameTick20() if (TurnTimeLeft < 1500000 and not Objective) then - TurnTimeLeft = TurnTime + SetTurnTimeLeft(TurnTime) end if Check then CheckTimer = CheckTimer - 20 diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Training/Basic_Training_-_Grenade.lua --- a/share/hedgewars/Data/Missions/Training/Basic_Training_-_Grenade.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Training/Basic_Training_-_Grenade.lua Mon Sep 24 11:18:48 2018 -0400 @@ -30,7 +30,7 @@ Map = "Mushrooms" Seed = 0 Theme = "Nature" - TurnTime = cMaxTurnTime + TurnTime = MAX_TURN_TIME Explosives = 0 MinesNum = 0 CaseFreq = 0 diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Training/Basic_Training_-_Movement.lua --- a/share/hedgewars/Data/Missions/Training/Basic_Training_-_Movement.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Training/Basic_Training_-_Movement.lua Mon Sep 24 11:18:48 2018 -0400 @@ -103,7 +103,7 @@ Seed = 0 Theme = "Brick" MapGen = mgDrawn - TurnTime = cMaxTurnTime + TurnTime = MAX_TURN_TIME Explosives = 0 MinesNum = 0 CaseFreq = 0 @@ -162,7 +162,8 @@ PlaceSprite(1175, 1772, sprAmGirder, 0, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal) PlaceSprite(1226, 1738, sprAmGirder, 2, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal) PlaceSprite(1275, 1705, sprAmGirder, 0, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal) - PlaceSprite(1325, 1683, sprAmGirder, 6, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal) + PlaceSprite(1325, 1700, sprAmGirder, 6, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal) + PlaceSprite(1342, 1638, sprAmGirder, 2, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal) PlaceSprite(1368, 1560, sprAmGirder, 3, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal) PlaceSprite(1390, 1665, sprAmGirder, 6, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal) PlaceSprite(1481, 1716, sprAmGirder, 4, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal) @@ -192,7 +193,7 @@ PlaceSprite(1545, 1811, sprAmGirder, 2, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal) PlaceSprite(1577, 1761, sprAmGirder, 0, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal) PlaceSprite(1610, 1811, sprAmGirder, 2, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal) - PlaceSprite(1440, 1531, sprAmGirder, 6, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal) + PlaceSprite(1440, 1511, sprAmGirder, 6, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal) PlaceSprite(2082, 1337, sprAmGirder, 6, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal) PlaceSprite(2187, 1273, sprAmGirder, 6, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal) PlaceSprite(2097, 1246, sprAmGirder, 4, U_LAND_TINT_NORMAL, nil, nil, nil, lfNormal) @@ -237,7 +238,7 @@ crates[4] = SpawnHealthCrate(889, 1829) -- Back Jumping crates[5] = SpawnHealthCrate(1486, 1694) -- Walking on Ice crates[6] = SpawnHealthCrate(2033, 1470) -- Walking on Ice completed - crates[7] = SpawnHealthCrate(1297, 1683) -- Back Jumping 2 + crates[7] = SpawnHealthCrate(1198, 1750) -- Back Jumping 2 crates[8] = SpawnSupplyCrate(1851, 1402, amSwitch, 100) -- Switch Hedgehog crates[9] = SpawnHealthCrate(564, 1772) -- Health crates[10] = SpawnHealthCrate(2290, 1622) -- Turning Around @@ -247,6 +248,7 @@ ShowMission(loc("Basic Movement Training"), loc("Training complete!"),loc("Congratulations! You have completed the obstacle course!"), 0, 0) SendStat(siGameResult, loc("You have completed the Basic Movement Training!")) SendStat(siCustomAchievement, loc("Congratulations!")) + SendStat(siCustomAchievement, loc("Return to the training menu by pressing the “Go back” button.")) SendStat(siPlayerKills, "0", loc("Training Team")) PlaySound(sndVictory, CurrentHedgehog) -- Disable controls, end game @@ -310,10 +312,8 @@ loc("High Jump: [Backspace]").."|"..loc("Back Jump: [Backspace] ×2"), 2, 6600) elseif gear == crates[7] then ShowMission(loc("Basic Movement Training"), loc("Back Jumping (2/2)"), - loc("To get over the next obstacle, you need to perform your back jump precisely.").."|".. - loc("Hint: Hit “High Jump” again when you're close to the highest point of a high jump.").."|".. - loc("Hint: Don't stand too close at the wall before you jump!").."|".. - loc("Hint: Use the flower for orientation.").."|".. + loc("To get over the next obstacles, keep some distance from the wall before you back jump.").."|".. + loc("Hint: To jump higher, wait a bit before you hit “High Jump” a second time.").."|".. loc("High Jump: [Backspace]").."|"..loc("Back Jump: [Backspace] ×2"), 2, 15000) elseif gear == crates[5] then ShowMission(loc("Basic Movement Training"), loc("Walking on Ice"), diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Missions/Training/Basic_Training_-_Rope.lua --- a/share/hedgewars/Data/Missions/Training/Basic_Training_-_Rope.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Missions/Training/Basic_Training_-_Rope.lua Mon Sep 24 11:18:48 2018 -0400 @@ -110,7 +110,7 @@ MapFeatureSize = 12 TemplateFilter = 0 TemplateNumber = 0 - TurnTime = cMaxTurnTime + TurnTime = MAX_TURN_TIME Explosives = 0 MinesNum = 0 CaseFreq = 0 diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Scripts/Animate.lua --- a/share/hedgewars/Data/Scripts/Animate.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Scripts/Animate.lua Mon Sep 24 11:18:48 2018 -0400 @@ -310,7 +310,7 @@ skipping = false return true else - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) if Animate(AnimList[1]) == true then RemoveAnim() end diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Scripts/Locale.lua --- a/share/hedgewars/Data/Scripts/Locale.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Scripts/Locale.lua Mon Sep 24 11:18:48 2018 -0400 @@ -1,6 +1,8 @@ -- Library for localizing strings in lua scripts -local lang = HedgewarsScriptLoad("Locale/" .. tostring(LOCALE) .. ".lua") +if LOCALE ~= "en" then + HedgewarsScriptLoad("Locale/" .. tostring(LOCALE) .. ".lua", false) +end function loc(text) if locale ~= nil and locale[text] ~= nil then return locale[text] diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Scripts/Multiplayer/Balanced_Random_Weapon.cfg --- a/share/hedgewars/Data/Scripts/Multiplayer/Balanced_Random_Weapon.cfg Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Scripts/Multiplayer/Balanced_Random_Weapon.cfg Mon Sep 24 11:18:48 2018 -0400 @@ -1,2 +1,2 @@ * -locked +Balanced_Random_Weapon diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Scripts/Multiplayer/Balanced_Random_Weapon.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/Balanced_Random_Weapon.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Scripts/Multiplayer/Balanced_Random_Weapon.lua Mon Sep 24 11:18:48 2018 -0400 @@ -1,36 +1,83 @@ +--[[ +Balanced Random Weapon + +Every turn, each hog gets 1-3 random weapons. Weapons are reset every turn. + += CUSTOMIZATION = +The weapon chances are chosen with the weapons scheme. + +The "ammo count" tab is used to set the probability level that you get +equipped with the ammo at the start of a turn: + +* infinity = always get this weapon +* 3-8 bullets = high probability (more bullets don't make it more likely) +* 2 bullets = medium probability +* 1 bullet = low probability +* 0 bullets = never + +For utilities, the low and medium probabilities are the same. + +The "probabilities" tab is, as usual, for crate probabilities. +The "ammo in crate" and "delay" tabs also work as expected. +]] + HedgewarsScriptLoad("/Scripts/Locale.lua") HedgewarsScriptLoad("/Scripts/Tracker.lua") -local weapons = { amGrenade, amClusterBomb, amBazooka, amBee, amShotgun, amMine, amDEagle, amDynamite, amFirePunch, amWhip, amPickHammer, amBaseballBat, amMortar, amCake, amSeduction, amWatermelon, amHellishBomb, amDrill, amBallgun, amRCPlane, amSniperRifle, amMolotov, amBirdy, amBlowTorch, amGasBomb, amFlamethrower, amSMine, amKamikaze, amMinigun, amAirMine, amKnife } - --- G,C,B,B,S,M,D,D,F,W,P,B,M,C,S,W,H,D,B,R,S,M,B,B,G,F,S,K,M,A,K -local weapons_values = {1,1,1,2,1,1,1,2,1,1,1,2,1,3,1,3,3,2,3,3,1,1,2,1,1,2,2,1,3,1,2} - -local airweapons = { amAirAttack, amMineStrike, amNapalm, amDrillStrike } +local weapons = {} +local weapons_values = {} +local weapons_count = 0 +local utilities = {} +local utilities_values = {} +local utilities_count = 0 --- A,M,N,D -local airweapons_values = {2,2,2,2} +local gotten_air_weapons = {} -local utilities = { amTeleport, amGirder, amSwitch, amLowGravity, amResurrector, amRope, amParachute, amJetpack, amPortalGun, amSnowball } - --- T,G,S,L,R,R,P,J,P,S -local utilities_values = {1,2,2,1,2,2,1,2,2,2} +local isUtility, isAirWeapon function randomAmmo() +--[[ += WEAPON SELECTION ALGORITHM = +Each turn, a team gets 3 "points". Each ammo that has been activated +has a "cost" of 1-3 which is derived from the ammo probability specified +from the ammo menu (see getCost). +Utilities are forced to have a cost of 1-2. + +Steps: +1. Add a random weapon to ammo and subtract cost +2. If there's still points left: + a. Forget any item in mind + b. Choose a random weapon and keep it in mind (but don't add it to the ammo yet) + c. Choose a random utility and keep it in mind (but don't add it to the ammo yet) + d. Forget any items which are either too expensive or have already been taken by this hedgehog + e. Randomly add one of the items which are still in mind to the hedgehog's ammo and substract cost + f. Return to step 2 + +If 0 points are left, the algorithm terminates. +]] + local picked_items = {} + local n = 3 --"points" to be allocated on weapons --pick random weapon and subtract cost - local r = GetRandom(table.maxn(weapons_values)) + 1 - local picked_items = {} - table.insert(picked_items, weapons[r]) - n = n - weapons_values[r] - + if weapons_count > 0 then + local r = GetRandom(weapons_count) + 1 + table.insert(picked_items, weapons[r]) + n = n - weapons_values[r] + elseif utilities_count > 0 then + local r = GetRandom(utilities_count) + 1 + table.insert(picked_items, utilities[r]) + n = n - utilities_values[r] + else + return picked_items + end --choose any weapons or utilities to use up remaining n while n > 0 do local items = {} local items_values = {} + local items_count = 0 for i, w in pairs(weapons_values) do local used = false @@ -44,6 +91,7 @@ if not used then table.insert(items_values, w) table.insert(items, weapons[i]) + items_count = items_count + 1 end end end @@ -60,13 +108,18 @@ if not used then table.insert(items_values, w) table.insert(items, utilities[i]) + items_count = items_count + 1 end end end - local r = GetRandom(table.maxn(items_values)) + 1 - table.insert(picked_items, items[r]) - n = n - items_values[r] + if items_count > 0 then + local r = GetRandom(items_count) + 1 + table.insert(picked_items, items[r]) + n = n - items_values[r] + else + break + end end return picked_items @@ -82,7 +135,7 @@ setTeamValue(name, "ammo", ammo) end for i, w in pairs(ammo) do - AddAmmo(hog, w) + AddAmmo(hog, w, 1) end setTeamValue(name, "processed", true) end @@ -93,19 +146,74 @@ end function onGameInit() - DisableGameFlags(gfPerHogAmmo) + DisableGameFlags(gfPerHogAmmo, gfSharedAmmo) EnableGameFlags(gfResetWeps) Goals = loc("Each turn you get 1-3 random weapons") + + isUtility = { + [amTeleport] = true, + [amGirder] = true, + [amSwitch] = true, + [amLowGravity] = true, + [amResurrector] = true, + [amRope] = true, + [amParachute] = true, + [amJetpack] = true, + [amPortalGun] = true, + [amRubber] = true, + [amTardis] = true, + [amLandGun] = true, + [amExtraTime] = true, + [amVampiric] = true, + [amLaserSight] = true, + [amExtraDamage] = true, + [amInvulnerable] = true, + + -- unusual classification + [amSnowball] = true, + } + + isAirWeapon = { + [amAirAttack] = true, + [amMineStrike] = true, + [amNapalm] = true, + [amDrillStrike] = true, + [amPiano] = true, + } + +end + +local function getCost(ammoType, ammoCount) + if ammoCount == 0 or ammoCount == 9 then + return 0 + else + local max + if isUtility[ammoType] then + -- Force-limit cost of utilities to 2 because utilities with + -- a cost of 3 could never be "paid" + max = 2 + else + max = 3 + end + return math.max(1, math.min(max, 4 - ammoCount)) + end end function onGameStart() trackTeams() + -- Add air weapons if MapHasBorder() == false then - for i, w in pairs(airweapons) do - table.insert(weapons, w) - end - for i, w in pairs(airweapons_values) do - table.insert(weapons_values, w) + for a = 0, AmmoTypeMax do + if isAirWeapon[a] then + local gotten = gotten_air_weapons[a] + local ammoCount, prob, delay, ammoInCrate = gotten[1], gotten[2], gotten[3], gotten[4] + local cost = getCost(a, ammoCount) + if cost > 0 then + table.insert(weapons, a) + table.insert(weapons_values, cost) + weapons_count = weapons_count + 1 + end + end end end end @@ -113,22 +221,34 @@ function onAmmoStoreInit() SetAmmo(amSkip, 9, 0, 0, 0) - SetAmmo(amExtraDamage, 0, 1, 0, 1) - SetAmmo(amInvulnerable, 0, 1, 0, 1) - SetAmmo(amExtraTime, 0, 1, 0, 1) - SetAmmo(amLaserSight, 0, 1, 0, 1) - SetAmmo(amVampiric, 0, 1, 0, 1) - - for i, w in pairs(utilities) do - SetAmmo(w, 0, 0, 0, 1) - end - - for i, w in pairs(weapons) do - SetAmmo(w, 0, 0, 0, 1) - end - - for i, w in pairs(airweapons) do - SetAmmo(w, 0, 0, 0, 1) + for a=0, AmmoTypeMax do + if a ~= amNothing and a ~= amSkip then + local ammoCount, prob, delay, ammoInCrate = GetAmmo(a) + if (not isAirWeapon[a]) then + local cost = getCost(a, ammoCount) + if cost > 0 then + if isUtility[a] then + table.insert(utilities, a) + table.insert(utilities_values, cost) + utilities_count = utilities_count + 1 + else + table.insert(weapons, a) + table.insert(weapons_values, cost) + weapons_count = weapons_count + 1 + end + end + else + -- air weapons are handled in onGameStart + gotten_air_weapons[a] = { ammoCount, prob, delay, ammoInCrate } + end + local realAmmoCount + if ammoCount ~= 9 then + realAmmoCount = 0 + else + realAmmoCount = 1 + end + SetAmmo(a, realAmmoCount, prob, delay, ammoInCrate) + end end end diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Scripts/Multiplayer/Continental_supplies.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/Continental_supplies.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Scripts/Multiplayer/Continental_supplies.lua Mon Sep 24 11:18:48 2018 -0400 @@ -53,9 +53,11 @@ -- Set attacked state to prevent “Boring” sound to be played SetState(CurrentHedgehog, bor(GetState(CurrentHedgehog), gstAttacked)) --set escape time - TurnTimeLeft = GetAwayTime*10*seconds - if TurnTimeLeft > 0 then - Retreat(TurnTimeLeft, false) + local escapeTime = GetAwayTime*10*seconds + if escapeTime > 0 then + Retreat(escapeTime, false) + else + SetTurnTimeLeft(escapeTime) end end @@ -1212,7 +1214,7 @@ CS.HOG_HEALTH=GetHealth(CurrentHedgehog) end - TurnTimeLeft=100000 + SetTurnTimeLeft(100000) AddCaption(string.format(CS.SELECT_WEP_INFORMATION_SHORT, GetHogTeamName(CurrentHedgehog)), capcolDefault, capgrpGameState) AddCaption(loc("No continent selected"), GetClanColor(GetHogClan(CurrentHedgehog)), capgrpAmmoinfo) @@ -1637,8 +1639,11 @@ end end -function ShowContinentLabel() - if CS.TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)] == 0 then +function ShowContinentLabel(continent) + if not continent then + continent = CS.TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)] + end + if continent == 0 then AddCaption(loc("Random continent"), GetClanColor(GetHogClan(CurrentHedgehog)), capgrpAmmoinfo) else AddCaption(CS.CONTINENT_INFORMATION[CS.TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]][1], GetClanColor(GetHogClan(CurrentHedgehog)), capgrpAmmoinfo) @@ -1680,7 +1685,15 @@ CS.SELECT_CONTINENT_CHECK=false EndTurnCS(0) PlaySound(sndPlaced) - ShowContinentLabel() + if(CurrentHedgehog and CS.TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]==0) + then + CS.TEAM_CONTINENT[GetHogTeamName(CurrentHedgehog)]=GetRandom(table.maxn(CS.CONTINENT_INFORMATION))+1 + SetContinentWeapons() + HideMission() + ShowContinentLabel(0) + else + ShowContinentLabel() + end CS.CONFIRM_CONTINENT_SELECTION = -1 end diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Scripts/Multiplayer/HedgeEditor.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/HedgeEditor.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Scripts/Multiplayer/HedgeEditor.lua Mon Sep 24 11:18:48 2018 -0400 @@ -2868,7 +2868,7 @@ -- Display the X and Y coordinates of the cursor while the cursor is active function updateCursorCoords() - if band(GetState(CurrentHedgehog), gstChooseTarget) ~= 0 and CursorX ~= NoPointX then + if band(GetState(CurrentHedgehog), gstChooseTarget) ~= 0 and CursorX ~= NO_CURSOR then local x1, y = 12, 24 if tagCursorX then DeleteVisualGear(tagCursorX) @@ -3785,7 +3785,7 @@ -- regardless of our other ammo, give stuff that is useful for editing SetEditingWeps(100) if GetHogLevel(CurrentHedgehog) == 0 then - TurnTimeLeft = cMaxTurnTime + SetTurnTimeLeft(MAX_TURN_TIME) else SkipTurn() -- skip the computer's turn end diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Scripts/Multiplayer/Mutant.lua Mon Sep 24 11:18:48 2018 -0400 @@ -153,9 +153,11 @@ end function onGameStart() - SendHealthStatsOff() + if ClansCount >= 2 then + SendHealthStatsOff() + SendAchievementsStatsOff() + end SendRankingStatsOff() - SendAchievementsStatsOff() trackTeams() teamScan() runOnHogs(saveStuff) diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Scripts/Multiplayer/Racer.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua Mon Sep 24 11:18:48 2018 -0400 @@ -663,10 +663,12 @@ end function onGameStart() - SendGameResultOff() - SendRankingStatsOff() - SendHealthStatsOff() - SendAchievementsStatsOff() + if ClansCount >= 2 then + SendGameResultOff() + SendRankingStatsOff() + SendHealthStatsOff() + SendAchievementsStatsOff() + end SetSoundMask(sndIncoming, true) SetSoundMask(sndMissed, true) diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Scripts/Multiplayer/Random_Weapon.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/Random_Weapon.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Scripts/Multiplayer/Random_Weapon.lua Mon Sep 24 11:18:48 2018 -0400 @@ -47,7 +47,7 @@ function onGameInit() -- Limit flags that can be set, but allow game schemes to be used - DisableGameFlags(gfInfAttack) + DisableGameFlags(gfInfAttack, gfPerHogAmmo, gfSharedAmmo) EnableGameFlags(gfResetWeps) -- Set a custom game goal that will show together with the scheme ones Goals = loc("Each turn you get one random weapon") diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Scripts/Multiplayer/Space_Invasion.lua Mon Sep 24 11:18:48 2018 -0400 @@ -89,13 +89,11 @@ -- add support for other world edges (they are currently disabled) --- maybe add a check for a tie, IMPOSSIBRU THERE ARE NO TIES - --- if more weps are added, replace primshotsfired all over the place +-- if more weapons are added, replace primshotsfired all over the place -- look for derp and let invaders shoot again --- more weps? flamer/machineballgun, +-- more weapons? flamer/machineballgun, -- some kind of bomb that just drops straight down -- "fire and forget" missile -- shockwave @@ -106,7 +104,7 @@ -- new invader: golden snitch, doesn't show up on your radar --- maybe replace (48/100*vCircRadius[i])/2 with something better +-- maybe replace (48/100*SI.vCircRadius[i])/2 with something better ------------------- -- CAPTION TYPES -- @@ -128,203 +126,195 @@ -- so I herd u liek wariables ---------------------------------- -local fMod = 1000000 -- use this for dev and .16+ games +-- The table that holds the Space Invasion variables +local SI = {} + +SI.fMod = 1000000 -- use this for dev and .16+ games -- Tag IDs -local TAG_TIME = 0 -local TAG_BARRELS = 1 -local TAG_SHIELD = 2 -local TAG_ROUND_SCORE = 4 +SI.TAG_TIME = 0 +SI.TAG_BARRELS = 1 +SI.TAG_SHIELD = 2 +SI.TAG_ROUND_SCORE = 4 -- some console stuff -local shellID = 0 -local explosivesID = 0 -local luaGameTicks = 0 +SI.shellID = 0 +SI.explosivesID = 0 -- gaudyRacer -local boosterOn = false -local preciseOn = false -local roundLimit = 3 -- can be overridden by script parameter "rounds" -local roundNumber = 0 -local firstClan = 10 -local gameOver = false -local gameBegun = false - -local bestClan = 10 -local bestScore = 0 -local sdScore = {} -local sdName = {} -local sdKills = {} - -local roundN = 0 -local lastRound -local RoundHasChanged = true +SI.boosterOn = false +SI.preciseOn = false +SI.roundLimit = 3 -- can be overridden by script parameter "rounds" +SI.roundNumber = 0 +SI.lastRound = -1 +SI.gameOver = false +SI.gameBegun = false -- for script parameters -- NOTE: If you change this, also change the default “Space Invasion” game scheme -local startBarrels = 5 -- "barrels" -local startShield = 30 -- "shield" -local startRadShots = 2 -- "pings" -local shieldBonus = 30 -- "shieldbonus" -local barrelBonus = 3 -- "barrelbonus" -local timeBonus = 4 -- "timebonus" -local forceTheme = true -- "forcetheme" +SI.startBarrels = 5 -- "barrels" +SI.startShield = 30 -- "shield" +SI.startRadShots = 2 -- "pings" +SI.shieldBonus = 30 -- "shieldbonus" +SI.barrelBonus = 3 -- "barrelbonus" +SI.timeBonus = 4 -- "timebonus" +SI.forceTheme = true -- "forcetheme" -------------------------- -- hog and team tracking variales -------------------------- -local numhhs = 0 -local hhs = {} - -local numTeams -local teamNameArr = {} -local teamClan = {} -local teamSize = {} -local teamIndex = {} - -local teamScore = {} -local teamCircsKilled = {} -local teamSurfer = {} +SI.numhhs = 0 +SI.hhs = {} + +SI.teamNameArr = {} +SI.teamNameArrReverse = {} +SI.teamClan = {} +SI.teamSize = {} +SI.teamIndex = {} + +SI.teamScore = {} +SI.teamCircsKilled = {} +SI.teamSurfer = {} -- stats variables -local roundKills = 0 -local roundScore = 0 -local RK = 0 -local GK = 0 -local BK = 0 -local OK = 0 -local SK = 0 -local shieldMiser = true -local fierceComp = false -local chainCounter = 0 -local chainLength = 0 -local shotsFired = 0 -local shotsHit = 0 -local sniperHits = 0 -local pointBlankHits = 0 +SI.roundKills = 0 +SI.roundScore = 0 +SI.RK = 0 +SI.GK = 0 +SI.BK = 0 +SI.OK = 0 +SI.SK = 0 +SI.shieldMiser = true +SI.fierceComp = false +SI.chainCounter = 0 +SI.chainLength = 0 +SI.shotsFired = 0 +SI.shotsHit = 0 +SI.sniperHits = 0 +SI.pointBlankHits = 0 --------------------- -- awards (for stats section, just for fun) --------------------- -- global awards -local awardTotalKills=0 -- overall killed invaders (min. 30) +SI.awardTotalKills=0 -- overall killed invaders (min. 30) -- hog awards -local awardRoundScore -- hog with most score in 1 round (min. 50) -local awardRoundKills -- most kills in 1 round (min. 5) -local awardAccuracy -- awarded to hog who didn’t miss once in his round, with most kills (min. 5) -local awardCombo -- hog with longest combo (min. 5) +SI.awardRoundScore = nil -- hog with most score in 1 round (min. 50) +SI.awardRoundKills = nil -- most kills in 1 round (min. 5) +SI.awardAccuracy = nil -- awarded to hog who didn’t miss once in his round, with most kills (min. 5) +SI.awardCombo = nil -- hog with longest combo (min. 5) -- Taunt trackers -local tauntTimer = -1 -local tauntGear = nil -local tauntSound = nil -local tauntClanShots = 0 -- hogs of same clans shot in this turn +SI.tauntTimer = -1 +SI.tauntGear = nil +SI.tauntSound = nil +SI.tauntClanShots = 0 -- hogs of same clans shot in this turn --------------------- -- tumbler goods --------------------- -local moveTimer = 0 -local leftOn = false -local rightOn = false -local upOn = false -local downOn = false +SI.moveTimer = 0 +SI.leftOn = false +SI.rightOn = false +SI.upOn = false +SI.downOn = false ---------------- -- TUMBLER -local wep = {} -local wepAmmo = {} -local wepIndex = 0 -local wepCount = 0 +SI.wep = {} +SI.wepAmmo = {} +SI.wepIndex = 0 +SI.wepCount = 0 ---------------- -local primShotsMax = 5 -local primShotsLeft = 0 - -local TimeLeftCounter = 0 -local TimeLeft = 0 -local stopMovement = false -local tumbleStarted = false - -local beam = false -local pShield -local shieldHealth - -local timer100 = 0 - -local vTag = {} +SI.primShotsMax = 5 +SI.primShotsLeft = 0 + +SI.TimeLeftCounter = 0 +SI.TimeLeft = 0 +SI.stopMovement = false +SI.tumbleStarted = false + +SI.beam = false +SI.pShield = nil +SI.shieldHealth = 0 + +SI.timer100 = 0 + +SI.vTag = {} ----------------------------------------------- -- CIRCLY GOODIES ----------------------------------------------- -local circlesAreGo = false -local playerIsFine = true -local targetHit = false - -local fadeAlpha = 0 -- used to fade the circles out gracefully when player dies -local pTimer = 0 -- tracking projectiles following player - -local circAdjustTimer = 0 -- handle adjustment of circs direction -local m2Count = 0 -- handle speed of circs - -local vCirc = {} -local vCCount = 0 - -local rCirc = {} -local rCircX = {} -local rCircY = {} -local rAlpha = 255 -local rPingTimer = 0 -local radShotsLeft = 0 - -local vCircActive = {} -local vCircHealth = {} -local vType = {} -local vCounter = {} -- how often this circ gets to "fire" etc -local vCounterLim = {} -- when vCounter == vCounterLim circle performs its special -local vCircScore = {} -- how many points killing this invader gives - -local vCircRadMax = {} -local vCircRadMin = {} -local vCircRadDir = {} -local vCircRadCounter = {} - -local vCircDX = {} -local vCircDY = {} - -local vCircX = {} -local vCircY = {} -local vCircMinA = {} -local vCircMaxA = {} -local vCircType = {} -local vCircPulse = {} -local vCircFuckAll = {} -local vCircRadius = {} -local vCircWidth = {} -local vCircCol = {} +SI.circlesAreGo = false +SI.playerIsFine = true +SI.targetHit = false + +SI.fadeAlpha = 0 -- used to fade the circles out gracefully when player dies +SI.pTimer = 0 -- tracking projectiles following player + +SI.circAdjustTimer = 0 -- handle adjustment of circs direction +SI.m2Count = 0 -- handle speed of circs + +SI.vCirc = {} +SI.vCCount = 0 + +SI.rCirc = {} +SI.rCircX = {} +SI.rCircY = {} +SI.rAlpha = 255 +SI.rPingTimer = 0 +SI.radShotsLeft = 0 + +SI.vCircActive = {} +SI.vCircHealth = {} +SI.vType = {} +SI.vCounter = {} -- how often this circ gets to "fire" etc +SI.vCounterLim = {} -- when SI.vCounter == SI.vCounterLim circle performs its special +SI.vCircScore = {} -- how many points killing this invader gives + +SI.vCircRadMax = {} +SI.vCircRadMin = {} +SI.vCircRadDir = {} +SI.vCircRadCounter = {} + +SI.vCircDX = {} +SI.vCircDY = {} + +SI.vCircX = {} +SI.vCircY = {} +SI.vCircMinA = {} +SI.vCircMaxA = {} +SI.vCircType = {} +SI.vCircPulse = {} +SI.vCircFuckAll = {} +SI.vCircRadius = {} +SI.vCircWidth = {} +SI.vCircCol = {} -- Colors -- Invaders -local colorDrone = 0xFF0000FF -local colorBoss = 0x0050FFFF -local colorBossParticle = colorBoss -local colorAmmo = 0x00FF00FF -local colorShield = 0xA800FFFF -local colorShieldParticle = colorShield -local colorDisabled = 0xFFFFFFFF -- disabled invader at end of turn - --- Other colors -local colorMsgDepleted = 0xFF0000FF -local colorMsgBonus = 0xFFBA00FF -local colorTimer = 0xFFEE00FF -local colorScore = 0xFFFFFFFF +SI.colorDrone = 0xFF0000FF +SI.colorBoss = 0x0050FFFF +SI.colorBossParticle = SI.colorBoss +SI.colorAmmo = 0x00FF00FF +SI.colorShield = 0xA800FFFF +SI.colorShieldParticle = SI.colorShield +SI.colorDisabled = 0xFFFFFFFF -- disabled invader at end of turn + +-- Other SI.colors +SI.colorMsgDepleted = 0xFF0000FF +SI.colorMsgBonus = 0xFFBA00FF +SI.colorTimer = 0xFFEE00FF +SI.colorScore = 0xFFFFFFFF ------------------------------------------- -- some lazy copypasta/modified methods @@ -334,7 +324,7 @@ function HideTag(i) - SetVisualGearValues(vTag[i],0,0,0,0,0,1,0, 0, 240000, 0xFFFFFF00) + SetVisualGearValues(SI.vTag[i],0,0,0,0,0,1,0, 0, 240000, 0xFFFFFF00) end @@ -344,33 +334,33 @@ local xOffset = 40 local yOffset, tValue, tCol - if i == TAG_TIME then + if i == SI.TAG_TIME then yOffset = 40 - tCol = colorTimer - tValue = TimeLeft - elseif i == TAG_BARRELS then + tCol = SI.colorTimer + tValue = SI.TimeLeft + elseif i == SI.TAG_BARRELS then zoomL = 1.1 yOffset = 70 - tCol = colorAmmo - tValue = wepAmmo[wepIndex] - elseif i == TAG_SHIELD then + tCol = SI.colorAmmo + tValue = SI.wepAmmo[SI.wepIndex] + elseif i == SI.TAG_SHIELD then zoomL = 1.1 xOffset = 40 + 35 yOffset = 70 - tCol = colorShield - tValue = shieldHealth - 80 - elseif i == TAG_ROUND_SCORE then + tCol = SI.colorShield + tValue = SI.shieldHealth - 80 + elseif i == SI.TAG_ROUND_SCORE then zoomL = 1.1 xOffset = 40 yOffset = 100 - tCol = colorScore - tValue = roundScore + tCol = SI.colorScore + tValue = SI.roundScore end - DeleteVisualGear(vTag[i]) - vTag[i] = AddVisualGear(0, 0, vgtHealthTag, 0, false) + DeleteVisualGear(SI.vTag[i]) + SI.vTag[i] = AddVisualGear(0, 0, vgtHealthTag, 0, false) SetVisualGearValues ( - vTag[i], --id + SI.vTag[i], --id -(div(ScreenWidth, 2)) + xOffset, --xoffset ScreenHeight - yOffset, --yoffset 0, --dx @@ -389,73 +379,52 @@ -- make a list of individual team names for i = 0, (TeamsCount-1) do - teamSize[i] = 0 - teamIndex[i] = 0 - teamScore[i] = 0 - teamCircsKilled[i] = 0 - teamSurfer[i] = false + SI.teamSize[i] = 0 + SI.teamIndex[i] = 0 + SI.teamScore[i] = 0 + SI.teamCircsKilled[i] = 0 + SI.teamSurfer[i] = false end - numTeams = 0 - - for i = 0, (numhhs-1) do - - local z = 0 - local unfinished = true - while(unfinished == true) do - - local newTeam = true - local tempHogTeamName = GetHogTeamName(hhs[i]) -- this is the new name - - if tempHogTeamName == teamNameArr[z] then - newTeam = false - unfinished = false - end - - z = z + 1 - - if z == (TeamsCount-1) then - unfinished = false - if newTeam == true then - teamNameArr[numTeams] = tempHogTeamName - numTeams = numTeams + 1 - end - end - - end + + for i=0, TeamsCount-1 do + + local name = GetTeamName(i) + SI.teamNameArr[i] = name + SI.teamNameArrReverse[name] = i end - -- find out how many hogs per team, and the index of the first hog in hhs + -- find out how many hogs per team, and the index of the first hog in SI.hhs for i = 0, (TeamsCount-1) do - for z = 0, (numhhs-1) do - if GetHogTeamName(hhs[z]) == teamNameArr[i] then - teamClan[i] = GetHogClan(hhs[z]) - if teamSize[i] == 0 then - teamIndex[i] = z -- should give starting index + for z = 0, (SI.numhhs-1) do + if GetHogTeamName(SI.hhs[z]) == SI.teamNameArr[i] then + SI.teamClan[i] = GetHogClan(SI.hhs[z]) + if SI.teamSize[i] == 0 then + SI.teamIndex[i] = z -- should give starting index end - teamSize[i] = teamSize[i] + 1 - --add a pointer so this hog appears at i in hhs + SI.teamSize[i] = SI.teamSize[i] + 1 + --add a pointer so this hog appears at i in SI.hhs end end end for i=0, TeamsCount-1 do - SetTeamLabel(teamNameArr[i], teamScore[i]) + SetTeamLabel(SI.teamNameArr[i], SI.teamScore[i]) end end -- control function AwardPoints(p) - roundScore = roundScore + p - DrawTag(TAG_ROUND_SCORE) + SI.roundScore = SI.roundScore + p + DrawTag(SI.TAG_ROUND_SCORE) for i = 0,(TeamsCount-1) do - if teamClan[i] == GetHogClan(CurrentHedgehog) then - teamScore[i] = teamScore[i] + p - SetTeamLabel(teamNameArr[i], teamScore[i]) + if SI.teamClan[i] == GetHogClan(CurrentHedgehog) then + SI.teamScore[i] = SI.teamScore[i] + p + SetTeamLabel(SI.teamNameArr[i], SI.teamScore[i]) end end @@ -463,12 +432,12 @@ function AwardKills(t) - roundKills = roundKills + 1 + SI.roundKills = SI.roundKills + 1 for i = 0,(TeamsCount-1) do - if teamClan[i] == GetHogClan(CurrentHedgehog) then - teamCircsKilled[i] = teamCircsKilled[i] + 1 - awardTotalKills = awardTotalKills + 1 + if SI.teamClan[i] == GetHogClan(CurrentHedgehog) then + SI.teamCircsKilled[i] = SI.teamCircsKilled[i] + 1 + SI.awardTotalKills = SI.awardTotalKills + 1 end end @@ -505,13 +474,15 @@ return newAward end +-- Update scoreboard and check victory state. +-- Returns 2 bools: +-- 1: true if game over +-- 2: true if game's not over but we're playing now in tie-breaking phase + function CommentOnScore() local teamStats = {} for i = 0,(TeamsCount-1) do - sdScore[i] = teamScore[i] - sdKills[i] = teamCircsKilled[i] - sdName[i] = teamNameArr[i] - table.insert(teamStats, {score = teamScore[i], kills = teamCircsKilled[i], name = teamNameArr[i]}) + table.insert(teamStats, {score = SI.teamScore[i], kills = SI.teamCircsKilled[i], name = SI.teamNameArr[i]}) end local scorecomp = function (v1, v2) @@ -529,7 +500,7 @@ local comment = teamStats[i].name .. " |" .. string.format(loc("Score: %d"), teamStats[i].score) .. "|" .. string.format(loc("Kills: %d"), teamStats[i].kills) - if i < TeamsCount then + if i < TeamsCount then comment = comment .. "| |" end table.insert(teamComment, comment) @@ -541,34 +512,54 @@ table.insert(teamComment, comment) end + local roundLimitHit = SI.roundNumber >= SI.roundLimit + local tie = teamStats[1].score == teamStats[2].score + local lGameOver = roundLimitHit and (not tie) + local entireC = "" + for i = TeamsCount,1,-1 do entireC = entireC .. teamComment[i] end + local statusText, scoreText - if roundNumber >= roundLimit then + -- Game is over + if lGameOver then statusText = loc("Game over!") scoreText = loc("Final team scores:") - else - AddCaption(string.format(loc("Rounds complete: %d/%d"), roundNumber, roundLimit), capcolDefault, capgrpMessage) - return + -- Round is over and game is not yet complete + elseif not roundLimitHit then + AddCaption(string.format(loc("Rounds complete: %d/%d"), SI.roundNumber, SI.roundLimit), capcolDefault, capgrpMessage) + return lGameOver, false + -- Teams are tied for the lead at the end + elseif roundLimitHit and tie then + local tieBreakingRound = SI.roundNumber - SI.roundLimit + 1 + local msg + if tieBreakingRound == 1 then + msg = loc("Teams are tied! Continue playing rounds until we have a winner!") + else + msg = string.format(loc("Tie-breaking round %d"), tieBreakingRound) + end + AddCaption(msg, capcolDefault, capgrpMessage) + return lGameOver, true end + local displayTime - if roundNumber >= roundLimit then + if lGameOver then displayTime = 20000 else displayTime = 1 end ShowMission( loc("Space Invasion"), statusText, - string.format(loc("Rounds complete: %d/%d"), roundNumber, roundLimit) .. "| " .. "|" .. + string.format(loc("Rounds complete: %d/%d"), SI.roundNumber, SI.roundLimit) .. "| " .. "|" .. scoreText .. " |" ..entireC, 4, displayTime) - if roundNumber >= roundLimit then + if lGameOver then local winnerTeam = teamStats[1].name - for i = 0, (numhhs-1) do - if GetHogTeamName(hhs[i]) == winnerTeam then - SetState(hhs[i], bor(GetState(hhs[i]), gstWinner)) + for i = 0, (SI.numhhs-1) do + if GetHogTeamName(SI.hhs[i]) == winnerTeam then + SetState(SI.hhs[i], bor(GetState(SI.hhs[i]), gstWinner)) end end AddCaption(string.format(loc("%s wins!"), winnerTeam), capcolDefault, capgrpGameState) @@ -591,11 +582,21 @@ --[[ Award some awards (just for fun, its for the stats screen only and has no effect on the score or game outcome. ]] local awardsGiven = 0 - - if awardTotalKills >= 30 then + + if SI.roundNumber == SI.roundLimit + 1 then + SendStat(siCustomAchievement, + loc("The teams were tied, so an additional round has been played to determine the winner.")) + awardsGiven = awardsGiven + 1 + elseif SI.roundNumber > SI.roundLimit then + SendStat(siCustomAchievement, + string.format(loc("The teams were tied, so %d additional rounds have been played to determine the winner."), + SI.roundNumber - SI.roundLimit)) + awardsGiven = awardsGiven + 1 + end + if SI.awardTotalKills >= 30 then awardsGiven = awardsGiven + 1 SendStat(siCustomAchievement, - string.format(loc("%d invaders have been destroyed in this game."), awardTotalKills)) + string.format(loc("%d invaders have been destroyed in this game."), SI.awardTotalKills)) end table.sort(teamStats, killscomp) @@ -615,73 +616,73 @@ teamStats[1].name, teamStats[1].kills)) end - if awardRoundKills ~= nil then + if SI.awardRoundKills ~= nil then awardsGiven = awardsGiven + 1 local text - if awardRoundKills.value >= 33 then + if SI.awardRoundKills.value >= 33 then text = loc("%s (%s) has been invited to join the Planetary Association of the Hedgehogs, it destroyed a staggering %d invaders in just one round!") - elseif awardRoundKills.value >= 22 then - if awardRoundKills.hogName == "Rambo" then + elseif SI.awardRoundKills.value >= 22 then + if SI.awardRoundKills.hogName == "Rambo" then text = loc("The hardships of the war turned %s (%s) into a killing machine: %d invaders destroyed in one round!") else text = loc("%s (%s) is Rambo in a hedgehog costume! He destroyed %d invaders in one round.") end - elseif awardRoundKills.value >= 11 then + elseif SI.awardRoundKills.value >= 11 then text = loc("%s (%s) is addicted to killing: %d invaders destroyed in one round.") else text = loc("%s (%s) destroyed %d invaders in one round.") end SendStat(siCustomAchievement, string.format(text, - awardRoundKills.hogName, awardRoundKills.teamName, awardRoundKills.value)) + SI.awardRoundKills.hogName, SI.awardRoundKills.teamName, SI.awardRoundKills.value)) end - if awardRoundScore ~= nil then + if SI.awardRoundScore ~= nil then awardsGiven = awardsGiven + 1 local text - if awardRoundScore.value >= 300 then + if SI.awardRoundScore.value >= 300 then text = loc("%s (%s) was undoubtedly the very best professional tumbler in this game: %d points in one round!") - elseif awardRoundScore.value >= 250 then + elseif SI.awardRoundScore.value >= 250 then text = loc("%s (%s) struck like a meteor: %d points in only one round!") - elseif awardRoundScore.value >= 200 then + elseif SI.awardRoundScore.value >= 200 then text = loc("%s (%s) is good at this: %d points in only one round!") - elseif awardRoundScore.value >= 150 then + elseif SI.awardRoundScore.value >= 150 then text = loc("%s (%s) tumbles like no other: %d points in one round.") - elseif awardRoundScore.value >= 100 then + elseif SI.awardRoundScore.value >= 100 then text = loc("%s (%s) is a tumbleweed: %d points in one round.") else text = loc("%s (%s) was the best baby tumbler: %d points in one round.") end SendStat(siCustomAchievement, string.format(text, - awardRoundScore.hogName, awardRoundScore.teamName, awardRoundScore.value)) + SI.awardRoundScore.hogName, SI.awardRoundScore.teamName, SI.awardRoundScore.value)) end - if awardAccuracy ~= nil then + if SI.awardAccuracy ~= nil then awardsGiven = awardsGiven + 1 local text - if awardAccuracy.value >= 20 then + if SI.awardAccuracy.value >= 20 then text = loc("The Society of Perfectionists greets %s (%s): No misses and %d hits in its best round.") - elseif awardAccuracy.value >= 10 then + elseif SI.awardAccuracy.value >= 10 then text = loc("%s (%s) is a hardened hunter: No misses and %d hits in its best round!") else text = loc("%s (%s) shot %d invaders and never missed in the best round!") end SendStat(siCustomAchievement, string.format(text, - awardAccuracy.hogName, awardAccuracy.teamName, awardAccuracy.value)) + SI.awardAccuracy.hogName, SI.awardAccuracy.teamName, SI.awardAccuracy.value)) end - if awardCombo ~= nil then + if SI.awardCombo ~= nil then awardsGiven = awardsGiven + 1 local text - if awardCombo.value >= 11 then + if SI.awardCombo.value >= 11 then text = loc("%s (%s) was lightning-fast! Longest combo of %d, absolutely insane!") - elseif awardCombo.value >= 8 then + elseif SI.awardCombo.value >= 8 then text = loc("%s (%s) gave short shrift to the invaders: Longest combo of %d!") else text = loc("%s (%s) was on fire: Longest combo of %d.") end SendStat(siCustomAchievement, string.format(text, - awardCombo.hogName, awardCombo.teamName, awardCombo.value)) + SI.awardCombo.hogName, SI.awardCombo.teamName, SI.awardCombo.value)) end if awardsGiven == 0 then local text @@ -691,47 +692,108 @@ elseif r == 3 then text = loc("Nothing of interest has happened.") elseif r == 4 then text = loc("There are no snarky comments this time.") end - + SendStat(siCustomAchievement, text) end end + + return lGameOver, false end function onNewRound() - roundNumber = roundNumber + 1 - - CommentOnScore() - - -- end game if its at round limit - if roundNumber >= roundLimit then - + SI.lastRound = TotalRounds + SI.roundNumber = SI.roundNumber + 1 + + local lGameOver, lTied = CommentOnScore() + local bestScore = 0 + local bestClan = -1 + + -- Game has been determined to be over, so end it + if lGameOver then + + -- Get winning score for i = 0, (TeamsCount-1) do - if teamScore[i] > bestScore then - bestScore = teamScore[i] - bestClan = teamClan[i] + if SI.teamScore[i] > bestScore then + bestScore = SI.teamScore[i] + bestClan = SI.teamClan[i] end end -- Kill off all the losers - for i = 0, (numhhs-1) do - if GetHogClan(hhs[i]) ~= bestClan then - SetEffect(hhs[i], heResurrectable, 0) - SetHealth(hhs[i],0) + for i = 0, (SI.numhhs-1) do + if GetHogClan(SI.hhs[i]) ~= bestClan then + SetEffect(SI.hhs[i], heResurrectable, 0) + SetHealth(SI.hhs[i],0) + -- hilarious loser face + SetState(SI.hhs[i], bor(GetState(SI.hhs[i]), gstLoser)) end end -- Game over - gameOver = true + SI.gameOver = true EndTurn(true) - TimeLeft = 0 + SI.TimeLeft = 0 SendStat(siGraphTitle, loc("Score graph")) + + -- Round limit passed and teams are tied! + elseif lTied then + -- Enter (or continue) tie-breaking phase... + + -- Rules in case of a tie: + -- 1) All teams that are not tied for the lead are killed (they can't play anymore, but they will keep their score and be ranked normally) + -- 2) Another round is played with the remaining teams + -- 3) After this round, scores are checked again to determine a winner. If there's a tie again, this procedure is repeated + + -- Get leading teams + for i = 0, (TeamsCount-1) do + if SI.teamScore[i] > bestScore then + bestScore = SI.teamScore[i] + end + end + + local tiedForTheLead = {} + for i = 0, (TeamsCount-1) do + if SI.teamScore[i] == bestScore then + tiedForTheLead[i] = true + end + end + + local wasCurrent = false + -- Kill teams not in the top + for i = 0, (SI.numhhs-1) do + local hog = SI.hhs[i] + if GetHealth(hog) then -- check if hog is still alive + local team = SI.teamNameArrReverse[GetHogTeamName(hog)] + if team and tiedForTheLead[team] ~= true then + -- hilarious loser face + SetState(hog, bor(GetState(hog), gstLoser)) + -- die! + SetEffect(hog, heResurrectable, 0) + SetHealth(hog, 0) + -- Note the death might not trigger immediately since we + -- zero the health at the beginning of a turn rather than + -- the end of one. + -- It's just a minor visual thing, not a big deal. + if hog == CurrentHedgehog then + wasCurrent = true + end + end + end + end + + -- if current hedgehog was among the loser, end the turn + if wasCurrent then + EndTurn(true) + end + + -- From that point on, the game just continues normally ... end end -- gaudy racer function CheckForNewRound() - if GetHogClan(CurrentHedgehog) == firstClan then + if TotalRounds > 0 and TotalRounds > SI.lastRound then onNewRound() end @@ -759,14 +821,14 @@ local lfs if GetGearType(gear) == gtShell then lfs = 50 -- roughly 5 seconds - shellID = shellID + 1 - setGearValue(gear,"ID",shellID) + SI.shellID = SI.shellID + 1 + setGearValue(gear,"ID",SI.shellID) elseif GetGearType(gear) == gtBall then lfs = 5 --70 -- 7s elseif GetGearType(gear) == gtExplosives then lfs = 15 -- 1.5s - explosivesID = explosivesID + 1 - setGearValue(gear,"ID",explosivesID) + SI.explosivesID = SI.explosivesID + 1 + setGearValue(gear,"ID",SI.explosivesID) setGearValue(gear,"XP", GetX(gear)) setGearValue(gear,"YP", GetY(gear)) elseif GetGearType(gear) == gtFlame then @@ -823,22 +885,22 @@ function ChangeWeapon() - wepIndex = wepIndex + 1 - if wepIndex == wepCount then - wepIndex = 0 + SI.wepIndex = SI.wepIndex + 1 + if SI.wepIndex == SI.wepCount then + SI.wepIndex = 0 end - AddCaption(wep[wepIndex], GetClanColor(GetHogClan(CurrentHedgehog)), capgrpAmmoinfo) + AddCaption(SI.wep[SI.wepIndex], GetClanColor(GetHogClan(CurrentHedgehog)), capgrpAmmoinfo) end -- derp tumbler function onPrecise() - if (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) and (wepAmmo[wepIndex] > 0) then - - wepAmmo[wepIndex] = wepAmmo[wepIndex] - 1 - - if wep[wepIndex] == loc("Barrel Launcher") then - shotsFired = shotsFired +1 + if (CurrentHedgehog ~= nil) and (SI.stopMovement == false) and (SI.tumbleStarted == true) and (SI.wepAmmo[SI.wepIndex] > 0) then + + SI.wepAmmo[SI.wepIndex] = SI.wepAmmo[SI.wepIndex] - 1 + + if SI.wep[SI.wepIndex] == loc("Barrel Launcher") then + SI.shotsFired = SI.shotsFired +1 local morte = AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtExplosives, 0, 0, 0, 1) CopyPV(CurrentHedgehog, morte) @@ -847,67 +909,67 @@ y = y*2 SetGearVelocity(morte, x, y) - if wepAmmo[wepIndex] == 0 then + if SI.wepAmmo[SI.wepIndex] == 0 then PlaySound(sndSuddenDeath) - AddCaption(loc("Ammo depleted!"),colorMsgDepleted,capgrpAmmostate) + AddCaption(loc("Ammo depleted!"),SI.colorMsgDepleted,capgrpAmmostate) else PlaySound(sndThrowRelease) end - DrawTag(TAG_BARRELS) - - elseif wep[wepIndex] == loc("Mine Deployer") then + DrawTag(SI.TAG_BARRELS) + + elseif SI.wep[SI.wepIndex] == loc("Mine Deployer") then local morte = AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtAirBomb, 0, 0, 0, 0) SetTimer(morte, 1000) - DrawTag(TAG_BARRELS) + DrawTag(SI.TAG_BARRELS) end - elseif (wepAmmo[wepIndex] == 0) and (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) then + elseif (SI.wepAmmo[SI.wepIndex] == 0) and (CurrentHedgehog ~= nil) and (SI.stopMovement == false) and (SI.tumbleStarted == true) then PlaySound(sndDenied) - AddCaption(loc("Ammo depleted!"),colorMsgDepleted,capgrpAmmostate) + AddCaption(loc("Ammo depleted!"),SI.colorMsgDepleted,capgrpAmmostate) end - preciseOn = true + SI.preciseOn = true end function onPreciseUp() - preciseOn = false + SI.preciseOn = false end function onLJump() - if (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) then - shieldMiser = false - if shieldHealth == 80 then - AddCaption(loc("Shield depleted"),colorMsgDepleted,capgrpAmmostate) + if (CurrentHedgehog ~= nil) and (SI.stopMovement == false) and (SI.tumbleStarted == true) then + SI.shieldMiser = false + if SI.shieldHealth == 80 then + AddCaption(loc("Shield depleted"),SI.colorMsgDepleted,capgrpAmmostate) PlaySound(sndDenied) - elseif (beam == false) and (shieldHealth > 80) then - beam = true - SetVisualGearValues(pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), 40, 255, 1, 10, 0, 300, 1, colorShield) - AddCaption( string.format(loc("Shield ON: %d power remaining"), shieldHealth - 80), colorShield, capgrpAmmostate) + elseif (SI.beam == false) and (SI.shieldHealth > 80) then + SI.beam = true + SetVisualGearValues(SI.pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), 40, 255, 1, 10, 0, 300, 1, SI.colorShield) + AddCaption( string.format(loc("Shield ON: %d power remaining"), SI.shieldHealth - 80), SI.colorShield, capgrpAmmostate) PlaySound(sndInvulnerable) else - beam = false - SetVisualGearValues(pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), 0, 0, 1, 10, 0, 0, 0, colorShield) - AddCaption( string.format(loc("Shield OFF: %d power remaining"), shieldHealth - 80), colorShield, capgrpAmmostate) + SI.beam = false + SetVisualGearValues(SI.pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), 0, 0, 1, 10, 0, 0, 0, SI.colorShield) + AddCaption( string.format(loc("Shield OFF: %d power remaining"), SI.shieldHealth - 80), SI.colorShield, capgrpAmmostate) end end end function onHJump() - if (CurrentHedgehog ~= nil) and (stopMovement == false) and (tumbleStarted == true) and - (rAlpha == 255) then - if radShotsLeft > 0 then - rPingTimer = 0 - rAlpha = 0 - radShotsLeft = radShotsLeft -1 - AddCaption(string.format(loc("Pings left: %d"), radShotsLeft),GetClanColor(GetHogClan(CurrentHedgehog)),capgrpAmmostate) + if (CurrentHedgehog ~= nil) and (SI.stopMovement == false) and (SI.tumbleStarted == true) and + (SI.rAlpha == 255) then + if SI.radShotsLeft > 0 then + SI.rPingTimer = 0 + SI.rAlpha = 0 + SI.radShotsLeft = SI.radShotsLeft -1 + AddCaption(string.format(loc("Pings left: %d"), SI.radShotsLeft),GetClanColor(GetHogClan(CurrentHedgehog)),capgrpAmmostate) -- Play sonar sound PlaySound(sndJetpackLaunch) else - AddCaption(loc("No radar pings left!"),colorMsgDepleted,capgrpAmmostate) + AddCaption(loc("No radar pings left!"),SI.colorMsgDepleted,capgrpAmmostate) PlaySound(sndDenied) end end @@ -919,35 +981,35 @@ ----------------- function onLeft() - leftOn = true + SI.leftOn = true end function onRight() - rightOn = true + SI.rightOn = true end function onUp() - upOn = true + SI.upOn = true end function onDown() - downOn = true + SI.downOn = true end function onDownUp() - downOn = false + SI.downOn = false end function onUpUp() - upOn = false + SI.upOn = false end function onLeftUp() - leftOn = false + SI.leftOn = false end function onRightUp() - rightOn = false + SI.rightOn = false end -------------------------- @@ -957,31 +1019,31 @@ function onParameters() parseParams() if params["rounds"] ~= nil then - roundLimit = math.floor(tonumber(params["rounds"])) + SI.roundLimit = math.floor(tonumber(params["rounds"])) end if params["barrels"] ~= nil then - startBarrels = math.floor(tonumber(params["barrels"])) + SI.startBarrels = math.floor(tonumber(params["barrels"])) end if params["pings"] ~= nil then - startRadShots = math.floor(tonumber(params["pings"])) + SI.startRadShots = math.floor(tonumber(params["pings"])) end if params["shield"] ~= nil then - startShield = math.floor(tonumber(params["shield"])) + SI.startShield = math.floor(tonumber(params["shield"])) end if params["barrelbonus"] ~= nil then - barrelBonus = math.floor(tonumber(params["barrelbonus"])) + SI.barrelBonus = math.floor(tonumber(params["barrelbonus"])) end if params["shieldbonus"] ~= nil then - shieldBonus = math.floor(tonumber(params["shieldbonus"])) + SI.shieldBonus = math.floor(tonumber(params["shieldbonus"])) end if params["timebonus"] ~= nil then - timeBonus = math.floor(tonumber(params["timebonus"])) + SI.timeBonus = math.floor(tonumber(params["timebonus"])) end if params["forcetheme"] == "false" then - forceTheme = false + SI.forceTheme = false else - forceTheme = true + SI.forceTheme = true end end @@ -1003,7 +1065,7 @@ GameFlags = band(GameFlags, allowedFlags) - if forceTheme then + if SI.forceTheme then Theme = "EarthRise" end CaseFreq = 0 @@ -1014,25 +1076,27 @@ HealthDecrease = 0 WorldEdge = weNone - local tags = { TAG_TIME, TAG_BARRELS, TAG_SHIELD, TAG_ROUND_SCORE } + local tags = { SI.TAG_TIME, SI.TAG_BARRELS, SI.TAG_SHIELD, SI.TAG_ROUND_SCORE } for t=1, #tags do - vTag[tags[t]] = AddVisualGear(0, 0, vgtHealthTag, 0, false) + SI.vTag[tags[t]] = AddVisualGear(0, 0, vgtHealthTag, 0, false) HideTag(tags[t]) end - wep[0] = loc("Barrel Launcher") - wep[1] = loc("Mine Deployer") - wep[2] = loc("Flamer") - - wepCount = 3 + SI.wep[0] = loc("Barrel Launcher") + SI.wep[1] = loc("Mine Deployer") + SI.wep[2] = loc("Flamer") + + SI.wepCount = 3 end function onGameStart() - SendGameResultOff() - SendRankingStatsOff() - SendAchievementsStatsOff() - SendHealthStatsOff() + if ClansCount >= 2 then + SendGameResultOff() + SendRankingStatsOff() + SendAchievementsStatsOff() + SendHealthStatsOff() + end ShowMission ( loc("SPACE INVASION"), @@ -1047,7 +1111,7 @@ loc("Use the shield to protect yourself from bazookas.") .. "|" .. " " .. "|" .. - string.format(loc("Round Limit: %d"), roundLimit) .. "|" .. + string.format(loc("Round Limit: %d"), SI.roundLimit) .. "|" .. " " .. "|" .. loc("Movement: [Up], [Down], [Left], [Right]") .. "|" .. @@ -1060,20 +1124,19 @@ CreateMeSomeCircles() RebuildTeamInfo() -- control - lastRound = TotalRounds end function onScreenResize() -- redraw Tags so that their screen locations are updated - if (gameBegun == true) then - DrawTag(TAG_ROUND_SCORE) - if (stopMovement == false) then - DrawTag(TAG_BARRELS) - DrawTag(TAG_SHIELD) - if (tumbleStarted == true) then - DrawTag(TAG_TIME) + if (SI.gameBegun == true) then + DrawTag(SI.TAG_ROUND_SCORE) + if (SI.stopMovement == false) then + DrawTag(SI.TAG_BARRELS) + DrawTag(SI.TAG_SHIELD) + if (SI.tumbleStarted == true) then + DrawTag(SI.TAG_TIME) end end end @@ -1082,31 +1145,31 @@ function onNewTurn() - radShotsLeft = startRadShots - stopMovement = false - tumbleStarted = false - boosterOn = false - beam = false - shieldHealth = startShield + 80 -- 50 = 5 secs, roughly - - RK = 0 - GK = 0 - BK = 0 - OK = 0 - SK = 0 - roundKills = 0 - roundScore = 0 - shieldMiser = true - fierceComp = false - shotsFired = 0 - shotsHit = 0 - sniperHits = 0 - pointBlankHits = 0 - chainLength = 0 - chainCounter = 0 - - tauntClanShots = 0 - tauntTimer = -1 + SI.radShotsLeft = SI.startRadShots + SI.stopMovement = false + SI.tumbleStarted = false + SI.boosterOn = false + SI.beam = false + SI.shieldHealth = SI.startShield + 80 -- 50 = 5 secs, roughly + + SI.RK = 0 + SI.GK = 0 + SI.BK = 0 + SI.OK = 0 + SI.SK = 0 + SI.roundKills = 0 + SI.roundScore = 0 + SI.shieldMiser = true + SI.fierceComp = false + SI.shotsFired = 0 + SI.shotsHit = 0 + SI.sniperHits = 0 + SI.pointBlankHits = 0 + SI.chainLength = 0 + SI.chainCounter = 0 + + SI.tauntClanShots = 0 + SI.tauntTimer = -1 ------------------------- -- gaudy racer @@ -1114,15 +1177,14 @@ CheckForNewRound() -- Handle Starting Stage of Game - if (gameOver == false) and (gameBegun == false) then - gameBegun = true - roundNumber = 0 -- 0 - firstClan = GetHogClan(CurrentHedgehog) + if (SI.gameOver == false) and (SI.gameBegun == false) then + SI.gameBegun = true + SI.roundNumber = 0 -- 0 end - if gameOver == true then - stopMovement = true - tumbleStarted = false + if SI.gameOver == true then + SI.stopMovement = true + SI.tumbleStarted = false SetMyCircles(false) end @@ -1131,22 +1193,22 @@ -- tumbler ---- - wepAmmo[0] = startBarrels - wepAmmo[1] = startRadShots - wepAmmo[2] = 5000 - wepIndex = 2 + SI.wepAmmo[0] = SI.startBarrels + SI.wepAmmo[1] = SI.startRadShots + SI.wepAmmo[2] = 5000 + SI.wepIndex = 2 ChangeWeapon() - HideTag(TAG_TIME) - if not gameOver then - DrawTag(TAG_BARRELS) - DrawTag(TAG_SHIELD) - DrawTag(TAG_ROUND_SCORE) + HideTag(SI.TAG_TIME) + if not SI.gameOver then + DrawTag(SI.TAG_BARRELS) + DrawTag(SI.TAG_SHIELD) + DrawTag(SI.TAG_ROUND_SCORE) else - HideTag(TAG_BARRELS) - HideTag(TAG_SHIELD) - HideTag(TAG_ROUND_SCORE) + HideTag(SI.TAG_BARRELS) + HideTag(SI.TAG_SHIELD) + HideTag(SI.TAG_ROUND_SCORE) end end @@ -1156,7 +1218,7 @@ HandleLifeSpan(gear) DeleteFarFlungBarrel(gear) - if circlesAreGo == true then + if SI.circlesAreGo == true then CheckVarious(gear) ProjectileTrack(gear) end @@ -1167,9 +1229,9 @@ if gear == CurrentHedgehog then for i = 0,(TeamsCount-1) do - if teamClan[i] == GetHogClan(CurrentHedgehog) and (teamSurfer[i] == false) then - teamSurfer[i] = true - AddCaption(loc("Surfer! +15 points!"),colorMsgBonus,capgrpMessage) + if SI.teamClan[i] == GetHogClan(CurrentHedgehog) and (SI.teamSurfer[i] == false) then + SI.teamSurfer[i] = true + AddCaption(loc("Surfer! +15 points!"),SI.colorMsgBonus,capgrpMessage) AwardPoints(15) end end @@ -1179,40 +1241,38 @@ function onGameTick() - luaGameTicks = luaGameTicks + 1 - HandleCircles() - timer100 = timer100 + 1 - if timer100 >= 100 then - timer100 = 0 - - if beam == true then - shieldHealth = shieldHealth - 1 - if shieldHealth < 80 then - shieldHealth = 80 - beam = false - AddCaption(loc("Shield depleted"),colorMsgDepleted,capgrpAmmostate) + SI.timer100 = SI.timer100 + 1 + if SI.timer100 >= 100 then + SI.timer100 = 0 + + if SI.beam == true then + SI.shieldHealth = SI.shieldHealth - 1 + if SI.shieldHealth < 80 then + SI.shieldHealth = 80 + SI.beam = false + AddCaption(loc("Shield depleted"),SI.colorMsgDepleted,capgrpAmmostate) PlaySound(sndMineTick) PlaySound(sndSwitchHog) end end - if tauntTimer > 0 then - tauntTimer = tauntTimer - 100 - if tauntTimer <= 0 and tumbleStarted and not stopMovement then - PlaySound(tauntSound, tauntGear) + if SI.tauntTimer > 0 then + SI.tauntTimer = SI.tauntTimer - 100 + if SI.tauntTimer <= 0 and SI.tumbleStarted and not SI.stopMovement then + PlaySound(SI.tauntSound, SI.tauntGear) end end runOnGears(ThingsToBeRunOnGears) - if circlesAreGo == true then + if SI.circlesAreGo == true then CheckDistances() end -- white smoke trail as player falls from the sky - if (TimeLeft <= 0) and (stopMovement == true) and (CurrentHedgehog ~= nil) then + if (SI.TimeLeft <= 0) and (SI.stopMovement == true) and (CurrentHedgehog ~= nil) then local j,k = GetGearVelocity(CurrentHedgehog) if (j ~= 0) and (k ~= 0) then AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtSmoke, 0, false) @@ -1223,40 +1283,40 @@ -- start the player tumbling with a boom once their turn has actually begun - if (tumbleStarted == false) and (gameOver == false) then + if (SI.tumbleStarted == false) and (SI.gameOver == false) then if (TurnTimeLeft > 0) and (TurnTimeLeft ~= TurnTime) then - tumbleStarted = true - TimeLeft = (TurnTime/1000) - fadeAlpha = 0 - rAlpha = 255 + SI.tumbleStarted = true + SI.TimeLeft = (TurnTime/1000) + SI.fadeAlpha = 0 + SI.rAlpha = 255 AddGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), gtGrenade, 0, 0, 0, 1) - DrawTag(TAG_TIME) - DrawTag(TAG_BARRELS) - DrawTag(TAG_SHIELD) - DrawTag(TAG_ROUND_SCORE) + DrawTag(SI.TAG_TIME) + DrawTag(SI.TAG_BARRELS) + DrawTag(SI.TAG_SHIELD) + DrawTag(SI.TAG_ROUND_SCORE) SetMyCircles(true) end end - if (CurrentHedgehog ~= nil) and (tumbleStarted == true) then + if (CurrentHedgehog ~= nil) and (SI.tumbleStarted == true) then -- Calculate and display turn time - TimeLeftCounter = TimeLeftCounter + 1 - if TimeLeftCounter == 1000 then - TimeLeftCounter = 0 - TimeLeft = TimeLeft - 1 - - if TimeLeft >= 0 then - DrawTag(TAG_TIME) + SI.TimeLeftCounter = SI.TimeLeftCounter + 1 + if SI.TimeLeftCounter == 1000 then + SI.TimeLeftCounter = 0 + SI.TimeLeft = SI.TimeLeft - 1 + + if SI.TimeLeft >= 0 then + DrawTag(SI.TAG_TIME) end end - if (TimeLeftCounter % 1000) == 0 then - if TimeLeft == 5 then + if (SI.TimeLeftCounter % 1000) == 0 then + if SI.TimeLeft == 5 then PlaySound(sndHurry, CurrentHedgehog) - elseif TimeLeft <= 4 and TimeLeft >= 1 then - PlaySound(_G["sndCountdown"..TimeLeft]) + elseif SI.TimeLeft <= 4 and SI.TimeLeft >= 1 then + PlaySound(_G["sndCountdown"..SI.TimeLeft]) end end @@ -1265,65 +1325,65 @@ ------------------------------- -- checks in FloatyThings if PlayerIsFine() == false then - TimeLeft = 0 + SI.TimeLeft = 0 end - if (TimeLeft == 0) then + if (SI.TimeLeft == 0) then if PlayerIsFine() then AddCaption(loc("Time's up!"), capcolDefault, capgrpGameState) end - if (stopMovement == false) then --time to stop the player - stopMovement = true - boosterOn = false - beam = false - upOn = false - downOn = false - leftOn = false - rightOn = false + if (SI.stopMovement == false) then --time to stop the player + SI.stopMovement = true + SI.boosterOn = false + SI.beam = false + SI.upOn = false + SI.downOn = false + SI.leftOn = false + SI.rightOn = false SetMyCircles(false) - rAlpha = 255 + SI.rAlpha = 255 FailGraphics() - if shieldMiser == true then - - local p = (roundKills*3.5) - ((roundKills*3.5)%1) + 2 - - AddCaption(string.format(loc("Shield Miser! +%d points!"), p), colorMsgBonus, capgrpAmmoinfo) + if SI.shieldMiser == true then + + local p = (SI.roundKills*3.5) - ((SI.roundKills*3.5)%1) + 2 + + AddCaption(string.format(loc("Shield Miser! +%d points!"), p), SI.colorMsgBonus, capgrpAmmoinfo) AwardPoints(p) end - local accuracy = (shotsHit / shotsFired) * 100 - if (accuracy >= 80) and (shotsFired > 4) then - AddCaption(loc("Accuracy Bonus! +15 points"),colorMsgBonus,capgrpAmmostate) + local accuracy = (SI.shotsHit / SI.shotsFired) * 100 + if (accuracy >= 80) and (SI.shotsFired > 4) then + AddCaption(loc("Accuracy Bonus! +15 points"),SI.colorMsgBonus,capgrpAmmostate) AwardPoints(15) -- special award for no misses local award = false - if awardAccuracy == nil then - if (shotsHit >= shotsFired) then + if SI.awardAccuracy == nil then + if (SI.shotsHit >= SI.shotsFired) then award = true end - elseif (shotsHit == shotsFired) and shotsHit > awardAccuracy.value then + elseif (SI.shotsHit == SI.shotsFired) and SI.shotsHit > SI.awardAccuracy.value then award = true end if award then - awardAccuracy = { + SI.awardAccuracy = { hogName = GetHogName(CurrentHedgehog), teamName = GetHogTeamName(CurrentHedgehog), - value = shotsHit, + value = SI.shotsHit, } end - + end -- other awards - awardRoundScore = UpdateSimpleAward(awardRoundScore, roundScore, 50) - awardRoundKills = UpdateSimpleAward(awardRoundKills, roundKills, 5) - - HideTag(TAG_TIME) - HideTag(TAG_BARRELS) - HideTag(TAG_SHIELD) + SI.awardRoundScore = UpdateSimpleAward(SI.awardRoundScore, SI.roundScore, 50) + SI.awardRoundKills = UpdateSimpleAward(SI.awardRoundKills, SI.roundKills, 5) + + HideTag(SI.TAG_TIME) + HideTag(SI.TAG_BARRELS) + HideTag(SI.TAG_SHIELD) end else -- remove this if you want tumbler to fall slowly on death @@ -1331,23 +1391,23 @@ -- Player is still in luck ------------------------------- - if chainCounter > 0 then - chainCounter = chainCounter -1 - if chainCounter == 0 then - chainLength = 0 + if SI.chainCounter > 0 then + SI.chainCounter = SI.chainCounter -1 + if SI.chainCounter == 0 then + SI.chainLength = 0 end end -- handle movement based on IO - moveTimer = moveTimer + 1 - if moveTimer == 100 then -- 100 - moveTimer = 0 + SI.moveTimer = SI.moveTimer + 1 + if SI.moveTimer == 100 then -- 100 + SI.moveTimer = 0 --------------- -- new trail code --------------- -- the trail lets you know you have 5s left to pilot, akin to birdy feathers - if (TimeLeft <= 5) and (TimeLeft > 0) then --vgtSmoke + if (SI.TimeLeft <= 5) and (SI.TimeLeft > 0) then --vgtSmoke local tempE = AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtSmoke, 0, false) SetVisualGearValues(tempE, nil, nil, nil, nil, nil, nil, nil, nil, nil, GetClanColor(GetHogClan(CurrentHedgehog)) ) end @@ -1357,14 +1417,14 @@ local dx, dy = GetGearVelocity(CurrentHedgehog) local dxlimit, dylimit - if boosterOn == true then + if SI.boosterOn == true then local tempE = AddVisualGear(GetX(CurrentHedgehog), GetY(CurrentHedgehog), vgtDust, 0, false) SetVisualGearValues(tempE, nil, nil, nil, nil, nil, nil, nil, 1, nil, GetClanColor(GetHogClan(CurrentHedgehog)) ) - dxlimit = 0.8*fMod - dylimit = 0.8*fMod + dxlimit = 0.8*SI.fMod + dylimit = 0.8*SI.fMod else - dxlimit = 0.4*fMod - dylimit = 0.4*fMod + dxlimit = 0.4*SI.fMod + dylimit = 0.4*SI.fMod end if dx > dxlimit then @@ -1381,18 +1441,18 @@ end - if leftOn == true then - dx = dx - 0.1*fMod + if SI.leftOn == true then + dx = dx - 0.1*SI.fMod end - if rightOn == true then - dx = dx + 0.1*fMod + if SI.rightOn == true then + dx = dx + 0.1*SI.fMod end - if upOn == true then - dy = dy - 0.1*fMod + if SI.upOn == true then + dy = dy - 0.1*SI.fMod end - if downOn == true then - dy = dy + 0.1*fMod + if SI.downOn == true then + dy = dy + 0.1*SI.fMod end SetGearVelocity(CurrentHedgehog, dx, dy) @@ -1409,29 +1469,29 @@ function onGearDamage(gear, damage) if GetGearType(gear) == gtHedgehog and damage >= 60 then if GetHogClan(gear) ~= GetHogClan(CurrentHedgehog) then - if (fierceComp == false) then - fierceComp = true - AddCaption(loc("Fierce Competition! +8 points!"),colorMsgBonus,capgrpMessage) + if (SI.fierceComp == false) then + SI.fierceComp = true + AddCaption(loc("Fierce Competition! +8 points!"),SI.colorMsgBonus,capgrpMessage) AwardPoints(8) end - tauntTimer = 500 - tauntGear = gear + SI.tauntTimer = 500 + SI.tauntGear = gear local r = math.random(1, 2) if r == 1 then - tauntSound = sndIllGetYou + SI.tauntSound = sndIllGetYou else - tauntSound = sndJustYouWait + SI.tauntSound = sndJustYouWait end elseif gear ~= CurrentHedgehog then - tauntTimer = 500 - tauntGear = gear - if tauntClanShots == 0 then - tauntSound = sndSameTeam + SI.tauntTimer = 500 + SI.tauntGear = gear + if SI.tauntClanShots == 0 then + SI.tauntSound = sndSameTeam else - tauntSound = sndTraitor + SI.tauntSound = sndTraitor end - tauntClanShots = tauntClanShots + 1 + SI.tauntClanShots = SI.tauntClanShots + 1 end end end @@ -1440,8 +1500,8 @@ -- did I fall into the water? well, that was a stupid thing to do if gear == CurrentHedgehog then - TimeLeft = 0 - playerIsFine = false + SI.TimeLeft = 0 + SI.playerIsFine = false end end @@ -1458,8 +1518,8 @@ ----------- -- control - hhs[numhhs] = gear - numhhs = numhhs + 1 + SI.hhs[SI.numhhs] = gear + SI.numhhs = SI.numhhs + 1 ----------- end @@ -1495,7 +1555,7 @@ -- work out the distance to the target local g1X, g1Y = GetGearPosition(CurrentHedgehog) - local g2X, g2Y = vCircX[cUID], vCircY[cUID] + local g2X, g2Y = SI.vCircX[cUID], SI.vCircY[cUID] local q = g1X - g2X local w = g1Y - g2Y local r = math.sqrt( (q*q) + (w*w) ) --alternate @@ -1516,25 +1576,25 @@ -- displace xy based on where this thing actually is if r < NR then - rCircX[cUID] = g2X + SI.rCircX[cUID] = g2X elseif q > 0 then - rCircX[cUID] = g1X - NX + SI.rCircX[cUID] = g1X - NX else - rCircX[cUID] = g1X + NX + SI.rCircX[cUID] = g1X + NX end if r < NR then - rCircY[cUID] = g2Y + SI.rCircY[cUID] = g2Y elseif w > 0 then - rCircY[cUID] = g1Y - NY + SI.rCircY[cUID] = g1Y - NY else - rCircY[cUID] = g1Y + NY + SI.rCircY[cUID] = g1Y + NY end end function PlayerIsFine() - return (playerIsFine) + return (SI.playerIsFine) end function GetDistFromXYtoXY(a, b, c, d) @@ -1567,46 +1627,46 @@ function CreateMeSomeCircles() for i = 0, 7 do - vCCount = vCCount +1 - vCirc[i] = AddVisualGear(0,0,vgtCircle,0,true) - - rCirc[i] = AddVisualGear(0,0,vgtCircle,0,true) - rCircX[i] = 0 - rCircY[i] = 0 - - vCircDX[i] = 0 - vCircDY[i] = 0 - - vType[i] = "generic" - vCounter[i] = 0 - vCounterLim[i] = 3000 - vCircScore[i] = 0 - vCircHealth[i] = 1 - - vCircMinA[i] = 80 - vCircMaxA[i] = 255 - vCircType[i] = 1 - vCircPulse[i] = 10 - vCircFuckAll[i] = 0 - vCircRadius[i] = 0 - vCircWidth[i] = 3 - - vCircRadMax[i] = 0 - vCircRadMin[i] = 0 - vCircRadDir[i] = -1 - vCircRadCounter[i] = 0 - - vCircX[i], vCircY[i] = 0,0 - - vCircCol[i] = 0xFF00FFFF - - SetVisualGearValues(vCirc[i], vCircX[i], vCircY[i], vCircMinA[i], vCircMaxA[i], vCircType[i], vCircPulse[i], vCircFuckAll[i], vCircRadius[i], vCircWidth[i], vCircCol[i]) - - SetVisualGearValues(rCirc[i], 0, 0, 100, 255, 1, 10, 0, 40, 3, vCircCol[i]) + SI.vCCount = SI.vCCount +1 + SI.vCirc[i] = AddVisualGear(0,0,vgtCircle,0,true) + + SI.rCirc[i] = AddVisualGear(0,0,vgtCircle,0,true) + SI.rCircX[i] = 0 + SI.rCircY[i] = 0 + + SI.vCircDX[i] = 0 + SI.vCircDY[i] = 0 + + SI.vType[i] = "generic" + SI.vCounter[i] = 0 + SI.vCounterLim[i] = 3000 + SI.vCircScore[i] = 0 + SI.vCircHealth[i] = 1 + + SI.vCircMinA[i] = 80 + SI.vCircMaxA[i] = 255 + SI.vCircType[i] = 1 + SI.vCircPulse[i] = 10 + SI.vCircFuckAll[i] = 0 + SI.vCircRadius[i] = 0 + SI.vCircWidth[i] = 3 + + SI.vCircRadMax[i] = 0 + SI.vCircRadMin[i] = 0 + SI.vCircRadDir[i] = -1 + SI.vCircRadCounter[i] = 0 + + SI.vCircX[i], SI.vCircY[i] = 0,0 + + SI.vCircCol[i] = 0xFF00FFFF + + SetVisualGearValues(SI.vCirc[i], SI.vCircX[i], SI.vCircY[i], SI.vCircMinA[i], SI.vCircMaxA[i], SI.vCircType[i], SI.vCircPulse[i], SI.vCircFuckAll[i], SI.vCircRadius[i], SI.vCircWidth[i], SI.vCircCol[i]) + + SetVisualGearValues(SI.rCirc[i], 0, 0, 100, 255, 1, 10, 0, 40, 3, SI.vCircCol[i]) end - pShield = AddVisualGear(0,0,vgtCircle,0,true) + SI.pShield = AddVisualGear(0,0,vgtCircle,0,true) end @@ -1614,9 +1674,9 @@ local acceptibleDistance = 800 - vCircX[i] = GetRandom(5000) - vCircY[i] = GetRandom(2000) - local dist = GetDistFromGearToXY(CurrentHedgehog, vCircX[i], vCircY[i]) + SI.vCircX[i] = GetRandom(5000) + SI.vCircY[i] = GetRandom(2000) + local dist = GetDistFromGearToXY(CurrentHedgehog, SI.vCircX[i], SI.vCircY[i]) if dist > acceptibleDistance*acceptibleDistance then return(true) else @@ -1628,111 +1688,111 @@ function CircleDamaged(i) local res = "" - vCircHealth[i] = vCircHealth[i] -1 - - if vCircHealth[i] <= 0 then + SI.vCircHealth[i] = SI.vCircHealth[i] -1 + + if SI.vCircHealth[i] <= 0 then -- circle is dead, do death effects/consequences - vCircActive[i] = false - - if (vType[i] == "drone") then + SI.vCircActive[i] = false + + if (SI.vType[i] == "drone") then PlaySound(sndHellishImpact4) - TimeLeft = TimeLeft + timeBonus - AddCaption(string.format(loc("Time extended! +%dsec"), timeBonus), colorDrone, capgrpMessage ) - DrawTag(TAG_TIME) - - local morte = AddGear(vCircX[i], vCircY[i], gtExplosives, 0, 0, 0, 1) + SI.TimeLeft = SI.TimeLeft + SI.timeBonus + AddCaption(string.format(loc("Time extended! +%dsec"), SI.timeBonus), SI.colorDrone, capgrpMessage ) + DrawTag(SI.TAG_TIME) + + local morte = AddGear(SI.vCircX[i], SI.vCircY[i], gtExplosives, 0, 0, 0, 1) SetHealth(morte, 0) - RK = RK + 1 - if RK == 5 then - RK = 0 - AddCaption(loc("Drone Hunter! +10 points!"),colorMsgBonus,capgrpMessage2) + SI.RK = SI.RK + 1 + if SI.RK == 5 then + SI.RK = 0 + AddCaption(loc("Drone Hunter! +10 points!"),SI.colorMsgBonus,capgrpMessage2) AwardPoints(10) end - elseif (vType[i] == "ammo") then - AddVisualGear(vCircX[i], vCircY[i], vgtExplosion, 0, false) + elseif (SI.vType[i] == "ammo") then + AddVisualGear(SI.vCircX[i], SI.vCircY[i], vgtExplosion, 0, false) PlaySound(sndExplosion) PlaySound(sndShotgunReload) - wepAmmo[0] = wepAmmo[0] + barrelBonus - AddCaption(string.format(loc("+%d Ammo"), barrelBonus), colorAmmo,capgrpMessage) - DrawTag(TAG_BARRELS) - - GK = GK + 1 - if GK == 3 then - GK = 0 - AddCaption(loc("Ammo Maniac! +5 points!"),colorMsgBonus,capgrpMessage2) + SI.wepAmmo[0] = SI.wepAmmo[0] + SI.barrelBonus + AddCaption(string.format(loc("+%d Ammo"), SI.barrelBonus), SI.colorAmmo,capgrpMessage) + DrawTag(SI.TAG_BARRELS) + + SI.GK = SI.GK + 1 + if SI.GK == 3 then + SI.GK = 0 + AddCaption(loc("Ammo Maniac! +5 points!"),SI.colorMsgBonus,capgrpMessage2) AwardPoints(5) end - elseif (vType[i] == "bonus") then - - AddVisualGear(vCircX[i], vCircY[i], vgtExplosion, 0, false) + elseif (SI.vType[i] == "bonus") then + + AddVisualGear(SI.vCircX[i], SI.vCircY[i], vgtExplosion, 0, false) PlaySound(sndExplosion) - AddVisualGear(vCircX[i], vCircY[i], vgtFire, 0, false) - AddVisualGear(vCircX[i], vCircY[i], vgtFire, 0, false) - AddVisualGear(vCircX[i], vCircY[i], vgtFire, 0, false) - AddVisualGear(vCircX[i], vCircY[i], vgtFire, 0, false) - AddVisualGear(vCircX[i], vCircY[i], vgtFire, 0, false) - AddVisualGear(vCircX[i], vCircY[i], vgtSmoke, 0, false) + AddVisualGear(SI.vCircX[i], SI.vCircY[i], vgtFire, 0, false) + AddVisualGear(SI.vCircX[i], SI.vCircY[i], vgtFire, 0, false) + AddVisualGear(SI.vCircX[i], SI.vCircY[i], vgtFire, 0, false) + AddVisualGear(SI.vCircX[i], SI.vCircY[i], vgtFire, 0, false) + AddVisualGear(SI.vCircX[i], SI.vCircY[i], vgtFire, 0, false) + AddVisualGear(SI.vCircX[i], SI.vCircY[i], vgtSmoke, 0, false) PlaySound(sndVaporize) - shieldHealth = shieldHealth + shieldBonus - if shieldHealth >= 250 then - shieldHealth = 250 - AddCaption(loc("Shield is fully recharged!"),colorShield,capgrpMessage) + SI.shieldHealth = SI.shieldHealth + SI.shieldBonus + if SI.shieldHealth >= 250 then + SI.shieldHealth = 250 + AddCaption(loc("Shield is fully recharged!"),SI.colorShield,capgrpMessage) else - AddCaption(string.format(loc("Shield boosted! +%d power"),shieldBonus), colorShield,capgrpMessage) + AddCaption(string.format(loc("Shield boosted! +%d power"),SI.shieldBonus), SI.colorShield,capgrpMessage) end - DrawTag(TAG_SHIELD) - - OK = OK + 1 - if OK == 3 then - OK = 0 - AddCaption(loc("Shield Seeker! +10 points!"),colorShield,capgrpMessage2) + DrawTag(SI.TAG_SHIELD) + + SI.OK = SI.OK + 1 + if SI.OK == 3 then + SI.OK = 0 + AddCaption(loc("Shield Seeker! +10 points!"),SI.colorShield,capgrpMessage2) AwardPoints(10) end - elseif (vType[i] == "blueboss") then + elseif (SI.vType[i] == "blueboss") then PlaySound(sndHellishImpact3) - tauntTimer = 300 - tauntSound = sndEnemyDown - tauntGear = CurrentHedgehog - AddCaption(loc("Boss defeated! +30 points!"), colorBoss,capgrpMessage) - - local morte = AddGear(vCircX[i], vCircY[i], gtExplosives, 0, 0, 0, 1) + SI.tauntTimer = 300 + SI.tauntSound = sndEnemyDown + SI.tauntGear = CurrentHedgehog + AddCaption(loc("Boss defeated! +30 points!"), SI.colorBoss,capgrpMessage) + + local morte = AddGear(SI.vCircX[i], SI.vCircY[i], gtExplosives, 0, 0, 0, 1) SetHealth(morte, 0) - BK = BK + 1 - if BK == 2 then - BK = 0 - AddCaption(loc("Boss Slayer! +25 points!"),colorMsgBonus,capgrpMessage2) + SI.BK = SI.BK + 1 + if SI.BK == 2 then + SI.BK = 0 + AddCaption(loc("Boss Slayer! +25 points!"),SI.colorMsgBonus,capgrpMessage2) AwardPoints(25) end end - AwardPoints(vCircScore[i]) + AwardPoints(SI.vCircScore[i]) AwardKills() SetUpCircle(i) res = "fatal" - chainCounter = 3000 - chainLength = chainLength + 1 - if chainLength > 1 then - AddCaption( string.format(loc("%d-Hit Combo! +%d points!"), chainLength, chainLength*2),colorMsgBonus,capgrpVolume) - AwardPoints(chainLength*2) + SI.chainCounter = 3000 + SI.chainLength = SI.chainLength + 1 + if SI.chainLength > 1 then + AddCaption( string.format(loc("%d-Hit Combo! +%d points!"), SI.chainLength, SI.chainLength*2),SI.colorMsgBonus,capgrpVolume) + AwardPoints(SI.chainLength*2) end - awardCombo = UpdateSimpleAward(awardCombo, chainLength, 5) + SI.awardCombo = UpdateSimpleAward(SI.awardCombo, SI.chainLength, 5) else -- circle is merely damaged -- do damage effects/sounds - AddVisualGear(vCircX[i], vCircY[i], vgtSteam, 0, false) + AddVisualGear(SI.vCircX[i], SI.vCircY[i], vgtSteam, 0, false) local r = math.random(1,4) PlaySound(_G["sndHellishImpact" .. tostring(r)]) res = "non-fatal" @@ -1752,41 +1812,41 @@ r = GetRandom(2) if r == 0 then - vCircCol[i] = colorDrone - vType[i] = "drone" - vCircRadMin[i] = 50 *5 - vCircRadMax[i] = 90 *5 - vCounterLim[i] = 3000 - vCircScore[i] = 10 - vCircHealth[i] = 1 + SI.vCircCol[i] = SI.colorDrone + SI.vType[i] = "drone" + SI.vCircRadMin[i] = 50 *5 + SI.vCircRadMax[i] = 90 *5 + SI.vCounterLim[i] = 3000 + SI.vCircScore[i] = 10 + SI.vCircHealth[i] = 1 elseif r == 1 then - vCircCol[i] = colorAmmo - vType[i] = "ammo" - vCircRadMin[i] = 25 *7 - vCircRadMax[i] = 30 *7 - vCircScore[i] = 3 - vCircHealth[i] = 1 + SI.vCircCol[i] = SI.colorAmmo + SI.vType[i] = "ammo" + SI.vCircRadMin[i] = 25 *7 + SI.vCircRadMax[i] = 30 *7 + SI.vCircScore[i] = 3 + SI.vCircHealth[i] = 1 end -- 20% chance of spawning boss or bonus else r = GetRandom(5) if r <= 1 then - vCircCol[i] = colorBoss - vType[i] = "blueboss" - vCircRadMin[i] = 100*5 - vCircRadMax[i] = 180*5 - vCircWidth[i] = 1 - vCounterLim[i] = 2000 - vCircScore[i] = 30 - vCircHealth[i] = 3 + SI.vCircCol[i] = SI.colorBoss + SI.vType[i] = "blueboss" + SI.vCircRadMin[i] = 100*5 + SI.vCircRadMax[i] = 180*5 + SI.vCircWidth[i] = 1 + SI.vCounterLim[i] = 2000 + SI.vCircScore[i] = 30 + SI.vCircHealth[i] = 3 else - vCircCol[i] = colorShield - vType[i] = "bonus" - vCircRadMin[i] = 20 *7 - vCircRadMax[i] = 40 *7 - vCircScore[i] = 5 - vCircHealth[i] = 1 + SI.vCircCol[i] = SI.colorShield + SI.vType[i] = "bonus" + SI.vCircRadMin[i] = 20 *7 + SI.vCircRadMax[i] = 40 *7 + SI.vCircScore[i] = 5 + SI.vCircHealth[i] = 1 end end @@ -1801,26 +1861,26 @@ end end - vCircRadius[i] = vCircRadMax[i] - GetRandom(vCircRadMin[i]) - - SetVisualGearValues(vCirc[i], vCircX[i], vCircY[i], nil, nil, nil, nil, nil, vCircRadius[i], vCircWidth[i], vCircCol[i]-0x000000FF) - - SetVisualGearValues(rCirc[i], 0, 0, nil, nil, nil, nil, nil, nil, nil, vCircCol[i]-0x000000FF) - - - vCircActive[i] = true + SI.vCircRadius[i] = SI.vCircRadMax[i] - GetRandom(SI.vCircRadMin[i]) + + SetVisualGearValues(SI.vCirc[i], SI.vCircX[i], SI.vCircY[i], nil, nil, nil, nil, nil, SI.vCircRadius[i], SI.vCircWidth[i], SI.vCircCol[i]-0x000000FF) + + SetVisualGearValues(SI.rCirc[i], 0, 0, nil, nil, nil, nil, nil, nil, nil, SI.vCircCol[i]-0x000000FF) + + + SI.vCircActive[i] = true end function SetMyCircles(s) - circlesAreGo = s - playerIsFine = s - - for i = 0,(vCCount-1) do + SI.circlesAreGo = s + SI.playerIsFine = s + + for i = 0,(SI.vCCount-1) do if s == false then - vCircActive[i] = false + SI.vCircActive[i] = false elseif s == true then SetUpCircle(i) end @@ -1837,7 +1897,7 @@ PlaySound(_G["sndOoff"..r], CurrentHedgehog) end - playerIsFine = false + SI.playerIsFine = false FailGraphics() if not kamikaze then @@ -1845,72 +1905,72 @@ PlaySound(sndHellish) end - targetHit = true + SI.targetHit = true end -- Turn all circles white to indicate they can't be hit anymore function FailGraphics() - for i = 0,(vCCount-1) do - vCircCol[i] = colorDisabled + for i = 0,(SI.vCCount-1) do + SI.vCircCol[i] = SI.colorDisabled end end --- collision detection for weapons fire function CheckVarious(gear) - targetHit = false + SI.targetHit = false -- if circle is hit by player fire if (GetGearType(gear) == gtExplosives) then local circsHit = 0 - for i = 0,(vCCount-1) do - - local dist = GetDistFromGearToXY(gear, vCircX[i], vCircY[i]) + for i = 0,(SI.vCCount-1) do + + local dist = GetDistFromGearToXY(gear, SI.vCircX[i], SI.vCircY[i]) -- calculate my real radius if I am an aura local NR - if vCircType[i] == 0 then - NR = vCircRadius[i] + if SI.vCircType[i] == 0 then + NR = SI.vCircRadius[i] else - NR = (48/100*vCircRadius[i])/2 + NR = (48/100*SI.vCircRadius[i])/2 end if dist <= NR*NR then - dist = (GetDistFromXYtoXY(vCircX[i], vCircY[i], getGearValue(gear,"XP"), getGearValue(gear,"YP")) - (NR*NR)) + dist = (GetDistFromXYtoXY(SI.vCircX[i], SI.vCircY[i], getGearValue(gear,"XP"), getGearValue(gear,"YP")) - (NR*NR)) if dist >= 1000000 then - sniperHits = sniperHits +1 - AddCaption(loc("Sniper! +8 points!"),colorMsgBonus,capgrpAmmostate) + SI.sniperHits = SI.sniperHits +1 + AddCaption(loc("Sniper! +8 points!"),SI.colorMsgBonus,capgrpAmmostate) AwardPoints(8) - if sniperHits == 3 then - sniperHits = 0 - AddCaption(loc("They Call Me Bullseye! +16 points!"),colorMsgBonus,capgrpAmmostate) + if SI.sniperHits == 3 then + SI.sniperHits = 0 + AddCaption(loc("They Call Me Bullseye! +16 points!"),SI.colorMsgBonus,capgrpAmmostate) AwardPoints(16) end elseif dist <= 6000 then - pointBlankHits = pointBlankHits +1 - if pointBlankHits == 3 then - pointBlankHits = 0 - AddCaption(loc("Point Blank Combo! +5 points!"),colorMsgBonus,capgrpAmmostate) + SI.pointBlankHits = SI.pointBlankHits +1 + if SI.pointBlankHits == 3 then + SI.pointBlankHits = 0 + AddCaption(loc("Point Blank Combo! +5 points!"),SI.colorMsgBonus,capgrpAmmostate) AwardPoints(5) end end AddVisualGear(GetX(gear), GetY(gear), vgtBigExplosion, 0, false) - targetHit = true + SI.targetHit = true CircleDamaged(i) circsHit = circsHit + 1 if circsHit > 1 then - AddCaption(loc("Multi-shot! +15 points!"),colorMsgBonus,capgrpAmmoinfo) + AddCaption(loc("Multi-shot! +15 points!"),SI.colorMsgBonus,capgrpAmmoinfo) AwardPoints(15) circsHit = 0 end - shotsHit = shotsHit + 1 + SI.shotsHit = SI.shotsHit + 1 end @@ -1921,7 +1981,7 @@ local dist = GetDistFromGearToGear(gear, CurrentHedgehog) - if beam == true then + if SI.beam == true then if dist < 3000 then local tempE = AddVisualGear(GetX(gear), GetY(gear), vgtSmoke, 0, false) @@ -1929,10 +1989,10 @@ PlaySound(sndVaporize) DeleteGear(gear) - SK = SK + 1 - if SK == 5 then - SK = 0 - AddCaption(loc("Shield Master! +10 points!"),colorMsgBonus,capgrpMessage) + SI.SK = SI.SK + 1 + if SI.SK == 5 then + SI.SK = 0 + AddCaption(loc("Shield Master! +10 points!"),SI.colorMsgBonus,capgrpMessage) AwardPoints(10) end end @@ -1943,7 +2003,7 @@ end - if targetHit == true then + if SI.targetHit == true then DeleteGear(gear) end @@ -1956,10 +2016,10 @@ return end - for i = 0,(vCCount-1) do + for i = 0,(SI.vCCount-1) do local g1X, g1Y = GetGearPosition(CurrentHedgehog) - local g2X, g2Y = vCircX[i], vCircY[i] + local g2X, g2Y = SI.vCircX[i], SI.vCircY[i] g1X = g1X - g2X g1Y = g1Y - g2Y @@ -1967,42 +2027,42 @@ -- calculate my real radius if I am an aura local NR - if vCircType[i] == 0 then - NR = vCircRadius[i] + if SI.vCircType[i] == 0 then + NR = SI.vCircRadius[i] else - NR = (48/100*vCircRadius[i])/2 + NR = (48/100*SI.vCircRadius[i])/2 end if dist <= NR*NR then - if (vCircActive[i] == true) and - ((vType[i] == "ammo") or (vType[i] == "bonus") ) + if (SI.vCircActive[i] == true) and + ((SI.vType[i] == "ammo") or (SI.vType[i] == "bonus") ) then CircleDamaged(i) - elseif (vCircActive[i] == true) and - ( (vType[i] == "drone") or (vType[i] == "blueboss") ) + elseif (SI.vCircActive[i] == true) and + ( (SI.vType[i] == "drone") or (SI.vType[i] == "blueboss") ) then local ss = CircleDamaged(i) local explosion - if vType[i] == "blueboss" then explosion = true else explosion = false end + if SI.vType[i] == "blueboss" then explosion = true else explosion = false end local kamikaze = false if ss == "fatal" then - if (wepAmmo[0] == 0) and (TimeLeft <= 9) then - AddCaption(loc("Kamikaze Expert! +15 points!"),colorMsgBonus,capgrpGameState) + if (SI.wepAmmo[0] == 0) and (SI.TimeLeft <= 9) then + AddCaption(loc("Kamikaze Expert! +15 points!"),SI.colorMsgBonus,capgrpGameState) AwardPoints(15) PlaySound(sndKamikaze, CurrentHedgehog) kamikaze = true - elseif (wepAmmo[0] == 0) then - AddCaption(loc("Depleted Kamikaze! +5 points!"),colorMsgBonus,capgrpGameState) + elseif (SI.wepAmmo[0] == 0) then + AddCaption(loc("Depleted Kamikaze! +5 points!"),SI.colorMsgBonus,capgrpGameState) AwardPoints(5) PlaySound(sndKamikaze, CurrentHedgehog) kamikaze = true - elseif TimeLeft <= 9 then - AddCaption(loc("Timed Kamikaze! +10 points!"),colorMsgBonus,capgrpGameState) + elseif SI.TimeLeft <= 9 then + AddCaption(loc("Timed Kamikaze! +10 points!"),SI.colorMsgBonus,capgrpGameState) AwardPoints(10) PlaySound(sndKamikaze, CurrentHedgehog) kamikaze = true @@ -2021,57 +2081,57 @@ function HandleCircles() - if rAlpha ~= 255 then - - rPingTimer = rPingTimer + 1 - if rPingTimer == 100 then - rPingTimer = 0 - - rAlpha = rAlpha + 5 - if rAlpha >= 255 then - rAlpha = 255 + if SI.rAlpha ~= 255 then + + SI.rPingTimer = SI.rPingTimer + 1 + if SI.rPingTimer == 100 then + SI.rPingTimer = 0 + + SI.rAlpha = SI.rAlpha + 5 + if SI.rAlpha >= 255 then + SI.rAlpha = 255 end end end - for i = 0,(vCCount-1) do - - SetVisualGearValues(rCirc[i], rCircX[i], rCircY[i], 100, 255, 1, 10, 0, 40, 3, vCircCol[i]-rAlpha) - - vCounter[i] = vCounter[i] + 1 - if vCounter[i] >= vCounterLim[i] then - - vCounter[i] = 0 - - if ((vType[i] == "drone") or (vType[i] == "blueboss") ) and - (vCircActive[i] == true) then - AddGear(vCircX[i], vCircY[i], gtShell, 0, 0, 0, 1) + for i = 0,(SI.vCCount-1) do + + SetVisualGearValues(SI.rCirc[i], SI.rCircX[i], SI.rCircY[i], 100, 255, 1, 10, 0, 40, 3, SI.vCircCol[i]-SI.rAlpha) + + SI.vCounter[i] = SI.vCounter[i] + 1 + if SI.vCounter[i] >= SI.vCounterLim[i] then + + SI.vCounter[i] = 0 + + if ((SI.vType[i] == "drone") or (SI.vType[i] == "blueboss") ) and + (SI.vCircActive[i] == true) then + AddGear(SI.vCircX[i], SI.vCircY[i], gtShell, 0, 0, 0, 1) end end - if (vCircActive[i] == true) then - - vCircRadCounter[i] = vCircRadCounter[i] + 1 - if vCircRadCounter[i] == 100 then - - vCircRadCounter[i] = 0 + if (SI.vCircActive[i] == true) then + + SI.vCircRadCounter[i] = SI.vCircRadCounter[i] + 1 + if SI.vCircRadCounter[i] == 100 then + + SI.vCircRadCounter[i] = 0 -- make my radius increase/decrease faster if I am an aura local M - if vCircType[i] == 0 then + if SI.vCircType[i] == 0 then M = 1 else M = 10 end - vCircRadius[i] = vCircRadius[i] + vCircRadDir[i] - if vCircRadius[i] > vCircRadMax[i] then - vCircRadDir[i] = -M - elseif vCircRadius[i] < vCircRadMin[i] then - vCircRadDir[i] = M + SI.vCircRadius[i] = SI.vCircRadius[i] + SI.vCircRadDir[i] + if SI.vCircRadius[i] > SI.vCircRadMax[i] then + SI.vCircRadDir[i] = -M + elseif SI.vCircRadius[i] < SI.vCircRadMin[i] then + SI.vCircRadDir[i] = M end @@ -2082,31 +2142,31 @@ --vgtSteam -- nice long trail --vgtDust -- short trail on earthrise --vgtSmokeTrace - if vType[i] == "ammo" then - - local tempE = AddVisualGear(vCircX[i], vCircY[i], vgtSmoke, 0, false) - SetVisualGearValues(tempE, vCircX[i], vCircY[i], nil, nil, nil, nil, nil, nil, nil, vCircCol[i] ) - - elseif vType[i] == "bonus" then - - local tempE = AddVisualGear(vCircX[i], vCircY[i], vgtDust, 0, false) - SetVisualGearValues(tempE, vCircX[i], vCircY[i], nil, nil, nil, nil, nil, 1, nil, colorShieldParticle) - - - elseif vType[i] == "blueboss" then + if SI.vType[i] == "ammo" then + + local tempE = AddVisualGear(SI.vCircX[i], SI.vCircY[i], vgtSmoke, 0, false) + SetVisualGearValues(tempE, SI.vCircX[i], SI.vCircY[i], nil, nil, nil, nil, nil, nil, nil, SI.vCircCol[i] ) + + elseif SI.vType[i] == "bonus" then + + local tempE = AddVisualGear(SI.vCircX[i], SI.vCircY[i], vgtDust, 0, false) + SetVisualGearValues(tempE, SI.vCircX[i], SI.vCircY[i], nil, nil, nil, nil, nil, 1, nil, SI.colorShieldParticle) + + + elseif SI.vType[i] == "blueboss" then local k = 25 local g = vgtSteam - local trailColour = colorBossParticle - - local tempE = AddVisualGear(vCircX[i], vCircY[i], g, 0, false) - SetVisualGearValues(tempE, vCircX[i], vCircY[i]+k, nil, nil, nil, nil, nil, nil, nil, trailColour-75 ) - - tempE = AddVisualGear(vCircX[i], vCircY[i], g, 0, false) - SetVisualGearValues(tempE, vCircX[i]+k, vCircY[i]-k, nil, nil, nil, nil, nil, nil, nil, trailColour-75 ) - - tempE = AddVisualGear(vCircX[i], vCircY[i], g, 0, false) - SetVisualGearValues(tempE, vCircX[i]-k, vCircY[i]-k, nil, nil, nil, nil, nil, nil, nil, trailColour-75 ) + local trailColour = SI.colorBossParticle + + local tempE = AddVisualGear(SI.vCircX[i], SI.vCircY[i], g, 0, false) + SetVisualGearValues(tempE, SI.vCircX[i], SI.vCircY[i]+k, nil, nil, nil, nil, nil, nil, nil, trailColour-75 ) + + tempE = AddVisualGear(SI.vCircX[i], SI.vCircY[i], g, 0, false) + SetVisualGearValues(tempE, SI.vCircX[i]+k, SI.vCircY[i]-k, nil, nil, nil, nil, nil, nil, nil, trailColour-75 ) + + tempE = AddVisualGear(SI.vCircX[i], SI.vCircY[i], g, 0, false) + SetVisualGearValues(tempE, SI.vCircX[i]-k, SI.vCircY[i]-k, nil, nil, nil, nil, nil, nil, nil, trailColour-75 ) end @@ -2120,20 +2180,20 @@ end -- alter the circles velocities - circAdjustTimer = circAdjustTimer + 1 - if circAdjustTimer == 2000 then - - circAdjustTimer = 0 - - for i = 0,(vCCount-1) do + SI.circAdjustTimer = SI.circAdjustTimer + 1 + if SI.circAdjustTimer == 2000 then + + SI.circAdjustTimer = 0 + + for i = 0,(SI.vCCount-1) do -- bounce the circles off the edges if they go too far -- or make them move in random directions - if vCircX[i] > 5500 then - vCircDX[i] = -5 --5 circmovchange - elseif vCircX[i] < -1500 then - vCircDX[i] = 5 --5 circmovchange + if SI.vCircX[i] > 5500 then + SI.vCircDX[i] = -5 --5 circmovchange + elseif SI.vCircX[i] < -1500 then + SI.vCircDX[i] = 5 --5 circmovchange else local z = GetRandom(2) @@ -2142,13 +2202,13 @@ else z = -1 end - vCircDX[i] = vCircDX[i] + GetRandom(3)*z --3 circmovchange + SI.vCircDX[i] = SI.vCircDX[i] + GetRandom(3)*z --3 circmovchange end - if vCircY[i] > 1500 then - vCircDY[i] = -5 --5 circmovchange - elseif vCircY[i] < -2900 then - vCircDY[i] = 5 --5 circmovchange + if SI.vCircY[i] > 1500 then + SI.vCircDY[i] = -5 --5 circmovchange + elseif SI.vCircY[i] < -2900 then + SI.vCircDY[i] = 5 --5 circmovchange else local z = GetRandom(2) if z == 1 then @@ -2156,7 +2216,7 @@ else z = -1 end - vCircDY[i] = vCircDY[i] + GetRandom(3)*z --3 circmovchange + SI.vCircDY[i] = SI.vCircDY[i] + GetRandom(3)*z --3 circmovchange end end @@ -2164,49 +2224,49 @@ end -- move the circles according to their current velocities - m2Count = m2Count + 1 - if m2Count == 25 then --25 circmovchange - - m2Count = 0 - for i = 0,(vCCount-1) do - vCircX[i] = vCircX[i] + vCircDX[i] - vCircY[i] = vCircY[i] + vCircDY[i] - - if (CurrentHedgehog ~= nil) and (rAlpha ~= 255) then + SI.m2Count = SI.m2Count + 1 + if SI.m2Count == 25 then --25 circmovchange + + SI.m2Count = 0 + for i = 0,(SI.vCCount-1) do + SI.vCircX[i] = SI.vCircX[i] + SI.vCircDX[i] + SI.vCircY[i] = SI.vCircY[i] + SI.vCircDY[i] + + if (CurrentHedgehog ~= nil) and (SI.rAlpha ~= 255) then DoHorribleThings(i) end end - if (TimeLeft == 0) and (tumbleStarted == true) then - - fadeAlpha = fadeAlpha + 1 - if fadeAlpha >= 255 then - fadeAlpha = 255 + if (SI.TimeLeft == 0) and (SI.tumbleStarted == true) then + + SI.fadeAlpha = SI.fadeAlpha + 1 + if SI.fadeAlpha >= 255 then + SI.fadeAlpha = 255 end end end - for i = 0,(vCCount-1) do - SetVisualGearValues(vCirc[i], vCircX[i], vCircY[i], nil, nil, nil, nil, nil, vCircRadius[i]) + for i = 0,(SI.vCCount-1) do + SetVisualGearValues(SI.vCirc[i], SI.vCircX[i], SI.vCircY[i], nil, nil, nil, nil, nil, SI.vCircRadius[i]) end - if (TimeLeft == 0) or - ((tumbleStarted == false)) then - for i = 0,(vCCount-1) do - SetVisualGearValues(vCirc[i], vCircX[i], vCircY[i], nil, nil, nil, nil, nil, vCircRadius[i], nil, (vCircCol[i]-fadeAlpha)) + if (SI.TimeLeft == 0) or + ((SI.tumbleStarted == false)) then + for i = 0,(SI.vCCount-1) do + SetVisualGearValues(SI.vCirc[i], SI.vCircX[i], SI.vCircY[i], nil, nil, nil, nil, nil, SI.vCircRadius[i], nil, (SI.vCircCol[i]-SI.fadeAlpha)) end end if (CurrentHedgehog ~= nil) then - if beam == true then - SetVisualGearValues(pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), nil, nil, nil, nil, nil, 200, nil, colorShield-0x000000FF - -shieldHealth ) - DrawTag(TAG_SHIELD) + if SI.beam == true then + SetVisualGearValues(SI.pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), nil, nil, nil, nil, nil, 200, nil, SI.colorShield-0x000000FF - -SI.shieldHealth ) + DrawTag(SI.TAG_SHIELD) else - SetVisualGearValues(pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), nil, nil, nil, nil, nil, 0) + SetVisualGearValues(SI.pShield, GetX(CurrentHedgehog), GetY(CurrentHedgehog), nil, nil, nil, nil, nil, 0) end end @@ -2218,7 +2278,7 @@ if (GetGearType(gear) == gtShell) then - local turningSpeed = 0.1*fMod + local turningSpeed = 0.1*SI.fMod local dx, dy = GetGearVelocity(gear) @@ -2235,8 +2295,8 @@ end - local dxlimit = 0.4*fMod - local dylimit = 0.4*fMod + local dxlimit = 0.4*SI.fMod + local dylimit = 0.4*SI.fMod if dx > dxlimit then dx = dxlimit diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Scripts/Multiplayer/TechRacer.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/TechRacer.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Scripts/Multiplayer/TechRacer.lua Mon Sep 24 11:18:48 2018 -0400 @@ -864,10 +864,12 @@ end function onGameStart() - SendGameResultOff() - SendRankingStatsOff() - SendAchievementsStatsOff() - SendHealthStatsOff() + if ClansCount >= 2 then + SendGameResultOff() + SendRankingStatsOff() + SendAchievementsStatsOff() + SendHealthStatsOff() + end trackTeams() diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Scripts/Multiplayer/WxW.lua --- a/share/hedgewars/Data/Scripts/Multiplayer/WxW.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Scripts/Multiplayer/WxW.lua Mon Sep 24 11:18:48 2018 -0400 @@ -962,7 +962,7 @@ SetInputMask(0xFFFFFFFF) AddCaption(loc("Configuration accepted."), msgColorTech, capgrpMessage) if GetGameFlag(gfPlaceHog) then - TurnTimeLeft = PlacementTime + SetTurnTimeLeft(PlacementTime) AddAmmo(CurrentHedgehog, amTeleport, 100) SetWeapon(amTeleport) AddCaption( @@ -972,7 +972,7 @@ ) roundN = 2 else - TurnTimeLeft = TurnTime + SetTurnTimeLeft(TurnTime) AddCaption(string.format(loc("Let's go, %s!"), GetHogTeamName(CurrentHedgehog)), capcolDefault, capgrpMessage2) roundN = 100 wallsLeft = #wTouched @@ -1280,7 +1280,7 @@ if roundN < 2 then SetWeapon(amSkip) AddAmmo(CurrentHedgehog, amTeleport, 0) - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) SetInputMask(0) end if roundN == 2 then @@ -1337,7 +1337,7 @@ end if roundN == 1 then - TurnTimeLeft = -1 + SetTurnTimeLeft(MAX_TURN_TIME) SetInputMask(0) allowCrate = false UpdateMenu() diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Scripts/OfficialChallengeHashes.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Scripts/OfficialChallengeHashes.lua Mon Sep 24 11:18:48 2018 -0400 @@ -0,0 +1,31 @@ +official_racer_maps = { + ["Border,60526986531,838018718"] = "Racer Challenge #1" + , ["Border,71022545335,-490229244"] = "Racer Challenge #2" + , ["Border,40469748943,806689586"] = "Racer Challenge #3" + , ["85940488650,-134869715"] = "Racer Challenge #4" + , ["62080348735,-661895109"] = "Racer Challenge #5" + , ["56818170733,479034891"] = "Racer Challenge #6" + , ["Border,25372705797,1770509913"] = "Racer Challenge #7" + , ["Border,10917540013,1902370941"] = "Racer Challenge #8" + , ["Border,43890274319,185940363"] = "Racer Challenge #9" + , ["Border,27870148394,751885839"] = "Racer Challenge #10" + , ["Border,22647869226,178845011"] = "Racer Challenge #11" + , ["Border,46954401793,706743197"] = "Racer Challenge #12" + , ["Border,60760377667,157242054"] = "Racer Challenge #13" + , ["Border,51825989393,-1585582638"] = "Racer Challenge #14" + , ["81841189250,256715557"] = "Racer Challenge #15" + , ["Border,44246064625,-528106034"] = "Racer Challenge #16" + , ["60906776802,-1389184823"] = "Racer Challenge #17" + , ["Border,70774747774,-534640804"] = "Racer Challenge #18" + , ["Border,50512019610,-1839546856"] = "Racer Challenge #19" + , ["60715683005,-281312897"] = "Racer Challenge #20" +-- tech racer + , ["Border,19661006772,-975391975"] = "Tech Racer #1" + , ["Border,19661306766,-975391975"] = "Tech Racer #2" + , ["Border,19661606760,-975391975"] = "Tech Racer #3" + , ["Border,19661906754,-975391975"] = "Tech Racer #4" + , ["Border,19662206748,-975391975"] = "Tech Racer #5" + , ["Border,19662506742,-975391975"] = "Tech Racer #6" + , ["Border,19662806736,-975391975"] = "Tech Racer #7" + , ["Border,19663106730,-975391975"] = "Tech Racer #8" +} diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Scripts/OfficialChallenges.lua --- a/share/hedgewars/Data/Scripts/OfficialChallenges.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Scripts/OfficialChallenges.lua Mon Sep 24 11:18:48 2018 -0400 @@ -1,34 +1,4 @@ -local maps = { - ["Border,60526986531,M838018718Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #1" - , ["Border,71022545335,M-490229244Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #2" - , ["Border,40469748943,M806689586Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #3" - , ["85940488650,M-134869715Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #4" - , ["62080348735,M-661895109Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #5" - , ["56818170733,M479034891Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #6" - , ["Border,25372705797,M1770509913Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #7" - , ["Border,10917540013,M1902370941Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #8" - , ["Border,43890274319,M185940363Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #9" - , ["Border,27870148394,M751885839Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #10" - , ["Border,22647869226,M178845011Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #11" - , ["Border,46954401793,M706743197Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #12" - , ["Border,60760377667,M157242054Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #13" - , ["Border,51825989393,M-1585582638Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #14" - , ["81841189250,M256715557Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #15" - , ["Border,44246064625,M-528106034Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #16" - , ["60906776802,M-1389184823Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #17" - , ["Border,70774747774,M-534640804Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #18" - , ["Border,50512019610,M-1839546856Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #19" - , ["60715683005,M-281312897Scripts/Multiplayer/Racer.lua"] = "Racer Challenge #20" --- tech racer - , ["Border,19661006772,M-975391975Scripts/Multiplayer/TechRacer.lua"] = "Tech Racer #1" - , ["Border,19661306766,M-975391975Scripts/Multiplayer/TechRacer.lua"] = "Tech Racer #2" - , ["Border,19661606760,M-975391975Scripts/Multiplayer/TechRacer.lua"] = "Tech Racer #3" - , ["Border,19661906754,M-975391975Scripts/Multiplayer/TechRacer.lua"] = "Tech Racer #4" - , ["Border,19662206748,M-975391975Scripts/Multiplayer/TechRacer.lua"] = "Tech Racer #5" - , ["Border,19662506742,M-975391975Scripts/Multiplayer/TechRacer.lua"] = "Tech Racer #6" - , ["Border,19662806736,M-975391975Scripts/Multiplayer/TechRacer.lua"] = "Tech Racer #7" - , ["Border,19663106730,M-975391975Scripts/Multiplayer/TechRacer.lua"] = "Tech Racer #8" - } +HedgewarsScriptLoad("/Scripts/OfficialChallengeHashes.lua") -- modified Adler hash local hashA = 0 @@ -58,6 +28,6 @@ end --WriteLnToConsole(mapString) - return(maps[mapString]) + return(official_racer_maps[mapString]) end end diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Scripts/SpeedShoppa.lua --- a/share/hedgewars/Data/Scripts/SpeedShoppa.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Scripts/SpeedShoppa.lua Mon Sep 24 11:18:48 2018 -0400 @@ -175,7 +175,7 @@ local time = startTime - endTime SendStat(siPlayerKills, tostring(time), params.teamName) SendStat(siCustomAchievement, string.format(loc("You have finished the challenge in %.3f s."), (time/1000))) - TurnTimeLeft = 0 + SetTurnTimeLeft(0) else SendStat(siGameResult, loc("Challenge failed!")) SendStat(siPointType, loc("crate(s)")) diff -r 54725a1d1db8 -r 1f15b0ee8e34 share/hedgewars/Data/Scripts/TargetPractice.lua --- a/share/hedgewars/Data/Scripts/TargetPractice.lua Mon Sep 24 11:16:08 2018 -0400 +++ b/share/hedgewars/Data/Scripts/TargetPractice.lua Mon Sep 24 11:18:48 2018 -0400 @@ -208,7 +208,7 @@ generateStats() EndGame() else - TurnTimeLeft = time_goal + SetTurnTimeLeft(time_goal) end end_timer = end_timer - 20 end