# 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 @@ res/StatsMostSelfDamage.png res/StatsSelfKilled.png res/StatsSkipped.png + res/StatsEverAfter.png res/StatsCustomAchievement.png res/Start.png res/mapRandom.png 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 = ""; @@ -353,9 +360,10 @@ kindOfPoints = QString(""); } - message = QString("

%1 %2. %3 ").arg(image, QString::number(playerPosition), playername, clanColor.name()) + killstring + "

"; + message = QString("

%1 %2. %3 ").arg(image, QString::number(realPlayerPosition), playername, clanColor.name()) + killstring + "

"; 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 = "

" + 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.") + "

"; + 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 > healthPoints; unsigned int playerPosition; + unsigned int scriptPlayerPosition; quint32 lastColor; bool defaultGraphTitle; QScopedPointer 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 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 : 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 " + 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 : 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 : Save room configuration into a file", - loc "/loadroom : Load room configuration from a file", - -- TODO: Add help for /delete - loc "/delete " + loc "/save : Add current room configuration as votable choice for /callvote map", + loc "/delete : Delete a votable room configuration", + loc "/saveroom : Save all votable room configurations (and the greeting) of this room into a file", + loc "/loadroom : 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 [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 [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 : Set the path to the system game data folder'); + WriteLn(stdout, ' --user-prefix : Set the path to the custom data folder to find game content'); + WriteLn(stdout, ' --locale : Set the game language (en.txt for example)'); + WriteLn(stdout, ''); + WriteLn(stdout, 'Graphics:'); + WriteLn(stdout, ' --width : Set game window width'); + WriteLn(stdout, ' --height : Set game window height'); + WriteLn(stdout, ' --fullscreen: Start in fullscreen'); + WriteLn(stdout, ' --fullscreen-width : Set fullscreen width'); + WriteLn(stdout, ' --fullscreen-height : 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 : 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 : Set user nickname'); + WriteLn(stdout, ' --help: Show a list of command-line options and exit'); + WriteLn(stdout, ''); + Writeln(stdout, 'Advanced options:'); + Writeln(stdout, ' --stereo : Set stereoscopic rendering (1 to 14)'); + WriteLn(stdout, ' --frame-interval : Set minimum interval (in ms) between each frame. Eg, 40 would make the game run at most 25 fps'); + WriteLn(stdout, ' --raw-quality : 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 : 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4123,10 +4127,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4147,10 +4147,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4167,18 +4163,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4191,14 +4175,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4230,5 +4206,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4159,10 +4163,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4183,10 +4183,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4203,18 +4199,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4227,14 +4211,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4266,5 +4242,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4233,10 +4237,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4257,10 +4257,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4277,18 +4273,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4301,14 +4285,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4340,5 +4316,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4229,10 +4233,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4253,10 +4253,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4273,18 +4269,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4297,14 +4281,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4336,5 +4312,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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. 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 @@ PageAdmin Clear Accounts Cache - Zwischenspeicher leeren + Konten-Zwischenspeicher leeren Fetch data @@ -1228,7 +1228,7 @@ Expiration - Ablaufzeitpunkt + Ablaufzeit Reason @@ -1545,6 +1545,10 @@ <b>%1</b> erledigte <b>%2</b> der eigenen Igel. + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + 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. + PageInGame @@ -4732,7 +4736,7 @@ /rnd: Flip a virtual coin and reply with 'heads' or 'tails' - /rnd: Wirft eine virtuelle Münze und antwortet mit »heads« oder »tails« + /rnd: Wirft eine virtuelle Münze und antwortet mit »Kopf« oder »Zahl« /rnd [A] [B] [C] [...]: Reply with a random word from the given list @@ -4756,7 +4760,7 @@ /greeting <message>: Set greeting message to be shown to players who join the room - /greeting <Nachricht>: Begrüßungsnachricht für Spieler, die diesen Raum betreten, setzen + /greeting <Nachricht>: Begrüßungsnachricht für Spieler, die diesen Raum betreten, setzen /delegate <player>: Surrender room control to player @@ -4780,7 +4784,7 @@ /save <parameter> - /save <Parameter> + /save <Parameter> /stats: Query server stats @@ -4800,15 +4804,15 @@ /saveroom <file name>: Save room configuration into a file - /saveroom <Dateiname>: Raumeinstellungen in eine Datei speichern + /saveroom <Dateiname>: Raumeinstellungen in eine Datei speichern /loadroom <file name>: Load room configuration from a file - /loadroom <Dateiname>: Raumeinstellungen aus einer Datei laden + /loadroom <Dateiname>: Raumeinstellungen aus einer Datei laden /delete <parameter> - /delete <Parameter> + /delete <Parameter> List of lobby chat commands: @@ -4824,11 +4828,11 @@ Unknown command: - Unbekannter Befehl + Unbekannter Befehl Say '/help' in chat for a list of commands - Sag »/help« im Chat für eine Liste von Befehlen + Sag »/help« im Chat für eine Liste von Befehlen room @@ -4862,5 +4866,97 @@ Kicked Hinausgeworfen + + This server only allows registered users to join. + Dieser Server lässt nur registrierte Server rein. + + + heads + Kopf + + + tails + Zahl + + + This server does not support replays! + Dieser Server unterstützt keine Wiederholungen! + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + /greeting [Nachricht]: Setze oder leere die Begrüßungsnachricht für Spieler, die den Raum betreten + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + /save <Konfig-ID> <Konfig-Name>: Aktuelle Raumeinstellung als Wahloption für /callvote map hinzufügen + + + /delete <config ID>: Delete a votable room configuration + /delete <Konfig-ID>: Eine wählbare Raumeinstellung löschen + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + /saveroom <Dateiname>: Alle wählbaren Raumeinstellungen (und die Begrüßung) dieses Raums in eine Datei speichern + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + /loadroom <Dateiname>: Wählbare Raumeinstellungen (und Begrüßung) aus einer Datei laden + + + 'Registered only' state toggled. + »Registered only«-Zustand umgeschaltet. + + + Super power activated. + Superkraft aktiviert. + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + Unbekannter Befehl oder ungültige Parameter. Sag »/help« im Chat für eine Liste an Befehlen. + + + You can't kick yourself! + Du kannst dich nicht selbst hinauswerfen! + + + You can't kick the only other player! + Du kannst nicht den einzigen anderen Spieler hinauswerfen! + + + The player is not in your room. + Der Spieler befindet sich nicht in deinem Raum. + + + This player is protected from being kicked. + Dieser Spieler wird vor Hinauswürfen geschützt. + + + You're not the room master or a server admin! + Du bist nicht der Raumleiter oder ein Server-Admin! + + + You're already the room master. + Du bist bereits der Raumleiter. + + + Greeting message cleared. + Begrüßungsnachricht geleert. + + + Greeting message set. + Begrüßungsnachricht gesetzt. + + + /callvote kick: This is only allowed in rooms without a room master. + /callvote kick: Dies ist nur in Räumen ohne Raumleiter erlaubt. + + + /callvote map: No maps available. + /callvote map: Keine Karten verfügbar. + + + You're the new room master! + Du bist der neue Raumleiter! + 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4207,10 +4211,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4231,10 +4231,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4251,18 +4247,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4275,14 +4259,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4314,5 +4290,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ <b>%1</b> killed <b>%2</b> of their own hedgehogs. + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + PageInGame @@ -4540,7 +4544,7 @@ /greeting <message>: Set greeting message to be shown to players who join the room - /greeting <message>: Set greeting message to be shown to players who join the room + /greeting <message>: Set greeting message to be shown to players who join the room /delegate <player>: Surrender room control to player @@ -4564,7 +4568,7 @@ /save <parameter> - /save <parameter> + /save <parameter> /stats: Query server stats @@ -4584,15 +4588,15 @@ /saveroom <file name>: Save room configuration into a file - /saveroom <file name>: Save room configuration into a file + /saveroom <file name>: Save room configuration into a file /loadroom <file name>: Load room configuration from a file - /loadroom <file name>: Load room configuration from a file + /loadroom <file name>: Load room configuration from a file /delete <parameter> - /delete <parameter> + /delete <parameter> List of lobby chat commands: @@ -4608,11 +4612,11 @@ Unknown command: - Unknown command: + Unknown command: Say '/help' in chat for a list of commands - Say ‘/help’ in chat for a list of commands + Say ‘/help’ in chat for a list of commands room @@ -4646,5 +4650,97 @@ Kicked Kicked + + This server only allows registered users to join. + This server only allows registered users to join. + + + heads + heads + + + tails + tails + + + This server does not support replays! + This server does not support replays! + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + /delete <config ID>: Delete a votable room configuration + /delete <config ID>: Delete a votable room configuration + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + 'Registered only' state toggled. + ‘Registered only’ state toggled. + + + Super power activated. + Super power activated. + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + Unknown command or invalid parameters. Say ‘/help’ in chat for a list of commands. + + + You can't kick yourself! + You can’t kick yourself! + + + You can't kick the only other player! + You can’t kick the only other player! + + + The player is not in your room. + The player is not in your room. + + + This player is protected from being kicked. + This player is protected from being kicked. + + + You're not the room master or a server admin! + You’re not the room master or a server admin! + + + You're already the room master. + You’re already the room master. + + + Greeting message cleared. + Greeting message cleared. + + + Greeting message set. + Greeting message set. + + + /callvote kick: This is only allowed in rooms without a room master. + /callvote kick: This is only allowed in rooms without a room master. + + + /callvote map: No maps available. + /callvote map: No maps available. + + + You're the new room master! + You’re the new room master! + 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4225,10 +4229,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4249,10 +4249,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4269,18 +4265,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4293,14 +4277,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4332,5 +4308,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4425,10 +4429,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4449,10 +4449,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4469,18 +4465,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4493,14 +4477,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4532,5 +4508,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ <b>%1</b> a tué <b>%2</b> de ses propres hérissons. + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4607,10 +4611,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4631,10 +4631,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4651,18 +4647,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4675,14 +4659,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4714,5 +4690,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4473,10 +4477,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4497,10 +4497,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4517,18 +4513,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4541,14 +4525,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4580,5 +4556,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4150,10 +4154,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4174,10 +4174,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4194,18 +4190,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4218,14 +4202,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4257,5 +4233,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4140,10 +4144,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4164,10 +4164,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4184,18 +4180,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4208,14 +4192,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4247,5 +4223,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4479,10 +4483,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4503,10 +4503,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4523,18 +4519,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4547,14 +4531,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4586,5 +4562,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ <b>%1</b>は自分の針鼠を<b>%2</b>匹犠牲にしました。 + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4086,10 +4090,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4110,10 +4110,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4130,18 +4126,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4154,14 +4138,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4193,5 +4169,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -3981,10 +3985,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4005,10 +4005,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4025,18 +4021,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4049,14 +4033,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4088,5 +4064,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ - - + + Cannot save record to file %1 - + Hedgewars Demo File File Types - + Hedgewars Save File File Types - + Demo name - + Demo name: - + Unknown network error (possibly missing SSL library). - + This feature requires an Internet connection, but you don't appear to be online (error code: %1). - + Internal error: Reply object is invalid. @@ -1011,17 +1011,17 @@ - + Server authentication error - + Room destroyed - + You got kicked @@ -1041,24 +1041,24 @@ - - + + %1 *** %2 has joined the room - + %1 *** %2 has left - + %1 *** %2 has left (message: "%3") - - + + %1 *** %2 has left (%3) @@ -1546,7 +1546,7 @@ - + Health graph @@ -1566,7 +1566,7 @@ - + The best shot award was won by <b>%1</b> with <b>%2</b> pts. @@ -1575,7 +1575,7 @@ - + The best killer is <b>%1</b> with <b>%2</b> kills in a turn. @@ -1584,7 +1584,7 @@ - + A total of <b>%1</b> hedgehog(s) were killed during this round. @@ -1593,7 +1593,7 @@ - + (%1 kill) Number of kills in stats screen, written after the team name @@ -1603,7 +1603,7 @@ - + (%1 %2) 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” @@ -1613,7 +1613,7 @@ - + <b>%1</b> thought it's good to shoot their own hedgehogs for <b>%2</b> pts. @@ -1622,7 +1622,7 @@ - + <b>%1</b> killed <b>%2</b> of their own hedgehogs. @@ -1631,7 +1631,7 @@ - + <b>%1</b> was scared and skipped turn <b>%2</b> times. @@ -1639,6 +1639,11 @@ + + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -1785,7 +1790,7 @@ - + Start fighting (requires at least 2 teams) @@ -2525,13 +2530,13 @@ - + %1 (%2%) - %3 Video encoding list entry. %1 = file name, %2 = percent complete, %3 = video operation type (e.g. “encoding”) - + encoding @@ -2929,7 +2934,7 @@ - + Playing teams @@ -3321,12 +3326,12 @@ - + Not all players are ready - + Are you sure you want to start this game? Not all players are ready. @@ -3359,18 +3364,18 @@ - + Hedgewars - Success - + All file associations have been set - + File association failed. @@ -3401,7 +3406,7 @@ - + Netgame - Error @@ -3411,7 +3416,7 @@ - + Please enter room name @@ -3462,18 +3467,18 @@ - - + + Videos - Are you sure? - + Do you really want to delete the video '%1'? - + Do you really want to remove %1 file(s)? @@ -3906,7 +3911,7 @@ TeamSelWidget - + At least two teams are required to play! @@ -4681,447 +4686,527 @@ server - + New voting started - + kick - + map - + pause - + new seed - + /maxteams: specify number from 2 to 8 - + + 'Registered only' state toggled. + + + + + Super power activated. + + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs - - Nickname is already in use - - - - No checker rights + Nickname is already in use - Authentication failed + This server only allows registered users to join. - 60 seconds cooldown after kick + No checker rights - Kicked + Authentication failed - kicked + 60 seconds cooldown after kick - Reconnected too fast + Kicked - Ping timeout + kicked - /info <player>: Show info about player + Reconnected too fast - /me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza' + Ping timeout - /rnd: Flip a virtual coin and reply with 'heads' or 'tails' + heads - /rnd [A] [B] [C] [...]: Reply with a random word from the given list + tails - /watch <id>: Watch a demo stored on the server with the given ID + This server does not support replays! - /help: Show chat command help + /info <player>: Show info about player - /callvote [arguments]: Start a vote + /me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza' - /vote <yes/no>: Vote 'yes' or 'no' for active vote + /rnd: Flip a virtual coin and reply with 'heads' or 'tails' - /greeting <message>: Set greeting message to be shown to players who join the room + /rnd [A] [B] [C] [...]: Reply with a random word from the given list - /delegate <player>: Surrender room control to player + /watch <id>: Watch a demo stored on the server with the given ID - /maxteams <N>: Limit maximum number of teams to N + /help: Show chat command help - /global <message>: Send global chat message which can be seen by everyone on the server + /callvote [arguments]: Start a vote - /registered_only: Toggle 'registered only' state. If enabled, only registered players can join server - - - - - /super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server + /vote <yes/no>: Vote 'yes' or 'no' for active vote - /save <parameter> + /delegate <player>: Surrender room control to player - /stats: Query server stats + /maxteams <N>: Limit maximum number of teams to N - /force <yes/no>: Force vote result for active vote + /global <message>: Send global chat message which can be seen by everyone on the server - /fix: Force this room to stay open when it is empty + /registered_only: Toggle 'registered only' state. If enabled, only registered players can join server - /unfix: Undo the /fix command + /super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server - /saveroom <file name>: Save room configuration into a file + /stats: Query server stats - /loadroom <file name>: Load room configuration from a file + /force <yes/no>: Force vote result for active vote - /delete <parameter> + /fix: Force this room to stay open when it is empty + /unfix: Undo the /fix command + + + + List of lobby chat commands: - + List of room chat commands: - - Commands for server admins only: - - - - Unknown command: + Commands for server admins only: + + + + + room + + + + + lobby + + + + + (playing) + + + + + (spectating) + + + + + Player is not online. + + + + + The game can't be started with less than two clans! + + + + + Empty config entry. + + + + + Access denied. + + + + + You're not the room master! + + + + + Corrupted hedgehogs info! + + + + + Too many teams! + + + + + Too many hedgehogs! + + + + + There's already a team with same name in the list. + + + + + Joining not possible: Round is in progress. + + + + + This room currently does not allow adding new teams. + + + + + Error: The team you tried to remove does not exist. + + + + + You can't remove a team you don't own. + + + + + 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: $()*+?[]^{|} + + + + + A room with the same name already exists. + + + + + You can't kick yourself! + + + + + You can't kick the only other player! + + + + + The player is not in your room. + + + + + This player is protected from being kicked. + + + + + You're not the room master or a server admin! + + + + + You're already the room master. + + + + + Greeting message cleared. + + + + + Greeting message set. + + + + + /callvote kick: You need to specify a nickname. + + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + + /callvote kick: No such user! + + + + + /callvote map: No maps available. + + + + + /callvote map: No such map! + + + + + /callvote pause: No game in progress! + + + + + /callvote hedgehogs: Specify number from 1 to 8. + + + + + /force: Please use 'yes' or 'no'. + + + + + /vote: Please use 'yes' or 'no'. + + + + + 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: $()*+?[]^{|} + + + + + No such room. + + + + + Room version incompatible to your Hedgewars version! + + + + + Access denied. This room currently doesn't allow joining. + + + + + Access denied. This room is for registered users only. + + + + + You are banned from this room. + + + + + Nickname already provided. + + + + + 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: $()*+?[]^{|} + + + + + Protocol already known. + + + + + Bad number. + + + + + There's no voting going on. + + + + + You already have voted. + + + + + Your vote has been counted. + + + + + Voting closed. + + + + + Pause toggled. + + + + + Voting expired. + + + + + hedgehogs per team: + + + + + You're the new room master! - Say '/help' in chat for a list of commands + Warning! Chat flood protection activated + + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + + /delete <config ID>: Delete a votable room configuration + + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file - room + Excess flood - lobby + Game messages flood detected - 1 - (playing) - - - - - (spectating) - - - - - Player is not online. - - - - - The game can't be started with less than two clans! - - - - - Empty config entry. - - - - - Access denied. - - - - - You're not the room master! - - - - - Corrupted hedgehogs info! - - - - - Too many teams! - - - - - Too many hedgehogs! - - - - - There's already a team with same name in the list. - - - - - Joining not possible: Round is in progress. - - - - - This room currently does not allow adding new teams. - - - - - Error: The team you tried to remove does not exist. - - - - - You can't remove a team you don't own. - - - - - 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: $()*+?[]^{|} - - - - - A room with the same name already exists. - - - - - /callvote kick: You need to specify a nickname. - - - - - /callvote kick: No such user! - - - - - /callvote map: No such map! - - - - - /callvote pause: No game in progress! - - - - - /callvote hedgehogs: Specify number from 1 to 8. - - - - - /force: Please use 'yes' or 'no'. - - - - - /vote: Please use 'yes' or 'no'. - - - - - 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: $()*+?[]^{|} - - - - - No such room. - - - - - Room version incompatible to your Hedgewars version! - - - - - Access denied. This room currently doesn't allow joining. - - - - - Access denied. This room is for registered users only. - - - - - You are banned from this room. - - - - - Nickname already provided. - - - - - 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: $()*+?[]^{|} - - - - - Protocol already known. - - - - - Bad number. - - - - - There's no voting going on. - - - - - You already have voted. - - - - - Your vote has been counted. - - - - - Voting closed. - - - - - Pause toggled. - - - - - Voting expired. - - - - - hedgehogs per team: - - - - - Warning! Chat flood protection activated - - - - - Excess flood - - - - - Game messages flood detected - 1 - - - - Warning! Joins flood protection activated 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 @@ - - + + Cannot save record to file %1 - + Hedgewars Demo File File Types - + Hedgewars Save File File Types - + Demo name - + Demo name: - + Unknown network error (possibly missing SSL library). - + This feature requires an Internet connection, but you don't appear to be online (error code: %1). - + Internal error: Reply object is invalid. @@ -999,34 +999,34 @@ - + You got kicked - + Server authentication error - + %1 *** %2 has left - + %1 *** %2 has left (message: "%3") - - + + %1 *** %2 has left (%3) - - + + %1 *** %2 has joined the room @@ -1046,7 +1046,7 @@ - + Room destroyed @@ -1532,7 +1532,7 @@ - + Health graph @@ -1552,28 +1552,28 @@ - + The best shot award was won by <b>%1</b> with <b>%2</b> pts. - + The best killer is <b>%1</b> with <b>%2</b> kills in a turn. - + A total of <b>%1</b> hedgehog(s) were killed during this round. - + (%1 kill) Number of kills in stats screen, written after the team name @@ -1581,7 +1581,7 @@ - + (%1 %2) 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” @@ -1589,26 +1589,31 @@ - + <b>%1</b> thought it's good to shoot their own hedgehogs for <b>%2</b> pts. - + <b>%1</b> killed <b>%2</b> of their own hedgehogs. - + <b>%1</b> was scared and skipped turn <b>%2</b> times. + + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -1755,7 +1760,7 @@ - + Start fighting (requires at least 2 teams) @@ -2491,13 +2496,13 @@ - + %1 (%2%) - %3 Video encoding list entry. %1 = file name, %2 = percent complete, %3 = video operation type (e.g. “encoding”) - + encoding @@ -2905,7 +2910,7 @@ - + Playing teams @@ -3287,12 +3292,12 @@ - + Not all players are ready - + Are you sure you want to start this game? Not all players are ready. @@ -3325,24 +3330,24 @@ - + Hedgewars - Success - + All file associations have been set - + File association failed. - + Netgame - Error @@ -3352,7 +3357,7 @@ - + Please enter room name @@ -3403,18 +3408,18 @@ - - + + Videos - Are you sure? - + Do you really want to delete the video '%1'? - + Do you really want to remove %1 file(s)? @@ -3870,7 +3875,7 @@ TeamSelWidget - + At least two teams are required to play! @@ -4645,447 +4650,527 @@ server - + New voting started - + kick - + map - + pause - + new seed - + /maxteams: specify number from 2 to 8 - + + 'Registered only' state toggled. + + + + + Super power activated. + + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs - - Nickname is already in use - - - - No checker rights + Nickname is already in use - Authentication failed + This server only allows registered users to join. - 60 seconds cooldown after kick + No checker rights - Kicked + Authentication failed - kicked + 60 seconds cooldown after kick - Reconnected too fast + Kicked - Ping timeout + kicked - /info <player>: Show info about player + Reconnected too fast - /me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza' + Ping timeout - /rnd: Flip a virtual coin and reply with 'heads' or 'tails' + heads - /rnd [A] [B] [C] [...]: Reply with a random word from the given list + tails - /watch <id>: Watch a demo stored on the server with the given ID + This server does not support replays! - /help: Show chat command help + /info <player>: Show info about player - /callvote [arguments]: Start a vote + /me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza' - /vote <yes/no>: Vote 'yes' or 'no' for active vote + /rnd: Flip a virtual coin and reply with 'heads' or 'tails' - /greeting <message>: Set greeting message to be shown to players who join the room + /rnd [A] [B] [C] [...]: Reply with a random word from the given list - /delegate <player>: Surrender room control to player + /watch <id>: Watch a demo stored on the server with the given ID - /maxteams <N>: Limit maximum number of teams to N + /help: Show chat command help - /global <message>: Send global chat message which can be seen by everyone on the server + /callvote [arguments]: Start a vote - /registered_only: Toggle 'registered only' state. If enabled, only registered players can join server - - - - - /super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server + /vote <yes/no>: Vote 'yes' or 'no' for active vote - /save <parameter> + /delegate <player>: Surrender room control to player - /stats: Query server stats + /maxteams <N>: Limit maximum number of teams to N - /force <yes/no>: Force vote result for active vote + /global <message>: Send global chat message which can be seen by everyone on the server - /fix: Force this room to stay open when it is empty + /registered_only: Toggle 'registered only' state. If enabled, only registered players can join server - /unfix: Undo the /fix command + /super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server - /saveroom <file name>: Save room configuration into a file + /stats: Query server stats - /loadroom <file name>: Load room configuration from a file + /force <yes/no>: Force vote result for active vote - /delete <parameter> + /fix: Force this room to stay open when it is empty + /unfix: Undo the /fix command + + + + List of lobby chat commands: - + List of room chat commands: - - Commands for server admins only: - - - - Unknown command: + Commands for server admins only: + + + + + room + + + + + lobby + + + + + (playing) + + + + + (spectating) + + + + + Player is not online. + + + + + The game can't be started with less than two clans! + + + + + Empty config entry. + + + + + Access denied. + + + + + You're not the room master! + + + + + Corrupted hedgehogs info! + + + + + Too many teams! + + + + + Too many hedgehogs! + + + + + There's already a team with same name in the list. + + + + + Joining not possible: Round is in progress. + + + + + This room currently does not allow adding new teams. + + + + + Error: The team you tried to remove does not exist. + + + + + You can't remove a team you don't own. + + + + + 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: $()*+?[]^{|} + + + + + A room with the same name already exists. + + + + + You can't kick yourself! + + + + + You can't kick the only other player! + + + + + The player is not in your room. + + + + + This player is protected from being kicked. + + + + + You're not the room master or a server admin! + + + + + You're already the room master. + + + + + Greeting message cleared. + + + + + Greeting message set. + + + + + /callvote kick: You need to specify a nickname. + + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + + /callvote kick: No such user! + + + + + /callvote map: No maps available. + + + + + /callvote map: No such map! + + + + + /callvote pause: No game in progress! + + + + + /callvote hedgehogs: Specify number from 1 to 8. + + + + + /force: Please use 'yes' or 'no'. + + + + + /vote: Please use 'yes' or 'no'. + + + + + 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: $()*+?[]^{|} + + + + + No such room. + + + + + Room version incompatible to your Hedgewars version! + + + + + Access denied. This room currently doesn't allow joining. + + + + + Access denied. This room is for registered users only. + + + + + You are banned from this room. + + + + + Nickname already provided. + + + + + 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: $()*+?[]^{|} + + + + + Protocol already known. + + + + + Bad number. + + + + + There's no voting going on. + + + + + You already have voted. + + + + + Your vote has been counted. + + + + + Voting closed. + + + + + Pause toggled. + + + + + Voting expired. + + + + + hedgehogs per team: + + + + + You're the new room master! - Say '/help' in chat for a list of commands + Warning! Chat flood protection activated + + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + + /delete <config ID>: Delete a votable room configuration + + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file - room + Excess flood - lobby + Game messages flood detected - 1 - (playing) - - - - - (spectating) - - - - - Player is not online. - - - - - The game can't be started with less than two clans! - - - - - Empty config entry. - - - - - Access denied. - - - - - You're not the room master! - - - - - Corrupted hedgehogs info! - - - - - Too many teams! - - - - - Too many hedgehogs! - - - - - There's already a team with same name in the list. - - - - - Joining not possible: Round is in progress. - - - - - This room currently does not allow adding new teams. - - - - - Error: The team you tried to remove does not exist. - - - - - You can't remove a team you don't own. - - - - - 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: $()*+?[]^{|} - - - - - A room with the same name already exists. - - - - - /callvote kick: You need to specify a nickname. - - - - - /callvote kick: No such user! - - - - - /callvote map: No such map! - - - - - /callvote pause: No game in progress! - - - - - /callvote hedgehogs: Specify number from 1 to 8. - - - - - /force: Please use 'yes' or 'no'. - - - - - /vote: Please use 'yes' or 'no'. - - - - - 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: $()*+?[]^{|} - - - - - No such room. - - - - - Room version incompatible to your Hedgewars version! - - - - - Access denied. This room currently doesn't allow joining. - - - - - Access denied. This room is for registered users only. - - - - - You are banned from this room. - - - - - Nickname already provided. - - - - - 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: $()*+?[]^{|} - - - - - Protocol already known. - - - - - Bad number. - - - - - There's no voting going on. - - - - - You already have voted. - - - - - Your vote has been counted. - - - - - Voting closed. - - - - - Pause toggled. - - - - - Voting expired. - - - - - hedgehogs per team: - - - - - Warning! Chat flood protection activated - - - - - Excess flood - - - - - Game messages flood detected - 1 - - - - Warning! Joins flood protection activated 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -3999,10 +4003,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4023,10 +4023,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4043,18 +4039,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4067,14 +4051,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4106,5 +4082,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ <b>%1</b> zabili <b>%2</b> swoich jeży. + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4733,7 +4737,7 @@ /greeting <message>: Set greeting message to be shown to players who join the room - /greeting <wiadomość>: Ustaw wiadomość powitalną, która zostanie pokazana graczom dołączającym do pokoju + /greeting <wiadomość>: Ustaw wiadomość powitalną, która zostanie pokazana graczom dołączającym do pokoju /delegate <player>: Surrender room control to player @@ -4757,7 +4761,7 @@ /save <parameter> - /save <parametr> + /save <parametr> /stats: Query server stats @@ -4777,15 +4781,15 @@ /saveroom <file name>: Save room configuration into a file - /saveroom <nazwa pliku>: Zapisz konfigurację pokoju do pliku + /saveroom <nazwa pliku>: Zapisz konfigurację pokoju do pliku /loadroom <file name>: Load room configuration from a file - /loadroom <nazwa pliku>: Wczytaj konfigurację pokoju z pliku + /loadroom <nazwa pliku>: Wczytaj konfigurację pokoju z pliku /delete <parameter> - /delete <parametr> + /delete <parametr> List of lobby chat commands: @@ -4801,11 +4805,11 @@ Unknown command: - Nieznana komenda: + Nieznana komenda: Say '/help' in chat for a list of commands - Powiedz /help do czatu, by dostać listę komend + Powiedz /help do czatu, by dostać listę komend room @@ -4839,5 +4843,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4419,10 +4423,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4443,10 +4443,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4463,18 +4459,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4487,14 +4471,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4526,5 +4502,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4509,10 +4513,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4533,10 +4533,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4553,18 +4549,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4577,14 +4561,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4616,5 +4592,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4145,10 +4149,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4169,10 +4169,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4189,18 +4185,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4213,14 +4197,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4252,5 +4228,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4460,10 +4464,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4484,10 +4484,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4504,18 +4500,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4528,14 +4512,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4567,5 +4543,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4405,10 +4409,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4429,10 +4429,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4449,18 +4445,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4473,14 +4457,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4512,5 +4488,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4225,10 +4229,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4249,10 +4249,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4269,18 +4265,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4293,14 +4277,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4332,5 +4308,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4510,10 +4514,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4534,10 +4534,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4554,18 +4550,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4578,14 +4562,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4617,5 +4593,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4505,10 +4509,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4529,10 +4529,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4549,18 +4545,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4573,14 +4557,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4612,5 +4588,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ - + Hedgewars Demo File File Types - + Hedgewars Save File File Types - + Demo name - + Demo name: - + Unknown network error (possibly missing SSL library). - + This feature requires an Internet connection, but you don't appear to be online (error code: %1). - + Internal error: Reply object is invalid. - - + + Cannot save record to file %1 无法录入文件 %1 @@ -1022,29 +1022,29 @@ - + Server authentication error - + %1 *** %2 has left - + %1 *** %2 has left (message: "%3") - - + + %1 *** %2 has left (%3) - - + + %1 *** %2 has joined the room @@ -1053,12 +1053,12 @@ 退出原因: - + Room destroyed 房间损坏 - + You got kicked 被踢出 @@ -1551,7 +1551,7 @@ - + Health graph @@ -1571,28 +1571,28 @@ 保存 - + The best shot award was won by <b>%1</b> with <b>%2</b> pts. - + The best killer is <b>%1</b> with <b>%2</b> kills in a turn. - + A total of <b>%1</b> hedgehog(s) were killed during this round. - + (%1 kill) Number of kills in stats screen, written after the team name @@ -1600,7 +1600,7 @@ - + (%1 %2) 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” @@ -1608,26 +1608,31 @@ - + <b>%1</b> thought it's good to shoot their own hedgehogs for <b>%2</b> pts. - + <b>%1</b> killed <b>%2</b> of their own hedgehogs. - + <b>%1</b> was scared and skipped turn <b>%2</b> times. + + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -1769,7 +1774,7 @@ - + Start fighting (requires at least 2 teams) @@ -2522,13 +2527,13 @@ - + %1 (%2%) - %3 Video encoding list entry. %1 = file name, %2 = percent complete, %3 = video operation type (e.g. “encoding”) - + encoding @@ -2919,7 +2924,7 @@ 城堡模式 - + Playing teams 玩家队伍 @@ -3359,12 +3364,12 @@ 服务器连接丢失 - + Not all players are ready - + Are you sure you want to start this game? Not all players are ready. @@ -3397,24 +3402,24 @@ - + Hedgewars - Success - + All file associations have been set - + File association failed. - + Netgame - Error @@ -3424,7 +3429,7 @@ - + Please enter room name @@ -3475,18 +3480,18 @@ - - + + Videos - Are you sure? - + Do you really want to delete the video '%1'? - + Do you really want to remove %1 file(s)? @@ -3925,7 +3930,7 @@ TeamSelWidget - + At least two teams are required to play! @@ -4708,447 +4713,527 @@ server - + New voting started - + kick - + map - + pause 暂停 - + new seed - + /maxteams: specify number from 2 to 8 - + + 'Registered only' state toggled. + + + + + Super power activated. + + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs - - Nickname is already in use - - - - No checker rights + Nickname is already in use - Authentication failed + This server only allows registered users to join. - 60 seconds cooldown after kick + No checker rights - Kicked + Authentication failed - kicked + 60 seconds cooldown after kick - Reconnected too fast + Kicked - Ping timeout + kicked - /info <player>: Show info about player + Reconnected too fast - /me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza' + Ping timeout - /rnd: Flip a virtual coin and reply with 'heads' or 'tails' + heads - /rnd [A] [B] [C] [...]: Reply with a random word from the given list + tails - /watch <id>: Watch a demo stored on the server with the given ID + This server does not support replays! - /help: Show chat command help + /info <player>: Show info about player - /callvote [arguments]: Start a vote + /me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza' - /vote <yes/no>: Vote 'yes' or 'no' for active vote + /rnd: Flip a virtual coin and reply with 'heads' or 'tails' - /greeting <message>: Set greeting message to be shown to players who join the room + /rnd [A] [B] [C] [...]: Reply with a random word from the given list - /delegate <player>: Surrender room control to player + /watch <id>: Watch a demo stored on the server with the given ID - /maxteams <N>: Limit maximum number of teams to N + /help: Show chat command help - /global <message>: Send global chat message which can be seen by everyone on the server + /callvote [arguments]: Start a vote - /registered_only: Toggle 'registered only' state. If enabled, only registered players can join server - - - - - /super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server + /vote <yes/no>: Vote 'yes' or 'no' for active vote - /save <parameter> + /delegate <player>: Surrender room control to player - /stats: Query server stats + /maxteams <N>: Limit maximum number of teams to N - /force <yes/no>: Force vote result for active vote + /global <message>: Send global chat message which can be seen by everyone on the server - /fix: Force this room to stay open when it is empty + /registered_only: Toggle 'registered only' state. If enabled, only registered players can join server - /unfix: Undo the /fix command + /super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server - /saveroom <file name>: Save room configuration into a file + /stats: Query server stats - /loadroom <file name>: Load room configuration from a file + /force <yes/no>: Force vote result for active vote - /delete <parameter> + /fix: Force this room to stay open when it is empty + /unfix: Undo the /fix command + + + + List of lobby chat commands: - + List of room chat commands: - - Commands for server admins only: - - - - Unknown command: + Commands for server admins only: + + + + + room + + + + + lobby + + + + + (playing) + + + + + (spectating) + + + + + Player is not online. + + + + + The game can't be started with less than two clans! + + + + + Empty config entry. + + + + + Access denied. + + + + + You're not the room master! + + + + + Corrupted hedgehogs info! + + + + + Too many teams! + + + + + Too many hedgehogs! + + + + + There's already a team with same name in the list. + + + + + Joining not possible: Round is in progress. + + + + + This room currently does not allow adding new teams. + + + + + Error: The team you tried to remove does not exist. + + + + + You can't remove a team you don't own. + + + + + 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: $()*+?[]^{|} + + + + + A room with the same name already exists. + + + + + You can't kick yourself! + + + + + You can't kick the only other player! + + + + + The player is not in your room. + + + + + This player is protected from being kicked. + + + + + You're not the room master or a server admin! + + + + + You're already the room master. + + + + + Greeting message cleared. + + + + + Greeting message set. + + + + + /callvote kick: You need to specify a nickname. + + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + + /callvote kick: No such user! + + + + + /callvote map: No maps available. + + + + + /callvote map: No such map! + + + + + /callvote pause: No game in progress! + + + + + /callvote hedgehogs: Specify number from 1 to 8. + + + + + /force: Please use 'yes' or 'no'. + + + + + /vote: Please use 'yes' or 'no'. + + + + + 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: $()*+?[]^{|} + + + + + No such room. + + + + + Room version incompatible to your Hedgewars version! + + + + + Access denied. This room currently doesn't allow joining. + + + + + Access denied. This room is for registered users only. + + + + + You are banned from this room. + + + + + Nickname already provided. + + + + + 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: $()*+?[]^{|} + + + + + Protocol already known. + + + + + Bad number. + + + + + There's no voting going on. + + + + + You already have voted. + + + + + Your vote has been counted. + + + + + Voting closed. + + + + + Pause toggled. + + + + + Voting expired. + + + + + hedgehogs per team: + + + + + You're the new room master! - Say '/help' in chat for a list of commands + Warning! Chat flood protection activated + + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + + /delete <config ID>: Delete a votable room configuration + + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file - room + Excess flood - lobby + Game messages flood detected - 1 - (playing) - - - - - (spectating) - - - - - Player is not online. - - - - - The game can't be started with less than two clans! - - - - - Empty config entry. - - - - - Access denied. - - - - - You're not the room master! - - - - - Corrupted hedgehogs info! - - - - - Too many teams! - - - - - Too many hedgehogs! - - - - - There's already a team with same name in the list. - - - - - Joining not possible: Round is in progress. - - - - - This room currently does not allow adding new teams. - - - - - Error: The team you tried to remove does not exist. - - - - - You can't remove a team you don't own. - - - - - 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: $()*+?[]^{|} - - - - - A room with the same name already exists. - - - - - /callvote kick: You need to specify a nickname. - - - - - /callvote kick: No such user! - - - - - /callvote map: No such map! - - - - - /callvote pause: No game in progress! - - - - - /callvote hedgehogs: Specify number from 1 to 8. - - - - - /force: Please use 'yes' or 'no'. - - - - - /vote: Please use 'yes' or 'no'. - - - - - 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: $()*+?[]^{|} - - - - - No such room. - - - - - Room version incompatible to your Hedgewars version! - - - - - Access denied. This room currently doesn't allow joining. - - - - - Access denied. This room is for registered users only. - - - - - You are banned from this room. - - - - - Nickname already provided. - - - - - 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: $()*+?[]^{|} - - - - - Protocol already known. - - - - - Bad number. - - - - - There's no voting going on. - - - - - You already have voted. - - - - - Your vote has been counted. - - - - - Voting closed. - - - - - Pause toggled. - - - - - Voting expired. - - - - - hedgehogs per team: - - - - - Warning! Chat flood protection activated - - - - - Excess flood - - - - - Game messages flood detected - 1 - - - - Warning! Joins flood protection activated 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 @@ + + With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. + + PageInGame @@ -4473,10 +4477,6 @@ - /greeting <message>: Set greeting message to be shown to players who join the room - - - /delegate <player>: Surrender room control to player @@ -4497,10 +4497,6 @@ - /save <parameter> - - - /stats: Query server stats @@ -4517,18 +4513,6 @@ - /saveroom <file name>: Save room configuration into a file - - - - /loadroom <file name>: Load room configuration from a file - - - - /delete <parameter> - - - List of lobby chat commands: @@ -4541,14 +4525,6 @@ - Unknown command: - - - - Say '/help' in chat for a list of commands - - - room @@ -4580,5 +4556,97 @@ Kicked + + This server only allows registered users to join. + + + + heads + + + + tails + + + + This server does not support replays! + + + + /greeting [message]: Set or clear greeting message to be shown to players who join the room + + + + /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map + + + + /delete <config ID>: Delete a votable room configuration + + + + /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file + + + + /loadroom <file name>: Load votable room configurations (and greeting) from a file + + + + 'Registered only' state toggled. + + + + Super power activated. + + + + Unknown command or invalid parameters. Say '/help' in chat for a list of commands. + + + + You can't kick yourself! + + + + You can't kick the only other player! + + + + The player is not in your room. + + + + This player is protected from being kicked. + + + + You're not the room master or a server admin! + + + + You're already the room master. + + + + Greeting message cleared. + + + + Greeting message set. + + + + /callvote kick: This is only allowed in rooms without a room master. + + + + /callvote map: No maps available. + + + + You're the new room master! + + 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 @@ Denk an den Wind, denn Flammen und einige Waffen werden von ihm beeinflusst. Benutze einen Schweißbrenner, um Igel und Minen mit einem langen Zeitzünder zu schubsen. Wenn du mit einem Schweißbrenner in ein Pulverfass rennst, wirst du eine explosive Überraschung erleben. + Gib »/help« im Chat für eine Liste von Chatbefehlen ein. Chatbefehle bieten Zugriff auf ein paar besondere Funktionen wie Spott oder Abstimmungen. Du kannst deine Hedgewars-Einstellungsdateien unter »Eigene Dokumente\Hedgewars« finden. Erstelle Backups oder nimm die Dateien mit, aber bitte bearbeite sie nicht von Hand. 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 @@ Mind the wind, because flames and some projectiles are affected by wind. Use a blow torch to push hedgehogs and mines with a long timer. Running with a blow torch into a barrel is an explosive recipe for disaster! + Enter “/help” in chat for a list of chat commands. Chat commands give you access to some special features like taunts or voting. 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. 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